Merge 4.2-rc6 into staging-next
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 10 Aug 2015 16:07:25 +0000 (09:07 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 10 Aug 2015 16:07:25 +0000 (09:07 -0700)
We want the IIO and staging fixes in here as well.

Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
445 files changed:
Documentation/ABI/testing/sysfs-bus-iio
Documentation/fb/sm712fb.txt [new file with mode: 0644]
MAINTAINERS
drivers/iio/accel/bma180.c
drivers/iio/accel/bmc150-accel.c
drivers/iio/accel/kxcjk-1013.c
drivers/iio/accel/mma9551_core.c
drivers/iio/accel/mma9551_core.h
drivers/iio/accel/mma9553.c
drivers/iio/accel/st_accel_i2c.c
drivers/iio/accel/stk8312.c
drivers/iio/accel/stk8ba50.c
drivers/iio/adc/Kconfig
drivers/iio/adc/cc10001_adc.c
drivers/iio/adc/mcp3422.c
drivers/iio/adc/ti-adc081c.c
drivers/iio/common/ssp_sensors/ssp_dev.c
drivers/iio/dac/ad5064.c
drivers/iio/dac/ad5380.c
drivers/iio/dac/ad5446.c
drivers/iio/dac/max5821.c
drivers/iio/frequency/adf4350.c
drivers/iio/gyro/itg3200_core.c
drivers/iio/gyro/st_gyro_i2c.c
drivers/iio/humidity/si7005.c
drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
drivers/iio/industrialio-buffer.c
drivers/iio/industrialio-core.c
drivers/iio/industrialio-triggered-buffer.c
drivers/iio/light/Kconfig
drivers/iio/light/Makefile
drivers/iio/light/apds9300.c
drivers/iio/light/bh1750.c
drivers/iio/light/cm32181.c
drivers/iio/light/cm3232.c
drivers/iio/light/cm3323.c
drivers/iio/light/cm36651.c
drivers/iio/light/gp2ap020a00f.c
drivers/iio/light/hid-sensor-prox.c
drivers/iio/light/isl29125.c
drivers/iio/light/jsa1212.c
drivers/iio/light/ltr501.c
drivers/iio/light/rpr0521.c [new file with mode: 0644]
drivers/iio/light/tcs3414.c
drivers/iio/light/tcs3472.c
drivers/iio/light/tsl4531.c
drivers/iio/light/vcnl4000.c
drivers/iio/magnetometer/bmc150_magn.c
drivers/iio/magnetometer/st_magn_i2c.c
drivers/iio/pressure/Kconfig
drivers/iio/pressure/ms5611.h
drivers/iio/pressure/ms5611_core.c
drivers/iio/pressure/ms5611_i2c.c
drivers/iio/pressure/ms5611_spi.c
drivers/iio/pressure/st_pressure_i2c.c
drivers/iio/temperature/mlx90614.c
drivers/iio/temperature/tmp006.c
drivers/staging/Kconfig
drivers/staging/Makefile
drivers/staging/android/Kconfig
drivers/staging/android/ashmem.c
drivers/staging/android/ion/ion.c
drivers/staging/android/ion/ion_chunk_heap.c
drivers/staging/android/ion/ion_cma_heap.c
drivers/staging/android/ion/ion_page_pool.c
drivers/staging/android/ion/ion_system_heap.c
drivers/staging/android/timed_gpio.c
drivers/staging/comedi/Kconfig
drivers/staging/comedi/comedi_compat32.c
drivers/staging/comedi/comedi_fops.c
drivers/staging/comedi/drivers.c
drivers/staging/comedi/drivers/cb_pcimdas.c
drivers/staging/comedi/drivers/dac02.c
drivers/staging/comedi/drivers/das08_cs.c
drivers/staging/comedi/drivers/das16.c
drivers/staging/comedi/drivers/das16m1.c
drivers/staging/comedi/drivers/dmm32at.c
drivers/staging/comedi/drivers/fl512.c
drivers/staging/comedi/drivers/me4000.c
drivers/staging/comedi/drivers/ni_daq_dio24.c
drivers/staging/comedi/drivers/pcl816.c
drivers/staging/comedi/drivers/s626.c
drivers/staging/comedi/drivers/usbduxsigma.c
drivers/staging/comedi/range.c
drivers/staging/dgap/dgap.c
drivers/staging/dgnc/dgnc_driver.h
drivers/staging/fbtft/Kconfig
drivers/staging/fbtft/Makefile
drivers/staging/fbtft/fb_uc1611.c [new file with mode: 0644]
drivers/staging/fbtft/fbtft-core.c
drivers/staging/fbtft/fbtft.h
drivers/staging/fbtft/fbtft_device.c
drivers/staging/fbtft/flexfb.c
drivers/staging/fsl-mc/README.txt [new file with mode: 0644]
drivers/staging/fsl-mc/TODO
drivers/staging/ft1000/ft1000-usb/ft1000_debug.c
drivers/staging/ft1000/ft1000-usb/ft1000_download.c
drivers/staging/ft1000/ft1000-usb/ft1000_hw.c
drivers/staging/iio/addac/adt7316-i2c.c
drivers/staging/iio/iio_dummy_evgen.c
drivers/staging/iio/iio_simple_dummy.c
drivers/staging/iio/iio_simple_dummy.h
drivers/staging/iio/iio_simple_dummy_buffer.c
drivers/staging/iio/iio_simple_dummy_events.c
drivers/staging/iio/light/isl29018.c
drivers/staging/iio/light/isl29028.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/libcfs/libcfs_string.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/lnet/router_proc.c
drivers/staging/lustre/lnet/selftest/framework.c
drivers/staging/lustre/lustre/fid/fid_request.c
drivers/staging/lustre/lustre/fld/fld_cache.c
drivers/staging/lustre/lustre/fld/fld_request.c
drivers/staging/lustre/lustre/include/linux/lustre_compat25.h
drivers/staging/lustre/lustre/include/linux/lustre_patchless_compat.h
drivers/staging/lustre/lustre/include/lustre_net.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/lclient/lcommon_cl.c
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_resource.c
drivers/staging/lustre/lustre/libcfs/debug.c
drivers/staging/lustre/lustre/libcfs/fail.c
drivers/staging/lustre/lustre/libcfs/libcfs_cpu.c
drivers/staging/lustre/lustre/libcfs/libcfs_string.c
drivers/staging/lustre/lustre/libcfs/linux/linux-crypto.c
drivers/staging/lustre/lustre/libcfs/linux/linux-module.c
drivers/staging/lustre/lustre/libcfs/module.c
drivers/staging/lustre/lustre/libcfs/tracefile.c
drivers/staging/lustre/lustre/libcfs/tracefile.h
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/llite_capa.c
drivers/staging/lustre/lustre/llite/llite_lib.c
drivers/staging/lustre/lustre/llite/lloop.c
drivers/staging/lustre/lustre/llite/namei.c
drivers/staging/lustre/lustre/llite/vvp_io.c
drivers/staging/lustre/lustre/llite/vvp_page.c
drivers/staging/lustre/lustre/llite/xattr_cache.c
drivers/staging/lustre/lustre/lmv/lmv_intent.c
drivers/staging/lustre/lustre/lmv/lmv_obd.c
drivers/staging/lustre/lustre/lov/lov_dev.c
drivers/staging/lustre/lustre/lov/lov_io.c
drivers/staging/lustre/lustre/lov/lov_merge.c
drivers/staging/lustre/lustre/lov/lov_obd.c
drivers/staging/lustre/lustre/lov/lov_pool.c
drivers/staging/lustre/lustre/lov/lov_request.c
drivers/staging/lustre/lustre/mdc/mdc_lib.c
drivers/staging/lustre/lustre/mdc/mdc_request.c
drivers/staging/lustre/lustre/mgc/mgc_request.c
drivers/staging/lustre/lustre/obdclass/acl.c
drivers/staging/lustre/lustre/obdclass/cl_page.c
drivers/staging/lustre/lustre/obdclass/class_obd.c
drivers/staging/lustre/lustre/obdclass/genops.c
drivers/staging/lustre/lustre/obdclass/linux/linux-module.c
drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c
drivers/staging/lustre/lustre/obdclass/llog.c
drivers/staging/lustre/lustre/obdclass/lprocfs_status.c
drivers/staging/lustre/lustre/obdclass/lu_object.c
drivers/staging/lustre/lustre/obdclass/lustre_peer.c
drivers/staging/lustre/lustre/obdclass/obd_config.c
drivers/staging/lustre/lustre/obdclass/obd_mount.c
drivers/staging/lustre/lustre/obdclass/uuid.c
drivers/staging/lustre/lustre/obdecho/echo_client.c
drivers/staging/lustre/lustre/osc/osc_cache.c
drivers/staging/lustre/lustre/osc/osc_dev.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/events.c
drivers/staging/lustre/lustre/ptlrpc/import.c
drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c
drivers/staging/lustre/lustre/ptlrpc/nrs.c
drivers/staging/lustre/lustre/ptlrpc/pinger.c
drivers/staging/lustre/lustre/ptlrpc/ptlrpc_module.c
drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c
drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c
drivers/staging/lustre/lustre/ptlrpc/sec_config.c
drivers/staging/lustre/lustre/ptlrpc/sec_plain.c
drivers/staging/lustre/lustre/ptlrpc/service.c
drivers/staging/lustre/sysfs-fs-lustre
drivers/staging/most/Documentation/ABI/sysfs-class-most.txt [new file with mode: 0644]
drivers/staging/most/Documentation/driver_usage.txt [new file with mode: 0644]
drivers/staging/most/Kconfig [new file with mode: 0644]
drivers/staging/most/Makefile [new file with mode: 0644]
drivers/staging/most/TODO [new file with mode: 0644]
drivers/staging/most/aim-cdev/Kconfig [new file with mode: 0644]
drivers/staging/most/aim-cdev/Makefile [new file with mode: 0644]
drivers/staging/most/aim-cdev/cdev.c [new file with mode: 0644]
drivers/staging/most/aim-network/Kconfig [new file with mode: 0644]
drivers/staging/most/aim-network/Makefile [new file with mode: 0644]
drivers/staging/most/aim-network/networking.c [new file with mode: 0644]
drivers/staging/most/aim-network/networking.h [new file with mode: 0644]
drivers/staging/most/aim-sound/Kconfig [new file with mode: 0644]
drivers/staging/most/aim-sound/Makefile [new file with mode: 0644]
drivers/staging/most/aim-sound/sound.c [new file with mode: 0644]
drivers/staging/most/aim-v4l2/Kconfig [new file with mode: 0644]
drivers/staging/most/aim-v4l2/Makefile [new file with mode: 0644]
drivers/staging/most/aim-v4l2/video.c [new file with mode: 0644]
drivers/staging/most/hdm-dim2/Kconfig [new file with mode: 0644]
drivers/staging/most/hdm-dim2/Makefile [new file with mode: 0644]
drivers/staging/most/hdm-dim2/dim2_errors.h [new file with mode: 0644]
drivers/staging/most/hdm-dim2/dim2_hal.c [new file with mode: 0644]
drivers/staging/most/hdm-dim2/dim2_hal.h [new file with mode: 0644]
drivers/staging/most/hdm-dim2/dim2_hdm.c [new file with mode: 0644]
drivers/staging/most/hdm-dim2/dim2_hdm.h [new file with mode: 0644]
drivers/staging/most/hdm-dim2/dim2_reg.h [new file with mode: 0644]
drivers/staging/most/hdm-dim2/dim2_sysfs.c [new file with mode: 0644]
drivers/staging/most/hdm-dim2/dim2_sysfs.h [new file with mode: 0644]
drivers/staging/most/hdm-i2c/Kconfig [new file with mode: 0644]
drivers/staging/most/hdm-i2c/Makefile [new file with mode: 0644]
drivers/staging/most/hdm-i2c/hdm_i2c.c [new file with mode: 0644]
drivers/staging/most/hdm-usb/Kconfig [new file with mode: 0644]
drivers/staging/most/hdm-usb/Makefile [new file with mode: 0644]
drivers/staging/most/hdm-usb/hdm_usb.c [new file with mode: 0644]
drivers/staging/most/mostcore/Kconfig [new file with mode: 0644]
drivers/staging/most/mostcore/Makefile [new file with mode: 0644]
drivers/staging/most/mostcore/core.c [new file with mode: 0644]
drivers/staging/most/mostcore/mostcore.h [new file with mode: 0644]
drivers/staging/mt29f_spinand/mt29f_spinand.c
drivers/staging/netlogic/platform_net.c
drivers/staging/octeon/ethernet-rgmii.c
drivers/staging/octeon/ethernet-tx.c
drivers/staging/octeon/ethernet.c
drivers/staging/ozwpan/ozusbsvc1.c
drivers/staging/panel/panel.c
drivers/staging/rtl8188eu/core/rtw_ap.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_security.c
drivers/staging/rtl8188eu/core/rtw_wlan_util.c
drivers/staging/rtl8188eu/core/rtw_xmit.c
drivers/staging/rtl8188eu/hal/bb_cfg.c
drivers/staging/rtl8188eu/hal/hal_com.c
drivers/staging/rtl8188eu/hal/hal_intf.c
drivers/staging/rtl8188eu/hal/odm.c
drivers/staging/rtl8188eu/hal/rf.c
drivers/staging/rtl8188eu/hal/rf_cfg.c
drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c
drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c
drivers/staging/rtl8188eu/hal/usb_halinit.c
drivers/staging/rtl8188eu/include/HalVerDef.h
drivers/staging/rtl8188eu/include/hal_intf.h
drivers/staging/rtl8188eu/include/ieee80211.h
drivers/staging/rtl8188eu/include/recv_osdep.h
drivers/staging/rtl8188eu/include/rtl8188e_cmd.h
drivers/staging/rtl8188eu/include/rtl8188e_hal.h
drivers/staging/rtl8188eu/include/rtw_mlme.h
drivers/staging/rtl8188eu/include/rtw_pwrctrl.h
drivers/staging/rtl8188eu/include/sta_info.h
drivers/staging/rtl8188eu/include/wifi.h
drivers/staging/rtl8188eu/os_dep/ioctl_linux.c
drivers/staging/rtl8188eu/os_dep/os_intfs.c
drivers/staging/rtl8188eu/os_dep/recv_linux.c
drivers/staging/rtl8188eu/os_dep/usb_intf.c
drivers/staging/rtl8192e/dot11d.c
drivers/staging/rtl8192e/dot11d.h
drivers/staging/rtl8192e/rtl8192e/r8190P_def.h
drivers/staging/rtl8192e/rtl8192e/r8190P_rtl8256.c
drivers/staging/rtl8192e/rtl8192e/r8190P_rtl8256.h
drivers/staging/rtl8192e/rtl8192e/r8192E_cmdpkt.c
drivers/staging/rtl8192e/rtl8192e/r8192E_cmdpkt.h
drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c
drivers/staging/rtl8192e/rtl8192e/r8192E_dev.h
drivers/staging/rtl8192e/rtl8192e/r8192E_firmware.c
drivers/staging/rtl8192e/rtl8192e/r8192E_firmware.h
drivers/staging/rtl8192e/rtl8192e/r8192E_hw.h
drivers/staging/rtl8192e/rtl8192e/r8192E_phy.c
drivers/staging/rtl8192e/rtl8192e/r8192E_phy.h
drivers/staging/rtl8192e/rtl8192e/rtl_cam.c
drivers/staging/rtl8192e/rtl8192e/rtl_cam.h
drivers/staging/rtl8192e/rtl8192e/rtl_core.c
drivers/staging/rtl8192e/rtl8192e/rtl_core.h
drivers/staging/rtl8192e/rtl8192e/rtl_dm.c
drivers/staging/rtl8192e/rtl8192e/rtl_dm.h
drivers/staging/rtl8192e/rtl8192e/rtl_eeprom.c
drivers/staging/rtl8192e/rtl8192e/rtl_eeprom.h
drivers/staging/rtl8192e/rtl8192e/rtl_pci.c
drivers/staging/rtl8192e/rtl8192e/rtl_pci.h
drivers/staging/rtl8192e/rtl8192e/rtl_pm.c
drivers/staging/rtl8192e/rtl8192e/rtl_pm.h
drivers/staging/rtl8192e/rtl8192e/rtl_ps.c
drivers/staging/rtl8192e/rtl8192e/rtl_ps.h
drivers/staging/rtl8192e/rtl8192e/rtl_wx.c
drivers/staging/rtl8192e/rtl819x_BA.h
drivers/staging/rtl8192e/rtl819x_BAProc.c
drivers/staging/rtl8192e/rtl819x_HT.h
drivers/staging/rtl8192e/rtl819x_HTProc.c
drivers/staging/rtl8192e/rtl819x_Qos.h
drivers/staging/rtl8192e/rtl819x_TS.h
drivers/staging/rtl8192e/rtl819x_TSProc.c
drivers/staging/rtl8192e/rtllib.h
drivers/staging/rtl8192e/rtllib_debug.h
drivers/staging/rtl8192e/rtllib_rx.c
drivers/staging/rtl8192e/rtllib_softmac.c
drivers/staging/rtl8192e/rtllib_tx.c
drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
drivers/staging/rtl8192u/ieee80211/ieee80211_softmac_wx.c
drivers/staging/rtl8192u/ieee80211/ieee80211_tx.c
drivers/staging/rtl8192u/ieee80211/rtl819x_BAProc.c
drivers/staging/rtl8192u/ieee80211/rtl819x_HTProc.c
drivers/staging/rtl8192u/ieee80211/rtl819x_TSProc.c
drivers/staging/rtl8192u/r8192U_core.c
drivers/staging/rtl8192u/r8192U_dm.c
drivers/staging/rtl8192u/r819xU_firmware.c
drivers/staging/rtl8712/ieee80211.c
drivers/staging/rtl8712/rtl8712_recv.c
drivers/staging/rtl8712/rtl871x_cmd.c
drivers/staging/rtl8712/rtl871x_cmd.h
drivers/staging/rtl8712/rtl871x_event.h
drivers/staging/rtl8712/rtl871x_ioctl_linux.c
drivers/staging/rtl8712/rtl871x_mlme.c
drivers/staging/rtl8712/rtl871x_mlme.h
drivers/staging/rtl8712/rtl871x_mp_ioctl.c
drivers/staging/rtl8712/rtl871x_security.c
drivers/staging/rtl8712/wlan_bssdef.h
drivers/staging/rtl8723au/core/rtw_recv.c
drivers/staging/rtl8723au/hal/odm.c
drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c
drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c
drivers/staging/rts5208/ms.c
drivers/staging/rts5208/sd.c
drivers/staging/slicoss/slicoss.c
drivers/staging/sm750fb/ddk750_chip.c
drivers/staging/sm750fb/ddk750_chip.h
drivers/staging/sm750fb/ddk750_display.c
drivers/staging/sm750fb/ddk750_display.h
drivers/staging/sm750fb/ddk750_dvi.c
drivers/staging/sm750fb/ddk750_dvi.h
drivers/staging/sm750fb/ddk750_help.c
drivers/staging/sm750fb/ddk750_help.h
drivers/staging/sm750fb/ddk750_hwi2c.c
drivers/staging/sm750fb/ddk750_mode.c
drivers/staging/sm750fb/ddk750_mode.h
drivers/staging/sm750fb/ddk750_power.c
drivers/staging/sm750fb/ddk750_power.h
drivers/staging/sm750fb/ddk750_reg.h
drivers/staging/sm750fb/ddk750_sii164.c
drivers/staging/sm750fb/ddk750_sii164.h
drivers/staging/sm750fb/sm750.c
drivers/staging/sm750fb/sm750.h
drivers/staging/sm750fb/sm750_accel.c
drivers/staging/sm750fb/sm750_accel.h
drivers/staging/sm750fb/sm750_cursor.c
drivers/staging/sm750fb/sm750_help.h
drivers/staging/sm750fb/sm750_hw.c
drivers/staging/sm750fb/sm750_hw.h
drivers/staging/sm7xxfb/Kconfig [deleted file]
drivers/staging/sm7xxfb/Makefile [deleted file]
drivers/staging/sm7xxfb/TODO [deleted file]
drivers/staging/sm7xxfb/sm7xx.h [deleted file]
drivers/staging/sm7xxfb/sm7xxfb.c [deleted file]
drivers/staging/speakup/keyhelp.c
drivers/staging/ste_rmi4/synaptics_i2c_rmi4.c
drivers/staging/unisys/Kconfig
drivers/staging/unisys/include/channel_guid.h
drivers/staging/unisys/include/visorbus.h
drivers/staging/unisys/visorbus/controlvmchannel.h
drivers/staging/unisys/visorbus/controlvmcompletionstatus.h
drivers/staging/unisys/visorbus/iovmcall_gnuc.h
drivers/staging/unisys/visorbus/periodic_work.c
drivers/staging/unisys/visorbus/vbuschannel.h
drivers/staging/unisys/visorbus/vbusdeviceinfo.h
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/visornic/visornic_main.c
drivers/staging/vme/devices/vme_user.c
drivers/staging/vt6655/baseband.c
drivers/staging/vt6655/card.c
drivers/staging/vt6655/desc.h
drivers/staging/vt6655/device.h
drivers/staging/vt6655/device_cfg.h
drivers/staging/vt6655/device_main.c
drivers/staging/vt6655/dpc.c
drivers/staging/vt6655/mac.c
drivers/staging/vt6655/power.c
drivers/staging/vt6655/rf.c
drivers/staging/vt6655/rf.h
drivers/staging/vt6655/rxtx.c
drivers/staging/vt6655/rxtx.h
drivers/staging/vt6655/upc.h
drivers/staging/vt6656/rxtx.c
drivers/staging/wilc1000/Kconfig
drivers/staging/wilc1000/Makefile
drivers/staging/wilc1000/coreconfigsimulator.h [deleted file]
drivers/staging/wilc1000/coreconfigurator.c
drivers/staging/wilc1000/coreconfigurator.h
drivers/staging/wilc1000/fifo_buffer.c [deleted file]
drivers/staging/wilc1000/fifo_buffer.h [deleted file]
drivers/staging/wilc1000/host_interface.c
drivers/staging/wilc1000/host_interface.h
drivers/staging/wilc1000/linux_mon.c
drivers/staging/wilc1000/linux_wlan.c
drivers/staging/wilc1000/linux_wlan_sdio.c
drivers/staging/wilc1000/wilc_debugfs.c
drivers/staging/wilc1000/wilc_memory.c
drivers/staging/wilc1000/wilc_platform.h
drivers/staging/wilc1000/wilc_sdio.c
drivers/staging/wilc1000/wilc_spi.c
drivers/staging/wilc1000/wilc_strutils.c
drivers/staging/wilc1000/wilc_strutils.h
drivers/staging/wilc1000/wilc_wfi_cfgoperations.c
drivers/staging/wilc1000/wilc_wfi_netdevice.c [deleted file]
drivers/staging/wilc1000/wilc_wfi_netdevice.h
drivers/staging/wilc1000/wilc_wlan.c
drivers/staging/wilc1000/wilc_wlan_cfg.c
drivers/staging/wilc1000/wilc_wlan_if.h
drivers/staging/xgifb/Makefile
drivers/staging/xgifb/XGI_main_26.c
drivers/staging/xgifb/vb_util.c [deleted file]
drivers/staging/xgifb/vb_util.h
drivers/video/fbdev/Kconfig
drivers/video/fbdev/Makefile
drivers/video/fbdev/sm712.h [new file with mode: 0644]
drivers/video/fbdev/sm712fb.c [new file with mode: 0644]
include/linux/iio/triggered_buffer.h
tools/iio/generic_buffer.c
tools/iio/iio_event_monitor.c
tools/iio/iio_utils.c
tools/iio/iio_utils.h
tools/iio/lsiio.c

index 70c9b1ac66dbc5880c90312b47ba0b28669a77a6..b8753f74af67ded43df7a3153c2159687541fa4e 100644 (file)
@@ -413,6 +413,11 @@ Description:
                to compute the calories burnt by the user.
 
 What:          /sys/bus/iio/devices/iio:deviceX/in_accel_scale_available
+What:          /sys/.../iio:deviceX/in_anglvel_scale_available
+What:          /sys/.../iio:deviceX/in_magn_scale_available
+What:          /sys/.../iio:deviceX/in_illuminance_scale_available
+What:          /sys/.../iio:deviceX/in_intensity_scale_available
+What:          /sys/.../iio:deviceX/in_proximity_scale_available
 What:          /sys/.../iio:deviceX/in_voltageX_scale_available
 What:          /sys/.../iio:deviceX/in_voltage-voltage_scale_available
 What:          /sys/.../iio:deviceX/out_voltageX_scale_available
diff --git a/Documentation/fb/sm712fb.txt b/Documentation/fb/sm712fb.txt
new file mode 100644 (file)
index 0000000..c388442
--- /dev/null
@@ -0,0 +1,31 @@
+What is sm712fb?
+=================
+
+This is a graphics framebuffer driver for Silicon Motion SM712 based processors.
+
+How to use it?
+==============
+
+Switching modes is done using the video=sm712fb:... boot parameter.
+
+If you want, for example, enable a resolution of 1280x1024x24bpp you should
+pass to the kernel this command line: "video=sm712fb:0x31B".
+
+You should not compile-in vesafb.
+
+Currently supported video modes are:
+
+[Graphic modes]
+
+bpp | 640x480  800x600  1024x768  1280x1024
+----+--------------------------------------------
+  8 | 0x301    0x303    0x305    0x307
+ 16 | 0x311    0x314    0x317    0x31A
+ 24 | 0x312    0x315    0x318    0x31B
+
+Missing Features
+================
+(alias TODO list)
+
+       * 2D acceleratrion
+       * dual-head support
index a9ae6c105520011994801168a7841b4d713b716e..5ac00cb372567b7bfee943c09f2633034431d69f 100644 (file)
@@ -9328,6 +9328,15 @@ S:       Maintained
 F:     drivers/media/i2c/ov2659.c
 F:     include/media/ov2659.h
 
+SILICON MOTION SM712 FRAME BUFFER DRIVER
+M:     Sudip Mukherjee <sudipm.mukherjee@gmail.com>
+M:     Teddy Wang <teddy.wang@siliconmotion.com>
+M:     Sudip Mukherjee <sudip@vectorindia.org>
+L:     linux-fbdev@vger.kernel.org
+S:     Maintained
+F:     drivers/video/fbdev/sm712*
+F:     Documentation/fb/sm712fb.txt
+
 SIS 190 ETHERNET DRIVER
 M:     Francois Romieu <romieu@fr.zoreil.com>
 L:     netdev@vger.kernel.org
@@ -9748,14 +9757,6 @@ L:       linux-wireless@vger.kernel.org
 S:     Maintained
 F:     drivers/staging/rtl8723au/
 
-STAGING - SILICON MOTION SM7XX FRAME BUFFER DRIVER
-M:     Sudip Mukherjee <sudipm.mukherjee@gmail.com>
-M:     Teddy Wang <teddy.wang@siliconmotion.com>
-M:     Sudip Mukherjee <sudip@vectorindia.org>
-L:     linux-fbdev@vger.kernel.org
-S:     Maintained
-F:     drivers/staging/sm7xxfb/
-
 STAGING - SILICON MOTION SM750 FRAME BUFFER DRIVER
 M:     Sudip Mukherjee <sudipm.mukherjee@gmail.com>
 M:     Teddy Wang <teddy.wang@siliconmotion.com>
index 75c6d2103e07adad3b11919687e81f8dd7a8fca3..f04b88406995175bc5159a8f300295e33ec3df80 100644 (file)
@@ -846,7 +846,6 @@ MODULE_DEVICE_TABLE(i2c, bma180_ids);
 static struct i2c_driver bma180_driver = {
        .driver = {
                .name   = "bma180",
-               .owner  = THIS_MODULE,
                .pm     = BMA180_PM_OPS,
        },
        .probe          = bma180_probe,
index cc5a35750b507359f6496c980d30bdb7027ded76..e84e2a1646df3b85a920d1b775fe21c75c43c4a7 100644 (file)
@@ -241,7 +241,6 @@ static const struct {
                                       {500000, BMC150_ACCEL_SLEEP_500_MS},
                                       {1000000, BMC150_ACCEL_SLEEP_1_SEC} };
 
-
 static int bmc150_accel_set_mode(struct bmc150_accel_data *data,
                                 enum bmc150_power_modes mode,
                                 int dur_us)
@@ -259,8 +258,9 @@ static int bmc150_accel_set_mode(struct bmc150_accel_data *data,
                                dur_val =
                                bmc150_accel_sleep_value_table[i].reg_value;
                }
-       } else
+       } else {
                dur_val = 0;
+       }
 
        if (dur_val < 0)
                return -EINVAL;
@@ -288,7 +288,7 @@ static int bmc150_accel_set_bw(struct bmc150_accel_data *data, int val,
 
        for (i = 0; i < ARRAY_SIZE(bmc150_accel_samp_freq_table); ++i) {
                if (bmc150_accel_samp_freq_table[i].val == val &&
-                               bmc150_accel_samp_freq_table[i].val2 == val2) {
+                   bmc150_accel_samp_freq_table[i].val2 == val2) {
                        ret = i2c_smbus_write_byte_data(
                                data->client,
                                BMC150_ACCEL_REG_PMU_BW,
@@ -351,8 +351,7 @@ static int bmc150_accel_chip_init(struct bmc150_accel_data *data)
 
        ret = i2c_smbus_read_byte_data(data->client, BMC150_ACCEL_REG_CHIP_ID);
        if (ret < 0) {
-               dev_err(&data->client->dev,
-                       "Error: Reading chip id\n");
+               dev_err(&data->client->dev, "Error: Reading chip id\n");
                return ret;
        }
 
@@ -376,8 +375,7 @@ static int bmc150_accel_chip_init(struct bmc150_accel_data *data)
                                        BMC150_ACCEL_REG_PMU_RANGE,
                                        BMC150_ACCEL_DEF_RANGE_4G);
        if (ret < 0) {
-               dev_err(&data->client->dev,
-                                       "Error writing reg_pmu_range\n");
+               dev_err(&data->client->dev, "Error writing reg_pmu_range\n");
                return ret;
        }
 
@@ -437,12 +435,13 @@ static int bmc150_accel_set_power_state(struct bmc150_accel_data *data, bool on)
 {
        int ret;
 
-       if (on)
+       if (on) {
                ret = pm_runtime_get_sync(&data->client->dev);
-       else {
+       else {
                pm_runtime_mark_last_busy(&data->client->dev);
                ret = pm_runtime_put_autosuspend(&data->client->dev);
        }
+
        if (ret < 0) {
                dev_err(&data->client->dev,
                        "Failed: bmc150_accel_set_power_state for %d\n", on);
@@ -514,13 +513,13 @@ static int bmc150_accel_set_interrupt(struct bmc150_accel_data *data, int i,
        }
 
        /*
-        * We will expect the enable and disable to do operation in
-        * in reverse order. This will happen here anyway as our
-        * resume operation uses sync mode runtime pm calls, the
-        * suspend operation will be delayed by autosuspend delay
-        * So the disable operation will still happen in reverse of
-        * enable operation. When runtime pm is disabled the mode
-        * is always on so sequence doesn't matter
+        * We will expect the enable and disable to do operation in reverse
+        * order. This will happen here anyway, as our resume operation uses
+        * sync mode runtime pm calls. The suspend operation will be delayed
+        * by autosuspend delay.
+        * So the disable operation will still happen in reverse order of
+        * enable operation. When runtime pm is disabled the mode is always on,
+        * so sequence doesn't matter.
         */
        ret = bmc150_accel_set_power_state(data, state);
        if (ret < 0)
@@ -574,7 +573,6 @@ out_fix_power_state:
        return ret;
 }
 
-
 static int bmc150_accel_set_scale(struct bmc150_accel_data *data, int val)
 {
        int ret, i;
@@ -674,8 +672,9 @@ static int bmc150_accel_read_raw(struct iio_dev *indio_dev,
                if (chan->type == IIO_TEMP) {
                        *val = BMC150_ACCEL_TEMP_CENTER_VAL;
                        return IIO_VAL_INT;
-               } else
+               } else {
                        return -EINVAL;
+               }
        case IIO_CHAN_INFO_SCALE:
                *val = 0;
                switch (chan->type) {
@@ -776,7 +775,7 @@ static int bmc150_accel_write_event(struct iio_dev *indio_dev,
 
        switch (info) {
        case IIO_EV_INFO_VALUE:
-               data->slope_thres = val & 0xFF;
+               data->slope_thres = val & BMC150_ACCEL_SLOPE_THRES_MASK;
                break;
        case IIO_EV_INFO_PERIOD:
                data->slope_dur = val & BMC150_ACCEL_SLOPE_DUR_MASK;
@@ -793,7 +792,6 @@ static int bmc150_accel_read_event_config(struct iio_dev *indio_dev,
                                          enum iio_event_type type,
                                          enum iio_event_direction dir)
 {
-
        struct bmc150_accel_data *data = iio_priv(indio_dev);
 
        return data->ev_enable_state;
@@ -827,7 +825,7 @@ static int bmc150_accel_write_event_config(struct iio_dev *indio_dev,
 }
 
 static int bmc150_accel_validate_trigger(struct iio_dev *indio_dev,
-                                  struct iio_trigger *trig)
+                                        struct iio_trigger *trig)
 {
        struct bmc150_accel_data *data = iio_priv(indio_dev);
        int i;
@@ -963,6 +961,7 @@ static int __bmc150_accel_fifo_flush(struct iio_dev *indio_dev,
        u16 buffer[BMC150_ACCEL_FIFO_LENGTH * 3];
        int64_t tstamp;
        uint64_t sample_period;
+
        ret = i2c_smbus_read_byte_data(data->client,
                                       BMC150_ACCEL_REG_FIFO_STATUS);
        if (ret < 0) {
@@ -1255,7 +1254,7 @@ static int bmc150_accel_trig_try_reen(struct iio_trigger *trig)
 }
 
 static int bmc150_accel_trigger_set_state(struct iio_trigger *trig,
-                                                  bool state)
+                                         bool state)
 {
        struct bmc150_accel_trigger *t = iio_trigger_get_drvdata(trig);
        struct bmc150_accel_data *data = t->data;
@@ -1314,26 +1313,32 @@ static int bmc150_accel_handle_roc_event(struct iio_dev *indio_dev)
                dir = IIO_EV_DIR_RISING;
 
        if (ret & BMC150_ACCEL_ANY_MOTION_BIT_X)
-               iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ACCEL,
-                                                       0,
-                                                       IIO_MOD_X,
-                                                       IIO_EV_TYPE_ROC,
-                                                       dir),
-                                                       data->timestamp);
+               iio_push_event(indio_dev,
+                              IIO_MOD_EVENT_CODE(IIO_ACCEL,
+                                                 0,
+                                                 IIO_MOD_X,
+                                                 IIO_EV_TYPE_ROC,
+                                                 dir),
+                              data->timestamp);
+
        if (ret & BMC150_ACCEL_ANY_MOTION_BIT_Y)
-               iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ACCEL,
-                                                       0,
-                                                       IIO_MOD_Y,
-                                                       IIO_EV_TYPE_ROC,
-                                                       dir),
-                                                       data->timestamp);
+               iio_push_event(indio_dev,
+                              IIO_MOD_EVENT_CODE(IIO_ACCEL,
+                                                 0,
+                                                 IIO_MOD_Y,
+                                                 IIO_EV_TYPE_ROC,
+                                                 dir),
+                              data->timestamp);
+
        if (ret & BMC150_ACCEL_ANY_MOTION_BIT_Z)
-               iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ACCEL,
-                                                       0,
-                                                       IIO_MOD_Z,
-                                                       IIO_EV_TYPE_ROC,
-                                                       dir),
-                                                       data->timestamp);
+               iio_push_event(indio_dev,
+                              IIO_MOD_EVENT_CODE(IIO_ACCEL,
+                                                 0,
+                                                 IIO_MOD_Z,
+                                                 IIO_EV_TYPE_ROC,
+                                                 dir),
+                              data->timestamp);
+
        return ret;
 }
 
@@ -1365,7 +1370,9 @@ static irqreturn_t bmc150_accel_irq_thread_handler(int irq, void *private)
                                        BMC150_ACCEL_INT_MODE_LATCH_INT |
                                        BMC150_ACCEL_INT_MODE_LATCH_RESET);
                if (ret)
-                       dev_err(&data->client->dev, "Error writing reg_int_rst_latch\n");
+                       dev_err(&data->client->dev,
+                               "Error writing reg_int_rst_latch\n");
+
                ret = IRQ_HANDLED;
        } else {
                ret = IRQ_NONE;
@@ -1412,13 +1419,13 @@ static const char *bmc150_accel_match_acpi_device(struct device *dev, int *data)
        if (!id)
                return NULL;
 
-       *data = (int) id->driver_data;
+       *data = (int)id->driver_data;
 
        return dev_name(dev);
 }
 
 static int bmc150_accel_gpio_probe(struct i2c_client *client,
-                                       struct bmc150_accel_data *data)
+                                  struct bmc150_accel_data *data)
 {
        struct device *dev;
        struct gpio_desc *gpio;
index 0d9bd35ff2586bfe4c5d8c776e7196d62a85c474..8128579bff795956b6a688d4b93a848d018657bc 100644 (file)
@@ -658,10 +658,8 @@ static int kxcjk1013_set_scale(struct kxcjk1013_data *data, int val)
        int ret, i;
        enum kxcjk1013_mode store_mode;
 
-
        for (i = 0; i < ARRAY_SIZE(KXCJK1013_scale_table); ++i) {
                if (KXCJK1013_scale_table[i].scale == val) {
-
                        ret = kxcjk1013_get_mode(data, &store_mode);
                        if (ret < 0)
                                return ret;
@@ -820,7 +818,6 @@ static int kxcjk1013_read_event_config(struct iio_dev *indio_dev,
                                          enum iio_event_type type,
                                          enum iio_event_direction dir)
 {
-
        struct kxcjk1013_data *data = iio_priv(indio_dev);
 
        return data->ev_enable_state;
index 2fd2a995686b273dae815f2bdb344c6a10284ea0..c34c5ce8123b0938f14c255a21c636dc09e4c513 100644 (file)
@@ -297,7 +297,7 @@ EXPORT_SYMBOL(mma9551_read_status_byte);
  * Returns: 0 on success, negative value on failure.
  */
 int mma9551_read_config_word(struct i2c_client *client, u8 app_id,
-                           u16 reg, u16 *val)
+                            u16 reg, u16 *val)
 {
        int ret;
        __be16 v;
@@ -328,12 +328,12 @@ EXPORT_SYMBOL(mma9551_read_config_word);
  * Returns: 0 on success, negative value on failure.
  */
 int mma9551_write_config_word(struct i2c_client *client, u8 app_id,
-                            u16 reg, u16 val)
+                             u16 reg, u16 val)
 {
        __be16 v = cpu_to_be16(val);
 
        return mma9551_transfer(client, app_id, MMA9551_CMD_WRITE_CONFIG, reg,
-                               (u8 *) &v, 2, NULL, 0);
+                               (u8 *)&v, 2, NULL, 0);
 }
 EXPORT_SYMBOL(mma9551_write_config_word);
 
@@ -373,7 +373,7 @@ EXPORT_SYMBOL(mma9551_read_status_word);
  * @client:    I2C client
  * @app_id:    Application ID
  * @reg:       Application register
- * @len:       Length of array to read in bytes
+ * @len:       Length of array to read (in words)
  * @buf:       Array of words to read
  *
  * Read multiple configuration registers (word-sized registers).
@@ -385,23 +385,22 @@ EXPORT_SYMBOL(mma9551_read_status_word);
  * Returns: 0 on success, negative value on failure.
  */
 int mma9551_read_config_words(struct i2c_client *client, u8 app_id,
-                            u16 reg, u8 len, u16 *buf)
+                             u16 reg, u8 len, u16 *buf)
 {
        int ret, i;
-       int len_words = len / sizeof(u16);
        __be16 be_buf[MMA9551_MAX_MAILBOX_DATA_REGS / 2];
 
-       if (len_words > ARRAY_SIZE(be_buf)) {
+       if (len > ARRAY_SIZE(be_buf)) {
                dev_err(&client->dev, "Invalid buffer size %d\n", len);
                return -EINVAL;
        }
 
        ret = mma9551_transfer(client, app_id, MMA9551_CMD_READ_CONFIG,
-                              reg, NULL, 0, (u8 *) be_buf, len);
+                              reg, NULL, 0, (u8 *)be_buf, len * sizeof(u16));
        if (ret < 0)
                return ret;
 
-       for (i = 0; i < len_words; i++)
+       for (i = 0; i < len; i++)
                buf[i] = be16_to_cpu(be_buf[i]);
 
        return 0;
@@ -413,7 +412,7 @@ EXPORT_SYMBOL(mma9551_read_config_words);
  * @client:    I2C client
  * @app_id:    Application ID
  * @reg:       Application register
- * @len:       Length of array to read in bytes
+ * @len:       Length of array to read (in words)
  * @buf:       Array of words to read
  *
  * Read multiple status registers (word-sized registers).
@@ -428,20 +427,19 @@ int mma9551_read_status_words(struct i2c_client *client, u8 app_id,
                              u16 reg, u8 len, u16 *buf)
 {
        int ret, i;
-       int len_words = len / sizeof(u16);
        __be16 be_buf[MMA9551_MAX_MAILBOX_DATA_REGS / 2];
 
-       if (len_words > ARRAY_SIZE(be_buf)) {
+       if (len > ARRAY_SIZE(be_buf)) {
                dev_err(&client->dev, "Invalid buffer size %d\n", len);
                return -EINVAL;
        }
 
        ret = mma9551_transfer(client, app_id, MMA9551_CMD_READ_STATUS,
-                              reg, NULL, 0, (u8 *) be_buf, len);
+                              reg, NULL, 0, (u8 *)be_buf, len * sizeof(u16));
        if (ret < 0)
                return ret;
 
-       for (i = 0; i < len_words; i++)
+       for (i = 0; i < len; i++)
                buf[i] = be16_to_cpu(be_buf[i]);
 
        return 0;
@@ -453,7 +451,7 @@ EXPORT_SYMBOL(mma9551_read_status_words);
  * @client:    I2C client
  * @app_id:    Application ID
  * @reg:       Application register
- * @len:       Length of array to write in bytes
+ * @len:       Length of array to write (in words)
  * @buf:       Array of words to write
  *
  * Write multiple configuration registers (word-sized registers).
@@ -468,19 +466,18 @@ int mma9551_write_config_words(struct i2c_client *client, u8 app_id,
                               u16 reg, u8 len, u16 *buf)
 {
        int i;
-       int len_words = len / sizeof(u16);
        __be16 be_buf[(MMA9551_MAX_MAILBOX_DATA_REGS - 1) / 2];
 
-       if (len_words > ARRAY_SIZE(be_buf)) {
+       if (len > ARRAY_SIZE(be_buf)) {
                dev_err(&client->dev, "Invalid buffer size %d\n", len);
                return -EINVAL;
        }
 
-       for (i = 0; i < len_words; i++)
+       for (i = 0; i < len; i++)
                be_buf[i] = cpu_to_be16(buf[i]);
 
        return mma9551_transfer(client, app_id, MMA9551_CMD_WRITE_CONFIG,
-                               reg, (u8 *) be_buf, len, NULL, 0);
+                               reg, (u8 *)be_buf, len * sizeof(u16), NULL, 0);
 }
 EXPORT_SYMBOL(mma9551_write_config_words);
 
index 79939e40805a00ead1b15809653d5e9d24756edc..5e88e6454dfd927c7d49e0307614a1a85c4ec3d3 100644 (file)
@@ -53,13 +53,13 @@ int mma9551_write_config_byte(struct i2c_client *client, u8 app_id,
 int mma9551_read_status_byte(struct i2c_client *client, u8 app_id,
                             u16 reg, u8 *val);
 int mma9551_read_config_word(struct i2c_client *client, u8 app_id,
-                           u16 reg, u16 *val);
+                            u16 reg, u16 *val);
 int mma9551_write_config_word(struct i2c_client *client, u8 app_id,
-                            u16 reg, u16 val);
+                             u16 reg, u16 val);
 int mma9551_read_status_word(struct i2c_client *client, u8 app_id,
                             u16 reg, u16 *val);
 int mma9551_read_config_words(struct i2c_client *client, u8 app_id,
-                            u16 reg, u8 len, u16 *buf);
+                             u16 reg, u8 len, u16 *buf);
 int mma9551_read_status_words(struct i2c_client *client, u8 app_id,
                              u16 reg, u8 len, u16 *buf);
 int mma9551_write_config_words(struct i2c_client *client, u8 app_id,
index 8bfc61824fb2378ab8554777bc1d0842c2bdb7a0..a605280637e933ccacd0d07917b8054904634bba 100644 (file)
@@ -182,6 +182,10 @@ struct mma9553_conf_regs {
 
 struct mma9553_data {
        struct i2c_client *client;
+       /*
+        * 1. Serialize access to HW (requested by mma9551_core API).
+        * 2. Serialize sequences that power on/off the device and access HW.
+        */
        struct mutex mutex;
        struct mma9553_conf_regs conf;
        struct mma9553_event events[MMA9553_EVENTS_INFO_SIZE];
@@ -322,7 +326,8 @@ static int mma9553_read_activity_stepcnt(struct mma9553_data *data,
        int ret;
 
        ret = mma9551_read_status_words(data->client, MMA9551_APPID_PEDOMETER,
-                                       MMA9553_REG_STATUS, sizeof(u32), buf);
+                                       MMA9553_REG_STATUS, ARRAY_SIZE(buf),
+                                       buf);
        if (ret < 0) {
                dev_err(&data->client->dev,
                        "error reading status and stepcnt\n");
@@ -342,10 +347,10 @@ static int mma9553_conf_gpio(struct mma9553_data *data)
        struct mma9553_event *ev_step_detect;
        bool activity_enabled;
 
-       activity_enabled =
-           mma9553_is_any_event_enabled(data, true, IIO_ACTIVITY);
-       ev_step_detect =
-           mma9553_get_event(data, IIO_STEPS, IIO_NO_MOD, IIO_EV_DIR_NONE);
+       activity_enabled = mma9553_is_any_event_enabled(data, true,
+                                                       IIO_ACTIVITY);
+       ev_step_detect = mma9553_get_event(data, IIO_STEPS, IIO_NO_MOD,
+                                          IIO_EV_DIR_NONE);
 
        /*
         * If both step detector and activity are enabled, use the MRGFL bit.
@@ -371,9 +376,8 @@ static int mma9553_conf_gpio(struct mma9553_data *data)
                        return ret;
        }
 
-       ret = mma9551_gpio_config(data->client,
-                                 MMA9553_DEFAULT_GPIO_PIN,
-                                 appid, bitnum, MMA9553_DEFAULT_GPIO_POLARITY);
+       ret = mma9551_gpio_config(data->client, MMA9553_DEFAULT_GPIO_PIN, appid,
+                                 bitnum, MMA9553_DEFAULT_GPIO_POLARITY);
        if (ret < 0)
                return ret;
        data->gpio_bitnum = bitnum;
@@ -394,17 +398,16 @@ static int mma9553_init(struct mma9553_data *data)
         * a device identification command to differentiate the MMA9553L
         * from the MMA9550L.
         */
-       ret =
-           mma9551_read_config_words(data->client, MMA9551_APPID_PEDOMETER,
-                                     MMA9553_REG_CONF_SLEEPMIN,
-                                     sizeof(data->conf), (u16 *) &data->conf);
+       ret = mma9551_read_config_words(data->client, MMA9551_APPID_PEDOMETER,
+                                       MMA9553_REG_CONF_SLEEPMIN,
+                                       sizeof(data->conf) / sizeof(u16),
+                                       (u16 *)&data->conf);
        if (ret < 0) {
                dev_err(&data->client->dev,
                        "failed to read configuration registers\n");
                return ret;
        }
 
-
        /* Reset GPIO */
        data->gpio_bitnum = MMA9553_MAX_BITNUM;
        ret = mma9553_conf_gpio(data);
@@ -419,18 +422,18 @@ static int mma9553_init(struct mma9553_data *data)
        data->conf.sleepmin = MMA9553_DEFAULT_SLEEPMIN;
        data->conf.sleepmax = MMA9553_DEFAULT_SLEEPMAX;
        data->conf.sleepthd = MMA9553_DEFAULT_SLEEPTHD;
-       data->conf.config =
-           mma9553_set_bits(data->conf.config, 1, MMA9553_MASK_CONF_CONFIG);
+       data->conf.config = mma9553_set_bits(data->conf.config, 1,
+                                            MMA9553_MASK_CONF_CONFIG);
        /*
         * Clear the activity debounce counter when the activity level changes,
         * so that the confidence level applies for any activity level.
         */
        data->conf.config = mma9553_set_bits(data->conf.config, 1,
                                             MMA9553_MASK_CONF_ACT_DBCNTM);
-       ret =
-           mma9551_write_config_words(data->client, MMA9551_APPID_PEDOMETER,
-                                      MMA9553_REG_CONF_SLEEPMIN,
-                                      sizeof(data->conf), (u16 *) &data->conf);
+       ret = mma9551_write_config_words(data->client, MMA9551_APPID_PEDOMETER,
+                                        MMA9553_REG_CONF_SLEEPMIN,
+                                        sizeof(data->conf) / sizeof(u16),
+                                        (u16 *)&data->conf);
        if (ret < 0) {
                dev_err(&data->client->dev,
                        "failed to write configuration registers\n");
@@ -567,7 +570,7 @@ static int mma9553_read_raw(struct iio_dev *indio_dev,
                return IIO_VAL_INT;
        case IIO_CHAN_INFO_CALIBHEIGHT:
                tmp = mma9553_get_bits(data->conf.height_weight,
-                                       MMA9553_MASK_CONF_HEIGHT);
+                                      MMA9553_MASK_CONF_HEIGHT);
                *val = tmp / 100;       /* cm to m */
                *val2 = (tmp % 100) * 10000;
                return IIO_VAL_INT_PLUS_MICRO;
@@ -719,7 +722,6 @@ static int mma9553_read_event_config(struct iio_dev *indio_dev,
                                     enum iio_event_type type,
                                     enum iio_event_direction dir)
 {
-
        struct mma9553_data *data = iio_priv(indio_dev);
        struct mma9553_event *event;
 
@@ -1026,22 +1028,22 @@ static irqreturn_t mma9553_event_handler(int irq, void *private)
                return IRQ_HANDLED;
        }
 
-       ev_prev_activity =
-           mma9553_get_event(data, IIO_ACTIVITY,
-                             mma9553_activity_to_mod(data->activity),
-                             IIO_EV_DIR_FALLING);
-       ev_activity =
-           mma9553_get_event(data, IIO_ACTIVITY,
-                             mma9553_activity_to_mod(activity),
-                             IIO_EV_DIR_RISING);
-       ev_step_detect =
-           mma9553_get_event(data, IIO_STEPS, IIO_NO_MOD, IIO_EV_DIR_NONE);
+       ev_prev_activity = mma9553_get_event(data, IIO_ACTIVITY,
+                                            mma9553_activity_to_mod(
+                                            data->activity),
+                                            IIO_EV_DIR_FALLING);
+       ev_activity = mma9553_get_event(data, IIO_ACTIVITY,
+                                       mma9553_activity_to_mod(activity),
+                                       IIO_EV_DIR_RISING);
+       ev_step_detect = mma9553_get_event(data, IIO_STEPS, IIO_NO_MOD,
+                                          IIO_EV_DIR_NONE);
 
        if (ev_step_detect->enabled && (stepcnt != data->stepcnt)) {
                data->stepcnt = stepcnt;
                iio_push_event(indio_dev,
                               IIO_EVENT_CODE(IIO_STEPS, 0, IIO_NO_MOD,
-                              IIO_EV_DIR_NONE, IIO_EV_TYPE_CHANGE, 0, 0, 0),
+                                             IIO_EV_DIR_NONE,
+                                             IIO_EV_TYPE_CHANGE, 0, 0, 0),
                               data->timestamp);
        }
 
@@ -1051,17 +1053,19 @@ static irqreturn_t mma9553_event_handler(int irq, void *private)
                if (ev_prev_activity && ev_prev_activity->enabled)
                        iio_push_event(indio_dev,
                                       IIO_EVENT_CODE(IIO_ACTIVITY, 0,
-                                      ev_prev_activity->info->mod,
-                                      IIO_EV_DIR_FALLING,
-                                      IIO_EV_TYPE_THRESH, 0, 0, 0),
+                                                   ev_prev_activity->info->mod,
+                                                   IIO_EV_DIR_FALLING,
+                                                   IIO_EV_TYPE_THRESH, 0, 0,
+                                                   0),
                                       data->timestamp);
 
                if (ev_activity && ev_activity->enabled)
                        iio_push_event(indio_dev,
                                       IIO_EVENT_CODE(IIO_ACTIVITY, 0,
-                                      ev_activity->info->mod,
-                                      IIO_EV_DIR_RISING,
-                                      IIO_EV_TYPE_THRESH, 0, 0, 0),
+                                                     ev_activity->info->mod,
+                                                     IIO_EV_DIR_RISING,
+                                                     IIO_EV_TYPE_THRESH, 0, 0,
+                                                     0),
                                       data->timestamp);
        }
        mutex_unlock(&data->mutex);
@@ -1156,7 +1160,6 @@ static int mma9553_probe(struct i2c_client *client,
                                client->irq);
                        goto out_poweroff;
                }
-
        }
 
        ret = iio_device_register(indio_dev);
index d4ad72ca4a3de258ef1772492fae50901d6f34a8..a2f1c20319eb3a6f852b459a17059d29d1ebaa3d 100644 (file)
@@ -122,7 +122,6 @@ MODULE_DEVICE_TABLE(i2c, st_accel_id_table);
 
 static struct i2c_driver st_accel_driver = {
        .driver = {
-               .owner = THIS_MODULE,
                .name = "st-accel-i2c",
                .of_match_table = of_match_ptr(st_accel_of_match),
        },
index d211d9f3975b823e3026cfec2b4871c2ca924bd3..c2bd1444d6daffafcdd5cede819247bec9d76e64 100644 (file)
  */
 
 #include <linux/acpi.h>
+#include <linux/gpio/consumer.h>
 #include <linux/i2c.h>
+#include <linux/interrupt.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/delay.h>
+#include <linux/iio/buffer.h>
 #include <linux/iio/iio.h>
 #include <linux/iio/sysfs.h>
+#include <linux/iio/trigger.h>
+#include <linux/iio/triggered_buffer.h>
+#include <linux/iio/trigger_consumer.h>
 
 #define STK8312_REG_XOUT               0x00
 #define STK8312_REG_YOUT               0x01
 #define STK8312_REG_ZOUT               0x02
+#define STK8312_REG_INTSU              0x06
 #define STK8312_REG_MODE               0x07
+#define STK8312_REG_SR                 0x08
 #define STK8312_REG_STH                        0x13
 #define STK8312_REG_RESET              0x20
 #define STK8312_REG_AFECTRL            0x24
 #define STK8312_REG_OTPDATA            0x3E
 #define STK8312_REG_OTPCTRL            0x3F
 
-#define STK8312_MODE_ACTIVE            1
-#define STK8312_MODE_STANDBY           0
-#define STK8312_MODE_MASK              0x01
+#define STK8312_MODE_ACTIVE            0x01
+#define STK8312_MODE_STANDBY           0x00
+#define STK8312_DREADY_BIT             0x10
+#define STK8312_INT_MODE               0xC0
 #define STK8312_RNG_MASK               0xC0
+#define STK8312_SR_MASK                        0x07
+#define STK8312_SR_400HZ_IDX           0
 #define STK8312_RNG_SHIFT              6
 #define STK8312_READ_RETRIES           16
+#define STK8312_ALL_CHANNEL_MASK       7
+#define STK8312_ALL_CHANNEL_SIZE       3
 
 #define STK8312_DRIVER_NAME            "stk8312"
+#define STK8312_GPIO                   "stk8312_gpio"
+#define STK8312_IRQ_NAME               "stk8312_event"
 
 /*
  * The accelerometer has two measurement ranges:
@@ -53,32 +68,56 @@ static const int stk8312_scale_table[][2] = {
        {0, 461600}, {1, 231100}
 };
 
-#define STK8312_ACCEL_CHANNEL(reg, axis) {                     \
-       .type = IIO_ACCEL,                                      \
-       .address = reg,                                         \
-       .modified = 1,                                          \
-       .channel2 = IIO_MOD_##axis,                             \
-       .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),           \
-       .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),   \
+static const struct {
+       u16 val;
+       u32 val2;
+} stk8312_samp_freq_table[] = {
+       {400, 0}, {200, 0}, {100, 0}, {50, 0}, {25, 0},
+       {12, 500000}, {6, 250000}, {3, 125000}
+};
+
+#define STK8312_ACCEL_CHANNEL(index, reg, axis) {                      \
+       .type = IIO_ACCEL,                                              \
+       .address = reg,                                                 \
+       .modified = 1,                                                  \
+       .channel2 = IIO_MOD_##axis,                                     \
+       .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),                   \
+       .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) |          \
+                                   BIT(IIO_CHAN_INFO_SAMP_FREQ),       \
+       .scan_index = index,                                            \
+       .scan_type = {                                                  \
+               .sign = 's',                                            \
+               .realbits = 8,                                          \
+               .storagebits = 8,                                       \
+               .endianness = IIO_CPU,                                  \
+       },                                                              \
 }
 
 static const struct iio_chan_spec stk8312_channels[] = {
-       STK8312_ACCEL_CHANNEL(STK8312_REG_XOUT, X),
-       STK8312_ACCEL_CHANNEL(STK8312_REG_YOUT, Y),
-       STK8312_ACCEL_CHANNEL(STK8312_REG_ZOUT, Z),
+       STK8312_ACCEL_CHANNEL(0, STK8312_REG_XOUT, X),
+       STK8312_ACCEL_CHANNEL(1, STK8312_REG_YOUT, Y),
+       STK8312_ACCEL_CHANNEL(2, STK8312_REG_ZOUT, Z),
+       IIO_CHAN_SOFT_TIMESTAMP(3),
 };
 
 struct stk8312_data {
        struct i2c_client *client;
        struct mutex lock;
        int range;
+       u8 sample_rate_idx;
        u8 mode;
+       struct iio_trigger *dready_trig;
+       bool dready_trigger_on;
+       s8 buffer[16]; /* 3x8-bit channels + 5x8 padding + 64-bit timestamp */
 };
 
 static IIO_CONST_ATTR(in_accel_scale_available, STK8312_SCALE_AVAIL);
 
+static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("3.125 6.25 12.5 25 50 100 200 400");
+
 static struct attribute *stk8312_attributes[] = {
        &iio_const_attr_in_accel_scale_available.dev_attr.attr,
+       &iio_const_attr_sampling_frequency_available.dev_attr.attr,
        NULL,
 };
 
@@ -130,31 +169,19 @@ exit_err:
 static int stk8312_set_mode(struct stk8312_data *data, u8 mode)
 {
        int ret;
-       u8 masked_reg;
        struct i2c_client *client = data->client;
 
-       if (mode > 1)
-               return -EINVAL;
-       else if (mode == data->mode)
+       if (mode == data->mode)
                return 0;
 
-       ret = i2c_smbus_read_byte_data(client, STK8312_REG_MODE);
-       if (ret < 0) {
-               dev_err(&client->dev, "failed to change sensor mode\n");
-               return ret;
-       }
-       masked_reg = ret & (~STK8312_MODE_MASK);
-       masked_reg |= mode;
-
-       ret = i2c_smbus_write_byte_data(client,
-                       STK8312_REG_MODE, masked_reg);
+       ret = i2c_smbus_write_byte_data(client, STK8312_REG_MODE, mode);
        if (ret < 0) {
                dev_err(&client->dev, "failed to change sensor mode\n");
                return ret;
        }
 
        data->mode = mode;
-       if (mode == STK8312_MODE_ACTIVE) {
+       if (mode & STK8312_MODE_ACTIVE) {
                /* Need to run OTP sequence before entering active mode */
                usleep_range(1000, 5000);
                ret = stk8312_otp_init(data);
@@ -163,6 +190,85 @@ static int stk8312_set_mode(struct stk8312_data *data, u8 mode)
        return ret;
 }
 
+static int stk8312_set_interrupts(struct stk8312_data *data, u8 int_mask)
+{
+       int ret;
+       u8 mode;
+       struct i2c_client *client = data->client;
+
+       mode = data->mode;
+       /* We need to go in standby mode to modify registers */
+       ret = stk8312_set_mode(data, STK8312_MODE_STANDBY);
+       if (ret < 0)
+               return ret;
+
+       ret = i2c_smbus_write_byte_data(client, STK8312_REG_INTSU, int_mask);
+       if (ret < 0)
+               dev_err(&client->dev, "failed to set interrupts\n");
+
+       return stk8312_set_mode(data, mode);
+}
+
+static int stk8312_data_rdy_trigger_set_state(struct iio_trigger *trig,
+                                             bool state)
+{
+       struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
+       struct stk8312_data *data = iio_priv(indio_dev);
+       int ret;
+
+       if (state)
+               ret = stk8312_set_interrupts(data, STK8312_DREADY_BIT);
+       else
+               ret = stk8312_set_interrupts(data, 0x00);
+
+       if (ret < 0) {
+               dev_err(&data->client->dev, "failed to set trigger state\n");
+               return ret;
+       }
+
+       data->dready_trigger_on = state;
+
+       return ret;
+}
+
+static const struct iio_trigger_ops stk8312_trigger_ops = {
+       .set_trigger_state = stk8312_data_rdy_trigger_set_state,
+       .owner = THIS_MODULE,
+};
+
+static int stk8312_set_sample_rate(struct stk8312_data *data, int rate)
+{
+       int ret;
+       u8 masked_reg;
+       u8 mode;
+       struct i2c_client *client = data->client;
+
+       if (rate == data->sample_rate_idx)
+               return 0;
+
+       mode = data->mode;
+       /* We need to go in standby mode to modify registers */
+       ret = stk8312_set_mode(data, STK8312_MODE_STANDBY);
+       if (ret < 0)
+               return ret;
+
+       ret = i2c_smbus_read_byte_data(client, STK8312_REG_SR);
+       if (ret < 0) {
+               dev_err(&client->dev, "failed to set sampling rate\n");
+               return ret;
+       }
+
+       masked_reg = (ret & (~STK8312_SR_MASK)) | rate;
+
+       ret = i2c_smbus_write_byte_data(client, STK8312_REG_SR, masked_reg);
+       if (ret < 0)
+               dev_err(&client->dev, "failed to set sampling rate\n");
+       else
+               data->sample_rate_idx = rate;
+
+       return stk8312_set_mode(data, mode);
+}
+
 static int stk8312_set_range(struct stk8312_data *data, u8 range)
 {
        int ret;
@@ -208,12 +314,10 @@ static int stk8312_read_accel(struct stk8312_data *data, u8 address)
                return -EINVAL;
 
        ret = i2c_smbus_read_byte_data(client, address);
-       if (ret < 0) {
+       if (ret < 0)
                dev_err(&client->dev, "register read failed\n");
-               return ret;
-       }
 
-       return sign_extend32(ret, 7);
+       return ret;
 }
 
 static int stk8312_read_raw(struct iio_dev *indio_dev,
@@ -221,20 +325,37 @@ static int stk8312_read_raw(struct iio_dev *indio_dev,
                            int *val, int *val2, long mask)
 {
        struct stk8312_data *data = iio_priv(indio_dev);
-
-       if (chan->type != IIO_ACCEL)
-               return -EINVAL;
+       int ret;
 
        switch (mask) {
        case IIO_CHAN_INFO_RAW:
+               if (iio_buffer_enabled(indio_dev))
+                       return -EBUSY;
                mutex_lock(&data->lock);
-               *val = stk8312_read_accel(data, chan->address);
+               ret = stk8312_set_mode(data, data->mode | STK8312_MODE_ACTIVE);
+               if (ret < 0) {
+                       mutex_unlock(&data->lock);
+                       return -EINVAL;
+               }
+               ret = stk8312_read_accel(data, chan->address);
+               if (ret < 0) {
+                       stk8312_set_mode(data,
+                                        data->mode & (~STK8312_MODE_ACTIVE));
+                       mutex_unlock(&data->lock);
+                       return -EINVAL;
+               }
+               *val = sign_extend32(ret, 7);
+               stk8312_set_mode(data, data->mode & (~STK8312_MODE_ACTIVE));
                mutex_unlock(&data->lock);
                return IIO_VAL_INT;
        case IIO_CHAN_INFO_SCALE:
                *val = stk8312_scale_table[data->range - 1][0];
                *val2 = stk8312_scale_table[data->range - 1][1];
                return IIO_VAL_INT_PLUS_MICRO;
+       case IIO_CHAN_INFO_SAMP_FREQ:
+               *val = stk8312_samp_freq_table[data->sample_rate_idx].val;
+               *val2 = stk8312_samp_freq_table[data->sample_rate_idx].val2;
+               return IIO_VAL_INT_PLUS_MICRO;
        }
 
        return -EINVAL;
@@ -264,6 +385,20 @@ static int stk8312_write_raw(struct iio_dev *indio_dev,
                ret = stk8312_set_range(data, index);
                mutex_unlock(&data->lock);
 
+               return ret;
+       case IIO_CHAN_INFO_SAMP_FREQ:
+               for (i = 0; i < ARRAY_SIZE(stk8312_samp_freq_table); i++)
+                       if (val == stk8312_samp_freq_table[i].val &&
+                           val2 == stk8312_samp_freq_table[i].val2) {
+                               index = i;
+                               break;
+                       }
+               if (index < 0)
+                       return -EINVAL;
+               mutex_lock(&data->lock);
+               ret = stk8312_set_sample_rate(data, index);
+               mutex_unlock(&data->lock);
+
                return ret;
        }
 
@@ -277,6 +412,109 @@ static const struct iio_info stk8312_info = {
        .attrs                  = &stk8312_attribute_group,
 };
 
+static irqreturn_t stk8312_trigger_handler(int irq, void *p)
+{
+       struct iio_poll_func *pf = p;
+       struct iio_dev *indio_dev = pf->indio_dev;
+       struct stk8312_data *data = iio_priv(indio_dev);
+       int bit, ret, i = 0;
+       u8 buffer[STK8312_ALL_CHANNEL_SIZE];
+
+       mutex_lock(&data->lock);
+       /*
+        * Do a bulk read if all channels are requested,
+        * from 0x00 (XOUT) to 0x02 (ZOUT)
+        */
+       if (*(indio_dev->active_scan_mask) == STK8312_ALL_CHANNEL_MASK) {
+               ret = i2c_smbus_read_i2c_block_data(data->client,
+                                                   STK8312_REG_XOUT,
+                                                   STK8312_ALL_CHANNEL_SIZE,
+                                                   buffer);
+               if (ret < STK8312_ALL_CHANNEL_SIZE) {
+                       dev_err(&data->client->dev, "register read failed\n");
+                       mutex_unlock(&data->lock);
+                       goto err;
+               }
+               data->buffer[0] = buffer[0];
+               data->buffer[1] = buffer[1];
+               data->buffer[2] = buffer[2];
+       } else {
+               for_each_set_bit(bit, indio_dev->active_scan_mask,
+                          indio_dev->masklength) {
+                       ret = stk8312_read_accel(data, bit);
+                       if (ret < 0) {
+                               mutex_unlock(&data->lock);
+                               goto err;
+                       }
+                       data->buffer[i++] = ret;
+               }
+       }
+       mutex_unlock(&data->lock);
+
+       iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
+                                          pf->timestamp);
+err:
+       iio_trigger_notify_done(indio_dev->trig);
+
+       return IRQ_HANDLED;
+}
+
+static irqreturn_t stk8312_data_rdy_trig_poll(int irq, void *private)
+{
+       struct iio_dev *indio_dev = private;
+       struct stk8312_data *data = iio_priv(indio_dev);
+
+       if (data->dready_trigger_on)
+               iio_trigger_poll(data->dready_trig);
+
+       return IRQ_HANDLED;
+}
+
+static int stk8312_buffer_preenable(struct iio_dev *indio_dev)
+{
+       struct stk8312_data *data = iio_priv(indio_dev);
+
+       return stk8312_set_mode(data, data->mode | STK8312_MODE_ACTIVE);
+}
+
+static int stk8312_buffer_postdisable(struct iio_dev *indio_dev)
+{
+       struct stk8312_data *data = iio_priv(indio_dev);
+
+       return stk8312_set_mode(data, data->mode & (~STK8312_MODE_ACTIVE));
+}
+
+static const struct iio_buffer_setup_ops stk8312_buffer_setup_ops = {
+       .preenable   = stk8312_buffer_preenable,
+       .postenable  = iio_triggered_buffer_postenable,
+       .predisable  = iio_triggered_buffer_predisable,
+       .postdisable = stk8312_buffer_postdisable,
+};
+
+static int stk8312_gpio_probe(struct i2c_client *client)
+{
+       struct device *dev;
+       struct gpio_desc *gpio;
+       int ret;
+
+       if (!client)
+               return -EINVAL;
+
+       dev = &client->dev;
+
+       /* data ready gpio interrupt pin */
+       gpio = devm_gpiod_get_index(dev, STK8312_GPIO, 0, GPIOD_IN);
+       if (IS_ERR(gpio)) {
+               dev_err(dev, "acpi gpio get index failed\n");
+               return PTR_ERR(gpio);
+       }
+
+       ret = gpiod_to_irq(gpio);
+       dev_dbg(dev, "GPIO resource, no:%d irq:%d\n", desc_to_gpio(gpio), ret);
+
+       return ret;
+}
+
 static int stk8312_probe(struct i2c_client *client,
                         const struct i2c_device_id *id)
 {
@@ -308,30 +546,90 @@ static int stk8312_probe(struct i2c_client *client,
                dev_err(&client->dev, "failed to reset sensor\n");
                return ret;
        }
+       data->sample_rate_idx = STK8312_SR_400HZ_IDX;
        ret = stk8312_set_range(data, 1);
        if (ret < 0)
                return ret;
 
-       ret = stk8312_set_mode(data, STK8312_MODE_ACTIVE);
+       ret = stk8312_set_mode(data, STK8312_INT_MODE | STK8312_MODE_ACTIVE);
        if (ret < 0)
                return ret;
 
+       if (client->irq < 0)
+               client->irq = stk8312_gpio_probe(client);
+
+       if (client->irq >= 0) {
+               ret = devm_request_threaded_irq(&client->dev, client->irq,
+                                               stk8312_data_rdy_trig_poll,
+                                               NULL,
+                                               IRQF_TRIGGER_RISING |
+                                               IRQF_ONESHOT,
+                                               STK8312_IRQ_NAME,
+                                               indio_dev);
+               if (ret < 0) {
+                       dev_err(&client->dev, "request irq %d failed\n",
+                               client->irq);
+                       goto err_power_off;
+               }
+
+               data->dready_trig = devm_iio_trigger_alloc(&client->dev,
+                                                          "%s-dev%d",
+                                                          indio_dev->name,
+                                                          indio_dev->id);
+               if (!data->dready_trig) {
+                       ret = -ENOMEM;
+                       goto err_power_off;
+               }
+
+               data->dready_trig->dev.parent = &client->dev;
+               data->dready_trig->ops = &stk8312_trigger_ops;
+               iio_trigger_set_drvdata(data->dready_trig, indio_dev);
+               ret = iio_trigger_register(data->dready_trig);
+               if (ret) {
+                       dev_err(&client->dev, "iio trigger register failed\n");
+                       goto err_power_off;
+               }
+       }
+
+       ret = iio_triggered_buffer_setup(indio_dev,
+                                        iio_pollfunc_store_time,
+                                        stk8312_trigger_handler,
+                                        &stk8312_buffer_setup_ops);
+       if (ret < 0) {
+               dev_err(&client->dev, "iio triggered buffer setup failed\n");
+               goto err_trigger_unregister;
+       }
+
        ret = iio_device_register(indio_dev);
        if (ret < 0) {
                dev_err(&client->dev, "device_register failed\n");
-               stk8312_set_mode(data, STK8312_MODE_STANDBY);
+               goto err_buffer_cleanup;
        }
 
        return ret;
+
+err_buffer_cleanup:
+       iio_triggered_buffer_cleanup(indio_dev);
+err_trigger_unregister:
+       if (data->dready_trig)
+               iio_trigger_unregister(data->dready_trig);
+err_power_off:
+       stk8312_set_mode(data, STK8312_MODE_STANDBY);
+       return ret;
 }
 
 static int stk8312_remove(struct i2c_client *client)
 {
        struct iio_dev *indio_dev = i2c_get_clientdata(client);
+       struct stk8312_data *data = iio_priv(indio_dev);
 
        iio_device_unregister(indio_dev);
+       iio_triggered_buffer_cleanup(indio_dev);
+
+       if (data->dready_trig)
+               iio_trigger_unregister(data->dready_trig);
 
-       return stk8312_set_mode(iio_priv(indio_dev), STK8312_MODE_STANDBY);
+       return stk8312_set_mode(data, STK8312_MODE_STANDBY);
 }
 
 #ifdef CONFIG_PM_SLEEP
@@ -341,7 +639,7 @@ static int stk8312_suspend(struct device *dev)
 
        data = iio_priv(i2c_get_clientdata(to_i2c_client(dev)));
 
-       return stk8312_set_mode(data, STK8312_MODE_STANDBY);
+       return stk8312_set_mode(data, data->mode & (~STK8312_MODE_ACTIVE));
 }
 
 static int stk8312_resume(struct device *dev)
@@ -350,7 +648,7 @@ static int stk8312_resume(struct device *dev)
 
        data = iio_priv(i2c_get_clientdata(to_i2c_client(dev)));
 
-       return stk8312_set_mode(data, STK8312_MODE_ACTIVE);
+       return stk8312_set_mode(data, data->mode | STK8312_MODE_ACTIVE);
 }
 
 static SIMPLE_DEV_PM_OPS(stk8312_pm_ops, stk8312_suspend, stk8312_resume);
index 30950c6b36de1f36ac709c4a3548d0a804cb2ccf..16cee637109b846add6f4cf5b87a58e622c59657 100644 (file)
  */
 
 #include <linux/acpi.h>
+#include <linux/gpio/consumer.h>
 #include <linux/i2c.h>
+#include <linux/interrupt.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
+#include <linux/iio/buffer.h>
 #include <linux/iio/iio.h>
 #include <linux/iio/sysfs.h>
+#include <linux/iio/trigger.h>
+#include <linux/iio/triggered_buffer.h>
+#include <linux/iio/trigger_consumer.h>
 
 #define STK8BA50_REG_XOUT                      0x02
 #define STK8BA50_REG_YOUT                      0x04
 #define STK8BA50_REG_ZOUT                      0x06
 #define STK8BA50_REG_RANGE                     0x0F
+#define STK8BA50_REG_BWSEL                     0x10
 #define STK8BA50_REG_POWMODE                   0x11
 #define STK8BA50_REG_SWRST                     0x14
+#define STK8BA50_REG_INTEN2                    0x17
+#define STK8BA50_REG_INTMAP2                   0x1A
 
 #define STK8BA50_MODE_NORMAL                   0
 #define STK8BA50_MODE_SUSPEND                  1
 #define STK8BA50_MODE_POWERBIT                 BIT(7)
 #define STK8BA50_DATA_SHIFT                    6
 #define STK8BA50_RESET_CMD                     0xB6
+#define STK8BA50_SR_1792HZ_IDX                 7
+#define STK8BA50_DREADY_INT_MASK               0x10
+#define STK8BA50_DREADY_INT_MAP                        0x81
+#define STK8BA50_ALL_CHANNEL_MASK              7
+#define STK8BA50_ALL_CHANNEL_SIZE              6
 
 #define STK8BA50_DRIVER_NAME                   "stk8ba50"
+#define STK8BA50_GPIO                          "stk8ba50_gpio"
+#define STK8BA50_IRQ_NAME                      "stk8ba50_event"
 
 #define STK8BA50_SCALE_AVAIL                   "0.0384 0.0767 0.1534 0.3069"
 
  *
  * Locally, the range is stored as a table index.
  */
-static const int stk8ba50_scale_table[][2] = {
+static const struct {
+       u8 reg_val;
+       u32 scale_val;
+} stk8ba50_scale_table[] = {
        {3, 38400}, {5, 76700}, {8, 153400}, {12, 306900}
 };
 
+/* Sample rates are stored as { <register value>, <Hz value> } */
+static const struct {
+       u8 reg_val;
+       u16 samp_freq;
+} stk8ba50_samp_freq_table[] = {
+       {0x08, 14},  {0x09, 25},  {0x0A, 56},  {0x0B, 112},
+       {0x0C, 224}, {0x0D, 448}, {0x0E, 896}, {0x0F, 1792}
+};
+
+/* Used to map scan mask bits to their corresponding channel register. */
+static const int stk8ba50_channel_table[] = {
+       STK8BA50_REG_XOUT,
+       STK8BA50_REG_YOUT,
+       STK8BA50_REG_ZOUT
+};
+
 struct stk8ba50_data {
        struct i2c_client *client;
        struct mutex lock;
        int range;
+       u8 sample_rate_idx;
+       struct iio_trigger *dready_trig;
+       bool dready_trigger_on;
+       /*
+        * 3 x 16-bit channels (10-bit data, 6-bit padding) +
+        * 1 x 16 padding +
+        * 4 x 16 64-bit timestamp
+        */
+       s16 buffer[8];
 };
 
-#define STK8BA50_ACCEL_CHANNEL(reg, axis) {                    \
-       .type = IIO_ACCEL,                                      \
-       .address = reg,                                         \
-       .modified = 1,                                          \
-       .channel2 = IIO_MOD_##axis,                             \
-       .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),           \
-       .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),   \
+#define STK8BA50_ACCEL_CHANNEL(index, reg, axis) {                     \
+       .type = IIO_ACCEL,                                              \
+       .address = reg,                                                 \
+       .modified = 1,                                                  \
+       .channel2 = IIO_MOD_##axis,                                     \
+       .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),                   \
+       .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),           \
+                                   BIT(IIO_CHAN_INFO_SAMP_FREQ),       \
+       .scan_index = index,                                            \
+       .scan_type = {                                                  \
+               .sign = 's',                                            \
+               .realbits = 10,                                         \
+               .storagebits = 16,                                      \
+               .shift = STK8BA50_DATA_SHIFT,                           \
+               .endianness = IIO_CPU,                                  \
+       },                                                              \
 }
 
 static const struct iio_chan_spec stk8ba50_channels[] = {
-       STK8BA50_ACCEL_CHANNEL(STK8BA50_REG_XOUT, X),
-       STK8BA50_ACCEL_CHANNEL(STK8BA50_REG_YOUT, Y),
-       STK8BA50_ACCEL_CHANNEL(STK8BA50_REG_ZOUT, Z),
+       STK8BA50_ACCEL_CHANNEL(0, STK8BA50_REG_XOUT, X),
+       STK8BA50_ACCEL_CHANNEL(1, STK8BA50_REG_YOUT, Y),
+       STK8BA50_ACCEL_CHANNEL(2, STK8BA50_REG_ZOUT, Z),
+       IIO_CHAN_SOFT_TIMESTAMP(3),
 };
 
 static IIO_CONST_ATTR(in_accel_scale_available, STK8BA50_SCALE_AVAIL);
 
+static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("14 25 56 112 224 448 896 1792");
+
 static struct attribute *stk8ba50_attributes[] = {
        &iio_const_attr_in_accel_scale_available.dev_attr.attr,
+       &iio_const_attr_sampling_frequency_available.dev_attr.attr,
        NULL,
 };
 
@@ -97,7 +154,61 @@ static int stk8ba50_read_accel(struct stk8ba50_data *data, u8 reg)
                return ret;
        }
 
-       return sign_extend32(ret >> STK8BA50_DATA_SHIFT, 9);
+       return ret;
+}
+
+static int stk8ba50_data_rdy_trigger_set_state(struct iio_trigger *trig,
+                                              bool state)
+{
+       struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
+       struct stk8ba50_data *data = iio_priv(indio_dev);
+       int ret;
+
+       if (state)
+               ret = i2c_smbus_write_byte_data(data->client,
+                       STK8BA50_REG_INTEN2, STK8BA50_DREADY_INT_MASK);
+       else
+               ret = i2c_smbus_write_byte_data(data->client,
+                       STK8BA50_REG_INTEN2, 0x00);
+
+       if (ret < 0)
+               dev_err(&data->client->dev, "failed to set trigger state\n");
+       else
+               data->dready_trigger_on = state;
+
+       return ret;
+}
+
+static const struct iio_trigger_ops stk8ba50_trigger_ops = {
+       .set_trigger_state = stk8ba50_data_rdy_trigger_set_state,
+       .owner = THIS_MODULE,
+};
+
+static int stk8ba50_set_power(struct stk8ba50_data *data, bool mode)
+{
+       int ret;
+       u8 masked_reg;
+       struct i2c_client *client = data->client;
+
+       ret = i2c_smbus_read_byte_data(client, STK8BA50_REG_POWMODE);
+       if (ret < 0)
+               goto exit_err;
+
+       if (mode)
+               masked_reg = ret | STK8BA50_MODE_POWERBIT;
+       else
+               masked_reg = ret & (~STK8BA50_MODE_POWERBIT);
+
+       ret = i2c_smbus_write_byte_data(client, STK8BA50_REG_POWMODE,
+                                       masked_reg);
+       if (ret < 0)
+               goto exit_err;
+
+       return ret;
+
+exit_err:
+       dev_err(&client->dev, "failed to change sensor mode\n");
+       return ret;
 }
 
 static int stk8ba50_read_raw(struct iio_dev *indio_dev,
@@ -105,17 +216,37 @@ static int stk8ba50_read_raw(struct iio_dev *indio_dev,
                             int *val, int *val2, long mask)
 {
        struct stk8ba50_data *data = iio_priv(indio_dev);
+       int ret;
 
        switch (mask) {
        case IIO_CHAN_INFO_RAW:
+               if (iio_buffer_enabled(indio_dev))
+                       return -EBUSY;
                mutex_lock(&data->lock);
-               *val = stk8ba50_read_accel(data, chan->address);
+               ret = stk8ba50_set_power(data, STK8BA50_MODE_NORMAL);
+               if (ret < 0) {
+                       mutex_unlock(&data->lock);
+                       return -EINVAL;
+               }
+               ret = stk8ba50_read_accel(data, chan->address);
+               if (ret < 0) {
+                       stk8ba50_set_power(data, STK8BA50_MODE_SUSPEND);
+                       mutex_unlock(&data->lock);
+                       return -EINVAL;
+               }
+               *val = sign_extend32(ret >> STK8BA50_DATA_SHIFT, 9);
+               stk8ba50_set_power(data, STK8BA50_MODE_SUSPEND);
                mutex_unlock(&data->lock);
                return IIO_VAL_INT;
        case IIO_CHAN_INFO_SCALE:
                *val = 0;
-               *val2 = stk8ba50_scale_table[data->range][1];
+               *val2 = stk8ba50_scale_table[data->range].scale_val;
                return IIO_VAL_INT_PLUS_MICRO;
+       case IIO_CHAN_INFO_SAMP_FREQ:
+               *val = stk8ba50_samp_freq_table
+                               [data->sample_rate_idx].samp_freq;
+               *val2 = 0;
+               return IIO_VAL_INT;
        }
 
        return -EINVAL;
@@ -136,7 +267,7 @@ static int stk8ba50_write_raw(struct iio_dev *indio_dev,
                        return -EINVAL;
 
                for (i = 0; i < ARRAY_SIZE(stk8ba50_scale_table); i++)
-                       if (val2 == stk8ba50_scale_table[i][1]) {
+                       if (val2 == stk8ba50_scale_table[i].scale_val) {
                                index = i;
                                break;
                        }
@@ -145,13 +276,32 @@ static int stk8ba50_write_raw(struct iio_dev *indio_dev,
 
                ret = i2c_smbus_write_byte_data(data->client,
                                STK8BA50_REG_RANGE,
-                               stk8ba50_scale_table[index][0]);
+                               stk8ba50_scale_table[index].reg_val);
                if (ret < 0)
                        dev_err(&data->client->dev,
                                        "failed to set measurement range\n");
                else
                        data->range = index;
 
+               return ret;
+       case IIO_CHAN_INFO_SAMP_FREQ:
+               for (i = 0; i < ARRAY_SIZE(stk8ba50_samp_freq_table); i++)
+                       if (val == stk8ba50_samp_freq_table[i].samp_freq) {
+                               index = i;
+                               break;
+                       }
+               if (index < 0)
+                       return -EINVAL;
+
+               ret = i2c_smbus_write_byte_data(data->client,
+                               STK8BA50_REG_BWSEL,
+                               stk8ba50_samp_freq_table[index].reg_val);
+               if (ret < 0)
+                       dev_err(&data->client->dev,
+                                       "failed to set sampling rate\n");
+               else
+                       data->sample_rate_idx = index;
+
                return ret;
        }
 
@@ -165,30 +315,100 @@ static const struct iio_info stk8ba50_info = {
        .attrs                  = &stk8ba50_attribute_group,
 };
 
-static int stk8ba50_set_power(struct stk8ba50_data *data, bool mode)
+static irqreturn_t stk8ba50_trigger_handler(int irq, void *p)
 {
+       struct iio_poll_func *pf = p;
+       struct iio_dev *indio_dev = pf->indio_dev;
+       struct stk8ba50_data *data = iio_priv(indio_dev);
+       int bit, ret, i = 0;
+
+       mutex_lock(&data->lock);
+       /*
+        * Do a bulk read if all channels are requested,
+        * from 0x02 (XOUT1) to 0x07 (ZOUT2)
+        */
+       if (*(indio_dev->active_scan_mask) == STK8BA50_ALL_CHANNEL_MASK) {
+               ret = i2c_smbus_read_i2c_block_data(data->client,
+                                                   STK8BA50_REG_XOUT,
+                                                   STK8BA50_ALL_CHANNEL_SIZE,
+                                                   (u8 *)data->buffer);
+               if (ret < STK8BA50_ALL_CHANNEL_SIZE) {
+                       dev_err(&data->client->dev, "register read failed\n");
+                       goto err;
+               }
+       } else {
+               for_each_set_bit(bit, indio_dev->active_scan_mask,
+                                indio_dev->masklength) {
+                       ret = stk8ba50_read_accel(data,
+                                                 stk8ba50_channel_table[bit]);
+                       if (ret < 0)
+                               goto err;
+
+                       data->buffer[i++] = ret;
+               }
+       }
+       iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
+                                          pf->timestamp);
+err:
+       mutex_unlock(&data->lock);
+       iio_trigger_notify_done(indio_dev->trig);
+
+       return IRQ_HANDLED;
+}
+
+static irqreturn_t stk8ba50_data_rdy_trig_poll(int irq, void *private)
+{
+       struct iio_dev *indio_dev = private;
+       struct stk8ba50_data *data = iio_priv(indio_dev);
+
+       if (data->dready_trigger_on)
+               iio_trigger_poll(data->dready_trig);
+
+       return IRQ_HANDLED;
+}
+
+static int stk8ba50_buffer_preenable(struct iio_dev *indio_dev)
+{
+       struct stk8ba50_data *data = iio_priv(indio_dev);
+
+       return stk8ba50_set_power(data, STK8BA50_MODE_NORMAL);
+}
+
+static int stk8ba50_buffer_postdisable(struct iio_dev *indio_dev)
+{
+       struct stk8ba50_data *data = iio_priv(indio_dev);
+
+       return stk8ba50_set_power(data, STK8BA50_MODE_SUSPEND);
+}
+
+static const struct iio_buffer_setup_ops stk8ba50_buffer_setup_ops = {
+       .preenable   = stk8ba50_buffer_preenable,
+       .postenable  = iio_triggered_buffer_postenable,
+       .predisable  = iio_triggered_buffer_predisable,
+       .postdisable = stk8ba50_buffer_postdisable,
+};
+
+static int stk8ba50_gpio_probe(struct i2c_client *client)
+{
+       struct device *dev;
+       struct gpio_desc *gpio;
        int ret;
-       u8 masked_reg;
-       struct i2c_client *client = data->client;
 
-       ret = i2c_smbus_read_byte_data(client, STK8BA50_REG_POWMODE);
-       if (ret < 0)
-               goto exit_err;
+       if (!client)
+               return -EINVAL;
 
-       if (mode)
-               masked_reg = ret | STK8BA50_MODE_POWERBIT;
-       else
-               masked_reg = ret & (~STK8BA50_MODE_POWERBIT);
+       dev = &client->dev;
 
-       ret = i2c_smbus_write_byte_data(client, STK8BA50_REG_POWMODE,
-                                       masked_reg);
-       if (ret < 0)
-               goto exit_err;
+       /* data ready gpio interrupt pin */
+       gpio = devm_gpiod_get_index(dev, STK8BA50_GPIO, 0, GPIOD_IN);
+       if (IS_ERR(gpio)) {
+               dev_err(dev, "acpi gpio get index failed\n");
+               return PTR_ERR(gpio);
+       }
 
-       return ret;
+       ret = gpiod_to_irq(gpio);
+       dev_dbg(dev, "GPIO resource, no:%d irq:%d\n", desc_to_gpio(gpio), ret);
 
-exit_err:
-       dev_err(&client->dev, "failed to change sensor mode\n");
        return ret;
 }
 
@@ -222,28 +442,104 @@ static int stk8ba50_probe(struct i2c_client *client,
                        STK8BA50_REG_SWRST, STK8BA50_RESET_CMD);
        if (ret < 0) {
                dev_err(&client->dev, "failed to reset sensor\n");
-               return ret;
+               goto err_power_off;
        }
 
        /* The default range is +/-2g */
        data->range = 0;
 
+       /* The default sampling rate is 1792 Hz (maximum) */
+       data->sample_rate_idx = STK8BA50_SR_1792HZ_IDX;
+
+       /* Set up interrupts */
+       ret = i2c_smbus_write_byte_data(client,
+                       STK8BA50_REG_INTEN2, STK8BA50_DREADY_INT_MASK);
+       if (ret < 0) {
+               dev_err(&client->dev, "failed to set up interrupts\n");
+               goto err_power_off;
+       }
+       ret = i2c_smbus_write_byte_data(client,
+                       STK8BA50_REG_INTMAP2, STK8BA50_DREADY_INT_MAP);
+       if (ret < 0) {
+               dev_err(&client->dev, "failed to set up interrupts\n");
+               goto err_power_off;
+       }
+
+       if (client->irq < 0)
+               client->irq = stk8ba50_gpio_probe(client);
+
+       if (client->irq >= 0) {
+               ret = devm_request_threaded_irq(&client->dev, client->irq,
+                                               stk8ba50_data_rdy_trig_poll,
+                                               NULL,
+                                               IRQF_TRIGGER_RISING |
+                                               IRQF_ONESHOT,
+                                               STK8BA50_IRQ_NAME,
+                                               indio_dev);
+               if (ret < 0) {
+                       dev_err(&client->dev, "request irq %d failed\n",
+                               client->irq);
+                       goto err_power_off;
+               }
+
+               data->dready_trig = devm_iio_trigger_alloc(&client->dev,
+                                                          "%s-dev%d",
+                                                          indio_dev->name,
+                                                          indio_dev->id);
+               if (!data->dready_trig) {
+                       ret = -ENOMEM;
+                       goto err_power_off;
+               }
+
+               data->dready_trig->dev.parent = &client->dev;
+               data->dready_trig->ops = &stk8ba50_trigger_ops;
+               iio_trigger_set_drvdata(data->dready_trig, indio_dev);
+               ret = iio_trigger_register(data->dready_trig);
+               if (ret) {
+                       dev_err(&client->dev, "iio trigger register failed\n");
+                       goto err_power_off;
+               }
+       }
+
+       ret = iio_triggered_buffer_setup(indio_dev,
+                                        iio_pollfunc_store_time,
+                                        stk8ba50_trigger_handler,
+                                        &stk8ba50_buffer_setup_ops);
+       if (ret < 0) {
+               dev_err(&client->dev, "iio triggered buffer setup failed\n");
+               goto err_trigger_unregister;
+       }
+
        ret = iio_device_register(indio_dev);
        if (ret < 0) {
                dev_err(&client->dev, "device_register failed\n");
-               stk8ba50_set_power(data, STK8BA50_MODE_SUSPEND);
+               goto err_buffer_cleanup;
        }
 
        return ret;
+
+err_buffer_cleanup:
+       iio_triggered_buffer_cleanup(indio_dev);
+err_trigger_unregister:
+       if (data->dready_trig)
+               iio_trigger_unregister(data->dready_trig);
+err_power_off:
+       stk8ba50_set_power(data, STK8BA50_MODE_SUSPEND);
+       return ret;
 }
 
 static int stk8ba50_remove(struct i2c_client *client)
 {
        struct iio_dev *indio_dev = i2c_get_clientdata(client);
+       struct stk8ba50_data *data = iio_priv(indio_dev);
 
        iio_device_unregister(indio_dev);
+       iio_triggered_buffer_cleanup(indio_dev);
 
-       return stk8ba50_set_power(iio_priv(indio_dev), STK8BA50_MODE_SUSPEND);
+       if (data->dready_trig)
+               iio_trigger_unregister(data->dready_trig);
+
+       return stk8ba50_set_power(data, STK8BA50_MODE_SUSPEND);
 }
 
 #ifdef CONFIG_PM_SLEEP
index eb0cd897714a26b619b9e6c924ce4c3a65a5806b..233d47b7dea84b1d93f9ff0d704bd9be2a1f8775 100644 (file)
@@ -20,6 +20,9 @@ config AD7266
          Say yes here to build support for Analog Devices AD7265 and AD7266
          ADCs.
 
+         To compile this driver as a module, choose M here: the module will be
+         called ad7266.
+
 config AD7291
        tristate "Analog Devices AD7291 ADC driver"
        depends on I2C
@@ -52,8 +55,6 @@ config AD7476
          AD7277, AD7278, AD7475, AD7476, AD7477, AD7478, AD7466, AD7467, AD7468,
          AD7495, AD7910, AD7920, AD7920 SPI analog to digital converters (ADC).
 
-         If unsure, say N (but it's safe to say "Y").
-
          To compile this driver as a module, choose M here: the
          module will be called ad7476.
 
@@ -63,8 +64,7 @@ config AD7791
        select AD_SIGMA_DELTA
        help
          Say yes here to build support for Analog Devices AD7787, AD7788, AD7789,
-         AD7790 and AD7791 SPI analog to digital converters (ADC). If unsure, say
-         N (but it is safe to say "Y").
+         AD7790 and AD7791 SPI analog to digital converters (ADC).
 
          To compile this driver as a module, choose M here: the module will be
          called ad7791.
@@ -76,7 +76,6 @@ config AD7793
        help
          Say yes here to build support for Analog Devices AD7785, AD7792, AD7793,
          AD7794 and AD7795 SPI analog to digital converters (ADC).
-         If unsure, say N (but it's safe to say "Y").
 
          To compile this driver as a module, choose M here: the
          module will be called AD7793.
@@ -89,7 +88,6 @@ config AD7887
        help
          Say yes here to build support for Analog Devices
          AD7887 SPI analog to digital converter (ADC).
-         If unsure, say N (but it's safe to say "Y").
 
          To compile this driver as a module, choose M here: the
          module will be called ad7887.
@@ -117,6 +115,9 @@ config AD799X
          i2c analog to digital converters (ADC). Provides direct access
          via sysfs.
 
+         To compile this driver as a module, choose M here: the module will be
+         called ad799x.
+
 config AT91_ADC
        tristate "Atmel AT91 ADC"
        depends on ARCH_AT91
@@ -127,6 +128,9 @@ config AT91_ADC
        help
          Say yes here to build support for Atmel AT91 ADC.
 
+         To compile this driver as a module, choose M here: the module will be
+         called at91_adc.
+
 config AXP288_ADC
        tristate "X-Powers AXP288 ADC driver"
        depends on MFD_AXP20X
@@ -135,6 +139,9 @@ config AXP288_ADC
          device. Depending on platform configuration, this general purpose ADC can
          be used for sampling sensors such as thermal resistors.
 
+         To compile this driver as a module, choose M here: the module will be
+         called axp288_adc.
+
 config BERLIN2_ADC
        tristate "Marvell Berlin2 ADC driver"
        depends on ARCH_BERLIN
@@ -151,6 +158,9 @@ config DA9150_GPADC
          This driver can also be built as a module. If chosen, the module name
          will be da9150-gpadc.
 
+         To compile this driver as a module, choose M here: the module will be
+         called berlin2-adc.
+
 config CC10001_ADC
        tristate "Cosmic Circuits 10001 ADC driver"
        depends on HAS_IOMEM && HAVE_CLK && REGULATOR
@@ -170,12 +180,18 @@ config EXYNOS_ADC
          of SoCs for drivers such as the touchscreen and hwmon to use to share
          this resource.
 
+         To compile this driver as a module, choose M here: the module will be
+         called exynos_adc.
+
 config LP8788_ADC
        tristate "LP8788 ADC driver"
        depends on MFD_LP8788
        help
          Say yes here to build support for TI LP8788 ADC.
 
+         To compile this driver as a module, choose M here: the module will be
+         called lp8788_adc.
+
 config MAX1027
        tristate "Maxim max1027 ADC driver"
        depends on SPI
@@ -185,6 +201,9 @@ config MAX1027
          Say yes here to build support for Maxim SPI ADC models
          max1027, max1029 and max1031.
 
+         To compile this driver as a module, choose M here: the module will be
+         called max1027.
+
 config MAX1363
        tristate "Maxim max1363 ADC driver"
        depends on I2C
@@ -201,6 +220,9 @@ config MAX1363
          max11646, max11647) Provides direct access via sysfs and buffered
          data via the iio dev interface.
 
+         To compile this driver as a module, choose M here: the module will be
+         called max1363.
+
 config MCP320X
        tristate "Microchip Technology MCP3x01/02/04/08"
        depends on SPI
@@ -309,15 +331,18 @@ config TI_AM335X_ADC
          Say yes here to build support for Texas Instruments ADC
          driver which is also a MFD client.
 
+         To compile this driver as a module, choose M here: the module will be
+         called ti_am335x_adc.
+
 config TWL4030_MADC
        tristate "TWL4030 MADC (Monitoring A/D Converter)"
        depends on TWL4030_CORE
        help
-       This driver provides support for Triton TWL4030-MADC. The
-       driver supports both RT and SW conversion methods.
+         This driver provides support for Triton TWL4030-MADC. The
+         driver supports both RT and SW conversion methods.
 
-       This driver can also be built as a module. If so, the module will be
-       called twl4030-madc.
+         This driver can also be built as a module. If so, the module will be
+         called twl4030-madc.
 
 config TWL6030_GPADC
        tristate "TWL6030 GPADC (General Purpose A/D Converter) Support"
@@ -350,6 +375,9 @@ config VIPERBOARD_ADC
          Say yes here to access the ADC part of the Nano River
          Technologies Viperboard.
 
+         To compile this driver as a module, choose M here: the module will be
+         called viperboard_adc.
+
 config XILINX_XADC
        tristate "Xilinx XADC driver"
        depends on ARCH_ZYNQ || MICROBLAZE || COMPILE_TEST
index 115f6e99a7fa7c603ca9655d04759545c48e5932..8254f529b2a9a00738eb017f9e5d0f77c4aacfd8 100644 (file)
@@ -62,6 +62,7 @@ struct cc10001_adc_device {
        struct regulator *reg;
        u16 *buf;
 
+       bool shared;
        struct mutex lock;
        unsigned int start_delay_ns;
        unsigned int eoc_delay_ns;
@@ -153,7 +154,8 @@ static irqreturn_t cc10001_adc_trigger_h(int irq, void *p)
 
        mutex_lock(&adc_dev->lock);
 
-       cc10001_adc_power_up(adc_dev);
+       if (!adc_dev->shared)
+               cc10001_adc_power_up(adc_dev);
 
        /* Calculate delay step for eoc and sampled data */
        delay_ns = adc_dev->eoc_delay_ns / CC10001_MAX_POLL_COUNT;
@@ -177,7 +179,8 @@ static irqreturn_t cc10001_adc_trigger_h(int irq, void *p)
        }
 
 done:
-       cc10001_adc_power_down(adc_dev);
+       if (!adc_dev->shared)
+               cc10001_adc_power_down(adc_dev);
 
        mutex_unlock(&adc_dev->lock);
 
@@ -196,7 +199,8 @@ static u16 cc10001_adc_read_raw_voltage(struct iio_dev *indio_dev,
        unsigned int delay_ns;
        u16 val;
 
-       cc10001_adc_power_up(adc_dev);
+       if (!adc_dev->shared)
+               cc10001_adc_power_up(adc_dev);
 
        /* Calculate delay step for eoc and sampled data */
        delay_ns = adc_dev->eoc_delay_ns / CC10001_MAX_POLL_COUNT;
@@ -205,7 +209,8 @@ static u16 cc10001_adc_read_raw_voltage(struct iio_dev *indio_dev,
 
        val = cc10001_adc_poll_done(indio_dev, chan->channel, delay_ns);
 
-       cc10001_adc_power_down(adc_dev);
+       if (!adc_dev->shared)
+               cc10001_adc_power_down(adc_dev);
 
        return val;
 }
@@ -322,8 +327,10 @@ static int cc10001_adc_probe(struct platform_device *pdev)
        adc_dev = iio_priv(indio_dev);
 
        channel_map = GENMASK(CC10001_ADC_NUM_CHANNELS - 1, 0);
-       if (!of_property_read_u32(node, "adc-reserved-channels", &ret))
+       if (!of_property_read_u32(node, "adc-reserved-channels", &ret)) {
+               adc_dev->shared = true;
                channel_map &= ~ret;
+       }
 
        adc_dev->reg = devm_regulator_get(&pdev->dev, "vref");
        if (IS_ERR(adc_dev->reg))
@@ -368,6 +375,14 @@ static int cc10001_adc_probe(struct platform_device *pdev)
        adc_dev->eoc_delay_ns = NSEC_PER_SEC / adc_clk_rate;
        adc_dev->start_delay_ns = adc_dev->eoc_delay_ns * CC10001_WAIT_CYCLES;
 
+       /*
+        * There is only one register to power-up/power-down the AUX ADC.
+        * If the ADC is shared among multiple CPUs, always power it up here.
+        * If the ADC is used only by the MIPS, power-up/power-down at runtime.
+        */
+       if (adc_dev->shared)
+               cc10001_adc_power_up(adc_dev);
+
        /* Setup the ADC channels available on the device */
        ret = cc10001_adc_channel_init(indio_dev, channel_map);
        if (ret < 0)
@@ -402,6 +417,7 @@ static int cc10001_adc_remove(struct platform_device *pdev)
        struct iio_dev *indio_dev = platform_get_drvdata(pdev);
        struct cc10001_adc_device *adc_dev = iio_priv(indio_dev);
 
+       cc10001_adc_power_down(adc_dev);
        iio_device_unregister(indio_dev);
        iio_triggered_buffer_cleanup(indio_dev);
        clk_disable_unprepare(adc_dev->adc_clk);
index b96c636470ef504e3b7f3d5612602bcc76a3a3a0..3555122008b4408950f10e860eff61647dcc71a7 100644 (file)
@@ -404,7 +404,6 @@ MODULE_DEVICE_TABLE(of, mcp3422_of_match);
 static struct i2c_driver mcp3422_driver = {
        .driver = {
                .name = "mcp3422",
-               .owner = THIS_MODULE,
                .of_match_table = of_match_ptr(mcp3422_of_match),
        },
        .probe = mcp3422_probe,
index b3a82b4d1a7587b586077982f27856dcfdb7dee5..2c8374f8625201ea0578a1669490e3be65230abf 100644 (file)
@@ -140,7 +140,6 @@ MODULE_DEVICE_TABLE(of, adc081c_of_match);
 static struct i2c_driver adc081c_driver = {
        .driver = {
                .name = "adc081c",
-               .owner = THIS_MODULE,
                .of_match_table = of_match_ptr(adc081c_of_match),
        },
        .probe = adc081c_probe,
index 9a40097e7cf81439933c892d7bfc205cc43d69d7..d338bb595db3eda0ec2d472b62ef8a195f09e1e8 100644 (file)
@@ -700,7 +700,6 @@ static struct spi_driver ssp_driver = {
        .remove = ssp_remove,
        .driver = {
                .pm = &ssp_pm_ops,
-               .bus = &spi_bus_type,
                .owner = THIS_MODULE,
                .of_match_table = of_match_ptr(ssp_of_match),
                .name = "sensorhub"
index f03b92fd38031e67cb4e999991148a946f9a859a..c067e682149600f5d65eab9d442744f2fd6e9f62 100644 (file)
@@ -630,7 +630,6 @@ MODULE_DEVICE_TABLE(i2c, ad5064_i2c_ids);
 static struct i2c_driver ad5064_i2c_driver = {
        .driver = {
                   .name = "ad5064",
-                  .owner = THIS_MODULE,
        },
        .probe = ad5064_i2c_probe,
        .remove = ad5064_i2c_remove,
index 9de4c4d382803056cd8645c52a60dac7ccf0f885..130de9b3e0bf4d0d969a87d7c1d62c3114e77848 100644 (file)
@@ -593,7 +593,6 @@ MODULE_DEVICE_TABLE(i2c, ad5380_i2c_ids);
 static struct i2c_driver ad5380_i2c_driver = {
        .driver = {
                   .name = "ad5380",
-                  .owner = THIS_MODULE,
        },
        .probe = ad5380_i2c_probe,
        .remove = ad5380_i2c_remove,
index 46bb62a5c1d4d62ad279a791d281253cfc4c356b..07e17d72a3f3d13922684c85dab2b6a13811c702 100644 (file)
@@ -569,7 +569,6 @@ MODULE_DEVICE_TABLE(i2c, ad5446_i2c_ids);
 static struct i2c_driver ad5446_i2c_driver = {
        .driver = {
                   .name = "ad5446",
-                  .owner = THIS_MODULE,
        },
        .probe = ad5446_i2c_probe,
        .remove = ad5446_i2c_remove,
index 6e914495b346450c6ebdb2bf75851de278a98863..28b8748ea8242277e0e0a9aff187c23493096e8d 100644 (file)
@@ -392,7 +392,6 @@ static struct i2c_driver max5821_driver = {
        .driver = {
                .name   = "max5821",
                .pm     = MAX5821_PM_OPS,
-               .owner  = THIS_MODULE,
        },
        .probe          = max5821_probe,
        .remove         = max5821_remove,
index 10a0dfc3b01fa8045a9c20bf597e3b1110b57d2e..9890c81c027d30b370483c3bdd778c0fcec4e79f 100644 (file)
@@ -72,7 +72,6 @@ static int adf4350_sync_config(struct adf4350_state *st)
        for (i = ADF4350_REG5; i >= ADF4350_REG0; i--) {
                if ((st->regs_hw[i] != st->regs[i]) ||
                        ((i == ADF4350_REG0) && doublebuf)) {
-
                        switch (i) {
                        case ADF4350_REG1:
                        case ADF4350_REG4:
index f0fd94055d8858b722a5572b564edf0de125a90b..c102a6325bb00d287ac710079b63eeca2e22fd80 100644 (file)
@@ -379,7 +379,6 @@ MODULE_DEVICE_TABLE(i2c, itg3200_id);
 
 static struct i2c_driver itg3200_driver = {
        .driver = {
-               .owner  = THIS_MODULE,
                .name   = "itg3200",
                .pm     = &itg3200_pm_ops,
        },
index 64480b16c6895373c626b47d250c17500cc03311..6848451f817a239bc853f8bd90eda7aa98935282 100644 (file)
@@ -99,7 +99,6 @@ MODULE_DEVICE_TABLE(i2c, st_gyro_id_table);
 
 static struct i2c_driver st_gyro_driver = {
        .driver = {
-               .owner = THIS_MODULE,
                .name = "st-gyro-i2c",
                .of_match_table = of_match_ptr(st_gyro_of_match),
        },
index bdd586e6d955235a76f30303c3ac4da78fda4d66..91972ccd8aafb8d151953f344ba54933be79da3a 100644 (file)
@@ -177,7 +177,6 @@ MODULE_DEVICE_TABLE(i2c, si7005_id);
 static struct i2c_driver si7005_driver = {
        .driver = {
                .name   = "si7005",
-               .owner  = THIS_MODULE,
        },
        .probe = si7005_probe,
        .id_table = si7005_id,
index 65ce86837177158aba7e4d5fd2064e0731129369..f0e06093b5e8db3ce4f9fe89f983a01efba316a0 100644 (file)
@@ -690,6 +690,10 @@ static const struct iio_chan_spec inv_mpu_channels[] = {
 
 /* constant IIO attribute */
 static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("10 20 50 100 200 500");
+static IIO_CONST_ATTR(in_anglvel_scale_available,
+                                         "0.000133090 0.000266181 0.000532362 0.001064724");
+static IIO_CONST_ATTR(in_accel_scale_available,
+                                         "0.000598 0.001196 0.002392 0.004785");
 static IIO_DEV_ATTR_SAMP_FREQ(S_IRUGO | S_IWUSR, inv_fifo_rate_show,
        inv_mpu6050_fifo_rate_store);
 static IIO_DEVICE_ATTR(in_gyro_matrix, S_IRUGO, inv_attr_show, NULL,
@@ -702,6 +706,8 @@ static struct attribute *inv_attributes[] = {
        &iio_dev_attr_in_accel_matrix.dev_attr.attr,
        &iio_dev_attr_sampling_frequency.dev_attr.attr,
        &iio_const_attr_sampling_frequency_available.dev_attr.attr,
+       &iio_const_attr_in_accel_scale_available.dev_attr.attr,
+       &iio_const_attr_in_anglvel_scale_available.dev_attr.attr,
        NULL,
 };
 
@@ -921,7 +927,6 @@ static struct i2c_driver inv_mpu_driver = {
        .remove         =       inv_mpu_remove,
        .id_table       =       inv_mpu_id,
        .driver = {
-               .owner  =       THIS_MODULE,
                .name   =       "inv-mpu6050",
                .pm     =       INV_MPU6050_PMOPS,
                .acpi_match_table = ACPI_PTR(inv_acpi_match),
index 6eee1b044c60ed5806494d95bfa69a83687103a6..f72be48e650cbfb106d2388af2376b55999a5fb1 100644 (file)
@@ -71,8 +71,9 @@ static bool iio_buffer_ready(struct iio_dev *indio_dev, struct iio_buffer *buf,
 
        if (avail >= to_wait) {
                /* force a flush for non-blocking reads */
-               if (!to_wait && !avail && to_flush)
-                       iio_buffer_flush_hwfifo(indio_dev, buf, to_flush);
+               if (!to_wait && avail < to_flush)
+                       iio_buffer_flush_hwfifo(indio_dev, buf,
+                                               to_flush - avail);
                return true;
        }
 
@@ -100,8 +101,7 @@ ssize_t iio_buffer_read_first_n_outer(struct file *filp, char __user *buf,
        struct iio_dev *indio_dev = filp->private_data;
        struct iio_buffer *rb = indio_dev->buffer;
        size_t datum_size;
-       size_t to_wait = 0;
-       size_t to_read;
+       size_t to_wait;
        int ret;
 
        if (!indio_dev->info)
@@ -119,14 +119,14 @@ ssize_t iio_buffer_read_first_n_outer(struct file *filp, char __user *buf,
        if (!datum_size)
                return 0;
 
-       to_read = min_t(size_t, n / datum_size, rb->watermark);
-
-       if (!(filp->f_flags & O_NONBLOCK))
-               to_wait = to_read;
+       if (filp->f_flags & O_NONBLOCK)
+               to_wait = 0;
+       else
+               to_wait = min_t(size_t, n / datum_size, rb->watermark);
 
        do {
                ret = wait_event_interruptible(rb->pollq,
-                       iio_buffer_ready(indio_dev, rb, to_wait, to_read));
+                     iio_buffer_ready(indio_dev, rb, to_wait, n / datum_size));
                if (ret)
                        return ret;
 
index 3524b0de872110d31442060a109c5c4243a3f0cf..d8051cdcbdc2212fe6e069c3bf60db0f2431aa58 100644 (file)
@@ -81,6 +81,14 @@ static const char * const iio_modifier_names[] = {
        [IIO_MOD_X] = "x",
        [IIO_MOD_Y] = "y",
        [IIO_MOD_Z] = "z",
+       [IIO_MOD_X_AND_Y] = "x&y",
+       [IIO_MOD_X_AND_Z] = "x&z",
+       [IIO_MOD_Y_AND_Z] = "y&z",
+       [IIO_MOD_X_AND_Y_AND_Z] = "x&y&z",
+       [IIO_MOD_X_OR_Y] = "x|y",
+       [IIO_MOD_X_OR_Z] = "x|z",
+       [IIO_MOD_Y_OR_Z] = "y|z",
+       [IIO_MOD_X_OR_Y_OR_Z] = "x|y|z",
        [IIO_MOD_ROOT_SUM_SQUARED_X_Y] = "sqrt(x^2+y^2)",
        [IIO_MOD_SUM_SQUARED_X_Y_Z] = "x^2+y^2+z^2",
        [IIO_MOD_LIGHT_BOTH] = "both",
index 15a5341b5e7b303b80257db09853a2a62560b8d1..4b2858ba1fd6c534e8a23bdcc4a6a5b9f813b56d 100644 (file)
@@ -24,8 +24,8 @@ static const struct iio_buffer_setup_ops iio_triggered_buffer_setup_ops = {
 /**
  * iio_triggered_buffer_setup() - Setup triggered buffer and pollfunc
  * @indio_dev:         IIO device structure
- * @pollfunc_bh:       Function which will be used as pollfunc bottom half
- * @pollfunc_th:       Function which will be used as pollfunc top half
+ * @h:                 Function which will be used as pollfunc top half
+ * @thread:            Function which will be used as pollfunc bottom half
  * @setup_ops:         Buffer setup functions to use for this device.
  *                     If NULL the default setup functions for triggered
  *                     buffers will be used.
@@ -42,8 +42,8 @@ static const struct iio_buffer_setup_ops iio_triggered_buffer_setup_ops = {
  * iio_triggered_buffer_cleanup().
  */
 int iio_triggered_buffer_setup(struct iio_dev *indio_dev,
-       irqreturn_t (*pollfunc_bh)(int irq, void *p),
-       irqreturn_t (*pollfunc_th)(int irq, void *p),
+       irqreturn_t (*h)(int irq, void *p),
+       irqreturn_t (*thread)(int irq, void *p),
        const struct iio_buffer_setup_ops *setup_ops)
 {
        struct iio_buffer *buffer;
@@ -57,8 +57,8 @@ int iio_triggered_buffer_setup(struct iio_dev *indio_dev,
 
        iio_device_attach_buffer(indio_dev, buffer);
 
-       indio_dev->pollfunc = iio_alloc_pollfunc(pollfunc_bh,
-                                                pollfunc_th,
+       indio_dev->pollfunc = iio_alloc_pollfunc(h,
+                                                thread,
                                                 IRQF_ONESHOT,
                                                 indio_dev,
                                                 "%s_consumer%d",
index a5c59251ec0e93b90eeefee7637556629a32ede6..b37e18d07630fad28f0a190360e8629561535b23 100644 (file)
@@ -86,7 +86,7 @@ config CM3323
        depends on I2C
        tristate "Capella CM3323 color light sensor"
        help
-        Say Y here if you want to build a driver for Capela CM3323
+        Say Y here if you want to build a driver for Capella CM3323
         color sensor.
 
         To compile this driver as a module, choose M here: the module will
@@ -168,6 +168,17 @@ config JSA1212
         To compile this driver as a module, choose M here:
         the module will be called jsa1212.
 
+config RPR0521
+       tristate "ROHM RPR0521 ALS and proximity sensor driver"
+       depends on I2C
+       select REGMAP_I2C
+       help
+        Say Y here if you want to build support for ROHM's RPR0521
+        ambient light and proximity sensor device.
+
+        To compile this driver as a module, choose M here:
+        the module will be called rpr0521.
+
 config SENSORS_LM3533
        tristate "LM3533 ambient light sensor"
        depends on MFD_LM3533
index e2d50fd59c66fbadbc3c8b10098d9d11c7549399..adf97237db729509fc87ccdf6a51d19a55f81411 100644 (file)
@@ -19,6 +19,7 @@ obj-$(CONFIG_ISL29125)                += isl29125.o
 obj-$(CONFIG_JSA1212)          += jsa1212.o
 obj-$(CONFIG_SENSORS_LM3533)   += lm3533-als.o
 obj-$(CONFIG_LTR501)           += ltr501.o
+obj-$(CONFIG_RPR0521)          += rpr0521.o
 obj-$(CONFIG_SENSORS_TSL2563)  += tsl2563.o
 obj-$(CONFIG_STK3310)          += stk3310.o
 obj-$(CONFIG_TCS3414)          += tcs3414.o
index 9ddde0ca9c3415106ef8821027ad55b8f0b641fa..e1b9fa5a7e9153e0923f8c5f9d7df60928cfe875 100644 (file)
@@ -515,7 +515,6 @@ MODULE_DEVICE_TABLE(i2c, apds9300_id);
 static struct i2c_driver apds9300_driver = {
        .driver = {
                .name   = APDS9300_DRV_NAME,
-               .owner  = THIS_MODULE,
                .pm     = APDS9300_PM_OPS,
        },
        .probe          = apds9300_probe,
index 564c2b3c1a83dde9ae3358e6a8a2a04a997f06a9..8b4164343f2001c2128f7d5e7c5ce33090adeb50 100644 (file)
@@ -319,7 +319,6 @@ MODULE_DEVICE_TABLE(i2c, bh1750_id);
 static struct i2c_driver bh1750_driver = {
        .driver = {
                .name = "bh1750",
-               .owner = THIS_MODULE,
                .pm = BH1750_PM_OPS,
        },
        .probe = bh1750_probe,
index 5d12ae54d0886e1179ab18e8d72480bb9d12d40a..1c0de2f8885db046c319382185a629668d8e99e2 100644 (file)
@@ -358,7 +358,6 @@ static struct i2c_driver cm32181_driver = {
        .driver = {
                .name   = "cm32181",
                .of_match_table = of_match_ptr(cm32181_of_match),
-               .owner  = THIS_MODULE,
        },
        .id_table       = cm32181_id,
        .probe          = cm32181_probe,
index 39c8d99cc48ee988a59f17f605372d07258d0e05..1b508c65877c0603f784c15f807029a61d6e128a 100644 (file)
@@ -421,7 +421,6 @@ static const struct of_device_id cm3232_of_match[] = {
 static struct i2c_driver cm3232_driver = {
        .driver = {
                .name   = "cm3232",
-               .owner  = THIS_MODULE,
                .of_match_table = of_match_ptr(cm3232_of_match),
 #ifdef CONFIG_PM_SLEEP
                .pm     = &cm3232_pm_ops,
index a1d4905cc9d2d9680d5b3972233948fef3114035..d823c112d54bdbbf9b656e6eb8790c327cc1ccd8 100644 (file)
@@ -29,7 +29,7 @@
 
 #define CM3323_CONF_SD_BIT     BIT(0) /* sensor disable */
 #define CM3323_CONF_AF_BIT     BIT(1) /* auto/manual force mode */
-#define CM3323_CONF_IT_MASK    (BIT(4) | BIT(5) | BIT(6))
+#define CM3323_CONF_IT_MASK    GENMASK(6, 4)
 #define CM3323_CONF_IT_SHIFT   4
 
 #define CM3323_INT_TIME_AVAILABLE "0.04 0.08 0.16 0.32 0.64 1.28"
@@ -133,9 +133,11 @@ static int cm3323_set_it_bits(struct cm3323_data *data, int val, int val2)
                                return ret;
 
                        data->reg_conf = reg_conf;
+
                        return 0;
                }
        }
+
        return -EINVAL;
 }
 
@@ -148,6 +150,7 @@ static int cm3323_get_it_bits(struct cm3323_data *data)
 
        if (bits >= ARRAY_SIZE(cm3323_int_time))
                return -EINVAL;
+
        return bits;
 }
 
@@ -155,7 +158,7 @@ static int cm3323_read_raw(struct iio_dev *indio_dev,
                           struct iio_chan_spec const *chan, int *val,
                           int *val2, long mask)
 {
-       int i, ret;
+       int ret;
        struct cm3323_data *data = iio_priv(indio_dev);
 
        switch (mask) {
@@ -172,14 +175,14 @@ static int cm3323_read_raw(struct iio_dev *indio_dev,
                return IIO_VAL_INT;
        case IIO_CHAN_INFO_INT_TIME:
                mutex_lock(&data->mutex);
-               i = cm3323_get_it_bits(data);
-               if (i < 0) {
+               ret = cm3323_get_it_bits(data);
+               if (ret < 0) {
                        mutex_unlock(&data->mutex);
-                       return -EINVAL;
+                       return ret;
                }
 
-               *val = cm3323_int_time[i].val;
-               *val2 = cm3323_int_time[i].val2;
+               *val = cm3323_int_time[ret].val;
+               *val2 = cm3323_int_time[ret].val2;
                mutex_unlock(&data->mutex);
 
                return IIO_VAL_INT_PLUS_MICRO;
@@ -243,11 +246,13 @@ static int cm3323_probe(struct i2c_client *client,
                dev_err(&client->dev, "cm3323 chip init failed\n");
                return ret;
        }
+
        ret = iio_device_register(indio_dev);
        if (ret < 0) {
                dev_err(&client->dev, "failed to register iio dev\n");
                goto err_init;
        }
+
        return 0;
 err_init:
        cm3323_disable(indio_dev);
index 39fc67e82138470a1f8523d7de2902f072603a6f..2a39e141e90c0895e4104a8d9bccd8facc000610 100644 (file)
@@ -736,7 +736,6 @@ static struct i2c_driver cm36651_driver = {
        .driver = {
                .name   = "cm36651",
                .of_match_table = cm36651_of_match,
-               .owner  = THIS_MODULE,
        },
        .probe          = cm36651_probe,
        .remove         = cm36651_remove,
index 32b6449833faf5f6102e8b55edcb6810f2c25678..0334a814b5eb5956034a61108c2693375ac06e49 100644 (file)
@@ -1640,7 +1640,6 @@ static struct i2c_driver gp2ap020a00f_driver = {
        .driver = {
                .name   = GP2A_I2C_NAME,
                .of_match_table = of_match_ptr(gp2ap020a00f_of_match),
-               .owner  = THIS_MODULE,
        },
        .probe          = gp2ap020a00f_probe,
        .remove         = gp2ap020a00f_remove,
index 0d248476f4c9b64b7479e4135fbddb95e178bae2..45ca056f019ed2832bd68f14833ae2b4a4839fd7 100644 (file)
@@ -284,8 +284,7 @@ static int hid_prox_probe(struct platform_device *pdev)
                goto error_free_dev_mem;
        }
 
-       indio_dev->num_channels =
-                               ARRAY_SIZE(prox_channels);
+       indio_dev->num_channels = ARRAY_SIZE(prox_channels);
        indio_dev->dev.parent = &pdev->dev;
        indio_dev->info = &prox_info;
        indio_dev->name = name;
index c82f4a6f84645c2dd327f17ee74fdb6bf867544f..e2945a20e5f621a7740300b0aa1e48ca732ba16f 100644 (file)
@@ -197,9 +197,21 @@ done:
        return IRQ_HANDLED;
 }
 
+static IIO_CONST_ATTR(scale_available, "0.005722 0.152590");
+
+static struct attribute *isl29125_attributes[] = {
+       &iio_const_attr_scale_available.dev_attr.attr,
+       NULL
+};
+
+static const struct attribute_group isl29125_attribute_group = {
+       .attrs = isl29125_attributes,
+};
+
 static const struct iio_info isl29125_info = {
        .read_raw = isl29125_read_raw,
        .write_raw = isl29125_write_raw,
+       .attrs = &isl29125_attribute_group,
        .driver_module = THIS_MODULE,
 };
 
@@ -334,7 +346,6 @@ static struct i2c_driver isl29125_driver = {
        .driver = {
                .name   = ISL29125_DRV_NAME,
                .pm     = &isl29125_pm_ops,
-               .owner  = THIS_MODULE,
        },
        .probe          = isl29125_probe,
        .remove         = isl29125_remove,
index 3a3af89beaf962671c9a5e65d0b3dd7fc25ce2c4..c4e8c6b6c3c31ccbf0124b551694b48def01c269 100644 (file)
@@ -457,7 +457,6 @@ static struct i2c_driver jsa1212_driver = {
        .driver = {
                .name   = JSA1212_DRIVER_NAME,
                .pm     = JSA1212_PM_OPS,
-               .owner  = THIS_MODULE,
                .acpi_match_table = ACPI_PTR(jsa1212_acpi_match),
        },
        .probe          = jsa1212_probe,
index b5a0e66b5f282f09941dddf58de1b51eed3e71c2..809a961b9a7f6d0d0077114e12767e4e267c7606 100644 (file)
@@ -1551,7 +1551,6 @@ static struct i2c_driver ltr501_driver = {
                .name   = LTR501_DRV_NAME,
                .pm     = &ltr501_pm_ops,
                .acpi_match_table = ACPI_PTR(ltr_acpi_match),
-               .owner  = THIS_MODULE,
        },
        .probe  = ltr501_probe,
        .remove = ltr501_remove,
diff --git a/drivers/iio/light/rpr0521.c b/drivers/iio/light/rpr0521.c
new file mode 100644 (file)
index 0000000..4b75bb0
--- /dev/null
@@ -0,0 +1,615 @@
+/*
+ * RPR-0521 ROHM Ambient Light and Proximity Sensor
+ *
+ * Copyright (c) 2015, Intel Corporation.
+ *
+ * This file is subject to the terms and conditions of version 2 of
+ * the GNU General Public License.  See the file COPYING in the main
+ * directory of this archive for more details.
+ *
+ * IIO driver for RPR-0521RS (7-bit I2C slave address 0x38).
+ *
+ * TODO: illuminance channel, PM support, buffer
+ */
+
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/i2c.h>
+#include <linux/regmap.h>
+#include <linux/delay.h>
+#include <linux/acpi.h>
+
+#include <linux/iio/iio.h>
+#include <linux/iio/sysfs.h>
+#include <linux/pm_runtime.h>
+
+#define RPR0521_REG_SYSTEM_CTRL                0x40
+#define RPR0521_REG_MODE_CTRL          0x41
+#define RPR0521_REG_ALS_CTRL           0x42
+#define RPR0521_REG_PXS_CTRL           0x43
+#define RPR0521_REG_PXS_DATA           0x44 /* 16-bit, little endian */
+#define RPR0521_REG_ALS_DATA0          0x46 /* 16-bit, little endian */
+#define RPR0521_REG_ALS_DATA1          0x48 /* 16-bit, little endian */
+#define RPR0521_REG_ID                 0x92
+
+#define RPR0521_MODE_ALS_MASK          BIT(7)
+#define RPR0521_MODE_PXS_MASK          BIT(6)
+#define RPR0521_MODE_MEAS_TIME_MASK    GENMASK(3, 0)
+#define RPR0521_ALS_DATA0_GAIN_MASK    GENMASK(5, 4)
+#define RPR0521_ALS_DATA0_GAIN_SHIFT   4
+#define RPR0521_ALS_DATA1_GAIN_MASK    GENMASK(3, 2)
+#define RPR0521_ALS_DATA1_GAIN_SHIFT   2
+#define RPR0521_PXS_GAIN_MASK          GENMASK(5, 4)
+#define RPR0521_PXS_GAIN_SHIFT         4
+
+#define RPR0521_MODE_ALS_ENABLE                BIT(7)
+#define RPR0521_MODE_ALS_DISABLE       0x00
+#define RPR0521_MODE_PXS_ENABLE                BIT(6)
+#define RPR0521_MODE_PXS_DISABLE       0x00
+
+#define RPR0521_MANUFACT_ID            0xE0
+#define RPR0521_DEFAULT_MEAS_TIME      0x06 /* ALS - 100ms, PXS - 100ms */
+
+#define RPR0521_DRV_NAME               "RPR0521"
+#define RPR0521_REGMAP_NAME            "rpr0521_regmap"
+
+#define RPR0521_SLEEP_DELAY_MS 2000
+
+#define RPR0521_ALS_SCALE_AVAIL "0.007812 0.015625 0.5 1"
+#define RPR0521_PXS_SCALE_AVAIL "0.125 0.5 1"
+
+struct rpr0521_gain {
+       int scale;
+       int uscale;
+};
+
+static const struct rpr0521_gain rpr0521_als_gain[4] = {
+       {1, 0},         /* x1 */
+       {0, 500000},    /* x2 */
+       {0, 15625},     /* x64 */
+       {0, 7812},      /* x128 */
+};
+
+static const struct rpr0521_gain rpr0521_pxs_gain[3] = {
+       {1, 0},         /* x1 */
+       {0, 500000},    /* x2 */
+       {0, 125000},    /* x4 */
+};
+
+enum rpr0521_channel {
+       RPR0521_CHAN_ALS_DATA0,
+       RPR0521_CHAN_ALS_DATA1,
+       RPR0521_CHAN_PXS,
+};
+
+struct rpr0521_reg_desc {
+       u8 address;
+       u8 device_mask;
+};
+
+static const struct rpr0521_reg_desc rpr0521_data_reg[] = {
+       [RPR0521_CHAN_ALS_DATA0] = {
+               .address        = RPR0521_REG_ALS_DATA0,
+               .device_mask    = RPR0521_MODE_ALS_MASK,
+       },
+       [RPR0521_CHAN_ALS_DATA1] = {
+               .address        = RPR0521_REG_ALS_DATA1,
+               .device_mask    = RPR0521_MODE_ALS_MASK,
+       },
+       [RPR0521_CHAN_PXS]      = {
+               .address        = RPR0521_REG_PXS_DATA,
+               .device_mask    = RPR0521_MODE_PXS_MASK,
+       },
+};
+
+static const struct rpr0521_gain_info {
+       u8 reg;
+       u8 mask;
+       u8 shift;
+       const struct rpr0521_gain *gain;
+       int size;
+} rpr0521_gain[] = {
+       [RPR0521_CHAN_ALS_DATA0] = {
+               .reg    = RPR0521_REG_ALS_CTRL,
+               .mask   = RPR0521_ALS_DATA0_GAIN_MASK,
+               .shift  = RPR0521_ALS_DATA0_GAIN_SHIFT,
+               .gain   = rpr0521_als_gain,
+               .size   = ARRAY_SIZE(rpr0521_als_gain),
+       },
+       [RPR0521_CHAN_ALS_DATA1] = {
+               .reg    = RPR0521_REG_ALS_CTRL,
+               .mask   = RPR0521_ALS_DATA1_GAIN_MASK,
+               .shift  = RPR0521_ALS_DATA1_GAIN_SHIFT,
+               .gain   = rpr0521_als_gain,
+               .size   = ARRAY_SIZE(rpr0521_als_gain),
+       },
+       [RPR0521_CHAN_PXS] = {
+               .reg    = RPR0521_REG_PXS_CTRL,
+               .mask   = RPR0521_PXS_GAIN_MASK,
+               .shift  = RPR0521_PXS_GAIN_SHIFT,
+               .gain   = rpr0521_pxs_gain,
+               .size   = ARRAY_SIZE(rpr0521_pxs_gain),
+       },
+};
+
+struct rpr0521_data {
+       struct i2c_client *client;
+
+       /* protect device params updates (e.g state, gain) */
+       struct mutex lock;
+
+       /* device active status */
+       bool als_dev_en;
+       bool pxs_dev_en;
+
+       /* optimize runtime pm ops - enable device only if needed */
+       bool als_ps_need_en;
+       bool pxs_ps_need_en;
+
+       struct regmap *regmap;
+};
+
+static IIO_CONST_ATTR(in_intensity_scale_available, RPR0521_ALS_SCALE_AVAIL);
+static IIO_CONST_ATTR(in_proximity_scale_available, RPR0521_PXS_SCALE_AVAIL);
+
+static struct attribute *rpr0521_attributes[] = {
+       &iio_const_attr_in_intensity_scale_available.dev_attr.attr,
+       &iio_const_attr_in_proximity_scale_available.dev_attr.attr,
+       NULL,
+};
+
+static const struct attribute_group rpr0521_attribute_group = {
+       .attrs = rpr0521_attributes,
+};
+
+static const struct iio_chan_spec rpr0521_channels[] = {
+       {
+               .type = IIO_INTENSITY,
+               .modified = 1,
+               .address = RPR0521_CHAN_ALS_DATA0,
+               .channel2 = IIO_MOD_LIGHT_BOTH,
+               .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
+                       BIT(IIO_CHAN_INFO_SCALE),
+       },
+       {
+               .type = IIO_INTENSITY,
+               .modified = 1,
+               .address = RPR0521_CHAN_ALS_DATA1,
+               .channel2 = IIO_MOD_LIGHT_IR,
+               .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
+                       BIT(IIO_CHAN_INFO_SCALE),
+       },
+       {
+               .type = IIO_PROXIMITY,
+               .address = RPR0521_CHAN_PXS,
+               .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
+                       BIT(IIO_CHAN_INFO_SCALE),
+       }
+};
+
+static int rpr0521_als_enable(struct rpr0521_data *data, u8 status)
+{
+       int ret;
+
+       ret = regmap_update_bits(data->regmap, RPR0521_REG_MODE_CTRL,
+                                RPR0521_MODE_ALS_MASK,
+                                status);
+       if (ret < 0)
+               return ret;
+
+       data->als_dev_en = true;
+
+       return 0;
+}
+
+static int rpr0521_pxs_enable(struct rpr0521_data *data, u8 status)
+{
+       int ret;
+
+       ret = regmap_update_bits(data->regmap, RPR0521_REG_MODE_CTRL,
+                                RPR0521_MODE_PXS_MASK,
+                                status);
+       if (ret < 0)
+               return ret;
+
+       data->pxs_dev_en = true;
+
+       return 0;
+}
+
+/**
+ * rpr0521_set_power_state - handles runtime PM state and sensors enabled status
+ *
+ * @data: rpr0521 device private data
+ * @on: state to be set for devices in @device_mask
+ * @device_mask: bitmask specifying for which device we need to update @on state
+ *
+ * We rely on rpr0521_runtime_resume to enable our @device_mask devices, but
+ * if (for example) PXS was enabled (pxs_dev_en = true) by a previous call to
+ * rpr0521_runtime_resume and we want to enable ALS we MUST set ALS enable
+ * bit of RPR0521_REG_MODE_CTRL here because rpr0521_runtime_resume will not
+ * be called twice.
+ */
+static int rpr0521_set_power_state(struct rpr0521_data *data, bool on,
+                                  u8 device_mask)
+{
+#ifdef CONFIG_PM
+       int ret;
+       u8 update_mask = 0;
+
+       if (device_mask & RPR0521_MODE_ALS_MASK) {
+               if (on && !data->als_ps_need_en && data->pxs_dev_en)
+                       update_mask |= RPR0521_MODE_ALS_MASK;
+               else
+                       data->als_ps_need_en = on;
+       }
+
+       if (device_mask & RPR0521_MODE_PXS_MASK) {
+               if (on && !data->pxs_ps_need_en && data->als_dev_en)
+                       update_mask |= RPR0521_MODE_PXS_MASK;
+               else
+                       data->pxs_ps_need_en = on;
+       }
+
+       if (update_mask) {
+               ret = regmap_update_bits(data->regmap, RPR0521_REG_MODE_CTRL,
+                                        update_mask, update_mask);
+               if (ret < 0)
+                       return ret;
+       }
+
+       if (on) {
+               ret = pm_runtime_get_sync(&data->client->dev);
+       } else {
+               pm_runtime_mark_last_busy(&data->client->dev);
+               ret = pm_runtime_put_autosuspend(&data->client->dev);
+       }
+       if (ret < 0) {
+               dev_err(&data->client->dev,
+                       "Failed: rpr0521_set_power_state for %d, ret %d\n",
+                       on, ret);
+               if (on)
+                       pm_runtime_put_noidle(&data->client->dev);
+
+               return ret;
+       }
+#endif
+       return 0;
+}
+
+static int rpr0521_get_gain(struct rpr0521_data *data, int chan,
+                           int *val, int *val2)
+{
+       int ret, reg, idx;
+
+       ret = regmap_read(data->regmap, rpr0521_gain[chan].reg, &reg);
+       if (ret < 0)
+               return ret;
+
+       idx = (rpr0521_gain[chan].mask & reg) >> rpr0521_gain[chan].shift;
+       *val = rpr0521_gain[chan].gain[idx].scale;
+       *val2 = rpr0521_gain[chan].gain[idx].uscale;
+
+       return 0;
+}
+
+static int rpr0521_set_gain(struct rpr0521_data *data, int chan,
+                           int val, int val2)
+{
+       int i, idx = -EINVAL;
+
+       /* get gain index */
+       for (i = 0; i < rpr0521_gain[chan].size; i++)
+               if (val == rpr0521_gain[chan].gain[i].scale &&
+                   val2 == rpr0521_gain[chan].gain[i].uscale) {
+                       idx = i;
+                       break;
+               }
+
+       if (idx < 0)
+               return idx;
+
+       return regmap_update_bits(data->regmap, rpr0521_gain[chan].reg,
+                                 rpr0521_gain[chan].mask,
+                                 idx << rpr0521_gain[chan].shift);
+}
+
+static int rpr0521_read_raw(struct iio_dev *indio_dev,
+                           struct iio_chan_spec const *chan, int *val,
+                           int *val2, long mask)
+{
+       struct rpr0521_data *data = iio_priv(indio_dev);
+       int ret;
+       u8 device_mask;
+       __le16 raw_data;
+
+       switch (mask) {
+       case IIO_CHAN_INFO_RAW:
+               if (chan->type != IIO_INTENSITY && chan->type != IIO_PROXIMITY)
+                       return -EINVAL;
+
+               device_mask = rpr0521_data_reg[chan->address].device_mask;
+
+               mutex_lock(&data->lock);
+               ret = rpr0521_set_power_state(data, true, device_mask);
+               if (ret < 0) {
+                       mutex_unlock(&data->lock);
+                       return ret;
+               }
+
+               ret = regmap_bulk_read(data->regmap,
+                                      rpr0521_data_reg[chan->address].address,
+                                      &raw_data, 2);
+               if (ret < 0) {
+                       rpr0521_set_power_state(data, false, device_mask);
+                       mutex_unlock(&data->lock);
+                       return ret;
+               }
+
+               ret = rpr0521_set_power_state(data, false, device_mask);
+               mutex_unlock(&data->lock);
+               if (ret < 0)
+                       return ret;
+
+               *val = le16_to_cpu(raw_data);
+
+               return IIO_VAL_INT;
+       case IIO_CHAN_INFO_SCALE:
+               mutex_lock(&data->lock);
+               ret = rpr0521_get_gain(data, chan->address, val, val2);
+               mutex_unlock(&data->lock);
+               if (ret < 0)
+                       return ret;
+
+               return IIO_VAL_INT_PLUS_MICRO;
+       default:
+               return -EINVAL;
+       }
+}
+
+static int rpr0521_write_raw(struct iio_dev *indio_dev,
+                            struct iio_chan_spec const *chan, int val,
+                            int val2, long mask)
+{
+       struct rpr0521_data *data = iio_priv(indio_dev);
+       int ret;
+
+       switch (mask) {
+       case IIO_CHAN_INFO_SCALE:
+               mutex_lock(&data->lock);
+               ret = rpr0521_set_gain(data, chan->address, val, val2);
+               mutex_unlock(&data->lock);
+
+               return ret;
+       default:
+               return -EINVAL;
+       }
+}
+
+static const struct iio_info rpr0521_info = {
+       .driver_module  = THIS_MODULE,
+       .read_raw       = rpr0521_read_raw,
+       .write_raw      = rpr0521_write_raw,
+       .attrs          = &rpr0521_attribute_group,
+};
+
+static int rpr0521_init(struct rpr0521_data *data)
+{
+       int ret;
+       int id;
+
+       ret = regmap_read(data->regmap, RPR0521_REG_ID, &id);
+       if (ret < 0) {
+               dev_err(&data->client->dev, "Failed to read REG_ID register\n");
+               return ret;
+       }
+
+       if (id != RPR0521_MANUFACT_ID) {
+               dev_err(&data->client->dev, "Wrong id, got %x, expected %x\n",
+                       id, RPR0521_MANUFACT_ID);
+               return -ENODEV;
+       }
+
+       /* set default measurement time - 100 ms for both ALS and PS */
+       ret = regmap_update_bits(data->regmap, RPR0521_REG_MODE_CTRL,
+                                RPR0521_MODE_MEAS_TIME_MASK,
+                                RPR0521_DEFAULT_MEAS_TIME);
+       if (ret) {
+               pr_err("regmap_update_bits returned %d\n", ret);
+               return ret;
+       }
+
+       ret = rpr0521_als_enable(data, RPR0521_MODE_ALS_ENABLE);
+       if (ret < 0)
+               return ret;
+       ret = rpr0521_pxs_enable(data, RPR0521_MODE_PXS_ENABLE);
+       if (ret < 0)
+               return ret;
+
+       return 0;
+}
+
+static int rpr0521_poweroff(struct rpr0521_data *data)
+{
+       int ret;
+
+       ret = regmap_update_bits(data->regmap, RPR0521_REG_MODE_CTRL,
+                                RPR0521_MODE_ALS_MASK |
+                                RPR0521_MODE_PXS_MASK,
+                                RPR0521_MODE_ALS_DISABLE |
+                                RPR0521_MODE_PXS_DISABLE);
+       if (ret < 0)
+               return ret;
+
+       data->als_dev_en = false;
+       data->pxs_dev_en = false;
+
+       return 0;
+}
+
+static bool rpr0521_is_volatile_reg(struct device *dev, unsigned int reg)
+{
+       switch (reg) {
+       case RPR0521_REG_MODE_CTRL:
+       case RPR0521_REG_ALS_CTRL:
+       case RPR0521_REG_PXS_CTRL:
+               return false;
+       default:
+               return true;
+       }
+}
+
+static const struct regmap_config rpr0521_regmap_config = {
+       .name           = RPR0521_REGMAP_NAME,
+
+       .reg_bits       = 8,
+       .val_bits       = 8,
+
+       .max_register   = RPR0521_REG_ID,
+       .cache_type     = REGCACHE_RBTREE,
+       .volatile_reg   = rpr0521_is_volatile_reg,
+};
+
+static int rpr0521_probe(struct i2c_client *client,
+                        const struct i2c_device_id *id)
+{
+       struct rpr0521_data *data;
+       struct iio_dev *indio_dev;
+       struct regmap *regmap;
+       int ret;
+
+       indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
+       if (!indio_dev)
+               return -ENOMEM;
+
+       regmap = devm_regmap_init_i2c(client, &rpr0521_regmap_config);
+       if (IS_ERR(regmap)) {
+               dev_err(&client->dev, "regmap_init failed!\n");
+               return PTR_ERR(regmap);
+       }
+
+       data = iio_priv(indio_dev);
+       i2c_set_clientdata(client, indio_dev);
+       data->client = client;
+       data->regmap = regmap;
+
+       mutex_init(&data->lock);
+
+       indio_dev->dev.parent = &client->dev;
+       indio_dev->info = &rpr0521_info;
+       indio_dev->name = RPR0521_DRV_NAME;
+       indio_dev->channels = rpr0521_channels;
+       indio_dev->num_channels = ARRAY_SIZE(rpr0521_channels);
+       indio_dev->modes = INDIO_DIRECT_MODE;
+
+       ret = rpr0521_init(data);
+       if (ret < 0) {
+               dev_err(&client->dev, "rpr0521 chip init failed\n");
+               return ret;
+       }
+       ret = iio_device_register(indio_dev);
+       if (ret < 0)
+               return ret;
+
+       ret = pm_runtime_set_active(&client->dev);
+       if (ret < 0)
+               goto err_iio_unregister;
+
+       pm_runtime_enable(&client->dev);
+       pm_runtime_set_autosuspend_delay(&client->dev, RPR0521_SLEEP_DELAY_MS);
+       pm_runtime_use_autosuspend(&client->dev);
+
+       return 0;
+
+err_iio_unregister:
+       iio_device_unregister(indio_dev);
+       return ret;
+}
+
+static int rpr0521_remove(struct i2c_client *client)
+{
+       struct iio_dev *indio_dev = i2c_get_clientdata(client);
+
+       pm_runtime_disable(&client->dev);
+       pm_runtime_set_suspended(&client->dev);
+       pm_runtime_put_noidle(&client->dev);
+
+       iio_device_unregister(indio_dev);
+       rpr0521_poweroff(iio_priv(indio_dev));
+
+       return 0;
+}
+
+#ifdef CONFIG_PM
+static int rpr0521_runtime_suspend(struct device *dev)
+{
+       struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
+       struct rpr0521_data *data = iio_priv(indio_dev);
+       int ret;
+
+       /* disable channels and sets {als,pxs}_dev_en to false */
+       mutex_lock(&data->lock);
+       ret = rpr0521_poweroff(data);
+       mutex_unlock(&data->lock);
+
+       return ret;
+}
+
+static int rpr0521_runtime_resume(struct device *dev)
+{
+       struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
+       struct rpr0521_data *data = iio_priv(indio_dev);
+       int ret;
+
+       if (data->als_ps_need_en) {
+               ret = rpr0521_als_enable(data, RPR0521_MODE_ALS_ENABLE);
+               if (ret < 0)
+                       return ret;
+               data->als_ps_need_en = false;
+       }
+
+       if (data->pxs_ps_need_en) {
+               ret = rpr0521_pxs_enable(data, RPR0521_MODE_PXS_ENABLE);
+               if (ret < 0)
+                       return ret;
+               data->pxs_ps_need_en = false;
+       }
+
+       return 0;
+}
+#endif
+
+static const struct dev_pm_ops rpr0521_pm_ops = {
+       SET_RUNTIME_PM_OPS(rpr0521_runtime_suspend,
+                          rpr0521_runtime_resume, NULL)
+};
+
+static const struct acpi_device_id rpr0521_acpi_match[] = {
+       {"RPR0521", 0},
+       { }
+};
+MODULE_DEVICE_TABLE(acpi, rpr0521_acpi_match);
+
+static const struct i2c_device_id rpr0521_id[] = {
+       {"rpr0521", 0},
+       { }
+};
+
+MODULE_DEVICE_TABLE(i2c, rpr0521_id);
+
+static struct i2c_driver rpr0521_driver = {
+       .driver = {
+               .name   = RPR0521_DRV_NAME,
+               .pm     = &rpr0521_pm_ops,
+               .acpi_match_table = ACPI_PTR(rpr0521_acpi_match),
+       },
+       .probe          = rpr0521_probe,
+       .remove         = rpr0521_remove,
+       .id_table       = rpr0521_id,
+};
+
+module_i2c_driver(rpr0521_driver);
+
+MODULE_AUTHOR("Daniel Baluta <daniel.baluta@intel.com>");
+MODULE_DESCRIPTION("RPR0521 ROHM Ambient Light and Proximity Sensor driver");
+MODULE_LICENSE("GPL v2");
index f8b1df018abeeba410c19dc48bd9723663973977..f90f8c5919fee96447a681ef2475208a9572dea8 100644 (file)
@@ -392,7 +392,6 @@ static struct i2c_driver tcs3414_driver = {
        .driver = {
                .name   = TCS3414_DRV_NAME,
                .pm     = &tcs3414_pm_ops,
-               .owner  = THIS_MODULE,
        },
        .probe          = tcs3414_probe,
        .remove         = tcs3414_remove,
index 752569985d1dff295fb00df9723926b404a7dafb..1b530bf04c8984d30feb70938b56772c72b16b98 100644 (file)
@@ -366,7 +366,6 @@ static struct i2c_driver tcs3472_driver = {
        .driver = {
                .name   = TCS3472_DRV_NAME,
                .pm     = &tcs3472_pm_ops,
-               .owner  = THIS_MODULE,
        },
        .probe          = tcs3472_probe,
        .remove         = tcs3472_remove,
index 63c26e2d5d9722242cf82b0bc8c5dc3ec3eacd46..26979183d27cf323dc934d799b415e3a2b666980 100644 (file)
@@ -247,7 +247,6 @@ static struct i2c_driver tsl4531_driver = {
        .driver = {
                .name   = TSL4531_DRV_NAME,
                .pm     = TSL4531_PM_OPS,
-               .owner  = THIS_MODULE,
        },
        .probe  = tsl4531_probe,
        .remove = tsl4531_remove,
index d948c4778ba6cc98776654edb34ec1636f08f480..c9d85bbc9230059d4483567150b7838f01c65c54 100644 (file)
@@ -185,7 +185,6 @@ static int vcnl4000_probe(struct i2c_client *client,
 static struct i2c_driver vcnl4000_driver = {
        .driver = {
                .name   = VCNL4000_DRV_NAME,
-               .owner  = THIS_MODULE,
        },
        .probe  = vcnl4000_probe,
        .id_table = vcnl4000_id,
index 1347a1f2e46f8194bad0bfe49bd91ea6a948ac8e..7da4ce9409e801735133780b13940b841c1dd038 100644 (file)
@@ -588,17 +588,6 @@ static int bmc150_magn_write_raw(struct iio_dev *indio_dev,
        }
 }
 
-static int bmc150_magn_validate_trigger(struct iio_dev *indio_dev,
-                                       struct iio_trigger *trig)
-{
-       struct bmc150_magn_data *data = iio_priv(indio_dev);
-
-       if (data->dready_trig != trig)
-               return -EINVAL;
-
-       return 0;
-}
-
 static ssize_t bmc150_magn_show_samp_freq_avail(struct device *dev,
                                                struct device_attribute *attr,
                                                char *buf)
@@ -659,7 +648,6 @@ static const struct iio_info bmc150_magn_info = {
        .attrs = &bmc150_magn_attrs_group,
        .read_raw = bmc150_magn_read_raw,
        .write_raw = bmc150_magn_write_raw,
-       .validate_trigger = bmc150_magn_validate_trigger,
        .driver_module = THIS_MODULE,
 };
 
@@ -682,7 +670,7 @@ static irqreturn_t bmc150_magn_trigger_handler(int irq, void *p)
                                           pf->timestamp);
 
 err:
-       iio_trigger_notify_done(data->dready_trig);
+       iio_trigger_notify_done(indio_dev->trig);
 
        return IRQ_HANDLED;
 }
@@ -827,6 +815,27 @@ static const struct iio_trigger_ops bmc150_magn_trigger_ops = {
        .owner = THIS_MODULE,
 };
 
+static int bmc150_magn_buffer_preenable(struct iio_dev *indio_dev)
+{
+       struct bmc150_magn_data *data = iio_priv(indio_dev);
+
+       return bmc150_magn_set_power_state(data, true);
+}
+
+static int bmc150_magn_buffer_postdisable(struct iio_dev *indio_dev)
+{
+       struct bmc150_magn_data *data = iio_priv(indio_dev);
+
+       return bmc150_magn_set_power_state(data, false);
+}
+
+static const struct iio_buffer_setup_ops bmc150_magn_buffer_setup_ops = {
+       .preenable = bmc150_magn_buffer_preenable,
+       .postenable = iio_triggered_buffer_postenable,
+       .predisable = iio_triggered_buffer_predisable,
+       .postdisable = bmc150_magn_buffer_postdisable,
+};
+
 static int bmc150_magn_gpio_probe(struct i2c_client *client)
 {
        struct device *dev;
@@ -932,16 +941,6 @@ static int bmc150_magn_probe(struct i2c_client *client,
                        goto err_poweroff;
                }
 
-               ret = iio_triggered_buffer_setup(indio_dev,
-                                                &iio_pollfunc_store_time,
-                                                bmc150_magn_trigger_handler,
-                                                NULL);
-               if (ret < 0) {
-                       dev_err(&client->dev,
-                               "iio triggered buffer setup failed\n");
-                       goto err_trigger_unregister;
-               }
-
                ret = request_threaded_irq(client->irq,
                                           iio_trigger_generic_data_rdy_poll,
                                           NULL,
@@ -951,14 +950,24 @@ static int bmc150_magn_probe(struct i2c_client *client,
                if (ret < 0) {
                        dev_err(&client->dev, "request irq %d failed\n",
                                client->irq);
-                       goto err_buffer_cleanup;
+                       goto err_trigger_unregister;
                }
        }
 
+       ret = iio_triggered_buffer_setup(indio_dev,
+                                        iio_pollfunc_store_time,
+                                        bmc150_magn_trigger_handler,
+                                        &bmc150_magn_buffer_setup_ops);
+       if (ret < 0) {
+               dev_err(&client->dev,
+                       "iio triggered buffer setup failed\n");
+               goto err_free_irq;
+       }
+
        ret = iio_device_register(indio_dev);
        if (ret < 0) {
                dev_err(&client->dev, "unable to register iio device\n");
-               goto err_free_irq;
+               goto err_buffer_cleanup;
        }
 
        ret = pm_runtime_set_active(&client->dev);
@@ -976,12 +985,11 @@ static int bmc150_magn_probe(struct i2c_client *client,
 
 err_iio_unregister:
        iio_device_unregister(indio_dev);
+err_buffer_cleanup:
+       iio_triggered_buffer_cleanup(indio_dev);
 err_free_irq:
        if (client->irq > 0)
                free_irq(client->irq, data->dready_trig);
-err_buffer_cleanup:
-       if (data->dready_trig)
-               iio_triggered_buffer_cleanup(indio_dev);
 err_trigger_unregister:
        if (data->dready_trig)
                iio_trigger_unregister(data->dready_trig);
@@ -1000,14 +1008,13 @@ static int bmc150_magn_remove(struct i2c_client *client)
        pm_runtime_put_noidle(&client->dev);
 
        iio_device_unregister(indio_dev);
+       iio_triggered_buffer_cleanup(indio_dev);
 
        if (client->irq > 0)
                free_irq(data->client->irq, data->dready_trig);
 
-       if (data->dready_trig) {
-               iio_triggered_buffer_cleanup(indio_dev);
+       if (data->dready_trig)
                iio_trigger_unregister(data->dready_trig);
-       }
 
        mutex_lock(&data->mutex);
        bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_SUSPEND, true);
@@ -1082,12 +1089,14 @@ static const struct dev_pm_ops bmc150_magn_pm_ops = {
 
 static const struct acpi_device_id bmc150_magn_acpi_match[] = {
        {"BMC150B", 0},
+       {"BMC156B", 0},
        {},
 };
 MODULE_DEVICE_TABLE(acpi, bmc150_magn_acpi_match);
 
 static const struct i2c_device_id bmc150_magn_id[] = {
        {"bmc150_magn", 0},
+       {"bmc156_magn", 0},
        {},
 };
 MODULE_DEVICE_TABLE(i2c, bmc150_magn_id);
index 5311d8aea8cc13ee73dd36bdbcdd202f61538120..28aa80731cea6729e6aed7ebb34204043bc8115c 100644 (file)
@@ -85,7 +85,6 @@ MODULE_DEVICE_TABLE(i2c, st_magn_id_table);
 
 static struct i2c_driver st_magn_driver = {
        .driver = {
-               .owner = THIS_MODULE,
                .name = "st-magn-i2c",
                .of_match_table = of_match_ptr(st_magn_of_match),
        },
index fa62950419479233a3aecf0f1b3fe03c42e5fe6f..4745179ff64b4b6afee6f237555dec5294e0fdf1 100644 (file)
@@ -53,10 +53,10 @@ config MPL3115
           will be called mpl3115.
 
 config MS5611
-       tristate "Measurement Specialities MS5611 pressure sensor driver"
+       tristate "Measurement Specialties MS5611 pressure sensor driver"
        help
-         Say Y here to build support for the Measurement Specialities
-         MS5611 pressure and temperature sensor.
+         Say Y here to build support for the Measurement Specialties
+         MS5611, MS5607 pressure and temperature sensors.
 
          To compile this driver as a module, choose M here: the module will
          be called ms5611_core.
index 099c6cdea43f12572e118202d6a6eb10f4788cff..23b93c797dba7009cafacdb07b5c895652d834e0 100644 (file)
 
 #define MS5611_PROM_WORDS_NB           8
 
+enum {
+       MS5611,
+       MS5607,
+};
+
+struct ms5611_chip_info {
+       u16 prom[MS5611_PROM_WORDS_NB];
+
+       int (*temp_and_pressure_compensate)(struct ms5611_chip_info *chip_info,
+                                           s32 *temp, s32 *pressure);
+};
+
 struct ms5611_state {
        void *client;
        struct mutex lock;
@@ -36,9 +48,9 @@ struct ms5611_state {
        int (*read_adc_temp_and_pressure)(struct device *dev,
                                          s32 *temp, s32 *pressure);
 
-       u16 prom[MS5611_PROM_WORDS_NB];
+       struct ms5611_chip_info *chip_info;
 };
 
-int ms5611_probe(struct iio_dev *indio_dev, struct device *dev);
+int ms5611_probe(struct iio_dev *indio_dev, struct device *dev, int type);
 
 #endif /* _MS5611_H */
index e42c8531d9b35d65f360fae6dc020c9b34465364..2f3d9b4aca4ec695b99f75e53e93af6107bf1d01 100644 (file)
@@ -9,6 +9,7 @@
  *
  * Data sheet:
  *  http://www.meas-spec.com/downloads/MS5611-01BA03.pdf
+ *  http://www.meas-spec.com/downloads/MS5607-02BA03.pdf
  *
  */
 
@@ -50,7 +51,8 @@ static int ms5611_read_prom(struct iio_dev *indio_dev)
        struct ms5611_state *st = iio_priv(indio_dev);
 
        for (i = 0; i < MS5611_PROM_WORDS_NB; i++) {
-               ret = st->read_prom_word(&indio_dev->dev, i, &st->prom[i]);
+               ret = st->read_prom_word(&indio_dev->dev,
+                                        i, &st->chip_info->prom[i]);
                if (ret < 0) {
                        dev_err(&indio_dev->dev,
                                "failed to read prom at %d\n", i);
@@ -58,7 +60,7 @@ static int ms5611_read_prom(struct iio_dev *indio_dev)
                }
        }
 
-       if (!ms5611_prom_is_valid(st->prom, MS5611_PROM_WORDS_NB)) {
+       if (!ms5611_prom_is_valid(st->chip_info->prom, MS5611_PROM_WORDS_NB)) {
                dev_err(&indio_dev->dev, "PROM integrity check failed\n");
                return -ENODEV;
        }
@@ -70,22 +72,30 @@ static int ms5611_read_temp_and_pressure(struct iio_dev *indio_dev,
                                         s32 *temp, s32 *pressure)
 {
        int ret;
-       s32 t, p;
-       s64 off, sens, dt;
        struct ms5611_state *st = iio_priv(indio_dev);
 
-       ret = st->read_adc_temp_and_pressure(&indio_dev->dev, &t, &p);
+       ret = st->read_adc_temp_and_pressure(&indio_dev->dev, temp, pressure);
        if (ret < 0) {
                dev_err(&indio_dev->dev,
                        "failed to read temperature and pressure\n");
                return ret;
        }
 
-       dt = t - (st->prom[5] << 8);
-       off = ((s64)st->prom[2] << 16) + ((st->prom[4] * dt) >> 7);
-       sens = ((s64)st->prom[1] << 15) + ((st->prom[3] * dt) >> 8);
+       return st->chip_info->temp_and_pressure_compensate(st->chip_info,
+                                                          temp, pressure);
+}
+
+static int ms5611_temp_and_pressure_compensate(struct ms5611_chip_info *chip_info,
+                                              s32 *temp, s32 *pressure)
+{
+       s32 t = *temp, p = *pressure;
+       s64 off, sens, dt;
 
-       t = 2000 + ((st->prom[6] * dt) >> 23);
+       dt = t - (chip_info->prom[5] << 8);
+       off = ((s64)chip_info->prom[2] << 16) + ((chip_info->prom[4] * dt) >> 7);
+       sens = ((s64)chip_info->prom[1] << 15) + ((chip_info->prom[3] * dt) >> 8);
+
+       t = 2000 + ((chip_info->prom[6] * dt) >> 23);
        if (t < 2000) {
                s64 off2, sens2, t2;
 
@@ -111,6 +121,42 @@ static int ms5611_read_temp_and_pressure(struct iio_dev *indio_dev,
        return 0;
 }
 
+static int ms5607_temp_and_pressure_compensate(struct ms5611_chip_info *chip_info,
+                                              s32 *temp, s32 *pressure)
+{
+       s32 t = *temp, p = *pressure;
+       s64 off, sens, dt;
+
+       dt = t - (chip_info->prom[5] << 8);
+       off = ((s64)chip_info->prom[2] << 17) + ((chip_info->prom[4] * dt) >> 6);
+       sens = ((s64)chip_info->prom[1] << 16) + ((chip_info->prom[3] * dt) >> 7);
+
+       t = 2000 + ((chip_info->prom[6] * dt) >> 23);
+       if (t < 2000) {
+               s64 off2, sens2, t2;
+
+               t2 = (dt * dt) >> 31;
+               off2 = (61 * (t - 2000) * (t - 2000)) >> 4;
+               sens2 = off2 << 1;
+
+               if (t < -1500) {
+                       s64 tmp = (t + 1500) * (t + 1500);
+
+                       off2 += 15 * tmp;
+                       sens2 += (8 * tmp);
+               }
+
+               t -= t2;
+               off -= off2;
+               sens -= sens2;
+       }
+
+       *temp = t;
+       *pressure = (((p * sens) >> 21) - off) >> 15;
+
+       return 0;
+}
+
 static int ms5611_reset(struct iio_dev *indio_dev)
 {
        int ret;
@@ -160,16 +206,23 @@ static int ms5611_read_raw(struct iio_dev *indio_dev,
        return -EINVAL;
 }
 
+static struct ms5611_chip_info chip_info_tbl[] = {
+       [MS5611] = {
+               .temp_and_pressure_compensate = ms5611_temp_and_pressure_compensate,
+       },
+       [MS5607] = {
+               .temp_and_pressure_compensate = ms5607_temp_and_pressure_compensate,
+       }
+};
+
 static const struct iio_chan_spec ms5611_channels[] = {
        {
                .type = IIO_PRESSURE,
-               .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
-                       BIT(IIO_CHAN_INFO_SCALE)
+               .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
        },
        {
                .type = IIO_TEMP,
-               .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
-                       BIT(IIO_CHAN_INFO_SCALE)
+               .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
        }
 };
 
@@ -189,12 +242,13 @@ static int ms5611_init(struct iio_dev *indio_dev)
        return ms5611_read_prom(indio_dev);
 }
 
-int ms5611_probe(struct iio_dev *indio_dev, struct device *dev)
+int ms5611_probe(struct iio_dev *indio_dev, struct device *dev, int type)
 {
        int ret;
        struct ms5611_state *st = iio_priv(indio_dev);
 
        mutex_init(&st->lock);
+       st->chip_info = &chip_info_tbl[type];
        indio_dev->dev.parent = dev;
        indio_dev->name = dev->driver->name;
        indio_dev->info = &ms5611_info;
index 748fd9acaad8fc5af78ce8b33bcd0818acdd8990..245797d1ecf0677f4c59c8ecb3766b329298050b 100644 (file)
@@ -104,11 +104,12 @@ static int ms5611_i2c_probe(struct i2c_client *client,
        st->read_adc_temp_and_pressure = ms5611_i2c_read_adc_temp_and_pressure;
        st->client = client;
 
-       return ms5611_probe(indio_dev, &client->dev);
+       return ms5611_probe(indio_dev, &client->dev, id->driver_data);
 }
 
 static const struct i2c_device_id ms5611_id[] = {
-       { "ms5611", 0 },
+       { "ms5611", MS5611 },
+       { "ms5607", MS5607 },
        { }
 };
 MODULE_DEVICE_TABLE(i2c, ms5611_id);
@@ -116,7 +117,6 @@ MODULE_DEVICE_TABLE(i2c, ms5611_id);
 static struct i2c_driver ms5611_driver = {
        .driver = {
                .name = "ms5611",
-               .owner = THIS_MODULE,
        },
        .id_table = ms5611_id,
        .probe = ms5611_i2c_probe,
index 976726fd4e6ce6b6e6fff65c25a468968c24f3f7..08ee6e88c79ff7068ce3e4751b35db827b1e7578 100644 (file)
@@ -103,11 +103,13 @@ static int ms5611_spi_probe(struct spi_device *spi)
        st->read_adc_temp_and_pressure = ms5611_spi_read_adc_temp_and_pressure;
        st->client = spi;
 
-       return ms5611_probe(indio_dev, &spi->dev);
+       return ms5611_probe(indio_dev, &spi->dev,
+                           spi_get_device_id(spi)->driver_data);
 }
 
 static const struct spi_device_id ms5611_id[] = {
-       { "ms5611", 0 },
+       { "ms5611", MS5611 },
+       { "ms5607", MS5607 },
        { }
 };
 MODULE_DEVICE_TABLE(spi, ms5611_id);
index 137788bba4a322a772f517a2348f165be24a8400..8fcf9766eaecbf0f3ef191e21a58e242e6419624 100644 (file)
@@ -79,7 +79,6 @@ MODULE_DEVICE_TABLE(i2c, st_press_id_table);
 
 static struct i2c_driver st_press_driver = {
        .driver = {
-               .owner = THIS_MODULE,
                .name = "st-press-i2c",
                .of_match_table = of_match_ptr(st_press_of_match),
        },
index 7a2b639eaa96e2ea440f3102c5da101d41edcd2b..e4ec7af4c1bf7d82328d121cffae9d92f094e2d1 100644 (file)
@@ -551,7 +551,6 @@ static const struct dev_pm_ops mlx90614_pm_ops = {
 static struct i2c_driver mlx90614_driver = {
        .driver = {
                .name   = "mlx90614",
-               .owner  = THIS_MODULE,
                .pm     = &mlx90614_pm_ops,
        },
        .probe = mlx90614_probe,
index 8f21f32f9739e23f9558e8b38434daa5a5856f3e..e78c1069a6a9f66bcd3f0969a94678a956279152 100644 (file)
@@ -36,9 +36,9 @@
 #define TMP006_CONFIG_DRDY_EN BIT(8)
 #define TMP006_CONFIG_DRDY BIT(7)
 
-#define TMP006_CONFIG_MOD_MASK 0x7000
+#define TMP006_CONFIG_MOD_MASK GENMASK(14, 12)
 
-#define TMP006_CONFIG_CR_MASK 0x0e00
+#define TMP006_CONFIG_CR_MASK GENMASK(11, 9)
 #define TMP006_CONFIG_CR_SHIFT 9
 
 #define TMP006_MANUFACTURER_MAGIC 0x5449
@@ -280,7 +280,6 @@ static struct i2c_driver tmp006_driver = {
        .driver = {
                .name   = "tmp006",
                .pm     = &tmp006_pm_ops,
-               .owner  = THIS_MODULE,
        },
        .probe = tmp006_probe,
        .remove = tmp006_remove,
index 7f6cae5beb90fc30388be0281a5c5b9f9023bad4..39c5df6154aa369e13bdeecfd90a9f6be1aacc55 100644 (file)
@@ -56,8 +56,6 @@ source "drivers/staging/vt6656/Kconfig"
 
 source "drivers/staging/iio/Kconfig"
 
-source "drivers/staging/sm7xxfb/Kconfig"
-
 source "drivers/staging/sm750fb/Kconfig"
 
 source "drivers/staging/xgifb/Kconfig"
@@ -112,4 +110,6 @@ source "drivers/staging/fsl-mc/Kconfig"
 
 source "drivers/staging/wilc1000/Kconfig"
 
+source "drivers/staging/most/Kconfig"
+
 endif # STAGING
index 347f6477aa3eb4a11429c977f73596e520fb403c..018093d60e85c047e689a8ab4b7a1af2e46798d3 100644 (file)
@@ -22,7 +22,6 @@ obj-$(CONFIG_VT6655)          += vt6655/
 obj-$(CONFIG_VT6656)           += vt6656/
 obj-$(CONFIG_VME_BUS)          += vme/
 obj-$(CONFIG_IIO)              += iio/
-obj-$(CONFIG_FB_SM7XX)         += sm7xxfb/
 obj-$(CONFIG_FB_SM750)         += sm750fb/
 obj-$(CONFIG_FB_XGI)           += xgifb/
 obj-$(CONFIG_USB_EMXX)         += emxx_udc/
@@ -48,3 +47,4 @@ obj-$(CONFIG_COMMON_CLK_XLNX_CLKWZRD) += clocking-wizard/
 obj-$(CONFIG_FB_TFT)           += fbtft/
 obj-$(CONFIG_FSL_MC_BUS)       += fsl-mc/
 obj-$(CONFIG_WILC1000)         += wilc1000/
+obj-$(CONFIG_MOST)             += most/
index 24d657b3ab9946d0166198c213c025843f204aad..68307121c9c18830ed88477ad152e5188cec0537 100644 (file)
@@ -20,7 +20,8 @@ config ANDROID_TIMED_OUTPUT
 
 config ANDROID_TIMED_GPIO
        tristate "Android timed gpio driver"
-       depends on GPIOLIB && ANDROID_TIMED_OUTPUT
+       depends on GPIOLIB || COMPILE_TEST
+       depends on ANDROID_TIMED_OUTPUT
        default n
         ---help---
          Unlike generic gpio is to allow programs to access and manipulate gpio
index c5c037ccf32cc0097f25fe16ddc7848cbd41e547..cefc208c313ac2ece917beb9f937eec30c566af6 100644 (file)
@@ -388,7 +388,7 @@ static int ashmem_mmap(struct file *file, struct vm_area_struct *vma)
 
                /* ... and allocate the backing shmem file */
                vmfile = shmem_file_setup(name, asma->size, vma->vm_flags);
-               if (unlikely(IS_ERR(vmfile))) {
+               if (IS_ERR(vmfile)) {
                        ret = PTR_ERR(vmfile);
                        goto out;
                }
@@ -660,7 +660,7 @@ restart:
                if (page_range_subsumed_by_range(range, pgstart, pgend))
                        return 0;
                if (page_range_in_range(range, pgstart, pgend)) {
-                       pgstart = min_t(size_t, range->pgstart, pgstart),
+                       pgstart = min_t(size_t, range->pgstart, pgstart);
                        pgend = max_t(size_t, range->pgend, pgend);
                        purged |= range->purged;
                        range_del(range);
index 6f48112635571f78e0d10e50c2d3fb6f0b9277d3..eec878e183f5d81e51649efad85a470805fb0080 100644 (file)
@@ -1103,10 +1103,10 @@ static struct dma_buf_ops dma_buf_ops = {
 struct dma_buf *ion_share_dma_buf(struct ion_client *client,
                                                struct ion_handle *handle)
 {
+       DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
        struct ion_buffer *buffer;
        struct dma_buf *dmabuf;
        bool valid_handle;
-       DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
 
        mutex_lock(&client->lock);
        valid_handle = ion_handle_validate(client, handle);
@@ -1466,7 +1466,6 @@ static const struct file_operations debug_heap_fops = {
        .release = single_release,
 };
 
-#ifdef DEBUG_HEAP_SHRINKER
 static int debug_shrink_set(void *data, u64 val)
 {
        struct ion_heap *heap = data;
@@ -1474,15 +1473,14 @@ static int debug_shrink_set(void *data, u64 val)
        int objs;
 
        sc.gfp_mask = -1;
-       sc.nr_to_scan = 0;
+       sc.nr_to_scan = val;
 
-       if (!val)
-               return 0;
-
-       objs = heap->shrinker.shrink(&heap->shrinker, &sc);
-       sc.nr_to_scan = objs;
+       if (!val) {
+               objs = heap->shrinker.count_objects(&heap->shrinker, &sc);
+               sc.nr_to_scan = objs;
+       }
 
-       heap->shrinker.shrink(&heap->shrinker, &sc);
+       heap->shrinker.scan_objects(&heap->shrinker, &sc);
        return 0;
 }
 
@@ -1495,14 +1493,13 @@ static int debug_shrink_get(void *data, u64 *val)
        sc.gfp_mask = -1;
        sc.nr_to_scan = 0;
 
-       objs = heap->shrinker.shrink(&heap->shrinker, &sc);
+       objs = heap->shrinker.count_objects(&heap->shrinker, &sc);
        *val = objs;
        return 0;
 }
 
 DEFINE_SIMPLE_ATTRIBUTE(debug_shrink_fops, debug_shrink_get,
                        debug_shrink_set, "%llu\n");
-#endif
 
 void ion_device_add_heap(struct ion_device *dev, struct ion_heap *heap)
 {
@@ -1540,8 +1537,7 @@ void ion_device_add_heap(struct ion_device *dev, struct ion_heap *heap)
                        path, heap->name);
        }
 
-#ifdef DEBUG_HEAP_SHRINKER
-       if (heap->shrinker.shrink) {
+       if (heap->shrinker.count_objects && heap->shrinker.scan_objects) {
                char debug_name[64];
 
                snprintf(debug_name, 64, "%s_shrink", heap->name);
@@ -1556,7 +1552,7 @@ void ion_device_add_heap(struct ion_device *dev, struct ion_heap *heap)
                                path, debug_name);
                }
        }
-#endif
+
        up_write(&dev->lock);
 }
 
index 54746157d799a6e0f000f76cfc419948c240d28d..0813163f962f09e328d6fc448238201f84cc55cd 100644 (file)
@@ -173,8 +173,8 @@ struct ion_heap *ion_chunk_heap_create(struct ion_platform_heap *heap_data)
        chunk_heap->heap.ops = &chunk_heap_ops;
        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);
+       pr_debug("%s: base %lu size %zu align %ld\n", __func__,
+               chunk_heap->base, heap_data->size, heap_data->align);
 
        return &chunk_heap->heap;
 
index f4211f1be48818e25a879935f9893d2145a355a8..0b2448c32495094739283edc4bae031f999bdb8e 100644 (file)
@@ -73,8 +73,8 @@ static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer,
        if (!info->table)
                goto free_mem;
 
-       if (dma_common_get_sgtable
-           (dev, info->table, info->cpu_addr, info->handle, len))
+       if (dma_get_sgtable(dev, info->table, info->cpu_addr, info->handle,
+                           len))
                goto free_table;
        /* keep this for memory release */
        buffer->priv_virt = info;
index 4b88f11e52d372ff3b33c5d448852fcddfeaac5c..19ad3aba499ae579889892e6c6168833f4c0851f 100644 (file)
@@ -116,7 +116,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 freed;
+       int freed = 0;
        bool high;
 
        if (current_is_kswapd())
@@ -127,7 +127,7 @@ int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
        if (nr_to_scan == 0)
                return ion_page_pool_total(pool, high);
 
-       for (freed = 0; freed < nr_to_scan; freed++) {
+       while (freed < nr_to_scan) {
                struct page *page;
 
                mutex_lock(&pool->mutex);
@@ -141,6 +141,7 @@ int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
                }
                mutex_unlock(&pool->mutex);
                ion_page_pool_free_pages(pool, page);
+               freed += (1 << pool->order);
        }
 
        return freed;
index da2a63c0a9ba5896e96652356c97d718aa761c1f..7a7a9a047230889a8d0883e68364609968c875a0 100644 (file)
@@ -212,14 +212,26 @@ static int ion_system_heap_shrink(struct ion_heap *heap, gfp_t gfp_mask,
 {
        struct ion_system_heap *sys_heap;
        int nr_total = 0;
-       int i;
+       int i, nr_freed;
+       int only_scan = 0;
 
        sys_heap = container_of(heap, struct ion_system_heap, heap);
 
+       if (!nr_to_scan)
+               only_scan = 1;
+
        for (i = 0; i < num_orders; i++) {
                struct ion_page_pool *pool = sys_heap->pools[i];
 
-               nr_total += ion_page_pool_shrink(pool, gfp_mask, nr_to_scan);
+               nr_freed = ion_page_pool_shrink(pool, gfp_mask, nr_to_scan);
+               nr_total += nr_freed;
+
+               if (!only_scan) {
+                       nr_to_scan -= nr_freed;
+                       /* shrink completed */
+                       if (nr_to_scan <= 0)
+                               break;
+               }
        }
 
        return nr_total;
index 938a35cd99bb4f019586a6a47e563c1798cf85af..ce11726f1a6c316c082fcf86876369562cf9b562 100644 (file)
@@ -61,9 +61,9 @@ static int gpio_get_time(struct timed_output_dev *dev)
 
 static void gpio_enable(struct timed_output_dev *dev, int value)
 {
-       struct timed_gpio_data  *data =
+       struct timed_gpio_data *data =
                container_of(dev, struct timed_gpio_data, dev);
-       unsigned long   flags;
+       unsigned long flags;
 
        spin_lock_irqsave(&data->lock, flags);
 
index 7dee73dfbf88ff09f4f3fef468eaa2ab75c2a584..57e71f9f14a2385bf8537b6d94dce5de164d4f4a 100644 (file)
@@ -2,7 +2,7 @@ config COMEDI
        tristate "Data acquisition support (comedi)"
        depends on m
        ---help---
-         Enable support a wide range of data acquisition devices
+         Enable support for a wide range of data acquisition devices
          for Linux.
 
 if COMEDI
index 25848244c4b129ca521370523fe064e8430bf8d3..f356386d833a1fe80c83b9a492634d295991688a 100644 (file)
@@ -202,7 +202,8 @@ static int get_compat_cmd(struct comedi_cmd __user *cmd,
        err |= __get_user(temp.uint, &cmd32->stop_arg);
        err |= __put_user(temp.uint, &cmd->stop_arg);
        err |= __get_user(temp.uptr, &cmd32->chanlist);
-       err |= __put_user(compat_ptr(temp.uptr), &cmd->chanlist);
+       err |= __put_user((unsigned int __force *)compat_ptr(temp.uptr),
+                       &cmd->chanlist);
        err |= __get_user(temp.uint, &cmd32->chanlist_len);
        err |= __put_user(temp.uint, &cmd->chanlist_len);
        err |= __get_user(temp.uptr, &cmd32->data);
index 985d94b6cbfd6eeb21afe792ca14e6be2d2ee866..4820ab6d0aa8694309be452aee05ec425170a13b 100644 (file)
@@ -2599,14 +2599,14 @@ static int comedi_open(struct inode *inode, struct file *file)
        cfp->dev = dev;
 
        mutex_lock(&dev->mutex);
-       if (!dev->attached && !capable(CAP_NET_ADMIN)) {
-               dev_dbg(dev->class_dev, "not attached and not CAP_NET_ADMIN\n");
+       if (!dev->attached && !capable(CAP_SYS_ADMIN)) {
+               dev_dbg(dev->class_dev, "not attached and not CAP_SYS_ADMIN\n");
                rc = -ENODEV;
                goto out;
        }
        if (dev->attached && dev->use_count == 0) {
                if (!try_module_get(dev->driver->module)) {
-                       rc = -ENOSYS;
+                       rc = -ENXIO;
                        goto out;
                }
                if (dev->open) {
index ed0b60c925def80fa326491eba9b1467e4497073..b03bc6639f79478fe3034c4e98fd42178a3467bc 100644 (file)
@@ -820,7 +820,7 @@ int comedi_device_attach(struct comedi_device *dev, struct comedi_devconfig *it)
                         "driver '%s' does not support attach using comedi_config\n",
                         driv->driver_name);
                module_put(driv->module);
-               ret = -ENOSYS;
+               ret = -EIO;
                goto out;
        }
        dev->driver = driv;
index 4ebf5aae50199083a0104fe59b9867892e00a26a..47e38398921ed26588f1409217f1aafe5bf5c277 100644 (file)
@@ -141,11 +141,13 @@ static const struct comedi_lrange cb_pcimdas_ai_uni_range = {
  * jumper-settable on the board. The settings are not software-readable.
  */
 static const struct comedi_lrange cb_pcimdas_ao_range = {
-       4, {
+       6, {
                BIP_RANGE(10),
                BIP_RANGE(5),
                UNI_RANGE(10),
-               UNI_RANGE(5)
+               UNI_RANGE(5),
+               RANGE_ext(-1, 1),
+               RANGE_ext(0, 1)
        }
 };
 
index a6798ad8fa7fa76703135e8818258350b117265c..a562df498b017e278f266f7ff8a07160991a2f61 100644 (file)
@@ -130,11 +130,7 @@ static int dac02_attach(struct comedi_device *dev, struct comedi_devconfig *it)
        s->range_table  = &das02_ao_ranges;
        s->insn_write   = dac02_ao_insn_write;
 
-       ret = comedi_alloc_subdev_readback(s);
-       if (ret)
-               return ret;
-
-       return 0;
+       return comedi_alloc_subdev_readback(s);
 }
 
 static struct comedi_driver dac02_driver = {
index 93fab68901617903ef478cc05e1fcc2bbc79199c..9c02b17a28347aff19e4cfe1e6016e615c87ae2e 100644 (file)
@@ -108,7 +108,7 @@ static struct pcmcia_driver das08_cs_driver = {
 };
 module_comedi_pcmcia_driver(driver_das08_cs, das08_cs_driver);
 
-MODULE_AUTHOR("David A. Schleef <ds@schleef.org>, "
-             "Frank Mori Hess <fmhess@users.sourceforge.net>");
+MODULE_AUTHOR("David A. Schleef <ds@schleef.org>");
+MODULE_AUTHOR("Frank Mori Hess <fmhess@users.sourceforge.net>");
 MODULE_DESCRIPTION("Comedi driver for ComputerBoards DAS-08 PCMCIA boards");
 MODULE_LICENSE("GPL");
index d7cf4b153f7c37889efd8032712ee64a33f27426..056bca9c67d5d637885073a3b635e625c1f392dd 100644 (file)
@@ -1032,8 +1032,7 @@ static int das16_attach(struct comedi_device *dev, struct comedi_devconfig *it)
 
        /*  check that clock setting is valid */
        if (it->options[3]) {
-               if (it->options[3] != 0 &&
-                   it->options[3] != 1 && it->options[3] != 10) {
+               if (it->options[3] != 1 && it->options[3] != 10) {
                        dev_err(dev->class_dev,
                                "Invalid option. Master clock must be set to 1 or 10 (MHz)\n");
                        return -EINVAL;
index a18a8878bdb8abea0a24130d55d1cf5111fa02c9..3a37373fbb6f15b482bc25c34c1acc787b497b1e 100644 (file)
@@ -69,18 +69,18 @@ irq can be omitted, although the cmd interface will not work without it.
 
     "cio-das16/m1"
 
-  0    a/d bits 0-3, mux               start 12 bit
-  1    a/d bits 4-11           unused
-  2    status          control
-  3    di 4 bit                do 4 bit
-  4    unused                  clear interrupt
-  5    interrupt, pacer
-  6    channel/gain queue address
-  7    channel/gain queue data
-  89ab 8254
-  cdef 8254
-  400  8255
-  404-407      8254
+  0            a/d bits 0-3, mux               start 12 bit
+  1            a/d bits 4-11           unused
+  2            status          control
+  3            di 4 bit                do 4 bit
+  4            unused                  clear interrupt
+  5            interrupt, pacer
+  6            channel/gain queue address
+  7            channel/gain queue data
+  89ab         8254
+  cdef         8254
+  400          8255
+  404-407      8254
 
 */
 
@@ -411,15 +411,18 @@ static void das16m1_handler(struct comedi_device *dev, unsigned int status)
        hw_counter = comedi_8254_read(devpriv->counter, 1);
        /* make sure hardware counter reading is not bogus due to initial value
         * not having been loaded yet */
-       if (devpriv->adc_count == 0 && hw_counter == devpriv->initial_hw_count) {
+       if (devpriv->adc_count == 0 &&
+           hw_counter == devpriv->initial_hw_count) {
                num_samples = 0;
        } else {
-               /* The calculation of num_samples looks odd, but it uses the following facts.
-                * 16 bit hardware counter is initialized with value of zero (which really
-                * means 0x1000).  The counter decrements by one on each conversion
-                * (when the counter decrements from zero it goes to 0xffff).  num_samples
-                * is a 16 bit variable, so it will roll over in a similar fashion to the
-                * hardware counter.  Work it out, and this is what you get. */
+               /* The calculation of num_samples looks odd, but it uses the
+                * following facts. 16 bit hardware counter is initialized with
+                * value of zero (which really means 0x1000).  The counter
+                * decrements by one on each conversion (when the counter
+                * decrements from zero it goes to 0xffff).  num_samples is a
+                * 16 bit variable, so it will roll over in a similar fashion
+                * to the hardware counter.  Work it out, and this is what you
+                * get. */
                num_samples = -hw_counter - devpriv->adc_count;
        }
        /*  check if we only need some of the points */
index bb2883c83afaa010b713e51fc96ff346208b824b..958c0d4aae5c0acabbbea3f6623dd9e173a45e0b 100644 (file)
@@ -607,11 +607,7 @@ static int dmm32at_attach(struct comedi_device *dev,
 
        /* Digital I/O subdevice */
        s = &dev->subdevices[2];
-       ret = subdev_8255_init(dev, s, dmm32at_8255_io, DMM32AT_8255_IOBASE);
-       if (ret)
-               return ret;
-
-       return 0;
+       return subdev_8255_init(dev, s, dmm32at_8255_io, DMM32AT_8255_IOBASE);
 }
 
 static struct comedi_driver dmm32at_driver = {
index e1f493241cd6434e631f40f9c5f8a42adeedff19..55cae61458cb975a2d3b3f5abf98e04611e021cb 100644 (file)
@@ -136,11 +136,7 @@ static int fl512_attach(struct comedi_device *dev, struct comedi_devconfig *it)
        s->range_table  = &range_fl512;
        s->insn_write   = fl512_ao_insn_write;
 
-       ret = comedi_alloc_subdev_readback(s);
-       if (ret)
-               return ret;
-
-       return 0;
+       return comedi_alloc_subdev_readback(s);
 }
 
 static struct comedi_driver fl512_driver = {
index a8f3ca48784bcba8160c7a23be8ffc06686c6e79..5aa1780cf42b2c0f8ffce8bd3d8c00adc5bd34b7 100644 (file)
@@ -1,43 +1,41 @@
 /*
  comedi/drivers/me4000.c
  Source code for the Meilhaus ME-4000 board family.
-
  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.
me4000.c
* Source code for the Meilhaus ME-4000 board family.
+ *
* 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: me4000
-Description: Meilhaus ME-4000 series boards
-Devices: [Meilhaus] ME-4650 (me4000), ME-4670i, ME-4680, ME-4680i, ME-4680is
-Author: gg (Guenter Gebhardt <g.gebhardt@meilhaus.com>)
-Updated: Mon, 18 Mar 2002 15:34:01 -0800
-Status: broken (no support for loading firmware)
-
-Supports:
-
-    - Analog Input
-    - Analog Output
-    - Digital I/O
-    - Counter
-
-Configuration Options: not applicable, uses PCI auto config
-
-The firmware required by these boards is available in the
-comedi_nonfree_firmware tarball available from
-http://www.comedi.org.  However, the driver's support for
-loading the firmware through comedi_config is currently
-broken.
 
+/*
+ * Driver: me4000
+ * Description: Meilhaus ME-4000 series boards
+ * Devices: [Meilhaus] ME-4650 (me4000), ME-4670i, ME-4680, ME-4680i,
+ *         ME-4680is
+ * Author: gg (Guenter Gebhardt <g.gebhardt@meilhaus.com>)
+ * Updated: Mon, 18 Mar 2002 15:34:01 -0800
+ * Status: untested
+ *
+ * Supports:
+ *     - Analog Input
+ *     - Analog Output
+ *     - Digital I/O
+ *     - Counter
+ *
+ * Configuration Options: not applicable, uses PCI auto config
+ *
+ * The firmware required by these boards is available in the
+ * comedi_nonfree_firmware tarball available from
+ * http://www.comedi.org.
  */
 
 #include <linux/module.h>
@@ -57,66 +55,61 @@ broken.
 #define ME4000_AO_CHAN(x)                      ((x) * 0x18)
 
 #define ME4000_AO_CTRL_REG(x)                  (0x00 + ME4000_AO_CHAN(x))
-#define ME4000_AO_CTRL_BIT_MODE_0              (1 << 0)
-#define ME4000_AO_CTRL_BIT_MODE_1              (1 << 1)
-#define ME4000_AO_CTRL_MASK_MODE               (3 << 0)
-#define ME4000_AO_CTRL_BIT_STOP                        (1 << 2)
-#define ME4000_AO_CTRL_BIT_ENABLE_FIFO         (1 << 3)
-#define ME4000_AO_CTRL_BIT_ENABLE_EX_TRIG      (1 << 4)
-#define ME4000_AO_CTRL_BIT_EX_TRIG_EDGE                (1 << 5)
-#define ME4000_AO_CTRL_BIT_IMMEDIATE_STOP      (1 << 7)
-#define ME4000_AO_CTRL_BIT_ENABLE_DO           (1 << 8)
-#define ME4000_AO_CTRL_BIT_ENABLE_IRQ          (1 << 9)
-#define ME4000_AO_CTRL_BIT_RESET_IRQ           (1 << 10)
+#define ME4000_AO_CTRL_MODE_0                  BIT(0)
+#define ME4000_AO_CTRL_MODE_1                  BIT(1)
+#define ME4000_AO_CTRL_STOP                    BIT(2)
+#define ME4000_AO_CTRL_ENABLE_FIFO             BIT(3)
+#define ME4000_AO_CTRL_ENABLE_EX_TRIG          BIT(4)
+#define ME4000_AO_CTRL_EX_TRIG_EDGE            BIT(5)
+#define ME4000_AO_CTRL_IMMEDIATE_STOP          BIT(7)
+#define ME4000_AO_CTRL_ENABLE_DO               BIT(8)
+#define ME4000_AO_CTRL_ENABLE_IRQ              BIT(9)
+#define ME4000_AO_CTRL_RESET_IRQ               BIT(10)
 #define ME4000_AO_STATUS_REG(x)                        (0x04 + ME4000_AO_CHAN(x))
-#define ME4000_AO_STATUS_BIT_FSM               (1 << 0)
-#define ME4000_AO_STATUS_BIT_FF                        (1 << 1)
-#define ME4000_AO_STATUS_BIT_HF                        (1 << 2)
-#define ME4000_AO_STATUS_BIT_EF                        (1 << 3)
+#define ME4000_AO_STATUS_FSM                   BIT(0)
+#define ME4000_AO_STATUS_FF                    BIT(1)
+#define ME4000_AO_STATUS_HF                    BIT(2)
+#define ME4000_AO_STATUS_EF                    BIT(3)
 #define ME4000_AO_FIFO_REG(x)                  (0x08 + ME4000_AO_CHAN(x))
 #define ME4000_AO_SINGLE_REG(x)                        (0x0c + ME4000_AO_CHAN(x))
 #define ME4000_AO_TIMER_REG(x)                 (0x10 + ME4000_AO_CHAN(x))
 #define ME4000_AI_CTRL_REG                     0x74
 #define ME4000_AI_STATUS_REG                   0x74
-#define ME4000_AI_CTRL_BIT_MODE_0              (1 << 0)
-#define ME4000_AI_CTRL_BIT_MODE_1              (1 << 1)
-#define ME4000_AI_CTRL_BIT_MODE_2              (1 << 2)
-#define ME4000_AI_CTRL_BIT_SAMPLE_HOLD         (1 << 3)
-#define ME4000_AI_CTRL_BIT_IMMEDIATE_STOP      (1 << 4)
-#define ME4000_AI_CTRL_BIT_STOP                        (1 << 5)
-#define ME4000_AI_CTRL_BIT_CHANNEL_FIFO                (1 << 6)
-#define ME4000_AI_CTRL_BIT_DATA_FIFO           (1 << 7)
-#define ME4000_AI_CTRL_BIT_FULLSCALE           (1 << 8)
-#define ME4000_AI_CTRL_BIT_OFFSET              (1 << 9)
-#define ME4000_AI_CTRL_BIT_EX_TRIG_ANALOG      (1 << 10)
-#define ME4000_AI_CTRL_BIT_EX_TRIG             (1 << 11)
-#define ME4000_AI_CTRL_BIT_EX_TRIG_FALLING     (1 << 12)
-#define ME4000_AI_CTRL_BIT_EX_IRQ              (1 << 13)
-#define ME4000_AI_CTRL_BIT_EX_IRQ_RESET                (1 << 14)
-#define ME4000_AI_CTRL_BIT_LE_IRQ              (1 << 15)
-#define ME4000_AI_CTRL_BIT_LE_IRQ_RESET                (1 << 16)
-#define ME4000_AI_CTRL_BIT_HF_IRQ              (1 << 17)
-#define ME4000_AI_CTRL_BIT_HF_IRQ_RESET                (1 << 18)
-#define ME4000_AI_CTRL_BIT_SC_IRQ              (1 << 19)
-#define ME4000_AI_CTRL_BIT_SC_IRQ_RESET                (1 << 20)
-#define ME4000_AI_CTRL_BIT_SC_RELOAD           (1 << 21)
-#define ME4000_AI_STATUS_BIT_EF_CHANNEL                (1 << 22)
-#define ME4000_AI_STATUS_BIT_HF_CHANNEL                (1 << 23)
-#define ME4000_AI_STATUS_BIT_FF_CHANNEL                (1 << 24)
-#define ME4000_AI_STATUS_BIT_EF_DATA           (1 << 25)
-#define ME4000_AI_STATUS_BIT_HF_DATA           (1 << 26)
-#define ME4000_AI_STATUS_BIT_FF_DATA           (1 << 27)
-#define ME4000_AI_STATUS_BIT_LE                        (1 << 28)
-#define ME4000_AI_STATUS_BIT_FSM               (1 << 29)
-#define ME4000_AI_CTRL_BIT_EX_TRIG_BOTH                (1 << 31)
+#define ME4000_AI_CTRL_MODE_0                  BIT(0)
+#define ME4000_AI_CTRL_MODE_1                  BIT(1)
+#define ME4000_AI_CTRL_MODE_2                  BIT(2)
+#define ME4000_AI_CTRL_SAMPLE_HOLD             BIT(3)
+#define ME4000_AI_CTRL_IMMEDIATE_STOP          BIT(4)
+#define ME4000_AI_CTRL_STOP                    BIT(5)
+#define ME4000_AI_CTRL_CHANNEL_FIFO            BIT(6)
+#define ME4000_AI_CTRL_DATA_FIFO               BIT(7)
+#define ME4000_AI_CTRL_FULLSCALE               BIT(8)
+#define ME4000_AI_CTRL_OFFSET                  BIT(9)
+#define ME4000_AI_CTRL_EX_TRIG_ANALOG          BIT(10)
+#define ME4000_AI_CTRL_EX_TRIG                 BIT(11)
+#define ME4000_AI_CTRL_EX_TRIG_FALLING         BIT(12)
+#define ME4000_AI_CTRL_EX_IRQ                  BIT(13)
+#define ME4000_AI_CTRL_EX_IRQ_RESET            BIT(14)
+#define ME4000_AI_CTRL_LE_IRQ                  BIT(15)
+#define ME4000_AI_CTRL_LE_IRQ_RESET            BIT(16)
+#define ME4000_AI_CTRL_HF_IRQ                  BIT(17)
+#define ME4000_AI_CTRL_HF_IRQ_RESET            BIT(18)
+#define ME4000_AI_CTRL_SC_IRQ                  BIT(19)
+#define ME4000_AI_CTRL_SC_IRQ_RESET            BIT(20)
+#define ME4000_AI_CTRL_SC_RELOAD               BIT(21)
+#define ME4000_AI_STATUS_EF_CHANNEL            BIT(22)
+#define ME4000_AI_STATUS_HF_CHANNEL            BIT(23)
+#define ME4000_AI_STATUS_FF_CHANNEL            BIT(24)
+#define ME4000_AI_STATUS_EF_DATA               BIT(25)
+#define ME4000_AI_STATUS_HF_DATA               BIT(26)
+#define ME4000_AI_STATUS_FF_DATA               BIT(27)
+#define ME4000_AI_STATUS_LE                    BIT(28)
+#define ME4000_AI_STATUS_FSM                   BIT(29)
+#define ME4000_AI_CTRL_EX_TRIG_BOTH            BIT(31)
 #define ME4000_AI_CHANNEL_LIST_REG             0x78
-#define ME4000_AI_LIST_INPUT_SINGLE_ENDED      (0 << 5)
-#define ME4000_AI_LIST_INPUT_DIFFERENTIAL      (1 << 5)
-#define ME4000_AI_LIST_RANGE_BIPOLAR_10                (0 << 6)
-#define ME4000_AI_LIST_RANGE_BIPOLAR_2_5       (1 << 6)
-#define ME4000_AI_LIST_RANGE_UNIPOLAR_10       (2 << 6)
-#define ME4000_AI_LIST_RANGE_UNIPOLAR_2_5      (3 << 6)
-#define ME4000_AI_LIST_LAST_ENTRY              (1 << 8)
+#define ME4000_AI_LIST_INPUT_DIFFERENTIAL      BIT(5)
+#define ME4000_AI_LIST_RANGE(x)                        ((3 - ((x) & 3)) << 6)
+#define ME4000_AI_LIST_LAST_ENTRY              BIT(8)
 #define ME4000_AI_DATA_REG                     0x7c
 #define ME4000_AI_CHAN_TIMER_REG               0x80
 #define ME4000_AI_CHAN_PRE_TIMER_REG           0x84
@@ -126,14 +119,14 @@ broken.
 #define ME4000_AI_SCAN_PRE_TIMER_HIGH_REG      0x94
 #define ME4000_AI_START_REG                    0x98
 #define ME4000_IRQ_STATUS_REG                  0x9c
-#define ME4000_IRQ_STATUS_BIT_EX               (1 << 0)
-#define ME4000_IRQ_STATUS_BIT_LE               (1 << 1)
-#define ME4000_IRQ_STATUS_BIT_AI_HF            (1 << 2)
-#define ME4000_IRQ_STATUS_BIT_AO_0_HF          (1 << 3)
-#define ME4000_IRQ_STATUS_BIT_AO_1_HF          (1 << 4)
-#define ME4000_IRQ_STATUS_BIT_AO_2_HF          (1 << 5)
-#define ME4000_IRQ_STATUS_BIT_AO_3_HF          (1 << 6)
-#define ME4000_IRQ_STATUS_BIT_SC               (1 << 7)
+#define ME4000_IRQ_STATUS_EX                   BIT(0)
+#define ME4000_IRQ_STATUS_LE                   BIT(1)
+#define ME4000_IRQ_STATUS_AI_HF                        BIT(2)
+#define ME4000_IRQ_STATUS_AO_0_HF              BIT(3)
+#define ME4000_IRQ_STATUS_AO_1_HF              BIT(4)
+#define ME4000_IRQ_STATUS_AO_2_HF              BIT(5)
+#define ME4000_IRQ_STATUS_AO_3_HF              BIT(6)
+#define ME4000_IRQ_STATUS_SC                   BIT(7)
 #define ME4000_DIO_PORT_0_REG                  0xa0
 #define ME4000_DIO_PORT_1_REG                  0xa4
 #define ME4000_DIO_PORT_2_REG                  0xa8
@@ -141,20 +134,20 @@ broken.
 #define ME4000_DIO_DIR_REG                     0xb0
 #define ME4000_AO_LOADSETREG_XX                        0xb4
 #define ME4000_DIO_CTRL_REG                    0xb8
-#define ME4000_DIO_CTRL_BIT_MODE_0             (1 << 0)
-#define ME4000_DIO_CTRL_BIT_MODE_1             (1 << 1)
-#define ME4000_DIO_CTRL_BIT_MODE_2             (1 << 2)
-#define ME4000_DIO_CTRL_BIT_MODE_3             (1 << 3)
-#define ME4000_DIO_CTRL_BIT_MODE_4             (1 << 4)
-#define ME4000_DIO_CTRL_BIT_MODE_5             (1 << 5)
-#define ME4000_DIO_CTRL_BIT_MODE_6             (1 << 6)
-#define ME4000_DIO_CTRL_BIT_MODE_7             (1 << 7)
-#define ME4000_DIO_CTRL_BIT_FUNCTION_0         (1 << 8)
-#define ME4000_DIO_CTRL_BIT_FUNCTION_1         (1 << 9)
-#define ME4000_DIO_CTRL_BIT_FIFO_HIGH_0                (1 << 10)
-#define ME4000_DIO_CTRL_BIT_FIFO_HIGH_1                (1 << 11)
-#define ME4000_DIO_CTRL_BIT_FIFO_HIGH_2                (1 << 12)
-#define ME4000_DIO_CTRL_BIT_FIFO_HIGH_3                (1 << 13)
+#define ME4000_DIO_CTRL_MODE_0                 BIT(0)
+#define ME4000_DIO_CTRL_MODE_1                 BIT(1)
+#define ME4000_DIO_CTRL_MODE_2                 BIT(2)
+#define ME4000_DIO_CTRL_MODE_3                 BIT(3)
+#define ME4000_DIO_CTRL_MODE_4                 BIT(4)
+#define ME4000_DIO_CTRL_MODE_5                 BIT(5)
+#define ME4000_DIO_CTRL_MODE_6                 BIT(6)
+#define ME4000_DIO_CTRL_MODE_7                 BIT(7)
+#define ME4000_DIO_CTRL_FUNCTION_0             BIT(8)
+#define ME4000_DIO_CTRL_FUNCTION_1             BIT(9)
+#define ME4000_DIO_CTRL_FIFO_HIGH_0            BIT(10)
+#define ME4000_DIO_CTRL_FIFO_HIGH_1            BIT(11)
+#define ME4000_DIO_CTRL_FIFO_HIGH_2            BIT(12)
+#define ME4000_DIO_CTRL_FIFO_HIGH_3            BIT(13)
 #define ME4000_AO_DEMUX_ADJUST_REG             0xbc
 #define ME4000_AO_DEMUX_ADJUST_VALUE           0x4c
 #define ME4000_AI_SAMPLE_COUNTER_REG           0xc0
@@ -166,8 +159,12 @@ broken.
 
 #define ME4000_AI_CHANNEL_LIST_COUNT           1024
 
-struct me4000_info {
+struct me4000_private {
        unsigned long plx_regbase;
+       unsigned int ai_ctrl_mode;
+       unsigned int ai_init_ticks;
+       unsigned int ai_scan_ticks;
+       unsigned int ai_chan_ticks;
 };
 
 enum me4000_boardid {
@@ -188,134 +185,126 @@ enum me4000_boardid {
 
 struct me4000_board {
        const char *name;
-       int ao_nchan;
-       int ao_fifo;
        int ai_nchan;
-       int ai_diff_nchan;
-       int ai_sh_nchan;
-       int ex_trig_analog;
-       int dio_nchan;
-       int has_counter;
+       unsigned int can_do_diff_ai:1;
+       unsigned int can_do_sh_ai:1;    /* sample & hold (8 channels) */
+       unsigned int ex_trig_analog:1;
+       unsigned int has_ao:1;
+       unsigned int has_ao_fifo:1;
+       unsigned int has_counter:1;
 };
 
 static const struct me4000_board me4000_boards[] = {
        [BOARD_ME4650] = {
                .name           = "ME-4650",
                .ai_nchan       = 16,
-               .dio_nchan      = 32,
        },
        [BOARD_ME4660] = {
                .name           = "ME-4660",
                .ai_nchan       = 32,
-               .ai_diff_nchan  = 16,
-               .dio_nchan      = 32,
+               .can_do_diff_ai = 1,
                .has_counter    = 1,
        },
        [BOARD_ME4660I] = {
                .name           = "ME-4660i",
                .ai_nchan       = 32,
-               .ai_diff_nchan  = 16,
-               .dio_nchan      = 32,
+               .can_do_diff_ai = 1,
                .has_counter    = 1,
        },
        [BOARD_ME4660S] = {
                .name           = "ME-4660s",
                .ai_nchan       = 32,
-               .ai_diff_nchan  = 16,
-               .ai_sh_nchan    = 8,
-               .dio_nchan      = 32,
+               .can_do_diff_ai = 1,
+               .can_do_sh_ai   = 1,
                .has_counter    = 1,
        },
        [BOARD_ME4660IS] = {
                .name           = "ME-4660is",
                .ai_nchan       = 32,
-               .ai_diff_nchan  = 16,
-               .ai_sh_nchan    = 8,
-               .dio_nchan      = 32,
+               .can_do_diff_ai = 1,
+               .can_do_sh_ai   = 1,
                .has_counter    = 1,
        },
        [BOARD_ME4670] = {
                .name           = "ME-4670",
-               .ao_nchan       = 4,
                .ai_nchan       = 32,
-               .ai_diff_nchan  = 16,
+               .can_do_diff_ai = 1,
                .ex_trig_analog = 1,
-               .dio_nchan      = 32,
+               .has_ao         = 1,
                .has_counter    = 1,
        },
        [BOARD_ME4670I] = {
                .name           = "ME-4670i",
-               .ao_nchan       = 4,
                .ai_nchan       = 32,
-               .ai_diff_nchan  = 16,
+               .can_do_diff_ai = 1,
                .ex_trig_analog = 1,
-               .dio_nchan      = 32,
+               .has_ao         = 1,
                .has_counter    = 1,
        },
        [BOARD_ME4670S] = {
                .name           = "ME-4670s",
-               .ao_nchan       = 4,
                .ai_nchan       = 32,
-               .ai_diff_nchan  = 16,
-               .ai_sh_nchan    = 8,
+               .can_do_diff_ai = 1,
+               .can_do_sh_ai   = 1,
                .ex_trig_analog = 1,
-               .dio_nchan      = 32,
+               .has_ao         = 1,
                .has_counter    = 1,
        },
        [BOARD_ME4670IS] = {
                .name           = "ME-4670is",
-               .ao_nchan       = 4,
                .ai_nchan       = 32,
-               .ai_diff_nchan  = 16,
-               .ai_sh_nchan    = 8,
+               .can_do_diff_ai = 1,
+               .can_do_sh_ai   = 1,
                .ex_trig_analog = 1,
-               .dio_nchan      = 32,
+               .has_ao         = 1,
                .has_counter    = 1,
        },
        [BOARD_ME4680] = {
                .name           = "ME-4680",
-               .ao_nchan       = 4,
-               .ao_fifo        = 4,
                .ai_nchan       = 32,
-               .ai_diff_nchan  = 16,
+               .can_do_diff_ai = 1,
                .ex_trig_analog = 1,
-               .dio_nchan      = 32,
+               .has_ao         = 1,
+               .has_ao_fifo    = 1,
                .has_counter    = 1,
        },
        [BOARD_ME4680I] = {
                .name           = "ME-4680i",
-               .ao_nchan       = 4,
-               .ao_fifo        = 4,
                .ai_nchan       = 32,
-               .ai_diff_nchan  = 16,
+               .can_do_diff_ai = 1,
                .ex_trig_analog = 1,
-               .dio_nchan      = 32,
+               .has_ao         = 1,
+               .has_ao_fifo    = 1,
                .has_counter    = 1,
        },
        [BOARD_ME4680S] = {
                .name           = "ME-4680s",
-               .ao_nchan       = 4,
-               .ao_fifo        = 4,
                .ai_nchan       = 32,
-               .ai_diff_nchan  = 16,
-               .ai_sh_nchan    = 8,
+               .can_do_diff_ai = 1,
+               .can_do_sh_ai   = 1,
                .ex_trig_analog = 1,
-               .dio_nchan      = 32,
+               .has_ao         = 1,
+               .has_ao_fifo    = 1,
                .has_counter    = 1,
        },
        [BOARD_ME4680IS] = {
                .name           = "ME-4680is",
-               .ao_nchan       = 4,
-               .ao_fifo        = 4,
                .ai_nchan       = 32,
-               .ai_diff_nchan  = 16,
-               .ai_sh_nchan    = 8,
+               .can_do_diff_ai = 1,
+               .can_do_sh_ai   = 1,
                .ex_trig_analog = 1,
-               .dio_nchan      = 32,
+               .has_ao         = 1,
+               .has_ao_fifo    = 1,
                .has_counter    = 1,
        },
 };
 
+/*
+ * NOTE: the ranges here are inverted compared to the values
+ * written to the ME4000_AI_CHANNEL_LIST_REG,
+ *
+ * The ME4000_AI_LIST_RANGE() macro handles the inversion.
+ */
 static const struct comedi_lrange me4000_ai_range = {
        4, {
                UNI_RANGE(2.5),
@@ -330,7 +319,7 @@ static int me4000_xilinx_download(struct comedi_device *dev,
                                  unsigned long context)
 {
        struct pci_dev *pcidev = comedi_to_pci_dev(dev);
-       struct me4000_info *info = dev->private;
+       struct me4000_private *devpriv = dev->private;
        unsigned long xilinx_iobase = pci_resource_start(pcidev, 5);
        unsigned int file_length;
        unsigned int val;
@@ -343,42 +332,42 @@ static int me4000_xilinx_download(struct comedi_device *dev,
         * Set PLX local interrupt 2 polarity to high.
         * Interrupt is thrown by init pin of xilinx.
         */
-       outl(PLX9052_INTCSR_LI2POL, info->plx_regbase + PLX9052_INTCSR);
+       outl(PLX9052_INTCSR_LI2POL, devpriv->plx_regbase + PLX9052_INTCSR);
 
        /* Set /CS and /WRITE of the Xilinx */
-       val = inl(info->plx_regbase + PLX9052_CNTRL);
+       val = inl(devpriv->plx_regbase + PLX9052_CNTRL);
        val |= PLX9052_CNTRL_UIO2_DATA;
-       outl(val, info->plx_regbase + PLX9052_CNTRL);
+       outl(val, devpriv->plx_regbase + PLX9052_CNTRL);
 
        /* Init Xilinx with CS1 */
        inb(xilinx_iobase + 0xC8);
 
        /* Wait until /INIT pin is set */
-       udelay(20);
-       val = inl(info->plx_regbase + PLX9052_INTCSR);
+       usleep_range(20, 1000);
+       val = inl(devpriv->plx_regbase + PLX9052_INTCSR);
        if (!(val & PLX9052_INTCSR_LI2STAT)) {
                dev_err(dev->class_dev, "Can't init Xilinx\n");
                return -EIO;
        }
 
        /* Reset /CS and /WRITE of the Xilinx */
-       val = inl(info->plx_regbase + PLX9052_CNTRL);
+       val = inl(devpriv->plx_regbase + PLX9052_CNTRL);
        val &= ~PLX9052_CNTRL_UIO2_DATA;
-       outl(val, info->plx_regbase + PLX9052_CNTRL);
+       outl(val, devpriv->plx_regbase + PLX9052_CNTRL);
 
        /* Download Xilinx firmware */
        file_length = (((unsigned int)data[0] & 0xff) << 24) +
                      (((unsigned int)data[1] & 0xff) << 16) +
                      (((unsigned int)data[2] & 0xff) << 8) +
                      ((unsigned int)data[3] & 0xff);
-       udelay(10);
+       usleep_range(10, 1000);
 
        for (i = 0; i < file_length; i++) {
                outb(data[16 + i], xilinx_iobase);
-               udelay(10);
+               usleep_range(10, 1000);
 
                /* Check if BUSY flag is low */
-               val = inl(info->plx_regbase + PLX9052_CNTRL);
+               val = inl(devpriv->plx_regbase + PLX9052_CNTRL);
                if (val & PLX9052_CNTRL_UIO1_DATA) {
                        dev_err(dev->class_dev,
                                "Xilinx is still busy (i = %d)\n", i);
@@ -387,7 +376,7 @@ static int me4000_xilinx_download(struct comedi_device *dev,
        }
 
        /* If done flag is high download was successful */
-       val = inl(info->plx_regbase + PLX9052_CNTRL);
+       val = inl(devpriv->plx_regbase + PLX9052_CNTRL);
        if (!(val & PLX9052_CNTRL_UIO0_DATA)) {
                dev_err(dev->class_dev, "DONE flag is not set\n");
                dev_err(dev->class_dev, "Download not successful\n");
@@ -395,44 +384,53 @@ static int me4000_xilinx_download(struct comedi_device *dev,
        }
 
        /* Set /CS and /WRITE */
-       val = inl(info->plx_regbase + PLX9052_CNTRL);
+       val = inl(devpriv->plx_regbase + PLX9052_CNTRL);
        val |= PLX9052_CNTRL_UIO2_DATA;
-       outl(val, info->plx_regbase + PLX9052_CNTRL);
+       outl(val, devpriv->plx_regbase + PLX9052_CNTRL);
 
        return 0;
 }
 
+static void me4000_ai_reset(struct comedi_device *dev)
+{
+       unsigned int ctrl;
+
+       /* Stop any running conversion */
+       ctrl = inl(dev->iobase + ME4000_AI_CTRL_REG);
+       ctrl |= ME4000_AI_CTRL_STOP | ME4000_AI_CTRL_IMMEDIATE_STOP;
+       outl(ctrl, dev->iobase + ME4000_AI_CTRL_REG);
+
+       /* Clear the control register */
+       outl(0x0, dev->iobase + ME4000_AI_CTRL_REG);
+}
+
 static void me4000_reset(struct comedi_device *dev)
 {
-       struct me4000_info *info = dev->private;
+       struct me4000_private *devpriv = dev->private;
        unsigned int val;
        int chan;
 
-       /* Make a hardware reset */
-       val = inl(info->plx_regbase + PLX9052_CNTRL);
+       /* Disable interrupts on the PLX */
+       outl(0, devpriv->plx_regbase + PLX9052_INTCSR);
+
+       /* Software reset the PLX */
+       val = inl(devpriv->plx_regbase + PLX9052_CNTRL);
        val |= PLX9052_CNTRL_PCI_RESET;
-       outl(val, info->plx_regbase + PLX9052_CNTRL);
+       outl(val, devpriv->plx_regbase + PLX9052_CNTRL);
        val &= ~PLX9052_CNTRL_PCI_RESET;
-       outl(val, info->plx_regbase + PLX9052_CNTRL);
+       outl(val, devpriv->plx_regbase + PLX9052_CNTRL);
 
        /* 0x8000 to the DACs means an output voltage of 0V */
        for (chan = 0; chan < 4; chan++)
                outl(0x8000, dev->iobase + ME4000_AO_SINGLE_REG(chan));
 
-       /* Set both stop bits in the analog input control register */
-       outl(ME4000_AI_CTRL_BIT_IMMEDIATE_STOP | ME4000_AI_CTRL_BIT_STOP,
-            dev->iobase + ME4000_AI_CTRL_REG);
+       me4000_ai_reset(dev);
 
        /* Set both stop bits in the analog output control register */
-       val = ME4000_AO_CTRL_BIT_IMMEDIATE_STOP | ME4000_AO_CTRL_BIT_STOP;
+       val = ME4000_AO_CTRL_IMMEDIATE_STOP | ME4000_AO_CTRL_STOP;
        for (chan = 0; chan < 4; chan++)
                outl(val, dev->iobase + ME4000_AO_CTRL_REG(chan));
 
-       /* Enable interrupts on the PLX */
-       outl(PLX9052_INTCSR_LI1ENAB |
-            PLX9052_INTCSR_LI1POL |
-            PLX9052_INTCSR_PCIENAB, info->plx_regbase + PLX9052_INTCSR);
-
        /* Set the adustment register for AO demux */
        outl(ME4000_AO_DEMUX_ADJUST_VALUE,
             dev->iobase + ME4000_AO_DEMUX_ADJUST_REG);
@@ -445,96 +443,68 @@ static void me4000_reset(struct comedi_device *dev)
                outl(0x1, dev->iobase + ME4000_DIO_CTRL_REG);
 }
 
-/*=============================================================================
-  Analog input section
-  ===========================================================================*/
-
-static int me4000_ai_insn_read(struct comedi_device *dev,
-                              struct comedi_subdevice *subdevice,
-                              struct comedi_insn *insn, unsigned int *data)
+static unsigned int me4000_ai_get_sample(struct comedi_device *dev,
+                                        struct comedi_subdevice *s)
 {
-       const struct me4000_board *board = dev->board_ptr;
-       int chan = CR_CHAN(insn->chanspec);
-       int rang = CR_RANGE(insn->chanspec);
-       int aref = CR_AREF(insn->chanspec);
+       unsigned int val;
 
-       unsigned int entry = 0;
-       unsigned int tmp;
-       unsigned int lval;
+       /* read two's complement value and munge to offset binary */
+       val = inl(dev->iobase + ME4000_AI_DATA_REG);
+       return comedi_offset_munge(s, val);
+}
 
-       if (insn->n == 0) {
+static int me4000_ai_eoc(struct comedi_device *dev,
+                        struct comedi_subdevice *s,
+                        struct comedi_insn *insn,
+                        unsigned long context)
+{
+       unsigned int status;
+
+       status = inl(dev->iobase + ME4000_AI_STATUS_REG);
+       if (status & ME4000_AI_STATUS_EF_DATA)
                return 0;
-       } else if (insn->n > 1) {
-               dev_err(dev->class_dev, "Invalid instruction length %d\n",
-                       insn->n);
-               return -EINVAL;
-       }
+       return -EBUSY;
+}
 
-       switch (rang) {
-       case 0:
-               entry |= ME4000_AI_LIST_RANGE_UNIPOLAR_2_5;
-               break;
-       case 1:
-               entry |= ME4000_AI_LIST_RANGE_UNIPOLAR_10;
-               break;
-       case 2:
-               entry |= ME4000_AI_LIST_RANGE_BIPOLAR_2_5;
-               break;
-       case 3:
-               entry |= ME4000_AI_LIST_RANGE_BIPOLAR_10;
-               break;
-       default:
-               dev_err(dev->class_dev, "Invalid range specified\n");
-               return -EINVAL;
-       }
+static int me4000_ai_insn_read(struct comedi_device *dev,
+                              struct comedi_subdevice *s,
+                              struct comedi_insn *insn,
+                              unsigned int *data)
+{
+       unsigned int chan = CR_CHAN(insn->chanspec);
+       unsigned int range = CR_RANGE(insn->chanspec);
+       unsigned int aref = CR_AREF(insn->chanspec);
+       unsigned int entry;
+       int ret = 0;
+       int i;
 
-       switch (aref) {
-       case AREF_GROUND:
-       case AREF_COMMON:
-               if (chan >= board->ai_nchan) {
+       entry = chan | ME4000_AI_LIST_RANGE(range);
+       if (aref == AREF_DIFF) {
+               if (!(s->subdev_flags && SDF_DIFF)) {
                        dev_err(dev->class_dev,
-                               "Analog input is not available\n");
+                               "Differential inputs are not available\n");
                        return -EINVAL;
                }
-               entry |= ME4000_AI_LIST_INPUT_SINGLE_ENDED | chan;
-               break;
 
-       case AREF_DIFF:
-               if (rang == 0 || rang == 1) {
+               if (!comedi_range_is_bipolar(s, range)) {
                        dev_err(dev->class_dev,
                                "Range must be bipolar when aref = diff\n");
                        return -EINVAL;
                }
 
-               if (chan >= board->ai_diff_nchan) {
+               if (chan >= (s->n_chan / 2)) {
                        dev_err(dev->class_dev,
                                "Analog input is not available\n");
                        return -EINVAL;
                }
-               entry |= ME4000_AI_LIST_INPUT_DIFFERENTIAL | chan;
-               break;
-       default:
-               dev_err(dev->class_dev, "Invalid aref specified\n");
-               return -EINVAL;
+               entry |= ME4000_AI_LIST_INPUT_DIFFERENTIAL;
        }
 
        entry |= ME4000_AI_LIST_LAST_ENTRY;
 
-       /* Clear channel list, data fifo and both stop bits */
-       tmp = inl(dev->iobase + ME4000_AI_CTRL_REG);
-       tmp &= ~(ME4000_AI_CTRL_BIT_CHANNEL_FIFO |
-                ME4000_AI_CTRL_BIT_DATA_FIFO |
-                ME4000_AI_CTRL_BIT_STOP | ME4000_AI_CTRL_BIT_IMMEDIATE_STOP);
-       outl(tmp, dev->iobase + ME4000_AI_CTRL_REG);
-
-       /* Set the acquisition mode to single */
-       tmp &= ~(ME4000_AI_CTRL_BIT_MODE_0 | ME4000_AI_CTRL_BIT_MODE_1 |
-                ME4000_AI_CTRL_BIT_MODE_2);
-       outl(tmp, dev->iobase + ME4000_AI_CTRL_REG);
-
-       /* Enable channel list and data fifo */
-       tmp |= ME4000_AI_CTRL_BIT_CHANNEL_FIFO | ME4000_AI_CTRL_BIT_DATA_FIFO;
-       outl(tmp, dev->iobase + ME4000_AI_CTRL_REG);
+       /* Enable channel list and data fifo for single acquisition mode */
+       outl(ME4000_AI_CTRL_CHANNEL_FIFO | ME4000_AI_CTRL_DATA_FIFO,
+            dev->iobase + ME4000_AI_CTRL_REG);
 
        /* Generate channel list entry */
        outl(entry, dev->iobase + ME4000_AI_CHANNEL_LIST_REG);
@@ -543,36 +513,29 @@ static int me4000_ai_insn_read(struct comedi_device *dev,
        outl(ME4000_AI_MIN_TICKS, dev->iobase + ME4000_AI_CHAN_TIMER_REG);
        outl(ME4000_AI_MIN_TICKS, dev->iobase + ME4000_AI_CHAN_PRE_TIMER_REG);
 
-       /* Start conversion by dummy read */
-       inl(dev->iobase + ME4000_AI_START_REG);
+       for (i = 0; i < insn->n; i++) {
+               unsigned int val;
 
-       /* Wait until ready */
-       udelay(10);
-       if (!(inl(dev->iobase + ME4000_AI_STATUS_REG) &
-            ME4000_AI_STATUS_BIT_EF_DATA)) {
-               dev_err(dev->class_dev, "Value not available after wait\n");
-               return -EIO;
+               /* start conversion by dummy read */
+               inl(dev->iobase + ME4000_AI_START_REG);
+
+               ret = comedi_timeout(dev, s, insn, me4000_ai_eoc, 0);
+               if (ret)
+                       break;
+
+               val = me4000_ai_get_sample(dev, s);
+               data[i] = comedi_offset_munge(s, val);
        }
 
-       /* Read value from data fifo */
-       lval = inl(dev->iobase + ME4000_AI_DATA_REG) & 0xFFFF;
-       data[0] = lval ^ 0x8000;
+       me4000_ai_reset(dev);
 
-       return 1;
+       return ret ? ret : insn->n;
 }
 
 static int me4000_ai_cancel(struct comedi_device *dev,
                            struct comedi_subdevice *s)
 {
-       unsigned int tmp;
-
-       /* Stop any running conversion */
-       tmp = inl(dev->iobase + ME4000_AI_CTRL_REG);
-       tmp &= ~(ME4000_AI_CTRL_BIT_STOP | ME4000_AI_CTRL_BIT_IMMEDIATE_STOP);
-       outl(tmp, dev->iobase + ME4000_AI_CTRL_REG);
-
-       /* Clear the control register */
-       outl(0x0, dev->iobase + ME4000_AI_CTRL_REG);
+       me4000_ai_reset(dev);
 
        return 0;
 }
@@ -581,8 +544,6 @@ static int me4000_ai_check_chanlist(struct comedi_device *dev,
                                    struct comedi_subdevice *s,
                                    struct comedi_cmd *cmd)
 {
-       const struct me4000_board *board = dev->board_ptr;
-       unsigned int max_diff_chan = board->ai_diff_nchan;
        unsigned int aref0 = CR_AREF(cmd->chanlist[0]);
        int i;
 
@@ -598,7 +559,13 @@ static int me4000_ai_check_chanlist(struct comedi_device *dev,
                }
 
                if (aref == AREF_DIFF) {
-                       if (chan >= max_diff_chan) {
+                       if (!(s->subdev_flags && SDF_DIFF)) {
+                               dev_err(dev->class_dev,
+                                       "Differential inputs are not available\n");
+                               return -EINVAL;
+                       }
+
+                       if (chan >= (s->n_chan / 2)) {
                                dev_dbg(dev->class_dev,
                                        "Channel number to high\n");
                                return -EINVAL;
@@ -615,202 +582,127 @@ static int me4000_ai_check_chanlist(struct comedi_device *dev,
        return 0;
 }
 
-static int ai_round_cmd_args(struct comedi_device *dev,
-                            struct comedi_subdevice *s,
-                            struct comedi_cmd *cmd,
-                            unsigned int *init_ticks,
-                            unsigned int *scan_ticks, unsigned int *chan_ticks)
+static void me4000_ai_round_cmd_args(struct comedi_device *dev,
+                                    struct comedi_subdevice *s,
+                                    struct comedi_cmd *cmd)
 {
+       struct me4000_private *devpriv = dev->private;
        int rest;
 
-       *init_ticks = 0;
-       *scan_ticks = 0;
-       *chan_ticks = 0;
+       devpriv->ai_init_ticks = 0;
+       devpriv->ai_scan_ticks = 0;
+       devpriv->ai_chan_ticks = 0;
 
        if (cmd->start_arg) {
-               *init_ticks = (cmd->start_arg * 33) / 1000;
+               devpriv->ai_init_ticks = (cmd->start_arg * 33) / 1000;
                rest = (cmd->start_arg * 33) % 1000;
 
                if ((cmd->flags & CMDF_ROUND_MASK) == CMDF_ROUND_NEAREST) {
                        if (rest > 33)
-                               (*init_ticks)++;
+                               devpriv->ai_init_ticks++;
                } else if ((cmd->flags & CMDF_ROUND_MASK) == CMDF_ROUND_UP) {
                        if (rest)
-                               (*init_ticks)++;
+                               devpriv->ai_init_ticks++;
                }
        }
 
        if (cmd->scan_begin_arg) {
-               *scan_ticks = (cmd->scan_begin_arg * 33) / 1000;
+               devpriv->ai_scan_ticks = (cmd->scan_begin_arg * 33) / 1000;
                rest = (cmd->scan_begin_arg * 33) % 1000;
 
                if ((cmd->flags & CMDF_ROUND_MASK) == CMDF_ROUND_NEAREST) {
                        if (rest > 33)
-                               (*scan_ticks)++;
+                               devpriv->ai_scan_ticks++;
                } else if ((cmd->flags & CMDF_ROUND_MASK) == CMDF_ROUND_UP) {
                        if (rest)
-                               (*scan_ticks)++;
+                               devpriv->ai_scan_ticks++;
                }
        }
 
        if (cmd->convert_arg) {
-               *chan_ticks = (cmd->convert_arg * 33) / 1000;
+               devpriv->ai_chan_ticks = (cmd->convert_arg * 33) / 1000;
                rest = (cmd->convert_arg * 33) % 1000;
 
                if ((cmd->flags & CMDF_ROUND_MASK) == CMDF_ROUND_NEAREST) {
                        if (rest > 33)
-                               (*chan_ticks)++;
+                               devpriv->ai_chan_ticks++;
                } else if ((cmd->flags & CMDF_ROUND_MASK) == CMDF_ROUND_UP) {
                        if (rest)
-                               (*chan_ticks)++;
+                               devpriv->ai_chan_ticks++;
                }
        }
-
-       return 0;
-}
-
-static void ai_write_timer(struct comedi_device *dev,
-                          unsigned int init_ticks,
-                          unsigned int scan_ticks, unsigned int chan_ticks)
-{
-       outl(init_ticks - 1, dev->iobase + ME4000_AI_SCAN_PRE_TIMER_LOW_REG);
-       outl(0x0, dev->iobase + ME4000_AI_SCAN_PRE_TIMER_HIGH_REG);
-
-       if (scan_ticks) {
-               outl(scan_ticks - 1, dev->iobase + ME4000_AI_SCAN_TIMER_LOW_REG);
-               outl(0x0, dev->iobase + ME4000_AI_SCAN_TIMER_HIGH_REG);
-       }
-
-       outl(chan_ticks - 1, dev->iobase + ME4000_AI_CHAN_PRE_TIMER_REG);
-       outl(chan_ticks - 1, dev->iobase + ME4000_AI_CHAN_TIMER_REG);
 }
 
-static int ai_write_chanlist(struct comedi_device *dev,
-                            struct comedi_subdevice *s, struct comedi_cmd *cmd)
+static void me4000_ai_write_chanlist(struct comedi_device *dev,
+                                    struct comedi_subdevice *s,
+                                    struct comedi_cmd *cmd)
 {
-       unsigned int entry;
-       unsigned int chan;
-       unsigned int rang;
-       unsigned int aref;
        int i;
 
        for (i = 0; i < cmd->chanlist_len; i++) {
-               chan = CR_CHAN(cmd->chanlist[i]);
-               rang = CR_RANGE(cmd->chanlist[i]);
-               aref = CR_AREF(cmd->chanlist[i]);
-
-               entry = chan;
+               unsigned int chan = CR_CHAN(cmd->chanlist[i]);
+               unsigned int range = CR_RANGE(cmd->chanlist[i]);
+               unsigned int aref = CR_AREF(cmd->chanlist[i]);
+               unsigned int entry;
 
-               if (rang == 0)
-                       entry |= ME4000_AI_LIST_RANGE_UNIPOLAR_2_5;
-               else if (rang == 1)
-                       entry |= ME4000_AI_LIST_RANGE_UNIPOLAR_10;
-               else if (rang == 2)
-                       entry |= ME4000_AI_LIST_RANGE_BIPOLAR_2_5;
-               else
-                       entry |= ME4000_AI_LIST_RANGE_BIPOLAR_10;
+               entry = chan | ME4000_AI_LIST_RANGE(range);
 
                if (aref == AREF_DIFF)
                        entry |= ME4000_AI_LIST_INPUT_DIFFERENTIAL;
-               else
-                       entry |= ME4000_AI_LIST_INPUT_SINGLE_ENDED;
+
+               if (i == (cmd->chanlist_len - 1))
+                       entry |= ME4000_AI_LIST_LAST_ENTRY;
 
                outl(entry, dev->iobase + ME4000_AI_CHANNEL_LIST_REG);
        }
-
-       return 0;
 }
 
-static int ai_prepare(struct comedi_device *dev,
-                     struct comedi_subdevice *s,
-                     struct comedi_cmd *cmd,
-                     unsigned int init_ticks,
-                     unsigned int scan_ticks, unsigned int chan_ticks)
+static int me4000_ai_do_cmd(struct comedi_device *dev,
+                           struct comedi_subdevice *s)
 {
-       unsigned int tmp = 0;
+       struct me4000_private *devpriv = dev->private;
+       struct comedi_cmd *cmd = &s->async->cmd;
+       unsigned int ctrl;
 
        /* Write timer arguments */
-       ai_write_timer(dev, init_ticks, scan_ticks, chan_ticks);
+       outl(devpriv->ai_init_ticks - 1,
+            dev->iobase + ME4000_AI_SCAN_PRE_TIMER_LOW_REG);
+       outl(0x0, dev->iobase + ME4000_AI_SCAN_PRE_TIMER_HIGH_REG);
+
+       if (devpriv->ai_scan_ticks) {
+               outl(devpriv->ai_scan_ticks - 1,
+                    dev->iobase + ME4000_AI_SCAN_TIMER_LOW_REG);
+               outl(0x0, dev->iobase + ME4000_AI_SCAN_TIMER_HIGH_REG);
+       }
 
-       /* Reset control register */
-       outl(tmp, dev->iobase + ME4000_AI_CTRL_REG);
+       outl(devpriv->ai_chan_ticks - 1,
+            dev->iobase + ME4000_AI_CHAN_PRE_TIMER_REG);
+       outl(devpriv->ai_chan_ticks - 1,
+            dev->iobase + ME4000_AI_CHAN_TIMER_REG);
 
        /* Start sources */
-       if ((cmd->start_src == TRIG_EXT &&
-            cmd->scan_begin_src == TRIG_TIMER &&
-            cmd->convert_src == TRIG_TIMER) ||
-           (cmd->start_src == TRIG_EXT &&
-            cmd->scan_begin_src == TRIG_FOLLOW &&
-            cmd->convert_src == TRIG_TIMER)) {
-               tmp = ME4000_AI_CTRL_BIT_MODE_1 |
-                   ME4000_AI_CTRL_BIT_CHANNEL_FIFO |
-                   ME4000_AI_CTRL_BIT_DATA_FIFO;
-       } else if (cmd->start_src == TRIG_EXT &&
-                  cmd->scan_begin_src == TRIG_EXT &&
-                  cmd->convert_src == TRIG_TIMER) {
-               tmp = ME4000_AI_CTRL_BIT_MODE_2 |
-                   ME4000_AI_CTRL_BIT_CHANNEL_FIFO |
-                   ME4000_AI_CTRL_BIT_DATA_FIFO;
-       } else if (cmd->start_src == TRIG_EXT &&
-                  cmd->scan_begin_src == TRIG_EXT &&
-                  cmd->convert_src == TRIG_EXT) {
-               tmp = ME4000_AI_CTRL_BIT_MODE_0 |
-                   ME4000_AI_CTRL_BIT_MODE_1 |
-                   ME4000_AI_CTRL_BIT_CHANNEL_FIFO |
-                   ME4000_AI_CTRL_BIT_DATA_FIFO;
-       } else {
-               tmp = ME4000_AI_CTRL_BIT_MODE_0 |
-                   ME4000_AI_CTRL_BIT_CHANNEL_FIFO |
-                   ME4000_AI_CTRL_BIT_DATA_FIFO;
-       }
+       ctrl = devpriv->ai_ctrl_mode |
+              ME4000_AI_CTRL_CHANNEL_FIFO |
+              ME4000_AI_CTRL_DATA_FIFO;
 
        /* Stop triggers */
        if (cmd->stop_src == TRIG_COUNT) {
                outl(cmd->chanlist_len * cmd->stop_arg,
                     dev->iobase + ME4000_AI_SAMPLE_COUNTER_REG);
-               tmp |= ME4000_AI_CTRL_BIT_HF_IRQ | ME4000_AI_CTRL_BIT_SC_IRQ;
+               ctrl |= ME4000_AI_CTRL_SC_IRQ;
        } else if (cmd->stop_src == TRIG_NONE &&
                   cmd->scan_end_src == TRIG_COUNT) {
                outl(cmd->scan_end_arg,
                     dev->iobase + ME4000_AI_SAMPLE_COUNTER_REG);
-               tmp |= ME4000_AI_CTRL_BIT_HF_IRQ | ME4000_AI_CTRL_BIT_SC_IRQ;
-       } else {
-               tmp |= ME4000_AI_CTRL_BIT_HF_IRQ;
+               ctrl |= ME4000_AI_CTRL_SC_IRQ;
        }
+       ctrl |= ME4000_AI_CTRL_HF_IRQ;
 
        /* Write the setup to the control register */
-       outl(tmp, dev->iobase + ME4000_AI_CTRL_REG);
+       outl(ctrl, dev->iobase + ME4000_AI_CTRL_REG);
 
        /* Write the channel list */
-       ai_write_chanlist(dev, s, cmd);
-
-       return 0;
-}
-
-static int me4000_ai_do_cmd(struct comedi_device *dev,
-                           struct comedi_subdevice *s)
-{
-       int err;
-       unsigned int init_ticks = 0;
-       unsigned int scan_ticks = 0;
-       unsigned int chan_ticks = 0;
-       struct comedi_cmd *cmd = &s->async->cmd;
-
-       /* Reset the analog input */
-       err = me4000_ai_cancel(dev, s);
-       if (err)
-               return err;
-
-       /* Round the timer arguments */
-       err = ai_round_cmd_args(dev,
-                               s, cmd, &init_ticks, &scan_ticks, &chan_ticks);
-       if (err)
-               return err;
-
-       /* Prepare the AI for acquisition */
-       err = ai_prepare(dev, s, cmd, init_ticks, scan_ticks, chan_ticks);
-       if (err)
-               return err;
+       me4000_ai_write_chanlist(dev, s, cmd);
 
        /* Start acquistion by dummy read */
        inl(dev->iobase + ME4000_AI_START_REG);
@@ -822,14 +714,9 @@ static int me4000_ai_do_cmd_test(struct comedi_device *dev,
                                 struct comedi_subdevice *s,
                                 struct comedi_cmd *cmd)
 {
-       unsigned int init_ticks;
-       unsigned int chan_ticks;
-       unsigned int scan_ticks;
+       struct me4000_private *devpriv = dev->private;
        int err = 0;
 
-       /* Round the timer arguments */
-       ai_round_cmd_args(dev, s, cmd, &init_ticks, &scan_ticks, &chan_ticks);
-
        /* Step 1 : check if triggers are trivially valid */
 
        err |= comedi_check_trigger_src(&cmd->start_src, TRIG_NOW | TRIG_EXT);
@@ -857,21 +744,28 @@ static int me4000_ai_do_cmd_test(struct comedi_device *dev,
        if (cmd->start_src == TRIG_NOW &&
            cmd->scan_begin_src == TRIG_TIMER &&
            cmd->convert_src == TRIG_TIMER) {
+               devpriv->ai_ctrl_mode = ME4000_AI_CTRL_MODE_0;
        } else if (cmd->start_src == TRIG_NOW &&
                   cmd->scan_begin_src == TRIG_FOLLOW &&
                   cmd->convert_src == TRIG_TIMER) {
+               devpriv->ai_ctrl_mode = ME4000_AI_CTRL_MODE_0;
        } else if (cmd->start_src == TRIG_EXT &&
                   cmd->scan_begin_src == TRIG_TIMER &&
                   cmd->convert_src == TRIG_TIMER) {
+               devpriv->ai_ctrl_mode = ME4000_AI_CTRL_MODE_1;
        } else if (cmd->start_src == TRIG_EXT &&
                   cmd->scan_begin_src == TRIG_FOLLOW &&
                   cmd->convert_src == TRIG_TIMER) {
+               devpriv->ai_ctrl_mode = ME4000_AI_CTRL_MODE_1;
        } else if (cmd->start_src == TRIG_EXT &&
                   cmd->scan_begin_src == TRIG_EXT &&
                   cmd->convert_src == TRIG_TIMER) {
+               devpriv->ai_ctrl_mode = ME4000_AI_CTRL_MODE_2;
        } else if (cmd->start_src == TRIG_EXT &&
                   cmd->scan_begin_src == TRIG_EXT &&
                   cmd->convert_src == TRIG_EXT) {
+               devpriv->ai_ctrl_mode = ME4000_AI_CTRL_MODE_0 |
+                                       ME4000_AI_CTRL_MODE_1;
        } else {
                err |= -EINVAL;
        }
@@ -887,15 +781,19 @@ static int me4000_ai_do_cmd_test(struct comedi_device *dev,
                cmd->chanlist_len = 1;
                err |= -EINVAL;
        }
-       if (init_ticks < 66) {
+
+       /* Round the timer arguments */
+       me4000_ai_round_cmd_args(dev, s, cmd);
+
+       if (devpriv->ai_init_ticks < 66) {
                cmd->start_arg = 2000;
                err |= -EINVAL;
        }
-       if (scan_ticks && scan_ticks < 67) {
+       if (devpriv->ai_scan_ticks && devpriv->ai_scan_ticks < 67) {
                cmd->scan_begin_arg = 2031;
                err |= -EINVAL;
        }
-       if (chan_ticks < 66) {
+       if (devpriv->ai_chan_ticks < 66) {
                cmd->convert_arg = 2000;
                err |= -EINVAL;
        }
@@ -915,17 +813,18 @@ static int me4000_ai_do_cmd_test(struct comedi_device *dev,
            cmd->scan_begin_src == TRIG_TIMER &&
            cmd->convert_src == TRIG_TIMER) {
                /* Check timer arguments */
-               if (init_ticks < ME4000_AI_MIN_TICKS) {
+               if (devpriv->ai_init_ticks < ME4000_AI_MIN_TICKS) {
                        dev_err(dev->class_dev, "Invalid start arg\n");
                        cmd->start_arg = 2000;  /*  66 ticks at least */
                        err++;
                }
-               if (chan_ticks < ME4000_AI_MIN_TICKS) {
+               if (devpriv->ai_chan_ticks < ME4000_AI_MIN_TICKS) {
                        dev_err(dev->class_dev, "Invalid convert arg\n");
                        cmd->convert_arg = 2000;        /*  66 ticks at least */
                        err++;
                }
-               if (scan_ticks <= cmd->chanlist_len * chan_ticks) {
+               if (devpriv->ai_scan_ticks <=
+                   cmd->chanlist_len * devpriv->ai_chan_ticks) {
                        dev_err(dev->class_dev, "Invalid scan end arg\n");
 
                        /*  At least one tick more */
@@ -936,12 +835,12 @@ static int me4000_ai_do_cmd_test(struct comedi_device *dev,
                   cmd->scan_begin_src == TRIG_FOLLOW &&
                   cmd->convert_src == TRIG_TIMER) {
                /* Check timer arguments */
-               if (init_ticks < ME4000_AI_MIN_TICKS) {
+               if (devpriv->ai_init_ticks < ME4000_AI_MIN_TICKS) {
                        dev_err(dev->class_dev, "Invalid start arg\n");
                        cmd->start_arg = 2000;  /*  66 ticks at least */
                        err++;
                }
-               if (chan_ticks < ME4000_AI_MIN_TICKS) {
+               if (devpriv->ai_chan_ticks < ME4000_AI_MIN_TICKS) {
                        dev_err(dev->class_dev, "Invalid convert arg\n");
                        cmd->convert_arg = 2000;        /*  66 ticks at least */
                        err++;
@@ -950,17 +849,18 @@ static int me4000_ai_do_cmd_test(struct comedi_device *dev,
                   cmd->scan_begin_src == TRIG_TIMER &&
                   cmd->convert_src == TRIG_TIMER) {
                /* Check timer arguments */
-               if (init_ticks < ME4000_AI_MIN_TICKS) {
+               if (devpriv->ai_init_ticks < ME4000_AI_MIN_TICKS) {
                        dev_err(dev->class_dev, "Invalid start arg\n");
                        cmd->start_arg = 2000;  /*  66 ticks at least */
                        err++;
                }
-               if (chan_ticks < ME4000_AI_MIN_TICKS) {
+               if (devpriv->ai_chan_ticks < ME4000_AI_MIN_TICKS) {
                        dev_err(dev->class_dev, "Invalid convert arg\n");
                        cmd->convert_arg = 2000;        /*  66 ticks at least */
                        err++;
                }
-               if (scan_ticks <= cmd->chanlist_len * chan_ticks) {
+               if (devpriv->ai_scan_ticks <=
+                   cmd->chanlist_len * devpriv->ai_chan_ticks) {
                        dev_err(dev->class_dev, "Invalid scan end arg\n");
 
                        /*  At least one tick more */
@@ -971,12 +871,12 @@ static int me4000_ai_do_cmd_test(struct comedi_device *dev,
                   cmd->scan_begin_src == TRIG_FOLLOW &&
                   cmd->convert_src == TRIG_TIMER) {
                /* Check timer arguments */
-               if (init_ticks < ME4000_AI_MIN_TICKS) {
+               if (devpriv->ai_init_ticks < ME4000_AI_MIN_TICKS) {
                        dev_err(dev->class_dev, "Invalid start arg\n");
                        cmd->start_arg = 2000;  /*  66 ticks at least */
                        err++;
                }
-               if (chan_ticks < ME4000_AI_MIN_TICKS) {
+               if (devpriv->ai_chan_ticks < ME4000_AI_MIN_TICKS) {
                        dev_err(dev->class_dev, "Invalid convert arg\n");
                        cmd->convert_arg = 2000;        /*  66 ticks at least */
                        err++;
@@ -985,12 +885,12 @@ static int me4000_ai_do_cmd_test(struct comedi_device *dev,
                   cmd->scan_begin_src == TRIG_EXT &&
                   cmd->convert_src == TRIG_TIMER) {
                /* Check timer arguments */
-               if (init_ticks < ME4000_AI_MIN_TICKS) {
+               if (devpriv->ai_init_ticks < ME4000_AI_MIN_TICKS) {
                        dev_err(dev->class_dev, "Invalid start arg\n");
                        cmd->start_arg = 2000;  /*  66 ticks at least */
                        err++;
                }
-               if (chan_ticks < ME4000_AI_MIN_TICKS) {
+               if (devpriv->ai_chan_ticks < ME4000_AI_MIN_TICKS) {
                        dev_err(dev->class_dev, "Invalid convert arg\n");
                        cmd->convert_arg = 2000;        /*  66 ticks at least */
                        err++;
@@ -999,7 +899,7 @@ static int me4000_ai_do_cmd_test(struct comedi_device *dev,
                   cmd->scan_begin_src == TRIG_EXT &&
                   cmd->convert_src == TRIG_EXT) {
                /* Check timer arguments */
-               if (init_ticks < ME4000_AI_MIN_TICKS) {
+               if (devpriv->ai_init_ticks < ME4000_AI_MIN_TICKS) {
                        dev_err(dev->class_dev, "Invalid start arg\n");
                        cmd->start_arg = 2000;  /*  66 ticks at least */
                        err++;
@@ -1039,103 +939,57 @@ static irqreturn_t me4000_ai_isr(int irq, void *dev_id)
                return IRQ_NONE;
 
        if (inl(dev->iobase + ME4000_IRQ_STATUS_REG) &
-           ME4000_IRQ_STATUS_BIT_AI_HF) {
+           ME4000_IRQ_STATUS_AI_HF) {
                /* Read status register to find out what happened */
-               tmp = inl(dev->iobase + ME4000_AI_CTRL_REG);
-
-               if (!(tmp & ME4000_AI_STATUS_BIT_FF_DATA) &&
-                   !(tmp & ME4000_AI_STATUS_BIT_HF_DATA) &&
-                   (tmp & ME4000_AI_STATUS_BIT_EF_DATA)) {
-                       c = ME4000_AI_FIFO_COUNT;
-
-                       /*
-                        * FIFO overflow, so stop conversion
-                        * and disable all interrupts
-                        */
-                       tmp |= ME4000_AI_CTRL_BIT_IMMEDIATE_STOP;
-                       tmp &= ~(ME4000_AI_CTRL_BIT_HF_IRQ |
-                                ME4000_AI_CTRL_BIT_SC_IRQ);
-                       outl(tmp, dev->iobase + ME4000_AI_CTRL_REG);
-
-                       s->async->events |= COMEDI_CB_ERROR;
+               tmp = inl(dev->iobase + ME4000_AI_STATUS_REG);
 
+               if (!(tmp & ME4000_AI_STATUS_FF_DATA) &&
+                   !(tmp & ME4000_AI_STATUS_HF_DATA) &&
+                   (tmp & ME4000_AI_STATUS_EF_DATA)) {
                        dev_err(dev->class_dev, "FIFO overflow\n");
-               } else if ((tmp & ME4000_AI_STATUS_BIT_FF_DATA)
-                          && !(tmp & ME4000_AI_STATUS_BIT_HF_DATA)
-                          && (tmp & ME4000_AI_STATUS_BIT_EF_DATA)) {
+                       s->async->events |= COMEDI_CB_ERROR;
+                       c = ME4000_AI_FIFO_COUNT;
+               } else if ((tmp & ME4000_AI_STATUS_FF_DATA) &&
+                          !(tmp & ME4000_AI_STATUS_HF_DATA) &&
+                          (tmp & ME4000_AI_STATUS_EF_DATA)) {
                        c = ME4000_AI_FIFO_COUNT / 2;
                } else {
-                       dev_err(dev->class_dev,
-                               "Can't determine state of fifo\n");
-                       c = 0;
-
-                       /*
-                        * Undefined state, so stop conversion
-                        * and disable all interrupts
-                        */
-                       tmp |= ME4000_AI_CTRL_BIT_IMMEDIATE_STOP;
-                       tmp &= ~(ME4000_AI_CTRL_BIT_HF_IRQ |
-                                ME4000_AI_CTRL_BIT_SC_IRQ);
-                       outl(tmp, dev->iobase + ME4000_AI_CTRL_REG);
-
-                       s->async->events |= COMEDI_CB_ERROR;
-
                        dev_err(dev->class_dev, "Undefined FIFO state\n");
+                       s->async->events |= COMEDI_CB_ERROR;
+                       c = 0;
                }
 
                for (i = 0; i < c; i++) {
-                       /* Read value from data fifo */
-                       lval = inl(dev->iobase + ME4000_AI_DATA_REG) & 0xFFFF;
-                       lval ^= 0x8000;
-
-                       if (!comedi_buf_write_samples(s, &lval, 1)) {
-                               /*
-                                * Buffer overflow, so stop conversion
-                                * and disable all interrupts
-                                */
-                               tmp |= ME4000_AI_CTRL_BIT_IMMEDIATE_STOP;
-                               tmp &= ~(ME4000_AI_CTRL_BIT_HF_IRQ |
-                                        ME4000_AI_CTRL_BIT_SC_IRQ);
-                               outl(tmp, dev->iobase + ME4000_AI_CTRL_REG);
+                       lval = me4000_ai_get_sample(dev, s);
+                       if (!comedi_buf_write_samples(s, &lval, 1))
                                break;
-                       }
                }
 
                /* Work is done, so reset the interrupt */
-               tmp |= ME4000_AI_CTRL_BIT_HF_IRQ_RESET;
+               tmp |= ME4000_AI_CTRL_HF_IRQ_RESET;
                outl(tmp, dev->iobase + ME4000_AI_CTRL_REG);
-               tmp &= ~ME4000_AI_CTRL_BIT_HF_IRQ_RESET;
+               tmp &= ~ME4000_AI_CTRL_HF_IRQ_RESET;
                outl(tmp, dev->iobase + ME4000_AI_CTRL_REG);
        }
 
        if (inl(dev->iobase + ME4000_IRQ_STATUS_REG) &
-           ME4000_IRQ_STATUS_BIT_SC) {
+           ME4000_IRQ_STATUS_SC) {
+               /* Acquisition is complete */
                s->async->events |= COMEDI_CB_EOA;
 
-               /*
-                * Acquisition is complete, so stop
-                * conversion and disable all interrupts
-                */
-               tmp = inl(dev->iobase + ME4000_AI_CTRL_REG);
-               tmp |= ME4000_AI_CTRL_BIT_IMMEDIATE_STOP;
-               tmp &= ~(ME4000_AI_CTRL_BIT_HF_IRQ | ME4000_AI_CTRL_BIT_SC_IRQ);
-               outl(tmp, dev->iobase + ME4000_AI_CTRL_REG);
-
                /* Poll data until fifo empty */
-               while (inl(dev->iobase + ME4000_AI_CTRL_REG) &
-                      ME4000_AI_STATUS_BIT_EF_DATA) {
-                       /* Read value from data fifo */
-                       lval = inl(dev->iobase + ME4000_AI_DATA_REG) & 0xFFFF;
-                       lval ^= 0x8000;
-
+               while (inl(dev->iobase + ME4000_AI_STATUS_REG) &
+                      ME4000_AI_STATUS_EF_DATA) {
+                       lval = me4000_ai_get_sample(dev, s);
                        if (!comedi_buf_write_samples(s, &lval, 1))
                                break;
                }
 
                /* Work is done, so reset the interrupt */
-               tmp |= ME4000_AI_CTRL_BIT_SC_IRQ_RESET;
+               tmp = inl(dev->iobase + ME4000_AI_CTRL_REG);
+               tmp |= ME4000_AI_CTRL_SC_IRQ_RESET;
                outl(tmp, dev->iobase + ME4000_AI_CTRL_REG);
-               tmp &= ~ME4000_AI_CTRL_BIT_SC_IRQ_RESET;
+               tmp &= ~ME4000_AI_CTRL_SC_IRQ_RESET;
                outl(tmp, dev->iobase + ME4000_AI_CTRL_REG);
        }
 
@@ -1149,12 +1003,12 @@ static int me4000_ao_insn_write(struct comedi_device *dev,
                                struct comedi_insn *insn,
                                unsigned int *data)
 {
-       int chan = CR_CHAN(insn->chanspec);
+       unsigned int chan = CR_CHAN(insn->chanspec);
        unsigned int tmp;
 
        /* Stop any running conversion */
        tmp = inl(dev->iobase + ME4000_AO_CTRL_REG(chan));
-       tmp |= ME4000_AO_CTRL_BIT_IMMEDIATE_STOP;
+       tmp |= ME4000_AO_CTRL_IMMEDIATE_STOP;
        outl(tmp, dev->iobase + ME4000_AO_CTRL_REG(chan));
 
        /* Clear control register and set to single mode */
@@ -1217,18 +1071,18 @@ static int me4000_dio_insn_config(struct comedi_device *dev,
                return ret;
 
        tmp = inl(dev->iobase + ME4000_DIO_CTRL_REG);
-       tmp &= ~(ME4000_DIO_CTRL_BIT_MODE_0 | ME4000_DIO_CTRL_BIT_MODE_1 |
-                ME4000_DIO_CTRL_BIT_MODE_2 | ME4000_DIO_CTRL_BIT_MODE_3 |
-                ME4000_DIO_CTRL_BIT_MODE_4 | ME4000_DIO_CTRL_BIT_MODE_5 |
-                ME4000_DIO_CTRL_BIT_MODE_6 | ME4000_DIO_CTRL_BIT_MODE_7);
+       tmp &= ~(ME4000_DIO_CTRL_MODE_0 | ME4000_DIO_CTRL_MODE_1 |
+                ME4000_DIO_CTRL_MODE_2 | ME4000_DIO_CTRL_MODE_3 |
+                ME4000_DIO_CTRL_MODE_4 | ME4000_DIO_CTRL_MODE_5 |
+                ME4000_DIO_CTRL_MODE_6 | ME4000_DIO_CTRL_MODE_7);
        if (s->io_bits & 0x000000ff)
-               tmp |= ME4000_DIO_CTRL_BIT_MODE_0;
+               tmp |= ME4000_DIO_CTRL_MODE_0;
        if (s->io_bits & 0x0000ff00)
-               tmp |= ME4000_DIO_CTRL_BIT_MODE_2;
+               tmp |= ME4000_DIO_CTRL_MODE_2;
        if (s->io_bits & 0x00ff0000)
-               tmp |= ME4000_DIO_CTRL_BIT_MODE_4;
+               tmp |= ME4000_DIO_CTRL_MODE_4;
        if (s->io_bits & 0xff000000)
-               tmp |= ME4000_DIO_CTRL_BIT_MODE_6;
+               tmp |= ME4000_DIO_CTRL_MODE_6;
 
        /*
         * Check for optoisolated ME-4000 version.
@@ -1238,9 +1092,8 @@ static int me4000_dio_insn_config(struct comedi_device *dev,
        if (inl(dev->iobase + ME4000_DIO_DIR_REG)) {
                s->io_bits |= 0x000000ff;
                s->io_bits &= ~0x0000ff00;
-               tmp |= ME4000_DIO_CTRL_BIT_MODE_0;
-               tmp &= ~(ME4000_DIO_CTRL_BIT_MODE_2 |
-                        ME4000_DIO_CTRL_BIT_MODE_3);
+               tmp |= ME4000_DIO_CTRL_MODE_0;
+               tmp &= ~(ME4000_DIO_CTRL_MODE_2 | ME4000_DIO_CTRL_MODE_3);
        }
 
        outl(tmp, dev->iobase + ME4000_DIO_CTRL_REG);
@@ -1253,7 +1106,7 @@ static int me4000_auto_attach(struct comedi_device *dev,
 {
        struct pci_dev *pcidev = comedi_to_pci_dev(dev);
        const struct me4000_board *board = NULL;
-       struct me4000_info *info;
+       struct me4000_private *devpriv;
        struct comedi_subdevice *s;
        int result;
 
@@ -1264,17 +1117,17 @@ static int me4000_auto_attach(struct comedi_device *dev,
        dev->board_ptr = board;
        dev->board_name = board->name;
 
-       info = comedi_alloc_devpriv(dev, sizeof(*info));
-       if (!info)
+       devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv));
+       if (!devpriv)
                return -ENOMEM;
 
        result = comedi_pci_enable(dev);
        if (result)
                return result;
 
-       info->plx_regbase = pci_resource_start(pcidev, 1);
+       devpriv->plx_regbase = pci_resource_start(pcidev, 1);
        dev->iobase = pci_resource_start(pcidev, 2);
-       if (!info->plx_regbase || !dev->iobase)
+       if (!devpriv->plx_regbase || !dev->iobase)
                return -ENODEV;
 
        result = comedi_load_firmware(dev, &pcidev->dev, ME4000_FIRMWARE,
@@ -1287,79 +1140,66 @@ static int me4000_auto_attach(struct comedi_device *dev,
        if (pcidev->irq > 0) {
                result = request_irq(pcidev->irq, me4000_ai_isr, IRQF_SHARED,
                                     dev->board_name, dev);
-               if (result == 0)
+               if (result == 0) {
                        dev->irq = pcidev->irq;
+
+                       /* Enable interrupts on the PLX */
+                       outl(PLX9052_INTCSR_LI1ENAB | PLX9052_INTCSR_LI1POL |
+                            PLX9052_INTCSR_PCIENAB,
+                            devpriv->plx_regbase + PLX9052_INTCSR);
+               }
        }
 
        result = comedi_alloc_subdevices(dev, 4);
        if (result)
                return result;
 
-    /*=========================================================================
-      Analog input subdevice
-      ========================================================================*/
-
+       /* Analog Input subdevice */
        s = &dev->subdevices[0];
-
-       if (board->ai_nchan) {
-               s->type = COMEDI_SUBD_AI;
-               s->subdev_flags =
-                   SDF_READABLE | SDF_COMMON | SDF_GROUND | SDF_DIFF;
-               s->n_chan = board->ai_nchan;
-               s->maxdata = 0xFFFF;    /*  16 bit ADC */
-               s->len_chanlist = ME4000_AI_CHANNEL_LIST_COUNT;
-               s->range_table = &me4000_ai_range;
-               s->insn_read = me4000_ai_insn_read;
-
-               if (dev->irq) {
-                       dev->read_subdev = s;
-                       s->subdev_flags |= SDF_CMD_READ;
-                       s->cancel = me4000_ai_cancel;
-                       s->do_cmdtest = me4000_ai_do_cmd_test;
-                       s->do_cmd = me4000_ai_do_cmd;
-               }
-       } else {
-               s->type = COMEDI_SUBD_UNUSED;
+       s->type         = COMEDI_SUBD_AI;
+       s->subdev_flags = SDF_READABLE | SDF_COMMON | SDF_GROUND;
+       if (board->can_do_diff_ai)
+               s->subdev_flags |= SDF_DIFF;
+       s->n_chan       = board->ai_nchan;
+       s->maxdata      = 0xffff;
+       s->len_chanlist = ME4000_AI_CHANNEL_LIST_COUNT;
+       s->range_table  = &me4000_ai_range;
+       s->insn_read    = me4000_ai_insn_read;
+
+       if (dev->irq) {
+               dev->read_subdev = s;
+               s->subdev_flags |= SDF_CMD_READ;
+               s->cancel       = me4000_ai_cancel;
+               s->do_cmdtest   = me4000_ai_do_cmd_test;
+               s->do_cmd       = me4000_ai_do_cmd;
        }
 
-    /*=========================================================================
-      Analog output subdevice
-      ========================================================================*/
-
+       /* Analog Output subdevice */
        s = &dev->subdevices[1];
-
-       if (board->ao_nchan) {
-               s->type = COMEDI_SUBD_AO;
-               s->subdev_flags = SDF_WRITABLE | SDF_COMMON | SDF_GROUND;
-               s->n_chan = board->ao_nchan;
-               s->maxdata = 0xFFFF;    /*  16 bit DAC */
-               s->range_table = &range_bipolar10;
-               s->insn_write = me4000_ao_insn_write;
+       if (board->has_ao) {
+               s->type         = COMEDI_SUBD_AO;
+               s->subdev_flags = SDF_WRITABLE | SDF_COMMON | SDF_GROUND;
+               s->n_chan       = 4;
+               s->maxdata      = 0xffff;
+               s->range_table  = &range_bipolar10;
+               s->insn_write   = me4000_ao_insn_write;
 
                result = comedi_alloc_subdev_readback(s);
                if (result)
                        return result;
        } else {
-               s->type = COMEDI_SUBD_UNUSED;
+               s->type         = COMEDI_SUBD_UNUSED;
        }
 
-    /*=========================================================================
-      Digital I/O subdevice
-      ========================================================================*/
-
+       /* Digital I/O subdevice */
        s = &dev->subdevices[2];
-
-       if (board->dio_nchan) {
-               s->type = COMEDI_SUBD_DIO;
-               s->subdev_flags = SDF_READABLE | SDF_WRITABLE;
-               s->n_chan = board->dio_nchan;
-               s->maxdata = 1;
-               s->range_table = &range_digital;
-               s->insn_bits = me4000_dio_insn_bits;
-               s->insn_config = me4000_dio_insn_config;
-       } else {
-               s->type = COMEDI_SUBD_UNUSED;
-       }
+       s->type         = COMEDI_SUBD_DIO;
+       s->subdev_flags = SDF_READABLE | SDF_WRITABLE;
+       s->n_chan       = 32;
+       s->maxdata      = 1;
+       s->range_table  = &range_digital;
+       s->insn_bits    = me4000_dio_insn_bits;
+       s->insn_config  = me4000_dio_insn_config;
 
        /*
         * Check for optoisolated ME-4000 version. If one the first
@@ -1367,7 +1207,7 @@ static int me4000_auto_attach(struct comedi_device *dev,
         */
        if (!inl(dev->iobase + ME4000_DIO_DIR_REG)) {
                s->io_bits |= 0xFF;
-               outl(ME4000_DIO_CTRL_BIT_MODE_0,
+               outl(ME4000_DIO_CTRL_MODE_0,
                     dev->iobase + ME4000_DIO_DIR_REG);
        }
 
@@ -1393,8 +1233,12 @@ static int me4000_auto_attach(struct comedi_device *dev,
 
 static void me4000_detach(struct comedi_device *dev)
 {
-       if (dev->iobase)
-               me4000_reset(dev);
+       if (dev->irq) {
+               struct me4000_private *devpriv = dev->private;
+
+               /* Disable interrupts on the PLX */
+               outl(0, devpriv->plx_regbase + PLX9052_INTCSR);
+       }
        comedi_pci_detach(dev);
 }
 
@@ -1438,6 +1282,6 @@ static struct pci_driver me4000_pci_driver = {
 module_comedi_pci_driver(me4000_driver, me4000_pci_driver);
 
 MODULE_AUTHOR("Comedi http://www.comedi.org");
-MODULE_DESCRIPTION("Comedi low-level driver");
+MODULE_DESCRIPTION("Comedi driver for Meilhaus ME-4000 series boards");
 MODULE_LICENSE("GPL");
 MODULE_FIRMWARE(ME4000_FIRMWARE);
index a208cb3484375d8868d6ab4f3701876cb5b5a566..d9de83ab026712792a61a6cb806326316573cddb 100644 (file)
@@ -55,11 +55,7 @@ static int dio24_auto_attach(struct comedi_device *dev,
 
        /* 8255 dio */
        s = &dev->subdevices[0];
-       ret = subdev_8255_init(dev, s, NULL, 0x00);
-       if (ret)
-               return ret;
-
-       return 0;
+       return subdev_8255_init(dev, s, NULL, 0x00);
 }
 
 static struct comedi_driver driver_dio24 = {
index 781b321587dc601a954af44459a7044ada205613..a353d1b155bbd270dec44f6d1dba60384a6c3afd 100644 (file)
@@ -305,7 +305,7 @@ static int check_channel_list(struct comedi_device *dev,
                chansegment[0] = chanlist[0];
                for (i = 1, seglen = 1; i < chanlen; i++, seglen++) {
                        /*  we detect loop, this must by finish */
-                           if (chanlist[0] == chanlist[i])
+                       if (chanlist[0] == chanlist[i])
                                break;
                        nowmustbechan =
                            (CR_CHAN(chansegment[i - 1]) + 1) % chanlen;
index 781918d8d85f5452ad9d61fb28b2c95a9b4da13d..35f0f676eb28378979c0eacd745a4178db1901a6 100644 (file)
@@ -2852,11 +2852,7 @@ static int s626_auto_attach(struct comedi_device *dev,
        s->insn_read    = s626_enc_insn_read;
        s->insn_write   = s626_enc_insn_write;
 
-       ret = s626_initialize(dev);
-       if (ret)
-               return ret;
-
-       return 0;
+       return s626_initialize(dev);
 }
 
 static void s626_detach(struct comedi_device *dev)
index eaa9add491df7cbade63ee3786f36540aac71606..649cf47184a403241badec00b70164657a7054bd 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * usbduxsigma.c
- * Copyright (C) 2011-2014 Bernd Porr, mail@berndporr.me.uk
+ * Copyright (C) 2011-2015 Bernd Porr, mail@berndporr.me.uk
  *
  * 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
@@ -18,7 +18,7 @@
  * Description: University of Stirling USB DAQ & INCITE Technology Limited
  * Devices: [ITL] USB-DUX-SIGMA (usbduxsigma)
  * Author: Bernd Porr <mail@berndporr.me.uk>
- * Updated: 10 Oct 2014
+ * Updated: 20 July 2015
  * Status: stable
  */
 
@@ -39,6 +39,7 @@
  *   0.4: fixed D/A voltage range
  *   0.5: various bug fixes, health check at startup
  *   0.6: corrected wrong input range
+ *   0.7: rewrite code that urb->interval is always 1
  */
 
 #include <linux/kernel.h>
 #define RETRIES 10
 
 /* bulk transfer commands to usbduxsigma */
-#define USBBUXSIGMA_AD_CMD             0
+#define USBBUXSIGMA_AD_CMD             9
 #define USBDUXSIGMA_DA_CMD             1
 #define USBDUXSIGMA_DIO_CFG_CMD                2
 #define USBDUXSIGMA_DIO_BITS_CMD       3
@@ -217,24 +218,28 @@ static void usbduxsigma_ai_handle_urb(struct comedi_device *dev,
        int ret;
        int i;
 
-       devpriv->ai_counter--;
-       if (devpriv->ai_counter == 0) {
-               devpriv->ai_counter = devpriv->ai_timer;
-
-               /* get the data from the USB bus and hand it over to comedi */
-               for (i = 0; i < cmd->chanlist_len; i++) {
-                       /* transfer data, note first byte is the DIO state */
-                       val = be32_to_cpu(devpriv->in_buf[i+1]);
-                       val &= 0x00ffffff;      /* strip status byte */
-                       val ^= 0x00800000;      /* convert to unsigned */
+       if ((urb->actual_length > 0) && (urb->status != -EXDEV)) {
+               devpriv->ai_counter--;
+               if (devpriv->ai_counter == 0) {
+                       devpriv->ai_counter = devpriv->ai_timer;
+
+                       /* get the data from the USB bus
+                          and hand it over to comedi */
+                       for (i = 0; i < cmd->chanlist_len; i++) {
+                               /* transfer data,
+                                  note first byte is the DIO state */
+                               val = be32_to_cpu(devpriv->in_buf[i+1]);
+                               val &= 0x00ffffff; /* strip status byte */
+                               val ^= 0x00800000; /* convert to unsigned */
+
+                               if (!comedi_buf_write_samples(s, &val, 1))
+                                       return;
+                       }
 
-                       if (!comedi_buf_write_samples(s, &val, 1))
-                               return;
+                       if (cmd->stop_src == TRIG_COUNT &&
+                           async->scans_done >= cmd->stop_arg)
+                               async->events |= COMEDI_CB_EOA;
                }
-
-               if (cmd->stop_src == TRIG_COUNT &&
-                   async->scans_done >= cmd->stop_arg)
-                       async->events |= COMEDI_CB_EOA;
        }
 
        /* if command is still running, resubmit urb */
@@ -374,10 +379,7 @@ static void usbduxsigma_ao_handle_urb(struct comedi_device *dev,
                urb->transfer_buffer_length = SIZEOUTBUF;
                urb->dev = comedi_to_usb_dev(dev);
                urb->status = 0;
-               if (devpriv->high_speed)
-                       urb->interval = 8;      /* uframes */
-               else
-                       urb->interval = 1;      /* frames */
+               urb->interval = 1;      /* (u)frames */
                urb->number_of_packets = 1;
                urb->iso_frame_desc[0].offset = 0;
                urb->iso_frame_desc[0].length = SIZEOUTBUF;
@@ -441,7 +443,6 @@ static int usbduxsigma_submit_urbs(struct comedi_device *dev,
                                   int input_urb)
 {
        struct usb_device *usb = comedi_to_usb_dev(dev);
-       struct usbduxsigma_private *devpriv = dev->private;
        struct urb *urb;
        int ret;
        int i;
@@ -452,7 +453,7 @@ static int usbduxsigma_submit_urbs(struct comedi_device *dev,
 
                /* in case of a resubmission after an unlink... */
                if (input_urb)
-                       urb->interval = devpriv->ai_interval;
+                       urb->interval = 1;
                urb->context = dev;
                urb->dev = usb;
                urb->status = 0;
@@ -481,6 +482,7 @@ static int usbduxsigma_ai_cmdtest(struct comedi_device *dev,
        struct usbduxsigma_private *devpriv = dev->private;
        int high_speed = devpriv->high_speed;
        int interval = usbduxsigma_chans_to_interval(cmd->chanlist_len);
+       unsigned int tmp;
        int err = 0;
 
        /* Step 1 : check if triggers are trivially valid */
@@ -508,35 +510,20 @@ static int usbduxsigma_ai_cmdtest(struct comedi_device *dev,
 
        err |= comedi_check_trigger_arg_is(&cmd->start_arg, 0);
 
-       if (cmd->scan_begin_src == TRIG_FOLLOW) /* internal trigger */
-               err |= comedi_check_trigger_arg_is(&cmd->scan_begin_arg, 0);
-
-       if (cmd->scan_begin_src == TRIG_TIMER) {
-               unsigned int tmp;
-
-               if (high_speed) {
-                       /*
-                        * In high speed mode microframes are possible.
-                        * However, during one microframe we can roughly
-                        * sample two channels. Thus, the more channels
-                        * are in the channel list the more time we need.
-                        */
-                       err |= comedi_check_trigger_arg_min(&cmd->
-                                                           scan_begin_arg,
-                                                           (1000000 / 8 *
-                                                            interval));
-
-                       tmp = (cmd->scan_begin_arg / 125000) * 125000;
-               } else {
-                       /* full speed */
-                       /* 1kHz scans every USB frame */
-                       err |= comedi_check_trigger_arg_min(&cmd->
-                                                           scan_begin_arg,
-                                                           1000000);
-
-                       tmp = (cmd->scan_begin_arg / 1000000) * 1000000;
-               }
-               err |= comedi_check_trigger_arg_is(&cmd->scan_begin_arg, tmp);
+       if (high_speed) {
+               /*
+                * In high speed mode microframes are possible.
+                * However, during one microframe we can roughly
+                * sample two channels. Thus, the more channels
+                * are in the channel list the more time we need.
+                */
+               err |= comedi_check_trigger_arg_min(&cmd->scan_begin_arg,
+                                                   (125000 * interval));
+       } else {
+               /* full speed */
+               /* 1kHz scans every USB frame */
+               err |= comedi_check_trigger_arg_min(&cmd->scan_begin_arg,
+                                                   1000000);
        }
 
        err |= comedi_check_trigger_arg_is(&cmd->scan_end_arg,
@@ -552,21 +539,8 @@ static int usbduxsigma_ai_cmdtest(struct comedi_device *dev,
 
        /* Step 4: fix up any arguments */
 
-       if (high_speed) {
-               /*
-                * every 2 channels get a time window of 125us. Thus, if we
-                * sample all 16 channels we need 1ms. If we sample only one
-                * channel we need only 125us
-                */
-               devpriv->ai_interval = interval;
-               devpriv->ai_timer = cmd->scan_begin_arg / (125000 * interval);
-       } else {
-               /* interval always 1ms */
-               devpriv->ai_interval = 1;
-               devpriv->ai_timer = cmd->scan_begin_arg / 1000000;
-       }
-       if (devpriv->ai_timer < 1)
-               err |= -EINVAL;
+       tmp = rounddown(cmd->scan_begin_arg, high_speed ? 125000 : 1000000);
+       err |= comedi_check_trigger_arg_is(&cmd->scan_begin_arg, tmp);
 
        if (err)
                return 4;
@@ -668,19 +642,36 @@ static int usbduxsigma_ai_cmd(struct comedi_device *dev,
 
        down(&devpriv->sem);
 
+       if (devpriv->high_speed) {
+               /*
+                * every 2 channels get a time window of 125us. Thus, if we
+                * sample all 16 channels we need 1ms. If we sample only one
+                * channel we need only 125us
+                */
+               unsigned int interval = usbduxsigma_chans_to_interval(len);
+
+               devpriv->ai_interval = interval;
+               devpriv->ai_timer = cmd->scan_begin_arg / (125000 * interval);
+       } else {
+               /* interval always 1ms */
+               devpriv->ai_interval = 1;
+               devpriv->ai_timer = cmd->scan_begin_arg / 1000000;
+       }
+
        for (i = 0; i < len; i++) {
                unsigned int chan  = CR_CHAN(cmd->chanlist[i]);
 
                create_adc_command(chan, &muxsg0, &muxsg1);
        }
 
-       devpriv->dux_commands[1] = len;  /* num channels per time step */
-       devpriv->dux_commands[2] = 0x12; /* CONFIG0 */
-       devpriv->dux_commands[3] = 0x03; /* CONFIG1: 23kHz sample, delay 0us */
-       devpriv->dux_commands[4] = 0x00; /* CONFIG3: diff. channels off */
-       devpriv->dux_commands[5] = muxsg0;
-       devpriv->dux_commands[6] = muxsg1;
-       devpriv->dux_commands[7] = sysred;
+       devpriv->dux_commands[1] = devpriv->ai_interval;
+       devpriv->dux_commands[2] = len;  /* num channels per time step */
+       devpriv->dux_commands[3] = 0x12; /* CONFIG0 */
+       devpriv->dux_commands[4] = 0x03; /* CONFIG1: 23kHz sample, delay 0us */
+       devpriv->dux_commands[5] = 0x00; /* CONFIG3: diff. channels off */
+       devpriv->dux_commands[6] = muxsg0;
+       devpriv->dux_commands[7] = muxsg1;
+       devpriv->dux_commands[8] = sysred;
 
        ret = usbbuxsigma_send_cmd(dev, USBBUXSIGMA_AD_CMD);
        if (ret < 0) {
@@ -848,29 +839,22 @@ static int usbduxsigma_ao_cmdtest(struct comedi_device *dev,
                                  struct comedi_cmd *cmd)
 {
        struct usbduxsigma_private *devpriv = dev->private;
+       unsigned int tmp;
        int err = 0;
-       int high_speed;
-       unsigned int flags;
-
-       /* high speed conversions are not used yet */
-       high_speed = 0;         /* (devpriv->high_speed) */
 
        /* Step 1 : check if triggers are trivially valid */
 
        err |= comedi_check_trigger_src(&cmd->start_src, TRIG_NOW | TRIG_INT);
 
-       if (high_speed) {
-               /*
-                * start immediately a new scan
-                * the sampling rate is set by the coversion rate
-                */
-               flags = TRIG_FOLLOW;
-       } else {
-               /* start a new scan (output at once) with a timer */
-               flags = TRIG_TIMER;
-       }
-       err |= comedi_check_trigger_src(&cmd->scan_begin_src, flags);
-
+       /*
+        * For now, always use "scan" timing with all channels updated at once
+        * (cmd->scan_begin_src == TRIG_TIMER, cmd->convert_src == TRIG_NOW).
+        *
+        * In a future version, "convert" timing with channels updated
+        * indivually may be supported in high speed mode
+        * (cmd->scan_begin_src == TRIG_FOLLOW, cmd->convert_src == TRIG_TIMER).
+        */
+       err |= comedi_check_trigger_src(&cmd->scan_begin_src, TRIG_TIMER);
        err |= comedi_check_trigger_src(&cmd->convert_src, TRIG_NOW);
        err |= comedi_check_trigger_src(&cmd->scan_end_src, TRIG_COUNT);
        err |= comedi_check_trigger_src(&cmd->stop_src, TRIG_COUNT | TRIG_NONE);
@@ -894,17 +878,7 @@ static int usbduxsigma_ao_cmdtest(struct comedi_device *dev,
 
        err |= comedi_check_trigger_arg_is(&cmd->start_arg, 0);
 
-       if (cmd->scan_begin_src == TRIG_FOLLOW) /* internal trigger */
-               err |= comedi_check_trigger_arg_is(&cmd->scan_begin_arg, 0);
-
-       if (cmd->scan_begin_src == TRIG_TIMER) {
-               err |= comedi_check_trigger_arg_min(&cmd->scan_begin_arg,
-                                                   1000000);
-       }
-
-       /* not used now, is for later use */
-       if (cmd->convert_src == TRIG_TIMER)
-               err |= comedi_check_trigger_arg_min(&cmd->convert_arg, 125000);
+       err |= comedi_check_trigger_arg_min(&cmd->scan_begin_arg, 1000000);
 
        err |= comedi_check_trigger_arg_is(&cmd->scan_end_arg,
                                           cmd->chanlist_len);
@@ -919,19 +893,8 @@ static int usbduxsigma_ao_cmdtest(struct comedi_device *dev,
 
        /* Step 4: fix up any arguments */
 
-       /* we count in timer steps */
-       if (high_speed) {
-               /* timing of the conversion itself: every 125 us */
-               devpriv->ao_timer = cmd->convert_arg / 125000;
-       } else {
-               /*
-                * timing of the scan: every 1ms
-                * we get all channels at once
-                */
-               devpriv->ao_timer = cmd->scan_begin_arg / 1000000;
-       }
-       if (devpriv->ao_timer < 1)
-               err |= -EINVAL;
+       tmp = rounddown(cmd->scan_begin_arg, 1000000);
+       err |= comedi_check_trigger_arg_is(&cmd->scan_begin_arg, tmp);
 
        if (err)
                return 4;
@@ -948,6 +911,14 @@ static int usbduxsigma_ao_cmd(struct comedi_device *dev,
 
        down(&devpriv->sem);
 
+       /*
+        * For now, only "scan" timing is supported.  A future version may
+        * support "convert" timing in high speed mode.
+        *
+        * Timing of the scan: every 1ms all channels updated at once.
+        */
+       devpriv->ao_timer = cmd->scan_begin_arg / 1000000;
+
        devpriv->ao_counter = devpriv->ao_timer;
 
        if (cmd->start_src == TRIG_NOW) {
@@ -1427,10 +1398,7 @@ static int usbduxsigma_alloc_usb_buffers(struct comedi_device *dev)
                urb->transfer_buffer_length = SIZEOUTBUF;
                urb->iso_frame_desc[0].offset = 0;
                urb->iso_frame_desc[0].length = SIZEOUTBUF;
-               if (devpriv->high_speed)
-                       urb->interval = 8;      /* uframes */
-               else
-                       urb->interval = 1;      /* frames */
+               urb->interval = 1;      /* (u)frames */
        }
 
        if (devpriv->pwm_buf_sz) {
@@ -1653,7 +1621,7 @@ static struct usb_driver usbduxsigma_usb_driver = {
 };
 module_comedi_usb_driver(usbduxsigma_driver, usbduxsigma_usb_driver);
 
-MODULE_AUTHOR("Bernd Porr, BerndPorr@f2s.com");
-MODULE_DESCRIPTION("Stirling/ITL USB-DUX SIGMA -- Bernd.Porr@f2s.com");
+MODULE_AUTHOR("Bernd Porr, mail@berndporr.me.uk");
+MODULE_DESCRIPTION("Stirling/ITL USB-DUX SIGMA -- mail@berndporr.me.uk");
 MODULE_LICENSE("GPL");
 MODULE_FIRMWARE(FIRMWARE);
index 6a393b24bdd936160fd3f6573078a26b7c10328e..ce3a58a7a1713b7d32c43fc50ce7c0045980ccbf 100644 (file)
@@ -102,7 +102,18 @@ int do_rangeinfo_ioctl(struct comedi_device *dev,
  * @s: comedi_subdevice struct
  * @n: number of elements in the chanlist
  * @chanlist: the chanlist to validate
-*/
+ *
+ * Each element consists of a channel number, a range index, an analog
+ * reference type and some flags, all packed into an unsigned int.
+ *
+ * This checks that the channel number and range index are supported by
+ * the comedi subdevice.  It does not check whether the analog reference
+ * type and the flags are supported.  Drivers that care should check those
+ * themselves.
+ *
+ * Return: %0 if all @chanlist elements are valid (success),
+ *         %-EINVAL if one or more elements are invalid.
+ */
 int comedi_check_chanlist(struct comedi_subdevice *s, int n,
                          unsigned int *chanlist)
 {
index 26b0446d943af6c7134821732d47fe3ea9ede20a..9112dd2bf4d7757503ea1b53191d213dcbc93785 100644 (file)
@@ -4953,9 +4953,8 @@ static int dgap_tty_ioctl(struct tty_struct *tty, unsigned int cmd,
                spin_unlock_irqrestore(&ch->ch_lock, lock_flags2);
                spin_unlock_irqrestore(&bd->bd_lock, lock_flags);
 
-               rc = put_user(C_CLOCAL(tty) ? 1 : 0,
+               return put_user(C_CLOCAL(tty) ? 1 : 0,
                                (unsigned long __user *) arg);
-               return rc;
 
        case TIOCSSOFTCAR:
                spin_unlock_irqrestore(&ch->ch_lock, lock_flags2);
@@ -7004,25 +7003,29 @@ static void dgap_cleanup_board(struct board_t *brd)
        kfree(brd);
 }
 
-static void dgap_remove_one(struct pci_dev *dev)
+static void dgap_stop(bool removesys, struct pci_driver *drv)
 {
-       unsigned int i;
-       ulong lock_flags;
-       struct pci_driver *drv = to_pci_driver(dev->dev.driver);
+       unsigned long lock_flags;
 
        spin_lock_irqsave(&dgap_poll_lock, lock_flags);
        dgap_poll_stop = 1;
        spin_unlock_irqrestore(&dgap_poll_lock, lock_flags);
 
-       /* Turn off poller right away. */
        del_timer_sync(&dgap_poll_timer);
-
-       dgap_remove_driver_sysfiles(drv);
+       if (removesys)
+               dgap_remove_driver_sysfiles(drv);
 
        device_destroy(dgap_class, MKDEV(DIGI_DGAP_MAJOR, 0));
        class_destroy(dgap_class);
        unregister_chrdev(DIGI_DGAP_MAJOR, "dgap");
+}
 
+static void dgap_remove_one(struct pci_dev *dev)
+{
+       unsigned int i;
+       struct pci_driver *drv = to_pci_driver(dev->dev.driver);
+
+       dgap_stop(true, drv);
        for (i = 0; i < dgap_numboards; ++i) {
                dgap_remove_ports_sysfiles(dgap_board[i]);
                dgap_cleanup_tty(dgap_board[i]);
@@ -7096,21 +7099,6 @@ failed_class:
        return rc;
 }
 
-static void dgap_stop(void)
-{
-       unsigned long lock_flags;
-
-       spin_lock_irqsave(&dgap_poll_lock, lock_flags);
-       dgap_poll_stop = 1;
-       spin_unlock_irqrestore(&dgap_poll_lock, lock_flags);
-
-       del_timer_sync(&dgap_poll_timer);
-
-       device_destroy(dgap_class, MKDEV(DIGI_DGAP_MAJOR, 0));
-       class_destroy(dgap_class);
-       unregister_chrdev(DIGI_DGAP_MAJOR, "dgap");
-}
-
 /************************************************************************
  *
  * Driver load/unload functions
@@ -7133,8 +7121,10 @@ static int dgap_init_module(void)
                return rc;
 
        rc = pci_register_driver(&dgap_driver);
-       if (rc)
-               goto err_stop;
+       if (rc) {
+               dgap_stop(false, NULL);
+               return rc;
+       }
 
        rc = dgap_create_driver_sysfiles(&dgap_driver);
        if (rc)
@@ -7146,9 +7136,6 @@ static int dgap_init_module(void)
 
 err_unregister:
        pci_unregister_driver(&dgap_driver);
-err_stop:
-       dgap_stop();
-
        return rc;
 }
 
index d04671fa4b75369de203046d0d028e803f15f28b..06ece5151fe4a170ad04972d5bf3789e7c33ee21 100644 (file)
@@ -21,9 +21,9 @@
 #ifndef __DGNC_DRIVER_H
 #define __DGNC_DRIVER_H
 
-#include <linux/types.h>       /* To pick up the varions Linux types */
-#include <linux/tty.h>   /* To pick up the various tty structs/defines */
-#include <linux/interrupt.h>   /* For irqreturn_t type */
+#include <linux/types.h>
+#include <linux/tty.h>
+#include <linux/interrupt.h>
 
 #include "digi.h"              /* Digi specific ioctl header */
 #include "dgnc_sysfs.h"                /* Support for SYSFS */
index d4018780ce588d8d6b8b67888a85934360231bb2..d473010fa4748409d32e3d088679f81310cec0ec 100644 (file)
@@ -1,6 +1,7 @@
 menuconfig FB_TFT
        tristate "Support for small TFT LCD display modules"
-       depends on FB && SPI && GPIOLIB
+       depends on FB && SPI
+       depends on GPIOLIB || COMPILE_TEST
        select FB_SYS_FILLRECT
        select FB_SYS_COPYAREA
        select FB_SYS_IMAGEBLIT
@@ -152,6 +153,12 @@ config FB_TFT_TLS8204
        help
          Generic Framebuffer support for TLS8204
 
+config FB_TFT_UC1611
+       tristate "FB driver for the UC1611 LCD controller"
+       depends on FB_TFT
+       help
+         Generic Framebuffer support for UC1611
+
 config FB_TFT_UC1701
        tristate "FB driver for the UC1701 LCD Controller"
        depends on FB_TFT
index 554b5260b0ee8450666b2fe181e334b1d7c71656..b26efdc877756636c329340df8426f90508b8835 100644 (file)
@@ -27,6 +27,7 @@ obj-$(CONFIG_FB_TFT_SSD1351)     += fb_ssd1351.o
 obj-$(CONFIG_FB_TFT_ST7735R)     += fb_st7735r.o
 obj-$(CONFIG_FB_TFT_TINYLCD)     += fb_tinylcd.o
 obj-$(CONFIG_FB_TFT_TLS8204)     += fb_tls8204.o
+obj-$(CONFIG_FB_TFT_UC1611)      += fb_uc1611.o
 obj-$(CONFIG_FB_TFT_UC1701)      += fb_uc1701.o
 obj-$(CONFIG_FB_TFT_UPD161704)   += fb_upd161704.o
 obj-$(CONFIG_FB_TFT_WATTEROTT)   += fb_watterott.o
diff --git a/drivers/staging/fbtft/fb_uc1611.c b/drivers/staging/fbtft/fb_uc1611.c
new file mode 100644 (file)
index 0000000..32f3a9d
--- /dev/null
@@ -0,0 +1,350 @@
+/*
+ * FB driver for the UltraChip UC1611 LCD controller
+ *
+ * The display is 4-bit grayscale (16 shades) 240x160.
+ *
+ * Copyright (C) 2015 Henri Chain
+ *
+ * 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/kernel.h>
+#include <linux/init.h>
+#include <linux/gpio.h>
+#include <linux/spi/spi.h>
+#include <linux/delay.h>
+
+#include "fbtft.h"
+
+#define DRVNAME                "fb_uc1611"
+#define WIDTH          240
+#define HEIGHT         160
+#define BPP            8
+#define FPS            40
+
+/*
+ * LCD voltage is a combination of ratio, gain, pot and temp
+ *
+ * V_LCD = V_BIAS * ratio
+ * V_LCD = (C_V0 + C_PM Ã— pot) * (1 + (T - 25) * temp)
+ * C_V0 and C_PM depend on ratio and gain
+ * T is ambient temperature
+ */
+
+/* BR -> actual ratio: 0-3 -> 5, 10, 11, 13 */
+static unsigned 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;
+module_param(gain, uint, 0);
+MODULE_PARM_DESC(gain, "GN[1:0] Bias voltage gain: 0-3 (default: 3)");
+
+static unsigned 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;
+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;
+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;
+module_param(pump, uint, 0);
+MODULE_PARM_DESC(pump, "PC[3:2] Pump control: 0,1,3 (default: 3)");
+
+static int init_display(struct fbtft_par *par)
+{
+       int ret;
+
+       fbtft_par_dbg(DEBUG_INIT_DISPLAY, par, "%s()\n", __func__);
+
+       /* Set CS active high */
+       par->spi->mode |= SPI_CS_HIGH;
+       ret = par->spi->master->setup(par->spi);
+       if (ret) {
+               dev_err(par->info->device, "Could not set SPI_CS_HIGH\n");
+               return ret;
+       }
+
+       /* Reset controller */
+       write_reg(par, 0xE2);
+
+       /* Set bias ratio */
+       write_reg(par, 0xE8 | (ratio & 0x03));
+
+       /* Set bias gain and potentiometer */
+       write_reg(par, 0x81);
+       write_reg(par, (gain & 0x03) << 6 | (pot & 0x3F));
+
+       /* Set temperature compensation */
+       write_reg(par, 0x24 | (temp & 0x03));
+
+       /* Set panel loading */
+       write_reg(par, 0x28 | (load & 0x03));
+
+       /* Set pump control */
+       write_reg(par, 0x2C | (pump & 0x03));
+
+       /* Set inverse display */
+       write_reg(par, 0xA6 | (0x01 & 0x01));
+
+       /* Set 4-bit grayscale mode */
+       write_reg(par, 0xD0 | (0x02 & 0x03));
+
+       /* Set Display enable */
+       write_reg(par, 0xA8 | 0x07);
+
+       return 0;
+}
+
+static void set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye)
+{
+       fbtft_par_dbg(DEBUG_SET_ADDR_WIN, par,
+                     "%s(xs=%d, ys=%d, xe=%d, ye=%d)\n",
+                     __func__, xs, ys, xe, ye);
+
+       switch (par->info->var.rotate) {
+       case 90:
+       case 270:
+               /* Set column address */
+               write_reg(par, ys & 0x0F);
+               write_reg(par, 0x10 | (ys >> 4));
+
+               /* Set page address (divide xs by 2) (not used by driver) */
+               write_reg(par, 0x60 | ((xs >> 1) & 0x0F));
+               write_reg(par, 0x70 | (xs >> 5));
+               break;
+       default:
+               /* Set column address (not used by driver) */
+               write_reg(par, xs & 0x0F);
+               write_reg(par, 0x10 | (xs >> 4));
+
+               /* Set page address (divide ys by 2) */
+               write_reg(par, 0x60 | ((ys >> 1) & 0x0F));
+               write_reg(par, 0x70 | (ys >> 5));
+               break;
+       }
+}
+
+static int blank(struct fbtft_par *par, bool on)
+{
+       fbtft_par_dbg(DEBUG_BLANK, par, "%s(blank=%s)\n",
+                     __func__, on ? "true" : "false");
+
+       if (on)
+               write_reg(par, 0xA8 | 0x00);
+       else
+               write_reg(par, 0xA8 | 0x07);
+       return 0;
+}
+
+static int set_var(struct fbtft_par *par)
+{
+       fbtft_par_dbg(DEBUG_INIT_DISPLAY, par, "%s()\n", __func__);
+
+       /* par->info->fix.visual = FB_VISUAL_PSEUDOCOLOR; */
+       par->info->var.grayscale = 1;
+       par->info->var.red.offset    = 0;
+       par->info->var.red.length    = 8;
+       par->info->var.green.offset  = 0;
+       par->info->var.green.length  = 8;
+       par->info->var.blue.offset   = 0;
+       par->info->var.blue.length   = 8;
+       par->info->var.transp.offset = 0;
+       par->info->var.transp.length = 0;
+
+       switch (par->info->var.rotate) {
+       case 90:
+               /* Set RAM address control */
+               write_reg(par, 0x88
+                       | (0x0 & 0x1) << 2 /* Increment positively */
+                       | (0x1 & 0x1) << 1 /* Increment page first */
+                       | (0x1 & 0x1));    /* Wrap around (default) */
+
+               /* Set LCD mapping */
+               write_reg(par, 0xC0
+                       | (0x0 & 0x1) << 2 /* Mirror Y OFF */
+                       | (0x0 & 0x1) << 1 /* Mirror X OFF */
+                       | (0x0 & 0x1));    /* MS nibble last (default) */
+               break;
+       case 180:
+               /* Set RAM address control */
+               write_reg(par, 0x88
+                       | (0x0 & 0x1) << 2 /* Increment positively */
+                       | (0x0 & 0x1) << 1 /* Increment column first */
+                       | (0x1 & 0x1));    /* Wrap around (default) */
+
+               /* Set LCD mapping */
+               write_reg(par, 0xC0
+                       | (0x1 & 0x1) << 2 /* Mirror Y ON */
+                       | (0x0 & 0x1) << 1 /* Mirror X OFF */
+                       | (0x0 & 0x1));    /* MS nibble last (default) */
+               break;
+       case 270:
+               /* Set RAM address control */
+               write_reg(par, 0x88
+                       | (0x0 & 0x1) << 2 /* Increment positively */
+                       | (0x1 & 0x1) << 1 /* Increment page first */
+                       | (0x1 & 0x1));    /* Wrap around (default) */
+
+               /* Set LCD mapping */
+               write_reg(par, 0xC0
+                       | (0x1 & 0x1) << 2 /* Mirror Y ON */
+                       | (0x1 & 0x1) << 1 /* Mirror X ON */
+                       | (0x0 & 0x1));    /* MS nibble last (default) */
+               break;
+       default:
+               /* Set RAM address control */
+               write_reg(par, 0x88
+                       | (0x0 & 0x1) << 2 /* Increment positively */
+                       | (0x0 & 0x1) << 1 /* Increment column first */
+                       | (0x1 & 0x1));    /* Wrap around (default) */
+
+               /* Set LCD mapping */
+               write_reg(par, 0xC0
+                       | (0x0 & 0x1) << 2 /* Mirror Y OFF */
+                       | (0x1 & 0x1) << 1 /* Mirror X ON */
+                       | (0x0 & 0x1));    /* MS nibble last (default) */
+               break;
+       }
+
+       return 0;
+}
+
+static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
+{
+       u8 *vmem8 = (u8 *)(par->info->screen_base);
+       u8 *buf8 = (u8 *)(par->txbuf.buf);
+       u16 *buf16 = (u16 *)(par->txbuf.buf);
+       int line_length = par->info->fix.line_length;
+       int y_start = (offset / line_length);
+       int y_end = (offset + len - 1) / line_length;
+       int x, y, i;
+       int ret = 0;
+
+       fbtft_par_dbg(DEBUG_WRITE_VMEM, par, "%s()\n", __func__);
+
+       switch (par->pdata->display.buswidth) {
+       case 8:
+               switch (par->info->var.rotate) {
+               case 90:
+               case 270:
+                       i = y_start * line_length;
+                       for (y = y_start; y <= y_end; y++) {
+                               for (x = 0; x < line_length; x += 2) {
+                                       *buf8 = vmem8[i] >> 4;
+                                       *buf8 |= vmem8[i + 1] & 0xF0;
+                                       buf8++;
+                                       i += 2;
+                               }
+                       }
+                       break;
+               default:
+                       /* Must be even because pages are two lines */
+                       y_start &= 0xFE;
+                       i = y_start * line_length;
+                       for (y = y_start; y <= y_end; y += 2) {
+                               for (x = 0; x < line_length; x++) {
+                                       *buf8 = vmem8[i] >> 4;
+                                       *buf8 |= vmem8[i + line_length] & 0xF0;
+                                       buf8++;
+                                       i++;
+                               }
+                               i += line_length;
+                       }
+                       break;
+               }
+               gpio_set_value(par->gpio.dc, 1);
+
+               /* Write data */
+               ret = par->fbtftops.write(par, par->txbuf.buf, len / 2);
+               break;
+       case 9:
+               switch (par->info->var.rotate) {
+               case 90:
+               case 270:
+                       i = y_start * line_length;
+                       for (y = y_start; y <= y_end; y++) {
+                               for (x = 0; x < line_length; x += 2) {
+                                       *buf16 = 0x100;
+                                       *buf16 |= vmem8[i] >> 4;
+                                       *buf16 |= vmem8[i + 1] & 0xF0;
+                                       buf16++;
+                                       i += 2;
+                               }
+                       }
+                       break;
+               default:
+                       /* Must be even because pages are two lines */
+                       y_start &= 0xFE;
+                       i = y_start * line_length;
+                       for (y = y_start; y <= y_end; y += 2) {
+                               for (x = 0; x < line_length; x++) {
+                                       *buf16 = 0x100;
+                                       *buf16 |= vmem8[i] >> 4;
+                                       *buf16 |= vmem8[i + line_length] & 0xF0;
+                                       buf16++;
+                                       i++;
+                               }
+                               i += line_length;
+                       }
+                       break;
+               }
+
+               /* Write data */
+               ret = par->fbtftops.write(par, par->txbuf.buf, len);
+               break;
+       default:
+               dev_err(par->info->device, "unsupported buswidth %d\n",
+                       par->pdata->display.buswidth);
+       }
+
+       if (ret < 0)
+               dev_err(par->info->device, "write failed and returned: %d\n",
+                       ret);
+
+       return ret;
+}
+
+static struct fbtft_display display = {
+       .txbuflen = -1,
+       .regwidth = 8,
+       .width = WIDTH,
+       .height = HEIGHT,
+       .bpp = BPP,
+       .fps = FPS,
+       .fbtftops = {
+               .write_vmem = write_vmem,
+               .init_display = init_display,
+               .set_addr_win = set_addr_win,
+               .set_var = set_var,
+               .blank = blank,
+       },
+};
+
+FBTFT_REGISTER_DRIVER(DRVNAME, "ultrachip,uc1611", &display);
+
+MODULE_ALIAS("spi:" DRVNAME);
+MODULE_ALIAS("platform:" DRVNAME);
+MODULE_ALIAS("spi:uc1611");
+MODULE_ALIAS("platform:uc1611");
+
+MODULE_DESCRIPTION("FB driver for the UC1611 LCD controller");
+MODULE_AUTHOR("Henri Chain");
+MODULE_LICENSE("GPL");
index 9cc81412be69b724100c749a25f292cb0a08a9c2..23392eb6799ec0e946f238b42b9d02c0673e92d8 100644 (file)
@@ -677,13 +677,13 @@ static void fbtft_merge_fbtftops(struct fbtft_ops *dst, struct fbtft_ops *src)
  *
  */
 struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
-                                       struct device *dev)
+                                       struct device *dev,
+                                       struct fbtft_platform_data *pdata)
 {
        struct fb_info *info;
        struct fbtft_par *par;
        struct fb_ops *fbops = NULL;
        struct fb_deferred_io *fbdefio = NULL;
-       struct fbtft_platform_data *pdata = dev->platform_data;
        u8 *vmem = NULL;
        void *txbuf = NULL;
        void *buf = NULL;
@@ -828,7 +828,7 @@ struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
 
        par = info->par;
        par->info = info;
-       par->pdata = dev->platform_data;
+       par->pdata = pdata;
        par->debug = display->debug;
        par->buf = buf;
        spin_lock_init(&par->dirty_lock);
@@ -1076,6 +1076,11 @@ static int fbtft_init_display_dt(struct fbtft_par *par)
        p = of_prop_next_u32(prop, NULL, &val);
        if (!p)
                return -EINVAL;
+
+       par->fbtftops.reset(par);
+       if (par->gpio.cs != -1)
+               gpio_set_value(par->gpio.cs, 0);  /* Activate chip */
+
        while (p) {
                if (val & FBTFT_OF_INIT_CMD) {
                        val &= 0xFFFF;
@@ -1260,12 +1265,11 @@ EXPORT_SYMBOL(fbtft_init_display);
  */
 static int fbtft_verify_gpios(struct fbtft_par *par)
 {
-       struct fbtft_platform_data *pdata;
+       struct fbtft_platform_data *pdata = par->pdata;
        int i;
 
        fbtft_par_dbg(DEBUG_VERIFY_GPIOS, par, "%s()\n", __func__);
 
-       pdata = par->info->device->platform_data;
        if (pdata->display.buswidth != 9 && par->startbyte == 0 &&
                                                        par->gpio.dc < 0) {
                dev_err(par->info->device,
@@ -1383,10 +1387,9 @@ int fbtft_probe_common(struct fbtft_display *display,
                pdata = fbtft_probe_dt(dev);
                if (IS_ERR(pdata))
                        return PTR_ERR(pdata);
-               dev->platform_data = pdata;
        }
 
-       info = fbtft_framebuffer_alloc(display, dev);
+       info = fbtft_framebuffer_alloc(display, dev, pdata);
        if (!info)
                return -ENOMEM;
 
index 7d817eb26eabeecf6ec5fc49fc76f39b69022d20..ab4a65818786b664dee1837b72e542a8cf1898b6 100644 (file)
@@ -264,8 +264,9 @@ struct fbtft_par {
 /* fbtft-core.c */
 extern void fbtft_dbg_hex(const struct device *dev,
        int groupsize, void *buf, size_t len, const char *fmt, ...);
-extern struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
-       struct device *dev);
+struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
+                                       struct device *dev,
+                                       struct fbtft_platform_data *pdata);
 extern void fbtft_framebuffer_release(struct fb_info *info);
 extern int fbtft_register_framebuffer(struct fb_info *fb_info);
 extern int fbtft_unregister_framebuffer(struct fb_info *fb_info);
index 211d504901f25f54a2faf62d4ef9380f07c38c00..fa916e88d54937e9e5272a6a0b40f875d1d2c4f9 100644 (file)
@@ -396,6 +396,37 @@ static struct fbtft_device_display displays[] = {
                                },
                        }
                }
+       }, {
+               .name = "ew24ha0",
+               .spi = &(struct spi_board_info) {
+                       .modalias = "fb_uc1611",
+                       .max_speed_hz = 32000000,
+                       .mode = SPI_MODE_3,
+                       .platform_data = &(struct fbtft_platform_data) {
+                               .display = {
+                                       .buswidth = 8,
+                               },
+                               .gpios = (const struct fbtft_gpio []) {
+                                       { "dc", 24 },
+                                       {},
+                               },
+                       }
+               }
+       }, {
+               .name = "ew24ha0_9bit",
+               .spi = &(struct spi_board_info) {
+                       .modalias = "fb_uc1611",
+                       .max_speed_hz = 32000000,
+                       .mode = SPI_MODE_3,
+                       .platform_data = &(struct fbtft_platform_data) {
+                               .display = {
+                                       .buswidth = 9,
+                               },
+                               .gpios = (const struct fbtft_gpio []) {
+                                       {},
+                               },
+                       }
+               }
        }, {
                .name = "flexfb",
                .spi = &(struct spi_board_info) {
index 2c4ce07f51064fdf10f6441b86307fd44c562424..c763efc5de7dc468708945845b22154860b00869 100644 (file)
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include <linux/module.h>
@@ -30,7 +26,6 @@
 
 #define DRVNAME            "flexfb"
 
-
 static char *chip;
 module_param(chip, charp, 0);
 MODULE_PARM_DESC(chip, "LCD controller");
@@ -68,7 +63,6 @@ static bool latched;
 module_param(latched, bool, 0);
 MODULE_PARM_DESC(latched, "Use with latched 16-bit databus");
 
-
 static int *initp;
 static int initp_num;
 
@@ -132,14 +126,115 @@ static int ssd1351_init[] = { -1, 0xfd, 0x12, -1, 0xfd, 0xb1, -1, 0xae, -1, 0xb3
                              -1, 0xab, 0x01, -1, 0xb1, 0x32, -1, 0xb4, 0xa0, 0xb5, 0x55, -1, 0xbb, 0x17, -1, 0xbe, 0x05,
                              -1, 0xc1, 0xc8, 0x80, 0xc8, -1, 0xc7, 0x0f, -1, 0xb6, 0x01, -1, 0xa6, -1, 0xaf, -3 };
 
+/**
+ * struct flexfb_lcd_controller - Describes the LCD controller properties
+ * @name: Model name of the chip
+ * @width: Width of display in pixels
+ * @height: Height of display in pixels
+ * @setaddrwin: Which set_addr_win() implementation to use
+ * @regwidth: LCD Controller Register width in bits
+ * @init_seq: LCD initialization sequence
+ * @init_seq_sz: Size of LCD initialization sequence
+ */
+struct flexfb_lcd_controller {
+       const char *name;
+       unsigned int width;
+       unsigned int height;
+       unsigned int setaddrwin;
+       unsigned int regwidth;
+       int *init_seq;
+       int init_seq_sz;
+};
+
+static const struct flexfb_lcd_controller flexfb_chip_table[] = {
+       {
+               .name = "st7735r",
+               .width = 120,
+               .height = 160,
+               .init_seq = st7735r_init,
+               .init_seq_sz = ARRAY_SIZE(st7735r_init),
+       },
+       {
+               .name = "hx8340bn",
+               .width = 176,
+               .height = 220,
+               .init_seq = hx8340bn_init,
+               .init_seq_sz = ARRAY_SIZE(hx8340bn_init),
+       },
+       {
+               .name = "ili9225",
+               .width = 176,
+               .height = 220,
+               .regwidth = 16,
+               .init_seq = ili9225_init,
+               .init_seq_sz = ARRAY_SIZE(ili9225_init),
+       },
+       {
+               .name = "ili9225",
+               .width = 176,
+               .height = 220,
+               .regwidth = 16,
+               .init_seq = ili9225_init,
+               .init_seq_sz = ARRAY_SIZE(ili9225_init),
+       },
+       {
+               .name = "ili9225",
+               .width = 176,
+               .height = 220,
+               .regwidth = 16,
+               .init_seq = ili9225_init,
+               .init_seq_sz = ARRAY_SIZE(ili9225_init),
+       },
+       {
+               .name = "ili9320",
+               .width = 240,
+               .height = 320,
+               .setaddrwin = 1,
+               .regwidth = 16,
+               .init_seq = ili9320_init,
+               .init_seq_sz = ARRAY_SIZE(ili9320_init),
+       },
+       {
+               .name = "ili9325",
+               .width = 240,
+               .height = 320,
+               .setaddrwin = 1,
+               .regwidth = 16,
+               .init_seq = ili9325_init,
+               .init_seq_sz = ARRAY_SIZE(ili9325_init),
+       },
+       {
+               .name = "ili9341",
+               .width = 240,
+               .height = 320,
+               .init_seq = ili9341_init,
+               .init_seq_sz = ARRAY_SIZE(ili9341_init),
+       },
+       {
+               .name = "ssd1289",
+               .width = 240,
+               .height = 320,
+               .setaddrwin = 2,
+               .regwidth = 16,
+               .init_seq = ssd1289_init,
+               .init_seq_sz = ARRAY_SIZE(ssd1289_init),
+       },
+       {
+               .name = "ssd1351",
+               .width = 128,
+               .height = 128,
+               .setaddrwin = 3,
+               .init_seq = ssd1351_init,
+               .init_seq_sz = ARRAY_SIZE(ssd1351_init),
+       },
+};
 
 /* ili9320, ili9325 */
 static void flexfb_set_addr_win_1(struct fbtft_par *par,
                                  int xs, int ys, int xe, int ye)
 {
-       fbtft_par_dbg(DEBUG_SET_ADDR_WIN, par,
-                    "%s(xs=%d, ys=%d, xe=%d, ye=%d)\n",
-                    __func__, xs, ys, xe, ye);
+       fbtft_par_dbg(DEBUG_SET_ADDR_WIN, par, "%s(xs=%d, ys=%d, xe=%d, ye=%d)\n",
+                     __func__, xs, ys, xe, ye);
        switch (par->info->var.rotate) {
        /* R20h = Horizontal GRAM Start Address */
        /* R21h = Vertical GRAM Start Address */
@@ -242,7 +337,7 @@ static int flexfb_verify_gpios_db(struct fbtft_par *par)
                return -EINVAL;
        }
        if (latched)
-               num_db = buswidth/2;
+               num_db = buswidth / 2;
        for (i = 0; i < num_db; i++) {
                if (par->gpio.db[i] < 0) {
                        dev_err(par->info->device,
@@ -255,8 +350,38 @@ static int flexfb_verify_gpios_db(struct fbtft_par *par)
        return 0;
 }
 
+static void flexfb_chip_load_param(const struct flexfb_lcd_controller *chip)
+{
+       if (!width)
+               width = chip->width;
+       if (!height)
+               height = chip->height;
+       setaddrwin = chip->setaddrwin;
+       if (chip->regwidth)
+               regwidth = chip->regwidth;
+       if (!init_num) {
+               initp = chip->init_seq;
+               initp_num = chip->init_seq_sz;
+       }
+}
+
 static struct fbtft_display flex_display = { };
 
+static int flexfb_chip_init(const struct device *dev)
+{
+       int i;
+
+       for (i = 0; i < ARRAY_SIZE(flexfb_chip_table); i++)
+               if (!strcmp(chip, flexfb_chip_table[i].name)) {
+                       flexfb_chip_load_param(&flexfb_chip_table[i]);
+                       return 0;
+               }
+
+       dev_err(dev, "chip=%s is not supported\n", chip);
+
+       return -EINVAL;
+}
+
 static int flexfb_probe_common(struct spi_device *sdev,
                               struct platform_device *pdev)
 {
@@ -277,110 +402,9 @@ static int flexfb_probe_common(struct spi_device *sdev,
                       sdev ? "'SPI device'" : "'Platform device'");
 
        if (chip) {
-
-               if (!strcmp(chip, "st7735r")) {
-                       if (!width)
-                               width = 128;
-                       if (!height)
-                               height = 160;
-                       if (init_num == 0) {
-                               initp = st7735r_init;
-                               initp_num = ARRAY_SIZE(st7735r_init);
-                       }
-
-
-               } else if (!strcmp(chip, "hx8340bn")) {
-                       if (!width)
-                               width = 176;
-                       if (!height)
-                               height = 220;
-                       setaddrwin = 0;
-                       if (init_num == 0) {
-                               initp = hx8340bn_init;
-                               initp_num = ARRAY_SIZE(hx8340bn_init);
-                       }
-
-
-               } else if (!strcmp(chip, "ili9225")) {
-                       if (!width)
-                               width = 176;
-                       if (!height)
-                               height = 220;
-                       setaddrwin = 0;
-                       regwidth = 16;
-                       if (init_num == 0) {
-                               initp = ili9225_init;
-                               initp_num = ARRAY_SIZE(ili9225_init);
-                       }
-
-
-
-               } else if (!strcmp(chip, "ili9320")) {
-                       if (!width)
-                               width = 240;
-                       if (!height)
-                               height = 320;
-                       setaddrwin = 1;
-                       regwidth = 16;
-                       if (init_num == 0) {
-                               initp = ili9320_init;
-                               initp_num = ARRAY_SIZE(ili9320_init);
-                       }
-
-
-               } else if (!strcmp(chip, "ili9325")) {
-                       if (!width)
-                               width = 240;
-                       if (!height)
-                               height = 320;
-                       setaddrwin = 1;
-                       regwidth = 16;
-                       if (init_num == 0) {
-                               initp = ili9325_init;
-                               initp_num = ARRAY_SIZE(ili9325_init);
-                       }
-
-               } else if (!strcmp(chip, "ili9341")) {
-                       if (!width)
-                               width = 240;
-                       if (!height)
-                               height = 320;
-                       setaddrwin = 0;
-                       regwidth = 8;
-                       if (init_num == 0) {
-                               initp = ili9341_init;
-                               initp_num = ARRAY_SIZE(ili9341_init);
-                       }
-
-
-               } else if (!strcmp(chip, "ssd1289")) {
-                       if (!width)
-                               width = 240;
-                       if (!height)
-                               height = 320;
-                       setaddrwin = 2;
-                       regwidth = 16;
-                       if (init_num == 0) {
-                               initp = ssd1289_init;
-                               initp_num = ARRAY_SIZE(ssd1289_init);
-                       }
-
-
-
-               } else if (!strcmp(chip, "ssd1351")) {
-                       if (!width)
-                               width = 128;
-                       if (!height)
-                               height = 128;
-                       setaddrwin = 3;
-                       if (init_num == 0) {
-                               initp = ssd1351_init;
-                               initp_num = ARRAY_SIZE(ssd1351_init);
-                       }
-               } else {
-                       dev_err(dev, "chip=%s is not supported\n", chip);
-                       return -EINVAL;
-               }
+               ret = flexfb_chip_init(dev);
+               if (ret)
+                       return ret;
        }
 
        if (width == 0 || height == 0) {
@@ -395,7 +419,7 @@ static int flexfb_probe_common(struct spi_device *sdev,
        fbtft_init_dbg(dev, "regwidth = %d\n", regwidth);
        fbtft_init_dbg(dev, "buswidth = %d\n", buswidth);
 
-       info = fbtft_framebuffer_alloc(&flex_display, dev);
+       info = fbtft_framebuffer_alloc(&flex_display, dev, dev->platform_data);
        if (!info)
                return -ENOMEM;
 
@@ -527,8 +551,8 @@ static int flexfb_remove_common(struct device *dev, struct fb_info *info)
                return -EINVAL;
        par = info->par;
        if (par)
-               fbtft_par_dbg(DEBUG_DRIVER_INIT_FUNCTIONS, par,
-                       "%s()\n", __func__);
+               fbtft_par_dbg(DEBUG_DRIVER_INIT_FUNCTIONS, par, "%s()\n",
+                             __func__);
        fbtft_unregister_framebuffer(info);
        fbtft_framebuffer_release(info);
 
diff --git a/drivers/staging/fsl-mc/README.txt b/drivers/staging/fsl-mc/README.txt
new file mode 100644 (file)
index 0000000..8214102
--- /dev/null
@@ -0,0 +1,364 @@
+Copyright (C) 2015 Freescale Semiconductor Inc.
+
+DPAA2 (Data Path Acceleration Architecture Gen2)
+------------------------------------------------
+
+This document provides an overview of the Freescale DPAA2 architecture
+and how it is integrated into the Linux kernel.
+
+Contents summary
+   -DPAA2 overview
+   -Overview of DPAA2 objects
+   -DPAA2 Linux driver architecture overview
+        -bus driver
+        -dprc driver
+        -allocator
+        -dpio driver
+        -Ethernet
+        -mac
+
+DPAA2 Overview
+--------------
+
+DPAA2 is a hardware architecture designed for high-speeed network
+packet processing.  DPAA2 consists of sophisticated mechanisms for
+processing Ethernet packets, queue management, buffer management,
+autonomous L2 switching, virtual Ethernet bridging, and accelerator
+(e.g. crypto) sharing.
+
+A DPAA2 hardware component called the Management Complex (or MC) manages the
+DPAA2 hardware resources.  The MC provides an object-based abstraction for
+software drivers to use the DPAA2 hardware.
+
+The MC uses DPAA2 hardware resources such as queues, buffer pools, and
+network ports to create functional objects/devices such as network
+interfaces, an L2 switch, or accelerator instances.
+
+The MC provides memory-mapped I/O command interfaces (MC portals)
+which DPAA2 software drivers use to operate on DPAA2 objects:
+
+         +--------------------------------------+
+         |                  OS                  |
+         |                        DPAA2 drivers |
+         |                             |        |
+         +-----------------------------|--------+
+                                       |
+                                       | (create,discover,connect
+                                       |  config,use,destroy)
+                                       |
+                         DPAA2         |
+         +------------------------| mc portal |-+
+         |                             |        |
+         |   +- - - - - - - - - - - - -V- - -+  |
+         |   |                               |  |
+         |   |   Management Complex (MC)     |  |
+         |   |                               |  |
+         |   +- - - - - - - - - - - - - - - -+  |
+         |                                      |
+         | Hardware                  Hardware   |
+         | Resources                 Objects    |
+         | ---------                 -------    |
+         | -queues                   -DPRC      |
+         | -buffer pools             -DPMCP     |
+         | -Eth MACs/ports           -DPIO      |
+         | -network interface        -DPNI      |
+         |  profiles                 -DPMAC     |
+         | -queue portals            -DPBP      |
+         | -MC portals                ...       |
+         |  ...                                 |
+         |                                      |
+         +--------------------------------------+
+
+The MC mediates operations such as create, discover,
+connect, configuration, and destroy.  Fast-path operations
+on data, such as packet transmit/receive, are not mediated by
+the MC and are done directly using memory mapped regions in
+DPIO objects.
+
+Overview of DPAA2 Objects
+-------------------------
+The section provides a brief overview of some key objects
+in the DPAA2 hardware.  A simple scenario is described illustrating
+the objects involved in creating a network interfaces.
+
+-DPRC (Datapath Resource Container)
+
+    A DPRC is an container object that holds all the other
+    types of DPAA2 objects.  In the example diagram below there
+    are 8 objects of 5 types (DPMCP, DPIO, DPBP, DPNI, and DPMAC)
+    in the container.
+
+    +---------------------------------------------------------+
+    | DPRC                                                    |
+    |                                                         |
+    |  +-------+  +-------+  +-------+  +-------+  +-------+  |
+    |  | DPMCP |  | DPIO  |  | DPBP  |  | DPNI  |  | DPMAC |  |
+    |  +-------+  +-------+  +-------+  +---+---+  +---+---+  |
+    |  | DPMCP |  | DPIO  |                                   |
+    |  +-------+  +-------+                                   |
+    |  | DPMCP |                                              |
+    |  +-------+                                              |
+    |                                                         |
+    +---------------------------------------------------------+
+
+    From the point of view of an OS, a DPRC is bus-like.  Like
+    a plug-and-play bus, such as PCI, DPRC commands can be used to
+    enumerate the contents of the DPRC, discover the hardware
+    objects present (including mappable regions and interrupts).
+
+     dprc.1 (bus)
+       |
+       +--+--------+-------+-------+-------+
+          |        |       |       |       |
+        dpmcp.1  dpio.1  dpbp.1  dpni.1  dpmac.1
+        dpmcp.2  dpio.2
+        dpmcp.3
+
+    Hardware objects can be created and destroyed dynamically, providing
+    the ability to hot plug/unplug objects in and out of the DPRC.
+
+    A DPRC has a mappable mmio region (an MC portal) that can be used
+    to send MC commands.  It has an interrupt for status events (like
+    hotplug).
+
+    All objects in a container share the same hardware "isolation context".
+    This means that with respect to an IOMMU the isolation granularity
+    is at the DPRC (container) level, not at the individual object
+    level.
+
+    DPRCs can be defined statically and populated with objects
+    via a config file passed to the MC when firmware starts
+    it.  There is also a Linux user space tool called "restool"
+    that can be used to create/destroy containers and objects
+    dynamically.
+
+-DPAA2 Objects for an Ethernet Network Interface
+
+    A typical Ethernet NIC is monolithic-- the NIC device contains TX/RX
+    queuing mechanisms, configuration mechanisms, buffer management,
+    physical ports, and interrupts.  DPAA2 uses a more granular approach
+    utilizing multiple hardware objects.  Each object has specialized
+    functions, and are used together by software to provide Ethernet network
+    interface functionality.  This approach provides efficient use of finite
+    hardware resources, flexibility, and performance advantages.
+
+    The diagram below shows the objects needed for a simple
+    network interface configuration on a system with 2 CPUs.
+
+              +---+---+ +---+---+
+                 CPU0     CPU1
+              +---+---+ +---+---+
+                  |         |
+              +---+---+ +---+---+
+                 DPIO     DPIO
+              +---+---+ +---+---+
+                    \     /
+                     \   /
+                      \ /
+                   +---+---+
+                      DPNI  --- DPBP,DPMCP
+                   +---+---+
+                       |
+                       |
+                   +---+---+
+                     DPMAC
+                   +---+---+
+                       |
+                    port/PHY
+
+    Below the objects are described.  For each object a brief description
+    is provided along with a summary of the kinds of operations the object
+    supports and a summary of key resources of the object (mmio regions
+    and irqs).
+
+       -DPMAC (Datapath Ethernet MAC): represents an Ethernet MAC, a
+        hardware device that connects to an Ethernet PHY and allows
+        physical transmission and reception of Ethernet frames.
+           -mmio regions: none
+           -irqs: dpni link change
+           -commands: set link up/down, link config, get stats,
+             irq config, enable, reset
+
+       -DPNI (Datapath Network Interface): contains TX/RX queues,
+        network interface configuration, and rx buffer pool configuration
+        mechanisms.
+           -mmio regions: none
+           -irqs: link state
+           -commands: port config, offload config, queue config,
+            parse/classify config, irq config, enable, reset
+
+       -DPIO (Datapath I/O): provides interfaces to enqueue and dequeue
+        packets and do hardware buffer pool management operations.  For
+        optimum performance there is typically DPIO per CPU.  This allows
+        each CPU to perform simultaneous enqueue/dequeue operations.
+           -mmio regions: queue operations, buffer mgmt
+           -irqs: data availability, congestion notification, buffer
+                  pool depletion
+           -commands: irq config, enable, reset
+
+       -DPBP (Datapath Buffer Pool): represents a hardware buffer
+        pool.
+           -mmio regions: none
+           -irqs: none
+           -commands: enable, reset
+
+       -DPMCP (Datapath MC Portal): provides an MC command portal.
+        Used by drivers to send commands to the MC to manage
+        objects.
+           -mmio regions: MC command portal
+           -irqs: command completion
+           -commands: irq config, enable, reset
+
+    Object Connections
+    ------------------
+    Some objects have explicit relationships that must
+    be configured:
+
+       -DPNI <--> DPMAC
+       -DPNI <--> DPNI
+       -DPNI <--> L2-switch-port
+          A DPNI must be connected to something such as a DPMAC,
+          another DPNI, or L2 switch port.  The DPNI connection
+          is made via a DPRC command.
+
+              +-------+  +-------+
+              | DPNI  |  | DPMAC |
+              +---+---+  +---+---+
+                  |          |
+                  +==========+
+
+       -DPNI <--> DPBP
+          A network interface requires a 'buffer pool' (DPBP
+          object) which provides a list of pointers to memory
+          where received Ethernet data is to be copied.  The
+          Ethernet driver configures the DPBPs associated with
+          the network interface.
+
+    Interrupts
+    ----------
+    All interrupts generated by DPAA2 objects are message
+    interrupts.  At the hardware level message interrupts
+    generated by devices will normally have 3 components--
+    1) a non-spoofable 'device-id' expressed on the hardware
+    bus, 2) an address, 3) a data value.
+
+    In the case of DPAA2 devices/objects, all objects in the
+    same container/DPRC share the same 'device-id'.
+    For ARM-based SoC this is the same as the stream ID.
+
+
+DPAA2 Linux Driver Overview
+---------------------------
+
+This section provides an overview of the Linux kernel drivers for
+DPAA2-- 1) the bus driver and associated "DPAA2 infrastructure"
+drivers and 2) functional object drivers (such as Ethernet).
+
+As described previously, a DPRC is a container that holds the other
+types of DPAA2 objects.  It is functionally similar to a plug-and-play
+bus controller.
+
+Each object in the DPRC is a Linux "device" and is bound to a driver.
+The diagram below shows the Linux drivers involved in a networking
+scenario and the objects bound to each driver.  A brief description
+of each driver follows.
+
+                                             +------------+
+                                             | OS Network |
+                                             |   Stack    |
+                 +------------+              +------------+
+                 | Allocator  |. . . . . . . |  Ethernet  |
+                 |(dpmcp,dpbp)|              |   (dpni)   |
+                 +-.----------+              +---+---+----+
+                  .          .                   ^   |
+                 .            .     <data avail, |   |<enqueue,
+                .              .     tx confirm> |   | dequeue>
+    +-------------+             .                |   |
+    | DPRC driver |              .           +---+---V----+     +---------+
+    |   (dprc)    |               . . . . . .| DPIO driver|     |   MAC   |
+    +----------+--+                          |  (dpio)    |     | (dpmac) |
+               |                             +------+-----+     +-----+---+
+               |<dev add/remove>                    |                 |
+               |                                    |                 |
+          +----+--------------+                     |              +--+---+
+          |   mc-bus driver   |                     |              | PHY  |
+          |                   |                     |              |driver|
+          | /fsl-mc@80c000000 |                     |              +--+---+
+          +-------------------+                     |                 |
+                                                    |                 |
+ ================================ HARDWARE =========|=================|======
+                                                  DPIO                |
+                                                    |                 |
+                                                  DPNI---DPBP         |
+                                                    |                 |
+                                                  DPMAC               |
+                                                    |                 |
+                                                   PHY ---------------+
+ ===================================================|========================
+
+A brief description of each driver is provided below.
+
+    mc-bus driver
+    -------------
+    The mc-bus driver is a platform driver and is probed from an
+    "/fsl-mc@xxxx" node in the device tree passed in by boot firmware.
+    It is responsible for bootstrapping the DPAA2 kernel infrastructure.
+    Key functions include:
+       -registering a new bus type named "fsl-mc" with the kernel,
+        and implementing bus call-backs (e.g. match/uevent/dev_groups)
+       -implemeting APIs for DPAA2 driver registration and for device
+        add/remove
+       -creates an MSI irq domain
+       -do a device add of the 'root' DPRC device, which is needed
+        to bootstrap things
+
+    DPRC driver
+    -----------
+    The dprc-driver is bound DPRC objects and does runtime management
+    of a bus instance.  It performs the initial bus scan of the DPRC
+    and handles interrupts for container events such as hot plug.
+
+    Allocator
+    ----------
+    Certain objects such as DPMCP and DPBP are generic and fungible,
+    and are intended to be used by other drivers.  For example,
+    the DPAA2 Ethernet driver needs:
+       -DPMCPs to send MC commands, to configure network interfaces
+       -DPBPs for network buffer pools
+
+    The allocator driver registers for these allocatable object types
+    and those objects are bound to the allocator when the bus is probed.
+    The allocator maintains a pool of objects that are available for
+    allocation by other DPAA2 drivers.
+
+    DPIO driver
+    -----------
+    The DPIO driver is bound to DPIO objects and provides services that allow
+    other drivers such as the Ethernet driver to receive and transmit data.
+    Key services include:
+        -data availability notifications
+        -hardware queuing operations (enqueue and dequeue of data)
+        -hardware buffer pool management
+
+    There is typically one DPIO object per physical CPU for optimum
+    performance, allowing each CPU to simultaneously enqueue
+    and dequeue data.
+
+    The DPIO driver operates on behalf of all DPAA2 drivers
+    active in the kernel--  Ethernet, crypto, compression,
+    etc.
+
+    Ethernet
+    --------
+    The Ethernet driver is bound to a DPNI and implements the kernel
+    interfaces needed to connect the DPAA2 network interface to
+    the network stack.
+
+    Each DPNI corresponds to a Linux network interface.
+
+    MAC driver
+    ----------
+    An Ethernet PHY is an off-chip, board specific component and is managed
+    by the appropriate PHY driver via an mdio bus.  The MAC driver
+    plays a role of being a proxy between the PHY driver and the
+    MC.  It does this proxy via the MC commands to a DPMAC object.
index d78288b4e72174547a93736bde1821341ed9a7ca..389436891b93b40367c4e3727d9729370e0c5511 100644 (file)
@@ -1,13 +1,31 @@
-* Add README file (with ASCII art) describing relationships between
-  DPAA2 objects and how combine them to make a NIC, an LS2 switch, etc.
-  Also, define all acronyms used.
-
 * Decide if multiple root fsl-mc buses will be supported per Linux instance,
   and if so add support for this.
 
 * Add at least one device driver for a DPAA2 object (child device of the
-  fsl-mc bus).
+  fsl-mc bus).  Most likely candidate for this is adding DPAA2 Ethernet
+  driver support, which depends on drivers for several objects: DPNI,
+  DPIO, DPMAC.  Other pre-requisites include:
+
+     * interrupt support. for meaningful driver support we need
+       interrupts, and thus need message interrupt support by the bus
+       driver.
+          -Note: this has dependencies on generic MSI support work
+           in process upstream, see [1] and [2].
+
+     * Management Complex (MC) command serialization. locking mechanisms
+       are needed by drivers to serialize commands sent to the MC, including
+       from atomic context.
+
+     * MC firmware uprev.  The MC firmware upon which the fsl-mc
+       bus driver and DPAA2 object drivers are based is continuing
+       to evolve, so minor updates are needed to keep in sync with binary
+       interface changes to the MC.
+
+* Cleanup
 
 Please send any patches to Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
 german.rivera@freescale.com, devel@driverdev.osuosl.org,
 linux-kernel@vger.kernel.org
+
+[1] https://lkml.org/lkml/2015/7/9/93
+[2] https://lkml.org/lkml/2015/7/7/712
index 409266b1a886f7cb6e8136d10f050743f3d168a6..f241a3a5a684b8b4d639bf58815f5724b8147285 100644 (file)
@@ -260,7 +260,8 @@ void ft1000_destroy_dev(struct net_device *netdev)
                /* Make sure we free any memory reserve for slow Queue */
                for (i = 0; i < MAX_NUM_APP; i++) {
                        while (list_empty(&dev->app_info[i].app_sqlist) == 0) {
-                               pdpram_blk = list_entry(dev->app_info[i].app_sqlist.next, struct dpram_blk, list);
+                               pdpram_blk = list_entry(dev->app_info[i].app_sqlist.next,
+                                                       struct dpram_blk, list);
                                list_del(&pdpram_blk->list);
                                ft1000_free_buffer(pdpram_blk, &freercvpool);
 
@@ -415,12 +416,19 @@ static long ft1000_ioctl(struct file *file, unsigned int command,
        struct timeval tv;
        struct IOCTL_GET_VER get_ver_data;
        struct IOCTL_GET_DSP_STAT get_stat_data;
-       u8 ConnectionMsg[] = {0x00, 0x44, 0x10, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x93, 0x64,
-                             0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0a,
-                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                             0x00, 0x00, 0x02, 0x37, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x7f, 0x00,
-                             0x00, 0x01, 0x00, 0x00};
+       u8 ConnectionMsg[] = {
+               0x00, 0x44, 0x10, 0x20, 0x80, 0x00, 0x00, 0x00,
+               0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x93, 0x64,
+               0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+               0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0a,
+               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+               0x00, 0x00, 0x02, 0x37, 0x00, 0x00, 0x00, 0x08,
+               0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x7f, 0x00,
+               0x00, 0x01, 0x00, 0x00
+       };
 
        unsigned short ledStat = 0;
        unsigned short conStat = 0;
@@ -495,10 +503,12 @@ static long ft1000_ioctl(struct file *file, unsigned int command,
                memcpy(get_stat_data.eui64, info->eui64, EUISZ);
 
                if (info->ProgConStat != 0xFF) {
-                       ft1000_read_dpram16(ft1000dev, FT1000_MAG_DSP_LED, (u8 *)&ledStat, FT1000_MAG_DSP_LED_INDX);
+                       ft1000_read_dpram16(ft1000dev, FT1000_MAG_DSP_LED,
+                                           (u8 *)&ledStat, FT1000_MAG_DSP_LED_INDX);
                        get_stat_data.LedStat = ntohs(ledStat);
                        pr_debug("LedStat = 0x%x\n", get_stat_data.LedStat);
-                       ft1000_read_dpram16(ft1000dev, FT1000_MAG_DSP_CON_STATE, (u8 *)&conStat, FT1000_MAG_DSP_CON_STATE_INDX);
+                       ft1000_read_dpram16(ft1000dev, FT1000_MAG_DSP_CON_STATE,
+                                           (u8 *)&conStat, FT1000_MAG_DSP_CON_STATE_INDX);
                        get_stat_data.ConStat = ntohs(conStat);
                        pr_debug("ConStat = 0x%x\n", get_stat_data.ConStat);
                } else {
@@ -689,7 +699,8 @@ static long ft1000_ioctl(struct file *file, unsigned int command,
                if (list_empty(&ft1000dev->app_info[i].app_sqlist) == 0) {
                        /* pr_debug("Message detected in slow queue\n"); */
                        spin_lock_irqsave(&free_buff_lock, flags);
-                       pdpram_blk = list_entry(ft1000dev->app_info[i].app_sqlist.next, struct dpram_blk, list);
+                       pdpram_blk = list_entry(ft1000dev->app_info[i].app_sqlist.next,
+                                               struct dpram_blk, list);
                        list_del(&pdpram_blk->list);
                        ft1000dev->app_info[i].NumOfMsg--;
                        /* pr_debug("NumOfMsg for app %d = %d\n", i, ft1000dev->app_info[i].NumOfMsg); */
index 5def347beb082df3bd442e9f8c9a47713c47feaf..297b7aece5062a17531043a477eda4ee2cc61130 100644 (file)
@@ -95,7 +95,6 @@ struct dsp_file_hdr {
        long              nDspImages;          /* Number of DSP images in file. */
 };
 
-#pragma pack(1)
 struct dsp_image_info {
        long              coff_date;           /* Date/time when DSP Coff image was built. */
        long              begin_offset;        /* Offset in file where image begins. */
@@ -105,7 +104,7 @@ struct dsp_image_info {
        long              version;             /* Embedded version # of DSP code. */
        unsigned short    checksum;            /* DSP File checksum */
        unsigned short    pad1;
-};
+} __packed;
 
 
 /* checks if the doorbell register is cleared */
@@ -180,7 +179,8 @@ static u16 get_handshake(struct ft1000_usb *ft1000dev, u16 expected_value)
                }
 
                status = ft1000_read_dpram16(ft1000dev,
-                                            DWNLD_MAG1_HANDSHAKE_LOC, (u8 *)&handshake, 1);
+                                            DWNLD_MAG1_HANDSHAKE_LOC,
+                                            (u8 *)&handshake, 1);
                handshake = ntohs(handshake);
 
                if (status)
@@ -281,12 +281,14 @@ static u16 get_request_type(struct ft1000_usb *ft1000dev)
 
        if (ft1000dev->bootmode == 1) {
                status = fix_ft1000_read_dpram32(ft1000dev,
-                                                DWNLD_MAG1_TYPE_LOC, (u8 *)&tempx);
+                                                DWNLD_MAG1_TYPE_LOC,
+                                                (u8 *)&tempx);
                tempx = ntohl(tempx);
        } else {
                tempx = 0;
                status = ft1000_read_dpram16(ft1000dev,
-                                            DWNLD_MAG1_TYPE_LOC, (u8 *)&tempword, 1);
+                                            DWNLD_MAG1_TYPE_LOC,
+                                            (u8 *)&tempword, 1);
                tempx |= (tempword << 16);
                tempx = ntohl(tempx);
        }
@@ -304,7 +306,8 @@ static u16 get_request_type_usb(struct ft1000_usb *ft1000dev)
 
        if (ft1000dev->bootmode == 1) {
                status = fix_ft1000_read_dpram32(ft1000dev,
-                                                DWNLD_MAG1_TYPE_LOC, (u8 *)&tempx);
+                                                DWNLD_MAG1_TYPE_LOC,
+                                                (u8 *)&tempx);
                tempx = ntohl(tempx);
        } else {
                if (ft1000dev->usbboot == 2) {
@@ -332,14 +335,17 @@ static long get_request_value(struct ft1000_usb *ft1000dev)
 
        if (ft1000dev->bootmode == 1) {
                status = fix_ft1000_read_dpram32(ft1000dev,
-                                                DWNLD_MAG1_SIZE_LOC, (u8 *)&value);
+                                                DWNLD_MAG1_SIZE_LOC,
+                                                (u8 *)&value);
                value = ntohl(value);
        } else  {
                status = ft1000_read_dpram16(ft1000dev,
-                                            DWNLD_MAG1_SIZE_LOC, (u8 *)&tempword, 0);
+                                            DWNLD_MAG1_SIZE_LOC,
+                                            (u8 *)&tempword, 0);
                value = tempword;
                status = ft1000_read_dpram16(ft1000dev,
-                                            DWNLD_MAG1_SIZE_LOC, (u8 *)&tempword, 1);
+                                            DWNLD_MAG1_SIZE_LOC,
+                                            (u8 *)&tempword, 1);
                value |= (tempword << 16);
                value = ntohl(value);
        }
index e6b5976a09e3bd5e438b13446d894f3566bbbe92..96209703ba257772bf4daaa8010fe198f0d6b762 100644 (file)
@@ -842,7 +842,6 @@ static int ft1000_copy_up_pkt(struct urb *urb)
        skb = dev_alloc_skb(len + 12 + 2);
 
        if (skb == NULL) {
-               pr_debug("No Network buffers available\n");
                info->stats.rx_errors++;
                ft1000_submit_rx_urb(info);
                return -1;
index 75ddd4f801a3daf9346c186e3a7dc9510b36817a..78fe0b55728020ed7d2c2c4ed90e0c152d45ec01 100644 (file)
@@ -124,7 +124,6 @@ static struct i2c_driver adt7316_driver = {
        .driver = {
                .name = "adt7316",
                .pm = ADT7316_PM_OPS,
-               .owner  = THIS_MODULE,
        },
        .probe = adt7316_i2c_probe,
        .id_table = adt7316_i2c_id,
index c54d5b5443a637ac10c40678f7aa54fdf8349700..6d38854c38c89a1032da9aedcc4bf65fec90e216 100644 (file)
@@ -214,6 +214,7 @@ static struct device iio_evgen_dev = {
        .groups = iio_evgen_groups,
        .release = &iio_evgen_release,
 };
+
 static __init int iio_dummy_evgen_init(void)
 {
        int ret = iio_dummy_evgen_create();
index 1629a8a6bf269ef672b35820f7746c5f767039a7..381f90ff468a983ca6ff7b318dadca61a7a168b6 100644 (file)
@@ -611,7 +611,6 @@ static int iio_dummy_probe(int index)
         */
        iio_dummy_devs[index] = indio_dev;
 
-
        /*
         * Set the device name.
         *
@@ -675,7 +674,6 @@ static void iio_dummy_remove(int index)
         */
        struct iio_dev *indio_dev = iio_dummy_devs[index];
 
-
        /* Unregister the device */
        iio_device_unregister(indio_dev);
 
index e877a99540abced251ef937f70a4abe7cab89f4a..8d00224e6fadb2ba8cd37debf0bf2e17d28ed27d 100644 (file)
@@ -119,6 +119,7 @@ static inline int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev)
 {
        return 0;
 };
+
 static inline
 void iio_simple_dummy_unconfigure_buffer(struct iio_dev *indio_dev)
 {};
index a651b8922d0a93039eb8ef6c71a35e7dd9ea0f48..00ed7745f3c5b768df4c707f78c0e2ea5c388326 100644 (file)
@@ -32,6 +32,7 @@ static const s16 fakedata[] = {
        [diffvoltage3m4] = -2,
        [accelx] = 344,
 };
+
 /**
  * iio_simple_dummy_trigger_h() - the trigger handler function
  * @irq: the interrupt number
@@ -178,7 +179,6 @@ error_free_buffer:
        iio_kfifo_free(indio_dev->buffer);
 error_ret:
        return ret;
-
 }
 
 /**
index ecc563cb6cb9ad236601b5b0e70fcf4c7d24ab3f..73108baf80adffe09bf84cee11d34e1b6bee6963 100644 (file)
@@ -120,7 +120,7 @@ int iio_simple_dummy_read_event_value(struct iio_dev *indio_dev,
                                      const struct iio_chan_spec *chan,
                                      enum iio_event_type type,
                                      enum iio_event_direction dir,
-                                         enum iio_event_info info,
+                                     enum iio_event_info info,
                                      int *val, int *val2)
 {
        struct iio_dummy_state *st = iio_priv(indio_dev);
@@ -143,7 +143,7 @@ int iio_simple_dummy_write_event_value(struct iio_dev *indio_dev,
                                       const struct iio_chan_spec *chan,
                                       enum iio_event_type type,
                                       enum iio_event_direction dir,
-                                          enum iio_event_info info,
+                                      enum iio_event_info info,
                                       int val, int val2)
 {
        struct iio_dummy_state *st = iio_priv(indio_dev);
index e646c5d2400460c40016e21167452d962d688cad..019ba5245c2363ac2e671dcde9c4378eb19dcc02 100644 (file)
@@ -838,7 +838,6 @@ static struct i2c_driver isl29018_driver = {
                        .name = "isl29018",
                        .acpi_match_table = ACPI_PTR(isl29018_acpi_match),
                        .pm = ISL29018_PM_OPS,
-                       .owner = THIS_MODULE,
                        .of_match_table = isl29018_of_match,
                    },
        .probe   = isl29018_probe,
index e5b2fdc2334b71792355b718b209606be04c73f6..cd6f2727aa58739b329acc46ee49a3321f8daa39 100644 (file)
@@ -547,7 +547,6 @@ static struct i2c_driver isl29028_driver = {
        .class  = I2C_CLASS_HWMON,
        .driver  = {
                .name = "isl29028",
-               .owner = THIS_MODULE,
                .of_match_table = isl29028_of_match,
        },
        .probe   = isl29028_probe,
index 5dd9cdfae30ccb9b793c167ae7275ac7ca7b07f9..d585041041c7c711bb1fe01d26f2509e3b3697fd 100644 (file)
@@ -134,7 +134,7 @@ void cfs_get_random_bytes(void *buf, int size);
 /* container_of depends on "likely" which is defined in libcfs_private.h */
 static inline void *__container_of(void *ptr, unsigned long shift)
 {
-       if (unlikely(IS_ERR(ptr) || ptr == NULL))
+       if (IS_ERR_OR_NULL(ptr))
                return ptr;
        return (char *)ptr - shift;
 }
index 8251ac932e37b22110c0cf5deacde6c53ecc4e78..a3aa644154e24a578b84d125d26e811479656f2b 100644 (file)
@@ -50,7 +50,6 @@ extern unsigned int libcfs_stack;
 extern unsigned int libcfs_debug;
 extern unsigned int libcfs_printk;
 extern unsigned int libcfs_console_ratelimit;
-extern unsigned int libcfs_watchdog_ratelimit;
 extern unsigned int libcfs_console_max_delay;
 extern unsigned int libcfs_console_min_delay;
 extern unsigned int libcfs_console_backoff;
index eea55d94e6be696d844e08fed58988f41c0b9d69..aa69c6a33d19dc0a6635213c55d177b64aa29f8c 100644 (file)
@@ -79,14 +79,16 @@ static inline int cfs_fail_check_set(__u32 id, __u32 value,
 {
        int ret = 0;
 
-       if (unlikely(CFS_FAIL_PRECHECK(id) &&
-                    (ret = __cfs_fail_check_set(id, value, set)))) {
-               if (quiet) {
-                       CDEBUG(D_INFO, "*** cfs_fail_loc=%x, val=%u***\n",
-                              id, value);
-               } else {
-                       LCONSOLE_INFO("*** cfs_fail_loc=%x, val=%u***\n",
-                                     id, value);
+       if (unlikely(CFS_FAIL_PRECHECK(id))) {
+               ret = __cfs_fail_check_set(id, value, set);
+               if (ret) {
+                       if (quiet) {
+                               CDEBUG(D_INFO, "*** cfs_fail_loc=%x, val=%u***\n",
+                                      id, value);
+                       } else {
+                               LCONSOLE_INFO("*** cfs_fail_loc=%x, val=%u***\n",
+                                             id, value);
+                       }
                }
        }
 
index ed37d26eb20df8217a4c8d99f45d8f9463f4eba8..9544860e32920a851dd35f20757a199ea5346fef 100644 (file)
@@ -87,24 +87,6 @@ do {                                                             \
        lbug_with_loc(&msgdata);                                        \
 } while (0)
 
-extern atomic_t libcfs_kmemory;
-/*
- * Memory
- */
-
-# define libcfs_kmem_inc(ptr, size)            \
-do {                                           \
-       atomic_add(size, &libcfs_kmemory);      \
-} while (0)
-
-# define libcfs_kmem_dec(ptr, size)            \
-do {                                           \
-       atomic_sub(size, &libcfs_kmemory);      \
-} while (0)
-
-# define libcfs_kmem_read()                    \
-       atomic_read(&libcfs_kmemory)
-
 #ifndef LIBCFS_VMALLOC_SIZE
 #define LIBCFS_VMALLOC_SIZE    (2 << PAGE_CACHE_SHIFT) /* 2 pages */
 #endif
@@ -121,14 +103,9 @@ do {                                                                           \
        if (unlikely((ptr) == NULL)) {                                      \
                CERROR("LNET: out of memory at %s:%d (tried to alloc '"     \
                       #ptr "' = %d)\n", __FILE__, __LINE__, (int)(size));  \
-               CERROR("LNET: %d total bytes allocated by lnet\n",          \
-                      libcfs_kmem_read());                                 \
        } else {                                                            \
                memset((ptr), 0, (size));                                   \
-               libcfs_kmem_inc((ptr), (size));                             \
-               CDEBUG(D_MALLOC, "alloc '" #ptr "': %d at %p (tot %d).\n",  \
-                      (int)(size), (ptr), libcfs_kmem_read());             \
-       }                                                                  \
+       }                                                                   \
 } while (0)
 
 /**
@@ -180,9 +157,6 @@ do {                                                                    \
                       "%s:%d\n", s, __FILE__, __LINE__);              \
                break;                                            \
        }                                                              \
-       libcfs_kmem_dec((ptr), s);                                    \
-       CDEBUG(D_MALLOC, "kfreed '" #ptr "': %d at %p (tot %d).\n",     \
-              s, (ptr), libcfs_kmem_read());                           \
        if (unlikely(s > LIBCFS_VMALLOC_SIZE))                    \
                vfree(ptr);                                 \
        else                                                        \
index 509dc1e5c3b1850f4d140584b64a00e3fa685a09..478e9582ff5414bf63e7e27ac963413f2d22bb46 100644 (file)
@@ -102,6 +102,4 @@ int cfs_ip_addr_parse(char *str, int len, struct list_head *list);
 int cfs_ip_addr_match(__u32 addr, struct list_head *list);
 void cfs_ip_addr_free(struct list_head *list);
 
-#define        strtoul(str, endp, base)        simple_strtoul(str, endp, base)
-
 #endif
index 4eb24a11b02a33ece27e487c1b1f81e6ceebfb45..24b2c978dfb67bba25ac846584e9ede10ff81f97 100644 (file)
@@ -1390,7 +1390,7 @@ static int kiblnd_create_fmr_pool(kib_fmr_poolset_t *fps,
                .max_pages_per_fmr = LNET_MAX_PAYLOAD/PAGE_SIZE,
                .page_shift        = PAGE_SHIFT,
                .access            = (IB_ACCESS_LOCAL_WRITE |
-                                     IB_ACCESS_REMOTE_WRITE),
+                                     IB_ACCESS_REMOTE_WRITE),
                .pool_size         = fps->fps_pool_size,
                .dirty_watermark   = fps->fps_flush_trigger,
                .flush_function    = NULL,
@@ -2667,9 +2667,6 @@ static void kiblnd_base_shutdown(void)
 
        LASSERT(list_empty(&kiblnd_data.kib_devs));
 
-       CDEBUG(D_MALLOC, "before LND base cleanup: kmem %d\n",
-              atomic_read(&libcfs_kmemory));
-
        switch (kiblnd_data.kib_init) {
        default:
                LBUG();
@@ -2720,9 +2717,6 @@ static void kiblnd_base_shutdown(void)
        if (kiblnd_data.kib_scheds != NULL)
                cfs_percpt_free(kiblnd_data.kib_scheds);
 
-       CDEBUG(D_MALLOC, "after LND base cleanup: kmem %d\n",
-              atomic_read(&libcfs_kmemory));
-
        kiblnd_data.kib_init = IBLND_INIT_NOTHING;
        module_put(THIS_MODULE);
 }
@@ -2739,9 +2733,6 @@ void kiblnd_shutdown(lnet_ni_t *ni)
        if (net == NULL)
                goto out;
 
-       CDEBUG(D_MALLOC, "before LND net cleanup: kmem %d\n",
-              atomic_read(&libcfs_kmemory));
-
        write_lock_irqsave(g_lock, flags);
        net->ibn_shutdown = 1;
        write_unlock_irqrestore(g_lock, flags);
@@ -2786,9 +2777,6 @@ void kiblnd_shutdown(lnet_ni_t *ni)
                break;
        }
 
-       CDEBUG(D_MALLOC, "after LND net cleanup: kmem %d\n",
-              atomic_read(&libcfs_kmemory));
-
        net->ibn_init = IBLND_INIT_NOTHING;
        ni->ni_data = NULL;
 
index f5d1d9f8f1ed3e6f0ea1745094f8cb250304d637..2991be85d8b31ac39e7b7a8f70b86f587e39ccd2 100644 (file)
@@ -48,7 +48,7 @@
 #include <linux/uio.h>
 #include <linux/uaccess.h>
 
-#include <asm/io.h>
+#include <linux/io.h>
 
 #include <linux/fs.h>
 #include <linux/file.h>
@@ -120,7 +120,7 @@ extern kib_tunables_t  kiblnd_tunables;
 #define IBLND_CREDIT_HIGHWATER_V1 7 /* V1 only : when eagerly to return credits */
 
 #define IBLND_CREDITS_DEFAULT     8 /* default # of peer credits */
-#define IBLND_CREDITS_MAX        ((typeof(((kib_msg_t*) 0)->ibm_credits)) - 1)  /* Max # of peer credits */
+#define IBLND_CREDITS_MAX        ((typeof(((kib_msg_t *) 0)->ibm_credits)) - 1)  /* Max # of peer credits */
 
 #define IBLND_MSG_QUEUE_SIZE(v)    ((v) == IBLND_MSG_VERSION_1 ? \
                                     IBLND_MSG_QUEUE_SIZE_V1 :   \
@@ -519,7 +519,7 @@ typedef struct kib_rx                         /* receive message */
        enum ib_wc_status      rx_status;     /* completion status */
        kib_msg_t              *rx_msg;       /* message buffer (host vaddr) */
        __u64                  rx_msgaddr;    /* message buffer (I/O addr) */
-       DECLARE_PCI_UNMAP_ADDR (rx_msgunmap); /* for dma_unmap_single() */
+       DECLARE_PCI_UNMAP_ADDR(rx_msgunmap);  /* for dma_unmap_single() */
        struct ib_recv_wr      rx_wrq;        /* receive work item... */
        struct ib_sge          rx_sge;        /* ...and its memory */
 } kib_rx_t;
@@ -546,7 +546,7 @@ typedef struct kib_tx                         /* transmit message */
                                               * completion */
        kib_msg_t              *tx_msg;       /* message buffer (host vaddr) */
        __u64                  tx_msgaddr;    /* message buffer (I/O addr) */
-       DECLARE_PCI_UNMAP_ADDR (tx_msgunmap); /* for dma_unmap_single() */
+       DECLARE_PCI_UNMAP_ADDR(tx_msgunmap);  /* for dma_unmap_single() */
        int                    tx_nwrq;       /* # send work items */
        struct ib_send_wr      *tx_wrq;       /* send work items... */
        struct ib_sge          *tx_sge;       /* ...and their memory */
@@ -647,14 +647,14 @@ extern void kiblnd_hdev_destroy(kib_hca_dev_t *hdev);
 static inline void
 kiblnd_hdev_addref_locked(kib_hca_dev_t *hdev)
 {
-       LASSERT (atomic_read(&hdev->ibh_ref) > 0);
+       LASSERT(atomic_read(&hdev->ibh_ref) > 0);
        atomic_inc(&hdev->ibh_ref);
 }
 
 static inline void
 kiblnd_hdev_decref(kib_hca_dev_t *hdev)
 {
-       LASSERT (atomic_read(&hdev->ibh_ref) > 0);
+       LASSERT(atomic_read(&hdev->ibh_ref) > 0);
        if (atomic_dec_and_test(&hdev->ibh_ref))
                kiblnd_hdev_destroy(hdev);
 }
@@ -701,7 +701,7 @@ do {                                                                        \
 do {                                                       \
        CDEBUG(D_NET, "peer[%p] -> %s (%d)++\n",                \
               (peer), libcfs_nid2str((peer)->ibp_nid),  \
-              atomic_read (&(peer)->ibp_refcount));    \
+              atomic_read(&(peer)->ibp_refcount));     \
        atomic_inc(&(peer)->ibp_refcount);                \
 } while (0)
 
@@ -709,32 +709,32 @@ do {                                                          \
 do {                                                       \
        CDEBUG(D_NET, "peer[%p] -> %s (%d)--\n",                \
               (peer), libcfs_nid2str((peer)->ibp_nid),  \
-              atomic_read (&(peer)->ibp_refcount));    \
+              atomic_read(&(peer)->ibp_refcount));     \
        LASSERT_ATOMIC_POS(&(peer)->ibp_refcount);            \
        if (atomic_dec_and_test(&(peer)->ibp_refcount))     \
                kiblnd_destroy_peer(peer);                    \
 } while (0)
 
 static inline struct list_head *
-kiblnd_nid2peerlist (lnet_nid_t nid)
+kiblnd_nid2peerlist(lnet_nid_t nid)
 {
        unsigned int hash =
                ((unsigned int)nid) % kiblnd_data.kib_peer_hash_size;
 
-       return (&kiblnd_data.kib_peers [hash]);
+       return &kiblnd_data.kib_peers[hash];
 }
 
 static inline int
-kiblnd_peer_active (kib_peer_t *peer)
+kiblnd_peer_active(kib_peer_t *peer)
 {
        /* Am I in the peer hash table? */
-       return (!list_empty(&peer->ibp_list));
+       return !list_empty(&peer->ibp_list);
 }
 
 static inline kib_conn_t *
-kiblnd_get_conn_locked (kib_peer_t *peer)
+kiblnd_get_conn_locked(kib_peer_t *peer)
 {
-       LASSERT (!list_empty(&peer->ibp_conns));
+       LASSERT(!list_empty(&peer->ibp_conns));
 
        /* just return the first connection */
        return list_entry(peer->ibp_conns.next, kib_conn_t, ibc_list);
@@ -751,7 +751,7 @@ kiblnd_send_keepalive(kib_conn_t *conn)
 static inline int
 kiblnd_need_noop(kib_conn_t *conn)
 {
-       LASSERT (conn->ibc_state >= IBLND_CONN_ESTABLISHED);
+       LASSERT(conn->ibc_state >= IBLND_CONN_ESTABLISHED);
 
        if (conn->ibc_outstanding_credits <
            IBLND_CREDITS_HIGHWATER(conn->ibc_version) &&
@@ -788,7 +788,7 @@ kiblnd_abort_receives(kib_conn_t *conn)
 }
 
 static inline const char *
-kiblnd_queue2str (kib_conn_t *conn, struct list_head *q)
+kiblnd_queue2str(kib_conn_t *conn, struct list_head *q)
 {
        if (q == &conn->ibc_tx_queue)
                return "tx_queue";
@@ -815,43 +815,43 @@ kiblnd_queue2str (kib_conn_t *conn, struct list_head *q)
 #define IBLND_WID_MASK  3UL
 
 static inline __u64
-kiblnd_ptr2wreqid (void *ptr, int type)
+kiblnd_ptr2wreqid(void *ptr, int type)
 {
        unsigned long lptr = (unsigned long)ptr;
 
-       LASSERT ((lptr & IBLND_WID_MASK) == 0);
-       LASSERT ((type & ~IBLND_WID_MASK) == 0);
+       LASSERT((lptr & IBLND_WID_MASK) == 0);
+       LASSERT((type & ~IBLND_WID_MASK) == 0);
        return (__u64)(lptr | type);
 }
 
 static inline void *
-kiblnd_wreqid2ptr (__u64 wreqid)
+kiblnd_wreqid2ptr(__u64 wreqid)
 {
        return (void *)(((unsigned long)wreqid) & ~IBLND_WID_MASK);
 }
 
 static inline int
-kiblnd_wreqid2type (__u64 wreqid)
+kiblnd_wreqid2type(__u64 wreqid)
 {
-       return (wreqid & IBLND_WID_MASK);
+       return wreqid & IBLND_WID_MASK;
 }
 
 static inline void
-kiblnd_set_conn_state (kib_conn_t *conn, int state)
+kiblnd_set_conn_state(kib_conn_t *conn, int state)
 {
        conn->ibc_state = state;
        mb();
 }
 
 static inline void
-kiblnd_init_msg (kib_msg_t *msg, int type, int body_nob)
+kiblnd_init_msg(kib_msg_t *msg, int type, int body_nob)
 {
        msg->ibm_type = type;
        msg->ibm_nob  = offsetof(kib_msg_t, ibm_u) + body_nob;
 }
 
 static inline int
-kiblnd_rd_size (kib_rdma_desc_t *rd)
+kiblnd_rd_size(kib_rdma_desc_t *rd)
 {
        int   i;
        int   size;
@@ -887,7 +887,7 @@ kiblnd_rd_consume_frag(kib_rdma_desc_t *rd, int index, __u32 nob)
                rd->rd_frags[index].rf_addr += nob;
                rd->rd_frags[index].rf_nob  -= nob;
        } else {
-               index ++;
+               index++;
        }
 
        return index;
@@ -896,8 +896,8 @@ kiblnd_rd_consume_frag(kib_rdma_desc_t *rd, int index, __u32 nob)
 static inline int
 kiblnd_rd_msg_size(kib_rdma_desc_t *rd, int msgtype, int n)
 {
-       LASSERT (msgtype == IBLND_MSG_GET_REQ ||
-                msgtype == IBLND_MSG_PUT_ACK);
+       LASSERT(msgtype == IBLND_MSG_GET_REQ ||
+               msgtype == IBLND_MSG_PUT_ACK);
 
        return msgtype == IBLND_MSG_GET_REQ ?
               offsetof(kib_get_msg_t, ibgm_rd.rd_frags[n]) :
@@ -982,53 +982,53 @@ int  kiblnd_pmr_pool_map(kib_pmr_poolset_t *pps, kib_hca_dev_t *hdev,
                         kib_rdma_desc_t *rd, __u64 *iova, kib_phys_mr_t **pp_pmr);
 void kiblnd_pmr_pool_unmap(kib_phys_mr_t *pmr);
 
-int  kiblnd_startup (lnet_ni_t *ni);
-void kiblnd_shutdown (lnet_ni_t *ni);
-int  kiblnd_ctl (lnet_ni_t *ni, unsigned int cmd, void *arg);
-void kiblnd_query (struct lnet_ni *ni, lnet_nid_t nid, unsigned long *when);
+int  kiblnd_startup(lnet_ni_t *ni);
+void kiblnd_shutdown(lnet_ni_t *ni);
+int  kiblnd_ctl(lnet_ni_t *ni, unsigned int cmd, void *arg);
+void kiblnd_query(struct lnet_ni *ni, lnet_nid_t nid, unsigned long *when);
 
 int  kiblnd_tunables_init(void);
 void kiblnd_tunables_fini(void);
 
-int  kiblnd_connd (void *arg);
+int  kiblnd_connd(void *arg);
 int  kiblnd_scheduler(void *arg);
 int  kiblnd_thread_start(int (*fn)(void *arg), void *arg, char *name);
-int  kiblnd_failover_thread (void *arg);
+int  kiblnd_failover_thread(void *arg);
 
 int  kiblnd_alloc_pages(kib_pages_t **pp, int cpt, int npages);
-void kiblnd_free_pages (kib_pages_t *p);
+void kiblnd_free_pages(kib_pages_t *p);
 
 int  kiblnd_cm_callback(struct rdma_cm_id *cmid,
                        struct rdma_cm_event *event);
 int  kiblnd_translate_mtu(int value);
 
 int  kiblnd_dev_failover(kib_dev_t *dev);
-int  kiblnd_create_peer (lnet_ni_t *ni, kib_peer_t **peerp, lnet_nid_t nid);
-void kiblnd_destroy_peer (kib_peer_t *peer);
-void kiblnd_destroy_dev (kib_dev_t *dev);
-void kiblnd_unlink_peer_locked (kib_peer_t *peer);
-void kiblnd_peer_alive (kib_peer_t *peer);
-kib_peer_t *kiblnd_find_peer_locked (lnet_nid_t nid);
-void kiblnd_peer_connect_failed (kib_peer_t *peer, int active, int error);
-int  kiblnd_close_stale_conns_locked (kib_peer_t *peer,
+int  kiblnd_create_peer(lnet_ni_t *ni, kib_peer_t **peerp, lnet_nid_t nid);
+void kiblnd_destroy_peer(kib_peer_t *peer);
+void kiblnd_destroy_dev(kib_dev_t *dev);
+void kiblnd_unlink_peer_locked(kib_peer_t *peer);
+void kiblnd_peer_alive(kib_peer_t *peer);
+kib_peer_t *kiblnd_find_peer_locked(lnet_nid_t nid);
+void kiblnd_peer_connect_failed(kib_peer_t *peer, int active, int error);
+int  kiblnd_close_stale_conns_locked(kib_peer_t *peer,
                                      int version, __u64 incarnation);
-int  kiblnd_close_peer_conns_locked (kib_peer_t *peer, int why);
+int  kiblnd_close_peer_conns_locked(kib_peer_t *peer, int why);
 
 void kiblnd_connreq_done(kib_conn_t *conn, int status);
-kib_conn_t *kiblnd_create_conn (kib_peer_t *peer, struct rdma_cm_id *cmid,
+kib_conn_t *kiblnd_create_conn(kib_peer_t *peer, struct rdma_cm_id *cmid,
                                int state, int version);
-void kiblnd_destroy_conn (kib_conn_t *conn);
-void kiblnd_close_conn (kib_conn_t *conn, int error);
-void kiblnd_close_conn_locked (kib_conn_t *conn, int error);
+void kiblnd_destroy_conn(kib_conn_t *conn);
+void kiblnd_close_conn(kib_conn_t *conn, int error);
+void kiblnd_close_conn_locked(kib_conn_t *conn, int error);
 
-int  kiblnd_init_rdma (kib_conn_t *conn, kib_tx_t *tx, int type,
+int  kiblnd_init_rdma(kib_conn_t *conn, kib_tx_t *tx, int type,
                       int nob, kib_rdma_desc_t *dstrd, __u64 dstcookie);
 
-void kiblnd_launch_tx (lnet_ni_t *ni, kib_tx_t *tx, lnet_nid_t nid);
-void kiblnd_queue_tx_locked (kib_tx_t *tx, kib_conn_t *conn);
-void kiblnd_queue_tx (kib_tx_t *tx, kib_conn_t *conn);
-void kiblnd_init_tx_msg (lnet_ni_t *ni, kib_tx_t *tx, int type, int body_nob);
-void kiblnd_txlist_done (lnet_ni_t *ni, struct list_head *txlist,
+void kiblnd_launch_tx(lnet_ni_t *ni, kib_tx_t *tx, lnet_nid_t nid);
+void kiblnd_queue_tx_locked(kib_tx_t *tx, kib_conn_t *conn);
+void kiblnd_queue_tx(kib_tx_t *tx, kib_conn_t *conn);
+void kiblnd_init_tx_msg(lnet_ni_t *ni, kib_tx_t *tx, int type, int body_nob);
+void kiblnd_txlist_done(lnet_ni_t *ni, struct list_head *txlist,
                         int status);
 void kiblnd_check_sends (kib_conn_t *conn);
 
@@ -1036,10 +1036,10 @@ void kiblnd_qp_event(struct ib_event *event, void *arg);
 void kiblnd_cq_event(struct ib_event *event, void *arg);
 void kiblnd_cq_completion(struct ib_cq *cq, void *arg);
 
-void kiblnd_pack_msg (lnet_ni_t *ni, kib_msg_t *msg, int version,
+void kiblnd_pack_msg(lnet_ni_t *ni, kib_msg_t *msg, int version,
                      int credits, lnet_nid_t dstnid, __u64 dststamp);
 int  kiblnd_unpack_msg(kib_msg_t *msg, int nob);
-int  kiblnd_post_rx (kib_rx_t *rx, int credit);
+int  kiblnd_post_rx(kib_rx_t *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,
index 477aa8b76f327a56cc20a1aa47d6868418a28ed9..5a8ebe1b3c8435deb7c85d193c18ef9baaf1e34f 100644 (file)
@@ -3133,8 +3133,7 @@ kiblnd_connd(void *arg)
                dropped_lock = 0;
 
                if (!list_empty(&kiblnd_data.kib_connd_zombies)) {
-                       conn = list_entry(kiblnd_data. \
-                                             kib_connd_zombies.next,
+                       conn = list_entry(kiblnd_data.kib_connd_zombies.next,
                                              kib_conn_t, ibc_list);
                        list_del(&conn->ibc_list);
 
index 4128a92218a99c3a789a3236aadf1ec9e1c768f1..d8bfcadd184a8bb94001b65619e63b6104e71e64 100644 (file)
@@ -2252,8 +2252,6 @@ ksocknal_base_shutdown(void)
        int i;
        int j;
 
-       CDEBUG(D_MALLOC, "before NAL cleanup: kmem %d\n",
-              atomic_read(&libcfs_kmemory));
        LASSERT(ksocknal_data.ksnd_nnets == 0);
 
        switch (ksocknal_data.ksnd_init) {
@@ -2331,9 +2329,6 @@ ksocknal_base_shutdown(void)
                break;
        }
 
-       CDEBUG(D_MALLOC, "after NAL cleanup: kmem %d\n",
-              atomic_read(&libcfs_kmemory));
-
        module_put(THIS_MODULE);
 }
 
index 8a9d4a0de1298777d522a368a1ca6177cfdee06b..cb91e68919d0f2d52475a1412715eb70467b65e9 100644 (file)
@@ -46,6 +46,7 @@
 #include <linux/sysctl.h>
 #include <linux/uio.h>
 #include <linux/unistd.h>
+#include <asm/irq.h>
 #include <net/sock.h>
 #include <net/tcp.h>
 
index fe2a83a540cdb040adbb795ecfa0e5d3a53489c8..0d5aac6a2bb3c4c6e941588e378a794ff5559859 100644 (file)
@@ -526,8 +526,7 @@ ksocknal_process_transmit (ksock_conn_t *conn, ksock_tx_t *tx)
 
                counter++;   /* exponential backoff warnings */
                if ((counter & (-counter)) == counter)
-                       CWARN("%u ENOMEM tx %p (%u allocated)\n",
-                             counter, conn, atomic_read(&libcfs_kmemory));
+                       CWARN("%u ENOMEM tx %p\n", counter, conn);
 
                /* Queue on ksnd_enomem_conns for retry after a timeout */
                spin_lock_bh(&ksocknal_data.ksnd_reaper_lock);
index ee902dc43823ff201cf1a3d41530b47008a29184..40f418b82960746b5cde2324a7a40d57ae43c775 100644 (file)
 
 static struct ctl_table_header *lnet_table_header;
 
-#define CTL_LNET        (0x100)
-enum {
-       PSDEV_LNET_STATS = 100,
-       PSDEV_LNET_ROUTES,
-       PSDEV_LNET_ROUTERS,
-       PSDEV_LNET_PEERS,
-       PSDEV_LNET_BUFFERS,
-       PSDEV_LNET_NIS,
-       PSDEV_LNET_PTL_ROTOR,
-};
-
 #define LNET_LOFFT_BITS                (sizeof(loff_t) * 8)
 /*
  * NB: max allowed LNET_CPT_BITS is 8 on 64-bit system and 2 on 32-bit system
index 7c5185a2a7950bc1833ccd2cb25d0c204f443512..257de353767192d626ba8822b9e99caceb416e8b 100644 (file)
@@ -203,7 +203,8 @@ sfw_deactivate_session(void)
        sfw_batch_t *tsb;
        sfw_test_case_t *tsc;
 
-       if (sn == NULL) return;
+       if (sn == NULL)
+               return;
 
        LASSERT(!sn->sn_timer_active);
 
@@ -613,7 +614,8 @@ sfw_destroy_test_instance(sfw_test_instance_t *tsi)
        srpc_client_rpc_t *rpc;
        sfw_test_unit_t *tsu;
 
-       if (!tsi->tsi_is_client) goto clean;
+       if (!tsi->tsi_is_client)
+               goto clean;
 
        tsi->tsi_ops->tso_fini(tsi);
 
@@ -1700,7 +1702,8 @@ sfw_startup(void)
 
        for (i = 0; ; i++) {
                sv = &sfw_services[i];
-               if (sv->sv_name == NULL) break;
+               if (sv->sv_name == NULL)
+                       break;
 
                sv->sv_bulk_ready = NULL;
                sv->sv_handler    = sfw_handle_server_rpc;
@@ -1717,7 +1720,8 @@ sfw_startup(void)
                }
 
                /* about to sfw_shutdown, no need to add buffer */
-               if (error) continue;
+               if (error)
+                       continue;
 
                rc = srpc_service_add_buffers(sv, sv->sv_wi_total);
                if (rc != 0) {
index 1362783b7eab362a8df204826449c4aac50e47c0..a16d577c6cb184071dd0d015d5e8c9ab79c9b4d4 100644 (file)
@@ -498,11 +498,11 @@ int client_fid_init(struct obd_device *obd,
        int rc;
 
        cli->cl_seq = kzalloc(sizeof(*cli->cl_seq), GFP_NOFS);
-       if (cli->cl_seq == NULL)
+       if (!cli->cl_seq)
                return -ENOMEM;
 
        prefix = kzalloc(MAX_OBD_NAME + 5, GFP_NOFS);
-       if (prefix == NULL) {
+       if (!prefix) {
                rc = -ENOMEM;
                goto out_free_seq;
        }
index ec2fc4339a2e752e1b29d04d7c1cdf9ae352915d..1b1066b2461ceadb6aeb01e7d12fe76d1b89fa83 100644 (file)
@@ -70,7 +70,7 @@ struct fld_cache *fld_cache_init(const char *name,
        LASSERT(cache_threshold < cache_size);
 
        cache = kzalloc(sizeof(*cache), GFP_NOFS);
-       if (cache == NULL)
+       if (!cache)
                return ERR_PTR(-ENOMEM);
 
        INIT_LIST_HEAD(&cache->fci_entries_head);
index c3b47f2346df6bd2e0a074869545e6ee0b7056ae..1e450bf953838ef75a996f21a71b3d487cce189d 100644 (file)
@@ -222,7 +222,7 @@ int fld_client_add_target(struct lu_client_fld *fld,
                        fld->lcf_name, name, tar->ft_idx);
 
        target = kzalloc(sizeof(*target), GFP_NOFS);
-       if (target == NULL)
+       if (!target)
                return -ENOMEM;
 
        spin_lock(&fld->lcf_lock);
index 513c81f43d6e87926a2d368fc023525a6a37b338..6b14406b2920daa640b68f6b80f01cba0fa68aa8 100644 (file)
 
 #define LTIME_S(time)             (time.tv_sec)
 
-/* inode_dio_wait(i) use as-is for write lock */
-# define inode_dio_write_done(i)       do {} while (0) /* for write unlock */
-# define inode_dio_read(i)             atomic_inc(&(i)->i_dio_count)
-/* inode_dio_done(i) use as-is for read unlock */
-
-
-#ifndef FS_HAS_FIEMAP
-#define FS_HAS_FIEMAP                  (0)
-#endif
-
-#define ll_vfs_rmdir(dir, entry, mnt)       vfs_rmdir(dir, entry)
-#define ll_vfs_mkdir(inode, dir, mnt, mode)    vfs_mkdir(inode, dir, mode)
-#define ll_vfs_link(old, mnt, dir, new, mnt1)       vfs_link(old, dir, new)
-#define ll_vfs_unlink(inode, entry, mnt)         vfs_unlink(inode, entry)
-#define ll_vfs_mknod(dir, entry, mnt, mode, dev) \
-                    vfs_mknod(dir, entry, mode, dev)
-#define ll_security_inode_unlink(dir, entry, mnt) \
-                                security_inode_unlink(dir, entry)
-#define ll_vfs_rename(old, old_dir, mnt, new, new_dir, mnt1) \
-               vfs_rename(old, old_dir, new, new_dir, NULL, 0)
-
-#define cfs_bio_io_error(a, b)   bio_io_error((a))
-#define cfs_bio_endio(a, b, c)    bio_endio((a), (c))
-
-#define cfs_path_put(nd)     path_put(&(nd)->path)
-
-
-#ifndef SLAB_DESTROY_BY_RCU
-#define SLAB_DESTROY_BY_RCU 0
-#endif
-
-
-
-static inline int
-ll_quota_on(struct super_block *sb, int off, int ver, char *name, int remount)
-{
-       int rc;
-
-       if (sb->s_qcop->quota_on) {
-               struct path path;
-
-               rc = kern_path(name, LOOKUP_FOLLOW, &path);
-               if (!rc)
-                       return rc;
-               rc = sb->s_qcop->quota_on(sb, off, ver
-                                           , &path
-                                          );
-               path_put(&path);
-               return rc;
-       } else
-               return -ENOSYS;
-}
-
-static inline int ll_quota_off(struct super_block *sb, int off, int remount)
-{
-       if (sb->s_qcop->quota_off) {
-               return sb->s_qcop->quota_off(sb, off
-                                           );
-       } else
-               return -ENOSYS;
-}
-
-
-# define ll_vfs_dq_init             dquot_initialize
-# define ll_vfs_dq_drop             dquot_drop
-# define ll_vfs_dq_transfer     dquot_transfer
-# define ll_vfs_dq_off(sb, remount) dquot_suspend(sb, -1)
-
-
-
-
-
-#define queue_max_phys_segments(rq)       queue_max_segments(rq)
-#define queue_max_hw_segments(rq)       queue_max_segments(rq)
-
-
-#define ll_d_hlist_node hlist_node
-#define ll_d_hlist_empty(list) hlist_empty(list)
-#define ll_d_hlist_entry(ptr, type, name) hlist_entry(ptr.first, type, name)
-#define ll_d_hlist_for_each(tmp, i_dentry) hlist_for_each(tmp, i_dentry)
-#define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \
-       p = NULL; hlist_for_each_entry(dentry, i_dentry, alias)
-
-
-#define bio_hw_segments(q, bio) 0
-
-
-#define ll_pagevec_init(pv, cold)       do {} while (0)
-#define ll_pagevec_add(pv, pg)   (0)
-#define ll_pagevec_lru_add_file(pv)     do {} while (0)
-
-
 #ifndef QUOTA_OK
 # define QUOTA_OK 0
 #endif
@@ -163,17 +71,6 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount)
 # define NO_QUOTA (-EDQUOT)
 #endif
 
-#ifndef SEEK_DATA
-#define SEEK_DATA      3       /* seek to the next data */
-#endif
-#ifndef SEEK_HOLE
-#define SEEK_HOLE      4       /* seek to the next hole */
-#endif
-
-#ifndef FMODE_UNSIGNED_OFFSET
-#define FMODE_UNSIGNED_OFFSET  ((__force fmode_t)0x2000)
-#endif
-
 #if !defined(_ASM_GENERIC_BITOPS_EXT2_NON_ATOMIC_H_) && !defined(ext2_set_bit)
 # define ext2_set_bit       __test_and_set_bit_le
 # define ext2_clear_bit           __test_and_clear_bit_le
@@ -182,20 +79,4 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount)
 # define ext2_find_next_zero_bit  find_next_zero_bit_le
 #endif
 
-#ifdef ATTR_TIMES_SET
-# define TIMES_SET_FLAGS (ATTR_MTIME_SET | ATTR_ATIME_SET | ATTR_TIMES_SET)
-#else
-# define TIMES_SET_FLAGS (ATTR_MTIME_SET | ATTR_ATIME_SET)
-#endif
-
-
-#include <linux/version.h>
-#include <linux/fs.h>
-
-# define ll_umode_t    umode_t
-
-#include <linux/dcache.h>
-
-# define ll_dirty_inode(inode, flag)   (inode)->i_sb->s_op->dirty_inode((inode), flag)
-
 #endif /* _COMPAT25_H */
index 14562788e4e059eca40f57ee85fd74a5c9f41fa0..ebe8d68ed813f854126c3b21407ff3c7c187a37b 100644 (file)
@@ -60,18 +60,6 @@ truncate_complete_page(struct address_space *mapping, struct page *page)
        ll_delete_from_page_cache(page);
 }
 
-#ifdef ATTR_OPEN
-# define ATTR_FROM_OPEN ATTR_OPEN
-#else
-# ifndef ATTR_FROM_OPEN
-#  define ATTR_FROM_OPEN 0
-# endif
-#endif /* ATTR_OPEN */
-
-#ifndef ATTR_RAW
-#define ATTR_RAW 0
-#endif
-
 #ifndef ATTR_CTIME_SET
 /*
  * set ATTR_CTIME_SET to a high value to avoid any risk of collision with other
index 77a7de98fc8ef18cecc1d0e0fe4a04278362a36d..3bb2f8b0c30962f9c608eb936f55fb98959e3049 100644 (file)
@@ -2183,7 +2183,7 @@ struct ptlrpcd_ctl {
         */
        struct ptlrpc_request_set  *pc_set;
        /**
-        * Thread name used in cfs_daemonize()
+        * Thread name used in kthread_run()
         */
        char                    pc_name[16];
        /**
index 55452e562bd4823213025279264044e9d31d99c6..9ad8c268da10efe512aff7b530297faaf6d11aed 100644 (file)
@@ -1472,7 +1472,7 @@ static inline bool filename_is_volatile(const char *name, int namelen, int *idx)
        }
        /* we have an idx, read it */
        start = name + LUSTRE_VOLATILE_HDR_LEN + 1;
-       *idx = strtoul(start, &end, 0);
+       *idx = simple_strtoul(start, &end, 0);
        /* error cases:
         * no digit, no trailing :, negative value
         */
index 36ed78127830b001d574baad59f9da04e5d12b28..e1f8b15753f91df508aefe7a1df5566797c16830 100644 (file)
@@ -1869,8 +1869,7 @@ extern int (*ptlrpc_put_connection_superhack)(struct ptlrpc_connection *c);
 /* obd_mount.c */
 
 /* sysctl.c */
-extern void obd_sysctl_init (void);
-extern void obd_sysctl_clean (void);
+extern int obd_sysctl_init(void);
 
 /* uuid.c  */
 typedef __u8 class_uuid_t[16];
index 73e2d4880b9b392c924b7f1e6e8e0fb7bd8648f3..88e16717e854e3f77e03943146a6823a6fb01e7b 100644 (file)
@@ -56,9 +56,7 @@ extern unsigned int obd_dump_on_eviction;
 /* obd_timeout should only be used for recovery, not for
    networking / disk / timings affected by load (use Adaptive Timeouts) */
 extern unsigned int obd_timeout;         /* seconds */
-extern unsigned int ldlm_timeout;       /* seconds */
 extern unsigned int obd_timeout_set;
-extern unsigned int ldlm_timeout_set;
 extern unsigned int at_min;
 extern unsigned int at_max;
 extern unsigned int at_history;
@@ -105,8 +103,6 @@ int obd_alloc_fail(const void *ptr, const char *name, const char *type,
 
 /* Timeout definitions */
 #define OBD_TIMEOUT_DEFAULT         100
-#define LDLM_TIMEOUT_DEFAULT       20
-#define MDS_LDLM_TIMEOUT_DEFAULT       6
 /* Time to wait for all clients to reconnect during recovery (hard limit) */
 #define OBD_RECOVERY_TIME_HARD   (obd_timeout * 9)
 /* Time to wait for all clients to reconnect during recovery (soft limit) */
@@ -505,8 +501,6 @@ int obd_alloc_fail(const void *ptr, const char *name, const char *type,
 #define OBD_FAIL_ONCE                     CFS_FAIL_ONCE
 #define OBD_FAILED                           CFS_FAILED
 
-extern atomic_t libcfs_kmemory;
-
 extern void obd_update_maxusage(void);
 
 #define obd_memory_add(size)                                             \
@@ -622,8 +616,8 @@ do {                                                                              \
        if (unlikely((ptr) == NULL)) {                                  \
                CERROR("vmalloc of '" #ptr "' (%d bytes) failed\n",        \
                       (int)(size));                                      \
-               CERROR("%llu total bytes allocated by Lustre, %d by LNET\n", \
-                      obd_memory_sum(), atomic_read(&libcfs_kmemory));   \
+               CERROR("%llu total bytes allocated by Lustre\n",              \
+                      obd_memory_sum());                                     \
        } else {                                                              \
                OBD_ALLOC_POST(ptr, size, "vmalloced");                \
        }                                                                    \
@@ -769,12 +763,10 @@ do {                                                                            \
                       "failed\n", (int)1,                                  \
                       (__u64)(1 << PAGE_CACHE_SHIFT));                  \
                CERROR("%llu total bytes and %llu total pages "    \
-                      "(%llu bytes) allocated by Lustre, "             \
-                      "%d total bytes by LNET\n",                          \
+                      "(%llu bytes) allocated by Lustre\n",                  \
                       obd_memory_sum(),                                      \
                       obd_pages_sum() << PAGE_CACHE_SHIFT,                  \
-                      obd_pages_sum(),                                \
-                      atomic_read(&libcfs_kmemory));                \
+                      obd_pages_sum());                                       \
        } else {                                                              \
                obd_pages_add(0);                                            \
                CDEBUG(D_MALLOC, "alloc_pages '" #ptr "': %d page(s) / "      \
index e0c1ccafbd63562f2be3e7ae11b24995091fdc79..9053f811629874f72f479d20c630b6946a12f3f6 100644 (file)
@@ -203,7 +203,7 @@ struct lu_device *ccc_device_alloc(const struct lu_env *env,
        int rc;
 
        vdv = kzalloc(sizeof(*vdv), GFP_NOFS);
-       if (vdv == NULL)
+       if (!vdv)
                return ERR_PTR(-ENOMEM);
 
        lud = &vdv->cdv_cl.cd_lu_dev;
index 764f98684d74ef294b30942de737a5dbe3f2c420..badd227e4f67a0732982a73f8555fa69b5927f4d 100644 (file)
@@ -656,7 +656,8 @@ int target_pack_pool_reply(struct ptlrpc_request *req)
 }
 EXPORT_SYMBOL(target_pack_pool_reply);
 
-int target_send_reply_msg(struct ptlrpc_request *req, int rc, int fail_id)
+static int
+target_send_reply_msg(struct ptlrpc_request *req, int rc, int fail_id)
 {
        if (OBD_FAIL_CHECK_ORSET(fail_id & ~OBD_FAIL_ONCE, OBD_FAIL_ONCE)) {
                DEBUG_REQ(D_ERROR, req, "dropping reply");
index bb2246d3b22b51978ef00122710c6c01c67e3f61..cd340fc8ceab45238e51449434f130973b61cda4 100644 (file)
@@ -1528,7 +1528,7 @@ struct ldlm_lock *ldlm_lock_create(struct ldlm_namespace *ns,
        if (lvb_len) {
                lock->l_lvb_len = lvb_len;
                lock->l_lvb_data = kzalloc(lvb_len, GFP_NOFS);
-               if (lock->l_lvb_data == NULL)
+               if (!lock->l_lvb_data)
                        goto out;
        }
 
@@ -1813,7 +1813,7 @@ int ldlm_run_ast_work(struct ldlm_namespace *ns, struct list_head *rpc_list,
                return 0;
 
        arg = kzalloc(sizeof(*arg), GFP_NOFS);
-       if (arg == NULL)
+       if (!arg)
                return -ENOMEM;
 
        atomic_set(&arg->restart, 0);
index b7b6ca1196b7fba3f291b7f4afa7193d07b49e30..ac79db952da78babfedf328047d798526e74780a 100644 (file)
@@ -76,15 +76,6 @@ inline unsigned long round_timeout(unsigned long timeout)
        return cfs_time_seconds((int)cfs_duration_sec(cfs_time_sub(timeout, 0)) + 1);
 }
 
-/* timeout for initial callback (AST) reply (bz10399) */
-static inline unsigned int ldlm_get_rq_timeout(void)
-{
-       /* Non-AT value */
-       unsigned int timeout = min(ldlm_timeout, obd_timeout / 3);
-
-       return timeout < 1 ? 1 : timeout;
-}
-
 #define ELT_STOPPED   0
 #define ELT_READY     1
 #define ELT_TERMINATE 2
@@ -225,7 +216,7 @@ static void ldlm_handle_cp_callback(struct ptlrpc_request *req,
                        void *lvb_data;
 
                        lvb_data = kzalloc(lvb_len, GFP_NOFS);
-                       if (lvb_data == NULL) {
+                       if (!lvb_data) {
                                LDLM_ERROR(lock, "No memory: %d.\n", lvb_len);
                                rc = -ENOMEM;
                                goto out;
@@ -453,7 +444,7 @@ static int ldlm_bl_to_thread(struct ldlm_namespace *ns,
                struct ldlm_bl_work_item *blwi;
 
                blwi = kzalloc(sizeof(*blwi), GFP_NOFS);
-               if (blwi == NULL)
+               if (!blwi)
                        return -ENOMEM;
                init_blwi(blwi, ns, ld, cancels, count, lock, cancel_flags);
 
@@ -1053,7 +1044,7 @@ static int ldlm_setup(void)
                return -EALREADY;
 
        ldlm_state = kzalloc(sizeof(*ldlm_state), GFP_NOFS);
-       if (ldlm_state == NULL)
+       if (!ldlm_state)
                return -ENOMEM;
 
        ldlm_kobj = kobject_create_and_add("ldlm", lustre_kobj);
@@ -1123,7 +1114,7 @@ static int ldlm_setup(void)
 
 
        blp = kzalloc(sizeof(*blp), GFP_NOFS);
-       if (blp == NULL) {
+       if (!blp) {
                rc = -ENOMEM;
                goto out;
        }
index 1605b9c692715512109da73215a7e9ec1c597738..c234acb85f10063cef7aa0a8c9b8f71c8519b8b2 100644 (file)
@@ -1422,7 +1422,7 @@ static int ldlm_pools_thread_start(void)
                return -EALREADY;
 
        ldlm_pools_thread = kzalloc(sizeof(*ldlm_pools_thread), GFP_NOFS);
-       if (ldlm_pools_thread == NULL)
+       if (!ldlm_pools_thread)
                return -ENOMEM;
 
        init_completion(&ldlm_pools_comp);
@@ -1486,8 +1486,10 @@ EXPORT_SYMBOL(ldlm_pools_init);
 
 void ldlm_pools_fini(void)
 {
-       unregister_shrinker(&ldlm_pools_srv_shrinker);
-       unregister_shrinker(&ldlm_pools_cli_shrinker);
+       if (ldlm_pools_thread) {
+               unregister_shrinker(&ldlm_pools_srv_shrinker);
+               unregister_shrinker(&ldlm_pools_cli_shrinker);
+       }
        ldlm_pools_thread_stop();
 }
 EXPORT_SYMBOL(ldlm_pools_fini);
index cdb63665a11389ba685dc6e7b05462f0158cee17..4bb3173bcd5f18d0c7d4467b0b330f59e892e401 100644 (file)
@@ -939,6 +939,7 @@ void ldlm_namespace_free_post(struct ldlm_namespace *ns)
        ldlm_pool_fini(&ns->ns_pool);
 
        ldlm_namespace_debugfs_unregister(ns);
+       ldlm_namespace_sysfs_unregister(ns);
        cfs_hash_putref(ns->ns_rs_hash);
        /* Namespace \a ns should be not on list at this time, otherwise
         * this will cause issues related to using freed \a ns in poold
index 021c92fa0333f2cd92c91b10762fcbceac7ed723..e93f556fac0dde68da054320fc320815c1025258 100644 (file)
@@ -57,8 +57,42 @@ module_param(libcfs_debug, int, 0644);
 MODULE_PARM_DESC(libcfs_debug, "Lustre kernel debug mask");
 EXPORT_SYMBOL(libcfs_debug);
 
+static int libcfs_param_debug_mb_set(const char *val,
+                                    const struct kernel_param *kp)
+{
+       int rc;
+       unsigned num;
+
+       rc = kstrtouint(val, 0, &num);
+       if (rc < 0)
+               return rc;
+
+       if (!*((unsigned int *)kp->arg)) {
+               *((unsigned int *)kp->arg) = num;
+               return 0;
+       }
+
+       rc = cfs_trace_set_debug_mb(num);
+
+       if (!rc)
+               *((unsigned int *)kp->arg) = cfs_trace_get_debug_mb();
+
+       return rc;
+}
+
+/* While debug_mb setting look like unsigned int, in fact
+ * it needs quite a bunch of extra processing, so we define special
+ * debugmb parameter type with corresponding methods to handle this case */
+static struct kernel_param_ops param_ops_debugmb = {
+       .set = libcfs_param_debug_mb_set,
+       .get = param_get_uint,
+};
+
+#define param_check_debugmb(name, p) \
+               __param_check(name, p, unsigned int)
+
 static unsigned int libcfs_debug_mb;
-module_param(libcfs_debug_mb, uint, 0644);
+module_param(libcfs_debug_mb, debugmb, 0644);
 MODULE_PARM_DESC(libcfs_debug_mb, "Total debug buffer size.");
 EXPORT_SYMBOL(libcfs_debug_mb);
 
@@ -72,18 +106,106 @@ module_param(libcfs_console_ratelimit, uint, 0644);
 MODULE_PARM_DESC(libcfs_console_ratelimit, "Lustre kernel debug console ratelimit (0 to disable)");
 EXPORT_SYMBOL(libcfs_console_ratelimit);
 
+static int param_set_delay_minmax(const char *val,
+                                 const struct kernel_param *kp,
+                                 long min, long max)
+{
+       long d;
+       int sec;
+       int rc;
+
+       rc = kstrtoint(val, 0, &sec);
+       if (rc)
+               return -EINVAL;
+
+       d = cfs_time_seconds(sec) / 100;
+       if (d < min || d > max)
+               return -EINVAL;
+
+       *((unsigned int *)kp->arg) = d;
+
+       return 0;
+}
+
+static int param_get_delay(char *buffer, const struct kernel_param *kp)
+{
+       unsigned int d = *(unsigned int *)kp->arg;
+
+       return sprintf(buffer, "%u", (unsigned int)cfs_duration_sec(d * 100));
+}
+
 unsigned int libcfs_console_max_delay;
-module_param(libcfs_console_max_delay, uint, 0644);
-MODULE_PARM_DESC(libcfs_console_max_delay, "Lustre kernel debug console max delay (jiffies)");
 EXPORT_SYMBOL(libcfs_console_max_delay);
-
 unsigned int libcfs_console_min_delay;
-module_param(libcfs_console_min_delay, uint, 0644);
-MODULE_PARM_DESC(libcfs_console_min_delay, "Lustre kernel debug console min delay (jiffies)");
 EXPORT_SYMBOL(libcfs_console_min_delay);
 
+static int param_set_console_max_delay(const char *val,
+                                      const struct kernel_param *kp)
+{
+       return param_set_delay_minmax(val, kp,
+                                     libcfs_console_min_delay, INT_MAX);
+}
+
+static struct kernel_param_ops param_ops_console_max_delay = {
+       .set = param_set_console_max_delay,
+       .get = param_get_delay,
+};
+
+#define param_check_console_max_delay(name, p) \
+               __param_check(name, p, unsigned int)
+
+module_param(libcfs_console_max_delay, console_max_delay, 0644);
+MODULE_PARM_DESC(libcfs_console_max_delay, "Lustre kernel debug console max delay (jiffies)");
+
+static int param_set_console_min_delay(const char *val,
+                                      const struct kernel_param *kp)
+{
+       return param_set_delay_minmax(val, kp,
+                                     1, libcfs_console_max_delay);
+}
+
+static struct kernel_param_ops param_ops_console_min_delay = {
+       .set = param_set_console_min_delay,
+       .get = param_get_delay,
+};
+
+#define param_check_console_min_delay(name, p) \
+               __param_check(name, p, unsigned int)
+
+module_param(libcfs_console_min_delay, console_min_delay, 0644);
+MODULE_PARM_DESC(libcfs_console_min_delay, "Lustre kernel debug console min delay (jiffies)");
+
+static int param_set_uint_minmax(const char *val,
+                                const struct kernel_param *kp,
+                                unsigned int min, unsigned int max)
+{
+       unsigned int num;
+       int ret;
+
+       if (!val)
+               return -EINVAL;
+       ret = kstrtouint(val, 0, &num);
+       if (ret < 0 || num < min || num > max)
+               return -EINVAL;
+       *((unsigned int *)kp->arg) = num;
+       return 0;
+}
+
+static int param_set_uintpos(const char *val, const struct kernel_param *kp)
+{
+       return param_set_uint_minmax(val, kp, 1, -1);
+}
+
+static struct kernel_param_ops param_ops_uintpos = {
+       .set = param_set_uintpos,
+       .get = param_get_uint,
+};
+
+#define param_check_uintpos(name, p) \
+               __param_check(name, p, unsigned int)
+
 unsigned int libcfs_console_backoff = CDEBUG_DEFAULT_BACKOFF;
-module_param(libcfs_console_backoff, uint, 0644);
+module_param(libcfs_console_backoff, uintpos, 0644);
 MODULE_PARM_DESC(libcfs_console_backoff, "Lustre kernel debug console backoff factor");
 EXPORT_SYMBOL(libcfs_console_backoff);
 
@@ -93,23 +215,14 @@ EXPORT_SYMBOL(libcfs_debug_binary);
 unsigned int libcfs_stack = 3 * THREAD_SIZE / 4;
 EXPORT_SYMBOL(libcfs_stack);
 
-static unsigned int portal_enter_debugger;
-EXPORT_SYMBOL(portal_enter_debugger);
-
 unsigned int libcfs_catastrophe;
 EXPORT_SYMBOL(libcfs_catastrophe);
 
-unsigned int libcfs_watchdog_ratelimit = 300;
-EXPORT_SYMBOL(libcfs_watchdog_ratelimit);
-
 unsigned int libcfs_panic_on_lbug = 1;
 module_param(libcfs_panic_on_lbug, uint, 0644);
 MODULE_PARM_DESC(libcfs_panic_on_lbug, "Lustre kernel panic on LBUG");
 EXPORT_SYMBOL(libcfs_panic_on_lbug);
 
-atomic_t libcfs_kmemory = ATOMIC_INIT(0);
-EXPORT_SYMBOL(libcfs_kmemory);
-
 static wait_queue_head_t debug_ctlwq;
 
 char libcfs_debug_file_path_arr[PATH_MAX] = LIBCFS_DEBUG_FILE_PATH_DEFAULT;
@@ -414,8 +527,10 @@ int libcfs_debug_init(unsigned long bufsize)
        }
        rc = cfs_tracefile_init(max);
 
-       if (rc == 0)
+       if (rc == 0) {
                libcfs_register_panic_notifier();
+               libcfs_debug_mb = cfs_trace_get_debug_mb();
+       }
 
        return rc;
 }
index 7b7fc215e633298025042a650cb86f0985552444..42d615fbd664f9ba90552690dfd614a52ac2ea8d 100644 (file)
@@ -123,7 +123,7 @@ EXPORT_SYMBOL(__cfs_fail_check_set);
 
 int __cfs_fail_timeout_set(__u32 id, __u32 value, int ms, int set)
 {
-       int ret = 0;
+       int ret;
 
        ret = __cfs_fail_check_set(id, value, set);
        if (ret) {
index 31a558115a96b427d9453dd6bc1ac385a278fa73..933525c73da1ba24e1e35b69e6358171d31bd8fb 100644 (file)
@@ -78,7 +78,7 @@ EXPORT_SYMBOL(cfs_cpt_table_free);
 int
 cfs_cpt_table_print(struct cfs_cpt_table *cptab, char *buf, int len)
 {
-       int     rc = 0;
+       int     rc;
 
        rc = snprintf(buf, len, "%d\t: %d\n", 0, 0);
        len -= rc;
index 76d4392bd28249c1d2611c2989be7ffd3c87d342..efe5e667a2e56292d2557492b0290fe0b38f7adc 100644 (file)
@@ -231,7 +231,7 @@ cfs_str2num_check(char *str, int nob, unsigned *num,
        char    *endp;
 
        str = cfs_trimwhite(str);
-       *num = strtoul(str, &endp, 0);
+       *num = simple_strtoul(str, &endp, 0);
        if (endp == str)
                return 0;
 
@@ -400,7 +400,7 @@ cfs_expr_list_free(struct cfs_expr_list *expr_list)
                struct cfs_range_expr *expr;
 
                expr = list_entry(expr_list->el_exprs.next,
-                                     struct cfs_range_expr, re_link),
+                                     struct cfs_range_expr, re_link);
                list_del(&expr->re_link);
                LIBCFS_FREE(expr, sizeof(*expr));
        }
index aa3fffed1519fa85441435361fe95320db53190f..fbbc8a7e308dc40f5e5d714723a0849951509a07 100644 (file)
@@ -114,7 +114,7 @@ int cfs_crypto_hash_digest(unsigned char alg_id,
                crypto_free_hash(hdesc.tfm);
                return -ENOSPC;
        }
-       sg_init_one(&sl, (void *)buf, buf_len);
+       sg_init_one(&sl, buf, buf_len);
 
        hdesc.flags = 0;
        err = crypto_hash_digest(&hdesc, &sl, sl.length, hash);
@@ -165,7 +165,7 @@ int cfs_crypto_hash_update(struct cfs_crypto_hash_desc *hdesc,
 {
        struct scatterlist sl;
 
-       sg_init_one(&sl, (void *)buf, buf_len);
+       sg_init_one(&sl, buf, buf_len);
 
        return crypto_hash_update((struct hash_desc *)hdesc, &sl, sl.length);
 }
index e962f89683a60cdb68ee67b3070bc185d783027e..78acff0682170c2c212fa412580baf3b382279ad 100644 (file)
@@ -49,7 +49,7 @@ int libcfs_ioctl_getdata(char *buf, char *end, void *arg)
        hdr = (struct libcfs_ioctl_hdr *)buf;
        data = (struct libcfs_ioctl_data *)buf;
 
-       if (copy_from_user(buf, (void *)arg, sizeof(*hdr)))
+       if (copy_from_user(buf, arg, sizeof(*hdr)))
                return -EFAULT;
 
        if (hdr->ioc_version != LIBCFS_IOCTL_VERSION) {
@@ -69,7 +69,7 @@ int libcfs_ioctl_getdata(char *buf, char *end, void *arg)
        }
 
        orig_len = hdr->ioc_len;
-       if (copy_from_user(buf, (void *)arg, hdr->ioc_len))
+       if (copy_from_user(buf, arg, hdr->ioc_len))
                return -EFAULT;
        if (orig_len != data->ioc_len)
                return -EINVAL;
index e60b2e9b91944ad1f2d22a7cc4d9d59f872f12f9..1ab4232e0705effc18e7f6991b04b041fe42097d 100644 (file)
@@ -50,6 +50,7 @@
 #include <linux/list.h>
 
 #include <linux/sysctl.h>
+#include <linux/debugfs.h>
 
 # define DEBUG_SUBSYSTEM S_LNET
 
@@ -69,44 +70,17 @@ extern struct miscdevice libcfs_dev;
 extern struct cfs_wi_sched *cfs_sched_rehash;
 extern void libcfs_init_nidstrings(void);
 
-static int insert_proc(void);
-static void remove_proc(void);
+static void insert_debugfs(void);
+static void remove_debugfs(void);
 
-static struct ctl_table_header *lnet_table_header;
+static struct dentry *lnet_debugfs_root;
 extern char lnet_upcall[1024];
 /**
  * The path of debug log dump upcall script.
  */
 extern char lnet_debug_log_upcall[1024];
 
-#define CTL_LNET       (0x100)
-
-enum {
-       PSDEV_DEBUG = 1,          /* control debugging */
-       PSDEV_SUBSYSTEM_DEBUG,    /* control debugging */
-       PSDEV_PRINTK,        /* force all messages to console */
-       PSDEV_CONSOLE_RATELIMIT,  /* ratelimit console messages */
-       PSDEV_CONSOLE_MAX_DELAY_CS, /* maximum delay over which we skip messages */
-       PSDEV_CONSOLE_MIN_DELAY_CS, /* initial delay over which we skip messages */
-       PSDEV_CONSOLE_BACKOFF,    /* delay increase factor */
-       PSDEV_DEBUG_PATH,        /* crashdump log location */
-       PSDEV_DEBUG_DUMP_PATH,    /* crashdump tracelog location */
-       PSDEV_CPT_TABLE,          /* information about cpu partitions */
-       PSDEV_LNET_UPCALL,      /* User mode upcall script  */
-       PSDEV_LNET_MEMUSED,       /* bytes currently PORTAL_ALLOCated */
-       PSDEV_LNET_CATASTROPHE,   /* if we have LBUGged or panic'd */
-       PSDEV_LNET_PANIC_ON_LBUG, /* flag to panic on LBUG */
-       PSDEV_LNET_DUMP_KERNEL,   /* snapshot kernel debug buffer to file */
-       PSDEV_LNET_DAEMON_FILE,   /* spool kernel debug buffer to file */
-       PSDEV_LNET_DEBUG_MB,      /* size of debug buffer */
-       PSDEV_LNET_DEBUG_LOG_UPCALL, /* debug log upcall script */
-       PSDEV_LNET_WATCHDOG_RATELIMIT,  /* ratelimit watchdog messages  */
-       PSDEV_LNET_FORCE_LBUG,    /* hook to force an LBUG */
-       PSDEV_LNET_FAIL_LOC,      /* control test failures instrumentation */
-       PSDEV_LNET_FAIL_VAL,      /* userdata for fail loc */
-};
-
-static void kportal_memhog_free (struct libcfs_device_userstate *ldu)
+static void kportal_memhog_free(struct libcfs_device_userstate *ldu)
 {
        struct page **level0p = &ldu->ldu_memhog_root_page;
        struct page **level1p;
@@ -146,7 +120,7 @@ static void kportal_memhog_free (struct libcfs_device_userstate *ldu)
                *level0p = NULL;
        }
 
-       LASSERT (ldu->ldu_memhog_pages == 0);
+       LASSERT(ldu->ldu_memhog_pages == 0);
 }
 
 static int kportal_memhog_alloc(struct libcfs_device_userstate *ldu, int npages,
@@ -158,8 +132,8 @@ static int kportal_memhog_alloc(struct libcfs_device_userstate *ldu, int npages,
        int        count1;
        int        count2;
 
-       LASSERT (ldu->ldu_memhog_pages == 0);
-       LASSERT (ldu->ldu_memhog_root_page == NULL);
+       LASSERT(ldu->ldu_memhog_pages == 0);
+       LASSERT(ldu->ldu_memhog_root_page == NULL);
 
        if (npages < 0)
                return -EINVAL;
@@ -338,7 +312,7 @@ static int libcfs_ioctl_int(struct cfs_psdev_file *pfile, unsigned long cmd,
                        if (err != -EINVAL) {
                                if (err == 0)
                                        err = libcfs_ioctl_popdata(arg,
-                                                       data, sizeof (*data));
+                                                       data, sizeof(*data));
                                break;
                        }
                }
@@ -428,17 +402,10 @@ static int init_libcfs_module(void)
                goto cleanup_wi;
        }
 
+       insert_debugfs();
 
-       rc = insert_proc();
-       if (rc) {
-               CERROR("insert_proc: error %d\n", rc);
-               goto cleanup_crypto;
-       }
-
-       CDEBUG (D_OTHER, "portals setup OK\n");
+       CDEBUG(D_OTHER, "portals setup OK\n");
        return 0;
- cleanup_crypto:
-       cfs_crypto_unregister();
  cleanup_wi:
        cfs_wi_shutdown();
  cleanup_deregister:
@@ -454,10 +421,7 @@ static void exit_libcfs_module(void)
 {
        int rc;
 
-       remove_proc();
-
-       CDEBUG(D_MALLOC, "before Portals cleanup: kmem %d\n",
-              atomic_read(&libcfs_kmemory));
+       remove_debugfs();
 
        if (cfs_sched_rehash != NULL) {
                cfs_wi_sched_destroy(cfs_sched_rehash);
@@ -473,10 +437,6 @@ static void exit_libcfs_module(void)
 
        cfs_cpu_fini();
 
-       if (atomic_read(&libcfs_kmemory) != 0)
-               CERROR("Portals memory leaked: %d bytes\n",
-                      atomic_read(&libcfs_kmemory));
-
        rc = libcfs_debug_cleanup();
        if (rc)
                pr_err("LustreError: libcfs_debug_cleanup: %d\n", rc);
@@ -551,9 +511,6 @@ static int proc_dobitmasks(struct ctl_table *table, int write,
                                 __proc_dobitmasks);
 }
 
-static int min_watchdog_ratelimit;       /* disable ratelimiting */
-static int max_watchdog_ratelimit = (24*60*60); /* limit to once per day */
-
 static int __proc_dump_kernel(void *data, int write,
                              loff_t pos, void __user *buffer, int nob)
 {
@@ -593,125 +550,6 @@ static int proc_daemon_file(struct ctl_table *table, int write,
                                 __proc_daemon_file);
 }
 
-static int __proc_debug_mb(void *data, int write,
-                          loff_t pos, void __user *buffer, int nob)
-{
-       if (!write) {
-               char tmpstr[32];
-               int  len = snprintf(tmpstr, sizeof(tmpstr), "%d",
-                                   cfs_trace_get_debug_mb());
-
-               if (pos >= len)
-                       return 0;
-
-               return cfs_trace_copyout_string(buffer, nob, tmpstr + pos,
-                      "\n");
-       }
-
-       return cfs_trace_set_debug_mb_usrstr(buffer, nob);
-}
-
-static int proc_debug_mb(struct ctl_table *table, int write,
-                        void __user *buffer, size_t *lenp, loff_t *ppos)
-{
-       return proc_call_handler(table->data, write, ppos, buffer, lenp,
-                                __proc_debug_mb);
-}
-
-static int proc_console_max_delay_cs(struct ctl_table *table, int write,
-                                    void __user *buffer, size_t *lenp,
-                                    loff_t *ppos)
-{
-       int rc, max_delay_cs;
-       struct ctl_table dummy = *table;
-       long d;
-
-       dummy.data = &max_delay_cs;
-       dummy.proc_handler = &proc_dointvec;
-
-       if (!write) { /* read */
-               max_delay_cs = cfs_duration_sec(libcfs_console_max_delay * 100);
-               rc = proc_dointvec(&dummy, write, buffer, lenp, ppos);
-               return rc;
-       }
-
-       /* write */
-       max_delay_cs = 0;
-       rc = proc_dointvec(&dummy, write, buffer, lenp, ppos);
-       if (rc < 0)
-               return rc;
-       if (max_delay_cs <= 0)
-               return -EINVAL;
-
-       d = cfs_time_seconds(max_delay_cs) / 100;
-       if (d == 0 || d < libcfs_console_min_delay)
-               return -EINVAL;
-       libcfs_console_max_delay = d;
-
-       return rc;
-}
-
-static int proc_console_min_delay_cs(struct ctl_table *table, int write,
-                                    void __user *buffer, size_t *lenp,
-                                    loff_t *ppos)
-{
-       int rc, min_delay_cs;
-       struct ctl_table dummy = *table;
-       long d;
-
-       dummy.data = &min_delay_cs;
-       dummy.proc_handler = &proc_dointvec;
-
-       if (!write) { /* read */
-               min_delay_cs = cfs_duration_sec(libcfs_console_min_delay * 100);
-               rc = proc_dointvec(&dummy, write, buffer, lenp, ppos);
-               return rc;
-       }
-
-       /* write */
-       min_delay_cs = 0;
-       rc = proc_dointvec(&dummy, write, buffer, lenp, ppos);
-       if (rc < 0)
-               return rc;
-       if (min_delay_cs <= 0)
-               return -EINVAL;
-
-       d = cfs_time_seconds(min_delay_cs) / 100;
-       if (d == 0 || d > libcfs_console_max_delay)
-               return -EINVAL;
-       libcfs_console_min_delay = d;
-
-       return rc;
-}
-
-static int proc_console_backoff(struct ctl_table *table, int write,
-                               void __user *buffer, size_t *lenp, loff_t *ppos)
-{
-       int rc, backoff;
-       struct ctl_table dummy = *table;
-
-       dummy.data = &backoff;
-       dummy.proc_handler = &proc_dointvec;
-
-       if (!write) { /* read */
-               backoff = libcfs_console_backoff;
-               rc = proc_dointvec(&dummy, write, buffer, lenp, ppos);
-               return rc;
-       }
-
-       /* write */
-       backoff = 0;
-       rc = proc_dointvec(&dummy, write, buffer, lenp, ppos);
-       if (rc < 0)
-               return rc;
-       if (backoff <= 0)
-               return -EINVAL;
-
-       libcfs_console_backoff = backoff;
-
-       return rc;
-}
-
 static int libcfs_force_lbug(struct ctl_table *table, int write,
                             void __user *buffer,
                             size_t *lenp, loff_t *ppos)
@@ -808,40 +646,6 @@ static struct ctl_table lnet_table[] = {
                .mode     = 0644,
                .proc_handler = &proc_dobitmasks,
        },
-       {
-               .procname = "console_ratelimit",
-               .data     = &libcfs_console_ratelimit,
-               .maxlen   = sizeof(int),
-               .mode     = 0644,
-               .proc_handler = &proc_dointvec
-       },
-       {
-               .procname = "console_max_delay_centisecs",
-               .maxlen   = sizeof(int),
-               .mode     = 0644,
-               .proc_handler = &proc_console_max_delay_cs
-       },
-       {
-               .procname = "console_min_delay_centisecs",
-               .maxlen   = sizeof(int),
-               .mode     = 0644,
-               .proc_handler = &proc_console_min_delay_cs
-       },
-       {
-               .procname = "console_backoff",
-               .maxlen   = sizeof(int),
-               .mode     = 0644,
-               .proc_handler = &proc_console_backoff
-       },
-
-       {
-               .procname = "debug_path",
-               .data     = libcfs_debug_file_path_arr,
-               .maxlen   = sizeof(libcfs_debug_file_path_arr),
-               .mode     = 0644,
-               .proc_handler = &proc_dostring,
-       },
-
        {
                .procname = "cpu_partition_table",
                .maxlen   = 128,
@@ -863,13 +667,6 @@ static struct ctl_table lnet_table[] = {
                .mode     = 0644,
                .proc_handler = &proc_dostring,
        },
-       {
-               .procname = "lnet_memused",
-               .data     = (int *)&libcfs_kmemory.counter,
-               .maxlen   = sizeof(int),
-               .mode     = 0444,
-               .proc_handler = &proc_dointvec,
-       },
        {
                .procname = "catastrophe",
                .data     = &libcfs_catastrophe,
@@ -877,13 +674,6 @@ static struct ctl_table lnet_table[] = {
                .mode     = 0444,
                .proc_handler = &proc_dointvec,
        },
-       {
-               .procname = "panic_on_lbug",
-               .data     = &libcfs_panic_on_lbug,
-               .maxlen   = sizeof(int),
-               .mode     = 0644,
-               .proc_handler = &proc_dointvec,
-       },
        {
                .procname = "dump_kernel",
                .maxlen   = 256,
@@ -896,20 +686,6 @@ static struct ctl_table lnet_table[] = {
                .maxlen   = 256,
                .proc_handler = &proc_daemon_file,
        },
-       {
-               .procname = "debug_mb",
-               .mode     = 0644,
-               .proc_handler = &proc_debug_mb,
-       },
-       {
-               .procname = "watchdog_ratelimit",
-               .data     = &libcfs_watchdog_ratelimit,
-               .maxlen   = sizeof(int),
-               .mode     = 0644,
-               .proc_handler = &proc_dointvec_minmax,
-               .extra1   = &min_watchdog_ratelimit,
-               .extra2   = &max_watchdog_ratelimit,
-       },
        {
                .procname = "force_lbug",
                .data     = NULL,
@@ -935,31 +711,93 @@ static struct ctl_table lnet_table[] = {
        }
 };
 
-static struct ctl_table top_table[] = {
-       {
-               .procname = "lnet",
-               .mode     = 0555,
-               .data     = NULL,
-               .maxlen   = 0,
-               .child    = lnet_table,
-       },
-       {
-       }
+struct lnet_debugfs_symlink_def {
+       char *name;
+       char *target;
 };
 
-static int insert_proc(void)
+struct lnet_debugfs_symlink_def lnet_debugfs_symlinks[] = {
+       { "console_ratelimit",
+         "/sys/module/libcfs/parameters/libcfs_console_ratelimit"},
+       { "debug_path",
+         "/sys/module/libcfs/parameters/libcfs_debug_file_path"},
+       { "panic_on_lbug",
+         "/sys/module/libcfs/parameters/libcfs_panic_on_lbug"},
+       { "libcfs_console_backoff",
+         "/sys/module/libcfs/parameters/libcfs_console_backoff"},
+       { "debug_mb",
+         "/sys/module/libcfs/parameters/libcfs_debug_mb"},
+       { "console_min_delay_centisecs",
+         "/sys/module/libcfs/parameters/libcfs_console_min_delay"},
+       { "console_max_delay_centisecs",
+         "/sys/module/libcfs/parameters/libcfs_console_max_delay"},
+       {},
+};
+
+static ssize_t lnet_debugfs_read(struct file *filp, char __user *buf,
+                                size_t count, loff_t *ppos)
 {
-       if (lnet_table_header == NULL)
-               lnet_table_header = register_sysctl_table(top_table);
-       return 0;
+       struct ctl_table *table = filp->private_data;
+       int error;
+
+       error = table->proc_handler(table, 0, (void __user *)buf, &count, ppos);
+       if (!error)
+               error = count;
+
+       return error;
+}
+
+static ssize_t lnet_debugfs_write(struct file *filp, const char __user *buf,
+                                 size_t count, loff_t *ppos)
+{
+       struct ctl_table *table = filp->private_data;
+       int error;
+
+       error = table->proc_handler(table, 1, (void __user *)buf, &count, ppos);
+       if (!error)
+               error = count;
+
+       return error;
+}
+
+static const struct file_operations lnet_debugfs_file_operations = {
+       .open           = simple_open,
+       .read           = lnet_debugfs_read,
+       .write          = lnet_debugfs_write,
+       .llseek         = default_llseek,
+};
+
+static void insert_debugfs(void)
+{
+       struct ctl_table *table;
+       struct dentry *entry;
+       struct lnet_debugfs_symlink_def *symlinks;
+
+       if (lnet_debugfs_root == NULL)
+               lnet_debugfs_root = debugfs_create_dir("lnet", NULL);
+
+       /* Even if we cannot create, just ignore it altogether) */
+       if (IS_ERR_OR_NULL(lnet_debugfs_root))
+               return;
+
+       for (table = lnet_table; table->procname; table++)
+               entry = debugfs_create_file(table->procname, table->mode,
+                                           lnet_debugfs_root, table,
+                                           &lnet_debugfs_file_operations);
+
+       for (symlinks = lnet_debugfs_symlinks; symlinks->name; symlinks++)
+               entry = debugfs_create_symlink(symlinks->name,
+                                              lnet_debugfs_root,
+                                              symlinks->target);
+
 }
 
-static void remove_proc(void)
+static void remove_debugfs(void)
 {
-       if (lnet_table_header != NULL)
-               unregister_sysctl_table(lnet_table_header);
+       if (lnet_debugfs_root != NULL)
+               debugfs_remove_recursive(lnet_debugfs_root);
 
-       lnet_table_header = NULL;
+       lnet_debugfs_root = NULL;
 }
 
 MODULE_VERSION("1.0.0");
index 6ee2adcf8890a5b444346333f4fdd9f718333362..effa2af58c13a905a60f108cae21a8af8a79eead 100644 (file)
@@ -937,18 +937,6 @@ int cfs_trace_set_debug_mb(int mb)
        return 0;
 }
 
-int cfs_trace_set_debug_mb_usrstr(void __user *usr_str, int usr_str_nob)
-{
-       char     str[32];
-       int      rc;
-
-       rc = cfs_trace_copyin_string(str, sizeof(str), usr_str, usr_str_nob);
-       if (rc < 0)
-               return rc;
-
-       return cfs_trace_set_debug_mb(simple_strtoul(str, NULL, 0));
-}
-
 int cfs_trace_get_debug_mb(void)
 {
        int i;
index 0601476e1dc32a64d4fca214a2ddd35e3e9c2774..8d993f4d24c8277f543353f6bbaac3b0b55752a9 100644 (file)
@@ -77,7 +77,6 @@ int cfs_trace_dump_debug_buffer_usrstr(void __user *usr_str, int usr_str_nob);
 int cfs_trace_daemon_command(char *str);
 int cfs_trace_daemon_command_usrstr(void __user *usr_str, int usr_str_nob);
 int cfs_trace_set_debug_mb(int mb);
-int cfs_trace_set_debug_mb_usrstr(void __user *usr_str, int usr_str_nob);
 int cfs_trace_get_debug_mb(void);
 
 extern void libcfs_debug_dumplog_internal(void *arg);
index 7b008a64707d7adb5b5ccc0163be5745bc5fd8f0..b86685912d28c9dc74c0e62743dd441dbd2773e0 100644 (file)
@@ -250,7 +250,6 @@ void ll_intent_release(struct lookup_intent *it)
 void ll_invalidate_aliases(struct inode *inode)
 {
        struct dentry *dentry;
-       struct ll_d_hlist_node *p;
 
        LASSERT(inode != NULL);
 
@@ -258,7 +257,7 @@ void ll_invalidate_aliases(struct inode *inode)
               inode->i_ino, inode->i_generation, inode);
 
        ll_lock_dcache(inode);
-       ll_d_hlist_for_each_entry(dentry, p, &inode->i_dentry, d_u.d_alias) {
+       hlist_for_each_entry(dentry, &inode->i_dentry, d_u.d_alias) {
                CDEBUG(D_DENTRY, "dentry in drop %pd (%p) parent %p inode %p flags %d\n",
                       dentry, dentry, dentry->d_parent,
                       d_inode(dentry), dentry->d_flags);
index 3d746a94f92edc66d5d9057836d85e4fa1e0460c..769b61193d87ef29c7868465c50e9b8ab87ee045 100644 (file)
@@ -203,7 +203,6 @@ static int ll_dir_filler(void *_hash, struct page *page0)
 
        CDEBUG(D_VFSTRACE, "read %d/%d pages\n", nrdpgs, npages);
 
-       ll_pagevec_init(&lru_pvec, 0);
        for (i = 1; i < npages; i++) {
                unsigned long offset;
                int ret;
@@ -228,15 +227,12 @@ static int ll_dir_filler(void *_hash, struct page *page0)
                                            GFP_KERNEL);
                if (ret == 0) {
                        unlock_page(page);
-                       if (ll_pagevec_add(&lru_pvec, page) == 0)
-                               ll_pagevec_lru_add_file(&lru_pvec);
                } else {
                        CDEBUG(D_VFSTRACE, "page %lu add to page cache failed: %d\n",
                               offset, ret);
                }
                page_cache_release(page);
        }
-       ll_pagevec_lru_add_file(&lru_pvec);
 
        if (page_pool != &page0)
                kfree(page_pool);
index 3075db211106a12e9b27c77a9fdb848f389349e7..dcd0c6d65efbcb4f475a92458b013c67a6c1d9c1 100644 (file)
@@ -702,8 +702,7 @@ out_och_free:
 out_openerr:
                if (opendir_set != 0)
                        ll_stop_statahead(inode, lli->lli_opendir_key);
-               if (fd != NULL)
-                       ll_file_data_put(fd);
+               ll_file_data_put(fd);
        } else {
                ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_OPEN, 1);
        }
@@ -3005,7 +3004,7 @@ int ll_getattr(struct vfsmount *mnt, struct dentry *de, struct kstat *stat)
        struct inode *inode = d_inode(de);
        struct ll_sb_info *sbi = ll_i2sbi(inode);
        struct ll_inode_info *lli = ll_i2info(inode);
-       int res = 0;
+       int res;
 
        res = ll_inode_revalidate(de, MDS_INODELOCK_UPDATE |
                                      MDS_INODELOCK_LOOKUP);
index a6268718b76e6f067f66a7abd8adc4435cf94fbd..24590ae36090f1070c537273e7dd963702b27d5c 100644 (file)
@@ -70,7 +70,8 @@ static unsigned long long ll_capa_renewal_retries;
 
 static int ll_update_capa(struct obd_capa *ocapa, struct lustre_capa *capa);
 
-static inline void update_capa_timer(struct obd_capa *ocapa, unsigned long expiry)
+static inline void update_capa_timer(struct obd_capa *ocapa,
+                                    unsigned long expiry)
 {
        if (time_before(expiry, ll_capa_timer.expires) ||
            !timer_pending(&ll_capa_timer)) {
@@ -102,13 +103,13 @@ static inline int have_expired_capa(void)
        spin_lock(&capa_lock);
        if (!list_empty(ll_capa_list)) {
                ocapa = list_entry(ll_capa_list->next, struct obd_capa,
-                                      c_list);
+                                  c_list);
                expired = capa_is_to_expire(ocapa);
                if (!expired)
                        update_capa_timer(ocapa, capa_renewal_time(ocapa));
        } else if (!list_empty(&ll_idle_capas)) {
                ocapa = list_entry(ll_idle_capas.next, struct obd_capa,
-                                      c_list);
+                                  c_list);
                expired = capa_is_expired(ocapa);
                if (!expired)
                        update_capa_timer(ocapa, ocapa->c_expiry);
@@ -165,7 +166,8 @@ static void ll_delete_capa(struct obd_capa *ocapa)
 /* three places where client capa is deleted:
  * 1. capa_thread_main(), main place to delete expired capa.
  * 2. ll_clear_inode_capas() in ll_clear_inode().
- * 3. ll_truncate_free_capa() delete truncate capa explicitly in ll_setattr_ost().
+ * 3. ll_truncate_free_capa() delete truncate capa explicitly in
+ *    ll_setattr_ost().
  */
 static int capa_thread_main(void *unused)
 {
@@ -206,7 +208,8 @@ static int capa_thread_main(void *unused)
                         * lock.
                         */
                        /* ibits may be changed by ll_have_md_lock() so we have
-                        * to set it each time */
+                        * to set it each time
+                        */
                        ibits = MDS_INODELOCK_LOOKUP;
                        if (capa_for_mds(&ocapa->c_capa) &&
                            !S_ISDIR(ocapa->u.cli.inode->i_mode) &&
@@ -225,14 +228,15 @@ static int capa_thread_main(void *unused)
                        if (capa_for_oss(&ocapa->c_capa) &&
                            obd_capa_open_count(ocapa) == 0) {
                                /* oss capa with open count == 0 won't renew,
-                                * move to idle list */
+                                * move to idle list
+                                */
                                sort_add_capa(ocapa, &ll_idle_capas);
                                continue;
                        }
 
                        /* NB iput() is in ll_update_capa() */
                        inode = igrab(ocapa->u.cli.inode);
-                       if (inode == NULL) {
+                       if (!inode) {
                                DEBUG_CAPA(D_ERROR, &ocapa->c_capa,
                                           "igrab failed for");
                                continue;
@@ -255,7 +259,7 @@ static int capa_thread_main(void *unused)
                        update_capa_timer(next, capa_renewal_time(next));
 
                list_for_each_entry_safe(ocapa, tmp, &ll_idle_capas,
-                                            c_list) {
+                                        c_list) {
                        if (!capa_is_expired(ocapa)) {
                                if (!next)
                                        update_capa_timer(ocapa,
@@ -299,11 +303,11 @@ int ll_capa_thread_start(void)
        task = kthread_run(capa_thread_main, NULL, "ll_capa");
        if (IS_ERR(task)) {
                CERROR("cannot start expired capa thread: rc %ld\n",
-                       PTR_ERR(task));
+                      PTR_ERR(task));
                return PTR_ERR(task);
        }
        wait_event(ll_capa_thread.t_ctl_waitq,
-                      thread_is_running(&ll_capa_thread));
+                  thread_is_running(&ll_capa_thread));
 
        return 0;
 }
@@ -313,7 +317,7 @@ void ll_capa_thread_stop(void)
        thread_set_flags(&ll_capa_thread, SVC_STOPPING);
        wake_up(&ll_capa_thread.t_ctl_waitq);
        wait_event(ll_capa_thread.t_ctl_waitq,
-                      thread_is_stopped(&ll_capa_thread));
+                  thread_is_stopped(&ll_capa_thread));
 }
 
 struct obd_capa *ll_osscapa_get(struct inode *inode, __u64 opc)
@@ -360,7 +364,7 @@ struct obd_capa *ll_osscapa_get(struct inode *inode, __u64 opc)
                ocapa = NULL;
 
                if (atomic_read(&ll_capa_debug)) {
-                       CERROR("no capability for "DFID" opc %#llx\n",
+                       CERROR("no capability for " DFID " opc %#llx\n",
                               PFID(&lli->lli_fid), opc);
                        atomic_set(&ll_capa_debug, 0);
                }
@@ -376,7 +380,7 @@ struct obd_capa *ll_mdscapa_get(struct inode *inode)
        struct ll_inode_info *lli = ll_i2info(inode);
        struct obd_capa *ocapa;
 
-       LASSERT(inode != NULL);
+       LASSERT(inode);
 
        if ((ll_i2sbi(inode)->ll_flags & LL_SBI_MDS_CAPA) == 0)
                return NULL;
@@ -385,7 +389,7 @@ struct obd_capa *ll_mdscapa_get(struct inode *inode)
        ocapa = capa_get(lli->lli_mds_capa);
        spin_unlock(&capa_lock);
        if (!ocapa && atomic_read(&ll_capa_debug)) {
-               CERROR("no mds capability for "DFID"\n", PFID(&lli->lli_fid));
+               CERROR("no mds capability for " DFID "\n", PFID(&lli->lli_fid));
                atomic_set(&ll_capa_debug, 0);
        }
 
@@ -447,7 +451,8 @@ static inline void inode_add_oss_capa(struct inode *inode,
        struct list_head *next = NULL;
 
        /* capa is sorted in lli_oss_capas so lookup can always find the
-        * latest one */
+        * latest one
+        */
        list_for_each_entry(tmp, &lli->lli_oss_capas, u.cli.lli_list) {
                if (cfs_time_after(ocapa->c_expiry, tmp->c_expiry)) {
                        next = &tmp->u.cli.lli_list;
@@ -537,7 +542,8 @@ static int ll_update_capa(struct obd_capa *ocapa, struct lustre_capa *capa)
                        ll_capa_renewal_failed++;
 
                        /* failed capa won't be renewed any longer, but if -EIO,
-                        * client might be doing recovery, retry in 2 min. */
+                        * client might be doing recovery, retry in 2 min.
+                        */
                        if (rc == -EIO && !capa_is_expired(ocapa)) {
                                delay_capa_renew(ocapa, 120);
                                DEBUG_CAPA(D_ERROR, &ocapa->c_capa,
@@ -638,7 +644,7 @@ void ll_clear_inode_capas(struct inode *inode)
                ll_delete_capa(ocapa);
 
        list_for_each_entry_safe(ocapa, tmp, &lli->lli_oss_capas,
-                                    u.cli.lli_list)
+                                u.cli.lli_list)
                ll_delete_capa(ocapa);
        spin_unlock(&capa_lock);
 }
index 25139885b5a769eeedab0fd2859986c1c4684d19..55e2dc6c1fbf9c23be716bf3f5f0b9da5e5eb7c0 100644 (file)
@@ -1114,7 +1114,7 @@ void ll_clear_inode(struct inode *inode)
        if (lli->lli_mds_read_och)
                ll_md_real_close(inode, FMODE_READ);
 
-       if (S_ISLNK(inode->i_mode) && lli->lli_symlink_name) {
+       if (S_ISLNK(inode->i_mode)) {
                kfree(lli->lli_symlink_name);
                lli->lli_symlink_name = NULL;
        }
@@ -1150,6 +1150,8 @@ void ll_clear_inode(struct inode *inode)
        lli->lli_has_smd = false;
 }
 
+#define TIMES_SET_FLAGS (ATTR_MTIME_SET | ATTR_ATIME_SET | ATTR_TIMES_SET)
+
 static int ll_md_setattr(struct dentry *dentry, struct md_op_data *op_data,
                  struct md_open_data **mod)
 {
@@ -1354,11 +1356,8 @@ int ll_setattr_raw(struct dentry *dentry, struct iattr *attr, bool hsm_import)
        if (!op_data)
                return -ENOMEM;
 
-       if (!S_ISDIR(inode->i_mode)) {
-               if (attr->ia_valid & ATTR_SIZE)
-                       inode_dio_write_done(inode);
+       if (!S_ISDIR(inode->i_mode))
                mutex_unlock(&inode->i_mutex);
-       }
 
        memcpy(&op_data->op_attr, attr, sizeof(*attr));
 
index cc00fd10fbcf77654479b2aadf6fda7c75cff91a..56938d2446bf5965a917197a13e0540b11daab3b 100644 (file)
@@ -365,7 +365,7 @@ static void loop_make_request(struct request_queue *q, struct bio *old_bio)
        loop_add_bio(lo, old_bio);
        return;
 err:
-       cfs_bio_io_error(old_bio, old_bio->bi_iter.bi_size);
+       bio_io_error(old_bio);
 }
 
 
@@ -376,7 +376,7 @@ static inline void loop_handle_bio(struct lloop_device *lo, struct bio *bio)
        while (bio) {
                struct bio *tmp = bio->bi_next;
                bio->bi_next = NULL;
-               cfs_bio_endio(bio, bio->bi_iter.bi_size, ret);
+               bio_endio(bio, ret);
                bio = tmp;
        }
 }
index 72ce6e72845fddb1ea575aca3ae867b39184dcc9..05e7dc85989edde49566857d9fec19d6539b3f94 100644 (file)
@@ -144,10 +144,9 @@ struct inode *ll_iget(struct super_block *sb, ino_t hash,
 static void ll_invalidate_negative_children(struct inode *dir)
 {
        struct dentry *dentry, *tmp_subdir;
-       struct ll_d_hlist_node *p;
 
        ll_lock_dcache(dir);
-       ll_d_hlist_for_each_entry(dentry, p, &dir->i_dentry, d_u.d_alias) {
+       hlist_for_each_entry(dentry, &dir->i_dentry, d_u.d_alias) {
                spin_lock(&dentry->d_lock);
                if (!list_empty(&dentry->d_subdirs)) {
                        struct dentry *child;
@@ -334,15 +333,14 @@ void ll_i2gids(__u32 *suppgids, struct inode *i1, struct inode *i2)
 static struct dentry *ll_find_alias(struct inode *inode, struct dentry *dentry)
 {
        struct dentry *alias, *discon_alias, *invalid_alias;
-       struct ll_d_hlist_node *p;
 
-       if (ll_d_hlist_empty(&inode->i_dentry))
+       if (hlist_empty(&inode->i_dentry))
                return NULL;
 
        discon_alias = invalid_alias = NULL;
 
        ll_lock_dcache(inode);
-       ll_d_hlist_for_each_entry(alias, p, &inode->i_dentry, d_u.d_alias) {
+       hlist_for_each_entry(alias, &inode->i_dentry, d_u.d_alias) {
                LASSERT(alias != dentry);
 
                spin_lock(&alias->d_lock);
@@ -690,7 +688,7 @@ static struct inode *ll_create_node(struct inode *dir, struct lookup_intent *it)
                goto out;
        }
 
-       LASSERT(ll_d_hlist_empty(&inode->i_dentry));
+       LASSERT(hlist_empty(&inode->i_dentry));
 
        /* We asked for a lock on the directory, but were granted a
         * lock on the inode.  Since we finally have an inode pointer,
@@ -1008,7 +1006,7 @@ static int ll_unlink(struct inode *dir, struct dentry *dentry)
        return rc;
 }
 
-static int ll_mkdir(struct inode *dir, struct dentry *dentry, ll_umode_t mode)
+static int ll_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
 {
        int err;
 
index 91bba79678cf7da1f1cd303c114648ea76c8e53d..a659962e09c8a49146b80ac74a4ad13356cfa2cb 100644 (file)
@@ -455,12 +455,11 @@ static void vvp_io_setattr_end(const struct lu_env *env,
        struct cl_io *io    = ios->cis_io;
        struct inode *inode = ccc_object_inode(io->ci_obj);
 
-       if (cl_io_is_trunc(io)) {
+       if (cl_io_is_trunc(io))
                /* Truncate in memory pages - they must be clean pages
                 * because osc has already notified to destroy osc_extents. */
                vvp_do_vmtruncate(inode, io->u.ci_setattr.sa_attr.lvb_size);
-               inode_dio_write_done(inode);
-       }
+
        mutex_unlock(&inode->i_mutex);
 }
 
index 954ed08c6af2f740cb879a85468d872d4e9fd110..a3cf5ad20c6036b215092ee3c91bc5a7d2145770 100644 (file)
@@ -227,11 +227,16 @@ static int vvp_page_prep_write(const struct lu_env *env,
                               struct cl_io *unused)
 {
        struct page *vmpage = cl2vm_page(slice);
+       struct cl_page *pg = slice->cpl_page;
 
        LASSERT(PageLocked(vmpage));
        LASSERT(!PageDirty(vmpage));
 
-       set_page_writeback(vmpage);
+       /* ll_writepage path is not a sync write, so need to set page writeback
+        * flag */
+       if (!pg->cp_sync_io)
+               set_page_writeback(vmpage);
+
        vvp_write_pending(cl2ccc(slice->cpl_obj), cl2ccc_page(slice));
 
        return 0;
@@ -298,9 +303,6 @@ static void vvp_page_completion_write(const struct lu_env *env,
        struct cl_page  *pg     = slice->cpl_page;
        struct page      *vmpage = cp->cpg_page;
 
-       LASSERT(ergo(pg->cp_sync_io != NULL, PageLocked(vmpage)));
-       LASSERT(PageWriteback(vmpage));
-
        CL_PAGE_HEADER(D_PAGE, env, pg, "completing WRITE with %d\n", ioret);
 
        /*
@@ -316,14 +318,19 @@ static void vvp_page_completion_write(const struct lu_env *env,
        cp->cpg_write_queued = 0;
        vvp_write_complete(cl2ccc(slice->cpl_obj), cp);
 
-       /*
-        * Only mark the page error only when it's an async write because
-        * applications won't wait for IO to finish.
-        */
-       if (pg->cp_sync_io == NULL)
+       if (pg->cp_sync_io != NULL) {
+               LASSERT(PageLocked(vmpage));
+               LASSERT(!PageWriteback(vmpage));
+       } else {
+               LASSERT(PageWriteback(vmpage));
+               /*
+                * Only mark the page error only when it's an async write
+                * because applications won't wait for IO to finish.
+                */
                vvp_vmpage_error(ccc_object_inode(pg->cp_obj), vmpage, ioret);
 
-       end_page_writeback(vmpage);
+               end_page_writeback(vmpage);
+       }
 }
 
 /**
index 6956dec53fcc5d4f0bff56833e13743b129475de..9e763ce244e3d14d2799ec6440b3b3f0b4bda16b 100644 (file)
@@ -357,7 +357,7 @@ static int ll_xattr_cache_refill(struct inode *inode, struct lookup_intent *oit)
        struct ll_inode_info *lli = ll_i2info(inode);
        struct mdt_body *body;
        __u32 *xsizes;
-       int rc = 0, i;
+       int rc, i;
 
 
 
index cb35f6341fb2d93050d814e77429dbe56aaf8bf6..eebe45bdceb62c1a01b5299456544a472bccd07f 100644 (file)
@@ -100,7 +100,7 @@ static int lmv_intent_remote(struct obd_export *exp, void *lmm,
        }
 
        op_data = kzalloc(sizeof(*op_data), GFP_NOFS);
-       if (op_data == NULL) {
+       if (!op_data) {
                rc = -ENOMEM;
                goto out;
        }
index ac5053cd5da5b7ff61ff382bc1dba756657a2369..c9e0536e9f2a18948b8c9b2aeed7418355cc0604 100644 (file)
@@ -716,7 +716,7 @@ repeat_fid2path:
        if (remote_gf == NULL) {
                remote_gf_size = sizeof(*remote_gf) + PATH_MAX;
                remote_gf = kzalloc(remote_gf_size, GFP_NOFS);
-               if (remote_gf == NULL) {
+               if (!remote_gf) {
                        rc = -ENOMEM;
                        goto out_fid2path;
                }
@@ -1398,7 +1398,7 @@ static int lmv_statfs(const struct lu_env *env, struct obd_export *exp,
                return rc;
 
        temp = kzalloc(sizeof(*temp), GFP_NOFS);
-       if (temp == NULL)
+       if (!temp)
                return -ENOMEM;
 
        for (i = 0; i < lmv->desc.ld_tgt_count; i++) {
@@ -1730,7 +1730,7 @@ lmv_enqueue_remote(struct obd_export *exp, struct ldlm_enqueue_info *einfo,
        }
 
        rdata = kzalloc(sizeof(*rdata), GFP_NOFS);
-       if (rdata == NULL) {
+       if (!rdata) {
                rc = -ENOMEM;
                goto out;
        }
@@ -1993,7 +1993,7 @@ static int lmv_setattr(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     *tgt;
-       int                   rc = 0;
+       int                   rc;
 
        rc = lmv_check_connect(obd);
        if (rc)
index 504b24a468fc13bbd614d52aed9040e09eb16033..8c3bbe574723cc54f4a4d1adf104560d4981ea24 100644 (file)
@@ -478,7 +478,7 @@ static struct lu_device *lov_device_alloc(const struct lu_env *env,
        int rc;
 
        ld = kzalloc(sizeof(*ld), GFP_NOFS);
-       if (ld == NULL)
+       if (!ld)
                return ERR_PTR(-ENOMEM);
 
        cl_device_init(&ld->ld_cl, t);
index 11c1081b1d3df9f7935fba82376c357e81bdd5ed..bf3629151d6879b2ba6c99aadb5a6c90aaede52d 100644 (file)
@@ -181,7 +181,7 @@ static int lov_io_sub_init(const struct lu_env *env, struct lov_io *lio,
                        } else {
                                sub->sub_io = kzalloc(sizeof(*sub->sub_io),
                                                      GFP_NOFS);
-                               if (sub->sub_io == NULL)
+                               if (!sub->sub_io)
                                        result = -ENOMEM;
                        }
                }
index b7e7bfabe382e8878b1578940f469a970e35aa0a..dd1cf3d2d039d4e36539fe98c61877d6a0400cf2 100644 (file)
@@ -123,6 +123,7 @@ int lov_adjust_kms(struct obd_export *exp, struct lov_stripe_md *lsm,
        if (shrink) {
                for (; stripe < lsm->lsm_stripe_count; stripe++) {
                        struct lov_oinfo *loi = lsm->lsm_oinfo[stripe];
+
                        kms = lov_size_to_stripe(lsm, size, stripe);
                        CDEBUG(D_INODE,
                               "stripe %d KMS %sing %llu->%llu\n",
index 96c55acd52aed50a898e7006d8936a4595a7587d..c5c67d982ef2387c73cb247aef6a9fa96cf4db31 100644 (file)
@@ -107,6 +107,10 @@ static void lov_putref(struct obd_device *obd)
                        /* Disconnect */
                        __lov_del_obd(obd, tgt);
                }
+
+               if (lov->lov_tgts_kobj)
+                       kobject_put(lov->lov_tgts_kobj);
+
        } else {
                mutex_unlock(&lov->lov_lock);
        }
@@ -322,9 +326,6 @@ static int lov_disconnect(struct obd_export *exp)
                }
        }
 
-       if (lov->lov_tgts_kobj)
-               kobject_put(lov->lov_tgts_kobj);
-
        obd_putref(obd);
 
 out:
@@ -976,7 +977,7 @@ static int lov_recreate(struct obd_export *exp, struct obdo *src_oa,
                src_oa->o_flags & OBD_FL_RECREATE_OBJS);
 
        obj_mdp = kzalloc(sizeof(*obj_mdp), GFP_NOFS);
-       if (obj_mdp == NULL)
+       if (!obj_mdp)
                return -ENOMEM;
 
        ost_idx = src_oa->o_nlink;
@@ -1439,7 +1440,7 @@ static int lov_iocontrol(unsigned int cmd, struct obd_export *exp, int len,
                __u32 *genp;
 
                len = 0;
-               if (obd_ioctl_getdata(&buf, &len, (void *)uarg))
+               if (obd_ioctl_getdata(&buf, &len, uarg))
                        return -EINVAL;
 
                data = (struct obd_ioctl_data *)buf;
@@ -1472,7 +1473,7 @@ static int lov_iocontrol(unsigned int cmd, struct obd_export *exp, int len,
                        *genp = lov->lov_tgts[i]->ltd_gen;
                }
 
-               if (copy_to_user((void *)uarg, buf, len))
+               if (copy_to_user(uarg, buf, len))
                        rc = -EFAULT;
                obd_ioctl_freedata(buf, len);
                break;
index 1e4d3fbee323b6f4bed59947eae8506c9889e3be..c59b1402616e23e7c6e8521c1d1414149608924c 100644 (file)
@@ -431,7 +431,7 @@ int lov_pool_new(struct obd_device *obd, char *poolname)
                return -ENAMETOOLONG;
 
        new_pool = kzalloc(sizeof(*new_pool), GFP_NOFS);
-       if (new_pool == NULL)
+       if (!new_pool)
                return -ENOMEM;
 
        strncpy(new_pool->pool_name, poolname, LOV_MAXPOOLNAME);
index f4de8b84c5c25188503c2672b3818a474ad0db9c..416e42ed779252314820661f908bfa244a351259 100644 (file)
@@ -275,7 +275,7 @@ int lov_prep_getattr_set(struct obd_export *exp, struct obd_info *oinfo,
        int rc = 0, i;
 
        set = kzalloc(sizeof(*set), GFP_NOFS);
-       if (set == NULL)
+       if (!set)
                return -ENOMEM;
        lov_init_set(set);
 
@@ -301,7 +301,7 @@ int lov_prep_getattr_set(struct obd_export *exp, struct obd_info *oinfo,
                }
 
                req = kzalloc(sizeof(*req), GFP_NOFS);
-               if (req == NULL) {
+               if (!req) {
                        rc = -ENOMEM;
                        goto out_set;
                }
@@ -358,7 +358,7 @@ int lov_prep_destroy_set(struct obd_export *exp, struct obd_info *oinfo,
        int rc = 0, i;
 
        set = kzalloc(sizeof(*set), GFP_NOFS);
-       if (set == NULL)
+       if (!set)
                return -ENOMEM;
        lov_init_set(set);
 
@@ -384,7 +384,7 @@ int lov_prep_destroy_set(struct obd_export *exp, struct obd_info *oinfo,
                }
 
                req = kzalloc(sizeof(*req), GFP_NOFS);
-               if (req == NULL) {
+               if (!req) {
                        rc = -ENOMEM;
                        goto out_set;
                }
@@ -477,7 +477,7 @@ int lov_prep_setattr_set(struct obd_export *exp, struct obd_info *oinfo,
        int rc = 0, i;
 
        set = kzalloc(sizeof(*set), GFP_NOFS);
-       if (set == NULL)
+       if (!set)
                return -ENOMEM;
        lov_init_set(set);
 
@@ -500,7 +500,7 @@ int lov_prep_setattr_set(struct obd_export *exp, struct obd_info *oinfo,
                }
 
                req = kzalloc(sizeof(*req), GFP_NOFS);
-               if (req == NULL) {
+               if (!req) {
                        rc = -ENOMEM;
                        goto out_set;
                }
@@ -704,7 +704,7 @@ int lov_prep_statfs_set(struct obd_device *obd, struct obd_info *oinfo,
        int rc = 0, i;
 
        set = kzalloc(sizeof(*set), GFP_NOFS);
-       if (set == NULL)
+       if (!set)
                return -ENOMEM;
        lov_init_set(set);
 
@@ -730,14 +730,14 @@ int lov_prep_statfs_set(struct obd_device *obd, struct obd_info *oinfo,
                }
 
                req = kzalloc(sizeof(*req), GFP_NOFS);
-               if (req == NULL) {
+               if (!req) {
                        rc = -ENOMEM;
                        goto out_set;
                }
 
                req->rq_oi.oi_osfs = kzalloc(sizeof(*req->rq_oi.oi_osfs),
                                             GFP_NOFS);
-               if (req->rq_oi.oi_osfs == NULL) {
+               if (!req->rq_oi.oi_osfs) {
                        kfree(req);
                        rc = -ENOMEM;
                        goto out_set;
index d3234cb1ea22ae8190ec64fcfe246658c6f82f49..1a850ea2684945411a66fc46e38a272b3ccb2105 100644 (file)
@@ -286,7 +286,7 @@ static inline __u64 attr_pack(unsigned int ia_valid)
                sa_valid |= MDS_ATTR_KILL_SGID;
        if (ia_valid & ATTR_CTIME_SET)
                sa_valid |= MDS_ATTR_CTIME_SET;
-       if (ia_valid & ATTR_FROM_OPEN)
+       if (ia_valid & ATTR_OPEN)
                sa_valid |= MDS_ATTR_FROM_OPEN;
        if (ia_valid & ATTR_BLOCKS)
                sa_valid |= MDS_ATTR_BLOCKS;
index 7f208a6621e6c8bdce60889763e17256b297d3b0..204d512625607fa7e3fa483a0cd3f185f5bc45b2 100644 (file)
@@ -1202,7 +1202,7 @@ static int mdc_ioc_fid2path(struct obd_export *exp, struct getinfo_fid2path *gf)
        /* Key is KEY_FID2PATH + getinfo_fid2path description */
        keylen = cfs_size_round(sizeof(KEY_FID2PATH)) + sizeof(*gf);
        key = kzalloc(keylen, GFP_NOFS);
-       if (key == NULL)
+       if (!key)
                return -ENOMEM;
        memcpy(key, KEY_FID2PATH, sizeof(KEY_FID2PATH));
        memcpy(key + cfs_size_round(sizeof(KEY_FID2PATH)), gf, sizeof(*gf));
@@ -1605,7 +1605,7 @@ static int mdc_changelog_send_thread(void *csdata)
               cs->cs_fp, cs->cs_startrec);
 
        cs->cs_buf = kzalloc(KUC_CHANGELOG_MSG_MAXSIZE, GFP_NOFS);
-       if (cs->cs_buf == NULL) {
+       if (!cs->cs_buf) {
                rc = -ENOMEM;
                goto out;
        }
@@ -1934,7 +1934,7 @@ static int mdc_iocontrol(unsigned int cmd, struct obd_export *exp, int len,
                struct obd_quotactl *oqctl;
 
                oqctl = kzalloc(sizeof(*oqctl), GFP_NOFS);
-               if (oqctl == NULL) {
+               if (!oqctl) {
                        rc = -ENOMEM;
                        goto out;
                }
index 174dfc32876b5860b5131b31a1b36f330e0ddbba..019ee2f256aa1b94b90f7c0f23af9aeebbe2a585 100644 (file)
@@ -1128,7 +1128,7 @@ static int mgc_apply_recover_logs(struct obd_device *mgc,
        LASSERT(cfg->cfg_sb == cfg->cfg_instance);
 
        inst = kzalloc(PAGE_CACHE_SIZE, GFP_NOFS);
-       if (inst == NULL)
+       if (!inst)
                return -ENOMEM;
 
        if (!IS_SERVER(lsi)) {
@@ -1232,7 +1232,7 @@ static int mgc_apply_recover_logs(struct obd_device *mgc,
                pos += sprintf(obdname + pos, "-%s%04x",
                                  is_ost ? "OST" : "MDT", entry->mne_index);
 
-               cname = is_ost ? "osc" : "mdc",
+               cname = is_ost ? "osc" : "mdc";
                pos += sprintf(obdname + pos, "-%s-%s", cname, inst);
                lustre_cfg_bufs_reset(&bufs, obdname);
 
@@ -1493,7 +1493,7 @@ static int mgc_process_cfg_log(struct obd_device *mgc,
                lsi = s2lsi(cld->cld_cfg.cfg_sb);
 
        env = kzalloc(sizeof(*env), GFP_NOFS);
-       if (env == NULL)
+       if (!env)
                return -ENOMEM;
 
        rc = lu_env_init(env, LCT_MG_THREAD);
index bc3fc4780cb9e53f7faf61ac5f75d395943de8b8..933456c502d1ce2bfd9797ff7fad3dfea1946db0 100644 (file)
@@ -104,11 +104,10 @@ static int lustre_posix_acl_xattr_reduce_space(posix_acl_xattr_header **header,
        if (unlikely(old_count <= new_count))
                return old_size;
 
-       new = kzalloc(new_size, GFP_NOFS);
+       new = kmemdup(*header, new_size, GFP_NOFS);
        if (unlikely(new == NULL))
                return -ENOMEM;
 
-       memcpy(new, *header, new_size);
        kfree(*header);
        *header = new;
        return new_size;
@@ -125,11 +124,10 @@ static int lustre_ext_acl_xattr_reduce_space(ext_acl_xattr_header **header,
        if (unlikely(old_count <= ext_count))
                return 0;
 
-       new = kzalloc(ext_size, GFP_NOFS);
+       new = kmemdup(*header, ext_size, GFP_NOFS);
        if (unlikely(new == NULL))
                return -ENOMEM;
 
-       memcpy(new, *header, ext_size);
        kfree(*header);
        *header = new;
        return 0;
index a7f3032f34dd83bb92184976b1c26e1f6da1d182..d5fb81f84cd4effa1d625206ec39255c636dde04 100644 (file)
 static void cl_page_delete0(const struct lu_env *env, struct cl_page *pg,
                            int radix);
 
-# define PASSERT(env, page, expr)                                     \
-  do {                                                             \
-         if (unlikely(!(expr))) {                                    \
-                 CL_PAGE_DEBUG(D_ERROR, (env), (page), #expr "\n");    \
-                 LASSERT(0);                                      \
-         }                                                          \
-  } while (0)
+# define PASSERT(env, page, expr)                                         \
+       do {                                                               \
+               if (unlikely(!(expr))) {                                   \
+                       CL_PAGE_DEBUG(D_ERROR, (env), (page), #expr "\n"); \
+                       LASSERT(0);                                        \
+               }                                                          \
+       } while (0)
 
 # define PINVRNT(env, page, exp) \
        ((void)sizeof(env), (void)sizeof(page), (void)sizeof !!(exp))
@@ -169,6 +169,7 @@ int cl_page_gang_lookup(const struct lu_env *env, struct cl_object *obj,
        while ((nr = radix_tree_gang_lookup(&hdr->coh_tree, (void **)pvec,
                                            idx, CLT_PVEC_SIZE)) > 0) {
                int end_of_region = 0;
+
                idx = pvec[nr - 1]->cp_index + 1;
                for (i = 0, j = 0; i < nr; ++i) {
                        page = pvec[i];
@@ -286,6 +287,7 @@ static struct cl_page *cl_page_alloc(const struct lu_env *env,
                        GFP_NOFS);
        if (page != NULL) {
                int result = 0;
+
                atomic_set(&page->cp_ref, 1);
                if (type == CPT_CACHEABLE) /* for radix tree */
                        atomic_inc(&page->cp_ref);
@@ -352,8 +354,10 @@ static struct cl_page *cl_page_find0(const struct lu_env *env,
               idx, PFID(&hdr->coh_lu.loh_fid), vmpage, vmpage->private, type);
        /* fast path. */
        if (type == CPT_CACHEABLE) {
-               /* vmpage lock is used to protect the child/parent
-                * relationship */
+               /*
+                * vmpage lock is used to protect the child/parent
+                * relationship
+                */
                KLASSERT(PageLocked(vmpage));
                /*
                 * cl_vmpage_page() can be called here without any locks as
@@ -372,9 +376,8 @@ static struct cl_page *cl_page_find0(const struct lu_env *env,
                                                       idx) == page));
        }
 
-       if (page != NULL) {
+       if (page != NULL)
                return page;
-       }
 
        /* allocate and initialize cl_page */
        page = cl_page_alloc(env, o, idx, vmpage, type);
@@ -1189,9 +1192,6 @@ int cl_page_prep(const struct lu_env *env, struct cl_io *io,
        if (result == 0)
                cl_page_io_start(env, pg, crt);
 
-       KLASSERT(ergo(crt == CRT_WRITE && pg->cp_type == CPT_CACHEABLE,
-                     equi(result == 0,
-                          PageWriteback(cl_page_vmpage(env, pg)))));
        CL_PAGE_HEADER(D_TRACE, env, pg, "%d %d\n", crt, result);
        return result;
 }
@@ -1425,7 +1425,7 @@ void cl_page_clip(const struct lu_env *env, struct cl_page *pg,
        CL_PAGE_HEADER(D_TRACE, env, pg, "%d %d\n", from, to);
        CL_PAGE_INVOID(env, pg, CL_PAGE_OP(cpo_clip),
                       (const struct lu_env *,
-                       const struct cl_page_slice *,int, int),
+                       const struct cl_page_slice *, int, int),
                       from, to);
 }
 EXPORT_SYMBOL(cl_page_clip);
index 1bc37566b3a50a3dbe106b26a7eb1793346aa9f1..2c705d76211f88b84a52e71bc790009c5139f84e 100644 (file)
@@ -78,12 +78,8 @@ atomic_t obd_dirty_pages;
 EXPORT_SYMBOL(obd_dirty_pages);
 unsigned int obd_timeout = OBD_TIMEOUT_DEFAULT;   /* seconds */
 EXPORT_SYMBOL(obd_timeout);
-unsigned int ldlm_timeout = LDLM_TIMEOUT_DEFAULT; /* seconds */
-EXPORT_SYMBOL(ldlm_timeout);
 unsigned int obd_timeout_set;
 EXPORT_SYMBOL(obd_timeout_set);
-unsigned int ldlm_timeout_set;
-EXPORT_SYMBOL(ldlm_timeout_set);
 /* Adaptive timeout defs here instead of ptlrpc module for /proc/sys/ access */
 unsigned int at_min = 0;
 EXPORT_SYMBOL(at_min);
@@ -144,11 +140,11 @@ int obd_alloc_fail(const void *ptr, const char *name, const char *type,
                CERROR("%s%salloc of %s (%llu bytes) failed at %s:%d\n",
                       ptr ? "force " :"", type, name, (__u64)size, file,
                       line);
-               CERROR("%llu total bytes and %llu total pages (%llu bytes) allocated by Lustre, %d total bytes by LNET\n",
+               CERROR("%llu total bytes and %llu total pages"
+                       " (%llu bytes) allocated by Lustre\n",
                       obd_memory_sum(),
                       obd_pages_sum() << PAGE_CACHE_SHIFT,
-                      obd_pages_sum(),
-                      atomic_read(&libcfs_kmemory));
+                      obd_pages_sum());
                return 1;
        }
        return 0;
@@ -232,7 +228,7 @@ int class_handle_ioctl(unsigned int cmd, unsigned long arg)
                        goto out;
                }
                lcfg = kzalloc(data->ioc_plen1, GFP_NOFS);
-               if (lcfg == NULL) {
+               if (!lcfg) {
                        err = -ENOMEM;
                        goto out;
                }
@@ -571,12 +567,14 @@ static int __init init_obdclass(void)
        if (err)
                return err;
 
-       obd_sysctl_init();
-
        err = class_procfs_init();
        if (err)
                return err;
 
+       err = obd_sysctl_init();
+       if (err)
+               return err;
+
        err = lu_global_init();
        if (err)
                return err;
@@ -661,7 +659,6 @@ static void cleanup_obdclass(void)
        lu_global_fini();
 
        obd_cleanup_caches();
-       obd_sysctl_clean();
 
        class_procfs_clean();
 
index 978c3c5c460a15b25d06bcabe96e19f4077ab344..0ca730948f7adbea81ecccba24f18db198e20835 100644 (file)
@@ -45,7 +45,7 @@
 
 spinlock_t obd_types_lock;
 
-struct kmem_cache *obd_device_cachep;
+static struct kmem_cache *obd_device_cachep;
 struct kmem_cache *obdo_cachep;
 EXPORT_SYMBOL(obdo_cachep);
 static struct kmem_cache *import_cachep;
@@ -71,9 +71,8 @@ static struct obd_device *obd_device_alloc(void)
        struct obd_device *obd;
 
        OBD_SLAB_ALLOC_PTR_GFP(obd, obd_device_cachep, GFP_NOFS);
-       if (obd != NULL) {
+       if (obd != NULL)
                obd->obd_magic = OBD_DEVICE_MAGIC;
-       }
        return obd;
 }
 
@@ -172,7 +171,7 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
 
        rc = -ENOMEM;
        type = kzalloc(sizeof(*type), GFP_NOFS);
-       if (type == NULL)
+       if (!type)
                return rc;
 
        type->typ_dt_ops = kzalloc(sizeof(*type->typ_dt_ops), GFP_NOFS);
@@ -294,7 +293,7 @@ struct obd_device *class_newdev(const char *type_name, const char *name)
        }
 
        type = class_get_type(type_name);
-       if (type == NULL){
+       if (type == NULL) {
                CERROR("OBD: unknown type: %s\n", type_name);
                return ERR_PTR(-ENODEV);
        }
@@ -999,7 +998,8 @@ void class_import_put(struct obd_import *imp)
 }
 EXPORT_SYMBOL(class_import_put);
 
-static void init_imp_at(struct imp_at *at) {
+static void init_imp_at(struct imp_at *at)
+{
        int i;
        at_init(&at->iat_net_latency, 0, 0);
        for (i = 0; i < IMP_AT_MAX_PORTALS; i++) {
@@ -1016,7 +1016,7 @@ struct obd_import *class_new_import(struct obd_device *obd)
        struct obd_import *imp;
 
        imp = kzalloc(sizeof(*imp), GFP_NOFS);
-       if (imp == NULL)
+       if (!imp)
                return NULL;
 
        INIT_LIST_HEAD(&imp->imp_pinger_chain);
@@ -1642,7 +1642,8 @@ static int obd_zombie_impexp_check(void *arg)
 /**
  * Add export to the obd_zombie thread and notify it.
  */
-static void obd_zombie_export_add(struct obd_export *exp) {
+static void obd_zombie_export_add(struct obd_export *exp)
+{
        spin_lock(&exp->exp_obd->obd_dev_lock);
        LASSERT(!list_empty(&exp->exp_obd_chain));
        list_del_init(&exp->exp_obd_chain);
@@ -1658,7 +1659,8 @@ static void obd_zombie_export_add(struct obd_export *exp) {
 /**
  * Add import to the obd_zombie thread and notify it.
  */
-static void obd_zombie_import_add(struct obd_import *imp) {
+static void obd_zombie_import_add(struct obd_import *imp)
+{
        LASSERT(imp->imp_sec == NULL);
        LASSERT(imp->imp_rq_pool == NULL);
        spin_lock(&obd_zombie_impexp_lock);
@@ -1819,7 +1821,7 @@ void *kuc_alloc(int payload_len, int transport, int type)
        int len = kuc_len(payload_len);
 
        lh = kzalloc(len, GFP_NOFS);
-       if (lh == NULL)
+       if (!lh)
                return ERR_PTR(-ENOMEM);
 
        lh->kuc_magic = KUC_MAGIC;
index 84f75dce0d4cc7b26692afa35dd460b188c94725..6218ef34ee801521a21cac7005f47bba50b07511 100644 (file)
@@ -385,7 +385,7 @@ static int obd_device_list_seq_show(struct seq_file *p, void *v)
        return 0;
 }
 
-struct seq_operations obd_device_list_sops = {
+static const struct seq_operations obd_device_list_sops = {
        .start = obd_device_list_seq_start,
        .stop = obd_device_list_seq_stop,
        .next = obd_device_list_seq_next,
@@ -406,7 +406,7 @@ static int obd_device_list_open(struct inode *inode, struct file *file)
        return 0;
 }
 
-struct file_operations obd_device_list_fops = {
+static const struct file_operations obd_device_list_fops = {
        .owner   = THIS_MODULE,
        .open    = obd_device_list_open,
        .read    = seq_read,
@@ -423,7 +423,7 @@ static struct attribute_group lustre_attr_group = {
 
 int class_procfs_init(void)
 {
-       int rc = 0;
+       int rc = -ENOMEM;
        struct dentry *file;
 
        lustre_kobj = kobject_create_and_add("lustre", fs_kobj);
index 54f0a81f7b518dfa7b2d20a5dab8d70002578bbc..1515163a81a5385f5e183c12f3bd4e573d042605 100644 (file)
 #include "../../include/obd_support.h"
 #include "../../include/lprocfs_status.h"
 
-#ifdef CONFIG_SYSCTL
-static struct ctl_table_header *obd_table_header;
-#endif
+struct static_lustre_uintvalue_attr {
+       struct {
+               struct attribute attr;
+               ssize_t (*show)(struct kobject *kobj, struct attribute *attr,
+                               char *buf);
+               ssize_t (*store)(struct kobject *kobj, struct attribute *attr,
+                                const char *buf, size_t len);
+       } u;
+       int *value;
+};
 
-#ifdef CONFIG_SYSCTL
-static int proc_set_timeout(struct ctl_table *table, int write,
-                       void __user *buffer, size_t *lenp, loff_t *ppos)
+static ssize_t static_uintvalue_show(struct kobject *kobj,
+                                   struct attribute *attr,
+                                   char *buf)
 {
-       int rc;
+       struct static_lustre_uintvalue_attr *lattr = (void *)attr;
 
-       rc = proc_dointvec(table, write, buffer, lenp, ppos);
-       if (ldlm_timeout >= obd_timeout)
-               ldlm_timeout = max(obd_timeout / 3, 1U);
-       return rc;
+       return sprintf(buf, "%d\n", *lattr->value);
 }
 
-static int proc_memory_alloc(struct ctl_table *table, int write,
-                       void __user *buffer, size_t *lenp, loff_t *ppos)
+static ssize_t static_uintvalue_store(struct kobject *kobj,
+                                    struct attribute *attr,
+                                    const char *buffer, size_t count)
 {
-       char buf[22];
-       int len;
-
-       if (!*lenp || (*ppos && !write)) {
-               *lenp = 0;
-               return 0;
-       }
-       if (write)
-               return -EINVAL;
+       struct static_lustre_uintvalue_attr *lattr  = (void *)attr;
+       int rc;
+       unsigned int val;
 
-       len = snprintf(buf, sizeof(buf), "%llu\n", obd_memory_sum());
-       if (len > *lenp)
-               len = *lenp;
-       buf[len] = '\0';
-       if (copy_to_user(buffer, buf, len))
-               return -EFAULT;
-       *lenp = len;
-       *ppos += *lenp;
-       return 0;
-}
+       rc = kstrtouint(buffer, 10, &val);
+       if (rc)
+               return rc;
 
-static int proc_pages_alloc(struct ctl_table *table, int write,
-                       void __user *buffer, size_t *lenp, loff_t *ppos)
-{
-       char buf[22];
-       int len;
+       *lattr->value = val;
 
-       if (!*lenp || (*ppos && !write)) {
-               *lenp = 0;
-               return 0;
-       }
-       if (write)
-               return -EINVAL;
-
-       len = snprintf(buf, sizeof(buf), "%llu\n", obd_pages_sum());
-       if (len > *lenp)
-               len = *lenp;
-       buf[len] = '\0';
-       if (copy_to_user(buffer, buf, len))
-               return -EFAULT;
-       *lenp = len;
-       *ppos += *lenp;
-       return 0;
+       return count;
 }
 
-static int proc_mem_max(struct ctl_table *table, int write, void __user *buffer,
-                size_t *lenp, loff_t *ppos)
-{
-       char buf[22];
-       int len;
+#define LUSTRE_STATIC_UINT_ATTR(name, value) \
+static struct static_lustre_uintvalue_attr lustre_sattr_##name =       \
+                                       {__ATTR(name, 0644,             \
+                                               static_uintvalue_show,  \
+                                               static_uintvalue_store),\
+                                         value }
 
-       if (!*lenp || (*ppos && !write)) {
-               *lenp = 0;
-               return 0;
-       }
-       if (write)
-               return -EINVAL;
+LUSTRE_STATIC_UINT_ATTR(timeout, &obd_timeout);
 
-       len = snprintf(buf, sizeof(buf), "%llu\n", obd_memory_max());
-       if (len > *lenp)
-               len = *lenp;
-       buf[len] = '\0';
-       if (copy_to_user(buffer, buf, len))
-               return -EFAULT;
-       *lenp = len;
-       *ppos += *lenp;
-       return 0;
+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_CACHE_SHIFT)));
 }
 
-static int proc_pages_max(struct ctl_table *table, int write,
-                       void __user *buffer, size_t *lenp, loff_t *ppos)
+static ssize_t max_dirty_mb_store(struct kobject *kobj, struct attribute *attr,
+                                 const char *buffer, size_t count)
 {
-       char buf[22];
-       int len;
+       int rc;
+       unsigned long val;
 
-       if (!*lenp || (*ppos && !write)) {
-               *lenp = 0;
-               return 0;
-       }
-       if (write)
-               return -EINVAL;
+       rc = kstrtoul(buffer, 10, &val);
+       if (rc)
+               return rc;
 
-       len = snprintf(buf, sizeof(buf), "%llu\n", obd_pages_max());
-       if (len > *lenp)
-               len = *lenp;
-       buf[len] = '\0';
-       if (copy_to_user(buffer, buf, len))
-               return -EFAULT;
-       *lenp = len;
-       *ppos += *lenp;
-       return 0;
-}
+       val *= 1 << (20 - PAGE_CACHE_SHIFT); /* convert to pages */
 
-static int proc_max_dirty_pages_in_mb(struct ctl_table *table, int write,
-                              void __user *buffer, size_t *lenp, loff_t *ppos)
-{
-       int rc = 0;
-
-       if (!table->data || !table->maxlen || !*lenp || (*ppos && !write)) {
-               *lenp = 0;
-               return 0;
+       if (val > ((totalram_pages / 10) * 9)) {
+               /* Somebody wants to assign too much memory to dirty pages */
+               return -EINVAL;
        }
-       if (write) {
-               rc = lprocfs_write_frac_helper(buffer, *lenp,
-                                              (unsigned int *)table->data,
-                                              1 << (20 - PAGE_CACHE_SHIFT));
-               /* Don't allow them to let dirty pages exceed 90% of system
-                * memory and set a hard minimum of 4MB. */
-               if (obd_max_dirty_pages > ((totalram_pages / 10) * 9)) {
-                       CERROR("Refusing to set max dirty pages to %u, which is more than 90%% of available RAM; setting to %lu\n",
-                              obd_max_dirty_pages,
-                              ((totalram_pages / 10) * 9));
-                       obd_max_dirty_pages = (totalram_pages / 10) * 9;
-               } else if (obd_max_dirty_pages < 4 << (20 - PAGE_CACHE_SHIFT)) {
-                       obd_max_dirty_pages = 4 << (20 - PAGE_CACHE_SHIFT);
-               }
-       } else {
-               char buf[21];
-               int len;
 
-               len = lprocfs_read_frac_helper(buf, sizeof(buf),
-                                              *(unsigned int *)table->data,
-                                              1 << (20 - PAGE_CACHE_SHIFT));
-               if (len > *lenp)
-                       len = *lenp;
-               buf[len] = '\0';
-               if (copy_to_user(buffer, buf, len))
-                       return -EFAULT;
-               *lenp = len;
+       if (val < 4 << (20 - PAGE_CACHE_SHIFT)) {
+               /* Less than 4 Mb for dirty cache is also bad */
+               return -EINVAL;
        }
-       *ppos += *lenp;
-       return rc;
-}
 
-static int proc_alloc_fail_rate(struct ctl_table *table, int write,
-                        void __user *buffer, size_t *lenp, loff_t *ppos)
-{
-       int rc    = 0;
+       obd_max_dirty_pages = val;
 
-       if (!table->data || !table->maxlen || !*lenp || (*ppos && !write)) {
-               *lenp = 0;
-               return 0;
-       }
-       if (write) {
-               rc = lprocfs_write_frac_helper(buffer, *lenp,
-                                              (unsigned int *)table->data,
-                                              OBD_ALLOC_FAIL_MULT);
-       } else {
-               char buf[21];
-               int  len;
-
-               len = lprocfs_read_frac_helper(buf, 21,
-                                              *(unsigned int *)table->data,
-                                              OBD_ALLOC_FAIL_MULT);
-               if (len > *lenp)
-                       len = *lenp;
-               buf[len] = '\0';
-               if (copy_to_user(buffer, buf, len))
-                       return -EFAULT;
-               *lenp = len;
-       }
-       *ppos += *lenp;
-       return rc;
+       return count;
 }
-
-static struct ctl_table obd_table[] = {
-       {
-               .procname = "timeout",
-               .data     = &obd_timeout,
-               .maxlen   = sizeof(int),
-               .mode     = 0644,
-               .proc_handler = &proc_set_timeout
-       },
-       {
-               .procname = "debug_peer_on_timeout",
-               .data     = &obd_debug_peer_on_timeout,
-               .maxlen   = sizeof(int),
-               .mode     = 0644,
-               .proc_handler = &proc_dointvec
-       },
-       {
-               .procname = "dump_on_timeout",
-               .data     = &obd_dump_on_timeout,
-               .maxlen   = sizeof(int),
-               .mode     = 0644,
-               .proc_handler = &proc_dointvec
-       },
-       {
-               .procname = "dump_on_eviction",
-               .data     = &obd_dump_on_eviction,
-               .maxlen   = sizeof(int),
-               .mode     = 0644,
-               .proc_handler = &proc_dointvec
-       },
-       {
-               .procname = "memused",
-               .data     = NULL,
-               .maxlen   = 0,
-               .mode     = 0444,
-               .proc_handler = &proc_memory_alloc
-       },
-       {
-               .procname = "pagesused",
-               .data     = NULL,
-               .maxlen   = 0,
-               .mode     = 0444,
-               .proc_handler = &proc_pages_alloc
-       },
-       {
-               .procname = "memused_max",
-               .data     = NULL,
-               .maxlen   = 0,
-               .mode     = 0444,
-               .proc_handler = &proc_mem_max
-       },
-       {
-               .procname = "pagesused_max",
-               .data     = NULL,
-               .maxlen   = 0,
-               .mode     = 0444,
-               .proc_handler = &proc_pages_max
-       },
-       {
-               .procname = "ldlm_timeout",
-               .data     = &ldlm_timeout,
-               .maxlen   = sizeof(int),
-               .mode     = 0644,
-               .proc_handler = &proc_set_timeout
-       },
-       {
-               .procname = "alloc_fail_rate",
-               .data     = &obd_alloc_fail_rate,
-               .maxlen   = sizeof(int),
-               .mode     = 0644,
-               .proc_handler = &proc_alloc_fail_rate
-       },
-       {
-               .procname = "max_dirty_mb",
-               .data     = &obd_max_dirty_pages,
-               .maxlen   = sizeof(int),
-               .mode     = 0644,
-               .proc_handler = &proc_max_dirty_pages_in_mb
-       },
-       {
-               .procname = "at_min",
-               .data     = &at_min,
-               .maxlen   = sizeof(int),
-               .mode     = 0644,
-               .proc_handler = &proc_dointvec,
-       },
-       {
-               .procname = "at_max",
-               .data     = &at_max,
-               .maxlen   = sizeof(int),
-               .mode     = 0644,
-               .proc_handler = &proc_dointvec,
-       },
-       {
-               .procname = "at_extra",
-               .data     = &at_extra,
-               .maxlen   = sizeof(int),
-               .mode     = 0644,
-               .proc_handler = &proc_dointvec,
-       },
-       {
-               .procname = "at_early_margin",
-               .data     = &at_early_margin,
-               .maxlen   = sizeof(int),
-               .mode     = 0644,
-               .proc_handler = &proc_dointvec,
-       },
-       {
-               .procname = "at_history",
-               .data     = &at_history,
-               .maxlen   = sizeof(int),
-               .mode     = 0644,
-               .proc_handler = &proc_dointvec,
-       },
-       {}
+LUSTRE_RW_ATTR(max_dirty_mb);
+
+LUSTRE_STATIC_UINT_ATTR(debug_peer_on_timeout, &obd_debug_peer_on_timeout);
+LUSTRE_STATIC_UINT_ATTR(dump_on_timeout, &obd_dump_on_timeout);
+LUSTRE_STATIC_UINT_ATTR(dump_on_eviction, &obd_dump_on_eviction);
+LUSTRE_STATIC_UINT_ATTR(at_min, &at_min);
+LUSTRE_STATIC_UINT_ATTR(at_max, &at_max);
+LUSTRE_STATIC_UINT_ATTR(at_extra, &at_extra);
+LUSTRE_STATIC_UINT_ATTR(at_early_margin, &at_early_margin);
+LUSTRE_STATIC_UINT_ATTR(at_history, &at_history);
+
+static struct attribute *lustre_attrs[] = {
+       &lustre_sattr_timeout.u.attr,
+       &lustre_attr_max_dirty_mb.attr,
+       &lustre_sattr_debug_peer_on_timeout.u.attr,
+       &lustre_sattr_dump_on_timeout.u.attr,
+       &lustre_sattr_dump_on_eviction.u.attr,
+       &lustre_sattr_at_min.u.attr,
+       &lustre_sattr_at_max.u.attr,
+       &lustre_sattr_at_extra.u.attr,
+       &lustre_sattr_at_early_margin.u.attr,
+       &lustre_sattr_at_history.u.attr,
+       NULL,
 };
 
-static struct ctl_table parent_table[] = {
-       {
-               .procname = "lustre",
-               .data     = NULL,
-               .maxlen   = 0,
-               .mode     = 0555,
-               .child    = obd_table
-       },
-       {}
+static struct attribute_group lustre_attr_group = {
+       .attrs = lustre_attrs,
 };
-#endif
 
-void obd_sysctl_init(void)
+int obd_sysctl_init(void)
 {
-#ifdef CONFIG_SYSCTL
-       if (!obd_table_header)
-               obd_table_header = register_sysctl_table(parent_table);
-#endif
+       return sysfs_create_group(lustre_kobj, &lustre_attr_group);
 }
 
 void obd_sysctl_clean(void)
 {
-#ifdef CONFIG_SYSCTL
-       if (obd_table_header)
-               unregister_sysctl_table(obd_table_header);
-       obd_table_header = NULL;
-#endif
 }
index 4fa52d1b79d1221b569fa8a0c6520bbcce084747..facc8351fcea50163c83b2c12b29ad31500f3800 100644 (file)
@@ -61,7 +61,7 @@ static struct llog_handle *llog_alloc_handle(void)
        struct llog_handle *loghandle;
 
        loghandle = kzalloc(sizeof(*loghandle), GFP_NOFS);
-       if (loghandle == NULL)
+       if (!loghandle)
                return NULL;
 
        init_rwsem(&loghandle->lgh_lock);
@@ -208,7 +208,7 @@ int llog_init_handle(const struct lu_env *env, struct llog_handle *handle,
        LASSERT(handle->lgh_hdr == NULL);
 
        llh = kzalloc(sizeof(*llh), GFP_NOFS);
-       if (llh == NULL)
+       if (!llh)
                return -ENOMEM;
        handle->lgh_hdr = llh;
        /* first assign flags to use llog_client_ops */
@@ -435,7 +435,7 @@ int llog_process_or_fork(const struct lu_env *env,
        int                   rc;
 
        lpi = kzalloc(sizeof(*lpi), GFP_NOFS);
-       if (lpi == NULL) {
+       if (!lpi) {
                CERROR("cannot alloc pointer\n");
                return -ENOMEM;
        }
@@ -907,7 +907,7 @@ int llog_is_empty(const struct lu_env *env, struct llog_ctxt *ctxt,
                  char *name)
 {
        struct llog_handle      *llh;
-       int                      rc = 0;
+       int                      rc;
 
        rc = llog_open(env, ctxt, &llh, NULL, name, LLOG_OPEN_EXISTS);
        if (rc < 0) {
index 17e7c18078639d946f2a3ad7eb45d862358f5d81..08d1f0edf98d1008c26eca3a02ee02d407715ee3 100644 (file)
@@ -275,7 +275,7 @@ struct dentry *ldebugfs_add_symlink(const char *name, struct dentry *parent,
                return NULL;
 
        dest = kzalloc(MAX_STRING_SIZE + 1, GFP_KERNEL);
-       if (dest == NULL)
+       if (!dest)
                return NULL;
 
        va_start(ap, format);
@@ -329,7 +329,7 @@ EXPORT_SYMBOL(ldebugfs_add_vars);
 
 void ldebugfs_remove(struct dentry **entryp)
 {
-       debugfs_remove(*entryp);
+       debugfs_remove_recursive(*entryp);
        *entryp = NULL;
 }
 EXPORT_SYMBOL(ldebugfs_remove);
index 4d9b6333eeae856af9115a56b6b21357b1cc7e19..8e472327c880e3201992b3995456785227bcf4f6 100644 (file)
@@ -602,7 +602,7 @@ static struct lu_object *lu_object_new(const struct lu_env *env,
        struct lu_site_bkt_data *bkt;
 
        o = lu_object_alloc(env, dev, f, conf);
-       if (unlikely(IS_ERR(o)))
+       if (IS_ERR(o))
                return o;
 
        hs = dev->ld_site->ls_obj_hash;
@@ -666,7 +666,7 @@ static struct lu_object *lu_object_find_try(const struct lu_env *env,
         * operations, including fld queries, inode loading, etc.
         */
        o = lu_object_alloc(env, dev, f, conf);
-       if (unlikely(IS_ERR(o)))
+       if (IS_ERR(o))
                return o;
 
        LASSERT(lu_fid_eq(lu_object_fid(o), f));
@@ -674,7 +674,7 @@ static struct lu_object *lu_object_find_try(const struct lu_env *env,
        cfs_hash_bd_lock(hs, &bd, 1);
 
        shadow = htable_lookup(s, &bd, f, waiter, &version);
-       if (likely(IS_ERR(shadow) && PTR_ERR(shadow) == -ENOENT)) {
+       if (likely(PTR_ERR(shadow) == -ENOENT)) {
                struct lu_site_bkt_data *bkt;
 
                bkt = cfs_hash_bd_extra_get(hs, &bd);
@@ -1558,7 +1558,7 @@ static int keys_fill(struct lu_context *ctx)
                        LINVRNT(key->lct_index == i);
 
                        value = key->lct_init(ctx, key);
-                       if (unlikely(IS_ERR(value)))
+                       if (IS_ERR(value))
                                return PTR_ERR(value);
 
                        if (!(ctx->lc_tags & LCT_NOREF))
index 5cc6435cc47a2ca8cd82a06211f686cae860b1c3..d6184f821cd0e919859f3e3cc14de2f12b3c5089 100644 (file)
@@ -105,7 +105,7 @@ int class_add_uuid(const char *uuid, __u64 nid)
                return -EOVERFLOW;
 
        data = kzalloc(sizeof(*data), GFP_NOFS);
-       if (data == NULL)
+       if (!data)
                return -ENOMEM;
 
        obd_str2uuid(&data->un_uuid, uuid);
index fbdb748a36b9e2f45c0b7b40f0ec06c0fd404f55..93805ac93c5a8e78f31189db7277ab329c705210 100644 (file)
@@ -835,7 +835,7 @@ int class_add_profile(int proflen, char *prof, int osclen, char *osc,
        CDEBUG(D_CONFIG, "Add profile %s\n", prof);
 
        lprof = kzalloc(sizeof(*lprof), GFP_NOFS);
-       if (lprof == NULL)
+       if (!lprof)
                return -ENOMEM;
        INIT_LIST_HEAD(&lprof->lp_list);
 
@@ -979,7 +979,7 @@ struct lustre_cfg *lustre_cfg_rename(struct lustre_cfg *cfg,
        new_len = LUSTRE_CFG_BUFLEN(cfg, 1) + strlen(new_name) - name_len;
 
        new_param = kzalloc(new_len, GFP_NOFS);
-       if (new_param == NULL)
+       if (!new_param)
                return ERR_PTR(-ENOMEM);
 
        strcpy(new_param, new_name);
@@ -987,7 +987,7 @@ struct lustre_cfg *lustre_cfg_rename(struct lustre_cfg *cfg,
                strcat(new_param, value);
 
        bufs = kzalloc(sizeof(*bufs), GFP_NOFS);
-       if (bufs == NULL) {
+       if (!bufs) {
                kfree(new_param);
                return ERR_PTR(-ENOMEM);
        }
@@ -1123,12 +1123,7 @@ int class_process_config(struct lustre_cfg *lcfg)
                goto out;
        }
        case LCFG_SET_LDLM_TIMEOUT: {
-               CDEBUG(D_IOCTL, "changing lustre ldlm_timeout from %d to %d\n",
-                      ldlm_timeout, lcfg->lcfg_num);
-               ldlm_timeout = max(lcfg->lcfg_num, 1U);
-               if (ldlm_timeout >= obd_timeout)
-                       ldlm_timeout = max(obd_timeout / 3, 1U);
-               ldlm_timeout_set = 1;
+               /* ldlm_timeout is not used on the client */
                err = 0;
                goto out;
        }
@@ -1461,7 +1456,7 @@ int class_config_llog_handler(const struct lu_env *env,
                        inst_len = LUSTRE_CFG_BUFLEN(lcfg, 0) +
                                   sizeof(clli->cfg_instance) * 2 + 4;
                        inst_name = kzalloc(inst_len, GFP_NOFS);
-                       if (inst_name == NULL) {
+                       if (!inst_name) {
                                rc = -ENOMEM;
                                goto out;
                        }
@@ -1639,7 +1634,7 @@ int class_config_dump_handler(const struct lu_env *env,
        int      rc = 0;
 
        outstr = kzalloc(256, GFP_NOFS);
-       if (outstr == NULL)
+       if (!outstr)
                return -ENOMEM;
 
        if (rec->lrh_type == OBD_CFG_REC) {
index ce4a71f7171abb060679ad9d648f20481e07c0a5..7c5bab377f5cc27b4dfb30f53b6fb7157b9a40df 100644 (file)
@@ -85,7 +85,7 @@ int lustre_process_log(struct super_block *sb, char *logname,
        LASSERT(cfg);
 
        bufs = kzalloc(sizeof(*bufs), GFP_NOFS);
-       if (bufs == NULL)
+       if (!bufs)
                return -ENOMEM;
 
        /* mgc_process_config */
@@ -247,18 +247,18 @@ int lustre_start_mgc(struct super_block *sb)
        mutex_lock(&mgc_start_lock);
 
        len = strlen(LUSTRE_MGC_OBDNAME) + strlen(libcfs_nid2str(nid)) + 1;
-       mgcname = kzalloc(len, GFP_NOFS);
-       niduuid = kzalloc(len + 2, GFP_NOFS);
+       mgcname = kasprintf(GFP_NOFS,
+                           "%s%s", LUSTRE_MGC_OBDNAME, libcfs_nid2str(nid));
+       niduuid = kasprintf(GFP_NOFS, "%s_%x", mgcname, i);
        if (!mgcname || !niduuid) {
                rc = -ENOMEM;
                goto out_free;
        }
-       sprintf(mgcname, "%s%s", LUSTRE_MGC_OBDNAME, libcfs_nid2str(nid));
 
        mgssec = lsi->lsi_lmd->lmd_mgssec ? lsi->lsi_lmd->lmd_mgssec : "";
 
        data = kzalloc(sizeof(*data), GFP_NOFS);
-       if (data == NULL) {
+       if (!data) {
                rc = -ENOMEM;
                goto out_free;
        }
@@ -326,7 +326,6 @@ int lustre_start_mgc(struct super_block *sb)
 
        /* Add the primary nids for the MGS */
        i = 0;
-       sprintf(niduuid, "%s_%x", mgcname, i);
        if (IS_SERVER(lsi)) {
                ptr = lsi->lsi_lmd->lmd_mgs;
                if (IS_MGS(lsi)) {
@@ -885,7 +884,7 @@ static int lmd_parse_mgssec(struct lustre_mount_data *lmd, char *ptr)
                length = tail - ptr;
 
        lmd->lmd_mgssec = kzalloc(length + 1, GFP_NOFS);
-       if (lmd->lmd_mgssec == NULL)
+       if (!lmd->lmd_mgssec)
                return -ENOMEM;
 
        memcpy(lmd->lmd_mgssec, ptr, length);
@@ -911,7 +910,7 @@ static int lmd_parse_string(char **handle, char *ptr)
                length = tail - ptr;
 
        *handle = kzalloc(length + 1, GFP_NOFS);
-       if (*handle == NULL)
+       if (!*handle)
                return -ENOMEM;
 
        memcpy(*handle, ptr, length);
@@ -941,7 +940,7 @@ static int lmd_parse_mgs(struct lustre_mount_data *lmd, char **ptr)
                oldlen = strlen(lmd->lmd_mgs) + 1;
 
        mgsnid = kzalloc(oldlen + length + 1, GFP_NOFS);
-       if (mgsnid == NULL)
+       if (!mgsnid)
                return -ENOMEM;
 
        if (lmd->lmd_mgs != NULL) {
@@ -983,7 +982,7 @@ static int lmd_parse(char *options, struct lustre_mount_data *lmd)
        lmd->lmd_magic = LMD_MAGIC;
 
        lmd->lmd_params = kzalloc(4096, GFP_NOFS);
-       if (lmd->lmd_params == NULL)
+       if (!lmd->lmd_params)
                return -ENOMEM;
        lmd->lmd_params[0] = '\0';
 
@@ -1120,10 +1119,9 @@ static int lmd_parse(char *options, struct lustre_mount_data *lmd)
                /* Remove leading /s from fsname */
                while (*++s1 == '/') ;
                /* Freed in lustre_free_lsi */
-               lmd->lmd_profile = kzalloc(strlen(s1) + 8, GFP_NOFS);
+               lmd->lmd_profile = kasprintf(GFP_NOFS, "%s-client", s1);
                if (!lmd->lmd_profile)
                        return -ENOMEM;
-               sprintf(lmd->lmd_profile, "%s-client", s1);
        }
 
        /* Freed in lustre_free_lsi */
@@ -1281,7 +1279,7 @@ struct file_system_type lustre_fs_type = {
        .mount  = lustre_mount,
        .kill_sb      = lustre_kill_super,
        .fs_flags     = FS_BINARY_MOUNTDATA | FS_REQUIRES_DEV |
-                       FS_HAS_FIEMAP | FS_RENAME_DOES_D_MOVE,
+                       FS_RENAME_DOES_D_MOVE,
 };
 MODULE_ALIAS_FS("lustre");
 
index ff0a01bcf8dacd4b674080bebfb95a007458a747..b0b0157a6334c152ddcafc8a0b46cd9f8de189f4 100644 (file)
 #include "../include/obd_support.h"
 #include "../include/obd_class.h"
 
-
-static inline __u32 consume(int nob, __u8 **ptr)
-{
-       __u32 value;
-
-       LASSERT(nob <= sizeof(value));
-
-       for (value = 0; nob > 0; --nob)
-               value = (value << 8) | *((*ptr)++);
-       return value;
-}
-
-#define CONSUME(val, ptr) (val) = consume(sizeof(val), (ptr))
-
-static void uuid_unpack(class_uuid_t in, __u16 *uu, int nr)
-{
-       __u8 *ptr = in;
-
-       LASSERT(nr * sizeof(*uu) == sizeof(class_uuid_t));
-
-       while (nr-- > 0)
-               CONSUME(uu[nr], &ptr);
-}
-
 void class_uuid_unparse(class_uuid_t uu, struct obd_uuid *out)
 {
-       /* uu as an array of __u16's */
-       __u16 uuid[sizeof(class_uuid_t) / sizeof(__u16)];
-
-       CLASSERT(ARRAY_SIZE(uuid) == 8);
-
-       uuid_unpack(uu, uuid, ARRAY_SIZE(uuid));
-       sprintf(out->uuid, "%04x%04x-%04x-%04x-%04x-%04x%04x%04x",
-               uuid[0], uuid[1], uuid[2], uuid[3],
-               uuid[4], uuid[5], uuid[6], uuid[7]);
+       sprintf(out->uuid, "%pU", uu);
 }
 EXPORT_SYMBOL(class_uuid_unparse);
index 0222fd2e475743d9efb09fb47d62e3f9c76ab747..27bd170c3a2831c6e2c1c9a5980cdb956900d569 100644 (file)
@@ -480,11 +480,11 @@ static int echo_alloc_memmd(struct echo_device *ed,
 
        LASSERT(*lsmp == NULL);
        *lsmp = kzalloc(lsm_size, GFP_NOFS);
-       if (*lsmp == NULL)
+       if (!*lsmp)
                return -ENOMEM;
 
        (*lsmp)->lsm_oinfo[0] = kzalloc(sizeof(struct lov_oinfo), GFP_NOFS);
-       if ((*lsmp)->lsm_oinfo[0] == NULL) {
+       if (!(*lsmp)->lsm_oinfo[0]) {
                kfree(*lsmp);
                return -ENOMEM;
        }
@@ -701,7 +701,7 @@ static struct lu_device *echo_device_alloc(const struct lu_env *env,
        int cleanup = 0;
 
        ed = kzalloc(sizeof(*ed), GFP_NOFS);
-       if (ed == NULL) {
+       if (!ed) {
                rc = -ENOMEM;
                goto out;
        }
@@ -1878,7 +1878,7 @@ echo_client_iocontrol(unsigned int cmd, struct obd_export *exp, int len,
                return rc;
 
        env = kzalloc(sizeof(*env), GFP_NOFS);
-       if (env == NULL)
+       if (!env)
                return -ENOMEM;
 
        rc = lu_env_init(env, LCT_DT_THREAD);
@@ -2049,7 +2049,7 @@ static int echo_client_setup(const struct lu_env *env,
        ec->ec_nstripes = 0;
 
        ocd = kzalloc(sizeof(*ocd), GFP_NOFS);
-       if (ocd == NULL) {
+       if (!ocd) {
                CERROR("Can't alloc ocd connecting to %s\n",
                       lustre_cfg_string(lcfg, 1));
                return -ENOMEM;
@@ -2139,7 +2139,7 @@ static struct obd_ops echo_client_obd_ops = {
        .o_disconnect  = echo_client_disconnect
 };
 
-int echo_client_init(void)
+static int echo_client_init(void)
 {
        int rc;
 
@@ -2154,7 +2154,7 @@ int echo_client_init(void)
        return rc;
 }
 
-void echo_client_exit(void)
+static void echo_client_exit(void)
 {
        class_unregister_type(LUSTRE_ECHO_CLIENT_NAME);
        lu_kmem_fini(echo_caches);
index 5592d32a1a95645b76d348ff15b2bf7678654ae2..c72035e048aa9842d25af105ae0d6cab749a49ed 100644 (file)
@@ -1837,12 +1837,6 @@ static int try_to_add_extent_for_io(struct client_obd *cli,
                oap2 = list_first_entry(&tmp->oe_pages, struct osc_async_page,
                                        oap_pending_item);
                EASSERT(tmp->oe_owner == current, tmp);
-#if 0
-               if (overlapped(tmp, ext)) {
-                       OSC_EXTENT_DUMP(D_ERROR, tmp, "overlapped %p.\n", ext);
-                       EASSERT(0, ext);
-               }
-#endif
                if (oap2cl_page(oap)->cp_type != oap2cl_page(oap2)->cp_type) {
                        CDEBUG(D_CACHE, "Do not permit different type of IO"
                                        " for a same RPC\n");
index 9222c9f4faae5c15298750646e27377ca99bae28..91fdec44792b097edf45b7a2d80bcdc2dd7e90b8 100644 (file)
@@ -218,7 +218,7 @@ static struct lu_device *osc_device_alloc(const struct lu_env *env,
        int rc;
 
        od = kzalloc(sizeof(*od), GFP_NOFS);
-       if (od == NULL)
+       if (!od)
                return ERR_PTR(-ENOMEM);
 
        cl_device_init(&od->od_cl, t);
index 43dfa73dd3a61747c30dfbb37ddb66955edce28d..f9cf5cea643d8f846a4b10ca243818fd6c4def32 100644 (file)
@@ -471,7 +471,7 @@ static int osc_page_flush(const struct lu_env *env,
                          struct cl_io *io)
 {
        struct osc_page *opg = cl2osc_page(slice);
-       int rc = 0;
+       int rc;
 
        rc = osc_flush_async_page(env, io, opg);
        return rc;
index f84b4c78a8a0a3f3ef8f2351115225e2f948ddd9..12113dfd87b8e614f948a9162442ba44b6f61894 100644 (file)
@@ -119,7 +119,7 @@ static int osc_packmd(struct obd_export *exp, struct lov_mds_md **lmmp,
 
        if (*lmmp == NULL) {
                *lmmp = kzalloc(lmm_size, GFP_NOFS);
-               if (*lmmp == NULL)
+               if (!*lmmp)
                        return -ENOMEM;
        }
 
@@ -1909,7 +1909,7 @@ int osc_build_rpc(const struct lu_env *env, struct client_obd *cli,
                mpflag = cfs_memory_pressure_get_and_set();
 
        crattr = kzalloc(sizeof(*crattr), GFP_NOFS);
-       if (crattr == NULL) {
+       if (!crattr) {
                rc = -ENOMEM;
                goto out;
        }
@@ -2665,7 +2665,7 @@ static int osc_iocontrol(unsigned int cmd, struct obd_export *exp, int len,
 
                buf = NULL;
                len = 0;
-               if (obd_ioctl_getdata(&buf, &len, (void *)uarg)) {
+               if (obd_ioctl_getdata(&buf, &len, uarg)) {
                        err = -EINVAL;
                        goto out;
                }
@@ -2695,7 +2695,7 @@ static int osc_iocontrol(unsigned int cmd, struct obd_export *exp, int len,
 
                memcpy(data->ioc_inlbuf2, &obd->obd_uuid, sizeof(uuid));
 
-               err = copy_to_user((void *)uarg, buf, len);
+               err = copy_to_user(uarg, buf, len);
                if (err)
                        err = -EFAULT;
                obd_ioctl_freedata(buf, len);
index a12cd66b23650db841853e165e6331c903cfcb6b..c83a34a01e659cea3b2d583d1d1711e97f2d953b 100644 (file)
@@ -971,7 +971,7 @@ int ptlrpc_set_add_cb(struct ptlrpc_request_set *set,
        struct ptlrpc_set_cbdata *cbdata;
 
        cbdata = kzalloc(sizeof(*cbdata), GFP_NOFS);
-       if (cbdata == NULL)
+       if (!cbdata)
                return -ENOMEM;
 
        cbdata->psc_interpret = fn;
index 8cb1929fd31df652a1b031cb7dd04a0cdfb5d676..c8ef9e57826326c62019a7d76eadce99d367a2e7 100644 (file)
@@ -485,7 +485,7 @@ int ptlrpc_uuid_to_peer(struct obd_uuid *uuid,
        return rc;
 }
 
-void ptlrpc_ni_fini(void)
+static void ptlrpc_ni_fini(void)
 {
        wait_queue_head_t waitq;
        struct l_wait_info lwi;
@@ -529,7 +529,7 @@ lnet_pid_t ptl_get_pid(void)
        return pid;
 }
 
-int ptlrpc_ni_init(void)
+static int ptlrpc_ni_init(void)
 {
        int rc;
        lnet_pid_t pid;
index c9b8481dd38462b51d580b05914fdb9078cc3869..1eae3896c0375ce6f2d7ed0c6856b000f2a487f3 100644 (file)
@@ -555,14 +555,12 @@ static int import_select_connection(struct obd_import *imp)
        imp_conn->oic_last_attempt = cfs_time_current_64();
 
        /* switch connection, don't mind if it's same as the current one */
-       if (imp->imp_connection)
-               ptlrpc_connection_put(imp->imp_connection);
+       ptlrpc_connection_put(imp->imp_connection);
        imp->imp_connection = ptlrpc_connection_addref(imp_conn->oic_conn);
 
        dlmexp = class_conn2export(&imp->imp_dlm_handle);
        LASSERT(dlmexp != NULL);
-       if (dlmexp->exp_connection)
-               ptlrpc_connection_put(dlmexp->exp_connection);
+       ptlrpc_connection_put(dlmexp->exp_connection);
        dlmexp->exp_connection = ptlrpc_connection_addref(imp_conn->oic_conn);
        class_export_put(dlmexp);
 
index aaaabbf5f1b9807770d7e743e3c62035fd8809bf..53f9af1f2f3eaa109599b9a3e610171acf7ecd64 100644 (file)
@@ -652,7 +652,7 @@ static ssize_t ptlrpc_lprocfs_nrs_seq_write(struct file *file,
                return -EINVAL;
 
        cmd = kzalloc(LPROCFS_NRS_WR_MAX_CMD, GFP_NOFS);
-       if (cmd == NULL)
+       if (!cmd)
                return -ENOMEM;
        /**
         * strsep() modifies its argument, so keep a copy
@@ -819,7 +819,7 @@ ptlrpc_lprocfs_svc_req_history_start(struct seq_file *s, loff_t *pos)
        }
 
        srhi = kzalloc(sizeof(*srhi), GFP_NOFS);
-       if (srhi == NULL)
+       if (!srhi)
                return NULL;
 
        srhi->srhi_seq = 0;
@@ -1219,7 +1219,7 @@ int lprocfs_wr_evict_client(struct file *file, const char __user *buffer,
        char *tmpbuf;
 
        kbuf = kzalloc(BUFLEN, GFP_NOFS);
-       if (kbuf == NULL)
+       if (!kbuf)
                return -ENOMEM;
 
        /*
@@ -1303,7 +1303,7 @@ int lprocfs_wr_import(struct file *file, const char __user *buffer,
                return -EINVAL;
 
        kbuf = kzalloc(count + 1, GFP_NOFS);
-       if (kbuf == NULL)
+       if (!kbuf)
                return -ENOMEM;
 
        if (copy_from_user(kbuf, buffer, count)) {
index 9516acadb7a16d5697f4b05bcd61565882ae3643..d37cdd5ac58065481ec7403c7d9962cef90df1c4 100644 (file)
@@ -1156,7 +1156,7 @@ int ptlrpc_nrs_policy_register(struct ptlrpc_nrs_pol_conf *conf)
        }
 
        desc = kzalloc(sizeof(*desc), GFP_NOFS);
-       if (desc == NULL) {
+       if (!desc) {
                rc = -ENOMEM;
                goto fail;
        }
index d05c37c1fd30f3636185a3770e5d320aae1f4983..f8edb791a998bc0373fd398ed608a30ed8cdd4ac 100644 (file)
@@ -318,8 +318,6 @@ int ptlrpc_start_pinger(void)
 
        strcpy(pinger_thread.t_name, "ll_ping");
 
-       /* CLONE_VM and CLONE_FILES just avoid a needless copy, because we
-        * just drop the VM and FILES in cfs_daemonize_ctxt() right away. */
        rc = PTR_ERR(kthread_run(ptlrpc_pinger_main, &pinger_thread,
                                 "%s", pinger_thread.t_name));
        if (IS_ERR_VALUE(rc)) {
index 5268887ca6b3468fc83afac01a7a22c754ecd04f..ae99180d6036f10647d0b4dbbf8b7e3bdbcb1589 100644 (file)
@@ -51,7 +51,7 @@ extern spinlock_t ptlrpc_rs_debug_lock;
 extern struct mutex pinger_mutex;
 extern struct mutex ptlrpcd_mutex;
 
-__init int ptlrpc_init(void)
+static int __init ptlrpc_init(void)
 {
        int rc, cleanup_phase = 0;
 
index e591cff323ece570c342ef32e0b7329e59a1c47d..17cc81d5074f3706c3ad97463ce0b15492cd791f 100644 (file)
@@ -739,7 +739,7 @@ static int ptlrpcd_init(void)
 
        size = offsetof(struct ptlrpcd, pd_threads[nthreads]);
        ptlrpcds = kzalloc(size, GFP_NOFS);
-       if (ptlrpcds == NULL) {
+       if (!ptlrpcds) {
                rc = -ENOMEM;
                goto out;
        }
index 69d73c43069636d310b5d7fc1c0a36162f6ae988..2ee3e8b2e879eac164aa73e7454fd5393d89c416 100644 (file)
@@ -415,7 +415,7 @@ static int enc_pools_add_pages(int npages)
 
        for (i = 0; i < npools; i++) {
                pools[i] = kzalloc(PAGE_CACHE_SIZE, GFP_NOFS);
-               if (pools[i] == NULL)
+               if (!pools[i])
                        goto out_pools;
 
                for (j = 0; j < PAGES_PER_POOL && alloced < npages; j++) {
index 31da43e8b3c62942e01a53e328694ea0bd3e9100..e7f2f333257db9f964ac590aff1dad7b6979a064 100644 (file)
@@ -564,7 +564,7 @@ struct sptlrpc_conf *sptlrpc_conf_get(const char *fsname,
                return NULL;
 
        conf = kzalloc(sizeof(*conf), GFP_NOFS);
-       if (conf == NULL)
+       if (!conf)
                return NULL;
 
        strcpy(conf->sc_fsname, fsname);
index 53ce0d14bd469f5d172dd369509ae84110bf8c75..a243db60f69776ddc4b9c197d67e39d6a77b9a65 100644 (file)
@@ -444,7 +444,7 @@ struct ptlrpc_sec *plain_create_sec(struct obd_import *imp,
        LASSERT(SPTLRPC_FLVR_POLICY(sf->sf_rpc) == SPTLRPC_POLICY_PLAIN);
 
        plsec = kzalloc(sizeof(*plsec), GFP_NOFS);
-       if (plsec == NULL)
+       if (!plsec)
                return NULL;
 
        /*
index 9117f1c15a8e88dbacda3fa2b8e3afb3c94d9690..003344ccfffcde1d88a43556fa404be11072be36 100644 (file)
@@ -43,7 +43,7 @@
 #include "ptlrpc_internal.h"
 
 /* The following are visible and mutable through /sys/module/ptlrpc */
-int test_req_buffer_pressure = 0;
+int test_req_buffer_pressure;
 module_param(test_req_buffer_pressure, int, 0444);
 MODULE_PARM_DESC(test_req_buffer_pressure, "set non-zero to put pressure on request buffer pools");
 module_param(at_min, int, 0644);
@@ -69,7 +69,7 @@ LIST_HEAD(ptlrpc_all_services);
 /** Used to protect the \e ptlrpc_all_services list */
 struct mutex ptlrpc_all_services_mutex;
 
-struct ptlrpc_request_buffer_desc *
+static struct ptlrpc_request_buffer_desc *
 ptlrpc_alloc_rqbd(struct ptlrpc_service_part *svcpt)
 {
        struct ptlrpc_service *svc = svcpt->scp_service;
@@ -101,7 +101,7 @@ ptlrpc_alloc_rqbd(struct ptlrpc_service_part *svcpt)
        return rqbd;
 }
 
-void
+static void
 ptlrpc_free_rqbd(struct ptlrpc_request_buffer_desc *rqbd)
 {
        struct ptlrpc_service_part *svcpt = rqbd->rqbd_svcpt;
@@ -118,7 +118,7 @@ ptlrpc_free_rqbd(struct ptlrpc_request_buffer_desc *rqbd)
        kfree(rqbd);
 }
 
-int
+static int
 ptlrpc_grow_req_bufs(struct ptlrpc_service_part *svcpt, int post)
 {
        struct ptlrpc_service *svc = svcpt->scp_service;
@@ -732,7 +732,7 @@ ptlrpc_register_service(struct ptlrpc_service_conf *conf,
 
        service = kzalloc(offsetof(struct ptlrpc_service, srv_parts[ncpts]),
                          GFP_NOFS);
-       if (service == NULL) {
+       if (!service) {
                kfree(cpts);
                return ERR_PTR(-ENOMEM);
        }
@@ -2298,7 +2298,7 @@ static int ptlrpc_main(void *arg)
        }
 
        env = kzalloc(sizeof(*env), GFP_NOFS);
-       if (env == NULL) {
+       if (!env) {
                rc = -ENOMEM;
                goto out_srv_fini;
        }
@@ -2826,9 +2826,7 @@ void ptlrpc_hr_fini(void)
        ptlrpc_stop_hr_threads();
 
        cfs_percpt_for_each(hrp, i, ptlrpc_hr.hr_partitions) {
-               if (hrp->hrp_thrs != NULL) {
-                       kfree(hrp->hrp_thrs);
-               }
+               kfree(hrp->hrp_thrs);
        }
 
        cfs_percpt_free(ptlrpc_hr.hr_partitions);
@@ -3054,7 +3052,7 @@ EXPORT_SYMBOL(ptlrpc_unregister_service);
  * Right now, it just checks to make sure that requests aren't languishing
  * in the queue.  We'll use this health check to govern whether a node needs
  * to be shot, so it's intentionally non-aggressive. */
-int ptlrpc_svcpt_health_check(struct ptlrpc_service_part *svcpt)
+static int ptlrpc_svcpt_health_check(struct ptlrpc_service_part *svcpt)
 {
        struct ptlrpc_request *request = NULL;
        struct timeval right_now;
index 1e302e8516ce55ed57a7900d0ba2f2275ffe4d70..873e2cf312176cb1bceed54e27ec10d6909b9cd9 100644 (file)
@@ -40,6 +40,109 @@ Description:
                               e.g. dd.1253
                nodelocal - use jobid_name value from above.
 
+What:          /sys/fs/lustre/timeout
+Date:          June 2015
+Contact:       "Oleg Drokin" <oleg.drokin@intel.com>
+Description:
+               Controls "lustre timeout" variable, also known as obd_timeout
+               in some old manual. In the past obd_timeout was of paramount
+               importance as the timeout value used everywhere and where
+               other timeouts were derived from. These days it's much less
+               important as network timeouts are mostly determined by
+               AT (adaptive timeouts).
+               Unit: seconds, default: 100
+
+What:          /sys/fs/lustre/max_dirty_mb
+Date:          June 2015
+Contact:       "Oleg Drokin" <oleg.drokin@intel.com>
+Description:
+               Controls total number of dirty cache (in megabytes) allowed
+               across all mounted lustre filesystems.
+               Since writeout of dirty pages in Lustre is somewhat expensive,
+               when you allow to many dirty pages, this might lead to
+               performance degradations as kernel tries to desperately
+               find some pages to free/writeout.
+               Default 1/2 RAM. Min value 4, max value 9/10 of RAM.
+
+What:          /sys/fs/lustre/debug_peer_on_timeout
+Date:          June 2015
+Contact:       "Oleg Drokin" <oleg.drokin@intel.com>
+Description:
+               Control if lnet debug information should be printed when
+               an RPC timeout occurs.
+               0 disabled (default)
+               1 enabled
+
+What:          /sys/fs/lustre/dump_on_timeout
+Date:          June 2015
+Contact:       "Oleg Drokin" <oleg.drokin@intel.com>
+Description:
+               Controls if Lustre debug log should be dumped when an RPC
+               timeout occurs. This is useful if yout debug buffer typically
+               rolls over by the time you notice RPC timeouts.
+
+What:          /sys/fs/lustre/dump_on_eviction
+Date:          June 2015
+Contact:       "Oleg Drokin" <oleg.drokin@intel.com>
+Description:
+               Controls if Lustre debug log should be dumped when an this
+               client is evicted from one of the servers.
+               This is useful if yout debug buffer typically rolls over
+                by the time you notice the eviction event.
+
+What:          /sys/fs/lustre/at_min
+Date:          July 2015
+Contact:       "Oleg Drokin" <oleg.drokin@intel.com>
+Description:
+               Controls minimum adaptive timeout in seconds. If you encounter
+               a case where clients timeout due to server-reported processing
+               time being too short, you might consider increasing this value.
+               One common case of this if the underlying network has
+               unpredictable long delays.
+               Default: 0
+
+What:          /sys/fs/lustre/at_max
+Date:          July 2015
+Contact:       "Oleg Drokin" <oleg.drokin@intel.com>
+Description:
+               Controls maximum adaptive timeout in seconds. If at_max timeout
+               is reached for an RPC, the RPC will time out.
+               Some genuinuely slow network hardware might warrant increasing
+               this value.
+               Setting this value to 0 disables Adaptive Timeouts
+               functionality and old-style obd_timeout value is then used.
+               Default: 600
+
+What:          /sys/fs/lustre/at_extra
+Date:          July 2015
+Contact:       "Oleg Drokin" <oleg.drokin@intel.com>
+Description:
+               Controls how much extra time to request for unfinished requests
+               in processing in seconds. Normally a server-side parameter, it
+               is also used on the client for responses to various LDLM ASTs
+               that are handled with a special server thread on the client.
+               This is a way for the servers to ask the clients not to time
+               out the request that reached current servicing time estimate
+               yet and give it some more time.
+               Default: 30
+
+What:          /sys/fs/lustre/at_early_margin
+Date:          July 2015
+Contact:       "Oleg Drokin" <oleg.drokin@intel.com>
+Description:
+               Controls when to send the early reply for requests that are
+               about to timeout as an offset to the estimated service time in
+               seconds..
+               Default: 5
+
+What:          /sys/fs/lustre/at_history
+Date:          July 2015
+Contact:       "Oleg Drokin" <oleg.drokin@intel.com>
+Description:
+               Controls for how many seconds to remember slowest events
+               encountered by adaptive timeouts code.
+               Default: 600
+
 What:          /sys/fs/lustre/llite/<fsname>-<uuid>/blocksize
 Date:          May 2015
 Contact:       "Oleg Drokin" <oleg.drokin@intel.com>
diff --git a/drivers/staging/most/Documentation/ABI/sysfs-class-most.txt b/drivers/staging/most/Documentation/ABI/sysfs-class-most.txt
new file mode 100644 (file)
index 0000000..380c137
--- /dev/null
@@ -0,0 +1,181 @@
+What:          /sys/class/most/mostcore/aims
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               List of AIMs that have been loaded.
+Users:
+
+What:          /sys/class/most/mostcore/aims/<aim>/add_link
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               This is used to establish a connection of a channel and the
+               current AIM.
+Users:
+
+What:          /sys/class/most/mostcore/aims/<aim>/remove_link
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               This is used to remove a connected channel from the
+               current AIM.
+Users:
+
+What:          /sys/class/most/mostcore/devices
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               List of attached MOST interfaces.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/description
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               Provides information about the interface type and the physical
+               location of the device. Hardware attached via USB, for instance,
+               might return <usb_device 1-1.1:1.0>
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/interface
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               Indicates the type of peripherial interface the current device
+               uses.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/<channel>/
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               For every channel of the device a directory is created, whose
+               name is dictated by the HDM. This enables an application to
+               collect information about the channel's capabilities and
+               configure it.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/<channel>/available_datatypes
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               Indicates the data types the current channel can transport.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/<channel>/available_directions
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               Indicates the directions the current channel is capable of.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/<channel>/number_of_packet_buffers
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               Indicates the number of packet buffers the current channel can
+               handle.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/<channel>/number_of_stream_buffers
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               Indicates the number of streaming buffers the current channel can
+               handle.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/<channel>/size_of_packet_buffer
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               Indicates the size of a packet buffer the current channel can
+               handle.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/<channel>/size_of_stream_buffer
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               Indicates the size of a streaming buffer the current channel can
+               handle.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/<channel>/set_number_of_buffers
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               This is to configure the number of buffers of the current channel.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/<channel>/set_buffer_size
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               This is to configure the size of a buffer of the current channel.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/<channel>/set_direction
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               This is to configure the direction of the current channel.
+               The following strings will be accepted:
+                       'dir_tx',
+                       'dir_rx'
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/<channel>/set_datatype
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               This is to configure the data type of the current channel.
+               The following strings will be accepted:
+                       'control',
+                       'async',
+                       'sync',
+                       'isoc_avp'
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/<channel>/set_subbuffer_size
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               This is to configure the subbuffer size of the current channel.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/<channel>/set_packets_per_xact
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               This is to configure the number of packets per transaction of
+               the current channel. This is only needed network interface
+               controller is attached via USB.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/<channel>/channel_starving
+Date:          June 2015
+KernelVersion: 4.3
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               Indicates whether current channel ran out of buffers.
+Users:
diff --git a/drivers/staging/most/Documentation/driver_usage.txt b/drivers/staging/most/Documentation/driver_usage.txt
new file mode 100644 (file)
index 0000000..a4dc0c3
--- /dev/null
@@ -0,0 +1,180 @@
+
+               Section 1 Overview
+
+The Media Oriented Systems Transport (MOST) driver gives Linux applications
+access a MOST network: The Automotive Information Backbone and the de-facto
+standard for high-bandwidth automotive multimedia networking.
+
+MOST defines the protocol, hardware and software layers necessary to allow
+for the efficient and low-cost transport of control, real-time and packet
+data using a single medium (physical layer). Media currently in use are
+fiber optics, unshielded twisted pair cables (UTP) and coax cables. MOST
+also supports various speed grades up to 150 Mbps.
+For more information on MOST, visit the MOST Cooperation website:
+www.mostcooperation.com.
+
+Cars continue to evolve into sophisticated consumer electronics platforms,
+increasing the demand for reliable and simple solutions to support audio,
+video and data communications. MOST can be used to connect multiple
+consumer devices via optical or electrical physical layers directly to one
+another or in a network configuration. As a synchronous network, MOST
+provides excellent Quality of Service and seamless connectivity for
+audio/video streaming. Therefore, the driver perfectly fits to the mission
+of Automotive Grade Linux to create open source software solutions for
+automotive applications.
+
+The driver consists basically of three layers. The hardware layer, the
+core layer and the application layer. The core layer consists of the core
+module only. This module handles the communication flow through all three
+layers, the configuration of the driver, the configuration interface
+representation in sysfs, and the buffer management.
+For each of the other two layers a selection of modules is provided. These
+modules can arbitrarily be combined to meet the needs of the desired
+system architecture. A module of the hardware layer is referred to as an
+HDM (hardware dependent module). Each module of this layer handles exactly
+one of the peripheral interfaces of a network interface controller (e.g.
+USB, MediaLB, I2C). A module of the application layer is referred to as an
+AIM (application interfacing module). The modules of this layer give access
+to MOST via one the following ways: character devices, ALSA, Networking or
+V4L2.
+
+To physically access MOST, an Intelligent Network Interface Controller
+(INIC) is needed. For more information on available controllers visit:
+www.microchip.com
+
+
+
+               Section 1.1 Hardware Layer
+
+The hardware layer contains so called hardware dependent modules (HDM). For each
+peripheral interface the hardware supports the driver has a suitable module
+that handles the interface.
+
+The HDMs encapsulate the peripheral interface specific knowledge of the driver
+and provides an easy way of extending the number of supported interfaces.
+Currently the following HDMs are available:
+
+       1) MediaLB (DIM2)
+          Host wants to communicate with hardware via MediaLB.
+
+       2) I2C
+          Host wants to communicate with the hardware via I2C.
+
+       3) USB
+          Host wants to communicate with the hardware via USB.
+
+
+               Section 1.2 Core Layer
+
+The core layer contains the mostcore module only, which processes the driver
+configuration via sysfs, buffer management and data forwarding.
+
+
+
+               Section 1.2 Application Layer
+
+The application layer contains so called application interfacing modules (AIM).
+Depending on how the driver should interface to the application, one or more
+suitable modules can be selected.
+
+The AIMs encapsulate the application interface specific knowledge of the driver
+and provides access to user space or other kernel subsystems.
+Currently the following AIMs are available
+
+       1) Character Device
+          Applications can access the driver by means of character devices.
+
+       2) Networking
+          Standard networking applications (e.g. iperf) can by used to access
+          the driver via the networking subsystem.
+
+       3) Video4Linux (v4l2)
+          Standard video applications (e.g. VLC) can by used to access the
+          driver via the V4L subsystem.
+
+       4) Advanced Linux Sound Architecture (ALSA)
+          Standard sound applications (e.g. aplay, arecord, audacity) can by
+          used to access the driver via the ALSA subsystem.
+
+
+
+               Section 2 Configuration
+
+See ABI/sysfs-class-most.txt
+
+
+
+               Section 3 USB Padding
+
+When transceiving synchronous or isochronous data, the number of packets per USB
+transaction and the sub-buffer size need to be configured. These values
+are needed for the driver to process buffer padding, as expected by hardware,
+which is for performance optimization purposes of the USB transmission.
+
+When transmitting synchronous data the allocated channel width needs to be
+written to 'set_subbuffer_size'. Additionally, the number of MOST frames that
+should travel to the host within one USB transaction need to be written to
+'packets_per_xact'.
+
+Internally the synchronous threshold is calculated as follows:
+
+       frame_size = set_subbuffer_size * packets_per_xact
+
+In case 'packets_per_xact' is set to 0xFF the maximum number of packets,
+allocated within one MOST frame, is calculated that fit into _one_ 512 byte
+USB full packet.
+
+       frame_size = floor(MTU_USB / bandwidth_sync) * bandwidth_sync
+
+This frame_size is the number of synchronous data within an USB transaction,
+which renders MTU_USB - frame_size bytes for padding.
+
+When transmitting isochronous AVP data the desired packet size needs to be
+written to 'set_subbuffer_size' and hardware will always expect two isochronous
+packets within one USB transaction. This renders
+
+       MTU_USB - (2 * set_subbuffer_size)
+
+bytes for padding.
+
+Note that at least 2 times set_subbuffer_size bytes for isochronous data or
+set_subbuffer_size times packts_per_xact bytes for synchronous data need to be
+put in the transmission buffer and passed to the driver.
+
+Since HDMs are allowed to change a chosen configuration to best fit its
+constraints, it is recommended to always double check the configuration and read
+back the previously written files.
+
+
+
+               Section 4 Routing Channels
+
+To connect a channel that has been configured as outlined above to an AIM and
+make it accessible to user space applications, the attribute file 'add_link' is
+used. To actually bind a channel to the AIM a string needs to be written to the
+file that complies with the following syntax:
+
+       "most_device:channel_name:link_name[.param]"
+
+The example above links the channel "channel_name" of the device "most_device"
+to the AIM. In case the AIM interfaces the VFS this would also create a device
+node "link_name" in the /dev directory. The parameter "param" is an AIM dependent
+string, which can be omitted in case the used AIM does not make any use of it.
+
+Cdev AIM example:
+        $ echo "mdev0:ep_81:my_rx_channel" >add_link
+        $ echo "mdev0:ep_81" >add_link
+
+
+Sound/ALSA AIM example:
+
+The sound/ALSA AIM needs an additional parameter to determine the audio resolution
+that is going to be used. The following strings can be used:
+
+       - "1x8" (Mono)
+       - "2x16" (16-bit stereo)
+       - "2x24" (24-bit stereo)
+       - "2x32" (32-bit stereo)
+
+        $ echo "mdev0:ep_81:audio_rx.2x16" >add_link
+        $ echo "mdev0:ep_81" >add_link
diff --git a/drivers/staging/most/Kconfig b/drivers/staging/most/Kconfig
new file mode 100644 (file)
index 0000000..d50de03
--- /dev/null
@@ -0,0 +1,30 @@
+menuconfig MOST
+        tristate "MOST driver"
+        select MOSTCORE
+        default n
+        ---help---
+          This option allows you to enable support for MOST Network transceivers.
+
+          If in doubt, say N here.
+
+
+
+if MOST
+
+source "drivers/staging/most/mostcore/Kconfig"
+
+source "drivers/staging/most/aim-cdev/Kconfig"
+
+source "drivers/staging/most/aim-network/Kconfig"
+
+source "drivers/staging/most/aim-sound/Kconfig"
+
+source "drivers/staging/most/aim-v4l2/Kconfig"
+
+source "drivers/staging/most/hdm-dim2/Kconfig"
+
+source "drivers/staging/most/hdm-i2c/Kconfig"
+
+source "drivers/staging/most/hdm-usb/Kconfig"
+
+endif
diff --git a/drivers/staging/most/Makefile b/drivers/staging/most/Makefile
new file mode 100644 (file)
index 0000000..9ee981c
--- /dev/null
@@ -0,0 +1,8 @@
+obj-$(CONFIG_MOSTCORE) += mostcore/
+obj-$(CONFIG_AIM_CDEV) += aim-cdev/
+obj-$(CONFIG_AIM_NETWORK)      += aim-network/
+obj-$(CONFIG_AIM_SOUND)        += aim-sound/
+obj-$(CONFIG_AIM_V4L2) += aim-v4l2/
+obj-$(CONFIG_HDM_DIM2) += hdm-dim2/
+obj-$(CONFIG_HDM_I2C)  += hdm-i2c/
+obj-$(CONFIG_HDM_USB)  += hdm-usb/
diff --git a/drivers/staging/most/TODO b/drivers/staging/most/TODO
new file mode 100644 (file)
index 0000000..4fa11a9
--- /dev/null
@@ -0,0 +1,8 @@
+* Get through code review with Greg Kroah-Hartman
+
+Contact:
+To:
+Christian Gromm <christian.gromm@microchip.com>
+Cc:
+Michael Fabry <Michael.Fabry@microchip.com>
+Christian Gromm <chris@engineersdelight.de>
diff --git a/drivers/staging/most/aim-cdev/Kconfig b/drivers/staging/most/aim-cdev/Kconfig
new file mode 100644 (file)
index 0000000..3c59f1b
--- /dev/null
@@ -0,0 +1,12 @@
+#
+# MOST Cdev configuration
+#
+
+config AIM_CDEV
+       tristate "Cdev AIM"
+
+       ---help---
+         Say Y here if you want to commumicate via character devices.
+
+         To compile this driver as a module, choose M here: the
+         module will be called aim_cdev.
\ No newline at end of file
diff --git a/drivers/staging/most/aim-cdev/Makefile b/drivers/staging/most/aim-cdev/Makefile
new file mode 100644 (file)
index 0000000..0bcc6c6
--- /dev/null
@@ -0,0 +1,4 @@
+obj-$(CONFIG_AIM_CDEV) += aim_cdev.o
+
+aim_cdev-objs := cdev.o
+ccflags-y += -Idrivers/staging/most/mostcore/
\ No newline at end of file
diff --git a/drivers/staging/most/aim-cdev/cdev.c b/drivers/staging/most/aim-cdev/cdev.c
new file mode 100644 (file)
index 0000000..252a17c
--- /dev/null
@@ -0,0 +1,528 @@
+/*
+ * cdev.c - Application interfacing module for character devices
+ *
+ * Copyright (C) 2013-2015 Microchip Technology Germany II GmbH & Co. KG
+ *
+ * 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 file is licensed under GPLv2.
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+#include <linux/module.h>
+#include <linux/sched.h>
+#include <linux/fs.h>
+#include <linux/slab.h>
+#include <linux/device.h>
+#include <linux/cdev.h>
+#include <linux/kfifo.h>
+#include <linux/uaccess.h>
+#include <linux/idr.h>
+#include "mostcore.h"
+
+static dev_t aim_devno;
+static struct class *aim_class;
+static struct ida minor_id;
+static unsigned int major;
+
+struct aim_channel {
+       wait_queue_head_t wq;
+       struct cdev cdev;
+       struct device *dev;
+       struct mutex io_mutex;
+       struct most_interface *iface;
+       struct most_channel_config *cfg;
+       unsigned int channel_id;
+       dev_t devno;
+       bool keep_mbo;
+       unsigned int mbo_offs;
+       struct mbo *stacked_mbo;
+       DECLARE_KFIFO_PTR(fifo, typeof(struct mbo *));
+       atomic_t access_ref;
+       struct list_head list;
+};
+#define to_channel(d) container_of(d, struct aim_channel, cdev)
+static struct list_head channel_list;
+static spinlock_t ch_list_lock;
+
+
+struct aim_channel *get_channel(struct most_interface *iface, int id)
+{
+       struct aim_channel *channel, *tmp;
+       unsigned long flags;
+       int found_channel = 0;
+
+       spin_lock_irqsave(&ch_list_lock, flags);
+       list_for_each_entry_safe(channel, tmp, &channel_list, list) {
+               if ((channel->iface == iface) && (channel->channel_id == id)) {
+                       found_channel = 1;
+                       break;
+               }
+       }
+       spin_unlock_irqrestore(&ch_list_lock, flags);
+       if (!found_channel)
+               return NULL;
+       return channel;
+}
+
+/**
+ * aim_open - implements the syscall to open the device
+ * @inode: inode pointer
+ * @filp: file pointer
+ *
+ * This stores the channel pointer in the private data field of
+ * the file structure and activates the channel within the core.
+ */
+static int aim_open(struct inode *inode, struct file *filp)
+{
+       struct aim_channel *channel;
+       int ret;
+
+       channel = to_channel(inode->i_cdev);
+       filp->private_data = channel;
+
+       if (((channel->cfg->direction == MOST_CH_RX) &&
+            ((filp->f_flags & O_ACCMODE) != O_RDONLY))
+           || ((channel->cfg->direction == MOST_CH_TX) &&
+               ((filp->f_flags & O_ACCMODE) != O_WRONLY))) {
+               pr_info("WARN: Access flags mismatch\n");
+               return -EACCES;
+       }
+       if (!atomic_inc_and_test(&channel->access_ref)) {
+               pr_info("WARN: Device is busy\n");
+               atomic_dec(&channel->access_ref);
+               return -EBUSY;
+       }
+
+       ret = most_start_channel(channel->iface, channel->channel_id);
+       if (ret)
+               atomic_dec(&channel->access_ref);
+       return ret;
+}
+
+/**
+ * aim_close - implements the syscall to close the device
+ * @inode: inode pointer
+ * @filp: file pointer
+ *
+ * This stops the channel within the core.
+ */
+static int aim_close(struct inode *inode, struct file *filp)
+{
+       int ret;
+       struct mbo *mbo;
+       struct aim_channel *channel = to_channel(inode->i_cdev);
+
+       mutex_lock(&channel->io_mutex);
+       if (!channel->dev) {
+               mutex_unlock(&channel->io_mutex);
+               atomic_dec(&channel->access_ref);
+               device_destroy(aim_class, channel->devno);
+               cdev_del(&channel->cdev);
+               kfifo_free(&channel->fifo);
+               list_del(&channel->list);
+               ida_simple_remove(&minor_id, MINOR(channel->devno));
+               wake_up_interruptible(&channel->wq);
+               kfree(channel);
+               return 0;
+       }
+       mutex_unlock(&channel->io_mutex);
+
+       while (0 != kfifo_out((struct kfifo *)&channel->fifo, &mbo, 1))
+               most_put_mbo(mbo);
+       if (channel->keep_mbo == true)
+               most_put_mbo(channel->stacked_mbo);
+       ret = most_stop_channel(channel->iface, channel->channel_id);
+       atomic_dec(&channel->access_ref);
+       wake_up_interruptible(&channel->wq);
+       return ret;
+}
+
+/**
+ * aim_write - implements the syscall to write to the device
+ * @filp: file pointer
+ * @buf: pointer to user buffer
+ * @count: number of bytes to write
+ * @offset: offset from where to start writing
+ */
+static ssize_t aim_write(struct file *filp, const char __user *buf,
+                        size_t count, loff_t *offset)
+{
+       int ret, err;
+       size_t actual_len = 0;
+       size_t max_len = 0;
+       ssize_t retval;
+       struct mbo *mbo;
+       struct aim_channel *channel = filp->private_data;
+
+       mutex_lock(&channel->io_mutex);
+       if (unlikely(!channel->dev)) {
+               mutex_unlock(&channel->io_mutex);
+               return -EPIPE;
+       }
+       mutex_unlock(&channel->io_mutex);
+
+       mbo = most_get_mbo(channel->iface, channel->channel_id);
+
+       if (!mbo && channel->dev) {
+               if ((filp->f_flags & O_NONBLOCK))
+                       return -EAGAIN;
+               if (wait_event_interruptible(
+                           channel->wq,
+                           (mbo = most_get_mbo(channel->iface,
+                                               channel->channel_id)) ||
+                           (channel->dev == NULL)))
+                       return -ERESTARTSYS;
+       }
+
+       mutex_lock(&channel->io_mutex);
+       if (unlikely(!channel->dev)) {
+               mutex_unlock(&channel->io_mutex);
+               err = -EPIPE;
+               goto error;
+       }
+       mutex_unlock(&channel->io_mutex);
+
+       max_len = channel->cfg->buffer_size;
+       actual_len = min(count, max_len);
+       mbo->buffer_length = actual_len;
+
+       retval = copy_from_user(mbo->virt_address, buf, mbo->buffer_length);
+       if (retval) {
+               err = -EIO;
+               goto error;
+       }
+
+       ret = most_submit_mbo(mbo);
+       if (ret) {
+               pr_info("submitting MBO to core failed\n");
+               err = ret;
+               goto error;
+       }
+       return actual_len - retval;
+error:
+       if (mbo)
+               most_put_mbo(mbo);
+       return err;
+}
+
+/**
+ * aim_read - implements the syscall to read from the device
+ * @filp: file pointer
+ * @buf: pointer to user buffer
+ * @count: number of bytes to read
+ * @offset: offset from where to start reading
+ */
+static ssize_t
+aim_read(struct file *filp, char __user *buf, size_t count, loff_t *offset)
+{
+       ssize_t retval;
+       size_t not_copied, proc_len;
+       struct mbo *mbo;
+       struct aim_channel *channel = filp->private_data;
+
+       if (channel->keep_mbo == true) {
+               mbo = channel->stacked_mbo;
+               channel->keep_mbo = false;
+               goto start_copy;
+       }
+       while ((0 == kfifo_out(&channel->fifo, &mbo, 1))
+              && (channel->dev != NULL)) {
+               if (filp->f_flags & O_NONBLOCK)
+                       return -EAGAIN;
+               if (wait_event_interruptible(channel->wq,
+                                            (!kfifo_is_empty(&channel->fifo) ||
+                                             (channel->dev == NULL))))
+                       return -ERESTARTSYS;
+       }
+
+start_copy:
+       /* make sure we don't submit to gone devices */
+       mutex_lock(&channel->io_mutex);
+       if (unlikely(!channel->dev)) {
+               mutex_unlock(&channel->io_mutex);
+               return -EIO;
+       }
+
+       if (count < mbo->processed_length)
+               channel->keep_mbo = true;
+
+       proc_len = min((int)count,
+                      (int)(mbo->processed_length - channel->mbo_offs));
+
+       not_copied = copy_to_user(buf,
+                                 mbo->virt_address + channel->mbo_offs,
+                                 proc_len);
+
+       retval = not_copied ? proc_len - not_copied : proc_len;
+
+       if (channel->keep_mbo == true) {
+               channel->mbo_offs = retval;
+               channel->stacked_mbo = mbo;
+       } else {
+               most_put_mbo(mbo);
+               channel->mbo_offs = 0;
+       }
+       mutex_unlock(&channel->io_mutex);
+       return retval;
+}
+
+/**
+ * Initialization of struct file_operations
+ */
+static const struct file_operations channel_fops = {
+       .owner = THIS_MODULE,
+       .read = aim_read,
+       .write = aim_write,
+       .open = aim_open,
+       .release = aim_close,
+};
+
+/**
+ * aim_disconnect_channel - disconnect a channel
+ * @iface: pointer to interface instance
+ * @channel_id: channel index
+ *
+ * This frees allocated memory and removes the cdev that represents this
+ * channel in user space.
+ */
+int aim_disconnect_channel(struct most_interface *iface, int channel_id)
+{
+       struct aim_channel *channel;
+       unsigned long flags;
+
+       if (!iface) {
+               pr_info("Bad interface pointer\n");
+               return -EINVAL;
+       }
+
+       channel = get_channel(iface, channel_id);
+       if (channel == NULL)
+               return -ENXIO;
+
+       mutex_lock(&channel->io_mutex);
+       channel->dev = NULL;
+       mutex_unlock(&channel->io_mutex);
+
+       if (atomic_read(&channel->access_ref)) {
+               device_destroy(aim_class, channel->devno);
+               cdev_del(&channel->cdev);
+               kfifo_free(&channel->fifo);
+               ida_simple_remove(&minor_id, MINOR(channel->devno));
+               spin_lock_irqsave(&ch_list_lock, flags);
+               list_del(&channel->list);
+               spin_unlock_irqrestore(&ch_list_lock, flags);
+               kfree(channel);
+       } else {
+               wake_up_interruptible(&channel->wq);
+       }
+       return 0;
+}
+
+/**
+ * aim_rx_completion - completion handler for rx channels
+ * @mbo: pointer to buffer object that has completed
+ *
+ * This searches for the channel linked to this MBO and stores it in the local
+ * fifo buffer.
+ */
+int aim_rx_completion(struct mbo *mbo)
+{
+       struct aim_channel *channel;
+
+       if (!mbo)
+               return -EINVAL;
+
+       channel = get_channel(mbo->ifp, mbo->hdm_channel_id);
+       if (channel == NULL)
+               return -ENXIO;
+
+       kfifo_in(&channel->fifo, &mbo, 1);
+#ifdef DEBUG_MESG
+       if (kfifo_is_full(&channel->fifo))
+               pr_info("WARN: Fifo is full\n");
+#endif
+       wake_up_interruptible(&channel->wq);
+       return 0;
+}
+
+/**
+ * aim_tx_completion - completion handler for tx channels
+ * @iface: pointer to interface instance
+ * @channel_id: channel index/ID
+ *
+ * This wakes sleeping processes in the wait-queue.
+ */
+int aim_tx_completion(struct most_interface *iface, int channel_id)
+{
+       struct aim_channel *channel;
+
+       if (!iface) {
+               pr_info("Bad interface pointer\n");
+               return -EINVAL;
+       }
+       if ((channel_id < 0) || (channel_id >= iface->num_channels)) {
+               pr_info("Channel ID out of range\n");
+               return -EINVAL;
+       }
+
+       channel = get_channel(iface, channel_id);
+       if (channel == NULL)
+               return -ENXIO;
+       wake_up_interruptible(&channel->wq);
+       return 0;
+}
+
+struct most_aim cdev_aim;
+
+/**
+ * aim_probe - probe function of the driver module
+ * @iface: pointer to interface instance
+ * @channel_id: channel index/ID
+ * @cfg: pointer to actual channel configuration
+ * @parent: pointer to kobject (needed for sysfs hook-up)
+ * @name: name of the device to be created
+ *
+ * This allocates achannel object and creates the device node in /dev
+ *
+ * Returns 0 on success or error code otherwise.
+ */
+int aim_probe(struct most_interface *iface, int channel_id,
+             struct most_channel_config *cfg,
+             struct kobject *parent, char *name)
+{
+       struct aim_channel *channel;
+       unsigned long cl_flags;
+       int retval;
+       int current_minor;
+
+       if ((!iface) || (!cfg) || (!parent) || (!name)) {
+               pr_info("Probing AIM with bad arguments");
+               return -EINVAL;
+       }
+       channel = get_channel(iface, channel_id);
+       if (channel)
+               return -EEXIST;
+
+       current_minor = ida_simple_get(&minor_id, 0, 0, GFP_KERNEL);
+       if (current_minor < 0)
+               return current_minor;
+
+       channel = kzalloc(sizeof(*channel), GFP_KERNEL);
+       if (!channel) {
+               pr_info("failed to alloc channel object\n");
+               retval = -ENOMEM;
+               goto error_alloc_channel;
+       }
+
+       channel->devno = MKDEV(major, current_minor);
+       cdev_init(&channel->cdev, &channel_fops);
+       channel->cdev.owner = THIS_MODULE;
+       cdev_add(&channel->cdev, channel->devno, 1);
+       channel->iface = iface;
+       channel->cfg = cfg;
+       channel->channel_id = channel_id;
+       channel->mbo_offs = 0;
+       atomic_set(&channel->access_ref, -1);
+       INIT_KFIFO(channel->fifo);
+       retval = kfifo_alloc(&channel->fifo, cfg->num_buffers, GFP_KERNEL);
+       if (retval) {
+               pr_info("failed to alloc channel kfifo");
+               goto error_alloc_kfifo;
+       }
+       init_waitqueue_head(&channel->wq);
+       mutex_init(&channel->io_mutex);
+       spin_lock_irqsave(&ch_list_lock, cl_flags);
+       list_add_tail(&channel->list, &channel_list);
+       spin_unlock_irqrestore(&ch_list_lock, cl_flags);
+       channel->dev = device_create(aim_class,
+                                    NULL,
+                                    channel->devno,
+                                    NULL,
+                                    "%s", name);
+
+       retval = IS_ERR(channel->dev);
+       if (retval) {
+               pr_info("failed to create new device node %s\n", name);
+               goto error_create_device;
+       }
+       kobject_uevent(&channel->dev->kobj, KOBJ_ADD);
+       return 0;
+
+error_create_device:
+       kfifo_free(&channel->fifo);
+       list_del(&channel->list);
+error_alloc_kfifo:
+       cdev_del(&channel->cdev);
+       kfree(channel);
+error_alloc_channel:
+       ida_simple_remove(&minor_id, current_minor);
+       return retval;
+}
+
+struct most_aim cdev_aim = {
+       .name = "cdev",
+       .probe_channel = aim_probe,
+       .disconnect_channel = aim_disconnect_channel,
+       .rx_completion = aim_rx_completion,
+       .tx_completion = aim_tx_completion,
+};
+
+static int __init mod_init(void)
+{
+       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;
+       major = MAJOR(aim_devno);
+
+       aim_class = class_create(THIS_MODULE, "most_cdev_aim");
+       if (IS_ERR(aim_class)) {
+               pr_err("no udev support\n");
+               goto free_cdev;
+       }
+
+       if (most_register_aim(&cdev_aim))
+               goto dest_class;
+       return 0;
+
+dest_class:
+       class_destroy(aim_class);
+free_cdev:
+       unregister_chrdev_region(aim_devno, 1);
+       return -EIO;
+}
+
+static void __exit mod_exit(void)
+{
+       struct aim_channel *channel, *tmp;
+
+       pr_info("exit module\n");
+
+       most_deregister_aim(&cdev_aim);
+
+       list_for_each_entry_safe(channel, tmp, &channel_list, list) {
+               device_destroy(aim_class, channel->devno);
+               cdev_del(&channel->cdev);
+               kfifo_free(&channel->fifo);
+               list_del(&channel->list);
+               ida_simple_remove(&minor_id, MINOR(channel->devno));
+               kfree(channel);
+       }
+       class_destroy(aim_class);
+       unregister_chrdev_region(aim_devno, 1);
+       ida_destroy(&minor_id);
+}
+
+module_init(mod_init);
+module_exit(mod_exit);
+MODULE_AUTHOR("Christian Gromm <christian.gromm@microchip.com>");
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("character device AIM for mostcore");
diff --git a/drivers/staging/most/aim-network/Kconfig b/drivers/staging/most/aim-network/Kconfig
new file mode 100644 (file)
index 0000000..4c66b24
--- /dev/null
@@ -0,0 +1,13 @@
+#
+# MOST Networking configuration
+#
+
+config AIM_NETWORK
+       tristate "Networking AIM"
+       depends on NET
+
+       ---help---
+         Say Y here if you want to commumicate via a networking device.
+
+         To compile this driver as a module, choose M here: the
+         module will be called aim_network.
diff --git a/drivers/staging/most/aim-network/Makefile b/drivers/staging/most/aim-network/Makefile
new file mode 100644 (file)
index 0000000..840c1dd
--- /dev/null
@@ -0,0 +1,4 @@
+obj-$(CONFIG_AIM_NETWORK) += aim_network.o
+
+aim_network-objs := networking.o
+ccflags-y += -Idrivers/staging/most/mostcore/
diff --git a/drivers/staging/most/aim-network/networking.c b/drivers/staging/most/aim-network/networking.c
new file mode 100644 (file)
index 0000000..c8ab239
--- /dev/null
@@ -0,0 +1,567 @@
+/*
+ * Networking AIM - Networking Application Interface Module for MostCore
+ *
+ * Copyright (C) 2015, Microchip Technology Germany II GmbH & Co. KG
+ *
+ * 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 file is licensed under GPLv2.
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/slab.h>
+#include <linux/init.h>
+#include <linux/list.h>
+#include <linux/wait.h>
+#include <linux/kobject.h>
+#include "mostcore.h"
+#include "networking.h"
+
+
+#define MEP_HDR_LEN 8
+#define MDP_HDR_LEN 16
+#define MAMAC_DATA_LEN (1024 - MDP_HDR_LEN)
+
+#define PMHL 5
+
+#define PMS_TELID_UNSEGM_MAMAC 0x0A
+#define PMS_FIFONO_MDP         0x01
+#define PMS_FIFONO_MEP         0x04
+#define PMS_MSGTYPE_DATA       0x04
+#define PMS_DEF_PRIO           0
+#define MEP_DEF_RETRY          15
+
+#define PMS_FIFONO_MASK                0x07
+#define PMS_FIFONO_SHIFT       3
+#define PMS_RETRY_SHIFT                4
+#define PMS_TELID_MASK         0x0F
+#define PMS_TELID_SHIFT                4
+
+#define HB(value)              ((u8)((u16)(value) >> 8))
+#define LB(value)              ((u8)(value))
+
+
+
+#define EXTRACT_BIT_SET(bitset_name, value) \
+       (((value) >> bitset_name##_SHIFT) & bitset_name##_MASK)
+
+#define PMS_IS_MEP(buf, len) \
+       ((len) > MEP_HDR_LEN && \
+        EXTRACT_BIT_SET(PMS_FIFONO, (buf)[3]) == PMS_FIFONO_MEP)
+
+#define PMS_IS_MAMAC(buf, len) \
+       ((len) > MDP_HDR_LEN && \
+        EXTRACT_BIT_SET(PMS_FIFONO, (buf)[3]) == PMS_FIFONO_MDP && \
+        EXTRACT_BIT_SET(PMS_TELID, (buf)[14]) == PMS_TELID_UNSEGM_MAMAC)
+
+struct net_dev_channel {
+       bool linked;
+       int ch_id;
+};
+
+struct net_dev_context {
+       struct most_interface *iface;
+       bool channels_opened;
+       bool is_mamac;
+       unsigned char link_stat;
+       struct net_device *dev;
+       struct net_dev_channel rx;
+       struct net_dev_channel tx;
+       struct list_head list;
+};
+
+static struct list_head net_devices = LIST_HEAD_INIT(net_devices);
+static struct spinlock list_lock;
+static struct most_aim aim;
+
+
+static int skb_to_mamac(const struct sk_buff *skb, struct mbo *mbo)
+{
+       u8 *buff = mbo->virt_address;
+       const u8 broadcast[] = { 0x03, 0xFF };
+       const u8 *dest_addr = skb->data + 4;
+       const u8 *eth_type = skb->data + 12;
+       unsigned int payload_len = skb->len - ETH_HLEN;
+       unsigned int mdp_len = payload_len + MDP_HDR_LEN;
+
+       if (mbo->buffer_length < mdp_len) {
+               pr_err("drop: too small buffer! (%d for %d)\n",
+                      mbo->buffer_length, mdp_len);
+               return -EINVAL;
+       }
+
+       if (skb->len < ETH_HLEN) {
+               pr_err("drop: too small packet! (%d)\n", skb->len);
+               return -EINVAL;
+       }
+
+       if (dest_addr[0] == 0xFF && dest_addr[1] == 0xFF)
+               dest_addr = broadcast;
+
+       *buff++ = HB(mdp_len - 2);
+       *buff++ = LB(mdp_len - 2);
+
+       *buff++ = PMHL;
+       *buff++ = (PMS_FIFONO_MDP << PMS_FIFONO_SHIFT) | PMS_MSGTYPE_DATA;
+       *buff++ = PMS_DEF_PRIO;
+       *buff++ = dest_addr[0];
+       *buff++ = dest_addr[1];
+       *buff++ = 0x00;
+
+       *buff++ = HB(payload_len + 6);
+       *buff++ = LB(payload_len + 6);
+
+       /* end of FPH here */
+
+       *buff++ = eth_type[0];
+       *buff++ = eth_type[1];
+       *buff++ = 0;
+       *buff++ = 0;
+
+       *buff++ = PMS_TELID_UNSEGM_MAMAC << 4 | HB(payload_len);
+       *buff++ = LB(payload_len);
+
+       memcpy(buff, skb->data + ETH_HLEN, payload_len);
+       mbo->buffer_length = mdp_len;
+       return 0;
+}
+
+static int skb_to_mep(const struct sk_buff *skb, struct mbo *mbo)
+{
+       u8 *buff = mbo->virt_address;
+       unsigned int mep_len = skb->len + MEP_HDR_LEN;
+
+       if (mbo->buffer_length < mep_len) {
+               pr_err("drop: too small buffer! (%d for %d)\n",
+                      mbo->buffer_length, mep_len);
+               return -EINVAL;
+       }
+
+       *buff++ = HB(mep_len - 2);
+       *buff++ = LB(mep_len - 2);
+
+       *buff++ = PMHL;
+       *buff++ = (PMS_FIFONO_MEP << PMS_FIFONO_SHIFT) | PMS_MSGTYPE_DATA;
+       *buff++ = (MEP_DEF_RETRY << PMS_RETRY_SHIFT) | PMS_DEF_PRIO;
+       *buff++ = 0;
+       *buff++ = 0;
+       *buff++ = 0;
+
+       memcpy(buff, skb->data, skb->len);
+       mbo->buffer_length = mep_len;
+       return 0;
+}
+
+static int most_nd_set_mac_address(struct net_device *dev, void *p)
+{
+       struct net_dev_context *nd = dev->ml_priv;
+       int err = eth_mac_addr(dev, p);
+
+       if (err)
+               return err;
+
+       BUG_ON(nd->dev != dev);
+
+       nd->is_mamac =
+               (dev->dev_addr[0] == 0 && dev->dev_addr[1] == 0 &&
+                dev->dev_addr[2] == 0 && dev->dev_addr[3] == 0);
+
+       /*
+        * Set default MTU for the given packet type.
+        * It is still possible to change MTU using ip tools afterwards.
+        */
+       dev->mtu = nd->is_mamac ? MAMAC_DATA_LEN : ETH_DATA_LEN;
+
+       return 0;
+}
+
+static int most_nd_open(struct net_device *dev)
+{
+       struct net_dev_context *nd = dev->ml_priv;
+
+       pr_info("open net device %s\n", dev->name);
+
+       BUG_ON(nd->dev != dev);
+
+       if (nd->channels_opened)
+               return -EFAULT;
+
+       BUG_ON(!nd->tx.linked || !nd->rx.linked);
+
+       if (most_start_channel(nd->iface, nd->rx.ch_id)) {
+               pr_err("most_start_channel() failed\n");
+               return -EBUSY;
+       }
+
+       if (most_start_channel(nd->iface, nd->tx.ch_id)) {
+               pr_err("most_start_channel() failed\n");
+               most_stop_channel(nd->iface, nd->rx.ch_id);
+               return -EBUSY;
+       }
+
+       nd->channels_opened = true;
+
+       if (nd->is_mamac) {
+               nd->link_stat = 1;
+               netif_wake_queue(dev);
+       } else {
+               nd->iface->request_netinfo(nd->iface, nd->tx.ch_id);
+       }
+
+       return 0;
+}
+
+static int most_nd_stop(struct net_device *dev)
+{
+       struct net_dev_context *nd = dev->ml_priv;
+
+       pr_info("stop net device %s\n", dev->name);
+
+       BUG_ON(nd->dev != dev);
+       netif_stop_queue(dev);
+
+       if (nd->channels_opened) {
+               most_stop_channel(nd->iface, nd->rx.ch_id);
+               most_stop_channel(nd->iface, nd->tx.ch_id);
+               nd->channels_opened = false;
+       }
+
+       return 0;
+}
+
+static netdev_tx_t most_nd_start_xmit(struct sk_buff *skb,
+                                     struct net_device *dev)
+{
+       struct net_dev_context *nd = dev->ml_priv;
+       struct mbo *mbo;
+       int ret;
+
+       BUG_ON(nd->dev != dev);
+
+       mbo = most_get_mbo(nd->iface, nd->tx.ch_id);
+
+       if (!mbo) {
+               netif_stop_queue(dev);
+               dev->stats.tx_fifo_errors++;
+               return NETDEV_TX_BUSY;
+       }
+
+       if (nd->is_mamac)
+               ret = skb_to_mamac(skb, mbo);
+       else
+               ret = skb_to_mep(skb, mbo);
+
+       if (ret) {
+               most_put_mbo(mbo);
+               dev->stats.tx_dropped++;
+               kfree_skb(skb);
+               return NETDEV_TX_OK;
+       }
+
+       most_submit_mbo(mbo);
+       dev->stats.tx_packets++;
+       dev->stats.tx_bytes += skb->len;
+       kfree_skb(skb);
+       return NETDEV_TX_OK;
+}
+
+static const struct net_device_ops most_nd_ops = {
+       .ndo_open = most_nd_open,
+       .ndo_stop = most_nd_stop,
+       .ndo_start_xmit = most_nd_start_xmit,
+       .ndo_set_mac_address = most_nd_set_mac_address,
+};
+
+static void most_nd_setup(struct net_device *dev)
+{
+       pr_info("setup net device %s\n", dev->name);
+       ether_setup(dev);
+       dev->netdev_ops = &most_nd_ops;
+}
+
+static void most_net_rm_netdev_safe(struct net_dev_context *nd)
+{
+       if (!nd->dev)
+               return;
+
+       pr_info("remove net device %p\n", nd->dev);
+
+       unregister_netdev(nd->dev);
+       free_netdev(nd->dev);
+       nd->dev = 0;
+}
+
+static struct net_dev_context *get_net_dev_context(
+       struct most_interface *iface)
+{
+       struct net_dev_context *nd, *tmp;
+
+       spin_lock(&list_lock);
+       list_for_each_entry_safe(nd, tmp, &net_devices, list) {
+               if (nd->iface == iface) {
+                       spin_unlock(&list_lock);
+                       return nd;
+               }
+       }
+       spin_unlock(&list_lock);
+       return NULL;
+}
+
+static int aim_probe_channel(struct most_interface *iface, int channel_idx,
+                            struct most_channel_config *ccfg,
+                            struct kobject *parent, char *name)
+{
+       struct net_dev_context *nd;
+       struct net_dev_channel *ch;
+
+       if (!iface)
+               return -EINVAL;
+
+       if (ccfg->data_type != MOST_CH_ASYNC)
+               return -EINVAL;
+
+       nd = get_net_dev_context(iface);
+
+       if (!nd) {
+               nd = kzalloc(sizeof(*nd), GFP_KERNEL);
+               if (!nd)
+                       return -ENOMEM;
+
+               nd->iface = iface;
+
+               spin_lock(&list_lock);
+               list_add(&nd->list, &net_devices);
+               spin_unlock(&list_lock);
+       }
+
+       ch = ccfg->direction == MOST_CH_TX ? &nd->tx : &nd->rx;
+       if (ch->linked) {
+               pr_err("only one channel per instance & direction allowed\n");
+               return -EINVAL;
+       }
+
+       if (nd->tx.linked || nd->rx.linked) {
+               struct net_device *dev =
+                       alloc_netdev(0, "meth%d", NET_NAME_UNKNOWN, most_nd_setup);
+
+               if (!dev) {
+                       pr_err("no memory for net_device\n");
+                       return -ENOMEM;
+               }
+
+               nd->dev = dev;
+
+               dev->ml_priv = nd;
+               if (register_netdev(dev)) {
+                       pr_err("registering net device failed\n");
+                       free_netdev(dev);
+                       return -EINVAL;
+               }
+       }
+
+       ch->ch_id = channel_idx;
+       ch->linked = true;
+
+       return 0;
+}
+
+static int aim_disconnect_channel(struct most_interface *iface,
+                                 int channel_idx)
+{
+       struct net_dev_context *nd;
+       struct net_dev_channel *ch;
+
+       nd = get_net_dev_context(iface);
+       if (!nd)
+               return -EINVAL;
+
+       if (nd->rx.linked && channel_idx == nd->rx.ch_id)
+               ch = &nd->rx;
+       else if (nd->tx.linked && channel_idx == nd->tx.ch_id)
+               ch = &nd->tx;
+       else
+               return -EINVAL;
+
+       ch->linked = false;
+
+       /*
+        * 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);
+
+       if (!nd->rx.linked && !nd->tx.linked) {
+               spin_lock(&list_lock);
+               list_del(&nd->list);
+               spin_unlock(&list_lock);
+               kfree(nd);
+       }
+
+       return 0;
+}
+
+static int aim_resume_tx_channel(struct most_interface *iface,
+                                int channel_idx)
+{
+       struct net_dev_context *nd;
+
+       nd = get_net_dev_context(iface);
+       if (!nd || !nd->channels_opened || nd->tx.ch_id != channel_idx)
+               return 0;
+
+       if (!nd->dev)
+               return 0;
+
+       netif_wake_queue(nd->dev);
+       return 0;
+}
+
+static int aim_rx_data(struct mbo *mbo)
+{
+       const u32 zero = 0;
+       struct net_dev_context *nd;
+       char *buf = mbo->virt_address;
+       uint32_t len = mbo->processed_length;
+       struct sk_buff *skb;
+       struct net_device *dev;
+
+       nd = get_net_dev_context(mbo->ifp);
+       if (!nd || !nd->channels_opened || nd->rx.ch_id != mbo->hdm_channel_id)
+               return -EIO;
+
+       dev = nd->dev;
+       if (!dev) {
+               pr_err_once("drop packet: missing net_device\n");
+               return -EIO;
+       }
+
+       if (nd->is_mamac) {
+               if (!PMS_IS_MAMAC(buf, len))
+                       return -EIO;
+
+               skb = dev_alloc_skb(len - MDP_HDR_LEN + 2 * ETH_ALEN + 2);
+       } else {
+               if (!PMS_IS_MEP(buf, len))
+                       return -EIO;
+
+               skb = dev_alloc_skb(len - MEP_HDR_LEN);
+       }
+
+       if (!skb) {
+               dev->stats.rx_dropped++;
+               pr_err_once("drop packet: no memory for skb\n");
+               goto out;
+       }
+
+       skb->dev = dev;
+
+       if (nd->is_mamac) {
+               /* dest */
+               memcpy(skb_put(skb, ETH_ALEN), dev->dev_addr, ETH_ALEN);
+
+               /* src */
+               memcpy(skb_put(skb, 4), &zero, 4);
+               memcpy(skb_put(skb, 2), buf + 5, 2);
+
+               /* eth type */
+               memcpy(skb_put(skb, 2), buf + 10, 2);
+
+               buf += MDP_HDR_LEN;
+               len -= MDP_HDR_LEN;
+       } else {
+               buf += MEP_HDR_LEN;
+               len -= MEP_HDR_LEN;
+       }
+
+       memcpy(skb_put(skb, len), buf, len);
+       skb->protocol = eth_type_trans(skb, dev);
+       dev->stats.rx_packets++;
+       dev->stats.rx_bytes += skb->len;
+       netif_rx(skb);
+
+out:
+       most_put_mbo(mbo);
+       return 0;
+}
+
+static int __init most_net_init(void)
+{
+       pr_info("most_net_init()\n");
+       spin_lock_init(&list_lock);
+       aim.name = "networking";
+       aim.probe_channel = aim_probe_channel;
+       aim.disconnect_channel = aim_disconnect_channel;
+       aim.tx_completion = aim_resume_tx_channel;
+       aim.rx_completion = aim_rx_data;
+       return most_register_aim(&aim);
+}
+
+static void __exit most_net_exit(void)
+{
+       struct net_dev_context *nd, *tmp;
+
+       spin_lock(&list_lock);
+       list_for_each_entry_safe(nd, tmp, &net_devices, list) {
+               list_del(&nd->list);
+               spin_unlock(&list_lock);
+               /*
+                * 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_unlock(&list_lock);
+
+       most_deregister_aim(&aim);
+       pr_info("most_net_exit()\n");
+}
+
+/**
+ * most_deliver_netinfo - callback for HDM to be informed about HW's MAC
+ * @param iface - most interface instance
+ * @param link_stat - link status
+ * @param mac_addr - MAC address
+ */
+void most_deliver_netinfo(struct most_interface *iface,
+                         unsigned char link_stat, unsigned char *mac_addr)
+{
+       struct net_dev_context *nd;
+       struct net_device *dev;
+
+       pr_info("Received netinfo from %s\n", iface->description);
+
+       nd = get_net_dev_context(iface);
+       if (!nd)
+               return;
+
+       dev = nd->dev;
+       if (!dev)
+               return;
+
+       if (mac_addr)
+               memcpy(dev->dev_addr, mac_addr, ETH_ALEN);
+
+       if (nd->link_stat != link_stat) {
+               nd->link_stat = link_stat;
+               if (nd->link_stat)
+                       netif_wake_queue(dev);
+               else
+                       netif_stop_queue(dev);
+       }
+}
+EXPORT_SYMBOL(most_deliver_netinfo);
+
+module_init(most_net_init);
+module_exit(most_net_exit);
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Andrey Shvetsov <andrey.shvetsov@k2l.de>");
+MODULE_DESCRIPTION("Networking Application Interface Module for MostCore");
diff --git a/drivers/staging/most/aim-network/networking.h b/drivers/staging/most/aim-network/networking.h
new file mode 100644 (file)
index 0000000..1b8b434
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Networking AIM - Networking Application Interface Module for MostCore
+ *
+ * Copyright (C) 2015, Microchip Technology Germany II GmbH & Co. KG
+ *
+ * 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 file is licensed under GPLv2.
+ */
+#ifndef _NETWORKING_H_
+#define _NETWORKING_H_
+
+#include "mostcore.h"
+
+
+void most_deliver_netinfo(struct most_interface *iface,
+                         unsigned char link_stat, unsigned char *mac_addr);
+
+
+#endif
diff --git a/drivers/staging/most/aim-sound/Kconfig b/drivers/staging/most/aim-sound/Kconfig
new file mode 100644 (file)
index 0000000..3194c21
--- /dev/null
@@ -0,0 +1,13 @@
+#
+# MOST ALSA configuration
+#
+
+config AIM_SOUND
+       tristate "ALSA AIM"
+       depends on SND
+       select SND_PCM
+       ---help---
+         Say Y here if you want to commumicate via ALSA/sound devices.
+
+         To compile this driver as a module, choose M here: the
+         module will be called aim_sound.
diff --git a/drivers/staging/most/aim-sound/Makefile b/drivers/staging/most/aim-sound/Makefile
new file mode 100644 (file)
index 0000000..beba958
--- /dev/null
@@ -0,0 +1,4 @@
+obj-$(CONFIG_AIM_SOUND) += aim_sound.o
+
+aim_sound-objs := sound.o
+ccflags-y += -Idrivers/staging/most/mostcore/
diff --git a/drivers/staging/most/aim-sound/sound.c b/drivers/staging/most/aim-sound/sound.c
new file mode 100644 (file)
index 0000000..860302e
--- /dev/null
@@ -0,0 +1,758 @@
+/*
+ * sound.c - Audio Application Interface Module for Mostcore
+ *
+ * Copyright (C) 2015 Microchip Technology Germany II GmbH & Co. KG
+ *
+ * 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 file is licensed under GPLv2.
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/module.h>
+#include <linux/printk.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <sound/core.h>
+#include <sound/pcm.h>
+#include <linux/sched.h>
+#include <linux/kthread.h>
+#include <mostcore.h>
+
+#define DRIVER_NAME "sound"
+
+static struct list_head dev_list;
+
+/**
+ * struct channel - private structure to keep channel specific data
+ * @substream: stores the substream structure
+ * @iface: interface for which the channel belongs to
+ * @cfg: channel configuration
+ * @card: registered sound card
+ * @list: list for private use
+ * @id: channel index
+ * @period_pos: current period position (ring buffer)
+ * @buffer_pos: current buffer position (ring buffer)
+ * @is_stream_running: identifies whether a stream is running or not
+ * @opened: set when the stream is opened
+ * @playback_task: playback thread
+ * @playback_waitq: waitq used by playback thread
+ */
+struct channel {
+       struct snd_pcm_substream *substream;
+       struct most_interface *iface;
+       struct most_channel_config *cfg;
+       struct snd_card *card;
+       struct list_head list;
+       int id;
+       unsigned int period_pos;
+       unsigned int buffer_pos;
+       bool is_stream_running;
+
+       struct task_struct *playback_task;
+       wait_queue_head_t playback_waitq;
+
+       void (*copy_fn)(void *alsa, void *most, unsigned int bytes);
+};
+
+#define MOST_PCM_INFO (SNDRV_PCM_INFO_MMAP | \
+                      SNDRV_PCM_INFO_MMAP_VALID | \
+                      SNDRV_PCM_INFO_BATCH | \
+                      SNDRV_PCM_INFO_INTERLEAVED | \
+                      SNDRV_PCM_INFO_BLOCK_TRANSFER)
+
+/**
+ * Initialization of struct snd_pcm_hardware
+ */
+static struct snd_pcm_hardware pcm_hardware_template = {
+       .info               = MOST_PCM_INFO,
+       .rates              = SNDRV_PCM_RATE_48000,
+       .rate_min           = 48000,
+       .rate_max           = 48000,
+       .channels_min       = 1,
+       .channels_max       = 8,
+};
+
+#define swap16(val) ( \
+       (((u16)(val) << 8) & (u16)0xFF00) | \
+       (((u16)(val) >> 8) & (u16)0x00FF))
+
+#define swap32(val) ( \
+       (((u32)(val) << 24) & (u32)0xFF000000) | \
+       (((u32)(val) <<  8) & (u32)0x00FF0000) | \
+       (((u32)(val) >>  8) & (u32)0x0000FF00) | \
+       (((u32)(val) >> 24) & (u32)0x000000FF))
+
+static void swap_copy16(u16 *dest, const u16 *source, unsigned int bytes)
+{
+       unsigned int i = 0;
+
+       while (i < (bytes / 2)) {
+               dest[i] = swap16(source[i]);
+               i++;
+       }
+}
+
+static void swap_copy24(u8 *dest, const u8 *source, unsigned int bytes)
+{
+       unsigned int i = 0;
+
+       while (i < bytes - 2) {
+               dest[i] = source[i + 2];
+               dest[i + 1] = source[i + 1];
+               dest[i + 2] = source[i];
+               i += 3;
+       }
+}
+
+static void swap_copy32(u32 *dest, const u32 *source, unsigned int bytes)
+{
+       unsigned int i = 0;
+
+       while (i < bytes / 4) {
+               dest[i] = swap32(source[i]);
+               i++;
+       }
+}
+
+static void alsa_to_most_memcpy(void *alsa, void *most, unsigned int bytes)
+{
+       memcpy(most, alsa, bytes);
+}
+
+static void alsa_to_most_copy16(void *alsa, void *most, unsigned int bytes)
+{
+       swap_copy16(most, alsa, bytes);
+}
+
+static void alsa_to_most_copy24(void *alsa, void *most, unsigned int bytes)
+{
+       swap_copy24(most, alsa, bytes);
+}
+
+static void alsa_to_most_copy32(void *alsa, void *most, unsigned int bytes)
+{
+       swap_copy32(most, alsa, bytes);
+}
+
+static void most_to_alsa_memcpy(void *alsa, void *most, unsigned int bytes)
+{
+       memcpy(alsa, most, bytes);
+}
+
+static void most_to_alsa_copy16(void *alsa, void *most, unsigned int bytes)
+{
+       swap_copy16(alsa, most, bytes);
+}
+
+static void most_to_alsa_copy24(void *alsa, void *most, unsigned int bytes)
+{
+       swap_copy24(alsa, most, bytes);
+}
+
+static void most_to_alsa_copy32(void *alsa, void *most, unsigned int bytes)
+{
+       swap_copy32(alsa, most, bytes);
+}
+
+/**
+ * get_channel - get pointer to channel
+ * @iface: interface structure
+ * @channel_id: channel ID
+ *
+ * This traverses the channel list and returns the channel matching the
+ * ID and interface.
+ *
+ * Returns pointer to channel on success or NULL otherwise.
+ */
+static struct channel *get_channel(struct most_interface *iface,
+                                  int channel_id)
+{
+       struct channel *channel, *tmp;
+
+       list_for_each_entry_safe(channel, tmp, &dev_list, list) {
+               if ((channel->iface == iface) && (channel->id == channel_id))
+                       return channel;
+       }
+
+       return NULL;
+}
+
+/**
+ * copy_data - implements data copying function
+ * @channel: channel
+ * @mbo: MBO from core
+ *
+ * Copy data from/to ring buffer to/from MBO and update the buffer position
+ */
+static bool copy_data(struct channel *channel, struct mbo *mbo)
+{
+       struct snd_pcm_runtime *const runtime = channel->substream->runtime;
+       unsigned int const frame_bytes = channel->cfg->subbuffer_size;
+       unsigned int const buffer_size = runtime->buffer_size;
+       unsigned int frames;
+       unsigned int fr0;
+
+       if (channel->cfg->direction & MOST_CH_RX)
+               frames = mbo->processed_length / frame_bytes;
+       else
+               frames = mbo->buffer_length / frame_bytes;
+       fr0 = min(buffer_size - channel->buffer_pos, frames);
+
+       channel->copy_fn(runtime->dma_area + channel->buffer_pos * frame_bytes,
+                        mbo->virt_address,
+                        fr0 * frame_bytes);
+
+       if (frames > fr0) {
+               /* wrap around at end of ring buffer */
+               channel->copy_fn(runtime->dma_area,
+                                mbo->virt_address + fr0 * frame_bytes,
+                                (frames - fr0) * frame_bytes);
+       }
+
+       channel->buffer_pos += frames;
+       if (channel->buffer_pos >= buffer_size)
+               channel->buffer_pos -= buffer_size;
+       channel->period_pos += frames;
+       if (channel->period_pos >= runtime->period_size) {
+               channel->period_pos -= runtime->period_size;
+               return true;
+       }
+
+       return false;
+}
+
+/**
+ * playback_thread - function implements the playback thread
+ * @data: private data
+ *
+ * Thread which does the playback functionality in a loop. It waits for a free
+ * MBO from mostcore for a particular channel and copy the data from ring buffer
+ * to MBO. Submit the MBO back to mostcore, after copying the data.
+ *
+ * Returns 0 on success or error code otherwise.
+ */
+static int playback_thread(void *data)
+{
+       struct channel *const channel = data;
+
+       pr_info("playback thread started\n");
+
+       while (!kthread_should_stop()) {
+               struct mbo *mbo = NULL;
+               bool period_elapsed = false;
+               int ret;
+
+               wait_event_interruptible(
+                       channel->playback_waitq,
+                       kthread_should_stop() ||
+                       (mbo = most_get_mbo(channel->iface, channel->id)));
+
+               if (!mbo)
+                       continue;
+
+               if (channel->is_stream_running)
+                       period_elapsed = copy_data(channel, mbo);
+               else
+                       memset(mbo->virt_address, 0, mbo->buffer_length);
+
+               ret = most_submit_mbo(mbo);
+               if (ret)
+                       channel->is_stream_running = false;
+
+               if (period_elapsed)
+                       snd_pcm_period_elapsed(channel->substream);
+       }
+
+       return 0;
+}
+
+/**
+ * pcm_open - implements open callback function for PCM middle layer
+ * @substream: pointer to ALSA PCM substream
+ *
+ * This is called when a PCM substream is opened. At least, the function should
+ * initialize the runtime->hw record.
+ *
+ * Returns 0 on success or error code otherwise.
+ */
+static int pcm_open(struct snd_pcm_substream *substream)
+{
+       struct channel *channel = substream->private_data;
+       struct snd_pcm_runtime *runtime = substream->runtime;
+       struct most_channel_config *cfg = channel->cfg;
+
+       pr_info("pcm_open(), %s\n", substream->name);
+
+       channel->substream = substream;
+
+       if (cfg->direction == MOST_CH_TX) {
+               init_waitqueue_head(&channel->playback_waitq);
+               channel->playback_task = kthread_run(&playback_thread, channel,
+                                                    "most_audio_playback");
+               if (IS_ERR(channel->playback_task))
+                       return PTR_ERR(channel->playback_task);
+       }
+
+       if (most_start_channel(channel->iface, channel->id)) {
+               pr_err("most_start_channel() failed!\n");
+               if (cfg->direction == MOST_CH_TX)
+                       kthread_stop(channel->playback_task);
+               return -EBUSY;
+       }
+
+       runtime->hw = pcm_hardware_template;
+       runtime->hw.buffer_bytes_max = cfg->num_buffers * cfg->buffer_size;
+       runtime->hw.period_bytes_min = cfg->buffer_size;
+       runtime->hw.period_bytes_max = cfg->buffer_size;
+       runtime->hw.periods_min = 1;
+       runtime->hw.periods_max = cfg->num_buffers;
+
+       return 0;
+}
+
+/**
+ * pcm_close - implements close callback function for PCM middle layer
+ * @substream: sub-stream pointer
+ *
+ * Obviously, this is called when a PCM substream is closed. Any private
+ * instance for a PCM substream allocated in the open callback will be
+ * released here.
+ *
+ * Returns 0 on success or error code otherwise.
+ */
+static int pcm_close(struct snd_pcm_substream *substream)
+{
+       struct channel *channel = substream->private_data;
+
+       pr_info("pcm_close(), %s\n", substream->name);
+
+       if (channel->cfg->direction == MOST_CH_TX)
+               kthread_stop(channel->playback_task);
+       most_stop_channel(channel->iface, channel->id);
+
+       return 0;
+}
+
+/**
+ * pcm_hw_params - implements hw_params callback function for PCM middle layer
+ * @substream: sub-stream pointer
+ * @hw_params: contains the hardware parameters set by the application
+ *
+ * This is called when the hardware parameters is set by the application, that
+ * is, once when the buffer size, the period size, the format, etc. are defined
+ * for the PCM substream. Many hardware setups should be done is this callback,
+ * including the allocation of buffers.
+ *
+ * Returns 0 on success or error code otherwise.
+ */
+static int pcm_hw_params(struct snd_pcm_substream *substream,
+                        struct snd_pcm_hw_params *hw_params)
+{
+       pr_info("pcm_hw_params()\n");
+
+       return snd_pcm_lib_alloc_vmalloc_buffer(substream,
+                                               params_buffer_bytes(hw_params));
+}
+
+/**
+ * pcm_hw_free - implements hw_free callback function for PCM middle layer
+ * @substream: substream pointer
+ *
+ * This is called to release the resources allocated via hw_params.
+ * This function will be always called before the close callback is called.
+ *
+ * Returns 0 on success or error code otherwise.
+ */
+static int pcm_hw_free(struct snd_pcm_substream *substream)
+{
+       pr_info("pcm_hw_free()\n");
+
+       return snd_pcm_lib_free_vmalloc_buffer(substream);
+}
+
+/**
+ * pcm_prepare - implements prepare callback function for PCM middle layer
+ * @substream: substream pointer
+ *
+ * This callback is called when the PCM is "prepared". Format rate, sample rate,
+ * etc., can be set here. This callback can be called many times at each setup.
+ *
+ * Returns 0 on success or error code otherwise.
+ */
+static int pcm_prepare(struct snd_pcm_substream *substream)
+{
+       struct channel *channel = substream->private_data;
+       struct snd_pcm_runtime *runtime = substream->runtime;
+       struct most_channel_config *cfg = channel->cfg;
+       int width = snd_pcm_format_physical_width(runtime->format);
+
+       channel->copy_fn = NULL;
+
+       if (cfg->direction == MOST_CH_TX) {
+               if (snd_pcm_format_big_endian(runtime->format) || width == 8)
+                       channel->copy_fn = alsa_to_most_memcpy;
+               else if (width == 16)
+                       channel->copy_fn = alsa_to_most_copy16;
+               else if (width == 24)
+                       channel->copy_fn = alsa_to_most_copy24;
+               else if (width == 32)
+                       channel->copy_fn = alsa_to_most_copy32;
+       } else {
+               if (snd_pcm_format_big_endian(runtime->format) || width == 8)
+                       channel->copy_fn = most_to_alsa_memcpy;
+               else if (width == 16)
+                       channel->copy_fn = most_to_alsa_copy16;
+               else if (width == 24)
+                       channel->copy_fn = most_to_alsa_copy24;
+               else if (width == 32)
+                       channel->copy_fn = most_to_alsa_copy32;
+       }
+
+       if (!channel->copy_fn) {
+               pr_err("unsupported format\n");
+               return -EINVAL;
+       }
+
+       channel->period_pos = 0;
+       channel->buffer_pos = 0;
+
+       return 0;
+}
+
+/**
+ * pcm_trigger - implements trigger callback function for PCM middle layer
+ * @substream: substream pointer
+ * @cmd: action to perform
+ *
+ * This is called when the PCM is started, stopped or paused. The action will be
+ * specified in the second argument, SNDRV_PCM_TRIGGER_XXX
+ *
+ * Returns 0 on success or error code otherwise.
+ */
+static int pcm_trigger(struct snd_pcm_substream *substream, int cmd)
+{
+       struct channel *channel = substream->private_data;
+
+       switch (cmd) {
+       case SNDRV_PCM_TRIGGER_START:
+               channel->is_stream_running = true;
+               return 0;
+
+       case SNDRV_PCM_TRIGGER_STOP:
+               channel->is_stream_running = false;
+               return 0;
+
+       default:
+               pr_info("pcm_trigger(), invalid\n");
+               return -EINVAL;
+       }
+       return 0;
+}
+
+/**
+ * pcm_pointer - implements pointer callback function for PCM middle layer
+ * @substream: substream pointer
+ *
+ * This callback is called when the PCM middle layer inquires the current
+ * hardware position on the buffer. The position must be returned in frames,
+ * ranging from 0 to buffer_size-1.
+ */
+static snd_pcm_uframes_t pcm_pointer(struct snd_pcm_substream *substream)
+{
+       struct channel *channel = substream->private_data;
+
+       return channel->buffer_pos;
+}
+
+/**
+ * Initialization of struct snd_pcm_ops
+ */
+static struct snd_pcm_ops pcm_ops = {
+       .open       = pcm_open,
+       .close      = pcm_close,
+       .ioctl      = snd_pcm_lib_ioctl,
+       .hw_params  = pcm_hw_params,
+       .hw_free    = pcm_hw_free,
+       .prepare    = pcm_prepare,
+       .trigger    = pcm_trigger,
+       .pointer    = pcm_pointer,
+       .page       = snd_pcm_lib_get_vmalloc_page,
+       .mmap       = snd_pcm_lib_mmap_vmalloc,
+};
+
+
+int split_arg_list(char *buf, char **card_name, char **pcm_format)
+{
+       *card_name = strsep(&buf, ".");
+       if (!*card_name)
+               return -EIO;
+       *pcm_format = strsep(&buf, ".\n");
+       if (!*pcm_format)
+               return -EIO;
+       return 0;
+}
+
+int audio_set_pcm_format(char *pcm_format, struct most_channel_config *cfg)
+{
+       if (!strcmp(pcm_format, "1x8")) {
+               if (cfg->subbuffer_size != 1)
+                       goto error;
+               pr_info("PCM format is 8-bit mono\n");
+               pcm_hardware_template.formats = SNDRV_PCM_FMTBIT_S8;
+       } else if (!strcmp(pcm_format, "2x16")) {
+               if (cfg->subbuffer_size != 4)
+                       goto error;
+               pr_info("PCM format is 16-bit stereo\n");
+               pcm_hardware_template.formats = SNDRV_PCM_FMTBIT_S16_LE |
+                                               SNDRV_PCM_FMTBIT_S16_BE;
+       } else if (!strcmp(pcm_format, "2x24")) {
+               if (cfg->subbuffer_size != 6)
+                       goto error;
+               pr_info("PCM format is 24-bit stereo\n");
+               pcm_hardware_template.formats = SNDRV_PCM_FMTBIT_S24_3LE |
+                                               SNDRV_PCM_FMTBIT_S24_3BE;
+       } else if (!strcmp(pcm_format, "2x32")) {
+               if (cfg->subbuffer_size != 8)
+                       goto error;
+               pr_info("PCM format is 32-bit stereo\n");
+               pcm_hardware_template.formats = SNDRV_PCM_FMTBIT_S32_LE |
+                                               SNDRV_PCM_FMTBIT_S32_BE;
+       } else {
+               pr_err("PCM format %s not supported\n", pcm_format);
+               return -EIO;
+       }
+       return 0;
+error:
+       pr_err("Audio resolution doesn't fit subbuffer size\n");
+       return -EINVAL;
+}
+
+/**
+ * audio_probe_channel - probe function of the driver module
+ * @iface: pointer to interface instance
+ * @channel_id: channel index/ID
+ * @cfg: pointer to actual channel configuration
+ * @parent: pointer to kobject (needed for sysfs hook-up)
+ * @arg_list: string that provides the name of the device to be created in /dev
+ *           plus the desired audio resolution
+ *
+ * Creates sound card, pcm device, sets pcm ops and registers sound card.
+ *
+ * Returns 0 on success or error code otherwise.
+ */
+static int audio_probe_channel(struct most_interface *iface, int channel_id,
+                              struct most_channel_config *cfg,
+                              struct kobject *parent, char *arg_list)
+{
+       struct channel *channel;
+       struct snd_card *card;
+       struct snd_pcm *pcm;
+       int playback_count = 0;
+       int capture_count = 0;
+       int ret;
+       int direction;
+       char *card_name;
+       char *pcm_format;
+
+       pr_info("sound_probe_channel()\n");
+
+       if (!iface)
+               return -EINVAL;
+
+       if (cfg->data_type != MOST_CH_SYNC) {
+               pr_err("Incompatible channel type\n");
+               return -EINVAL;
+       }
+
+       if (get_channel(iface, channel_id)) {
+               pr_err("channel (%s:%d) is already linked\n",
+                      iface->description, channel_id);
+               return -EINVAL;
+       }
+
+       if (cfg->direction == MOST_CH_TX) {
+               playback_count = 1;
+               direction = SNDRV_PCM_STREAM_PLAYBACK;
+       } else {
+               capture_count = 1;
+               direction = SNDRV_PCM_STREAM_CAPTURE;
+       }
+
+       ret = split_arg_list(arg_list, &card_name, &pcm_format);
+       if (ret < 0) {
+               pr_info("PCM format missing\n");
+               return ret;
+       }
+       if (audio_set_pcm_format(pcm_format, cfg))
+               return ret;
+
+       ret = snd_card_new(NULL, -1, card_name, THIS_MODULE,
+                          sizeof(*channel), &card);
+       if (ret < 0)
+               return ret;
+
+       channel = card->private_data;
+       channel->card = card;
+       channel->cfg = cfg;
+       channel->iface = iface;
+       channel->id = channel_id;
+
+       snprintf(card->driver, sizeof(card->driver), "%s", DRIVER_NAME);
+       snprintf(card->shortname, sizeof(card->shortname), "MOST:%d",
+                card->number);
+       snprintf(card->longname, sizeof(card->longname), "%s at %s, ch %d",
+                card->shortname, iface->description, channel_id);
+
+       ret = snd_pcm_new(card, card_name, 0, playback_count,
+                         capture_count, &pcm);
+       if (ret < 0)
+               goto err_free_card;
+
+       pcm->private_data = channel;
+
+       snd_pcm_set_ops(pcm, direction, &pcm_ops);
+
+       ret = snd_card_register(card);
+       if (ret < 0)
+               goto err_free_card;
+
+       list_add_tail(&channel->list, &dev_list);
+
+       return 0;
+
+err_free_card:
+       snd_card_free(card);
+       return ret;
+}
+
+/**
+ * audio_disconnect_channel - function to disconnect a channel
+ * @iface: pointer to interface instance
+ * @channel_id: channel index
+ *
+ * This frees allocated memory and removes the sound card from ALSA
+ *
+ * Returns 0 on success or error code otherwise.
+ */
+static int audio_disconnect_channel(struct most_interface *iface,
+                                   int channel_id)
+{
+       struct channel *channel;
+
+       pr_info("sound_disconnect_channel()\n");
+
+       channel = get_channel(iface, channel_id);
+       if (!channel) {
+               pr_err("sound_disconnect_channel(), invalid channel %d\n",
+                      channel_id);
+               return -EINVAL;
+       }
+
+       list_del(&channel->list);
+       snd_card_free(channel->card);
+
+       return 0;
+}
+
+/**
+ * audio_rx_completion - completion handler for rx channels
+ * @mbo: pointer to buffer object that has completed
+ *
+ * This searches for the channel this MBO belongs to and copy the data from MBO
+ * to ring buffer
+ *
+ * Returns 0 on success or error code otherwise.
+ */
+static int audio_rx_completion(struct mbo *mbo)
+{
+       struct channel *channel = get_channel(mbo->ifp, mbo->hdm_channel_id);
+       bool period_elapsed = false;
+
+       if (!channel) {
+               pr_err("sound_rx_completion(), invalid channel %d\n",
+                      mbo->hdm_channel_id);
+               return -EINVAL;
+       }
+
+       if (channel->is_stream_running)
+               period_elapsed = copy_data(channel, mbo);
+
+       most_put_mbo(mbo);
+
+       if (period_elapsed)
+               snd_pcm_period_elapsed(channel->substream);
+
+       return 0;
+}
+
+/**
+ * audio_tx_completion - completion handler for tx channels
+ * @iface: pointer to interface instance
+ * @channel_id: channel index/ID
+ *
+ * This searches the channel that belongs to this combination of interface
+ * pointer and channel ID and wakes a process sitting in the wait queue of
+ * this channel.
+ *
+ * Returns 0 on success or error code otherwise.
+ */
+static int audio_tx_completion(struct most_interface *iface, int channel_id)
+{
+       struct channel *channel = get_channel(iface, channel_id);
+
+       if (!channel) {
+               pr_err("sound_tx_completion(), invalid channel %d\n",
+                      channel_id);
+               return -EINVAL;
+       }
+
+       wake_up_interruptible(&channel->playback_waitq);
+
+       return 0;
+}
+
+/**
+ * Initialization of the struct most_aim
+ */
+static struct most_aim audio_aim = {
+       .name = DRIVER_NAME,
+       .probe_channel = audio_probe_channel,
+       .disconnect_channel = audio_disconnect_channel,
+       .rx_completion = audio_rx_completion,
+       .tx_completion = audio_tx_completion,
+};
+
+static int __init audio_init(void)
+{
+       pr_info("init()\n");
+
+       INIT_LIST_HEAD(&dev_list);
+
+       return most_register_aim(&audio_aim);
+}
+
+static void __exit audio_exit(void)
+{
+       struct channel *channel, *tmp;
+
+       pr_info("exit()\n");
+
+       list_for_each_entry_safe(channel, tmp, &dev_list, list) {
+               list_del(&channel->list);
+               snd_card_free(channel->card);
+       }
+
+       most_deregister_aim(&audio_aim);
+}
+
+module_init(audio_init);
+module_exit(audio_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Christian Gromm <christian.gromm@microchip.com>");
+MODULE_DESCRIPTION("Audio Application Interface Module for MostCore");
diff --git a/drivers/staging/most/aim-v4l2/Kconfig b/drivers/staging/most/aim-v4l2/Kconfig
new file mode 100644 (file)
index 0000000..d70eaaf
--- /dev/null
@@ -0,0 +1,12 @@
+#
+# MOST V4L2 configuration
+#
+
+config AIM_V4L2
+       tristate "V4L2 AIM"
+       depends on VIDEO_V4L2
+       ---help---
+         Say Y here if you want to commumicate via Video 4 Linux.
+
+         To compile this driver as a module, choose M here: the
+         module will be called aim_v4l2.
\ No newline at end of file
diff --git a/drivers/staging/most/aim-v4l2/Makefile b/drivers/staging/most/aim-v4l2/Makefile
new file mode 100644 (file)
index 0000000..28aa948
--- /dev/null
@@ -0,0 +1,6 @@
+obj-$(CONFIG_AIM_V4L2) += aim_v4l2.o
+
+aim_v4l2-objs := video.o
+
+ccflags-y += -Idrivers/staging/most/mostcore/
+ccflags-y += -Idrivers/media/video
diff --git a/drivers/staging/most/aim-v4l2/video.c b/drivers/staging/most/aim-v4l2/video.c
new file mode 100644 (file)
index 0000000..d968791
--- /dev/null
@@ -0,0 +1,635 @@
+/*
+ * V4L2 AIM - V4L2 Application Interface Module for MostCore
+ *
+ * Copyright (C) 2015, Microchip Technology Germany II GmbH & Co. KG
+ *
+ * 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 file is licensed under GPLv2.
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/init.h>
+#include <linux/device.h>
+#include <linux/suspend.h>
+#include <linux/videodev2.h>
+#include <linux/mutex.h>
+#include <media/v4l2-common.h>
+#include <media/v4l2-ioctl.h>
+#include <media/v4l2-event.h>
+#include <media/v4l2-device.h>
+#include <media/v4l2-ctrls.h>
+#include <media/v4l2-fh.h>
+
+#include "mostcore.h"
+
+
+#define V4L2_AIM_MAX_INPUT  1
+
+
+struct most_video_dev {
+       struct most_interface *iface;
+       int ch_idx;
+       struct list_head list;
+       bool mute;
+
+       struct list_head pending_mbos;
+       spinlock_t list_lock;
+
+       struct v4l2_device v4l2_dev;
+       atomic_t access_ref;
+       struct video_device *vdev;
+       unsigned int ctrl_input;
+
+       struct mutex lock;
+
+       wait_queue_head_t wait_data;
+};
+
+struct aim_fh {
+       /* must be the first field of this struct! */
+       struct v4l2_fh fh;
+       struct most_video_dev *mdev;
+       u32 offs;
+};
+
+
+static struct list_head video_devices = LIST_HEAD_INIT(video_devices);
+static struct spinlock list_lock;
+static struct most_aim aim_info;
+
+
+static inline bool data_ready(struct most_video_dev *mdev)
+{
+       return !list_empty(&mdev->pending_mbos);
+}
+
+static inline struct mbo *get_top_mbo(struct most_video_dev *mdev)
+{
+       return list_first_entry(&mdev->pending_mbos, struct mbo, list);
+}
+
+
+static int aim_vdev_open(struct file *filp)
+{
+       int ret;
+       struct video_device *vdev = video_devdata(filp);
+       struct most_video_dev *mdev = video_drvdata(filp);
+       struct aim_fh *fh;
+
+       pr_info("aim_vdev_open()\n");
+
+       switch (vdev->vfl_type) {
+       case VFL_TYPE_GRABBER:
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       fh = kzalloc(sizeof(struct aim_fh), GFP_KERNEL);
+       if (!fh)
+               return -ENOMEM;
+
+       if (!atomic_inc_and_test(&mdev->access_ref)) {
+               pr_err("too many clients\n");
+               ret = -EBUSY;
+               goto err_dec;
+       }
+
+       fh->mdev = mdev;
+       v4l2_fh_init(&fh->fh, vdev);
+       filp->private_data = fh;
+
+       v4l2_fh_add(&fh->fh);
+
+       ret = most_start_channel(mdev->iface, mdev->ch_idx);
+       if (ret) {
+               pr_err("most_start_channel() failed\n");
+               goto err_rm;
+       }
+
+       return 0;
+
+err_rm:
+       v4l2_fh_del(&fh->fh);
+       v4l2_fh_exit(&fh->fh);
+
+err_dec:
+       atomic_dec(&mdev->access_ref);
+       kfree(fh);
+       return ret;
+}
+
+static int aim_vdev_close(struct file *filp)
+{
+       struct aim_fh *fh = filp->private_data;
+       struct most_video_dev *mdev = fh->mdev;
+       struct mbo *mbo, *tmp;
+
+       pr_info("aim_vdev_close()\n");
+
+       /*
+        * We need to put MBOs back before we call most_stop_channel()
+        * to deallocate MBOs.
+        * From the other hand mostcore still calling rx_completion()
+        * to deliver MBOs until most_stop_channel() is called.
+        * Use mute to work around this issue.
+        * This must be implemented in core.
+        */
+
+       spin_lock(&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);
+               most_put_mbo(mbo);
+               spin_lock(&mdev->list_lock);
+       }
+       spin_unlock(&mdev->list_lock);
+       most_stop_channel(mdev->iface, mdev->ch_idx);
+       mdev->mute = false;
+
+       v4l2_fh_del(&fh->fh);
+       v4l2_fh_exit(&fh->fh);
+
+       atomic_dec(&mdev->access_ref);
+       kfree(fh);
+       return 0;
+}
+
+static ssize_t aim_vdev_read(struct file *filp, char __user *buf,
+                            size_t count, loff_t *pos)
+{
+       struct aim_fh *fh = filp->private_data;
+       struct most_video_dev *mdev = fh->mdev;
+       int ret = 0;
+
+       if (*pos)
+               return -ESPIPE;
+
+       if (!mdev)
+               return -ENODEV;
+
+       /* wait for the first buffer */
+       if (!(filp->f_flags & O_NONBLOCK)) {
+               if (wait_event_interruptible(mdev->wait_data, data_ready(mdev)))
+                       return -ERESTARTSYS;
+       }
+
+       if (!data_ready(mdev))
+               return -EAGAIN;
+
+       while (count > 0 && data_ready(mdev)) {
+               struct mbo *const mbo = get_top_mbo(mdev);
+               int const rem = mbo->processed_length - fh->offs;
+               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");
+                       if (!ret)
+                               ret = -EFAULT;
+                       return ret;
+               }
+
+               fh->offs += cnt;
+               count -= cnt;
+               buf += cnt;
+               ret += cnt;
+
+               if (cnt >= rem) {
+                       fh->offs = 0;
+                       spin_lock(&mdev->list_lock);
+                       list_del(&mbo->list);
+                       spin_unlock(&mdev->list_lock);
+                       most_put_mbo(mbo);
+               }
+       }
+       return ret;
+}
+
+static unsigned int aim_vdev_poll(struct file *filp, poll_table *wait)
+{
+       struct aim_fh *fh = filp->private_data;
+       struct most_video_dev *mdev = fh->mdev;
+       unsigned int mask = 0;
+
+       /* only wait if no data is available */
+       if (!data_ready(mdev))
+               poll_wait(filp, &mdev->wait_data, wait);
+       if (data_ready(mdev))
+               mask |= POLLIN | POLLRDNORM;
+
+       return mask;
+}
+
+static void aim_set_format_struct(struct v4l2_format *f)
+{
+       f->fmt.pix.width = 8;
+       f->fmt.pix.height = 8;
+       f->fmt.pix.pixelformat = V4L2_PIX_FMT_MPEG;
+       f->fmt.pix.bytesperline = 0;
+       f->fmt.pix.sizeimage = 188 * 2;
+       f->fmt.pix.colorspace = V4L2_COLORSPACE_REC709;
+       f->fmt.pix.field = V4L2_FIELD_NONE;
+       f->fmt.pix.priv = 0;
+}
+
+static int aim_set_format(struct most_video_dev *mdev, unsigned int cmd,
+                         struct v4l2_format *format)
+{
+#if 0
+       u32 const pixfmt = format->fmt.pix.pixelformat;
+       const char *fmt;
+
+       if (pixfmt != V4L2_PIX_FMT_MPEG) {
+               if (cmd == VIDIOC_TRY_FMT)
+                       fmt = KERN_ERR "try %c%c%c%c failed\n";
+               else
+                       fmt = KERN_ERR "set %c%c%c%c failed\n";
+       } else {
+               if (cmd == VIDIOC_TRY_FMT)
+                       fmt = KERN_ERR "try %c%c%c%c\n";
+               else
+                       fmt = KERN_ERR "set %c%c%c%c\n";
+       }
+       printk(fmt,
+              (pixfmt) & 255,
+              (pixfmt >> 8) & 255,
+              (pixfmt >> 16) & 255,
+              (pixfmt >> 24) & 255);
+#endif
+
+       if (format->fmt.pix.pixelformat != V4L2_PIX_FMT_MPEG)
+               return -EINVAL;
+
+       if (cmd == VIDIOC_TRY_FMT)
+               return 0;
+
+       aim_set_format_struct(format);
+
+       return 0;
+}
+
+
+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");
+
+       strlcpy(cap->driver, "v4l2_most_aim", sizeof(cap->driver));
+       strlcpy(cap->card, "my_card", sizeof(cap->card));
+       snprintf(cap->bus_info, sizeof(cap->bus_info),
+                "%s", mdev->iface->description);
+
+       cap->capabilities =
+               V4L2_CAP_READWRITE |
+               V4L2_CAP_TUNER |
+               V4L2_CAP_VIDEO_CAPTURE;
+       return 0;
+}
+
+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);
+
+       if (f->index)
+               return -EINVAL;
+
+       strcpy(f->description, "MPEG");
+       f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+       f->flags = V4L2_FMT_FLAG_COMPRESSED;
+       f->pixelformat = V4L2_PIX_FMT_MPEG;
+
+       return 0;
+}
+
+static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
+                               struct v4l2_format *f)
+{
+       pr_info("vidioc_g_fmt_vid_cap()\n");
+
+       aim_set_format_struct(f);
+       return 0;
+}
+
+static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
+                                 struct v4l2_format *f)
+{
+       struct aim_fh *fh  = priv;
+       struct most_video_dev *mdev = fh->mdev;
+
+       return aim_set_format(mdev, VIDIOC_TRY_FMT, f);
+}
+
+static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
+                               struct v4l2_format *f)
+{
+       struct aim_fh *fh  = priv;
+       struct most_video_dev *mdev = fh->mdev;
+
+       return aim_set_format(mdev, VIDIOC_S_FMT, f);
+}
+
+static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
+{
+       pr_info("vidioc_g_std()\n");
+
+       *norm = V4L2_STD_UNKNOWN;
+       return 0;
+}
+
+static int vidioc_enum_input(struct file *file, void *priv,
+                            struct v4l2_input *input)
+{
+       struct aim_fh *fh = priv;
+       struct most_video_dev *mdev = fh->mdev;
+
+       if (input->index >= V4L2_AIM_MAX_INPUT)
+               return -EINVAL;
+
+       strcpy(input->name, "MOST Video");
+       input->type |= V4L2_INPUT_TYPE_CAMERA;
+       input->audioset = 0;
+
+       input->std = mdev->vdev->tvnorms;
+
+       return 0;
+}
+
+static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
+{
+       struct aim_fh *fh = priv;
+       struct most_video_dev *mdev = fh->mdev;
+       *i = mdev->ctrl_input;
+       return 0;
+}
+
+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);
+
+       if (index >= V4L2_AIM_MAX_INPUT)
+               return -EINVAL;
+       mdev->ctrl_input = index;
+       return 0;
+}
+
+static struct v4l2_file_operations aim_fops = {
+       .owner      = THIS_MODULE,
+       .open       = aim_vdev_open,
+       .release    = aim_vdev_close,
+       .read       = aim_vdev_read,
+       .poll       = aim_vdev_poll,
+       .unlocked_ioctl = video_ioctl2,
+};
+
+static const struct v4l2_ioctl_ops video_ioctl_ops = {
+       .vidioc_querycap            = vidioc_querycap,
+       .vidioc_enum_fmt_vid_cap    = vidioc_enum_fmt_vid_cap,
+       .vidioc_g_fmt_vid_cap       = vidioc_g_fmt_vid_cap,
+       .vidioc_try_fmt_vid_cap     = vidioc_try_fmt_vid_cap,
+       .vidioc_s_fmt_vid_cap       = vidioc_s_fmt_vid_cap,
+       .vidioc_g_std               = vidioc_g_std,
+       .vidioc_enum_input          = vidioc_enum_input,
+       .vidioc_g_input             = vidioc_g_input,
+       .vidioc_s_input             = vidioc_s_input,
+};
+
+static const struct video_device aim_videodev_template = {
+       .fops = &aim_fops,
+       .release = video_device_release,
+       .ioctl_ops = &video_ioctl_ops,
+       .tvnorms = V4L2_STD_UNKNOWN,
+};
+
+/**************************************************************************/
+
+static struct most_video_dev *get_aim_dev(
+       struct most_interface *iface, int channel_idx)
+{
+       struct most_video_dev *mdev, *tmp;
+
+       spin_lock(&list_lock);
+       list_for_each_entry_safe(mdev, tmp, &video_devices, list) {
+               if (mdev->iface == iface && mdev->ch_idx == channel_idx) {
+                       spin_unlock(&list_lock);
+                       return mdev;
+               }
+       }
+       spin_unlock(&list_lock);
+       return 0;
+}
+
+static int aim_rx_data(struct mbo *mbo)
+{
+       struct most_video_dev *mdev =
+               get_aim_dev(mbo->ifp, mbo->hdm_channel_id);
+
+       if (!mdev)
+               return -EIO;
+
+       spin_lock(&mdev->list_lock);
+       if (unlikely(mdev->mute)) {
+               spin_unlock(&mdev->list_lock);
+               return -EIO;
+       }
+
+       list_add_tail(&mbo->list, &mdev->pending_mbos);
+       spin_unlock(&mdev->list_lock);
+       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");
+
+       init_waitqueue_head(&mdev->wait_data);
+
+       /* allocate and fill v4l2 video struct */
+       mdev->vdev = video_device_alloc();
+       if (!mdev->vdev)
+               return -ENOMEM;
+
+       /* Fill the video capture device struct */
+       *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");
+
+       /* 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;
+       }
+
+       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");
+
+       video_unregister_device(mdev->vdev);
+}
+
+
+static void aim_v4l2_dev_release(struct v4l2_device *v4l2_dev)
+{
+       struct most_video_dev *mdev =
+               container_of(v4l2_dev, struct most_video_dev, v4l2_dev);
+
+       v4l2_device_unregister(v4l2_dev);
+       kfree(mdev);
+}
+
+static int aim_probe_channel(struct most_interface *iface, int channel_idx,
+                            struct most_channel_config *ccfg,
+                            struct kobject *parent, char *name)
+{
+       int ret;
+       struct most_video_dev *mdev = get_aim_dev(iface, channel_idx);
+
+       pr_info("aim_probe_channel()\n");
+
+       if (mdev) {
+               pr_err("channel already linked\n");
+               return -EEXIST;
+       }
+
+       if (ccfg->direction != MOST_CH_RX) {
+               pr_err("wrong direction, expect rx\n");
+               return -EINVAL;
+       }
+
+       if (ccfg->data_type != MOST_CH_SYNC &&
+           ccfg->data_type != MOST_CH_ISOC_AVP) {
+               pr_err("wrong channel type, expect sync or isoc_avp\n");
+               return -EINVAL;
+       }
+
+       mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
+       if (!mdev)
+               return -ENOMEM;
+
+       mutex_init(&mdev->lock);
+       atomic_set(&mdev->access_ref, -1);
+       spin_lock_init(&mdev->list_lock);
+       INIT_LIST_HEAD(&mdev->pending_mbos);
+       mdev->iface = iface;
+       mdev->ch_idx = 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));
+       ret = v4l2_device_register(NULL, &mdev->v4l2_dev);
+       if (ret) {
+               pr_err("v4l2_device_register() failed\n");
+               kfree(mdev);
+               return ret;
+       }
+
+       ret = aim_register_videodev(mdev);
+       if (ret)
+               goto err_unreg;
+
+       spin_lock(&list_lock);
+       list_add(&mdev->list, &video_devices);
+       spin_unlock(&list_lock);
+       return 0;
+
+err_unreg:
+       v4l2_device_disconnect(&mdev->v4l2_dev);
+       v4l2_device_put(&mdev->v4l2_dev);
+       return ret;
+}
+
+static int aim_disconnect_channel(struct most_interface *iface,
+                                 int channel_idx)
+{
+       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);
+       list_del(&mdev->list);
+       spin_unlock(&list_lock);
+
+       aim_unregister_videodev(mdev);
+       v4l2_device_disconnect(&mdev->v4l2_dev);
+       v4l2_device_put(&mdev->v4l2_dev);
+       return 0;
+}
+
+static int __init aim_init(void)
+{
+       spin_lock_init(&list_lock);
+
+       aim_info.name = "v4l";
+       aim_info.probe_channel = aim_probe_channel;
+       aim_info.disconnect_channel = aim_disconnect_channel;
+       aim_info.rx_completion = aim_rx_data;
+       return most_register_aim(&aim_info);
+}
+
+static void __exit aim_exit(void)
+{
+       struct most_video_dev *mdev, *tmp;
+
+       /*
+        * As the mostcore currently doesn't call disconnect_channel()
+        * for linked channels while we call most_deregister_aim()
+        * we simulate this call here.
+        * This must be fixed in core.
+        */
+       spin_lock(&list_lock);
+       list_for_each_entry_safe(mdev, tmp, &video_devices, list) {
+               list_del(&mdev->list);
+               spin_unlock(&list_lock);
+
+               aim_unregister_videodev(mdev);
+               v4l2_device_disconnect(&mdev->v4l2_dev);
+               v4l2_device_put(&mdev->v4l2_dev);
+               spin_lock(&list_lock);
+       }
+       spin_unlock(&list_lock);
+
+       most_deregister_aim(&aim_info);
+       BUG_ON(!list_empty(&video_devices));
+}
+
+module_init(aim_init);
+module_exit(aim_exit);
+
+MODULE_DESCRIPTION("V4L2 Application Interface Module for MostCore");
+MODULE_AUTHOR("Andrey Shvetsov <andrey.shvetsov@k2l.de>");
+MODULE_LICENSE("GPL");
diff --git a/drivers/staging/most/hdm-dim2/Kconfig b/drivers/staging/most/hdm-dim2/Kconfig
new file mode 100644 (file)
index 0000000..1d4ad1d
--- /dev/null
@@ -0,0 +1,16 @@
+#
+# MediaLB configuration
+#
+
+config HDM_DIM2
+       tristate "DIM2 HDM"
+       depends on AIM_NETWORK
+
+       ---help---
+         Say Y here if you want to connect via MediaLB to network transceiver.
+         This device driver is platform dependent and needs an addtional
+         platform driver to be installed. For more information contact
+         maintainer of this driver.
+
+         To compile this driver as a module, choose M here: the
+         module will be called hdm_dim2.
diff --git a/drivers/staging/most/hdm-dim2/Makefile b/drivers/staging/most/hdm-dim2/Makefile
new file mode 100644 (file)
index 0000000..6bbee87
--- /dev/null
@@ -0,0 +1,5 @@
+obj-$(CONFIG_HDM_DIM2) += hdm_dim2.o
+
+hdm_dim2-objs := dim2_hdm.o dim2_hal.o dim2_sysfs.o
+ccflags-y += -Idrivers/staging/most/mostcore/
+ccflags-y += -Idrivers/staging/most/aim-network/
diff --git a/drivers/staging/most/hdm-dim2/dim2_errors.h b/drivers/staging/most/hdm-dim2/dim2_errors.h
new file mode 100644 (file)
index 0000000..314f7de
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * dim2_errors.h - Definitions of errors for DIM2 HAL API
+ * (MediaLB, Device Interface Macro IP, OS62420)
+ *
+ * Copyright (C) 2015, Microchip Technology Germany II GmbH & Co. KG
+ *
+ * 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 file is licensed under GPLv2.
+ */
+
+#ifndef _MOST_DIM_ERRORS_H
+#define _MOST_DIM_ERRORS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/**
+ * MOST DIM errors.
+ */
+enum dim_errors_t {
+       /** Not an error */
+       DIM_NO_ERROR = 0,
+
+       /** Bad base address for DIM2 IP */
+       DIM_INIT_ERR_DIM_ADDR = 0x10,
+
+       /**< Bad MediaLB clock */
+       DIM_INIT_ERR_MLB_CLOCK,
+
+       /** Bad channel address */
+       DIM_INIT_ERR_CHANNEL_ADDRESS,
+
+       /** Out of DBR memory */
+       DIM_INIT_ERR_OUT_OF_MEMORY,
+
+       /** DIM API is called while DIM is not initialized successfully */
+       DIM_ERR_DRIVER_NOT_INITIALIZED = 0x20,
+
+       /**
+        * Configuration does not respect hardware limitations
+        * for isochronous or synchronous channels
+        */
+       DIM_ERR_BAD_CONFIG,
+
+       /**
+        * Buffer size does not respect hardware limitations
+        * for isochronous or synchronous channels
+        */
+       DIM_ERR_BAD_BUFFER_SIZE,
+
+       DIM_ERR_UNDERFLOW,
+
+       DIM_ERR_OVERFLOW,
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _MOST_DIM_ERRORS_H */
diff --git a/drivers/staging/most/hdm-dim2/dim2_hal.c b/drivers/staging/most/hdm-dim2/dim2_hal.c
new file mode 100644 (file)
index 0000000..01b7489
--- /dev/null
@@ -0,0 +1,919 @@
+/*
+ * dim2_hal.c - DIM2 HAL implementation
+ * (MediaLB, Device Interface Macro IP, OS62420)
+ *
+ * Copyright (C) 2015, Microchip Technology Germany II GmbH & Co. KG
+ *
+ * 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 file is licensed under GPLv2.
+ */
+
+/* Author: Andrey Shvetsov <andrey.shvetsov@k2l.de> */
+
+#include "dim2_hal.h"
+#include "dim2_errors.h"
+#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.
+ */
+#define ISOC_DBR_FACTOR 3u
+
+/*
+ * Number of 32-bit units for DBR map.
+ *
+ * 1: block size is 512, max allocation is 16K
+ * 2: block size is 256, max allocation is 8K
+ * 4: block size is 128, max allocation is 4K
+ * 8: block size is 64, max allocation is 2K
+ *
+ * Min allocated space is block size.
+ * Max possible allocated space is 32 blocks.
+ */
+#define DBR_MAP_SIZE 2
+
+
+/* -------------------------------------------------------------------------- */
+/* not configurable area */
+
+#define CDT 0x00
+#define ADT 0x40
+#define MLB_CAT 0x80
+#define AHB_CAT 0x88
+
+#define DBR_SIZE  (16*1024) /* specified by IP */
+#define DBR_BLOCK_SIZE  (DBR_SIZE / 32 / DBR_MAP_SIZE)
+
+
+/* -------------------------------------------------------------------------- */
+/* 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;
+}
+
+static inline bool dim_on_error(u8 error_id, const char *error_message)
+{
+       DIMCB_OnError(error_id, error_message);
+       return false;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* types and local variables */
+
+struct lld_global_vars_t {
+       bool dim_is_initialized;
+       bool mcm_is_initialized;
+       struct dim2_regs *dim2; /* DIM2 core base address */
+       u32 dbr_map[DBR_MAP_SIZE];
+};
+
+static struct lld_global_vars_t g = { false };
+
+
+/* -------------------------------------------------------------------------- */
+
+static int dbr_get_mask_size(u16 size)
+{
+       int i;
+
+       for (i = 0; i < 6; i++)
+               if (size <= (DBR_BLOCK_SIZE << i))
+                       return 1 << i;
+       return 0;
+}
+
+/**
+ * Allocates DBR memory.
+ * @param size Allocating memory size.
+ * @return Offset in DBR memory by success or DBR_SIZE if out of memory.
+ */
+static int alloc_dbr(u16 size)
+{
+       int mask_size;
+       int i, block_idx = 0;
+
+       if (size <= 0)
+               return DBR_SIZE; /* out of memory */
+
+       mask_size = dbr_get_mask_size(size);
+       if (mask_size == 0)
+               return DBR_SIZE; /* out of memory */
+
+       for (i = 0; i < DBR_MAP_SIZE; i++) {
+               u32 const blocks = (size + DBR_BLOCK_SIZE - 1) / DBR_BLOCK_SIZE;
+               u32 mask = ~((~(u32)0) << blocks);
+
+               do {
+                       if ((g.dbr_map[i] & mask) == 0) {
+                               g.dbr_map[i] |= mask;
+                               return block_idx * DBR_BLOCK_SIZE;
+                       }
+                       block_idx += mask_size;
+                       /* do shift left with 2 steps for case mask_size == 32 */
+                       mask <<= mask_size - 1;
+               } while ((mask <<= 1) != 0);
+       }
+
+       return DBR_SIZE; /* out of memory */
+}
+
+static void free_dbr(int offs, int size)
+{
+       int block_idx = offs / DBR_BLOCK_SIZE;
+       u32 const blocks = (size + DBR_BLOCK_SIZE - 1) / DBR_BLOCK_SIZE;
+       u32 mask = ~((~(u32)0) << blocks);
+
+       mask <<= block_idx % 32;
+       g.dbr_map[block_idx / 32] &= ~mask;
+}
+
+/* -------------------------------------------------------------------------- */
+
+static u32 dim2_read_ctr(u32 ctr_addr, u16 mdat_idx)
+{
+       DIMCB_IoWrite(&g.dim2->MADR, ctr_addr);
+
+       /* wait till transfer is completed */
+       while ((DIMCB_IoRead(&g.dim2->MCTL) & 1) != 1)
+               continue;
+
+       DIMCB_IoWrite(&g.dim2->MCTL, 0);   /* clear transfer complete */
+
+       return DIMCB_IoRead((&g.dim2->MDAT0) + mdat_idx);
+}
+
+static void dim2_write_ctr_mask(u32 ctr_addr, const u32 *mask, const u32 *value)
+{
+       enum { MADR_WNR_BIT = 31 };
+
+       DIMCB_IoWrite(&g.dim2->MCTL, 0);   /* clear transfer complete */
+
+       if (mask[0] != 0)
+               DIMCB_IoWrite(&g.dim2->MDAT0, value[0]);
+       if (mask[1] != 0)
+               DIMCB_IoWrite(&g.dim2->MDAT1, value[1]);
+       if (mask[2] != 0)
+               DIMCB_IoWrite(&g.dim2->MDAT2, value[2]);
+       if (mask[3] != 0)
+               DIMCB_IoWrite(&g.dim2->MDAT3, value[3]);
+
+       DIMCB_IoWrite(&g.dim2->MDWE0, mask[0]);
+       DIMCB_IoWrite(&g.dim2->MDWE1, mask[1]);
+       DIMCB_IoWrite(&g.dim2->MDWE2, mask[2]);
+       DIMCB_IoWrite(&g.dim2->MDWE3, mask[3]);
+
+       DIMCB_IoWrite(&g.dim2->MADR, bit_mask(MADR_WNR_BIT) | ctr_addr);
+
+       /* wait till transfer is completed */
+       while ((DIMCB_IoRead(&g.dim2->MCTL) & 1) != 1)
+               continue;
+
+       DIMCB_IoWrite(&g.dim2->MCTL, 0);   /* clear transfer complete */
+}
+
+static inline void dim2_write_ctr(u32 ctr_addr, const u32 *value)
+{
+       u32 const mask[4] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF };
+
+       dim2_write_ctr_mask(ctr_addr, mask, value);
+}
+
+static inline void dim2_clear_ctr(u32 ctr_addr)
+{
+       u32 const value[4] = { 0, 0, 0, 0 };
+
+       dim2_write_ctr(ctr_addr, value);
+}
+
+static void dim2_configure_cat(u8 cat_base, u8 ch_addr, u8 ch_type,
+                              bool read_not_write, bool sync_mfe)
+{
+       u16 const cat =
+               (read_not_write << CAT_RNW_BIT) |
+               (ch_type << CAT_CT_SHIFT) |
+               (ch_addr << CAT_CL_SHIFT) |
+               (sync_mfe << CAT_MFE_BIT) |
+               (false << CAT_MT_BIT) |
+               (true << CAT_CE_BIT);
+       u8 const ctr_addr = cat_base + ch_addr / 8;
+       u8 const idx = (ch_addr % 8) / 2;
+       u8 const shift = (ch_addr % 2) * 16;
+       u32 mask[4] = { 0, 0, 0, 0 };
+       u32 value[4] = { 0, 0, 0, 0 };
+
+       mask[idx] = (u32)0xFFFF << shift;
+       value[idx] = cat << shift;
+       dim2_write_ctr_mask(ctr_addr, mask, value);
+}
+
+static void dim2_clear_cat(u8 cat_base, u8 ch_addr)
+{
+       u8 const ctr_addr = cat_base + ch_addr / 8;
+       u8 const idx = (ch_addr % 8) / 2;
+       u8 const shift = (ch_addr % 2) * 16;
+       u32 mask[4] = { 0, 0, 0, 0 };
+       u32 value[4] = { 0, 0, 0, 0 };
+
+       mask[idx] = (u32)0xFFFF << shift;
+       dim2_write_ctr_mask(ctr_addr, mask, value);
+}
+
+static void dim2_configure_cdt(u8 ch_addr, u16 dbr_address, u16 hw_buffer_size,
+                              u16 packet_length)
+{
+       u32 cdt[4] = { 0, 0, 0, 0 };
+
+       if (packet_length)
+               cdt[1] = ((packet_length - 1) << CDT1_BS_ISOC_SHIFT);
+
+       cdt[3] =
+               ((hw_buffer_size - 1) << CDT3_BD_SHIFT) |
+               (dbr_address << CDT3_BA_SHIFT);
+       dim2_write_ctr(CDT + ch_addr, cdt);
+}
+
+static void dim2_clear_cdt(u8 ch_addr)
+{
+       u32 cdt[4] = { 0, 0, 0, 0 };
+
+       dim2_write_ctr(CDT + ch_addr, cdt);
+}
+
+static void dim2_configure_adt(u8 ch_addr)
+{
+       u32 adt[4] = { 0, 0, 0, 0 };
+
+       adt[0] =
+               (true << ADT0_CE_BIT) |
+               (true << ADT0_LE_BIT) |
+               (0 << ADT0_PG_BIT);
+
+       dim2_write_ctr(ADT + ch_addr, adt);
+}
+
+static void dim2_clear_adt(u8 ch_addr)
+{
+       u32 adt[4] = { 0, 0, 0, 0 };
+
+       dim2_write_ctr(ADT + ch_addr, adt);
+}
+
+static void dim2_start_ctrl_async(u8 ch_addr, u8 idx, u32 buf_addr,
+                                 u16 buffer_size)
+{
+       u8 const shift = idx * 16;
+
+       u32 mask[4] = { 0, 0, 0, 0 };
+       u32 adt[4] = { 0, 0, 0, 0 };
+
+       mask[1] =
+               bit_mask(ADT1_PS_BIT + shift) |
+               bit_mask(ADT1_RDY_BIT + shift) |
+               (ADT1_CTRL_ASYNC_BD_MASK << (ADT1_BD_SHIFT + shift));
+       adt[1] =
+               (true << (ADT1_PS_BIT + shift)) |
+               (true << (ADT1_RDY_BIT + shift)) |
+               ((buffer_size - 1) << (ADT1_BD_SHIFT + shift));
+
+       mask[idx + 2] = 0xFFFFFFFF;
+       adt[idx + 2] = buf_addr;
+
+       dim2_write_ctr_mask(ADT + ch_addr, mask, adt);
+}
+
+static void dim2_start_isoc_sync(u8 ch_addr, u8 idx, u32 buf_addr,
+                                u16 buffer_size)
+{
+       u8 const shift = idx * 16;
+
+       u32 mask[4] = { 0, 0, 0, 0 };
+       u32 adt[4] = { 0, 0, 0, 0 };
+
+       mask[1] =
+               bit_mask(ADT1_RDY_BIT + shift) |
+               (ADT1_ISOC_SYNC_BD_MASK << (ADT1_BD_SHIFT + shift));
+       adt[1] =
+               (true << (ADT1_RDY_BIT + shift)) |
+               ((buffer_size - 1) << (ADT1_BD_SHIFT + shift));
+
+       mask[idx + 2] = 0xFFFFFFFF;
+       adt[idx + 2] = buf_addr;
+
+       dim2_write_ctr_mask(ADT + ch_addr, mask, adt);
+}
+
+
+static void dim2_clear_ctram(void)
+{
+       u32 ctr_addr;
+
+       for (ctr_addr = 0; ctr_addr < 0x90; ctr_addr++)
+               dim2_clear_ctr(ctr_addr);
+}
+
+static void dim2_configure_channel(
+       u8 ch_addr, u8 type, u8 is_tx, u16 dbr_address, u16 hw_buffer_size,
+       u16 packet_length, bool sync_mfe)
+{
+       dim2_configure_cdt(ch_addr, dbr_address, hw_buffer_size, packet_length);
+       dim2_configure_cat(MLB_CAT, ch_addr, type, is_tx ? 1 : 0, sync_mfe);
+
+       dim2_configure_adt(ch_addr);
+       dim2_configure_cat(AHB_CAT, ch_addr, type, is_tx ? 0 : 1, sync_mfe);
+
+       /* unmask interrupt for used channel, enable mlb_sys_int[0] interrupt */
+       DIMCB_IoWrite(&g.dim2->ACMR0,
+                     DIMCB_IoRead(&g.dim2->ACMR0) | bit_mask(ch_addr));
+}
+
+static void dim2_clear_channel(u8 ch_addr)
+{
+       /* mask interrupt for used channel, disable mlb_sys_int[0] interrupt */
+       DIMCB_IoWrite(&g.dim2->ACMR0,
+                     DIMCB_IoRead(&g.dim2->ACMR0) & ~bit_mask(ch_addr));
+
+       dim2_clear_cat(AHB_CAT, ch_addr);
+       dim2_clear_adt(ch_addr);
+
+       dim2_clear_cat(MLB_CAT, ch_addr);
+       dim2_clear_cdt(ch_addr);
+}
+
+/* -------------------------------------------------------------------------- */
+/* channel state helpers */
+
+static void state_init(struct int_ch_state *state)
+{
+       state->request_counter = 0;
+       state->service_counter = 0;
+
+       state->idx1 = 0;
+       state->idx2 = 0;
+       state->level = 0;
+}
+
+/* -------------------------------------------------------------------------- */
+/* macro helper functions */
+
+static inline bool check_channel_address(u32 ch_address)
+{
+       return ch_address > 0 && (ch_address % 2) == 0 &&
+              (ch_address / 2) <= (u32)CAT_CL_MASK;
+}
+
+static inline bool check_packet_length(u32 packet_length)
+{
+       u16 const max_size = ((u16)CDT3_BD_ISOC_MASK + 1u) / ISOC_DBR_FACTOR;
+
+       if (packet_length <= 0)
+               return false; /* too small */
+
+       if (packet_length > max_size)
+               return false; /* too big */
+
+       if (packet_length - 1u > (u32)CDT1_BS_ISOC_MASK)
+               return false; /* too big */
+
+       return true;
+}
+
+static inline bool check_bytes_per_frame(u32 bytes_per_frame)
+{
+       u16 const max_size = ((u16)CDT3_BD_MASK + 1u) / SYNC_DBR_FACTOR;
+
+       if (bytes_per_frame <= 0)
+               return false; /* too small */
+
+       if (bytes_per_frame > max_size)
+               return false; /* too big */
+
+       return true;
+}
+
+static inline u16 norm_ctrl_async_buffer_size(u16 buf_size)
+{
+       u16 const max_size = (u16)ADT1_CTRL_ASYNC_BD_MASK + 1u;
+
+       if (buf_size > max_size)
+               return max_size;
+
+       return buf_size;
+}
+
+static inline u16 norm_isoc_buffer_size(u16 buf_size, u16 packet_length)
+{
+       u16 n;
+       u16 const max_size = (u16)ADT1_ISOC_SYNC_BD_MASK + 1u;
+
+       if (buf_size > max_size)
+               buf_size = max_size;
+
+       n = buf_size / packet_length;
+
+       if (n < 2u)
+               return 0; /* too small buffer for given packet_length */
+
+       return packet_length * n;
+}
+
+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;
+
+       if (buf_size > max_size)
+               buf_size = max_size;
+
+       n = buf_size / unit;
+
+       if (n < 1u)
+               return 0; /* too small buffer for given bytes_per_frame */
+
+       return unit * n;
+}
+
+static void dim2_cleanup(void)
+{
+       /* disable MediaLB */
+       DIMCB_IoWrite(&g.dim2->MLBC0, false << MLBC0_MLBEN_BIT);
+
+       dim2_clear_ctram();
+
+       /* disable mlb_int interrupt */
+       DIMCB_IoWrite(&g.dim2->MIEN, 0);
+
+       /* clear status for all dma channels */
+       DIMCB_IoWrite(&g.dim2->ACSR0, 0xFFFFFFFF);
+       DIMCB_IoWrite(&g.dim2->ACSR1, 0xFFFFFFFF);
+
+       /* mask interrupts for all channels */
+       DIMCB_IoWrite(&g.dim2->ACMR0, 0);
+       DIMCB_IoWrite(&g.dim2->ACMR1, 0);
+}
+
+static void dim2_initialize(bool enable_6pin, u8 mlb_clock)
+{
+       dim2_cleanup();
+
+       /* configure and enable MediaLB */
+       DIMCB_IoWrite(&g.dim2->MLBC0,
+                     enable_6pin << MLBC0_MLBPEN_BIT |
+                     mlb_clock << MLBC0_MLBCLK_SHIFT |
+                     MLBC0_FCNT_VAL(FRAMES_PER_SUBBUFF) << MLBC0_FCNT_SHIFT |
+                     true << MLBC0_MLBEN_BIT);
+
+       /* activate all HBI channels */
+       DIMCB_IoWrite(&g.dim2->HCMR0, 0xFFFFFFFF);
+       DIMCB_IoWrite(&g.dim2->HCMR1, 0xFFFFFFFF);
+
+       /* enable HBI */
+       DIMCB_IoWrite(&g.dim2->HCTL, bit_mask(HCTL_EN_BIT));
+
+       /* configure DMA */
+       DIMCB_IoWrite(&g.dim2->ACTL,
+                     ACTL_DMA_MODE_VAL_DMA_MODE_1 << ACTL_DMA_MODE_BIT |
+                     true << ACTL_SCE_BIT);
+
+#if 0
+       DIMCB_IoWrite(&g.dim2->MIEN,
+                     bit_mask(MIEN_CTX_BREAK_BIT) |
+                     bit_mask(MIEN_CTX_PE_BIT) |
+                     bit_mask(MIEN_CTX_DONE_BIT) |
+                     bit_mask(MIEN_CRX_BREAK_BIT) |
+                     bit_mask(MIEN_CRX_PE_BIT) |
+                     bit_mask(MIEN_CRX_DONE_BIT) |
+                     bit_mask(MIEN_ATX_BREAK_BIT) |
+                     bit_mask(MIEN_ATX_PE_BIT) |
+                     bit_mask(MIEN_ATX_DONE_BIT) |
+                     bit_mask(MIEN_ARX_BREAK_BIT) |
+                     bit_mask(MIEN_ARX_PE_BIT) |
+                     bit_mask(MIEN_ARX_DONE_BIT));
+#endif
+}
+
+static bool dim2_is_mlb_locked(void)
+{
+       u32 const mask0 = bit_mask(MLBC0_MLBLK_BIT);
+       u32 const mask1 = bit_mask(MLBC1_CLKMERR_BIT) |
+                         bit_mask(MLBC1_LOCKERR_BIT);
+       u32 const c1 = DIMCB_IoRead(&g.dim2->MLBC1);
+       u32 const nda_mask = (u32)MLBC1_NDA_MASK << MLBC1_NDA_SHIFT;
+
+       DIMCB_IoWrite(&g.dim2->MLBC1, c1 & nda_mask);
+       return (DIMCB_IoRead(&g.dim2->MLBC1) & mask1) == 0 &&
+              (DIMCB_IoRead(&g.dim2->MLBC0) & mask0) != 0;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* channel help routines */
+
+static inline bool service_channel(u8 ch_addr, u8 idx)
+{
+       u8 const shift = idx * 16;
+       u32 const adt1 = dim2_read_ctr(ADT + ch_addr, 1);
+
+       if (((adt1 >> (ADT1_DNE_BIT + shift)) & 1) == 0)
+               return false;
+
+       {
+               u32 mask[4] = { 0, 0, 0, 0 };
+               u32 adt_w[4] = { 0, 0, 0, 0 };
+
+               mask[1] =
+                       bit_mask(ADT1_DNE_BIT + shift) |
+                       bit_mask(ADT1_ERR_BIT + shift) |
+                       bit_mask(ADT1_RDY_BIT + shift);
+               dim2_write_ctr_mask(ADT + ch_addr, mask, adt_w);
+       }
+
+       /* clear channel status bit */
+       DIMCB_IoWrite(&g.dim2->ACSR0, bit_mask(ch_addr));
+
+       return true;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* channel init routines */
+
+static void isoc_init(struct dim_channel *ch, u8 ch_addr, u16 packet_length)
+{
+       state_init(&ch->state);
+
+       ch->addr = ch_addr;
+
+       ch->packet_length = packet_length;
+       ch->bytes_per_frame = 0;
+       ch->done_sw_buffers_number = 0;
+}
+
+static void sync_init(struct dim_channel *ch, u8 ch_addr, u16 bytes_per_frame)
+{
+       state_init(&ch->state);
+
+       ch->addr = ch_addr;
+
+       ch->packet_length = 0;
+       ch->bytes_per_frame = bytes_per_frame;
+       ch->done_sw_buffers_number = 0;
+}
+
+static void channel_init(struct dim_channel *ch, u8 ch_addr)
+{
+       state_init(&ch->state);
+
+       ch->addr = ch_addr;
+
+       ch->packet_length = 0;
+       ch->bytes_per_frame = 0;
+       ch->done_sw_buffers_number = 0;
+}
+
+/* returns true if channel interrupt state is cleared */
+static bool channel_service_interrupt(struct dim_channel *ch)
+{
+       struct int_ch_state *const state = &ch->state;
+
+       if (!service_channel(ch->addr, state->idx2))
+               return false;
+
+       state->idx2 ^= 1;
+       state->request_counter++;
+       return true;
+}
+
+static bool channel_start(struct dim_channel *ch, u32 buf_addr, u16 buf_size)
+{
+       struct int_ch_state *const state = &ch->state;
+
+       if (buf_size <= 0)
+               return dim_on_error(DIM_ERR_BAD_BUFFER_SIZE, "Bad buffer size");
+
+       if (ch->packet_length == 0 && ch->bytes_per_frame == 0 &&
+           buf_size != norm_ctrl_async_buffer_size(buf_size))
+               return dim_on_error(DIM_ERR_BAD_BUFFER_SIZE,
+                                   "Bad control/async buffer size");
+
+       if (ch->packet_length &&
+           buf_size != norm_isoc_buffer_size(buf_size, ch->packet_length))
+               return dim_on_error(DIM_ERR_BAD_BUFFER_SIZE,
+                                   "Bad isochronous buffer size");
+
+       if (ch->bytes_per_frame &&
+           buf_size != norm_sync_buffer_size(buf_size, ch->bytes_per_frame))
+               return dim_on_error(DIM_ERR_BAD_BUFFER_SIZE,
+                                   "Bad synchronous buffer size");
+
+       if (state->level >= 2u)
+               return dim_on_error(DIM_ERR_OVERFLOW, "Channel overflow");
+
+       ++state->level;
+
+       if (ch->packet_length || ch->bytes_per_frame)
+               dim2_start_isoc_sync(ch->addr, state->idx1, buf_addr, buf_size);
+       else
+               dim2_start_ctrl_async(ch->addr, state->idx1, buf_addr, buf_size);
+       state->idx1 ^= 1;
+
+       return true;
+}
+
+static u8 channel_service(struct dim_channel *ch)
+{
+       struct int_ch_state *const state = &ch->state;
+
+       if (state->service_counter != state->request_counter) {
+               state->service_counter++;
+               if (state->level == 0)
+                       return DIM_ERR_UNDERFLOW;
+
+               --state->level;
+               ch->done_sw_buffers_number++;
+       }
+
+       return DIM_NO_ERROR;
+}
+
+static bool channel_detach_buffers(struct dim_channel *ch, u16 buffers_number)
+{
+       if (buffers_number > ch->done_sw_buffers_number)
+               return dim_on_error(DIM_ERR_UNDERFLOW, "Channel underflow");
+
+       ch->done_sw_buffers_number -= buffers_number;
+       return true;
+}
+
+
+/* -------------------------------------------------------------------------- */
+/* API */
+
+u8 DIM_Startup(void *dim_base_address, u32 mlb_clock)
+{
+       g.dim_is_initialized = false;
+
+       if (!dim_base_address)
+               return DIM_INIT_ERR_DIM_ADDR;
+
+       /* MediaLB clock: 0 - 256 fs, 1 - 512 fs, 2 - 1024 fs, 3 - 2048 fs */
+       /* MediaLB clock: 4 - 3072 fs, 5 - 4096 fs, 6 - 6144 fs, 7 - 8192 fs */
+       if (mlb_clock >= 8)
+               return DIM_INIT_ERR_MLB_CLOCK;
+
+       g.dim2 = dim_base_address;
+       g.dbr_map[0] = g.dbr_map[1] = 0;
+
+       dim2_initialize(mlb_clock >= 3, mlb_clock);
+
+       g.dim_is_initialized = true;
+
+       return DIM_NO_ERROR;
+}
+
+void DIM_Shutdown(void)
+{
+       g.dim_is_initialized = false;
+       dim2_cleanup();
+}
+
+bool DIM_GetLockState(void)
+{
+       return dim2_is_mlb_locked();
+}
+
+static u8 init_ctrl_async(struct dim_channel *ch, u8 type, u8 is_tx,
+                         u16 ch_address, u16 hw_buffer_size)
+{
+       if (!g.dim_is_initialized || !ch)
+               return DIM_ERR_DRIVER_NOT_INITIALIZED;
+
+       if (!check_channel_address(ch_address))
+               return DIM_INIT_ERR_CHANNEL_ADDRESS;
+
+       ch->dbr_size = hw_buffer_size;
+       ch->dbr_addr = alloc_dbr(ch->dbr_size);
+       if (ch->dbr_addr >= DBR_SIZE)
+               return DIM_INIT_ERR_OUT_OF_MEMORY;
+
+       channel_init(ch, ch_address / 2);
+
+       dim2_configure_channel(ch->addr, type, is_tx,
+                              ch->dbr_addr, ch->dbr_size, 0, false);
+
+       return DIM_NO_ERROR;
+}
+
+u16 DIM_NormCtrlAsyncBufferSize(u16 buf_size)
+{
+       return norm_ctrl_async_buffer_size(buf_size);
+}
+
+/**
+ * Retrieves maximal possible correct buffer size for isochronous data type
+ * conform to given packet length and not bigger than given buffer size.
+ *
+ * Returns non-zero correct buffer size or zero by error.
+ */
+u16 DIM_NormIsocBufferSize(u16 buf_size, u16 packet_length)
+{
+       if (!check_packet_length(packet_length))
+               return 0;
+
+       return norm_isoc_buffer_size(buf_size, packet_length);
+}
+
+/**
+ * Retrieves maximal possible correct buffer size for synchronous data type
+ * conform to given bytes per frame and not bigger than given buffer size.
+ *
+ * Returns non-zero correct buffer size or zero by error.
+ */
+u16 DIM_NormSyncBufferSize(u16 buf_size, u16 bytes_per_frame)
+{
+       if (!check_bytes_per_frame(bytes_per_frame))
+               return 0;
+
+       return norm_sync_buffer_size(buf_size, bytes_per_frame);
+}
+
+u8 DIM_InitControl(struct dim_channel *ch, u8 is_tx, u16 ch_address,
+                  u16 max_buffer_size)
+{
+       return init_ctrl_async(ch, CAT_CT_VAL_CONTROL, is_tx, ch_address,
+                              max_buffer_size * 2);
+}
+
+u8 DIM_InitAsync(struct dim_channel *ch, u8 is_tx, u16 ch_address,
+                u16 max_buffer_size)
+{
+       return init_ctrl_async(ch, CAT_CT_VAL_ASYNC, is_tx, ch_address,
+                              max_buffer_size * 2);
+}
+
+u8 DIM_InitIsoc(struct dim_channel *ch, u8 is_tx, u16 ch_address,
+               u16 packet_length)
+{
+       if (!g.dim_is_initialized || !ch)
+               return DIM_ERR_DRIVER_NOT_INITIALIZED;
+
+       if (!check_channel_address(ch_address))
+               return DIM_INIT_ERR_CHANNEL_ADDRESS;
+
+       if (!check_packet_length(packet_length))
+               return DIM_ERR_BAD_CONFIG;
+
+       ch->dbr_size = packet_length * ISOC_DBR_FACTOR;
+       ch->dbr_addr = alloc_dbr(ch->dbr_size);
+       if (ch->dbr_addr >= DBR_SIZE)
+               return DIM_INIT_ERR_OUT_OF_MEMORY;
+
+       isoc_init(ch, ch_address / 2, packet_length);
+
+       dim2_configure_channel(ch->addr, CAT_CT_VAL_ISOC, is_tx, ch->dbr_addr,
+                              ch->dbr_size, packet_length, false);
+
+       return DIM_NO_ERROR;
+}
+
+u8 DIM_InitSync(struct dim_channel *ch, u8 is_tx, u16 ch_address,
+               u16 bytes_per_frame)
+{
+       if (!g.dim_is_initialized || !ch)
+               return DIM_ERR_DRIVER_NOT_INITIALIZED;
+
+       if (!check_channel_address(ch_address))
+               return DIM_INIT_ERR_CHANNEL_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_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_configure_channel(ch->addr, CAT_CT_VAL_SYNC, is_tx,
+                              ch->dbr_addr, ch->dbr_size, 0, true);
+
+       return DIM_NO_ERROR;
+}
+
+u8 DIM_DestroyChannel(struct dim_channel *ch)
+{
+       if (!g.dim_is_initialized || !ch)
+               return DIM_ERR_DRIVER_NOT_INITIALIZED;
+
+       dim2_clear_channel(ch->addr);
+       if (ch->dbr_addr < DBR_SIZE)
+               free_dbr(ch->dbr_addr, ch->dbr_size);
+       ch->dbr_addr = DBR_SIZE;
+
+       return DIM_NO_ERROR;
+}
+
+void DIM_ServiceIrq(struct dim_channel *const *channels)
+{
+       bool state_changed;
+
+       if (!g.dim_is_initialized) {
+               dim_on_error(DIM_ERR_DRIVER_NOT_INITIALIZED,
+                            "DIM is not initialized");
+               return;
+       }
+
+       if (!channels) {
+               dim_on_error(DIM_ERR_DRIVER_NOT_INITIALIZED, "Bad channels");
+               return;
+       }
+
+       /*
+        * Use while-loop and a flag to make sure the age is changed back at least once,
+        * otherwise the interrupt may never come if CPU generates interrupt on changing age.
+        *
+        * This cycle runs not more than number of channels, because service_interrupts
+        * routine doesn't start the channel again.
+        */
+       do {
+               struct dim_channel *const *ch = channels;
+
+               state_changed = false;
+
+               while (*ch) {
+                       state_changed |= channel_service_interrupt(*ch);
+                       ++ch;
+               }
+       } while (state_changed);
+
+       /* clear pending Interrupts */
+       DIMCB_IoWrite(&g.dim2->MS0, 0);
+       DIMCB_IoWrite(&g.dim2->MS1, 0);
+}
+
+u8 DIM_ServiceChannel(struct dim_channel *ch)
+{
+       if (!g.dim_is_initialized || !ch)
+               return DIM_ERR_DRIVER_NOT_INITIALIZED;
+
+       return channel_service(ch);
+}
+
+struct dim_ch_state_t *DIM_GetChannelState(struct dim_channel *ch,
+               struct dim_ch_state_t *state_ptr)
+{
+       if (!ch || !state_ptr)
+               return 0;
+
+       state_ptr->ready = ch->state.level < 2;
+       state_ptr->done_buffers = ch->done_sw_buffers_number;
+
+       return state_ptr;
+}
+
+bool DIM_EnqueueBuffer(struct dim_channel *ch, u32 buffer_addr, u16 buffer_size)
+{
+       if (!ch)
+               return dim_on_error(DIM_ERR_DRIVER_NOT_INITIALIZED, "Bad channel");
+
+       return channel_start(ch, buffer_addr, buffer_size);
+}
+
+bool DIM_DetachBuffers(struct dim_channel *ch, u16 buffers_number)
+{
+       if (!ch)
+               return dim_on_error(DIM_ERR_DRIVER_NOT_INITIALIZED, "Bad channel");
+
+       return channel_detach_buffers(ch, buffers_number);
+}
+
+u32 DIM_ReadRegister(u8 register_index)
+{
+       return DIMCB_IoRead((u32 *)g.dim2 + register_index);
+}
diff --git a/drivers/staging/most/hdm-dim2/dim2_hal.h b/drivers/staging/most/hdm-dim2/dim2_hal.h
new file mode 100644 (file)
index 0000000..d88b5a0
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ * dim2_hal.h - DIM2 HAL interface
+ * (MediaLB, Device Interface Macro IP, OS62420)
+ *
+ * Copyright (C) 2015, Microchip Technology Germany II GmbH & Co. KG
+ *
+ * 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 file is licensed under GPLv2.
+ */
+
+#ifndef _DIM2_HAL_H
+#define _DIM2_HAL_H
+
+#include <linux/types.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The values below are specified in the hardware specification.
+ * So, they should not be changed until the hardware specification changes.
+ */
+enum mlb_clk_speed {
+       CLK_256FS = 0,
+       CLK_512FS = 1,
+       CLK_1024FS = 2,
+       CLK_2048FS = 3,
+       CLK_3072FS = 4,
+       CLK_4096FS = 5,
+       CLK_6144FS = 6,
+       CLK_8192FS = 7,
+};
+
+struct dim_ch_state_t {
+       bool ready; /* Shows readiness to enqueue next buffer */
+       u16 done_buffers; /* Number of completed buffers */
+};
+
+typedef int atomic_counter_t;
+
+struct int_ch_state {
+       /* changed only in interrupt context */
+       volatile atomic_counter_t request_counter;
+
+       /* changed only in task context */
+       volatile atomic_counter_t service_counter;
+
+       u8 idx1;
+       u8 idx2;
+       u8 level; /* [0..2], buffering level */
+};
+
+struct dim_channel {
+       struct int_ch_state state;
+       u8 addr;
+       u16 dbr_addr;
+       u16 dbr_size;
+       u16 packet_length; /*< Isochronous packet length in bytes. */
+       u16 bytes_per_frame; /*< Synchronous bytes per frame. */
+       u16 done_sw_buffers_number; /*< Done software buffers number. */
+};
+
+
+u8 DIM_Startup(void *dim_base_address, u32 mlb_clock);
+
+void DIM_Shutdown(void);
+
+bool DIM_GetLockState(void);
+
+u16 DIM_NormCtrlAsyncBufferSize(u16 buf_size);
+
+u16 DIM_NormIsocBufferSize(u16 buf_size, u16 packet_length);
+
+u16 DIM_NormSyncBufferSize(u16 buf_size, u16 bytes_per_frame);
+
+u8 DIM_InitControl(struct dim_channel *ch, u8 is_tx, u16 ch_address,
+                  u16 max_buffer_size);
+
+u8 DIM_InitAsync(struct dim_channel *ch, u8 is_tx, u16 ch_address,
+                u16 max_buffer_size);
+
+u8 DIM_InitIsoc(struct dim_channel *ch, u8 is_tx, u16 ch_address,
+               u16 packet_length);
+
+u8 DIM_InitSync(struct dim_channel *ch, u8 is_tx, u16 ch_address,
+               u16 bytes_per_frame);
+
+u8 DIM_DestroyChannel(struct dim_channel *ch);
+
+void DIM_ServiceIrq(struct dim_channel *const *channels);
+
+u8 DIM_ServiceChannel(struct dim_channel *ch);
+
+struct dim_ch_state_t *DIM_GetChannelState(struct dim_channel *ch,
+               struct dim_ch_state_t *dim_ch_state_ptr);
+
+bool DIM_EnqueueBuffer(struct dim_channel *ch, u32 buffer_addr,
+                      u16 buffer_size);
+
+bool DIM_DetachBuffers(struct dim_channel *ch, u16 buffers_number);
+
+u32 DIM_ReadRegister(u8 register_index);
+
+
+extern u32 DIMCB_IoRead(u32 *ptr32);
+
+extern void DIMCB_IoWrite(u32 *ptr32, u32 value);
+
+extern void DIMCB_OnError(u8 error_id, const char *error_message);
+
+extern void DIMCB_OnFail(const char *filename, int linenum);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DIM2_HAL_H */
diff --git a/drivers/staging/most/hdm-dim2/dim2_hdm.c b/drivers/staging/most/hdm-dim2/dim2_hdm.c
new file mode 100644 (file)
index 0000000..6a5a3a2
--- /dev/null
@@ -0,0 +1,964 @@
+/*
+ * dim2_hdm.c - MediaLB DIM2 Hardware Dependent Module
+ *
+ * Copyright (C) 2015, Microchip Technology Germany II GmbH & Co. KG
+ *
+ * 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 file is licensed under GPLv2.
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/module.h>
+#include <linux/printk.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/interrupt.h>
+#include <linux/slab.h>
+#include <linux/io.h>
+#include <linux/dma-mapping.h>
+#include <linux/sched.h>
+#include <linux/kthread.h>
+
+#include <mostcore.h>
+#include <networking.h>
+#include "dim2_hal.h"
+#include "dim2_hdm.h"
+#include "dim2_errors.h"
+#include "dim2_sysfs.h"
+
+#define DMA_CHANNELS (32 - 1)  /* channel 0 is a system channel */
+
+#define MAX_BUFFERS_PACKET      32
+#define MAX_BUFFERS_STREAMING   32
+#define MAX_BUF_SIZE_PACKET     2048
+#define MAX_BUF_SIZE_STREAMING  (8*1024)
+
+/* command line parameter to select clock speed */
+static char *clock_speed;
+module_param(clock_speed, charp, 0);
+MODULE_PARM_DESC(clock_speed, "MediaLB Clock Speed");
+
+/*
+ * #############################################################################
+ *
+ * The define below activates an utility function used by HAL-simu
+ * for calling DIM interrupt handler.
+ * It is used only for TEST PURPOSE and shall be commented before release.
+ *
+ * #############################################################################
+ */
+/* #define ENABLE_HDM_TEST */
+
+static DEFINE_SPINLOCK(dim_lock);
+
+static void dim2_tasklet_fn(unsigned long data);
+static DECLARE_TASKLET(dim2_tasklet, dim2_tasklet_fn, 0);
+
+/**
+ * struct hdm_channel - private structure to keep channel specific data
+ * @is_initialized: identifier to know whether the channel is initialized
+ * @ch: HAL specific channel data
+ * @pending_list: list to keep MBO's before starting transfer
+ * @started_list: list to keep MBO's after starting transfer
+ * @direction: channel direction (TX or RX)
+ * @data_type: channel data type
+ */
+struct hdm_channel {
+       char name[sizeof "caNNN"];
+       bool is_initialized;
+       struct dim_channel ch;
+       struct list_head pending_list;  /* before DIM_EnqueueBuffer() */
+       struct list_head started_list;  /* after DIM_EnqueueBuffer() */
+       enum most_channel_direction direction;
+       enum most_channel_data_type data_type;
+};
+
+/**
+ * struct dim2_hdm - private structure to keep interface specific data
+ * @hch: an array of channel specific data
+ * @most_iface: most interface structure
+ * @capabilities: an array of channel capability data
+ * @io_base: I/O register base address
+ * @irq_ahb0: dim2 AHB0 irq number
+ * @clk_speed: user selectable (through command line parameter) clock speed
+ * @netinfo_task: thread to deliver network status
+ * @netinfo_waitq: waitq for the thread to sleep
+ * @deliver_netinfo: to identify whether network status received
+ * @mac_addrs: INIC mac address
+ * @link_state: network link state
+ * @atx_idx: index of async tx channel
+ */
+struct dim2_hdm {
+       struct hdm_channel hch[DMA_CHANNELS];
+       struct most_channel_capability capabilities[DMA_CHANNELS];
+       struct most_interface most_iface;
+       char name[16 + sizeof "dim2-"];
+       void *io_base;
+       unsigned int irq_ahb0;
+       int clk_speed;
+       struct task_struct *netinfo_task;
+       wait_queue_head_t netinfo_waitq;
+       int deliver_netinfo;
+       unsigned char mac_addrs[6];
+       unsigned char link_state;
+       int atx_idx;
+       struct medialb_bus bus;
+};
+
+#define iface_to_hdm(iface) container_of(iface, struct dim2_hdm, most_iface)
+
+/* Macro to identify a network status message */
+#define PACKET_IS_NET_INFO(p)  \
+       (((p)[1] == 0x18) && ((p)[2] == 0x05) && ((p)[3] == 0x0C) && \
+        ((p)[13] == 0x3C) && ((p)[14] == 0x00) && ((p)[15] == 0x0A))
+
+#if defined(ENABLE_HDM_TEST)
+static struct dim2_hdm *test_dev;
+#endif
+
+bool dim2_sysfs_get_state_cb(void)
+{
+       bool state;
+       unsigned long flags;
+
+       spin_lock_irqsave(&dim_lock, flags);
+       state = DIM_GetLockState();
+       spin_unlock_irqrestore(&dim_lock, flags);
+
+       return state;
+}
+
+/**
+ * DIMCB_IoRead - callback from HAL to read an I/O register
+ * @ptr32: register address
+ */
+u32 DIMCB_IoRead(u32 *ptr32)
+{
+       return __raw_readl(ptr32);
+}
+
+/**
+ * DIMCB_IoWrite - callback from HAL to write value to an I/O register
+ * @ptr32: register address
+ * @value: value to write
+ */
+void DIMCB_IoWrite(u32 *ptr32, u32 value)
+{
+       __raw_writel(value, ptr32);
+}
+
+/**
+ * DIMCB_OnError - callback from HAL to report miscommunication between
+ * HDM and HAL
+ * @error_id: Error ID
+ * @error_message: Error message. Some text in a free format
+ */
+void DIMCB_OnError(u8 error_id, const char *error_message)
+{
+       pr_err("DIMCB_OnError: error_id - %d, error_message - %s\n", error_id,
+              error_message);
+}
+
+/**
+ * DIMCB_OnFail - callback from HAL to report unrecoverable errors
+ * @filename: Source file where the error happened
+ * @linenum: Line number of the file where the error happened
+ */
+void DIMCB_OnFail(const char *filename, int linenum)
+{
+       pr_err("DIMCB_OnFail: file - %s, line no. - %d\n", filename, linenum);
+}
+
+/**
+ * startup_dim - initialize the dim2 interface
+ * @pdev: platform device
+ *
+ * Get the value of command line parameter "clock_speed" if given or use the
+ * default value, enable the clock and PLL, and initialize the dim2 interface.
+ */
+static int startup_dim(struct platform_device *pdev)
+{
+       struct dim2_hdm *dev = platform_get_drvdata(pdev);
+       struct dim2_platform_data *pdata = pdev->dev.platform_data;
+       u8 hal_ret;
+
+       dev->clk_speed = -1;
+
+       if (clock_speed) {
+               if (!strcmp(clock_speed, "256fs"))
+                       dev->clk_speed = CLK_256FS;
+               else if (!strcmp(clock_speed, "512fs"))
+                       dev->clk_speed = CLK_512FS;
+               else if (!strcmp(clock_speed, "1024fs"))
+                       dev->clk_speed = CLK_1024FS;
+               else if (!strcmp(clock_speed, "2048fs"))
+                       dev->clk_speed = CLK_2048FS;
+               else if (!strcmp(clock_speed, "3072fs"))
+                       dev->clk_speed = CLK_3072FS;
+               else if (!strcmp(clock_speed, "4096fs"))
+                       dev->clk_speed = CLK_4096FS;
+               else if (!strcmp(clock_speed, "6144fs"))
+                       dev->clk_speed = CLK_6144FS;
+               else if (!strcmp(clock_speed, "8192fs"))
+                       dev->clk_speed = CLK_8192FS;
+       }
+
+       if (dev->clk_speed == -1) {
+               pr_info("Bad or missing clock speed parameter,"
+                       " using default value: 3072fs\n");
+               dev->clk_speed = CLK_3072FS;
+       } else
+               pr_info("Selected clock speed: %s\n", clock_speed);
+
+       if (pdata && pdata->init) {
+               int ret = pdata->init(pdata, dev->io_base, dev->clk_speed);
+
+               if (ret)
+                       return ret;
+       }
+
+       hal_ret = DIM_Startup(dev->io_base, dev->clk_speed);
+       if (hal_ret != DIM_NO_ERROR) {
+               pr_err("DIM_Startup failed: %d\n", hal_ret);
+               if (pdata && pdata->destroy)
+                       pdata->destroy(pdata);
+               return -ENODEV;
+       }
+
+       return 0;
+}
+
+/**
+ * try_start_dim_transfer - try to transfer a buffer on a channel
+ * @hdm_ch: channel specific data
+ *
+ * Transfer a buffer from pending_list if the channel is ready
+ */
+static int try_start_dim_transfer(struct hdm_channel *hdm_ch)
+{
+       u16 buf_size;
+       struct list_head *head = &hdm_ch->pending_list;
+       struct mbo *mbo;
+       unsigned long flags;
+       struct dim_ch_state_t st;
+
+       BUG_ON(hdm_ch == 0);
+       BUG_ON(!hdm_ch->is_initialized);
+
+       spin_lock_irqsave(&dim_lock, flags);
+       if (list_empty(head)) {
+               spin_unlock_irqrestore(&dim_lock, flags);
+               return -EAGAIN;
+       }
+
+       if (!DIM_GetChannelState(&hdm_ch->ch, &st)->ready) {
+               spin_unlock_irqrestore(&dim_lock, flags);
+               return -EAGAIN;
+       }
+
+       mbo = list_entry(head->next, struct mbo, list);
+       buf_size = mbo->buffer_length;
+
+       BUG_ON(mbo->bus_address == 0);
+       if (!DIM_EnqueueBuffer(&hdm_ch->ch, mbo->bus_address, buf_size)) {
+               list_del(head->next);
+               spin_unlock_irqrestore(&dim_lock, flags);
+               mbo->processed_length = 0;
+               mbo->status = MBO_E_INVAL;
+               mbo->complete(mbo);
+               return -EFAULT;
+       }
+
+       list_move_tail(head->next, &hdm_ch->started_list);
+       spin_unlock_irqrestore(&dim_lock, flags);
+
+       return 0;
+}
+
+/**
+ * deliver_netinfo_thread - thread to deliver network status to mostcore
+ * @data: private data
+ *
+ * Wait for network status and deliver it to mostcore once it is received
+ */
+static int deliver_netinfo_thread(void *data)
+{
+       struct dim2_hdm *dev = (struct dim2_hdm *)data;
+
+       while (!kthread_should_stop()) {
+               wait_event_interruptible(dev->netinfo_waitq,
+                                        dev->deliver_netinfo ||
+                                        kthread_should_stop());
+
+               if (dev->deliver_netinfo) {
+                       dev->deliver_netinfo--;
+                       most_deliver_netinfo(&dev->most_iface, dev->link_state,
+                                            dev->mac_addrs);
+               }
+       }
+
+       return 0;
+}
+
+/**
+ * retrieve_netinfo - retrieve network status from received buffer
+ * @dev: private data
+ * @mbo: received MBO
+ *
+ * Parse the message in buffer and get node address, link state, MAC address.
+ * Wake up a thread to deliver this status to mostcore
+ */
+static void retrieve_netinfo(struct dim2_hdm *dev, struct mbo *mbo)
+{
+       u8 *data = mbo->virt_address;
+       u8 *mac = dev->mac_addrs;
+
+       pr_info("Node Address: 0x%03x\n", (u16)data[16] << 8 | data[17]);
+       dev->link_state = data[18];
+       pr_info("NIState: %d\n", dev->link_state);
+       memcpy(mac, data + 19, 6);
+       pr_info("MAC address: %02X:%02X:%02X:%02X:%02X:%02X\n",
+               mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
+       dev->deliver_netinfo++;
+       wake_up_interruptible(&dev->netinfo_waitq);
+}
+
+/**
+ * service_done_flag - handle completed buffers
+ * @dev: private data
+ * @ch_idx: channel index
+ *
+ * Return back the completed buffers to mostcore, using completion callback
+ */
+static void service_done_flag(struct dim2_hdm *dev, int ch_idx)
+{
+       struct hdm_channel *hdm_ch = dev->hch + ch_idx;
+       struct dim_ch_state_t st;
+       struct list_head *head;
+       struct mbo *mbo;
+       int done_buffers;
+       unsigned long flags;
+       u8 *data;
+
+       BUG_ON(hdm_ch == 0);
+       BUG_ON(!hdm_ch->is_initialized);
+
+       spin_lock_irqsave(&dim_lock, flags);
+
+       done_buffers = DIM_GetChannelState(&hdm_ch->ch, &st)->done_buffers;
+       if (!done_buffers) {
+               spin_unlock_irqrestore(&dim_lock, flags);
+               return;
+       }
+
+       if (!DIM_DetachBuffers(&hdm_ch->ch, done_buffers)) {
+               spin_unlock_irqrestore(&dim_lock, flags);
+               return;
+       }
+       spin_unlock_irqrestore(&dim_lock, flags);
+
+       head = &hdm_ch->started_list;
+
+       while (done_buffers) {
+               spin_lock_irqsave(&dim_lock, flags);
+               if (list_empty(head)) {
+                       spin_unlock_irqrestore(&dim_lock, flags);
+                       pr_crit("hard error: started_mbo list is empty "
+                               "whereas DIM2 has sent buffers\n");
+                       break;
+               }
+
+               mbo = list_entry(head->next, struct mbo, list);
+               list_del(head->next);
+               spin_unlock_irqrestore(&dim_lock, flags);
+
+               data = mbo->virt_address;
+
+               if (hdm_ch->data_type == MOST_CH_ASYNC &&
+                   hdm_ch->direction == MOST_CH_RX &&
+                   PACKET_IS_NET_INFO(data)) {
+
+                       retrieve_netinfo(dev, mbo);
+
+                       spin_lock_irqsave(&dim_lock, flags);
+                       list_add_tail(&mbo->list, &hdm_ch->pending_list);
+                       spin_unlock_irqrestore(&dim_lock, flags);
+               } else {
+                       if (hdm_ch->data_type == MOST_CH_CONTROL ||
+                           hdm_ch->data_type == MOST_CH_ASYNC) {
+
+                               u32 const data_size =
+                                       (u32)data[0] * 256 + data[1] + 2;
+
+                               mbo->processed_length =
+                                       min(data_size, (u32)mbo->buffer_length);
+                       } else {
+                               mbo->processed_length = mbo->buffer_length;
+                       }
+                       mbo->status = MBO_SUCCESS;
+                       mbo->complete(mbo);
+               }
+
+               done_buffers--;
+       }
+}
+
+static struct dim_channel **get_active_channels(struct dim2_hdm *dev,
+               struct dim_channel **buffer)
+{
+       int idx = 0;
+       int ch_idx;
+
+       for (ch_idx = 0; ch_idx < DMA_CHANNELS; ch_idx++) {
+               if (dev->hch[ch_idx].is_initialized)
+                       buffer[idx++] = &dev->hch[ch_idx].ch;
+       }
+       buffer[idx++] = 0;
+
+       return buffer;
+}
+
+/**
+ * dim2_tasklet_fn - tasklet function
+ * @data: private data
+ *
+ * Service each initialized channel, if needed
+ */
+static void dim2_tasklet_fn(unsigned long data)
+{
+       struct dim2_hdm *dev = (struct dim2_hdm *)data;
+       unsigned long flags;
+       int ch_idx;
+
+       for (ch_idx = 0; ch_idx < DMA_CHANNELS; ch_idx++) {
+               if (!dev->hch[ch_idx].is_initialized)
+                       continue;
+
+               spin_lock_irqsave(&dim_lock, flags);
+               DIM_ServiceChannel(&(dev->hch[ch_idx].ch));
+               spin_unlock_irqrestore(&dim_lock, flags);
+
+               service_done_flag(dev, ch_idx);
+               while (!try_start_dim_transfer(dev->hch + ch_idx))
+                       continue;
+       }
+}
+
+/**
+ * dim2_ahb_isr - interrupt service routine
+ * @irq: irq number
+ * @_dev: private data
+ *
+ * Acknowledge the interrupt and schedule a tasklet to service channels.
+ * Return IRQ_HANDLED.
+ */
+static irqreturn_t dim2_ahb_isr(int irq, void *_dev)
+{
+       struct dim2_hdm *dev = (struct dim2_hdm *)_dev;
+       struct dim_channel *buffer[DMA_CHANNELS + 1];
+       unsigned long flags;
+
+       spin_lock_irqsave(&dim_lock, flags);
+       DIM_ServiceIrq(get_active_channels(dev, buffer));
+       spin_unlock_irqrestore(&dim_lock, flags);
+
+#if !defined(ENABLE_HDM_TEST)
+       dim2_tasklet.data = (unsigned long)dev;
+       tasklet_schedule(&dim2_tasklet);
+#else
+       dim2_tasklet_fn((unsigned long)dev);
+#endif
+       return IRQ_HANDLED;
+}
+
+#if defined(ENABLE_HDM_TEST)
+
+/*
+ * Utility function used by HAL-simu for calling DIM interrupt handler.
+ * It is used only for TEST PURPOSE.
+ */
+void raise_dim_interrupt(void)
+{
+       (void)dim2_ahb_isr(0, test_dev);
+}
+#endif
+
+/**
+ * complete_all_mbos - complete MBO's in a list
+ * @head: list head
+ *
+ * Delete all the entries in list and return back MBO's to mostcore using
+ * completion call back.
+ */
+static void complete_all_mbos(struct list_head *head)
+{
+       unsigned long flags;
+       struct mbo *mbo;
+
+       for (;;) {
+               spin_lock_irqsave(&dim_lock, flags);
+               if (list_empty(head)) {
+                       spin_unlock_irqrestore(&dim_lock, flags);
+                       break;
+               }
+
+               mbo = list_entry(head->next, struct mbo, list);
+               list_del(head->next);
+               spin_unlock_irqrestore(&dim_lock, flags);
+
+               mbo->processed_length = 0;
+               mbo->status = MBO_E_CLOSE;
+               mbo->complete(mbo);
+       }
+}
+
+/**
+ * configure_channel - initialize a channel
+ * @iface: interface the channel belongs to
+ * @channel: channel to be configured
+ * @channel_config: structure that holds the configuration information
+ *
+ * Receives configuration information from mostcore and initialize
+ * the corresponding channel. Return 0 on success, negative on failure.
+ */
+static int configure_channel(struct most_interface *most_iface, int ch_idx,
+                            struct most_channel_config *ccfg)
+{
+       struct dim2_hdm *dev = iface_to_hdm(most_iface);
+       bool const is_tx = ccfg->direction == MOST_CH_TX;
+       u16 const sub_size = ccfg->subbuffer_size;
+       u16 const buf_size = ccfg->buffer_size;
+       u16 new_size;
+       unsigned long flags;
+       u8 hal_ret;
+       int const ch_addr = ch_idx * 2 + 2;
+       struct hdm_channel *const hdm_ch = dev->hch + ch_idx;
+
+       BUG_ON(ch_idx < 0 || ch_idx >= DMA_CHANNELS);
+
+       if (hdm_ch->is_initialized)
+               return -EPERM;
+
+       switch (ccfg->data_type) {
+       case MOST_CH_CONTROL:
+               new_size = DIM_NormCtrlAsyncBufferSize(buf_size);
+               if (new_size == 0) {
+                       pr_err("%s: too small buffer size\n", hdm_ch->name);
+                       return -EINVAL;
+               }
+               ccfg->buffer_size = new_size;
+               if (new_size != buf_size)
+                       pr_warn("%s: fixed buffer size (%d -> %d)\n",
+                               hdm_ch->name, buf_size, new_size);
+               spin_lock_irqsave(&dim_lock, flags);
+               hal_ret = DIM_InitControl(&hdm_ch->ch, is_tx, ch_addr, buf_size);
+               break;
+       case MOST_CH_ASYNC:
+               new_size = DIM_NormCtrlAsyncBufferSize(buf_size);
+               if (new_size == 0) {
+                       pr_err("%s: too small buffer size\n", hdm_ch->name);
+                       return -EINVAL;
+               }
+               ccfg->buffer_size = new_size;
+               if (new_size != buf_size)
+                       pr_warn("%s: fixed buffer size (%d -> %d)\n",
+                               hdm_ch->name, buf_size, new_size);
+               spin_lock_irqsave(&dim_lock, flags);
+               hal_ret = DIM_InitAsync(&hdm_ch->ch, is_tx, ch_addr, buf_size);
+               break;
+       case MOST_CH_ISOC_AVP:
+               new_size = DIM_NormIsocBufferSize(buf_size, sub_size);
+               if (new_size == 0) {
+                       pr_err("%s: invalid sub-buffer size or "
+                              "too small buffer size\n", hdm_ch->name);
+                       return -EINVAL;
+               }
+               ccfg->buffer_size = new_size;
+               if (new_size != buf_size)
+                       pr_warn("%s: fixed buffer size (%d -> %d)\n",
+                               hdm_ch->name, buf_size, new_size);
+               spin_lock_irqsave(&dim_lock, flags);
+               hal_ret = DIM_InitIsoc(&hdm_ch->ch, is_tx, ch_addr, sub_size);
+               break;
+       case MOST_CH_SYNC:
+               new_size = DIM_NormSyncBufferSize(buf_size, sub_size);
+               if (new_size == 0) {
+                       pr_err("%s: invalid sub-buffer size or "
+                              "too small buffer size\n", hdm_ch->name);
+                       return -EINVAL;
+               }
+               ccfg->buffer_size = new_size;
+               if (new_size != buf_size)
+                       pr_warn("%s: fixed buffer size (%d -> %d)\n",
+                               hdm_ch->name, buf_size, new_size);
+               spin_lock_irqsave(&dim_lock, flags);
+               hal_ret = DIM_InitSync(&hdm_ch->ch, is_tx, ch_addr, sub_size);
+               break;
+       default:
+               pr_err("%s: configure failed, bad channel type: %d\n",
+                      hdm_ch->name, ccfg->data_type);
+               return -EINVAL;
+       }
+
+       if (hal_ret != DIM_NO_ERROR) {
+               spin_unlock_irqrestore(&dim_lock, flags);
+               pr_err("%s: configure failed (%d), type: %d, is_tx: %d\n",
+                      hdm_ch->name, hal_ret, ccfg->data_type, (int)is_tx);
+               return -ENODEV;
+       }
+
+       hdm_ch->data_type = ccfg->data_type;
+       hdm_ch->direction = ccfg->direction;
+       hdm_ch->is_initialized = true;
+
+       if (hdm_ch->data_type == MOST_CH_ASYNC &&
+           hdm_ch->direction == MOST_CH_TX &&
+           dev->atx_idx < 0)
+               dev->atx_idx = ch_idx;
+
+       spin_unlock_irqrestore(&dim_lock, flags);
+
+       return 0;
+}
+
+/**
+ * enqueue - enqueue a buffer for data transfer
+ * @iface: intended interface
+ * @channel: ID of the channel the buffer is intended for
+ * @mbo: pointer to the buffer object
+ *
+ * Push the buffer into pending_list and try to transfer one buffer from
+ * pending_list. Return 0 on success, negative on failure.
+ */
+static int enqueue(struct most_interface *most_iface, int ch_idx,
+                  struct mbo *mbo)
+{
+       struct dim2_hdm *dev = iface_to_hdm(most_iface);
+       struct hdm_channel *hdm_ch = dev->hch + ch_idx;
+       unsigned long flags;
+
+       BUG_ON(ch_idx < 0 || ch_idx >= DMA_CHANNELS);
+
+       if (!hdm_ch->is_initialized)
+               return -EPERM;
+
+       if (mbo->bus_address == 0)
+               return -EFAULT;
+
+       spin_lock_irqsave(&dim_lock, flags);
+       list_add_tail(&mbo->list, &hdm_ch->pending_list);
+       spin_unlock_irqrestore(&dim_lock, flags);
+
+       (void)try_start_dim_transfer(hdm_ch);
+
+       return 0;
+}
+
+/**
+ * request_netinfo - triggers retrieving of network info
+ * @iface: pointer to the interface
+ * @channel_id: corresponding channel ID
+ *
+ * Send a command to INIC which triggers retrieving of network info by means of
+ * "Message exchange over MDP/MEP". Return 0 on success, negative on failure.
+ */
+static void request_netinfo(struct most_interface *most_iface, int ch_idx)
+{
+       struct dim2_hdm *dev = iface_to_hdm(most_iface);
+       struct mbo *mbo;
+       u8 *data;
+
+       if (dev->atx_idx < 0) {
+               pr_err("Async Tx Not initialized\n");
+               return;
+       }
+
+       mbo = most_get_mbo(&dev->most_iface, dev->atx_idx);
+       if (!mbo)
+               return;
+
+       mbo->buffer_length = 5;
+
+       data = mbo->virt_address;
+
+       data[0] = 0x00; /* PML High byte */
+       data[1] = 0x03; /* PML Low byte */
+       data[2] = 0x02; /* PMHL */
+       data[3] = 0x08; /* FPH */
+       data[4] = 0x40; /* FMF (FIFO cmd msg - Triggers NAOverMDP) */
+
+       most_submit_mbo(mbo);
+}
+
+/**
+ * poison_channel - poison buffers of a channel
+ * @iface: pointer to the interface the channel to be poisoned belongs to
+ * @channel_id: corresponding channel ID
+ *
+ * Destroy a channel and complete all the buffers in both started_list &
+ * pending_list. Return 0 on success, negative on failure.
+ */
+static int poison_channel(struct most_interface *most_iface, int ch_idx)
+{
+       struct dim2_hdm *dev = iface_to_hdm(most_iface);
+       struct hdm_channel *hdm_ch = dev->hch + ch_idx;
+       unsigned long flags;
+       u8 hal_ret;
+       int ret = 0;
+
+       BUG_ON(ch_idx < 0 || ch_idx >= DMA_CHANNELS);
+
+       if (!hdm_ch->is_initialized)
+               return -EPERM;
+
+       spin_lock_irqsave(&dim_lock, flags);
+       hal_ret = DIM_DestroyChannel(&hdm_ch->ch);
+       hdm_ch->is_initialized = false;
+       if (ch_idx == dev->atx_idx)
+               dev->atx_idx = -1;
+       spin_unlock_irqrestore(&dim_lock, flags);
+       if (hal_ret != DIM_NO_ERROR) {
+               pr_err("HAL Failed to close channel %s\n", hdm_ch->name);
+               ret = -EFAULT;
+       }
+
+       complete_all_mbos(&hdm_ch->started_list);
+       complete_all_mbos(&hdm_ch->pending_list);
+
+       return ret;
+}
+
+/*
+ * dim2_probe - dim2 probe handler
+ * @pdev: platform device structure
+ *
+ * Register the dim2 interface with mostcore and initialize it.
+ * Return 0 on success, negative on failure.
+ */
+static int dim2_probe(struct platform_device *pdev)
+{
+       struct dim2_hdm *dev;
+       struct resource *res;
+       int ret, i;
+       struct kobject *kobj;
+
+       dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+       if (!dev)
+               return -ENOMEM;
+
+       dev->atx_idx = -1;
+
+       platform_set_drvdata(pdev, dev);
+#if defined(ENABLE_HDM_TEST)
+       test_dev = dev;
+#else
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (!res) {
+               pr_err("no memory region defined\n");
+               ret = -ENOENT;
+               goto err_free_dev;
+       }
+
+       if (!request_mem_region(res->start, resource_size(res), pdev->name)) {
+               pr_err("failed to request mem region\n");
+               ret = -EBUSY;
+               goto err_free_dev;
+       }
+
+       dev->io_base = ioremap(res->start, resource_size(res));
+       if (!dev->io_base) {
+               pr_err("failed to ioremap\n");
+               ret = -ENOMEM;
+               goto err_release_mem;
+       }
+
+       ret = platform_get_irq(pdev, 0);
+       if (ret < 0) {
+               pr_err("failed to get irq\n");
+               goto err_unmap_io;
+       }
+       dev->irq_ahb0 = ret;
+
+       ret = request_irq(dev->irq_ahb0, dim2_ahb_isr, 0, "mlb_ahb0", dev);
+       if (ret) {
+               pr_err("failed to request IRQ: %d, err: %d\n", dev->irq_ahb0, ret);
+               goto err_unmap_io;
+       }
+#endif
+       init_waitqueue_head(&dev->netinfo_waitq);
+       dev->deliver_netinfo = 0;
+       dev->netinfo_task = kthread_run(&deliver_netinfo_thread, (void *)dev,
+                                       "dim2_netinfo");
+       if (IS_ERR(dev->netinfo_task)) {
+               ret = PTR_ERR(dev->netinfo_task);
+               goto err_free_irq;
+       }
+
+       for (i = 0; i < DMA_CHANNELS; i++) {
+               struct most_channel_capability *cap = dev->capabilities + i;
+               struct hdm_channel *hdm_ch = dev->hch + i;
+
+               INIT_LIST_HEAD(&hdm_ch->pending_list);
+               INIT_LIST_HEAD(&hdm_ch->started_list);
+               hdm_ch->is_initialized = false;
+               snprintf(hdm_ch->name, sizeof(hdm_ch->name), "ca%d", i * 2 + 2);
+
+               cap->name_suffix = hdm_ch->name;
+               cap->direction = MOST_CH_RX | MOST_CH_TX;
+               cap->data_type = MOST_CH_CONTROL | MOST_CH_ASYNC |
+                                MOST_CH_ISOC_AVP | MOST_CH_SYNC;
+               cap->num_buffers_packet = MAX_BUFFERS_PACKET;
+               cap->buffer_size_packet = MAX_BUF_SIZE_PACKET;
+               cap->num_buffers_streaming = MAX_BUFFERS_STREAMING;
+               cap->buffer_size_streaming = MAX_BUF_SIZE_STREAMING;
+       }
+
+       {
+               const char *fmt;
+
+               if (sizeof(res->start) == sizeof(long long))
+                       fmt = "dim2-%016llx";
+               else if (sizeof(res->start) == sizeof(long))
+                       fmt = "dim2-%016lx";
+               else
+                       fmt = "dim2-%016x";
+
+               snprintf(dev->name, sizeof(dev->name), fmt, res->start);
+       }
+
+       dev->most_iface.interface = ITYPE_MEDIALB_DIM2;
+       dev->most_iface.description = dev->name;
+       dev->most_iface.num_channels = DMA_CHANNELS;
+       dev->most_iface.channel_vector = dev->capabilities;
+       dev->most_iface.configure = configure_channel;
+       dev->most_iface.enqueue = enqueue;
+       dev->most_iface.poison_channel = poison_channel;
+       dev->most_iface.request_netinfo = request_netinfo;
+
+       kobj = most_register_interface(&dev->most_iface);
+       if (IS_ERR(kobj)) {
+               ret = PTR_ERR(kobj);
+               pr_err("failed to register MOST interface\n");
+               goto err_stop_thread;
+       }
+
+       ret = dim2_sysfs_probe(&dev->bus, kobj);
+       if (ret)
+               goto err_unreg_iface;
+
+       ret = startup_dim(pdev);
+       if (ret) {
+               pr_err("failed to initialize DIM2\n");
+               goto err_destroy_bus;
+       }
+
+       return 0;
+
+err_destroy_bus:
+       dim2_sysfs_destroy(&dev->bus);
+err_unreg_iface:
+       most_deregister_interface(&dev->most_iface);
+err_stop_thread:
+       kthread_stop(dev->netinfo_task);
+err_free_irq:
+#if !defined(ENABLE_HDM_TEST)
+       free_irq(dev->irq_ahb0, dev);
+err_unmap_io:
+       iounmap(dev->io_base);
+err_release_mem:
+       release_mem_region(res->start, resource_size(res));
+err_free_dev:
+#endif
+       kfree(dev);
+
+       return ret;
+}
+
+/**
+ * dim2_remove - dim2 remove handler
+ * @pdev: platform device structure
+ *
+ * Unregister the interface from mostcore
+ */
+static int dim2_remove(struct platform_device *pdev)
+{
+       struct dim2_hdm *dev = platform_get_drvdata(pdev);
+       struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       struct dim2_platform_data *pdata = pdev->dev.platform_data;
+       unsigned long flags;
+
+       spin_lock_irqsave(&dim_lock, flags);
+       DIM_Shutdown();
+       spin_unlock_irqrestore(&dim_lock, flags);
+
+       if (pdata && pdata->destroy)
+               pdata->destroy(pdata);
+
+       dim2_sysfs_destroy(&dev->bus);
+       most_deregister_interface(&dev->most_iface);
+       kthread_stop(dev->netinfo_task);
+#if !defined(ENABLE_HDM_TEST)
+       free_irq(dev->irq_ahb0, dev);
+       iounmap(dev->io_base);
+       release_mem_region(res->start, resource_size(res));
+#endif
+       kfree(dev);
+       platform_set_drvdata(pdev, NULL);
+
+       /*
+        * break link to local platform_device_id struct
+        * to prevent crash by unload platform device module
+        */
+       pdev->id_entry = 0;
+
+       return 0;
+}
+
+static struct platform_device_id dim2_id[] = {
+       { "medialb_dim2" },
+       { }, /* Terminating entry */
+};
+
+MODULE_DEVICE_TABLE(platform, dim2_id);
+
+static struct platform_driver dim2_driver = {
+       .probe = dim2_probe,
+       .remove = dim2_remove,
+       .id_table = dim2_id,
+       .driver = {
+               .name = "hdm_dim2",
+               .owner = THIS_MODULE,
+       },
+};
+
+/**
+ * dim2_hdm_init - Driver Registration Routine
+ */
+static int __init dim2_hdm_init(void)
+{
+       pr_info("dim2_hdm_init()\n");
+       return platform_driver_register(&dim2_driver);
+}
+
+/**
+ * dim2_hdm_exit - Driver Cleanup Routine
+ **/
+static void __exit dim2_hdm_exit(void)
+{
+       pr_info("dim2_hdm_exit()\n");
+       platform_driver_unregister(&dim2_driver);
+}
+
+module_init(dim2_hdm_init);
+module_exit(dim2_hdm_exit);
+
+MODULE_AUTHOR("Jain Roy Ambi <JainRoy.Ambi@microchip.com>");
+MODULE_AUTHOR("Andrey Shvetsov <andrey.shvetsov@k2l.de>");
+MODULE_DESCRIPTION("MediaLB DIM2 Hardware Dependent Module");
+MODULE_LICENSE("GPL");
diff --git a/drivers/staging/most/hdm-dim2/dim2_hdm.h b/drivers/staging/most/hdm-dim2/dim2_hdm.h
new file mode 100644 (file)
index 0000000..6e68832
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * dim2_hdm.h - MediaLB DIM2 HDM Header
+ *
+ * Copyright (C) 2015, Microchip Technology Germany II GmbH & Co. KG
+ *
+ * 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 file is licensed under GPLv2.
+ */
+
+#ifndef DIM2_HDM_H
+#define        DIM2_HDM_H
+
+struct device;
+
+/* platform dependent data for dim2 interface */
+struct dim2_platform_data {
+       int (*init)(struct dim2_platform_data *pd, void *io_base, int clk_speed);
+       void (*destroy)(struct dim2_platform_data *pd);
+       void *priv;
+};
+
+#endif /* DIM2_HDM_H */
diff --git a/drivers/staging/most/hdm-dim2/dim2_reg.h b/drivers/staging/most/hdm-dim2/dim2_reg.h
new file mode 100644 (file)
index 0000000..476f66f
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ * dim2_reg.h - Definitions for registers of DIM2
+ * (MediaLB, Device Interface Macro IP, OS62420)
+ *
+ * Copyright (C) 2015, Microchip Technology Germany II GmbH & Co. KG
+ *
+ * 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 file is licensed under GPLv2.
+ */
+
+#ifndef DIM2_OS62420_H
+#define        DIM2_OS62420_H
+
+#include <linux/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+struct dim2_regs {
+       /* 0x00 */ u32 MLBC0;
+       /* 0x01 */ u32 rsvd0[1];
+       /* 0x02 */ u32 MLBPC0;
+       /* 0x03 */ u32 MS0;
+       /* 0x04 */ u32 rsvd1[1];
+       /* 0x05 */ u32 MS1;
+       /* 0x06 */ u32 rsvd2[2];
+       /* 0x08 */ u32 MSS;
+       /* 0x09 */ u32 MSD;
+       /* 0x0A */ u32 rsvd3[1];
+       /* 0x0B */ u32 MIEN;
+       /* 0x0C */ u32 rsvd4[1];
+       /* 0x0D */ u32 MLBPC2;
+       /* 0x0E */ u32 MLBPC1;
+       /* 0x0F */ u32 MLBC1;
+       /* 0x10 */ u32 rsvd5[0x10];
+       /* 0x20 */ u32 HCTL;
+       /* 0x21 */ u32 rsvd6[1];
+       /* 0x22 */ u32 HCMR0;
+       /* 0x23 */ u32 HCMR1;
+       /* 0x24 */ u32 HCER0;
+       /* 0x25 */ u32 HCER1;
+       /* 0x26 */ u32 HCBR0;
+       /* 0x27 */ u32 HCBR1;
+       /* 0x28 */ u32 rsvd7[8];
+       /* 0x30 */ u32 MDAT0;
+       /* 0x31 */ u32 MDAT1;
+       /* 0x32 */ u32 MDAT2;
+       /* 0x33 */ u32 MDAT3;
+       /* 0x34 */ u32 MDWE0;
+       /* 0x35 */ u32 MDWE1;
+       /* 0x36 */ u32 MDWE2;
+       /* 0x37 */ u32 MDWE3;
+       /* 0x38 */ u32 MCTL;
+       /* 0x39 */ u32 MADR;
+       /* 0x3A */ u32 rsvd8[0xB6];
+       /* 0xF0 */ u32 ACTL;
+       /* 0xF1 */ u32 rsvd9[3];
+       /* 0xF4 */ u32 ACSR0;
+       /* 0xF5 */ u32 ACSR1;
+       /* 0xF6 */ u32 ACMR0;
+       /* 0xF7 */ u32 ACMR1;
+};
+
+
+#define DIM2_MASK(n)  (~((~(u32)0)<<(n)))
+
+enum {
+       MLBC0_MLBLK_BIT = 7,
+
+       MLBC0_MLBPEN_BIT = 5,
+
+       MLBC0_MLBCLK_SHIFT = 2,
+       MLBC0_MLBCLK_VAL_256FS = 0,
+       MLBC0_MLBCLK_VAL_512FS = 1,
+       MLBC0_MLBCLK_VAL_1024FS = 2,
+       MLBC0_MLBCLK_VAL_2048FS = 3,
+
+       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_MLBEN_BIT = 0,
+
+       MIEN_CTX_BREAK_BIT = 29,
+       MIEN_CTX_PE_BIT = 28,
+       MIEN_CTX_DONE_BIT = 27,
+
+       MIEN_CRX_BREAK_BIT = 26,
+       MIEN_CRX_PE_BIT = 25,
+       MIEN_CRX_DONE_BIT = 24,
+
+       MIEN_ATX_BREAK_BIT = 22,
+       MIEN_ATX_PE_BIT = 21,
+       MIEN_ATX_DONE_BIT = 20,
+
+       MIEN_ARX_BREAK_BIT = 19,
+       MIEN_ARX_PE_BIT = 18,
+       MIEN_ARX_DONE_BIT = 17,
+
+       MIEN_SYNC_PE_BIT = 16,
+
+       MIEN_ISOC_BUFO_BIT = 1,
+       MIEN_ISOC_PE_BIT = 0,
+
+       MLBC1_NDA_SHIFT = 8,
+       MLBC1_NDA_MASK = 0xFF,
+
+       MLBC1_CLKMERR_BIT = 7,
+       MLBC1_LOCKERR_BIT = 6,
+
+       ACTL_DMA_MODE_BIT = 2,
+       ACTL_DMA_MODE_VAL_DMA_MODE_0 = 0,
+       ACTL_DMA_MODE_VAL_DMA_MODE_1 = 1,
+       ACTL_SCE_BIT = 0,
+
+       HCTL_EN_BIT = 15
+};
+
+enum {
+       CDT1_BS_ISOC_SHIFT = 0,
+       CDT1_BS_ISOC_MASK = DIM2_MASK(9),
+
+       CDT3_BD_SHIFT = 0,
+       CDT3_BD_MASK = DIM2_MASK(12),
+       CDT3_BD_ISOC_MASK = DIM2_MASK(13),
+       CDT3_BA_SHIFT = 16,
+
+       ADT0_CE_BIT = 15,
+       ADT0_LE_BIT = 14,
+       ADT0_PG_BIT = 13,
+
+       ADT1_RDY_BIT = 15,
+       ADT1_DNE_BIT = 14,
+       ADT1_ERR_BIT = 13,
+       ADT1_PS_BIT = 12,
+       ADT1_MEP_BIT = 11,
+       ADT1_BD_SHIFT = 0,
+       ADT1_CTRL_ASYNC_BD_MASK = DIM2_MASK(11),
+       ADT1_ISOC_SYNC_BD_MASK = DIM2_MASK(13),
+
+       CAT_MFE_BIT = 14,
+
+       CAT_MT_BIT = 13,
+
+       CAT_RNW_BIT = 12,
+
+       CAT_CE_BIT = 11,
+
+       CAT_CT_SHIFT = 8,
+       CAT_CT_VAL_SYNC = 0,
+       CAT_CT_VAL_CONTROL = 1,
+       CAT_CT_VAL_ASYNC = 2,
+       CAT_CT_VAL_ISOC = 3,
+
+       CAT_CL_SHIFT = 0,
+       CAT_CL_MASK = DIM2_MASK(6)
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DIM2_OS62420_H */
diff --git a/drivers/staging/most/hdm-dim2/dim2_sysfs.c b/drivers/staging/most/hdm-dim2/dim2_sysfs.c
new file mode 100644 (file)
index 0000000..8e331a2
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * dim2_sysfs.c - MediaLB sysfs information
+ *
+ * Copyright (C) 2015, Microchip Technology Germany II GmbH & Co. KG
+ *
+ * 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 file is licensed under GPLv2.
+ */
+
+/* Author: Andrey Shvetsov <andrey.shvetsov@k2l.de> */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/kernel.h>
+#include "dim2_sysfs.h"
+
+struct bus_attr {
+       struct attribute attr;
+       ssize_t (*show)(struct medialb_bus *bus, char *buf);
+       ssize_t (*store)(struct medialb_bus *bus, const char *buf, size_t count);
+};
+
+static ssize_t state_show(struct medialb_bus *bus, char *buf)
+{
+       bool state = dim2_sysfs_get_state_cb();
+
+       return sprintf(buf, "%s\n", state ? "locked" : "");
+}
+
+static struct bus_attr state_attr = __ATTR_RO(state);
+
+static struct attribute *bus_default_attrs[] = {
+       &state_attr.attr,
+       NULL,
+};
+
+static struct attribute_group bus_attr_group = {
+       .attrs = bus_default_attrs,
+};
+
+static void bus_kobj_release(struct kobject *kobj)
+{
+}
+
+static ssize_t bus_kobj_attr_show(struct kobject *kobj, struct attribute *attr,
+                                 char *buf)
+{
+       struct medialb_bus *bus =
+               container_of(kobj, struct medialb_bus, kobj_group);
+       struct bus_attr *xattr = container_of(attr, struct bus_attr, attr);
+
+       if (!xattr->show)
+               return -EIO;
+
+       return xattr->show(bus, buf);
+}
+
+static ssize_t bus_kobj_attr_store(struct kobject *kobj, struct attribute *attr,
+                                  const char *buf, size_t count)
+{
+       ssize_t ret;
+       struct medialb_bus *bus =
+               container_of(kobj, struct medialb_bus, kobj_group);
+       struct bus_attr *xattr = container_of(attr, struct bus_attr, attr);
+
+       if (!xattr->store)
+               return -EIO;
+
+       ret = xattr->store(bus, buf, count);
+       return ret;
+}
+
+static struct sysfs_ops const bus_kobj_sysfs_ops = {
+       .show = bus_kobj_attr_show,
+       .store = bus_kobj_attr_store,
+};
+
+static struct kobj_type bus_ktype = {
+       .release = bus_kobj_release,
+       .sysfs_ops = &bus_kobj_sysfs_ops,
+};
+
+int dim2_sysfs_probe(struct medialb_bus *bus, struct kobject *parent_kobj)
+{
+       int err;
+
+       kobject_init(&bus->kobj_group, &bus_ktype);
+       err = kobject_add(&bus->kobj_group, parent_kobj, "bus");
+       if (err) {
+               pr_err("kobject_add() failed: %d\n", err);
+               goto err_kobject_add;
+       }
+
+       err = sysfs_create_group(&bus->kobj_group, &bus_attr_group);
+       if (err) {
+               pr_err("sysfs_create_group() failed: %d\n", err);
+               goto err_create_group;
+       }
+
+       return 0;
+
+err_create_group:
+       kobject_put(&bus->kobj_group);
+
+err_kobject_add:
+       return err;
+}
+
+void dim2_sysfs_destroy(struct medialb_bus *bus)
+{
+       kobject_put(&bus->kobj_group);
+}
diff --git a/drivers/staging/most/hdm-dim2/dim2_sysfs.h b/drivers/staging/most/hdm-dim2/dim2_sysfs.h
new file mode 100644 (file)
index 0000000..e719691
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * dim2_sysfs.h - MediaLB sysfs information
+ *
+ * Copyright (C) 2015, Microchip Technology Germany II GmbH & Co. KG
+ *
+ * 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 file is licensed under GPLv2.
+ */
+
+/* Author: Andrey Shvetsov <andrey.shvetsov@k2l.de> */
+
+#ifndef DIM2_SYSFS_H
+#define        DIM2_SYSFS_H
+
+
+#include <linux/kobject.h>
+
+
+struct medialb_bus {
+       struct kobject kobj_group;
+};
+
+struct dim2_hdm;
+
+int dim2_sysfs_probe(struct medialb_bus *bus, struct kobject *parent_kobj);
+void dim2_sysfs_destroy(struct medialb_bus *bus);
+
+/*
+ * callback,
+ * must deliver MediaLB state as true if locked or false if unlocked
+ */
+bool dim2_sysfs_get_state_cb(void);
+
+
+#endif /* DIM2_SYSFS_H */
diff --git a/drivers/staging/most/hdm-i2c/Kconfig b/drivers/staging/most/hdm-i2c/Kconfig
new file mode 100644 (file)
index 0000000..6fd7983
--- /dev/null
@@ -0,0 +1,12 @@
+#
+# MOST I2C configuration
+#
+
+config HDM_I2C
+       tristate "I2C HDM"
+       depends on I2C
+       ---help---
+         Say Y here if you want to connect via I2C to network tranceiver.
+
+         To compile this driver as a module, choose M here: the
+         module will be called hdm_i2c.
diff --git a/drivers/staging/most/hdm-i2c/Makefile b/drivers/staging/most/hdm-i2c/Makefile
new file mode 100644 (file)
index 0000000..03a4a59
--- /dev/null
@@ -0,0 +1,3 @@
+obj-$(CONFIG_HDM_I2C) += hdm_i2c.o
+
+ccflags-y += -Idrivers/staging/most/mostcore/
diff --git a/drivers/staging/most/hdm-i2c/hdm_i2c.c b/drivers/staging/most/hdm-i2c/hdm_i2c.c
new file mode 100644 (file)
index 0000000..029ded3
--- /dev/null
@@ -0,0 +1,451 @@
+/*
+ * hdm_i2c.c - Hardware Dependent Module for I2C Interface
+ *
+ * Copyright (C) 2013-2015, Microchip Technology Germany II GmbH & Co. KG
+ *
+ * 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 file is licensed under GPLv2.
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/i2c.h>
+#include <linux/sched.h>
+#include <linux/interrupt.h>
+#include <linux/err.h>
+
+#include <mostcore.h>
+
+enum { CH_RX, CH_TX, NUM_CHANNELS };
+
+#define MAX_BUFFERS_CONTROL 32
+#define MAX_BUF_SIZE_CONTROL 256
+
+/**
+ * list_first_mbo - get the first mbo from a list
+ * @ptr:       the list head to take the mbo from.
+ */
+#define list_first_mbo(ptr) \
+       list_first_entry(ptr, struct mbo, list)
+
+
+/* IRQ / Polling option */
+static bool polling_req;
+module_param(polling_req, bool, S_IRUGO);
+MODULE_PARM_DESC(polling_req, "Request Polling. Default = 0 (use irq)");
+
+/* Polling Rate */
+static int scan_rate = 100;
+module_param(scan_rate, int, 0644);
+MODULE_PARM_DESC(scan_rate, "Polling rate in times/sec. Default = 100");
+
+struct hdm_i2c {
+       bool is_open[NUM_CHANNELS];
+       bool polling_mode;
+       struct most_interface most_iface;
+       struct most_channel_capability capabilities[NUM_CHANNELS];
+       struct i2c_client *client;
+       struct rx {
+               struct delayed_work dwork;
+               wait_queue_head_t waitq;
+               struct list_head list;
+               struct mutex list_mutex;
+       } rx;
+       char name[64];
+};
+
+#define to_hdm(iface) container_of(iface, struct hdm_i2c, most_iface)
+
+/**
+ * configure_channel - called from MOST core to configure a channel
+ * @iface: interface the channel belongs to
+ * @channel: channel to be configured
+ * @channel_config: structure that holds the configuration information
+ *
+ * Return 0 on success, negative on failure.
+ *
+ * Receives configuration information from MOST core and initialize the
+ * corresponding channel.
+ */
+static int configure_channel(struct most_interface *most_iface,
+                            int ch_idx,
+                            struct most_channel_config *channel_config)
+{
+       struct hdm_i2c *dev = to_hdm(most_iface);
+
+       BUG_ON(ch_idx < 0 || ch_idx >= NUM_CHANNELS);
+       BUG_ON(dev->is_open[ch_idx]);
+
+       if (channel_config->data_type != MOST_CH_CONTROL) {
+               pr_err("bad data type for channel %d\n", ch_idx);
+               return -EPERM;
+       }
+
+       if (channel_config->direction != dev->capabilities[ch_idx].direction) {
+               pr_err("bad direction for channel %d\n", ch_idx);
+               return -EPERM;
+       }
+
+       if (channel_config->direction == MOST_CH_RX) {
+               if (dev->polling_mode)
+                       schedule_delayed_work(&dev->rx.dwork,
+                                             msecs_to_jiffies(MSEC_PER_SEC / 4));
+       }
+       dev->is_open[ch_idx] = true;
+
+       return 0;
+}
+
+/**
+ * enqueue - called from MOST core to enqueue a buffer for data transfer
+ * @iface: intended interface
+ * @channel: ID of the channel the buffer is intended for
+ * @mbo: pointer to the buffer object
+ *
+ * Return 0 on success, negative on failure.
+ *
+ * Transmit the data over I2C if it is a "write" request or push the buffer into
+ * list if it is an "read" request
+ */
+static int enqueue(struct most_interface *most_iface,
+                  int ch_idx, struct mbo *mbo)
+{
+       struct hdm_i2c *dev = to_hdm(most_iface);
+       int ret;
+
+       BUG_ON(ch_idx < 0 || ch_idx >= NUM_CHANNELS);
+       BUG_ON(!dev->is_open[ch_idx]);
+
+       if (ch_idx == CH_RX) {
+               /* RX */
+               mutex_lock(&dev->rx.list_mutex);
+               list_add_tail(&mbo->list, &dev->rx.list);
+               mutex_unlock(&dev->rx.list_mutex);
+               wake_up_interruptible(&dev->rx.waitq);
+       } else {
+               /* TX */
+               ret = i2c_master_send(dev->client, mbo->virt_address,
+                                     mbo->buffer_length);
+               if (ret <= 0) {
+                       mbo->processed_length = 0;
+                       mbo->status = MBO_E_INVAL;
+               } else {
+                       mbo->processed_length = mbo->buffer_length;
+                       mbo->status = MBO_SUCCESS;
+               }
+               mbo->complete(mbo);
+       }
+
+       return 0;
+}
+
+/**
+ * poison_channel - called from MOST core to poison buffers of a channel
+ * @iface: pointer to the interface the channel to be poisoned belongs to
+ * @channel_id: corresponding channel ID
+ *
+ * Return 0 on success, negative on failure.
+ *
+ * If channel direction is RX, complete the buffers in list with
+ * status MBO_E_CLOSE
+ */
+static int poison_channel(struct most_interface *most_iface,
+                         int ch_idx)
+{
+       struct hdm_i2c *dev = to_hdm(most_iface);
+       struct mbo *mbo;
+
+       BUG_ON(ch_idx < 0 || ch_idx >= NUM_CHANNELS);
+       BUG_ON(!dev->is_open[ch_idx]);
+
+       dev->is_open[ch_idx] = false;
+
+       if (ch_idx == CH_RX) {
+               mutex_lock(&dev->rx.list_mutex);
+               while (!list_empty(&dev->rx.list)) {
+                       mbo = list_first_mbo(&dev->rx.list);
+                       list_del(&mbo->list);
+                       mutex_unlock(&dev->rx.list_mutex);
+
+                       mbo->processed_length = 0;
+                       mbo->status = MBO_E_CLOSE;
+                       mbo->complete(mbo);
+
+                       mutex_lock(&dev->rx.list_mutex);
+               }
+               mutex_unlock(&dev->rx.list_mutex);
+               wake_up_interruptible(&dev->rx.waitq);
+       }
+
+       return 0;
+}
+
+static void request_netinfo(struct most_interface *most_iface,
+                           int ch_idx)
+{
+       pr_info("request_netinfo()\n");
+}
+
+static void do_rx_work(struct hdm_i2c *dev)
+{
+       struct mbo *mbo;
+       unsigned char msg[MAX_BUF_SIZE_CONTROL];
+       int ret, ch_idx = CH_RX;
+       uint16_t pml, data_size;
+
+       /* Read PML (2 bytes) */
+       ret = i2c_master_recv(dev->client, msg, 2);
+       if (ret <= 0) {
+               pr_err("Failed to receive PML\n");
+               return;
+       }
+
+       pml = (msg[0] << 8) | msg[1];
+       if (!pml)
+               return;
+
+       data_size = pml + 2;
+
+       /* Read the whole message, including PML */
+       ret = i2c_master_recv(dev->client, msg, data_size);
+       if (ret <= 0) {
+               pr_err("Failed to receive a Port Message\n");
+               return;
+       }
+
+       for (;;) {
+               /* Conditions to wait for: poisoned channel or free buffer
+                  available for reading  */
+               if (wait_event_interruptible(dev->rx.waitq,
+                                            !dev->is_open[ch_idx] ||
+                                            !list_empty(&dev->rx.list))) {
+                       pr_err("wait_event_interruptible() failed\n");
+                       return;
+               }
+
+               if (!dev->is_open[ch_idx])
+                       return;
+
+               mutex_lock(&dev->rx.list_mutex);
+
+               /* list may be empty if poison or remove is called */
+               if (!list_empty(&dev->rx.list))
+                       break;
+
+               mutex_unlock(&dev->rx.list_mutex);
+       }
+
+       mbo = list_first_mbo(&dev->rx.list);
+       list_del(&mbo->list);
+       mutex_unlock(&dev->rx.list_mutex);
+
+       mbo->processed_length = min(data_size, mbo->buffer_length);
+       memcpy(mbo->virt_address, msg, mbo->processed_length);
+       mbo->status = MBO_SUCCESS;
+       mbo->complete(mbo);
+}
+
+/**
+ * pending_rx_work - Read pending messages through I2C
+ * @work: definition of this work item
+ *
+ * Invoked by the Interrupt Service Routine, most_irq_handler()
+ */
+static void pending_rx_work(struct work_struct *work)
+{
+       struct hdm_i2c *dev = container_of(work, struct hdm_i2c, rx.dwork.work);
+
+       do_rx_work(dev);
+
+       if (dev->polling_mode) {
+               if (dev->is_open[CH_RX])
+                       schedule_delayed_work(&dev->rx.dwork,
+                                             msecs_to_jiffies(MSEC_PER_SEC
+                                                              / scan_rate));
+       } else
+               enable_irq(dev->client->irq);
+}
+
+/*
+ * most_irq_handler - Interrupt Service Routine
+ * @irq: irq number
+ * @_dev: private data
+ *
+ * Schedules a delayed work
+ *
+ * By default the interrupt line behavior is Active Low. Once an interrupt is
+ * generated by the device, until driver clears the interrupt (by reading
+ * the PMP message), device keeps the interrupt line in low state. Since i2c
+ * read is done in work queue, the interrupt line must be disabled temporarily
+ * to avoid ISR being called repeatedly. Re-enable the interrupt in workqueue,
+ * after reading the message.
+ *
+ * Note: If we use the interrupt line in Falling edge mode, there is a
+ * possibility to miss interrupts when ISR is getting executed.
+ *
+ */
+static irqreturn_t most_irq_handler(int irq, void *_dev)
+{
+       struct hdm_i2c *dev = _dev;
+
+       disable_irq_nosync(irq);
+
+       schedule_delayed_work(&dev->rx.dwork, 0);
+
+       return IRQ_HANDLED;
+}
+
+/*
+ * i2c_probe - i2c probe handler
+ * @client: i2c client device structure
+ * @id: i2c client device id
+ *
+ * Return 0 on success, negative on failure.
+ *
+ * Register the i2c client device as a MOST interface
+ */
+static int i2c_probe(struct i2c_client *client, const struct i2c_device_id *id)
+{
+       struct hdm_i2c *dev;
+       int ret, i;
+       struct kobject *kobj;
+
+       dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+       if (!dev)
+               return -ENOMEM;
+
+       /* ID format: i2c-<bus>-<address> */
+       snprintf(dev->name, sizeof(dev->name), "i2c-%d-%04x",
+                client->adapter->nr, client->addr);
+
+       for (i = 0; i < NUM_CHANNELS; i++) {
+               dev->is_open[i] = false;
+               dev->capabilities[i].data_type = MOST_CH_CONTROL;
+               dev->capabilities[i].num_buffers_packet = MAX_BUFFERS_CONTROL;
+               dev->capabilities[i].buffer_size_packet = MAX_BUF_SIZE_CONTROL;
+       }
+       dev->capabilities[CH_RX].direction = MOST_CH_RX;
+       dev->capabilities[CH_RX].name_suffix = "rx";
+       dev->capabilities[CH_TX].direction = MOST_CH_TX;
+       dev->capabilities[CH_TX].name_suffix = "tx";
+
+       dev->most_iface.interface = ITYPE_I2C;
+       dev->most_iface.description = dev->name;
+       dev->most_iface.num_channels = NUM_CHANNELS;
+       dev->most_iface.channel_vector = dev->capabilities;
+       dev->most_iface.configure = configure_channel;
+       dev->most_iface.enqueue = enqueue;
+       dev->most_iface.poison_channel = poison_channel;
+       dev->most_iface.request_netinfo = request_netinfo;
+
+       INIT_LIST_HEAD(&dev->rx.list);
+       mutex_init(&dev->rx.list_mutex);
+       init_waitqueue_head(&dev->rx.waitq);
+
+       INIT_DELAYED_WORK(&dev->rx.dwork, pending_rx_work);
+
+       dev->client = client;
+       i2c_set_clientdata(client, dev);
+
+       kobj = most_register_interface(&dev->most_iface);
+       if (IS_ERR(kobj)) {
+               pr_err("Failed to register i2c as a MOST interface\n");
+               kfree(dev);
+               return PTR_ERR(kobj);
+       }
+
+       dev->polling_mode = polling_req || client->irq <= 0;
+       if (!dev->polling_mode) {
+               pr_info("Requesting IRQ: %d\n", client->irq);
+               ret = request_irq(client->irq, most_irq_handler, IRQF_SHARED,
+                                 client->name, dev);
+               if (ret) {
+                       pr_info("IRQ request failed: %d, "
+                               "falling back to polling\n", ret);
+                       dev->polling_mode = true;
+               }
+       }
+
+       if (dev->polling_mode)
+               pr_info("Using polling at rate: %d times/sec\n", scan_rate);
+
+       return 0;
+}
+
+/*
+ * i2c_remove - i2c remove handler
+ * @client: i2c client device structure
+ *
+ * Return 0 on success.
+ *
+ * Unregister the i2c client device as a MOST interface
+ */
+static int i2c_remove(struct i2c_client *client)
+{
+       struct hdm_i2c *dev = i2c_get_clientdata(client);
+       int i;
+
+       if (!dev->polling_mode)
+               free_irq(client->irq, dev);
+
+       most_deregister_interface(&dev->most_iface);
+
+       for (i = 0 ; i < NUM_CHANNELS; i++)
+               if (dev->is_open[i])
+                       poison_channel(&dev->most_iface, i);
+       cancel_delayed_work_sync(&dev->rx.dwork);
+       kfree(dev);
+
+       return 0;
+}
+
+static const struct i2c_device_id i2c_id[] = {
+       { "most_i2c", 0 },
+       { }, /* Terminating entry */
+};
+
+MODULE_DEVICE_TABLE(i2c, i2c_id);
+
+static struct i2c_driver i2c_driver = {
+       .driver = {
+               .name = "hdm_i2c",
+               .owner = THIS_MODULE,
+       },
+       .probe = i2c_probe,
+       .remove = i2c_remove,
+       .id_table = i2c_id,
+};
+
+/**
+ * hdm_i2c_init - Driver Registration Routine
+ */
+static int __init hdm_i2c_init(void)
+{
+       pr_info("hdm_i2c_init()\n");
+
+       return i2c_add_driver(&i2c_driver);
+}
+
+/**
+ * hdm_i2c_exit - Driver Cleanup Routine
+ **/
+static void __exit hdm_i2c_exit(void)
+{
+       i2c_del_driver(&i2c_driver);
+       pr_info("hdm_i2c_exit()\n");
+}
+
+module_init(hdm_i2c_init);
+module_exit(hdm_i2c_exit);
+
+MODULE_AUTHOR("Jain Roy Ambi <JainRoy.Ambi@microchip.com>");
+MODULE_AUTHOR("Andrey Shvetsov <andrey.shvetsov@k2l.de>");
+MODULE_DESCRIPTION("I2C Hardware Dependent Module");
+MODULE_LICENSE("GPL");
diff --git a/drivers/staging/most/hdm-usb/Kconfig b/drivers/staging/most/hdm-usb/Kconfig
new file mode 100644 (file)
index 0000000..a482c3f
--- /dev/null
@@ -0,0 +1,14 @@
+#
+# MOST USB configuration
+#
+
+config HDM_USB
+       tristate "USB HDM"
+       depends on USB
+       select AIM_NETWORK
+       ---help---
+         Say Y here if you want to connect via USB to network tranceiver.
+         This device driver depends on the networking AIM.
+
+         To compile this driver as a module, choose M here: the
+         module will be called hdm_usb.
diff --git a/drivers/staging/most/hdm-usb/Makefile b/drivers/staging/most/hdm-usb/Makefile
new file mode 100644 (file)
index 0000000..6bbacb4
--- /dev/null
@@ -0,0 +1,4 @@
+obj-$(CONFIG_HDM_USB) += hdm_usb.o
+
+ccflags-y += -Idrivers/staging/most/mostcore/
+ccflags-y += -Idrivers/staging/most/aim-network/
diff --git a/drivers/staging/most/hdm-usb/hdm_usb.c b/drivers/staging/most/hdm-usb/hdm_usb.c
new file mode 100644 (file)
index 0000000..514ce35
--- /dev/null
@@ -0,0 +1,1454 @@
+/*
+ * hdm_usb.c - Hardware dependent module for USB
+ *
+ * Copyright (C) 2013-2015 Microchip Technology Germany II GmbH & Co. KG
+ *
+ * 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 file is licensed under GPLv2.
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+#include <linux/module.h>
+#include <linux/fs.h>
+#include <linux/usb.h>
+#include <linux/slab.h>
+#include <linux/init.h>
+#include <linux/cdev.h>
+#include <linux/device.h>
+#include <linux/list.h>
+#include <linux/completion.h>
+#include <linux/mutex.h>
+#include <linux/spinlock.h>
+#include <linux/interrupt.h>
+#include <linux/workqueue.h>
+#include <linux/sysfs.h>
+#include <linux/dma-mapping.h>
+#include <linux/etherdevice.h>
+#include <linux/uaccess.h>
+#include "mostcore.h"
+#include "networking.h"
+
+#define USB_MTU                        512
+#define NO_ISOCHRONOUS_URB     0
+#define AV_PACKETS_PER_XACT    2
+#define BUF_CHAIN_SIZE         0xFFFF
+#define MAX_NUM_ENDPOINTS      30
+#define MAX_SUFFIX_LEN         10
+#define MAX_STRING_LEN         80
+#define MAX_BUF_SIZE           0xFFFF
+#define CEILING(x, y)          (((x) + (y) - 1) / (y))
+
+#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
+/* DRCI Addresses */
+#define DRCI_REG_NI_STATE      0x0100
+#define DRCI_REG_PACKET_BW     0x0101
+#define DRCI_REG_NODE_ADDR     0x0102
+#define DRCI_REG_NODE_POS      0x0103
+#define DRCI_REG_MEP_FILTER    0x0140
+#define DRCI_REG_HASH_TBL0     0x0141
+#define DRCI_REG_HASH_TBL1     0x0142
+#define DRCI_REG_HASH_TBL2     0x0143
+#define DRCI_REG_HASH_TBL3     0x0144
+#define DRCI_REG_HW_ADDR_HI    0x0145
+#define DRCI_REG_HW_ADDR_MI    0x0146
+#define DRCI_REG_HW_ADDR_LO    0x0147
+#define DRCI_READ_REQ          0xA0
+#define DRCI_WRITE_REQ         0xA1
+
+/**
+ * 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
+ */
+struct most_dci_obj {
+       struct kobject kobj;
+       struct usb_device *usb_device;
+};
+#define to_dci_obj(p) container_of(p, struct most_dci_obj, kobj)
+
+/**
+ * struct most_dev - holds all usb interface specific stuff
+ * @parent: parent object in sysfs
+ * @usb_device: pointer to usb device
+ * @iface: hardware interface
+ * @cap: channel capabilities
+ * @conf: channel configuration
+ * @dci: direct communication interface of hardware
+ * @hw_addr: MAC address of hardware
+ * @ep_address: endpoint address table
+ * @link_stat: link status of hardware
+ * @description: device description
+ * @suffix: suffix for channel name
+ * @anchor_list_lock: locks list access
+ * @padding_active: indicates channel uses padding
+ * @is_channel_healthy: health status table of each channel
+ * @anchor_list: list of anchored items
+ * @io_mutex: synchronize I/O with disconnect
+ * @link_stat_timer: timer for link status reports
+ * @poll_work_obj: work for polling link status
+ */
+struct most_dev {
+       struct kobject *parent;
+       struct usb_device *usb_device;
+       struct most_interface iface;
+       struct most_channel_capability *cap;
+       struct most_channel_config *conf;
+       struct most_dci_obj *dci;
+       u8 hw_addr[6];
+       u8 *ep_address;
+       u16 link_stat;
+       char description[MAX_STRING_LEN];
+       char suffix[MAX_NUM_ENDPOINTS][MAX_SUFFIX_LEN];
+       spinlock_t anchor_list_lock[MAX_NUM_ENDPOINTS];
+       bool padding_active[MAX_NUM_ENDPOINTS];
+       bool is_channel_healthy[MAX_NUM_ENDPOINTS];
+       struct list_head *anchor_list;
+       struct mutex io_mutex;
+       struct timer_list link_stat_timer;
+       struct work_struct poll_work_obj;
+};
+#define to_mdev(d) container_of(d, struct most_dev, iface)
+#define to_mdev_from_work(w) container_of(w, struct most_dev, poll_work_obj)
+
+static struct workqueue_struct *schedule_usb_work;
+static void wq_clear_halt(struct work_struct *wq_obj);
+static void wq_netinfo(struct work_struct *wq_obj);
+
+/**
+ * trigger_resync_vr - Vendor request to trigger HW re-sync mechanism
+ * @dev: usb device
+ *
+ */
+static void trigger_resync_vr(struct usb_device *dev)
+{
+       int retval;
+       u8 request_type = USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_ENDPOINT;
+       int *data = kzalloc(sizeof(*data), GFP_KERNEL);
+
+       if (!data)
+               goto error;
+       *data = HW_RESYNC;
+       retval = usb_control_msg(dev,
+                                usb_sndctrlpipe(dev, 0),
+                                0,
+                                request_type,
+                                0,
+                                0,
+                                data,
+                                0,
+                                5 * HZ);
+       kfree(data);
+       if (retval >= 0)
+               return;
+error:
+       dev_err(&dev->dev, "Vendor request \"stall\" failed\n");
+}
+
+/**
+ * drci_rd_reg - read a DCI register
+ * @dev: usb device
+ * @reg: register address
+ * @buf: buffer to store data
+ *
+ * This is reads data from INIC's direct register communication interface
+ */
+static inline int drci_rd_reg(struct usb_device *dev, u16 reg, void *buf)
+{
+       return usb_control_msg(dev,
+                              usb_rcvctrlpipe(dev, 0),
+                              DRCI_READ_REQ,
+                              USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+                              0x0000,
+                              reg,
+                              buf,
+                              2,
+                              5 * HZ);
+}
+
+/**
+ * drci_wr_reg - write a DCI register
+ * @dev: usb device
+ * @reg: register address
+ * @data: data to write
+ *
+ * This is writes data to INIC's direct register communication interface
+ */
+static inline int drci_wr_reg(struct usb_device *dev, u16 reg, u16 data)
+{
+       return usb_control_msg(dev,
+                              usb_sndctrlpipe(dev, 0),
+                              DRCI_WRITE_REQ,
+                              USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+                              data,
+                              reg,
+                              NULL,
+                              0,
+                              5 * HZ);
+}
+
+/**
+ * free_anchored_buffers - free device's anchored items
+ * @mdev: the device
+ * @channel: channel ID
+ */
+static void free_anchored_buffers(struct most_dev *mdev, unsigned int channel)
+{
+       struct mbo *mbo;
+       struct buf_anchor *anchor, *tmp;
+       unsigned long flags;
+
+       spin_lock_irqsave(&mdev->anchor_list_lock[channel], 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);
+               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;
+                               mbo->processed_length = 0;
+                               mbo->complete(mbo);
+                       }
+                       usb_free_urb(urb);
+               }
+               spin_lock_irqsave(&mdev->anchor_list_lock[channel], flags);
+               list_del(&anchor->list);
+               kfree(anchor);
+       }
+       spin_unlock_irqrestore(&mdev->anchor_list_lock[channel], flags);
+}
+
+/**
+ * get_stream_frame_size - calculate frame size of current configuration
+ * @cfg: channel configuration
+ */
+static unsigned int get_stream_frame_size(struct most_channel_config *cfg)
+{
+       unsigned int frame_size = 0;
+       unsigned int sub_size = cfg->subbuffer_size;
+
+       if (!sub_size) {
+               pr_warn("Misconfig: Subbuffer size zero.\n");
+               return frame_size;
+       }
+       switch (cfg->data_type) {
+       case MOST_CH_ISOC_AVP:
+               frame_size = AV_PACKETS_PER_XACT * sub_size;
+               break;
+       case MOST_CH_SYNC:
+               if (cfg->packets_per_xact == 0) {
+                       pr_warn("Misconfig: Packets per XACT zero\n");
+                       frame_size = 0;
+               } else if (cfg->packets_per_xact == 0xFF)
+                       frame_size = (USB_MTU / sub_size) * sub_size;
+               else
+                       frame_size = cfg->packets_per_xact * sub_size;
+               break;
+       default:
+               pr_warn("Query frame size of non-streaming channel\n");
+               break;
+       }
+       return frame_size;
+}
+
+/**
+ * hdm_poison_channel - mark buffers of this channel as invalid
+ * @iface: pointer to the interface
+ * @channel: channel ID
+ *
+ * This unlinks all URBs submitted to the HCD,
+ * calls the associated completion function of the core and removes
+ * them from the list.
+ *
+ * Returns 0 on success or error code otherwise.
+ */
+int hdm_poison_channel(struct most_interface *iface, int channel)
+{
+       struct most_dev *mdev;
+
+       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))) {
+               dev_warn(&mdev->usb_device->dev, "Channel ID out of range.\n");
+               return -ECHRNG;
+       }
+
+       mdev->is_channel_healthy[channel] = false;
+
+       mutex_lock(&mdev->io_mutex);
+       free_anchored_buffers(mdev, channel);
+       if (mdev->padding_active[channel] == true)
+               mdev->padding_active[channel] = false;
+
+       if (mdev->conf[channel].data_type == MOST_CH_ASYNC) {
+               del_timer_sync(&mdev->link_stat_timer);
+               cancel_work_sync(&mdev->poll_work_obj);
+       }
+       mutex_unlock(&mdev->io_mutex);
+       return 0;
+}
+
+/**
+ * hdm_add_padding - add padding bytes
+ * @mdev: most device
+ * @channel: channel ID
+ * @mbo: buffer object
+ *
+ * This inserts the INIC hardware specific padding bytes into a streaming
+ * channel's buffer
+ */
+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;
+       u16 rd_addr, wr_addr;
+
+       frame_size = get_stream_frame_size(conf);
+       if (!frame_size)
+               return -EIO;
+       num_frames = mbo->buffer_length / frame_size;
+
+       if (num_frames < 1) {
+               dev_err(&mdev->usb_device->dev,
+                       "Missed minimal transfer unit.\n");
+               return -EIO;
+       }
+
+       for (j = 1; j < num_frames; j++) {
+               wr_addr = (num_frames - j) * USB_MTU;
+               rd_addr = (num_frames - j) * frame_size;
+               memmove(mbo->virt_address + wr_addr,
+                       mbo->virt_address + rd_addr,
+                       frame_size);
+       }
+       mbo->buffer_length = num_frames * USB_MTU;
+       return 0;
+}
+
+/**
+ * hdm_remove_padding - remove padding bytes
+ * @mdev: most device
+ * @channel: channel ID
+ * @mbo: buffer object
+ *
+ * This takes the INIC hardware specific padding bytes off a streaming
+ * channel's buffer.
+ */
+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];
+
+       frame_size = get_stream_frame_size(conf);
+       if (!frame_size)
+               return -EIO;
+       num_frames = mbo->processed_length / USB_MTU;
+
+       for (j = 1; j < num_frames; j++)
+               memmove(mbo->virt_address + frame_size * j,
+                       mbo->virt_address + USB_MTU * j,
+                       frame_size);
+
+       mbo->processed_length = frame_size * num_frames;
+       return 0;
+}
+
+/**
+ * hdm_write_completion - completion function for submitted Tx URBs
+ * @urb: the URB that has been completed
+ *
+ * This checks the status of the completed URB. In case the URB has been
+ * unlinked before, it is immediately freed. On any other error the MBO
+ * transfer flag is set. On success it frees allocated resources and calls
+ * the completion function.
+ *
+ * Context: interrupt!
+ */
+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;
+       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] == false)) {
+               complete(&anchor->urb_compl);
+               return;
+       }
+
+       if (unlikely(urb->status && !(urb->status == -ENOENT ||
+                                     urb->status == -ECONNRESET ||
+                                     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);
+                       queue_work(schedule_usb_work, &anchor->clear_work_obj);
+                       return;
+               case -ENODEV:
+               case -EPROTO:
+                       mbo->status = MBO_E_CLOSE;
+                       break;
+               default:
+                       mbo->status = MBO_E_INVAL;
+                       break;
+               }
+       } else {
+               mbo->status = MBO_SUCCESS;
+               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);
+       kfree(anchor);
+
+       if (likely(mbo->complete))
+               mbo->complete(mbo);
+       usb_free_urb(urb);
+}
+
+/**
+ * hdm_read_completion - completion funciton for submitted Rx URBs
+ * @urb: the URB that has been completed
+ *
+ * This checks the status of the completed URB. In case the URB has been
+ * unlinked before it is immediately freed. On any other error the MBO transfer
+ * flag is set. On success it frees allocated resources, removes
+ * padding bytes -if necessary- and calls the completion function.
+ *
+ * Context: interrupt!
+ *
+ * **************************************************************************
+ *                   Error codes returned by in urb->status
+ *                   or in iso_frame_desc[n].status (for ISO)
+ * *************************************************************************
+ *
+ * USB device drivers may only test urb status values in completion handlers.
+ * This is because otherwise there would be a race between HCDs updating
+ * these values on one CPU, and device drivers testing them on another CPU.
+ *
+ * A transfer's actual_length may be positive even when an error has been
+ * reported.  That's because transfers often involve several packets, so that
+ * one or more packets could finish before an error stops further endpoint I/O.
+ *
+ * For isochronous URBs, the urb status value is non-zero only if the URB is
+ * unlinked, the device is removed, the host controller is disabled or the total
+ * transferred length is less than the requested length and the URB_SHORT_NOT_OK
+ * flag is set.  Completion handlers for isochronous URBs should only see
+ * urb->status set to zero, -ENOENT, -ECONNRESET, -ESHUTDOWN, or -EREMOTEIO.
+ * Individual frame descriptor status fields may report more status codes.
+ *
+ *
+ * 0                   Transfer completed successfully
+ *
+ * -ENOENT             URB was synchronously unlinked by usb_unlink_urb
+ *
+ * -EINPROGRESS                URB still pending, no results yet
+ *                     (That is, if drivers see this it's a bug.)
+ *
+ * -EPROTO (*, **)     a) bitstuff error
+ *                     b) no response packet received within the
+ *                        prescribed bus turn-around time
+ *                     c) unknown USB error
+ *
+ * -EILSEQ (*, **)     a) CRC mismatch
+ *                     b) no response packet received within the
+ *                        prescribed bus turn-around time
+ *                     c) unknown USB error
+ *
+ *                     Note that often the controller hardware does not
+ *                     distinguish among cases a), b), and c), so a
+ *                     driver cannot tell whether there was a protocol
+ *                     error, a failure to respond (often caused by
+ *                     device disconnect), or some other fault.
+ *
+ * -ETIME (**)         No response packet received within the prescribed
+ *                     bus turn-around time.  This error may instead be
+ *                     reported as -EPROTO or -EILSEQ.
+ *
+ * -ETIMEDOUT          Synchronous USB message functions use this code
+ *                     to indicate timeout expired before the transfer
+ *                     completed, and no other error was reported by HC.
+ *
+ * -EPIPE (**)         Endpoint stalled.  For non-control endpoints,
+ *                     reset this status with usb_clear_halt().
+ *
+ * -ECOMM              During an IN transfer, the host controller
+ *                     received data from an endpoint faster than it
+ *                     could be written to system memory
+ *
+ * -ENOSR              During an OUT transfer, the host controller
+ *                     could not retrieve data from system memory fast
+ *                     enough to keep up with the USB data rate
+ *
+ * -EOVERFLOW (*)      The amount of data returned by the endpoint was
+ *                     greater than either the max packet size of the
+ *                     endpoint or the remaining buffer size.  "Babble".
+ *
+ * -EREMOTEIO          The data read from the endpoint did not fill the
+ *                     specified buffer, and URB_SHORT_NOT_OK was set in
+ *                     urb->transfer_flags.
+ *
+ * -ENODEV             Device was removed.  Often preceded by a burst of
+ *                     other errors, since the hub driver doesn't detect
+ *                     device removal events immediately.
+ *
+ * -EXDEV              ISO transfer only partially completed
+ *                     (only set in iso_frame_desc[n].status, not urb->status)
+ *
+ * -EINVAL             ISO madness, if this happens: Log off and go home
+ *
+ * -ECONNRESET         URB was asynchronously unlinked by usb_unlink_urb
+ *
+ * -ESHUTDOWN          The device or host controller has been disabled due
+ *                     to some problem that could not be worked around,
+ *                     such as a physical disconnect.
+ *
+ *
+ * (*) Error codes like -EPROTO, -EILSEQ and -EOVERFLOW normally indicate
+ * hardware problems such as bad devices (including firmware) or cables.
+ *
+ * (**) This is also one of several codes that different kinds of host
+ * controller use to indicate a transfer has failed because of device
+ * disconnect.  In the interval before the hub driver starts disconnect
+ * processing, devices may receive such fault reports for every request.
+ *
+ * See <https://www.kernel.org/doc/Documentation/usb/error-codes.txt>
+ */
+static void hdm_read_completion(struct urb *urb)
+{
+       struct mbo *mbo;
+       struct buf_anchor *anchor;
+       struct most_dev *mdev;
+       struct device *dev;
+       unsigned long flags;
+       unsigned int channel;
+       struct most_channel_config *conf;
+
+       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] == false)) {
+               complete(&anchor->urb_compl);
+               return;
+       }
+
+       conf = &mdev->conf[channel];
+
+       if (unlikely(urb->status && !(urb->status == -ENOENT ||
+                                     urb->status == -ECONNRESET ||
+                                     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);
+                       queue_work(schedule_usb_work, &anchor->clear_work_obj);
+                       return;
+               case -ENODEV:
+               case -EPROTO:
+                       mbo->status = MBO_E_CLOSE;
+                       break;
+               case -EOVERFLOW:
+                       dev_warn(dev, "Babble on IN pipe detected\n");
+               default:
+                       mbo->status = MBO_E_INVAL;
+                       break;
+               }
+       } else {
+               mbo->processed_length = urb->actual_length;
+               if (mdev->padding_active[channel] == false) {
+                       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;
+                       }
+               }
+       }
+       spin_lock_irqsave(&mdev->anchor_list_lock[channel], flags);
+       list_del(&anchor->list);
+       spin_unlock_irqrestore(&mdev->anchor_list_lock[channel], flags);
+       kfree(anchor);
+
+       if (likely(mbo->complete))
+               mbo->complete(mbo);
+       usb_free_urb(urb);
+}
+
+/**
+ * hdm_enqueue - receive a buffer to be used for data transfer
+ * @iface: interface to enqueue to
+ * @channel: ID of the channel
+ * @mbo: pointer to the buffer object
+ *
+ * This allocates a new URB and fills it according to the channel
+ * that is being used for transmission of data. Before the URB is
+ * submitted it is stored in the private anchor list.
+ *
+ * Returns 0 on success. On any error the URB is freed and a error code
+ * is returned.
+ *
+ * Context: Could in _some_ cases be interrupt!
+ */
+int hdm_enqueue(struct most_interface *iface, int channel, struct mbo *mbo)
+{
+       struct most_dev *mdev;
+       struct buf_anchor *anchor;
+       struct most_channel_config *conf;
+       struct device *dev;
+       int retval = 0;
+       struct urb *urb;
+       unsigned long flags;
+       unsigned long length;
+       void *virt_address;
+
+       if (unlikely(!iface || !mbo))
+               return -EIO;
+       if (unlikely(iface->num_channels <= channel) || (channel < 0))
+               return -ECHRNG;
+
+       mdev = to_mdev(iface);
+       conf = &mdev->conf[channel];
+       dev = &mdev->usb_device->dev;
+
+       if (!mdev->usb_device)
+               return -ENODEV;
+
+       urb = usb_alloc_urb(NO_ISOCHRONOUS_URB, GFP_ATOMIC);
+       if (!urb) {
+               dev_err(dev, "Failed to allocate URB\n");
+               return -ENOMEM;
+       }
+
+       anchor = kzalloc(sizeof(*anchor), GFP_ATOMIC);
+       if (!anchor) {
+               retval = -ENOMEM;
+               goto _error;
+       }
+
+       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] == true) &&
+           (conf->direction & MOST_CH_TX))
+               if (hdm_add_padding(mdev, channel, mbo)) {
+                       retval = -EIO;
+                       goto _error_1;
+               }
+
+       urb->transfer_dma = mbo->bus_address;
+       virt_address = mbo->virt_address;
+       length = mbo->buffer_length;
+
+       if (conf->direction & MOST_CH_TX) {
+               usb_fill_bulk_urb(urb, mdev->usb_device,
+                                 usb_sndbulkpipe(mdev->usb_device,
+                                                 mdev->ep_address[channel]),
+                                 virt_address,
+                                 length,
+                                 hdm_write_completion,
+                                 mbo);
+               if (conf->data_type != MOST_CH_ISOC_AVP)
+                       urb->transfer_flags |= URB_ZERO_PACKET;
+       } else {
+               usb_fill_bulk_urb(urb, mdev->usb_device,
+                                 usb_rcvbulkpipe(mdev->usb_device,
+                                                 mdev->ep_address[channel]),
+                                 virt_address,
+                                 length,
+                                 hdm_read_completion,
+                                 mbo);
+       }
+       urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
+
+       retval = usb_submit_urb(urb, GFP_KERNEL);
+       if (retval) {
+               dev_err(dev, "URB submit failed with error %d.\n", retval);
+               goto _error_1;
+       }
+       return 0;
+
+_error_1:
+       spin_lock_irqsave(&mdev->anchor_list_lock[channel], flags);
+       list_del(&anchor->list);
+       spin_unlock_irqrestore(&mdev->anchor_list_lock[channel], flags);
+       kfree(anchor);
+_error:
+       usb_free_urb(urb);
+       return retval;
+}
+
+/**
+ * hdm_configure_channel - receive channel configuration from core
+ * @iface: interface
+ * @channel: channel ID
+ * @conf: structure that holds the configuration information
+ */
+int hdm_configure_channel(struct most_interface *iface, int channel,
+                         struct most_channel_config *conf)
+{
+       unsigned int num_frames;
+       unsigned int frame_size;
+       unsigned int temp_size;
+       unsigned int tail_space;
+       struct most_dev *mdev;
+       struct device *dev;
+
+       mdev = to_mdev(iface);
+       mdev->is_channel_healthy[channel] = true;
+       dev = &mdev->usb_device->dev;
+
+       if (unlikely(!iface || !conf)) {
+               dev_err(dev, "Bad interface or config pointer.\n");
+               return -EINVAL;
+       }
+       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)) {
+               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))) {
+               mdev->padding_active[channel] = false;
+               goto exit;
+       }
+
+       mdev->padding_active[channel] = true;
+       temp_size = conf->buffer_size;
+
+       if ((conf->data_type != MOST_CH_SYNC) &&
+           (conf->data_type != MOST_CH_ISOC_AVP)) {
+               dev_warn(dev, "Unsupported data type\n");
+               return -EINVAL;
+       }
+
+       frame_size = get_stream_frame_size(conf);
+       if ((frame_size == 0) || (frame_size > USB_MTU)) {
+               dev_warn(dev, "Misconfig: frame size wrong\n");
+               return -EINVAL;
+       }
+
+       if (conf->buffer_size % frame_size) {
+               u16 tmp_val;
+
+               tmp_val = conf->buffer_size / frame_size;
+               conf->buffer_size = tmp_val * frame_size;
+               dev_notice(dev,
+                          "Channel %d - rouding buffer size to %d bytes, "
+                          "channel config says %d bytes\n",
+                          channel,
+                          conf->buffer_size,
+                          temp_size);
+       }
+
+       num_frames = conf->buffer_size / frame_size;
+       tail_space = num_frames * (USB_MTU - frame_size);
+       temp_size += tail_space;
+
+       /* calculate extra length to comply w/ HW padding */
+       conf->extra_len = (CEILING(temp_size, USB_MTU) * USB_MTU)
+                         - conf->buffer_size;
+exit:
+       mdev->conf[channel] = *conf;
+       return 0;
+}
+
+/**
+ * hdm_update_netinfo - retrieve latest networking information
+ * @mdev: device interface
+ *
+ * This triggers the USB vendor requests to read the hardware address and
+ * the current link status of the attached device.
+ */
+int hdm_update_netinfo(struct most_dev *mdev)
+{
+       struct device *dev = &mdev->usb_device->dev;
+       int i;
+       u16 link;
+       u8 addr[6];
+
+       if (!is_valid_ether_addr(mdev->hw_addr)) {
+               if (0 > drci_rd_reg(mdev->usb_device,
+                                   DRCI_REG_HW_ADDR_HI, addr)) {
+                       dev_err(dev, "Vendor request \"hw_addr_hi\" failed\n");
+                       return -1;
+               }
+               if (0 > drci_rd_reg(mdev->usb_device,
+                                   DRCI_REG_HW_ADDR_MI, addr + 2)) {
+                       dev_err(dev, "Vendor request \"hw_addr_mid\" failed\n");
+                       return -1;
+               }
+               if (0 > drci_rd_reg(mdev->usb_device,
+                                   DRCI_REG_HW_ADDR_LO, addr + 4)) {
+                       dev_err(dev, "Vendor request \"hw_addr_low\" failed\n");
+                       return -1;
+               }
+               mutex_lock(&mdev->io_mutex);
+               for (i = 0; i < 6; i++)
+                       mdev->hw_addr[i] = addr[i];
+               mutex_unlock(&mdev->io_mutex);
+
+       }
+       if (0 > drci_rd_reg(mdev->usb_device, DRCI_REG_NI_STATE, &link)) {
+               dev_err(dev, "Vendor request \"link status\" failed\n");
+               return -1;
+       }
+       le16_to_cpus(&link);
+       mutex_lock(&mdev->io_mutex);
+       mdev->link_stat = link;
+       mutex_unlock(&mdev->io_mutex);
+       return 0;
+}
+
+/**
+ * hdm_request_netinfo - request network information
+ * @iface: pointer to interface
+ * @channel: channel ID
+ *
+ * This is used as trigger to set up the link status timer that
+ * polls for the NI state of the INIC every 2 seconds.
+ *
+ */
+void hdm_request_netinfo(struct most_interface *iface, int channel)
+{
+       struct most_dev *mdev;
+
+       BUG_ON(!iface);
+       mdev = to_mdev(iface);
+       mdev->link_stat_timer.expires = jiffies + HZ;
+       mod_timer(&mdev->link_stat_timer, mdev->link_stat_timer.expires);
+}
+
+/**
+ * link_stat_timer_handler - add work to link_stat work queue
+ * @data: pointer to USB device instance
+ *
+ * The handler runs in interrupt context. That's why we need to defer the
+ * tasks to a work queue.
+ */
+static void link_stat_timer_handler(unsigned long data)
+{
+       struct most_dev *mdev = (struct most_dev *)data;
+
+       queue_work(schedule_usb_work, &mdev->poll_work_obj);
+       mdev->link_stat_timer.expires = jiffies + (2 * HZ);
+       add_timer(&mdev->link_stat_timer);
+}
+
+/**
+ * wq_netinfo - work queue function
+ * @wq_obj: object that holds data for our deferred work to do
+ *
+ * This retrieves the network interface status of the USB INIC
+ * and compares it with the current status. If the status has
+ * changed, it updates the status of the core.
+ */
+static void wq_netinfo(struct work_struct *wq_obj)
+{
+       struct most_dev *mdev;
+       int i, prev_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 (0 > hdm_update_netinfo(mdev))
+               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]))
+               most_deliver_netinfo(&mdev->iface, mdev->link_stat,
+                                    &mdev->hw_addr[0]);
+}
+
+/**
+ * wq_clear_halt - work queue function
+ * @wq_obj: work_struct object to execute
+ *
+ * This sends a clear_halt to the given USB pipe.
+ */
+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;
+
+       if (usb_clear_halt(urb->dev, urb->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);
+}
+
+/**
+ * hdm_usb_fops - file operation table for USB driver
+ */
+static const struct file_operations hdm_usb_fops = {
+       .owner = THIS_MODULE,
+};
+
+/**
+ * usb_device_id - ID table for HCD device probing
+ */
+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), },
+       { } /* Terminating entry */
+};
+
+#define MOST_DCI_RO_ATTR(_name) \
+       struct most_dci_attribute most_dci_attr_##_name = \
+               __ATTR(_name, S_IRUGO, show_value, NULL)
+
+#define MOST_DCI_ATTR(_name) \
+       struct most_dci_attribute most_dci_attr_##_name = \
+               __ATTR(_name, S_IRUGO | S_IWUSR, show_value, store_value)
+
+/**
+ * struct most_dci_attribute - to access the attributes of a dci object
+ * @attr: attributes of a dci object
+ * @show: pointer to the show function
+ * @store: pointer to the store function
+ */
+struct most_dci_attribute {
+       struct attribute attr;
+       ssize_t (*show)(struct most_dci_obj *d,
+                       struct most_dci_attribute *attr,
+                       char *buf);
+       ssize_t (*store)(struct most_dci_obj *d,
+                        struct most_dci_attribute *attr,
+                        const char *buf,
+                        size_t count);
+};
+#define to_dci_attr(a) container_of(a, struct most_dci_attribute, attr)
+
+
+/**
+ * dci_attr_show - show function for dci object
+ * @kobj: pointer to kobject
+ * @attr: pointer to attribute struct
+ * @buf: buffer
+ */
+static ssize_t dci_attr_show(struct kobject *kobj, struct attribute *attr,
+                            char *buf)
+{
+       struct most_dci_attribute *dci_attr = to_dci_attr(attr);
+       struct most_dci_obj *dci_obj = to_dci_obj(kobj);
+
+       if (!dci_attr->show)
+               return -EIO;
+
+       return dci_attr->show(dci_obj, dci_attr, buf);
+}
+
+/**
+ * dci_attr_store - store function for dci object
+ * @kobj: pointer to kobject
+ * @attr: pointer to attribute struct
+ * @buf: buffer
+ * @len: length of buffer
+ */
+static ssize_t dci_attr_store(struct kobject *kobj,
+                             struct attribute *attr,
+                             const char *buf,
+                             size_t len)
+{
+       struct most_dci_attribute *dci_attr = to_dci_attr(attr);
+       struct most_dci_obj *dci_obj = to_dci_obj(kobj);
+
+       if (!dci_attr->store)
+               return -EIO;
+
+       return dci_attr->store(dci_obj, dci_attr, buf, len);
+}
+
+static const struct sysfs_ops most_dci_sysfs_ops = {
+       .show = dci_attr_show,
+       .store = dci_attr_store,
+};
+
+/**
+ * most_dci_release - release function for dci object
+ * @kobj: pointer to kobject
+ *
+ * This frees the memory allocated for the dci object
+ */
+static void most_dci_release(struct kobject *kobj)
+{
+       struct most_dci_obj *dci_obj = to_dci_obj(kobj);
+
+       kfree(dci_obj);
+}
+
+static ssize_t show_value(struct most_dci_obj *dci_obj,
+                         struct most_dci_attribute *attr, char *buf)
+{
+       u16 tmp_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;
+
+       err = drci_rd_reg(dci_obj->usb_device, reg_addr, &tmp_val);
+       if (err < 0)
+               return err;
+
+       return snprintf(buf, PAGE_SIZE, "%04x\n", le16_to_cpu(tmp_val));
+}
+
+static ssize_t store_value(struct most_dci_obj *dci_obj,
+                          struct most_dci_attribute *attr,
+                          const char *buf, size_t count)
+{
+       u16 v16;
+       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;
+
+       err = kstrtou16(buf, 16, &v16);
+       if (err)
+               return err;
+
+       err = drci_wr_reg(dci_obj->usb_device, reg_addr, cpu_to_le16(v16));
+       if (err < 0)
+               return err;
+
+       return count;
+}
+
+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_ATTR(mep_filter);
+static MOST_DCI_ATTR(mep_hash0);
+static MOST_DCI_ATTR(mep_hash1);
+static MOST_DCI_ATTR(mep_hash2);
+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);
+
+/**
+ * most_dci_def_attrs - array of default attribute files of the dci object
+ */
+static struct attribute *most_dci_def_attrs[] = {
+       &most_dci_attr_ni_state.attr,
+       &most_dci_attr_packet_bandwidth.attr,
+       &most_dci_attr_node_address.attr,
+       &most_dci_attr_node_position.attr,
+       &most_dci_attr_mep_filter.attr,
+       &most_dci_attr_mep_hash0.attr,
+       &most_dci_attr_mep_hash1.attr,
+       &most_dci_attr_mep_hash2.attr,
+       &most_dci_attr_mep_hash3.attr,
+       &most_dci_attr_mep_eui48_hi.attr,
+       &most_dci_attr_mep_eui48_mi.attr,
+       &most_dci_attr_mep_eui48_lo.attr,
+       NULL,
+};
+
+/**
+ * DCI ktype
+ */
+static struct kobj_type most_dci_ktype = {
+       .sysfs_ops = &most_dci_sysfs_ops,
+       .release = most_dci_release,
+       .default_attrs = most_dci_def_attrs,
+};
+
+/**
+ * create_most_dci_obj - allocates a dci object
+ * @parent: parent kobject
+ *
+ * This creates a dci object and registers it with sysfs.
+ * Returns a pointer to the object or NULL when something went wrong.
+ */
+static struct
+most_dci_obj *create_most_dci_obj(struct kobject *parent)
+{
+       struct most_dci_obj *most_dci;
+       int retval;
+
+       most_dci = kzalloc(sizeof(*most_dci), GFP_KERNEL);
+       if (!most_dci)
+               return NULL;
+
+       retval = kobject_init_and_add(&most_dci->kobj, &most_dci_ktype, parent,
+                                     "dci");
+       if (retval) {
+               kobject_put(&most_dci->kobj);
+               return NULL;
+       }
+       return most_dci;
+}
+
+/**
+ * destroy_most_dci_obj - DCI object release function
+ * @p: pointer to dci object
+ */
+static void destroy_most_dci_obj(struct most_dci_obj *p)
+{
+       kobject_put(&p->kobj);
+}
+
+/**
+ * hdm_probe - probe function of USB device driver
+ * @interface: Interface of the attached USB device
+ * @id: Pointer to the USB ID table.
+ *
+ * This allocates and initializes the device instance, adds the new
+ * entry to the internal list, scans the USB descriptors and registers
+ * the interface with the core.
+ * Additionally, the DCI objects are created and the hardware is sync'd.
+ *
+ * Return 0 on success. In case of an error a negative number is returned.
+ */
+static int
+hdm_probe(struct usb_interface *interface, const struct usb_device_id *id)
+{
+       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;
+
+       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;
+
+       usb_set_intfdata(interface, mdev);
+       num_endpoints = usb_iface_desc->desc.bNumEndpoints;
+       mutex_init(&mdev->io_mutex);
+       INIT_WORK(&mdev->poll_work_obj, wq_netinfo);
+       init_timer(&mdev->link_stat_timer);
+
+       mdev->usb_device = usb_dev;
+       mdev->link_stat_timer.function = link_stat_timer_handler;
+       mdev->link_stat_timer.data = (unsigned long)mdev;
+       mdev->link_stat_timer.expires = jiffies + (2 * HZ);
+
+       mdev->iface.mod = hdm_usb_fops.owner;
+       mdev->iface.interface = ITYPE_USB;
+       mdev->iface.configure = hdm_configure_channel;
+       mdev->iface.request_netinfo = hdm_request_netinfo;
+       mdev->iface.enqueue = hdm_enqueue;
+       mdev->iface.poison_channel = hdm_poison_channel;
+       mdev->iface.description = mdev->description;
+       mdev->iface.num_channels = num_endpoints;
+
+       snprintf(mdev->description, sizeof(mdev->description),
+                "usb_device %d-%s:%d.%d",
+                usb_dev->bus->busnum,
+                usb_dev->devpath,
+                usb_dev->config->desc.bConfigurationValue,
+                usb_iface_desc->desc.bInterfaceNumber);
+
+       mdev->conf = kcalloc(num_endpoints, sizeof(*mdev->conf), GFP_KERNEL);
+       if (!mdev->conf)
+               goto exit_free;
+
+       mdev->cap = kcalloc(num_endpoints, sizeof(*mdev->cap), GFP_KERNEL);
+       if (!mdev->cap)
+               goto exit_free1;
+
+       mdev->iface.channel_vector = mdev->cap;
+       mdev->iface.priv = NULL;
+
+       mdev->ep_address =
+               kcalloc(num_endpoints, sizeof(*mdev->ep_address), GFP_KERNEL);
+       if (!mdev->ep_address)
+               goto exit_free2;
+
+       mdev->anchor_list =
+               kcalloc(num_endpoints, sizeof(*mdev->anchor_list), GFP_KERNEL);
+       if (!mdev->anchor_list)
+               goto exit_free3;
+
+       tmp_cap = mdev->cap;
+       for (i = 0; i < num_endpoints; i++) {
+               ep_desc = &usb_iface_desc->endpoint[i].desc;
+               mdev->ep_address[i] = ep_desc->bEndpointAddress;
+               mdev->padding_active[i] = false;
+               mdev->is_channel_healthy[i] = true;
+
+               snprintf(&mdev->suffix[i][0], MAX_SUFFIX_LEN, "ep%02x",
+                        mdev->ep_address[i]);
+
+               tmp_cap->name_suffix = &mdev->suffix[i][0];
+               tmp_cap->buffer_size_packet = MAX_BUF_SIZE;
+               tmp_cap->buffer_size_streaming = MAX_BUF_SIZE;
+               tmp_cap->num_buffers_packet = BUF_CHAIN_SIZE;
+               tmp_cap->num_buffers_streaming = BUF_CHAIN_SIZE;
+               tmp_cap->data_type = MOST_CH_CONTROL | MOST_CH_ASYNC |
+                                    MOST_CH_ISOC_AVP | MOST_CH_SYNC;
+               if (ep_desc->bEndpointAddress & USB_DIR_IN)
+                       tmp_cap->direction = MOST_CH_RX;
+               else
+                       tmp_cap->direction = MOST_CH_TX;
+               tmp_cap++;
+               INIT_LIST_HEAD(&mdev->anchor_list[i]);
+               spin_lock_init(&mdev->anchor_list_lock[i]);
+       }
+       dev_notice(dev, "claimed gadget: Vendor=%4.4x ProdID=%4.4x Bus=%02x Device=%02x\n",
+                  le16_to_cpu(usb_dev->descriptor.idVendor),
+                  le16_to_cpu(usb_dev->descriptor.idProduct),
+                  usb_dev->bus->busnum,
+                  usb_dev->devnum);
+
+       dev_notice(dev, "device path: /sys/bus/usb/devices/%d-%s:%d.%d\n",
+                  usb_dev->bus->busnum,
+                  usb_dev->devpath,
+                  usb_dev->config->desc.bConfigurationValue,
+                  usb_iface_desc->desc.bInterfaceNumber);
+
+       mdev->parent = most_register_interface(&mdev->iface);
+       if (IS_ERR(mdev->parent)) {
+               ret = PTR_ERR(mdev->parent);
+               goto exit_free4;
+       }
+
+       mutex_lock(&mdev->io_mutex);
+       if (le16_to_cpu(usb_dev->descriptor.idProduct) == USB_DEV_ID_INIC) {
+               /* this increments the reference count of the instance
+                * object of the core
+                */
+               mdev->dci = create_most_dci_obj(mdev->parent);
+               if (!mdev->dci) {
+                       mutex_unlock(&mdev->io_mutex);
+                       most_deregister_interface(&mdev->iface);
+                       ret = -ENOMEM;
+                       goto exit_free4;
+               }
+
+               kobject_uevent(&mdev->dci->kobj, KOBJ_ADD);
+               mdev->dci->usb_device = mdev->usb_device;
+               trigger_resync_vr(usb_dev);
+       }
+       mutex_unlock(&mdev->io_mutex);
+       return 0;
+
+exit_free4:
+       kfree(mdev->anchor_list);
+exit_free3:
+       kfree(mdev->ep_address);
+exit_free2:
+       kfree(mdev->cap);
+exit_free1:
+       kfree(mdev->conf);
+exit_free:
+       kfree(mdev);
+exit_ENOMEM:
+       if (ret == 0 || ret == -ENOMEM) {
+               ret = -ENOMEM;
+               dev_err(dev, "out of memory\n");
+       }
+       return ret;
+}
+
+/**
+ * hdm_disconnect - disconnect function of USB device driver
+ * @interface: Interface of the attached USB device
+ *
+ * This deregisters the interface with the core, removes the kernel timer
+ * and frees resources.
+ *
+ * Context: hub kernel thread
+ */
+static void hdm_disconnect(struct usb_interface *interface)
+{
+       struct most_dev *mdev;
+
+       mdev = usb_get_intfdata(interface);
+       mutex_lock(&mdev->io_mutex);
+       usb_set_intfdata(interface, NULL);
+       mdev->usb_device = NULL;
+       mutex_unlock(&mdev->io_mutex);
+
+       del_timer_sync(&mdev->link_stat_timer);
+       cancel_work_sync(&mdev->poll_work_obj);
+
+       destroy_most_dci_obj(mdev->dci);
+       most_deregister_interface(&mdev->iface);
+
+       kfree(mdev->anchor_list);
+       kfree(mdev->cap);
+       kfree(mdev->conf);
+       kfree(mdev->ep_address);
+       kfree(mdev);
+}
+
+static struct usb_driver hdm_usb = {
+       .name = "hdm_usb",
+       .id_table = usbid,
+       .probe = hdm_probe,
+       .disconnect = hdm_disconnect,
+};
+
+static int __init hdm_usb_init(void)
+{
+       pr_info("hdm_usb_init()\n");
+       if (usb_register(&hdm_usb)) {
+               pr_err("could not register hdm_usb driver\n");
+               return -EIO;
+       }
+       schedule_usb_work = create_workqueue("hdmu_work");
+       if (schedule_usb_work == NULL) {
+               pr_err("could not create workqueue\n");
+               usb_deregister(&hdm_usb);
+               return -ENOMEM;
+       }
+       return 0;
+}
+
+static void __exit hdm_usb_exit(void)
+{
+       pr_info("hdm_usb_exit()\n");
+       destroy_workqueue(schedule_usb_work);
+       usb_deregister(&hdm_usb);
+}
+
+module_init(hdm_usb_init);
+module_exit(hdm_usb_exit);
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Christian Gromm <christian.gromm@microchip.com>");
+MODULE_DESCRIPTION("HDM_4_USB");
diff --git a/drivers/staging/most/mostcore/Kconfig b/drivers/staging/most/mostcore/Kconfig
new file mode 100644 (file)
index 0000000..38abf1b
--- /dev/null
@@ -0,0 +1,13 @@
+#
+# MOSTCore configuration
+#
+
+config MOSTCORE
+       tristate "MOST Core"
+
+       ---help---
+         Say Y here if you want to enable MOST support.
+         This device driver needs at least an additional AIM and HDM to work.
+
+         To compile this driver as a module, choose M here: the
+         module will be called mostcore.
diff --git a/drivers/staging/most/mostcore/Makefile b/drivers/staging/most/mostcore/Makefile
new file mode 100644 (file)
index 0000000..a078f01
--- /dev/null
@@ -0,0 +1,3 @@
+obj-$(CONFIG_MOSTCORE) += mostcore.o
+
+mostcore-objs := core.o
diff --git a/drivers/staging/most/mostcore/core.c b/drivers/staging/most/mostcore/core.c
new file mode 100644 (file)
index 0000000..f4fea8c
--- /dev/null
@@ -0,0 +1,1931 @@
+/*
+ * core.c - Implementation of core module of MOST Linux driver stack
+ *
+ * Copyright (C) 2013-2015 Microchip Technology Germany II GmbH & Co. KG
+ *
+ * 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 file is licensed under GPLv2.
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+#include <linux/module.h>
+#include <linux/fs.h>
+#include <linux/slab.h>
+#include <linux/init.h>
+#include <linux/device.h>
+#include <linux/list.h>
+#include <linux/poll.h>
+#include <linux/wait.h>
+#include <linux/kobject.h>
+#include <linux/mutex.h>
+#include <linux/completion.h>
+#include <linux/sysfs.h>
+#include <linux/kthread.h>
+#include <linux/dma-mapping.h>
+#include <linux/idr.h>
+#include "mostcore.h"
+
+#define MAX_CHANNELS   64
+#define STRING_SIZE    80
+
+static struct class *most_class;
+static struct device *class_glue_dir;
+static struct ida mdev_id;
+static int modref;
+
+struct most_c_obj {
+       struct kobject kobj;
+       struct completion cleanup;
+       atomic_t mbo_ref;
+       atomic_t mbo_nq_level;
+       uint16_t channel_id;
+       bool is_poisoned;
+       bool is_started;
+       int is_starving;
+       struct most_interface *iface;
+       struct most_inst_obj *inst;
+       struct most_channel_config cfg;
+       bool keep_mbo;
+       bool enqueue_halt;
+       struct list_head fifo;
+       spinlock_t fifo_lock;
+       struct list_head halt_fifo;
+       struct list_head list;
+       struct most_aim *first_aim;
+       struct most_aim *second_aim;
+       struct list_head trash_fifo;
+       struct task_struct *hdm_enqueue_task;
+       struct mutex stop_task_mutex;
+       wait_queue_head_t hdm_fifo_wq;
+};
+#define to_c_obj(d) container_of(d, struct most_c_obj, kobj)
+
+struct most_inst_obj {
+       int dev_id;
+       atomic_t tainted;
+       struct most_interface *iface;
+       struct list_head channel_list;
+       struct most_c_obj *channel[MAX_CHANNELS];
+       struct kobject kobj;
+       struct list_head list;
+};
+#define to_inst_obj(d) container_of(d, struct most_inst_obj, kobj)
+
+/**
+ * list_pop_mbo - retrieves the first MBO of the list and removes it
+ * @ptr: the list head to grab the MBO from.
+ */
+#define list_pop_mbo(ptr)                                              \
+({                                                                     \
+       struct mbo *_mbo = list_first_entry(ptr, struct mbo, list);     \
+       list_del(&_mbo->list);                                          \
+       _mbo;                                                           \
+})
+
+static struct mutex deregister_mutex;
+
+/*                  ___             ___
+ *                  ___C H A N N E L___
+ */
+
+/**
+ * struct most_c_attr - to access the attributes of a channel object
+ * @attr: attributes of a channel
+ * @show: pointer to the show function
+ * @store: pointer to the store function
+ */
+struct most_c_attr {
+       struct attribute attr;
+       ssize_t (*show)(struct most_c_obj *d,
+                       struct most_c_attr *attr,
+                       char *buf);
+       ssize_t (*store)(struct most_c_obj *d,
+                        struct most_c_attr *attr,
+                        const char *buf,
+                        size_t count);
+};
+#define to_channel_attr(a) container_of(a, struct most_c_attr, attr)
+
+#define MOST_CHNL_ATTR(_name, _mode, _show, _store) \
+               struct most_c_attr most_chnl_attr_##_name = \
+               __ATTR(_name, _mode, _show, _store)
+
+/**
+ * channel_attr_show - show function of channel object
+ * @kobj: pointer to its kobject
+ * @attr: pointer to its attributes
+ * @buf: buffer
+ */
+static ssize_t channel_attr_show(struct kobject *kobj, struct attribute *attr,
+                                char *buf)
+{
+       struct most_c_attr *channel_attr = to_channel_attr(attr);
+       struct most_c_obj *c_obj = to_c_obj(kobj);
+
+       if (!channel_attr->show)
+               return -EIO;
+
+       return channel_attr->show(c_obj, channel_attr, buf);
+}
+
+/**
+ * channel_attr_store - store function of channel object
+ * @kobj: pointer to its kobject
+ * @attr: pointer to its attributes
+ * @buf: buffer
+ * @len: length of buffer
+ */
+static ssize_t channel_attr_store(struct kobject *kobj,
+                                 struct attribute *attr,
+                                 const char *buf,
+                                 size_t len)
+{
+       struct most_c_attr *channel_attr = to_channel_attr(attr);
+       struct most_c_obj *c_obj = to_c_obj(kobj);
+
+       if (!channel_attr->store)
+               return -EIO;
+       return channel_attr->store(c_obj, channel_attr, buf, len);
+}
+
+static const struct sysfs_ops most_channel_sysfs_ops = {
+       .show = channel_attr_show,
+       .store = channel_attr_store,
+};
+
+/**
+ * most_free_mbo_coherent - free an MBO and its coherent buffer
+ * @mbo: buffer to be released
+ *
+ */
+static void most_free_mbo_coherent(struct mbo *mbo)
+{
+       struct most_c_obj *c = mbo->context;
+       u16 const coherent_buf_size = c->cfg.buffer_size + c->cfg.extra_len;
+
+       dma_free_coherent(NULL, coherent_buf_size, mbo->virt_address,
+                         mbo->bus_address);
+       kfree(mbo);
+       if (atomic_sub_and_test(1, &c->mbo_ref))
+               complete(&c->cleanup);
+}
+
+/**
+ * flush_channel_fifos - clear the channel fifos
+ * @c: pointer to channel object
+ */
+void flush_channel_fifos(struct most_c_obj *c)
+{
+       unsigned long flags, hf_flags;
+       struct mbo *mbo, *tmp;
+
+       if (list_empty(&c->fifo) && list_empty(&c->halt_fifo))
+               return;
+
+       spin_lock_irqsave(&c->fifo_lock, flags);
+       list_for_each_entry_safe(mbo, tmp, &c->fifo, list) {
+               list_del(&mbo->list);
+               spin_unlock_irqrestore(&c->fifo_lock, flags);
+               if (likely(mbo))
+                       most_free_mbo_coherent(mbo);
+               spin_lock_irqsave(&c->fifo_lock, flags);
+       }
+       spin_unlock_irqrestore(&c->fifo_lock, flags);
+
+       spin_lock_irqsave(&c->fifo_lock, hf_flags);
+       list_for_each_entry_safe(mbo, tmp, &c->halt_fifo, list) {
+               list_del(&mbo->list);
+               spin_unlock_irqrestore(&c->fifo_lock, hf_flags);
+               if (likely(mbo))
+                       most_free_mbo_coherent(mbo);
+               spin_lock_irqsave(&c->fifo_lock, hf_flags);
+       }
+       spin_unlock_irqrestore(&c->fifo_lock, hf_flags);
+
+       if (unlikely((!list_empty(&c->fifo) || !list_empty(&c->halt_fifo))))
+               pr_info("WARN: fifo | trash fifo not empty\n");
+}
+
+/**
+ * flush_trash_fifo - clear the trash fifo
+ * @c: pointer to channel object
+ */
+static int flush_trash_fifo(struct most_c_obj *c)
+{
+       struct mbo *mbo, *tmp;
+       unsigned long flags;
+
+       spin_lock_irqsave(&c->fifo_lock, flags);
+       list_for_each_entry_safe(mbo, tmp, &c->trash_fifo, list) {
+               list_del(&mbo->list);
+               spin_unlock_irqrestore(&c->fifo_lock, flags);
+               most_free_mbo_coherent(mbo);
+               spin_lock_irqsave(&c->fifo_lock, flags);
+       }
+       spin_unlock_irqrestore(&c->fifo_lock, flags);
+       return 0;
+}
+
+/**
+ * most_channel_release - release function of channel object
+ * @kobj: pointer to channel's kobject
+ */
+static void most_channel_release(struct kobject *kobj)
+{
+       struct most_c_obj *c = to_c_obj(kobj);
+
+       kfree(c);
+}
+
+static ssize_t show_available_directions(struct most_c_obj *c,
+               struct most_c_attr *attr,
+               char *buf)
+{
+       unsigned int i = c->channel_id;
+
+       strcpy(buf, "");
+       if (c->iface->channel_vector[i].direction & MOST_CH_RX)
+               strcat(buf, "dir_rx ");
+       if (c->iface->channel_vector[i].direction & MOST_CH_TX)
+               strcat(buf, "dir_tx ");
+       strcat(buf, "\n");
+       return strlen(buf) + 1;
+}
+
+static ssize_t show_available_datatypes(struct most_c_obj *c,
+                                       struct most_c_attr *attr,
+                                       char *buf)
+{
+       unsigned int i = c->channel_id;
+
+       strcpy(buf, "");
+       if (c->iface->channel_vector[i].data_type & MOST_CH_CONTROL)
+               strcat(buf, "control ");
+       if (c->iface->channel_vector[i].data_type & MOST_CH_ASYNC)
+               strcat(buf, "async ");
+       if (c->iface->channel_vector[i].data_type & MOST_CH_SYNC)
+               strcat(buf, "sync ");
+       if (c->iface->channel_vector[i].data_type & MOST_CH_ISOC_AVP)
+               strcat(buf, "isoc_avp ");
+       strcat(buf, "\n");
+       return strlen(buf) + 1;
+}
+
+static
+ssize_t show_number_of_packet_buffers(struct most_c_obj *c,
+                                     struct most_c_attr *attr,
+                                     char *buf)
+{
+       unsigned int i = c->channel_id;
+
+       return snprintf(buf, PAGE_SIZE, "%d\n",
+                       c->iface->channel_vector[i].num_buffers_packet);
+}
+
+static
+ssize_t show_number_of_stream_buffers(struct most_c_obj *c,
+                                     struct most_c_attr *attr,
+                                     char *buf)
+{
+       unsigned int i = c->channel_id;
+
+       return snprintf(buf, PAGE_SIZE, "%d\n",
+                       c->iface->channel_vector[i].num_buffers_streaming);
+}
+
+static
+ssize_t show_size_of_packet_buffer(struct most_c_obj *c,
+                                  struct most_c_attr *attr,
+                                  char *buf)
+{
+       unsigned int i = c->channel_id;
+
+       return snprintf(buf, PAGE_SIZE, "%d\n",
+                       c->iface->channel_vector[i].buffer_size_packet);
+}
+
+static
+ssize_t show_size_of_stream_buffer(struct most_c_obj *c,
+                                  struct most_c_attr *attr,
+                                  char *buf)
+{
+       unsigned int i = c->channel_id;
+
+       return snprintf(buf, PAGE_SIZE, "%d\n",
+                       c->iface->channel_vector[i].buffer_size_streaming);
+}
+
+static ssize_t show_channel_starving(struct most_c_obj *c,
+                                    struct most_c_attr *attr,
+                                    char *buf)
+{
+       return snprintf(buf, PAGE_SIZE, "%d\n", c->is_starving);
+}
+
+
+#define create_show_channel_attribute(val) \
+       static MOST_CHNL_ATTR(val, S_IRUGO, show_##val, NULL)
+
+create_show_channel_attribute(available_directions);
+create_show_channel_attribute(available_datatypes);
+create_show_channel_attribute(number_of_packet_buffers);
+create_show_channel_attribute(number_of_stream_buffers);
+create_show_channel_attribute(size_of_stream_buffer);
+create_show_channel_attribute(size_of_packet_buffer);
+create_show_channel_attribute(channel_starving);
+
+static ssize_t show_set_number_of_buffers(struct most_c_obj *c,
+                                         struct most_c_attr *attr,
+                                         char *buf)
+{
+       return snprintf(buf, PAGE_SIZE, "%d\n", c->cfg.num_buffers);
+}
+
+static ssize_t store_set_number_of_buffers(struct most_c_obj *c,
+                                          struct most_c_attr *attr,
+                                          const char *buf,
+                                          size_t count)
+{
+       int ret = kstrtou16(buf, 0, &c->cfg.num_buffers);
+
+       if (ret)
+               return ret;
+       return count;
+}
+
+static ssize_t show_set_buffer_size(struct most_c_obj *c,
+                                   struct most_c_attr *attr,
+                                   char *buf)
+{
+       return snprintf(buf, PAGE_SIZE, "%d\n", c->cfg.buffer_size);
+}
+
+static ssize_t store_set_buffer_size(struct most_c_obj *c,
+                                    struct most_c_attr *attr,
+                                    const char *buf,
+                                    size_t count)
+{
+       int ret = kstrtou16(buf, 0, &c->cfg.buffer_size);
+
+       if (ret)
+               return ret;
+       return count;
+}
+
+static ssize_t show_set_direction(struct most_c_obj *c,
+                                 struct most_c_attr *attr,
+                                 char *buf)
+{
+       if (c->cfg.direction & MOST_CH_TX)
+               return snprintf(buf, PAGE_SIZE, "dir_tx\n");
+       else if (c->cfg.direction & MOST_CH_RX)
+               return snprintf(buf, PAGE_SIZE, "dir_rx\n");
+       return snprintf(buf, PAGE_SIZE, "unconfigured\n");
+}
+
+static ssize_t store_set_direction(struct most_c_obj *c,
+                                  struct most_c_attr *attr,
+                                  const char *buf,
+                                  size_t count)
+{
+       if (!strcmp(buf, "dir_rx\n"))
+               c->cfg.direction = MOST_CH_RX;
+       else if (!strcmp(buf, "dir_tx\n"))
+               c->cfg.direction = MOST_CH_TX;
+       else {
+               pr_info("WARN: invalid attribute settings\n");
+               return -EINVAL;
+       }
+       return count;
+}
+
+static ssize_t show_set_datatype(struct most_c_obj *c,
+                                struct most_c_attr *attr,
+                                char *buf)
+{
+       if (c->cfg.data_type & MOST_CH_CONTROL)
+               return snprintf(buf, PAGE_SIZE, "control\n");
+       else if (c->cfg.data_type & MOST_CH_ASYNC)
+               return snprintf(buf, PAGE_SIZE, "async\n");
+       else if (c->cfg.data_type & MOST_CH_SYNC)
+               return snprintf(buf, PAGE_SIZE, "sync\n");
+       else if (c->cfg.data_type & MOST_CH_ISOC_AVP)
+               return snprintf(buf, PAGE_SIZE, "isoc_avp\n");
+       return snprintf(buf, PAGE_SIZE, "unconfigured\n");
+}
+
+static ssize_t store_set_datatype(struct most_c_obj *c,
+                                 struct most_c_attr *attr,
+                                 const char *buf,
+                                 size_t count)
+{
+       if (!strcmp(buf, "control\n"))
+               c->cfg.data_type = MOST_CH_CONTROL;
+       else if (!strcmp(buf, "async\n"))
+               c->cfg.data_type = MOST_CH_ASYNC;
+       else if (!strcmp(buf, "sync\n"))
+               c->cfg.data_type = MOST_CH_SYNC;
+       else if (!strcmp(buf, "isoc_avp\n"))
+               c->cfg.data_type = MOST_CH_ISOC_AVP;
+       else {
+               pr_info("WARN: invalid attribute settings\n");
+               return -EINVAL;
+       }
+       return count;
+}
+
+static ssize_t show_set_subbuffer_size(struct most_c_obj *c,
+                                      struct most_c_attr *attr,
+                                      char *buf)
+{
+       return snprintf(buf, PAGE_SIZE, "%d\n", c->cfg.subbuffer_size);
+}
+
+static ssize_t store_set_subbuffer_size(struct most_c_obj *c,
+                                       struct most_c_attr *attr,
+                                       const char *buf,
+                                       size_t count)
+{
+       int ret = kstrtou16(buf, 0, &c->cfg.subbuffer_size);
+
+       if (ret)
+               return ret;
+       return count;
+}
+
+static ssize_t show_set_packets_per_xact(struct most_c_obj *c,
+                                        struct most_c_attr *attr,
+                                        char *buf)
+{
+       return snprintf(buf, PAGE_SIZE, "%d\n", c->cfg.packets_per_xact);
+}
+
+static ssize_t store_set_packets_per_xact(struct most_c_obj *c,
+                                         struct most_c_attr *attr,
+                                         const char *buf,
+                                         size_t count)
+{
+       int ret = kstrtou16(buf, 0, &c->cfg.packets_per_xact);
+
+       if (ret)
+               return ret;
+       return count;
+}
+
+#define create_channel_attribute(value) \
+       static MOST_CHNL_ATTR(value, S_IRUGO | S_IWUSR, \
+                             show_##value, \
+                             store_##value)
+
+create_channel_attribute(set_buffer_size);
+create_channel_attribute(set_number_of_buffers);
+create_channel_attribute(set_direction);
+create_channel_attribute(set_datatype);
+create_channel_attribute(set_subbuffer_size);
+create_channel_attribute(set_packets_per_xact);
+
+
+/**
+ * most_channel_def_attrs - array of default attributes of channel object
+ */
+static struct attribute *most_channel_def_attrs[] = {
+       &most_chnl_attr_available_directions.attr,
+       &most_chnl_attr_available_datatypes.attr,
+       &most_chnl_attr_number_of_packet_buffers.attr,
+       &most_chnl_attr_number_of_stream_buffers.attr,
+       &most_chnl_attr_size_of_packet_buffer.attr,
+       &most_chnl_attr_size_of_stream_buffer.attr,
+       &most_chnl_attr_set_number_of_buffers.attr,
+       &most_chnl_attr_set_buffer_size.attr,
+       &most_chnl_attr_set_direction.attr,
+       &most_chnl_attr_set_datatype.attr,
+       &most_chnl_attr_set_subbuffer_size.attr,
+       &most_chnl_attr_set_packets_per_xact.attr,
+       &most_chnl_attr_channel_starving.attr,
+       NULL,
+};
+
+static struct kobj_type most_channel_ktype = {
+       .sysfs_ops = &most_channel_sysfs_ops,
+       .release = most_channel_release,
+       .default_attrs = most_channel_def_attrs,
+};
+
+static struct kset *most_channel_kset;
+
+/**
+ * create_most_c_obj - allocates a channel object
+ * @name: name of the channel object
+ * @parent: parent kobject
+ *
+ * This create a channel object and registers it with sysfs.
+ * Returns a pointer to the object or NULL when something went wrong.
+ */
+static struct most_c_obj *
+create_most_c_obj(const char *name, struct kobject *parent)
+{
+       struct most_c_obj *c;
+       int retval;
+
+       c = kzalloc(sizeof(*c), GFP_KERNEL);
+       if (!c)
+               return NULL;
+       c->kobj.kset = most_channel_kset;
+       retval = kobject_init_and_add(&c->kobj, &most_channel_ktype, parent,
+                                     "%s", name);
+       if (retval) {
+               kobject_put(&c->kobj);
+               return NULL;
+       }
+       kobject_uevent(&c->kobj, KOBJ_ADD);
+       return c;
+}
+
+/**
+ * destroy_most_c_obj - channel release function
+ * @c: pointer to channel object
+ *
+ * This decrements the reference counter of the channel object.
+ * If the reference count turns zero, its release function is called.
+ */
+static void destroy_most_c_obj(struct most_c_obj *c)
+{
+       if (c->first_aim)
+               c->first_aim->disconnect_channel(c->iface, c->channel_id);
+       if (c->second_aim)
+               c->second_aim->disconnect_channel(c->iface, c->channel_id);
+       c->first_aim = NULL;
+       c->second_aim = NULL;
+
+       mutex_lock(&deregister_mutex);
+       flush_trash_fifo(c);
+       flush_channel_fifos(c);
+       mutex_unlock(&deregister_mutex);
+       kobject_put(&c->kobj);
+}
+
+/*                  ___               ___
+ *                  ___I N S T A N C E___
+ */
+#define MOST_INST_ATTR(_name, _mode, _show, _store) \
+               struct most_inst_attribute most_inst_attr_##_name = \
+               __ATTR(_name, _mode, _show, _store)
+
+static struct list_head instance_list;
+
+/**
+ * struct most_inst_attribute - to access the attributes of instance object
+ * @attr: attributes of an instance
+ * @show: pointer to the show function
+ * @store: pointer to the store function
+ */
+struct most_inst_attribute {
+       struct attribute attr;
+       ssize_t (*show)(struct most_inst_obj *d,
+                       struct most_inst_attribute *attr,
+                       char *buf);
+       ssize_t (*store)(struct most_inst_obj *d,
+                        struct most_inst_attribute *attr,
+                        const char *buf,
+                        size_t count);
+};
+#define to_instance_attr(a) \
+       container_of(a, struct most_inst_attribute, attr)
+
+/**
+ * instance_attr_show - show function for an instance object
+ * @kobj: pointer to kobject
+ * @attr: pointer to attribute struct
+ * @buf: buffer
+ */
+static ssize_t instance_attr_show(struct kobject *kobj,
+                                 struct attribute *attr,
+                                 char *buf)
+{
+       struct most_inst_attribute *instance_attr;
+       struct most_inst_obj *instance_obj;
+
+       instance_attr = to_instance_attr(attr);
+       instance_obj = to_inst_obj(kobj);
+
+       if (!instance_attr->show)
+               return -EIO;
+
+       return instance_attr->show(instance_obj, instance_attr, buf);
+}
+
+/**
+ * instance_attr_store - store function for an instance object
+ * @kobj: pointer to kobject
+ * @attr: pointer to attribute struct
+ * @buf: buffer
+ * @len: length of buffer
+ */
+static ssize_t instance_attr_store(struct kobject *kobj,
+                                  struct attribute *attr,
+                                  const char *buf,
+                                  size_t len)
+{
+       struct most_inst_attribute *instance_attr;
+       struct most_inst_obj *instance_obj;
+
+       instance_attr = to_instance_attr(attr);
+       instance_obj = to_inst_obj(kobj);
+
+       if (!instance_attr->store)
+               return -EIO;
+
+       return instance_attr->store(instance_obj, instance_attr, buf, len);
+}
+
+static const struct sysfs_ops most_inst_sysfs_ops = {
+       .show = instance_attr_show,
+       .store = instance_attr_store,
+};
+
+/**
+ * most_inst_release - release function for instance object
+ * @kobj: pointer to instance's kobject
+ *
+ * This frees the allocated memory for the instance object
+ */
+static void most_inst_release(struct kobject *kobj)
+{
+       struct most_inst_obj *inst = to_inst_obj(kobj);
+
+       kfree(inst);
+}
+
+static ssize_t show_description(struct most_inst_obj *instance_obj,
+                               struct most_inst_attribute *attr,
+                               char *buf)
+{
+       return snprintf(buf, PAGE_SIZE, "%s\n",
+                       instance_obj->iface->description);
+}
+
+static ssize_t show_interface(struct most_inst_obj *instance_obj,
+                             struct most_inst_attribute *attr,
+                             char *buf)
+{
+       switch (instance_obj->iface->interface) {
+       case ITYPE_LOOPBACK:
+               return snprintf(buf, PAGE_SIZE, "loopback\n");
+       case ITYPE_I2C:
+               return snprintf(buf, PAGE_SIZE, "i2c\n");
+       case ITYPE_I2S:
+               return snprintf(buf, PAGE_SIZE, "i2s\n");
+       case ITYPE_TSI:
+               return snprintf(buf, PAGE_SIZE, "tsi\n");
+       case ITYPE_HBI:
+               return snprintf(buf, PAGE_SIZE, "hbi\n");
+       case ITYPE_MEDIALB_DIM:
+               return snprintf(buf, PAGE_SIZE, "mlb_dim\n");
+       case ITYPE_MEDIALB_DIM2:
+               return snprintf(buf, PAGE_SIZE, "mlb_dim2\n");
+       case ITYPE_USB:
+               return snprintf(buf, PAGE_SIZE, "usb\n");
+       case ITYPE_PCIE:
+               return snprintf(buf, PAGE_SIZE, "pcie\n");
+       }
+       return snprintf(buf, PAGE_SIZE, "unknown\n");
+}
+
+#define create_inst_attribute(value) \
+       static MOST_INST_ATTR(value, S_IRUGO, show_##value, NULL)
+
+create_inst_attribute(description);
+create_inst_attribute(interface);
+
+static struct attribute *most_inst_def_attrs[] = {
+       &most_inst_attr_description.attr,
+       &most_inst_attr_interface.attr,
+       NULL,
+};
+
+static struct kobj_type most_inst_ktype = {
+       .sysfs_ops = &most_inst_sysfs_ops,
+       .release = most_inst_release,
+       .default_attrs = most_inst_def_attrs,
+};
+
+static struct kset *most_inst_kset;
+
+
+/**
+ * create_most_inst_obj - creates an instance object
+ * @name: name of the object to be created
+ *
+ * This allocates memory for an instance structure, assigns the proper kset
+ * and registers it with sysfs.
+ *
+ * Returns a pointer to the instance object or NULL when something went wrong.
+ */
+static struct most_inst_obj *create_most_inst_obj(const char *name)
+{
+       struct most_inst_obj *inst;
+       int retval;
+
+       inst = kzalloc(sizeof(*inst), GFP_KERNEL);
+       if (!inst)
+               return NULL;
+       inst->kobj.kset = most_inst_kset;
+       retval = kobject_init_and_add(&inst->kobj, &most_inst_ktype, NULL,
+                                     "%s", name);
+       if (retval) {
+               kobject_put(&inst->kobj);
+               return NULL;
+       }
+       kobject_uevent(&inst->kobj, KOBJ_ADD);
+       return inst;
+}
+
+/**
+ * destroy_most_inst_obj - MOST instance release function
+ * @inst: pointer to the instance object
+ *
+ * This decrements the reference counter of the instance object.
+ * If the reference count turns zero, its release function is called
+ */
+static void destroy_most_inst_obj(struct most_inst_obj *inst)
+{
+       struct most_c_obj *c, *tmp;
+
+       /* need to destroy channels first, since
+        * each channel incremented the
+        * reference count of the inst->kobj
+        */
+       list_for_each_entry_safe(c, tmp, &inst->channel_list, list) {
+               destroy_most_c_obj(c);
+       }
+       kobject_put(&inst->kobj);
+}
+
+/*                  ___     ___
+ *                  ___A I M___
+ */
+struct most_aim_obj {
+       struct kobject kobj;
+       struct list_head list;
+       struct most_aim *driver;
+       char add_link[STRING_SIZE];
+       char remove_link[STRING_SIZE];
+};
+#define to_aim_obj(d) container_of(d, struct most_aim_obj, kobj)
+
+static struct list_head aim_list;
+
+
+/**
+ * struct most_aim_attribute - to access the attributes of AIM object
+ * @attr: attributes of an AIM
+ * @show: pointer to the show function
+ * @store: pointer to the store function
+ */
+struct most_aim_attribute {
+       struct attribute attr;
+       ssize_t (*show)(struct most_aim_obj *d,
+                       struct most_aim_attribute *attr,
+                       char *buf);
+       ssize_t (*store)(struct most_aim_obj *d,
+                        struct most_aim_attribute *attr,
+                        const char *buf,
+                        size_t count);
+};
+#define to_aim_attr(a) container_of(a, struct most_aim_attribute, attr)
+
+/**
+ * aim_attr_show - show function of an AIM object
+ * @kobj: pointer to kobject
+ * @attr: pointer to attribute struct
+ * @buf: buffer
+ */
+static ssize_t aim_attr_show(struct kobject *kobj,
+                            struct attribute *attr,
+                            char *buf)
+{
+       struct most_aim_attribute *aim_attr;
+       struct most_aim_obj *aim_obj;
+
+       aim_attr = to_aim_attr(attr);
+       aim_obj = to_aim_obj(kobj);
+
+       if (!aim_attr->show)
+               return -EIO;
+
+       return aim_attr->show(aim_obj, aim_attr, buf);
+}
+
+/**
+ * aim_attr_store - store function of an AIM object
+ * @kobj: pointer to kobject
+ * @attr: pointer to attribute struct
+ * @buf: buffer
+ * @len: length of buffer
+ */
+static ssize_t aim_attr_store(struct kobject *kobj,
+                             struct attribute *attr,
+                             const char *buf,
+                             size_t len)
+{
+       struct most_aim_attribute *aim_attr;
+       struct most_aim_obj *aim_obj;
+
+       aim_attr = to_aim_attr(attr);
+       aim_obj = to_aim_obj(kobj);
+
+       if (!aim_attr->store)
+               return -EIO;
+       return aim_attr->store(aim_obj, aim_attr, buf, len);
+}
+
+static const struct sysfs_ops most_aim_sysfs_ops = {
+       .show = aim_attr_show,
+       .store = aim_attr_store,
+};
+
+/**
+ * most_aim_release - AIM release function
+ * @kobj: pointer to AIM's kobject
+ */
+static void most_aim_release(struct kobject *kobj)
+{
+       struct most_aim_obj *aim_obj = to_aim_obj(kobj);
+
+       kfree(aim_obj);
+}
+
+static ssize_t show_add_link(struct most_aim_obj *aim_obj,
+                            struct most_aim_attribute *attr,
+                            char *buf)
+{
+       return snprintf(buf, PAGE_SIZE, "%s\n", aim_obj->add_link);
+}
+
+/**
+ * split_string - parses and changes string in the buffer buf and
+ * splits it into two mandatory and one optional substrings.
+ *
+ * @buf: complete string from attribute 'add_channel'
+ * @a: address of pointer to 1st substring (=instance name)
+ * @b: address of pointer to 2nd substring (=channel name)
+ * @c: optional address of pointer to 3rd substring (=user defined name)
+ *
+ * Examples:
+ *
+ * Input: "mdev0:ch0@ep_81:my_channel\n" or
+ *        "mdev0:ch0@ep_81:my_channel"
+ *
+ * Output: *a -> "mdev0", *b -> "ch0@ep_81", *c -> "my_channel"
+ *
+ * Input: "mdev0:ch0@ep_81\n"
+ * Output: *a -> "mdev0", *b -> "ch0@ep_81", *c -> ""
+ *
+ * Input: "mdev0:ch0@ep_81"
+ * Output: *a -> "mdev0", *b -> "ch0@ep_81", *c == NULL
+ */
+int split_string(char *buf, char **a, char **b, char **c)
+{
+       *a = strsep(&buf, ":");
+       if (!*a)
+               return -EIO;
+
+       *b = strsep(&buf, ":\n");
+       if (!*b)
+               return -EIO;
+
+       if (c)
+               *c = strsep(&buf, ":\n");
+
+       return 0;
+}
+
+/**
+ * get_channel_by_name - get pointer to channel object
+ * @mdev: name of the device instance
+ * @mdev_ch: name of the respective channel
+ *
+ * This retrieves the pointer to a channel object.
+ */
+static struct
+most_c_obj *get_channel_by_name(char *mdev, char *mdev_ch)
+{
+       struct most_c_obj *c, *tmp;
+       struct most_inst_obj *i, *i_tmp;
+       int found = 0;
+
+       list_for_each_entry_safe(i, i_tmp, &instance_list, list) {
+               if (!strcmp(kobject_name(&i->kobj), mdev)) {
+                       found++;
+                       break;
+               }
+       }
+       if (unlikely(!found))
+               return ERR_PTR(-EIO);
+
+       list_for_each_entry_safe(c, tmp, &i->channel_list, list) {
+               if (!strcmp(kobject_name(&c->kobj), mdev_ch)) {
+                       found++;
+                       break;
+               }
+       }
+       if (unlikely(2 > found))
+               return ERR_PTR(-EIO);
+       return c;
+}
+
+/**
+ * store_add_link - store() function for add_link attribute
+ * @aim_obj: pointer to AIM object
+ * @attr: its attributes
+ * @buf: buffer
+ * @len: buffer length
+ *
+ * This parses the string given by buf and splits it into
+ * three substrings. Note: third substring is optional. In case a cdev
+ * AIM is loaded the optional 3rd substring will make up the name of
+ * device node in the /dev directory. If omitted, the device node will
+ * inherit the channel's name within sysfs.
+ *
+ * Searches for a pair of device and channel and probes the AIM
+ *
+ * Example:
+ * (1) echo -n -e "mdev0:ch0@ep_81:my_rxchannel\n" >add_link
+ * (2) echo -n -e "mdev0:ch0@ep_81\n" >add_link
+ *
+ * (1) would create the device node /dev/my_rxchannel
+ * (2) would create the device node /dev/mdev0-ch0@ep_81
+ */
+static ssize_t store_add_link(struct most_aim_obj *aim_obj,
+                             struct most_aim_attribute *attr,
+                             const char *buf,
+                             size_t len)
+{
+       struct most_c_obj *c;
+       struct most_aim **aim_ptr;
+       char buffer[STRING_SIZE];
+       char *mdev;
+       char *mdev_ch;
+       char *mdev_devnod;
+       char devnod_buf[STRING_SIZE];
+       int ret;
+       size_t max_len = min_t(size_t, len + 1, STRING_SIZE);
+
+       strlcpy(buffer, buf, max_len);
+       strlcpy(aim_obj->add_link, buf, max_len);
+
+       ret = split_string(buffer, &mdev, &mdev_ch, &mdev_devnod);
+       if (ret)
+               return ret;
+
+       if (mdev_devnod == 0 || *mdev_devnod == 0) {
+               snprintf(devnod_buf, sizeof(devnod_buf), "%s-%s", mdev, mdev_ch);
+               mdev_devnod = devnod_buf;
+       }
+
+       c = get_channel_by_name(mdev, mdev_ch);
+       if (IS_ERR(c))
+               return -ENODEV;
+
+       if (!c->first_aim)
+               aim_ptr = &c->first_aim;
+       else if (!c->second_aim)
+               aim_ptr = &c->second_aim;
+       else
+               return -ENOSPC;
+
+       ret = aim_obj->driver->probe_channel(c->iface, c->channel_id,
+                                            &c->cfg, &c->kobj, mdev_devnod);
+       if (ret)
+               return ret;
+       *aim_ptr = aim_obj->driver;
+       return len;
+}
+
+struct most_aim_attribute most_aim_attr_add_link =
+       __ATTR(add_link, S_IRUGO | S_IWUSR, show_add_link, store_add_link);
+
+static ssize_t show_remove_link(struct most_aim_obj *aim_obj,
+                               struct most_aim_attribute *attr,
+                               char *buf)
+{
+       return snprintf(buf, PAGE_SIZE, "%s\n", aim_obj->remove_link);
+}
+
+/**
+ * store_remove_link - store function for remove_link attribute
+ * @aim_obj: pointer to AIM object
+ * @attr: its attributes
+ * @buf: buffer
+ * @len: buffer length
+ *
+ * Example:
+ * echo -n -e "mdev0:ch0@ep_81\n" >remove_link
+ */
+static ssize_t store_remove_link(struct most_aim_obj *aim_obj,
+                                struct most_aim_attribute *attr,
+                                const char *buf,
+                                size_t len)
+{
+       struct most_c_obj *c;
+       char buffer[STRING_SIZE];
+       char *mdev;
+       char *mdev_ch;
+       int ret;
+       size_t max_len = min_t(size_t, len + 1, STRING_SIZE);
+
+       strlcpy(buffer, buf, max_len);
+       strlcpy(aim_obj->remove_link, buf, max_len);
+       ret = split_string(buffer, &mdev, &mdev_ch, NULL);
+       if (ret)
+               return ret;
+
+       c = get_channel_by_name(mdev, mdev_ch);
+       if (IS_ERR(c))
+               return -ENODEV;
+
+       if (c->first_aim == aim_obj->driver)
+               c->first_aim = NULL;
+       if (c->second_aim == aim_obj->driver)
+               c->second_aim = NULL;
+       if (aim_obj->driver->disconnect_channel(c->iface, c->channel_id))
+               return -EIO;
+       return len;
+}
+
+struct most_aim_attribute most_aim_attr_remove_link =
+       __ATTR(remove_link, S_IRUGO | S_IWUSR, show_remove_link, store_remove_link);
+
+static struct attribute *most_aim_def_attrs[] = {
+       &most_aim_attr_add_link.attr,
+       &most_aim_attr_remove_link.attr,
+       NULL,
+};
+
+static struct kobj_type most_aim_ktype = {
+       .sysfs_ops = &most_aim_sysfs_ops,
+       .release = most_aim_release,
+       .default_attrs = most_aim_def_attrs,
+};
+
+static struct kset *most_aim_kset;
+
+/**
+ * create_most_aim_obj - creates an AIM object
+ * @name: name of the AIM
+ *
+ * This creates an AIM object assigns the proper kset and registers
+ * it with sysfs.
+ * Returns a pointer to the object or NULL if something went wrong.
+ */
+static struct most_aim_obj *create_most_aim_obj(const char *name)
+{
+       struct most_aim_obj *most_aim;
+       int retval;
+
+       most_aim = kzalloc(sizeof(*most_aim), GFP_KERNEL);
+       if (!most_aim)
+               return NULL;
+       most_aim->kobj.kset = most_aim_kset;
+       retval = kobject_init_and_add(&most_aim->kobj, &most_aim_ktype,
+                                     NULL, "%s", name);
+       if (retval) {
+               kobject_put(&most_aim->kobj);
+               return NULL;
+       }
+       kobject_uevent(&most_aim->kobj, KOBJ_ADD);
+       return most_aim;
+}
+
+/**
+ * destroy_most_aim_obj - AIM release function
+ * @p: pointer to AIM object
+ *
+ * This decrements the reference counter of the AIM object. If the
+ * reference count turns zero, its release function will be called.
+ */
+static void destroy_most_aim_obj(struct most_aim_obj *p)
+{
+       kobject_put(&p->kobj);
+}
+
+
+/*                  ___       ___
+ *                  ___C O R E___
+ */
+
+/**
+ * Instantiation of the MOST bus
+ */
+struct bus_type most_bus = {
+       .name = "most",
+};
+
+/**
+ * Instantiation of the core driver
+ */
+struct device_driver mostcore = {
+       .name = "mostcore",
+       .bus = &most_bus,
+};
+
+static inline void trash_mbo(struct mbo *mbo)
+{
+       unsigned long flags;
+       struct most_c_obj *c = mbo->context;
+
+       spin_lock_irqsave(&c->fifo_lock, flags);
+       list_add(&mbo->list, &c->trash_fifo);
+       spin_unlock_irqrestore(&c->fifo_lock, flags);
+}
+
+static struct mbo *get_hdm_mbo(struct most_c_obj *c)
+{
+       unsigned long flags;
+       struct mbo *mbo;
+
+       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;
+}
+
+static void nq_hdm_mbo(struct mbo *mbo)
+{
+       unsigned long flags;
+       struct most_c_obj *c = mbo->context;
+
+       spin_lock_irqsave(&c->fifo_lock, flags);
+       list_add_tail(&mbo->list, &c->halt_fifo);
+       spin_unlock_irqrestore(&c->fifo_lock, flags);
+       wake_up_interruptible(&c->hdm_fifo_wq);
+}
+
+static int hdm_enqueue_thread(void *data)
+{
+       struct most_c_obj *c = data;
+       struct mbo *mbo;
+       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))
+                                        || kthread_should_stop());
+
+               if (unlikely(!mbo))
+                       continue;
+
+               if (c->cfg.direction == MOST_CH_RX)
+                       mbo->buffer_length = c->cfg.buffer_size;
+
+               if (unlikely(enqueue(mbo->ifp, mbo->hdm_channel_id, mbo))) {
+                       pr_err("hdm enqueue failed\n");
+                       nq_hdm_mbo(mbo);
+                       c->hdm_enqueue_task = NULL;
+                       return 0;
+               }
+       }
+
+       return 0;
+}
+
+static int run_enqueue_thread(struct most_c_obj *c, int channel_id)
+{
+       struct task_struct *task =
+               kthread_run(&hdm_enqueue_thread, c, "hdm_fifo_%d", channel_id);
+
+       if (IS_ERR(task))
+               return PTR_ERR(task);
+
+       c->hdm_enqueue_task = task;
+       return 0;
+}
+
+/**
+ * arm_mbo - recycle MBO for further usage
+ * @mbo: buffer object
+ *
+ * This puts an MBO back to the list to have it ready for up coming
+ * tx transactions.
+ *
+ * In case the MBO belongs to a channel that recently has been
+ * poisoned, the MBO is scheduled to be trashed.
+ * Calls the completion handler of an attached AIM.
+ */
+static void arm_mbo(struct mbo *mbo)
+{
+       unsigned long flags;
+       struct most_c_obj *c;
+
+       BUG_ON((!mbo) || (!mbo->context));
+       c = mbo->context;
+
+       if (c->is_poisoned) {
+               trash_mbo(mbo);
+               return;
+       }
+
+       spin_lock_irqsave(&c->fifo_lock, flags);
+       list_add_tail(&mbo->list, &c->fifo);
+       spin_unlock_irqrestore(&c->fifo_lock, flags);
+
+       if (c->second_aim && c->second_aim->tx_completion)
+               c->second_aim->tx_completion(c->iface, c->channel_id);
+       if (c->first_aim && c->first_aim->tx_completion)
+               c->first_aim->tx_completion(c->iface, c->channel_id);
+}
+
+/**
+ * arm_mbo_chain - helper function that arms an MBO chain for the HDM
+ * @c: pointer to interface channel
+ * @dir: direction of the channel
+ * @compl: pointer to completion function
+ *
+ * This allocates buffer objects including the containing DMA coherent
+ * buffer and puts them in the fifo.
+ * Buffers of Rx channels are put in the kthread fifo, hence immediately
+ * submitted to the HDM.
+ *
+ * Returns the number of allocated and enqueued MBOs.
+ */
+int arm_mbo_chain(struct most_c_obj *c, int dir, void (*compl)(struct mbo *))
+{
+       unsigned int i;
+       int retval;
+       struct mbo *mbo;
+       u32 coherent_buf_size = c->cfg.buffer_size + c->cfg.extra_len;
+
+       atomic_set(&c->mbo_nq_level, 0);
+
+       for (i = 0; i < c->cfg.num_buffers; i++) {
+               mbo = kzalloc(sizeof(*mbo), GFP_KERNEL);
+               if (!mbo) {
+                       pr_info("WARN: Allocation of MBO failed.\n");
+                       retval = i;
+                       goto _exit;
+               }
+               mbo->context = c;
+               mbo->ifp = c->iface;
+               mbo->hdm_channel_id = c->channel_id;
+               mbo->virt_address = dma_alloc_coherent(NULL,
+                                                      coherent_buf_size,
+                                                      &mbo->bus_address,
+                                                      GFP_KERNEL);
+               if (!mbo->virt_address) {
+                       pr_info("WARN: No DMA coherent buffer.\n");
+                       retval = i;
+                       goto _error1;
+               }
+               mbo->complete = compl;
+               if (dir == MOST_CH_RX) {
+                       nq_hdm_mbo(mbo);
+                       atomic_inc(&c->mbo_nq_level);
+               } else {
+                       arm_mbo(mbo);
+               }
+       }
+       return i;
+
+_error1:
+       kfree(mbo);
+_exit:
+       return retval;
+}
+
+/**
+ * most_submit_mbo - submits an MBO to fifo
+ * @mbo: pointer to the MBO
+ *
+ */
+int most_submit_mbo(struct mbo *mbo)
+{
+       struct most_c_obj *c;
+       struct most_inst_obj *i;
+
+       if (unlikely((!mbo) || (!mbo->context))) {
+               pr_err("Bad MBO or missing channel reference\n");
+               return -EINVAL;
+       }
+       c = mbo->context;
+       i = c->inst;
+
+       if (unlikely(atomic_read(&i->tainted)))
+               return -ENODEV;
+
+       nq_hdm_mbo(mbo);
+       return 0;
+}
+EXPORT_SYMBOL_GPL(most_submit_mbo);
+
+/**
+ * most_write_completion - write completion handler
+ * @mbo: pointer to MBO
+ *
+ * This recycles the MBO for further usage. In case the channel has been
+ * poisoned, the MBO is scheduled to be trashed.
+ */
+static void most_write_completion(struct mbo *mbo)
+{
+       struct most_c_obj *c;
+
+       BUG_ON((!mbo) || (!mbo->context));
+
+       c = mbo->context;
+       if (mbo->status == MBO_E_INVAL)
+               pr_info("WARN: Tx MBO status: invalid\n");
+       if (unlikely((c->is_poisoned == true) || (mbo->status == MBO_E_CLOSE)))
+               trash_mbo(mbo);
+       else
+               arm_mbo(mbo);
+}
+
+/**
+ * get_channel_by_iface - get pointer to channel object
+ * @iface: pointer to interface instance
+ * @id: channel ID
+ *
+ * This retrieves a pointer to a channel of the given interface and channel ID.
+ */
+static struct
+most_c_obj *get_channel_by_iface(struct most_interface *iface, int id)
+{
+       struct most_inst_obj *i;
+
+       if (unlikely(!iface)) {
+               pr_err("Bad interface\n");
+               return NULL;
+       }
+       if (unlikely((id < 0) || (id >= iface->num_channels))) {
+               pr_err("Channel index (%d) out of range\n", id);
+               return NULL;
+       }
+       i = iface->priv;
+       if (unlikely(!i)) {
+               pr_err("interface is not registered\n");
+               return NULL;
+       }
+       return i->channel[id];
+}
+
+/**
+ * most_get_mbo - get pointer to an MBO of pool
+ * @iface: pointer to interface instance
+ * @id: channel ID
+ *
+ * This attempts to get a free buffer out of the channel fifo.
+ * Returns a pointer to MBO on success or NULL otherwise.
+ */
+struct mbo *most_get_mbo(struct most_interface *iface, int id)
+{
+       struct mbo *mbo;
+       struct most_c_obj *c;
+       unsigned long flags;
+
+       c = get_channel_by_iface(iface, id);
+       if (unlikely(!c))
+               return NULL;
+       spin_lock_irqsave(&c->fifo_lock, flags);
+       if (list_empty(&c->fifo)) {
+               spin_unlock_irqrestore(&c->fifo_lock, flags);
+               return NULL;
+       }
+       mbo = list_pop_mbo(&c->fifo);
+       spin_unlock_irqrestore(&c->fifo_lock, flags);
+       mbo->buffer_length = c->cfg.buffer_size;
+       return mbo;
+}
+EXPORT_SYMBOL_GPL(most_get_mbo);
+
+
+/**
+ * most_put_mbo - return buffer to pool
+ * @mbo: buffer object
+ */
+void most_put_mbo(struct mbo *mbo)
+{
+       struct most_c_obj *c;
+       struct most_inst_obj *i;
+
+       c = mbo->context;
+       i = c->inst;
+
+       if (unlikely(atomic_read(&i->tainted))) {
+               mbo->status = MBO_E_CLOSE;
+               trash_mbo(mbo);
+               return;
+       }
+       if (c->cfg.direction == MOST_CH_TX) {
+               arm_mbo(mbo);
+               return;
+       }
+       nq_hdm_mbo(mbo);
+       atomic_inc(&c->mbo_nq_level);
+}
+EXPORT_SYMBOL_GPL(most_put_mbo);
+
+/**
+ * most_read_completion - read completion handler
+ * @mbo: pointer to MBO
+ *
+ * This function is called by the HDM when data has been received from the
+ * hardware and copied to the buffer of the MBO.
+ *
+ * In case the channel has been poisoned it puts the buffer in the trash queue.
+ * Otherwise, it passes the buffer to an AIM for further processing.
+ */
+static void most_read_completion(struct mbo *mbo)
+{
+       struct most_c_obj *c;
+
+       c = mbo->context;
+       if (unlikely((c->is_poisoned == true) || (mbo->status == MBO_E_CLOSE)))
+               goto release_mbo;
+
+       if (mbo->status == MBO_E_INVAL) {
+               nq_hdm_mbo(mbo);
+               atomic_inc(&c->mbo_nq_level);
+               return;
+       }
+
+       if (atomic_sub_and_test(1, &c->mbo_nq_level)) {
+               pr_info("WARN: rx device out of buffers\n");
+               c->is_starving = 1;
+       }
+
+       if (c->first_aim && c->first_aim->rx_completion &&
+           c->first_aim->rx_completion(mbo) == 0)
+               return;
+       if (c->second_aim && c->second_aim->rx_completion &&
+           c->second_aim->rx_completion(mbo) == 0)
+               return;
+       pr_info("WARN: no driver linked with this channel\n");
+       mbo->status = MBO_E_CLOSE;
+release_mbo:
+       trash_mbo(mbo);
+}
+
+/**
+ * most_start_channel - prepares a channel for communication
+ * @iface: pointer to interface instance
+ * @id: channel ID
+ *
+ * This prepares the channel for usage. Cross-checks whether the
+ * channel's been properly configured.
+ *
+ * Returns 0 on success or error code otherwise.
+ */
+int most_start_channel(struct most_interface *iface, int id)
+{
+       int num_buffer;
+       int ret;
+       struct most_c_obj *c = get_channel_by_iface(iface, id);
+
+       if (unlikely(!c))
+               return -EINVAL;
+
+       if (c->is_started)
+               return -EBUSY;
+
+       if (!try_module_get(iface->mod)) {
+               pr_info("failed to acquire HDM lock\n");
+               return -ENOLCK;
+       }
+       modref++;
+
+       c->cfg.extra_len = 0;
+       if (c->iface->configure(c->iface, c->channel_id, &c->cfg)) {
+               pr_info("channel configuration failed. Go check settings...\n");
+               ret = -EINVAL;
+               goto error;
+       }
+
+       init_waitqueue_head(&c->hdm_fifo_wq);
+
+       if (c->cfg.direction == MOST_CH_RX)
+               num_buffer = arm_mbo_chain(c, c->cfg.direction,
+                                          most_read_completion);
+       else
+               num_buffer = arm_mbo_chain(c, c->cfg.direction,
+                                          most_write_completion);
+       if (unlikely(0 == num_buffer)) {
+               pr_info("failed to allocate memory\n");
+               ret = -ENOMEM;
+               goto error;
+       }
+
+       ret = run_enqueue_thread(c, id);
+       if (ret)
+               goto error;
+
+       c->is_started = true;
+       c->is_starving = 0;
+       atomic_set(&c->mbo_ref, num_buffer);
+       return 0;
+error:
+       if (iface->mod)
+               module_put(iface->mod);
+       modref--;
+       return ret;
+}
+EXPORT_SYMBOL_GPL(most_start_channel);
+
+/**
+ * most_stop_channel - stops a running channel
+ * @iface: pointer to interface instance
+ * @id: channel ID
+ */
+int most_stop_channel(struct most_interface *iface, int id)
+{
+       struct most_c_obj *c;
+
+       if (unlikely((!iface) || (id >= iface->num_channels) || (id < 0))) {
+               pr_err("Bad interface or index out of range\n");
+               return -EINVAL;
+       }
+       c = get_channel_by_iface(iface, id);
+       if (unlikely(!c))
+               return -EINVAL;
+
+       if (!c->is_started)
+               return 0;
+
+       /* FIXME: we need to know calling AIM to reset only one link */
+       c->first_aim = NULL;
+       c->second_aim = NULL;
+       /* do not go into recursion calling aim->disconnect_channel */
+
+       mutex_lock(&c->stop_task_mutex);
+       if (c->hdm_enqueue_task)
+               kthread_stop(c->hdm_enqueue_task);
+       c->hdm_enqueue_task = NULL;
+       mutex_unlock(&c->stop_task_mutex);
+
+       mutex_lock(&deregister_mutex);
+       if (atomic_read(&c->inst->tainted)) {
+               mutex_unlock(&deregister_mutex);
+               return -ENODEV;
+       }
+       mutex_unlock(&deregister_mutex);
+
+       if (iface->mod && modref) {
+               module_put(iface->mod);
+               modref--;
+       }
+
+       c->is_poisoned = true;
+       if (c->iface->poison_channel(c->iface, c->channel_id)) {
+               pr_err("Cannot stop channel %d of mdev %s\n", c->channel_id,
+                      c->iface->description);
+               return -EAGAIN;
+       }
+       flush_trash_fifo(c);
+       flush_channel_fifos(c);
+
+#ifdef CMPL_INTERRUPTIBLE
+       if (wait_for_completion_interruptible(&c->cleanup)) {
+               pr_info("Interrupted while clean up ch %d\n", c->channel_id);
+               return -EINTR;
+       }
+#else
+       wait_for_completion(&c->cleanup);
+#endif
+       c->is_poisoned = false;
+       c->is_started = false;
+       return 0;
+}
+EXPORT_SYMBOL_GPL(most_stop_channel);
+
+/**
+ * most_register_aim - registers an AIM (driver) with the core
+ * @aim: instance of AIM to be registered
+ */
+int most_register_aim(struct most_aim *aim)
+{
+       struct most_aim_obj *aim_obj;
+
+       if (!aim) {
+               pr_err("Bad driver\n");
+               return -EINVAL;
+       }
+       aim_obj = create_most_aim_obj(aim->name);
+       if (!aim_obj) {
+               pr_info("failed to alloc driver object\n");
+               return -ENOMEM;
+       }
+       aim_obj->driver = aim;
+       aim->context = aim_obj;
+       pr_info("registered new application interfacing module %s\n",
+               aim->name);
+       list_add_tail(&aim_obj->list, &aim_list);
+       return 0;
+}
+EXPORT_SYMBOL_GPL(most_register_aim);
+
+/**
+ * most_deregister_aim - deregisters an AIM (driver) with the core
+ * @aim: AIM to be removed
+ */
+int most_deregister_aim(struct most_aim *aim)
+{
+       struct most_aim_obj *aim_obj;
+       struct most_c_obj *c, *tmp;
+       struct most_inst_obj *i, *i_tmp;
+
+       if (!aim) {
+               pr_err("Bad driver\n");
+               return -EINVAL;
+       }
+
+       aim_obj = aim->context;
+       if (!aim_obj) {
+               pr_info("driver not registered.\n");
+               return -EINVAL;
+       }
+       list_for_each_entry_safe(i, i_tmp, &instance_list, list) {
+               list_for_each_entry_safe(c, tmp, &i->channel_list, list) {
+                       if (c->first_aim == aim || c->second_aim == aim)
+                               aim->disconnect_channel(
+                                       c->iface, c->channel_id);
+                       if (c->first_aim == aim)
+                               c->first_aim = NULL;
+                       if (c->second_aim == aim)
+                               c->second_aim = NULL;
+               }
+       }
+       list_del(&aim_obj->list);
+       destroy_most_aim_obj(aim_obj);
+       pr_info("deregistering application interfacing module %s\n", aim->name);
+       return 0;
+}
+EXPORT_SYMBOL_GPL(most_deregister_aim);
+
+/**
+ * most_register_interface - registers an interface with core
+ * @iface: pointer to the instance of the interface description.
+ *
+ * Allocates and initializes a new interface instance and all of its channels.
+ * Returns a pointer to kobject or an error pointer.
+ */
+struct kobject *most_register_interface(struct most_interface *iface)
+{
+       unsigned int i;
+       int id;
+       char name[STRING_SIZE];
+       char channel_name[STRING_SIZE];
+       struct most_c_obj *c;
+       struct most_inst_obj *inst;
+
+       if (!iface || !iface->enqueue || !iface->configure ||
+           !iface->poison_channel || (iface->num_channels > MAX_CHANNELS)) {
+               pr_err("Bad interface or channel overflow\n");
+               return ERR_PTR(-EINVAL);
+       }
+
+       id = ida_simple_get(&mdev_id, 0, 0, GFP_KERNEL);
+       if (id < 0) {
+               pr_info("Failed to alloc mdev ID\n");
+               return ERR_PTR(id);
+       }
+       snprintf(name, STRING_SIZE, "mdev%d", id);
+
+       inst = create_most_inst_obj(name);
+       if (!inst) {
+               pr_info("Failed to allocate interface instance\n");
+               return ERR_PTR(-ENOMEM);
+       }
+
+       iface->priv = inst;
+       INIT_LIST_HEAD(&inst->channel_list);
+       inst->iface = iface;
+       inst->dev_id = id;
+       atomic_set(&inst->tainted, 0);
+       list_add_tail(&inst->list, &instance_list);
+
+       for (i = 0; i < iface->num_channels; i++) {
+               const char *name_suffix = iface->channel_vector[i].name_suffix;
+
+               if (!name_suffix)
+                       snprintf(channel_name, STRING_SIZE, "ch%d", i);
+               else if (name_suffix[0] == '@')
+                       snprintf(channel_name, STRING_SIZE, "ch%d%s", i,
+                                name_suffix);
+               else
+                       snprintf(channel_name, STRING_SIZE, "%s", name_suffix);
+
+               /* this increments the reference count of this instance */
+               c = create_most_c_obj(channel_name, &inst->kobj);
+               if (!c)
+                       goto free_instance;
+               inst->channel[i] = c;
+               c->is_starving = 0;
+               c->iface = iface;
+               c->inst = inst;
+               c->channel_id = i;
+               c->keep_mbo = false;
+               c->enqueue_halt = false;
+               c->is_poisoned = false;
+               c->is_started = false;
+               c->cfg.direction = 0;
+               c->cfg.data_type = 0;
+               c->cfg.num_buffers = 0;
+               c->cfg.buffer_size = 0;
+               c->cfg.subbuffer_size = 0;
+               c->cfg.packets_per_xact = 0;
+               spin_lock_init(&c->fifo_lock);
+               INIT_LIST_HEAD(&c->fifo);
+               INIT_LIST_HEAD(&c->trash_fifo);
+               INIT_LIST_HEAD(&c->halt_fifo);
+               init_completion(&c->cleanup);
+               atomic_set(&c->mbo_ref, 0);
+               mutex_init(&c->stop_task_mutex);
+               list_add_tail(&c->list, &inst->channel_list);
+       }
+       pr_info("registered new MOST device mdev%d (%s)\n",
+               inst->dev_id, iface->description);
+       return &inst->kobj;
+
+free_instance:
+       pr_info("Failed allocate channel(s)\n");
+       list_del(&inst->list);
+       destroy_most_inst_obj(inst);
+       return ERR_PTR(-ENOMEM);
+}
+EXPORT_SYMBOL_GPL(most_register_interface);
+
+/**
+ * most_deregister_interface - deregisters an interface with core
+ * @iface: pointer to the interface instance description.
+ *
+ * Before removing an interface instance from the list, all running
+ * channels are stopped and poisoned.
+ */
+void most_deregister_interface(struct most_interface *iface)
+{
+       struct most_inst_obj *i = iface->priv;
+       struct most_c_obj *c;
+
+       mutex_lock(&deregister_mutex);
+       if (unlikely(!i)) {
+               pr_info("Bad Interface\n");
+               mutex_unlock(&deregister_mutex);
+               return;
+       }
+       pr_info("deregistering MOST device %s (%s)\n", i->kobj.name,
+               iface->description);
+
+       atomic_set(&i->tainted, 1);
+       mutex_unlock(&deregister_mutex);
+
+       while (modref) {
+               if (iface->mod && modref)
+                       module_put(iface->mod);
+               modref--;
+       }
+
+       list_for_each_entry(c, &i->channel_list, list) {
+               if (!c->is_started)
+                       continue;
+
+               mutex_lock(&c->stop_task_mutex);
+               if (c->hdm_enqueue_task)
+                       kthread_stop(c->hdm_enqueue_task);
+               c->hdm_enqueue_task = NULL;
+               mutex_unlock(&c->stop_task_mutex);
+
+               if (iface->poison_channel(iface, c->channel_id))
+                       pr_err("Can't poison channel %d\n", c->channel_id);
+       }
+       ida_simple_remove(&mdev_id, i->dev_id);
+       list_del(&i->list);
+       destroy_most_inst_obj(i);
+}
+EXPORT_SYMBOL_GPL(most_deregister_interface);
+
+/**
+ * most_stop_enqueue - prevents core from enqueueing MBOs
+ * @iface: pointer to interface
+ * @id: channel id
+ *
+ * This is called by an HDM that _cannot_ attend to its duties and
+ * is imminent to get run over by the core. The core is not going to
+ * enqueue any further packets unless the flagging HDM calls
+ * most_resume enqueue().
+ */
+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;
+}
+EXPORT_SYMBOL_GPL(most_stop_enqueue);
+
+/**
+ * most_resume_enqueue - allow core to enqueue MBOs again
+ * @iface: pointer to interface
+ * @id: channel id
+ *
+ * This clears the enqueue halt flag and enqueues all MBOs currently
+ * sitting in the wait fifo.
+ */
+void most_resume_enqueue(struct most_interface *iface, int id)
+{
+       struct most_c_obj *c = get_channel_by_iface(iface, id);
+
+       if (unlikely(!c))
+               return;
+       c->enqueue_halt = false;
+
+       wake_up_interruptible(&c->hdm_fifo_wq);
+}
+EXPORT_SYMBOL_GPL(most_resume_enqueue);
+
+static int __init most_init(void)
+{
+       pr_info("init()\n");
+       INIT_LIST_HEAD(&instance_list);
+       INIT_LIST_HEAD(&aim_list);
+       mutex_init(&deregister_mutex);
+       ida_init(&mdev_id);
+
+       if (bus_register(&most_bus)) {
+               pr_info("Cannot register most bus\n");
+               goto exit;
+       }
+
+       most_class = class_create(THIS_MODULE, "most");
+       if (IS_ERR(most_class)) {
+               pr_info("No udev support.\n");
+               goto exit_bus;
+       }
+       if (driver_register(&mostcore)) {
+               pr_info("Cannot register core driver\n");
+               goto exit_class;
+       }
+
+       class_glue_dir =
+               device_create(most_class, NULL, 0, NULL, "mostcore");
+       if (!class_glue_dir)
+               goto exit_driver;
+
+       most_aim_kset =
+               kset_create_and_add("aims", NULL, &class_glue_dir->kobj);
+       if (!most_aim_kset)
+               goto exit_class_container;
+
+       most_inst_kset =
+               kset_create_and_add("devices", NULL, &class_glue_dir->kobj);
+       if (!most_inst_kset)
+               goto exit_driver_kset;
+
+       return 0;
+
+exit_driver_kset:
+       kset_unregister(most_aim_kset);
+exit_class_container:
+       device_destroy(most_class, 0);
+exit_driver:
+       driver_unregister(&mostcore);
+exit_class:
+       class_destroy(most_class);
+exit_bus:
+       bus_unregister(&most_bus);
+exit:
+       return -ENOMEM;
+}
+
+static void __exit most_exit(void)
+{
+       struct most_inst_obj *i, *i_tmp;
+       struct most_aim_obj *d, *d_tmp;
+
+       pr_info("exit core module\n");
+       list_for_each_entry_safe(d, d_tmp, &aim_list, list) {
+               destroy_most_aim_obj(d);
+       }
+
+       list_for_each_entry_safe(i, i_tmp, &instance_list, list) {
+               list_del(&i->list);
+               destroy_most_inst_obj(i);
+       }
+       kset_unregister(most_inst_kset);
+       kset_unregister(most_aim_kset);
+       device_destroy(most_class, 0);
+       driver_unregister(&mostcore);
+       class_destroy(most_class);
+       bus_unregister(&most_bus);
+       ida_destroy(&mdev_id);
+}
+
+module_init(most_init);
+module_exit(most_exit);
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Christian Gromm <christian.gromm@microchip.com>");
+MODULE_DESCRIPTION("Core module of stacked MOST Linux driver");
diff --git a/drivers/staging/most/mostcore/mostcore.h b/drivers/staging/most/mostcore/mostcore.h
new file mode 100644 (file)
index 0000000..299c7d5
--- /dev/null
@@ -0,0 +1,316 @@
+/*
+ * mostcore.h - Interface between MostCore,
+ *   Hardware Dependent Module (HDM) and Application Interface Module (AIM).
+ *
+ * Copyright (C) 2013-2015, Microchip Technology Germany II GmbH & Co. KG
+ *
+ * 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 file is licensed under GPLv2.
+ */
+
+/*
+ * Authors:
+ *   Andrey Shvetsov <andrey.shvetsov@k2l.de>
+ *   Christian Gromm <christian.gromm@microchip.com>
+ *   Sebastian Graf
+ */
+
+#ifndef __MOST_CORE_H__
+#define __MOST_CORE_H__
+
+#include <linux/types.h>
+
+struct kobject;
+struct module;
+
+/**
+ * Interface type
+ */
+enum most_interface_type {
+       ITYPE_LOOPBACK = 1,
+       ITYPE_I2C,
+       ITYPE_I2S,
+       ITYPE_TSI,
+       ITYPE_HBI,
+       ITYPE_MEDIALB_DIM,
+       ITYPE_MEDIALB_DIM2,
+       ITYPE_USB,
+       ITYPE_PCIE
+};
+
+/**
+ * Channel direction.
+ */
+enum most_channel_direction {
+       MOST_CH_RX = 1 << 0,
+       MOST_CH_TX = 1 << 1,
+};
+
+/**
+ * Channel data type.
+ */
+enum most_channel_data_type {
+       MOST_CH_CONTROL = 1 << 0,
+       MOST_CH_ASYNC = 1 << 1,
+       MOST_CH_ISOC_AVP = 1 << 2,
+       MOST_CH_SYNC = 1 << 5,
+};
+
+
+enum mbo_status_flags {
+       /* MBO was processed successfully (data was send or received )*/
+       MBO_SUCCESS = 0,
+       /* The MBO contains wrong or missing information.  */
+       MBO_E_INVAL,
+       /* MBO was completed as HDM Channel will be closed */
+       MBO_E_CLOSE,
+};
+
+/**
+ * struct most_channel_capability - Channel capability
+ * @direction: Supported channel directions.
+ * The value is bitwise OR-combination of the values from the
+ * enumeration most_channel_direction. Zero is allowed value and means
+ * "channel may not be used".
+ * @data_type: Supported channel data types.
+ * The value is bitwise OR-combination of the values from the
+ * enumeration most_channel_data_type. Zero is allowed value and means
+ * "channel may not be used".
+ * @num_buffer_packet: Maximum number of buffers supported by this channel
+ * for packet data types (Async,Control,QoS)
+ * @buffer_size_packet: Maximum buffer size supported by this channel
+ * for packet data types (Async,Control,QoS)
+ * @num_buffer_streaming: Maximum number of buffers supported by this channel
+ * for streaming data types (Sync,AV Packetized)
+ * @buffer_size_streaming: Maximum buffer size supported by this channel
+ * for streaming data types (Sync,AV Packetized)
+ * @name_suffix: Optional suffix providean by an HDM that is attached to the
+ * regular channel name.
+ *
+ * Describes the capabilities of a MostCore channel like supported Data Types
+ * and directions. This information is provided by an HDM for the MostCore.
+ *
+ * The Core creates read only sysfs attribute files in
+ * /sys/devices/virtual/most/mostcore/devices/mdev-#/mdev#-ch#/ with the
+ * following attributes:
+ *     -available_directions
+ *     -available_datatypes
+ *     -number_of_packet_buffers
+ *     -number_of_stream_buffers
+ *     -size_of_packet_buffer
+ *     -size_of_stream_buffer
+ * where content of each file is a string with all supported properties of this
+ * very channel attribute.
+ */
+struct most_channel_capability {
+       u16 direction;
+       u16 data_type;
+       u16 num_buffers_packet;
+       u16 buffer_size_packet;
+       u16 num_buffers_streaming;
+       u16 buffer_size_streaming;
+       char *name_suffix;
+};
+
+/**
+ * struct most_channel_config - stores channel configuration
+ * @direction: direction of the channel
+ * @data_type: data type travelling over this channel
+ * @num_buffers: number of buffers
+ * @buffer_size: size of a buffer for AIM.
+ * Buffer size may be cutted down by HDM in a configure callback
+ * to match to a given interface and channel type.
+ * @extra_len: additional buffer space for internal HDM purposes like padding.
+ * May be set by HDM in a configure callback if needed.
+ * @subbuffer_size: size of a subbuffer
+ * @packets_per_xact: number of MOST frames that are packet inside one USB
+ *                   packet. This is USB specific
+ *
+ * Describes the configuration for a MostCore channel. This information is
+ * provided from the MostCore to a HDM (like the Medusa PCIe Interface) as a
+ * parameter of the "configure" function call.
+ */
+struct most_channel_config {
+       enum most_channel_direction direction;
+       enum most_channel_data_type data_type;
+       u16 num_buffers;
+       u16 buffer_size;
+       u16 extra_len;
+       u16 subbuffer_size;
+       u16 packets_per_xact;
+};
+
+/*
+ * struct mbo - MOST Buffer Object.
+ * @context: context for core completion handler
+ * @priv: private data for HDM
+ *
+ *     public: documented fields that are used for the communications
+ *     between MostCore and HDMs
+ *
+ * @list: list head for use by the mbo's current owner
+ * @ifp: (in) associated interface instance
+ * @hdm_channel_id: (in) HDM channel instance
+ * @virt_address: (in) kernel virtual address of the buffer
+ * @bus_address: (in) bus address of the buffer
+ * @buffer_length: (in) buffer payload length
+ * @processed_length: (out) processed length
+ * @status: (out) transfer status
+ * @complete: (in) completion routine
+ *
+ * The MostCore allocates and initializes the MBO.
+ *
+ * The HDM receives MBO for transfer from MostCore with the call to enqueue().
+ * The HDM copies the data to- or from the buffer depending on configured
+ * channel direction, set "processed_length" and "status" and completes
+ * the transfer procedure by calling the completion routine.
+ *
+ * At the end the MostCore deallocates the MBO or recycles it for further
+ * transfers for the same or different HDM.
+ *
+ * Directions of usage:
+ * The core driver should never access any MBO fields (even if marked
+ * as "public") while the MBO is owned by an HDM. The ownership starts with
+ * the call of enqueue() and ends with the call of its complete() routine.
+ *
+ *                                     II.
+ * Every HDM attached to the core driver _must_ ensure that it returns any MBO
+ * it owns (due to a previous call to enqueue() by the core driver) before it
+ * de-registers an interface or gets unloaded from the kernel. If this direction
+ * is violated memory leaks will occur, since the core driver does _not_ track
+ * MBOs it is currently not in control of.
+ *
+ */
+struct mbo {
+       void *context;
+       void *priv;
+       struct list_head list;
+       struct most_interface *ifp;
+       u16 hdm_channel_id;
+       void *virt_address;
+       dma_addr_t bus_address;
+       u16 buffer_length;
+       u16 processed_length;
+       enum mbo_status_flags status;
+       void (*complete)(struct mbo *);
+};
+
+/**
+ * Interface instance description.
+ *
+ * Describes one instance of an interface like Medusa PCIe or Vantage USB.
+ * This structure is allocated and initialized in the HDM. MostCore may not
+ * modify this structure.
+ *
+ * @interface Interface type. \sa most_interface_type.
+ * @description PRELIMINARY.
+ *   Unique description of the device instance from point of view of the
+ *   interface in free text form (ASCII).
+ *   It may be a hexadecimal presentation of the memory address for the MediaLB
+ *   IP or USB device ID with USB properties for USB interface, etc.
+ * @num_channels Number of channels and size of the channel_vector.
+ * @channel_vector Properties of the channels.
+ *   Array index represents channel ID by the driver.
+ * @configure Callback to change data type for the channel of the
+ *   interface instance. May be zero if the instance of the interface is not
+ *   configurable. Parameter channel_config describes direction and data
+ *   type for the channel, configured by the higher level. The content of
+ * @enqueue Delivers MBO to the HDM for processing.
+ *   After HDM completes Rx- or Tx- operation the processed MBO shall
+ *   be returned back to the MostCore using completion routine.
+ *   The reason to get the MBO delivered from the MostCore after the channel
+ *   is poisoned is the re-opening of the channel by the application.
+ *   In this case the HDM shall hold MBOs and service the channel as usual.
+ *   The HDM must be able to hold at least one MBO for each channel.
+ *   The callback returns a negative value on error, otherwise 0.
+ * @poison_channel Informs HDM about closing the channel. The HDM shall
+ *   cancel all transfers and synchronously or asynchronously return
+ *   all enqueued for this channel MBOs using the completion routine.
+ *   The callback returns a negative value on error, otherwise 0.
+ * @request_netinfo: triggers retrieving of network info from the HDM by
+ *   means of "Message exchange over MDP/MEP"
+ * @priv Private field used by mostcore to store context information.
+ */
+struct most_interface {
+       struct module *mod;
+       enum most_interface_type interface;
+       const char *description;
+       int num_channels;
+       struct most_channel_capability *channel_vector;
+       int (*configure)(struct most_interface *iface, int channel_idx,
+                        struct most_channel_config *channel_config);
+       int (*enqueue)(struct most_interface *iface, int channel_idx,
+                      struct mbo *mbo);
+       int (*poison_channel)(struct most_interface *iface, int channel_idx);
+       void (*request_netinfo)(struct most_interface *iface, int channel_idx);
+       void *priv;
+};
+
+/**
+ * struct most_aim - identifies MOST device driver to mostcore
+ * @name: Driver name
+ * @probe_channel: function for core to notify driver about channel connection
+ * @disconnect_channel: notification that a certain channel isn't available anymore
+ * @rx_completion: completion handler for received packets
+ * @tx_completion: completion handler for transmitted packets
+ * @context: context pointer to be used by mostcore
+ */
+struct most_aim {
+       const char *name;
+       int (*probe_channel)(struct most_interface *iface, int channel_idx,
+                            struct most_channel_config *cfg,
+                            struct kobject *parent, char *name);
+       int (*disconnect_channel)(struct most_interface *iface,
+                                 int channel_idx);
+       int (*rx_completion)(struct mbo *mbo);
+       int (*tx_completion)(struct most_interface *iface, int channel_idx);
+       void *context;
+};
+
+/**
+ * most_register_interface - Registers instance of the interface.
+ * @iface: Pointer to the interface instance description.
+ *
+ * Returns a pointer to the kobject of the generated instance.
+ *
+ * Note: HDM has to ensure that any reference held on the kobj is
+ * released before deregistering the interface.
+ */
+struct kobject *most_register_interface(struct most_interface *iface);
+
+/**
+ * Deregisters instance of the interface.
+ * @intf_instance Pointer to the interface instance description.
+ */
+void most_deregister_interface(struct most_interface *iface);
+int most_submit_mbo(struct mbo *mbo);
+
+/**
+ * most_stop_enqueue - prevents core from enqueing MBOs
+ * @iface: pointer to interface
+ * @channel_idx: channel index
+ */
+void most_stop_enqueue(struct most_interface *iface, int channel_idx);
+
+/**
+ * most_resume_enqueue - allow core to enqueue MBOs again
+ * @iface: pointer to interface
+ * @channel_idx: channel index
+ *
+ * This clears the enqueue halt flag and enqueues all MBOs currently
+ * in wait fifo.
+ */
+void most_resume_enqueue(struct most_interface *iface, int channel_idx);
+int most_register_aim(struct most_aim *aim);
+int most_deregister_aim(struct most_aim *aim);
+struct mbo *most_get_mbo(struct most_interface *iface, int channel_idx);
+void most_put_mbo(struct mbo *mbo);
+int most_start_channel(struct most_interface *iface, int channel_idx);
+int most_stop_channel(struct most_interface *iface, int channel_idx);
+
+
+#endif /* MOST_CORE_H_ */
index 7285c64bac240099743f4427d9aa50e9a4dd77c4..ad30ce4206ef404241ab3a5a4f12994036f11321 100644 (file)
@@ -948,7 +948,6 @@ static const struct of_device_id spinand_dt[] = {
 static struct spi_driver spinand_driver = {
        .driver = {
                .name           = "mt29f",
-               .bus            = &spi_bus_type,
                .owner          = THIS_MODULE,
                .of_match_table = spinand_dt,
        },
index 77c3c3522afa2036e595ae35978105ca99be00db..e914147d737976701f1c87dda632c325e39ff103 100644 (file)
@@ -163,7 +163,7 @@ static void xls_gmac_init(void)
        switch (nlm_prom_info.board_major_version) {
        case 12:
                /* first block RGMII or XAUI, use RGMII */
-               ndata0.phy_interface = PHY_INTERFACE_MODE_RGMII,
+               ndata0.phy_interface = PHY_INTERFACE_MODE_RGMII;
                ndata0.tx_stnid[0] = FMN_STNID_GMAC0_TX0;
                ndata0.phy_addr[0] = 0;
 
index beb7aac9c289077fb75af9a10eaf0375b8bb51ba..51dcb611702f1fd1f274e989a57dd14fda85982e 100644 (file)
@@ -118,9 +118,10 @@ static void cvm_oct_rgmii_poll(struct net_device *dev)
        }
 
        /* Since the 10Mbps preamble workaround is allowed we need to enable
-          preamble checking, FCS stripping, and clear error bits on
-          every speed change. If errors occur during 10Mbps operation
-          the above code will change this stuff */
+        * preamble checking, FCS stripping, and clear error bits on
+        * every speed change. If errors occur during 10Mbps operation
+        * the above code will change this stuff
+        */
        cvm_oct_set_hw_preamble(priv, true);
 
        if (priv->phydev == NULL) {
index 7c1c1b052b7d172a7ec7eb8fedc11a96af3f92c0..e2df041ca82d4e9f7c978c62f7ae9ea4a9c1bf8d 100644 (file)
@@ -396,10 +396,12 @@ dont_put_skbuff_in_hw:
 
        /* Check if we can use the hardware checksumming */
        if ((skb->protocol == htons(ETH_P_IP)) &&
-           (ip_hdr(skb)->version == 4) && (ip_hdr(skb)->ihl == 5) &&
-           ((ip_hdr(skb)->frag_off == 0) || (ip_hdr(skb)->frag_off == htons(1 << 14)))
-           && ((ip_hdr(skb)->protocol == IPPROTO_TCP)
-               || (ip_hdr(skb)->protocol == IPPROTO_UDP))) {
+           (ip_hdr(skb)->version == 4) &&
+           (ip_hdr(skb)->ihl == 5) &&
+           ((ip_hdr(skb)->frag_off == 0) ||
+            (ip_hdr(skb)->frag_off == htons(1 << 14))) &&
+           ((ip_hdr(skb)->protocol == IPPROTO_TCP) ||
+            (ip_hdr(skb)->protocol == IPPROTO_UDP))) {
                /* Use hardware checksum calc */
                pko_command.s.ipoffp1 = sizeof(struct ethhdr) + 1;
        }
index f9dba23a375914fc3fe4807f901860300e9bfc64..0718b35f7335758794d8e65b44796543f275da3c 100644 (file)
@@ -157,6 +157,7 @@ static void cvm_oct_configure_common_hw(void)
 #ifdef __LITTLE_ENDIAN
        {
                union cvmx_ipd_ctl_status ipd_ctl_status;
+
                ipd_ctl_status.u64 = cvmx_read_csr(CVMX_IPD_CTL_STATUS);
                ipd_ctl_status.s.pkt_lend = 1;
                ipd_ctl_status.s.wqe_lend = 1;
index 301fee8625ed1ef3aac22edf59a0ae123af47a5c..b6cfecbeabf7ec6efb9c8eb22dabf8a468092bb7 100644 (file)
@@ -327,6 +327,7 @@ static void oz_usb_handle_ep_data(struct oz_usb_ctx *usb_ctx,
                                (struct oz_multiple_fixed *)data_hdr;
                        u8 *data = body->data;
                        unsigned int n;
+
                        if (!body->unit_size ||
                                len < sizeof(struct oz_multiple_fixed) - 1)
                                break;
index bda208da514e3b5b96da3ad06d7beeda659a8651..3e9ee7ee6be2a20d40ce01a4c203c24635c89f7c 100644 (file)
@@ -781,14 +781,18 @@ static void long_sleep(int ms)
                schedule_timeout_interruptible(msecs_to_jiffies(ms));
 }
 
-/* send a serial byte to the LCD panel. The caller is responsible for locking
-   if needed. */
+/*
+ * send a serial byte to the LCD panel. The caller is responsible for locking
+ * if needed.
+ */
 static void lcd_send_serial(int byte)
 {
        int bit;
 
-       /* the data bit is set on D0, and the clock on STROBE.
-        * LCD reads D0 on STROBE's rising edge. */
+       /*
+        * the data bit is set on D0, and the clock on STROBE.
+        * LCD reads D0 on STROBE's rising edge.
+        */
        for (bit = 0; bit < 8; bit++) {
                bits.cl = BIT_CLR;      /* CLK low */
                panel_set_bits();
index 581af88e302477f9b9fe8ff46ac0411e84d71e49..5c45f8a8c2cf77053d73456be62bdc159689812c 100644 (file)
@@ -379,7 +379,8 @@ void        expire_timeout_chk(struct adapter *padapter)
                        if (pmlmeext->active_keep_alive_check) {
                                int stainfo_offset;
 
-                               stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
+                               stainfo_offset =
+                                       rtw_stainfo_offset(pstapriv, psta);
                                if (stainfo_offset_valid(stainfo_offset))
                                        chk_alive_list[chk_alive_num++] = stainfo_offset;
                                continue;
@@ -1584,7 +1585,7 @@ void bss_cap_update_on_sta_join(struct adapter *padapter, struct sta_info *psta)
                }
        }
 
-       if (!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT)) {
+       if (!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT_TIME)) {
                if (!psta->no_short_slot_time_set) {
                        psta->no_short_slot_time_set = 1;
 
index bc3fe10ff247014c32ad4445a141173ee8b28fd0..993c7db87a1a5b83e79bdd8bc6e23f414a894c05 100644 (file)
@@ -219,6 +219,7 @@ int proc_get_ht_option(char *page, char **start,
        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;
@@ -588,6 +589,7 @@ int proc_set_rx_signal(struct file *file, const char __user *buffer,
 
        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;
@@ -917,7 +919,7 @@ int proc_get_best_channel(char *page, char **start,
                /*  5G */
                if (pmlmeext->channel_set[i].ChannelNum >= 36 &&
                    pmlmeext->channel_set[i].ChannelNum < 140) {
-                        /*  Find primary channel */
+                       /*  Find primary channel */
                        if (((pmlmeext->channel_set[i].ChannelNum - 36) % 8 == 0) &&
                            (pmlmeext->channel_set[i].rx_count < pmlmeext->channel_set[index_5G].rx_count)) {
                                index_5G = i;
@@ -927,7 +929,7 @@ int proc_get_best_channel(char *page, char **start,
 
                if (pmlmeext->channel_set[i].ChannelNum >= 149 &&
                    pmlmeext->channel_set[i].ChannelNum < 165) {
-                        /*  find primary channel */
+                       /*  find primary channel */
                        if (((pmlmeext->channel_set[i].ChannelNum - 149) % 8 == 0) &&
                            (pmlmeext->channel_set[i].rx_count < pmlmeext->channel_set[index_5G].rx_count)) {
                                index_5G = i;
index dbaba2c6cce506946ffd7ef65eea26044c2eb11c..7b99ea91a9e6caf1e212537f82a2116c473534f6 100644 (file)
@@ -551,7 +551,7 @@ int Efuse_PgPacketRead(struct adapter *pAdapter, u8 offset, u8 *data)
                                bContinual = false;
                        }
                } else if (ReadState & PG_STATE_DATA) {
-               /*   Data section Read ------------- */
+                       /*   Data section Read ------------- */
                        efuse_WordEnableDataRead(hworden, tmpdata, data);
                        efuse_addr = efuse_addr + (word_cnts*2)+1;
                        ReadState = PG_STATE_HEADER;
index 11b780d6c4ab6bbea68e8ccdb60ba1ba800840b2..c3c582881a091e5294376e3436546e27ee5ed604 100644 (file)
@@ -19,6 +19,8 @@
  ******************************************************************************/
 #define _IEEE80211_C
 
+#include <linux/ieee80211.h>
+
 #include <drv_types.h>
 #include <osdep_intf.h>
 #include <ieee80211.h>
@@ -1042,7 +1044,7 @@ enum parse_res rtw_ieee802_11_parse_elems(u8 *start, uint len,
                        elems->timeout_int = pos;
                        elems->timeout_int_len = elen;
                        break;
-               case WLAN_EID_HT_CAP:
+               case WLAN_EID_HT_CAPABILITY:
                        elems->ht_capabilities = pos;
                        elems->ht_capabilities_len = elen;
                        break;
index 8c05cb021c46a467c644af2efb4b289744a7f314..22f5b45f5f7fcb68d29334801221e2c434e1c9ef 100644 (file)
@@ -183,7 +183,7 @@ u8 rtw_set_802_11_bssid(struct adapter *padapter, u8 *bssid)
                        if (check_fwstate(pmlmepriv, _FW_LINKED) == true)
                                rtw_indicate_disconnect(padapter);
 
-                       rtw_free_assoc_resources(padapter, 1);
+                       rtw_free_assoc_resources(padapter);
 
                        if ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == true)) {
                                _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE);
@@ -271,7 +271,7 @@ u8 rtw_set_802_11_ssid(struct adapter *padapter, struct ndis_802_11_ssid *ssid)
                                        if (check_fwstate(pmlmepriv, _FW_LINKED) == true)
                                                rtw_indicate_disconnect(padapter);
 
-                                       rtw_free_assoc_resources(padapter, 1);
+                                       rtw_free_assoc_resources(padapter);
 
                                        if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == true) {
                                                _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE);
@@ -293,7 +293,7 @@ u8 rtw_set_802_11_ssid(struct adapter *padapter, struct ndis_802_11_ssid *ssid)
                        if (check_fwstate(pmlmepriv, _FW_LINKED) == true)
                                rtw_indicate_disconnect(padapter);
 
-                       rtw_free_assoc_resources(padapter, 1);
+                       rtw_free_assoc_resources(padapter);
 
                        if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == true) {
                                _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE);
@@ -366,7 +366,7 @@ u8 rtw_set_802_11_infrastructure_mode(struct adapter *padapter,
 
                if ((check_fwstate(pmlmepriv, _FW_LINKED)) ||
                    (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)))
-                       rtw_free_assoc_resources(padapter, 1);
+                       rtw_free_assoc_resources(padapter);
 
                if ((*pold_state == Ndis802_11Infrastructure) || (*pold_state == Ndis802_11IBSS)) {
                        if (check_fwstate(pmlmepriv, _FW_LINKED) == true)
@@ -415,7 +415,7 @@ u8 rtw_set_802_11_disassociate(struct adapter *padapter)
 
                rtw_disassoc_cmd(padapter, 0, true);
                rtw_indicate_disconnect(padapter);
-               rtw_free_assoc_resources(padapter, 1);
+               rtw_free_assoc_resources(padapter);
                rtw_pwr_wakeup(padapter);
        }
 
index 05584515c5b4d6c00a111a92dbb5a0a9aee7e9d4..2b917a18e228734abcc66c4d73712109cb1b44f7 100644 (file)
@@ -19,6 +19,7 @@
  ******************************************************************************/
 #define _RTW_MLME_C_
 
+#include <linux/ieee80211.h>
 
 #include <osdep_service.h>
 #include <drv_types.h>
@@ -160,7 +161,7 @@ exit:
        return pnetwork;
 }
 
-static void _rtw_free_network(struct   mlme_priv *pmlmepriv , struct wlan_network *pnetwork, u8 isfreeall)
+static void _rtw_free_network(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork, u8 isfreeall)
 {
        u32 curr_time, delta_time;
        u32 lifetime = SCANQUEUE_LIFETIME;
@@ -352,8 +353,8 @@ int is_same_network(struct wlan_bssid_ex *src, struct wlan_bssid_ex *dst)
                ((!memcmp(src->Ssid.Ssid, dst->Ssid.Ssid, src->Ssid.SsidLength)) == true) &&
                ((s_cap & WLAN_CAPABILITY_IBSS) ==
                (d_cap & WLAN_CAPABILITY_IBSS)) &&
-               ((s_cap & WLAN_CAPABILITY_BSS) ==
-               (d_cap & WLAN_CAPABILITY_BSS)));
+               ((s_cap & WLAN_CAPABILITY_ESS) ==
+               (d_cap & WLAN_CAPABILITY_ESS)));
 }
 
 struct wlan_network    *rtw_get_oldest_wlan_network(struct __queue *scanned_queue)
@@ -581,7 +582,7 @@ static int rtw_is_desired_network(struct adapter *adapter, struct wlan_network *
 }
 
 /* TODO: Perry: For Power Management */
-void rtw_atimdone_event_callback(struct adapter        *adapter , u8 *pbuf)
+void rtw_atimdone_event_callback(struct adapter *adapter, u8 *pbuf)
 {
        RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("receive atimdone_evet\n"));
        return;
@@ -614,7 +615,7 @@ void rtw_survey_event_callback(struct adapter       *adapter, u8 *pbuf)
                        spin_lock_bh(&(pmlmepriv->scanned_queue.lock));
                        ibss_wlan = rtw_find_network(&pmlmepriv->scanned_queue,  pnetwork->MacAddress);
                        if (ibss_wlan) {
-                               memcpy(ibss_wlan->network.IEs , pnetwork->IEs, 8);
+                               memcpy(ibss_wlan->network.IEs, pnetwork->IEs, 8);
                                spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
                                goto exit;
                        }
@@ -692,8 +693,8 @@ void rtw_surveydone_event_callback(struct adapter   *adapter, u8 *pbuf)
                        pmlmepriv->to_join = false;
                        s_ret = rtw_select_and_join_from_scanned_queue(pmlmepriv);
                        if (_SUCCESS == s_ret) {
-                            mod_timer(&pmlmepriv->assoc_timer,
-                                      jiffies + msecs_to_jiffies(MAX_JOIN_TIMEOUT));
+                               mod_timer(&pmlmepriv->assoc_timer,
+                                       jiffies + msecs_to_jiffies(MAX_JOIN_TIMEOUT));
                        } else if (s_ret == 2) { /* there is no need to wait for join */
                                _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
                                rtw_indicate_connect(adapter);
@@ -703,7 +704,7 @@ void rtw_surveydone_event_callback(struct adapter   *adapter, u8 *pbuf)
                                        if (--pmlmepriv->to_roaming == 0 ||
                                            _SUCCESS != rtw_sitesurvey_cmd(adapter, &pmlmepriv->assoc_ssid, 1, NULL, 0)) {
                                                pmlmepriv->to_roaming = 0;
-                                               rtw_free_assoc_resources(adapter, 1);
+                                               rtw_free_assoc_resources(adapter);
                                                rtw_indicate_disconnect(adapter);
                                        } else {
                                                pmlmepriv->to_join = true;
@@ -757,7 +758,19 @@ static void free_scanqueue(struct  mlme_priv *pmlmepriv)
 /*
 *rtw_free_assoc_resources: the caller has to lock pmlmepriv->lock
 */
-void rtw_free_assoc_resources(struct adapter *adapter, int lock_scanned_queue)
+void rtw_free_assoc_resources(struct adapter *adapter)
+{
+       struct  mlme_priv *pmlmepriv = &adapter->mlmepriv;
+
+       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
+       rtw_free_assoc_resources_locked(adapter);
+       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
+}
+
+/*
+*rtw_free_assoc_resources_locked: the caller has to lock pmlmepriv->lock
+*/
+void rtw_free_assoc_resources_locked(struct adapter *adapter)
 {
        struct wlan_network *pwlan = NULL;
        struct  mlme_priv *pmlmepriv = &adapter->mlmepriv;
@@ -792,8 +805,6 @@ void rtw_free_assoc_resources(struct adapter *adapter, int lock_scanned_queue)
                rtw_init_bcmc_stainfo(adapter);
        }
 
-       if (lock_scanned_queue)
-               spin_lock_bh(&(pmlmepriv->scanned_queue.lock));
 
        pwlan = rtw_find_network(&pmlmepriv->scanned_queue, tgt_network->network.MacAddress);
        if (pwlan)
@@ -804,8 +815,6 @@ void rtw_free_assoc_resources(struct adapter *adapter, int lock_scanned_queue)
        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;
 }
 
@@ -1301,7 +1310,7 @@ void rtw_stadel_event_callback(struct adapter *adapter, u8 *pbuf)
 
                rtw_free_uc_swdec_pending_queue(adapter);
 
-               rtw_free_assoc_resources(adapter, 1);
+               rtw_free_assoc_resources(adapter);
                rtw_indicate_disconnect(adapter);
                spin_lock_bh(&(pmlmepriv->scanned_queue.lock));
                /*  remove the network entry in scanned_queue */
@@ -1382,7 +1391,7 @@ void _rtw_join_timeout_handler (unsigned long data)
                                DBG_88E("%s try another roaming\n", __func__);
                                do_join_r = rtw_do_join(adapter);
                                if (_SUCCESS != do_join_r) {
-                                       DBG_88E("%s roaming do_join return %d\n", __func__ , do_join_r);
+                                       DBG_88E("%s roaming do_join return %d\n", __func__, do_join_r);
                                        continue;
                                }
                                break;
@@ -1556,7 +1565,7 @@ int rtw_select_and_join_from_scanned_queue(struct mlme_priv *pmlmepriv)
 
                rtw_disassoc_cmd(adapter, 0, true);
                rtw_indicate_disconnect(adapter);
-               rtw_free_assoc_resources(adapter, 0);
+               rtw_free_assoc_resources_locked(adapter);
        }
 
        rtw_hal_get_def_var(adapter, HAL_DEF_IS_SUPPORT_ANT_DIV, &(supp_ant_div));
@@ -1997,7 +2006,7 @@ unsigned int rtw_restructure_ht_ie(struct adapter *padapter, u8 *in_ie, u8 *out_
                p = rtw_get_ie(in_ie+12, _HT_ADD_INFO_IE_, &ielen, in_len-12);
                if (p && (ielen == sizeof(struct ieee80211_ht_addt_info))) {
                        out_len = *pout_len;
-                       rtw_set_ie(out_ie+out_len, _HT_ADD_INFO_IE_, ielen, p+2 , pout_len);
+                       rtw_set_ie(out_ie+out_len, _HT_ADD_INFO_IE_, ielen, p+2, pout_len);
                }
        }
        return phtpriv->ht_option;
index a0b8f665fa2f5546f23b584abb9248c1ba35d652..935b48eef8b1f84a6cf57792985c216277eeb0fc 100644 (file)
@@ -1096,7 +1096,7 @@ static void issue_assocreq(struct adapter *padapter)
 
                /*  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 */
+                       /*  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))
                                break;
@@ -2932,7 +2932,7 @@ static unsigned int OnAuthClient(struct adapter *padapter,
 
        if (seq == 2) {
                if (pmlmeinfo->auth_algo == dot11AuthAlgrthm_Shared) {
-                        /*  legendary shared system */
+                       /*  legendary shared system */
                        p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + _AUTH_IE_OFFSET_, _CHLGETXT_IE_, (int *)&len,
                                pkt_len - WLAN_HDR_A3_LEN - _AUTH_IE_OFFSET_);
 
@@ -3367,7 +3367,7 @@ static unsigned int OnAssocReq(struct adapter *padapter,
        spin_unlock_bh(&pstapriv->asoc_list_lock);
 
        /*  now the station is qualified to join our BSS... */
-       if (pstat && (pstat->state & WIFI_FW_ASSOC_SUCCESS) && (_STATS_SUCCESSFUL_ == status)) {
+       if ((pstat->state & WIFI_FW_ASSOC_SUCCESS) && (_STATS_SUCCESSFUL_ == status)) {
                /* 1 bss_cap_update & sta_info_update */
                bss_cap_update_on_sta_join(padapter, pstat);
                sta_info_update(padapter, pstat);
@@ -4155,8 +4155,8 @@ static void _mgt_dispatcher(struct adapter *padapter, struct mlme_handler *ptabl
        u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
        u8 *pframe = precv_frame->rx_data;
 
-         if (ptable->func) {
-        /* receive the frames that ra(a1) is my address or ra(a1) is bc address. */
+       if (ptable->func) {
+               /* receive the frames that ra(a1) is my address or ra(a1) is bc address. */
                if (memcmp(GetAddr1Ptr(pframe), myid(&padapter->eeprompriv), ETH_ALEN) &&
                    memcmp(GetAddr1Ptr(pframe), bc_addr, ETH_ALEN))
                        return;
index ec0a8a4cdc6e65c29aa9b6b42b752028090d7b6f..9765946466ab6ad7d7f4a55eaa2c836b83926886 100644 (file)
@@ -70,7 +70,7 @@ static int rtw_hw_suspend(struct adapter *padapter)
                }
        }
        /* s2-3. */
-       rtw_free_assoc_resources(padapter, 1);
+       rtw_free_assoc_resources(padapter);
 
        /* s2-4. */
        rtw_free_network_queue(padapter, true);
@@ -549,12 +549,6 @@ void rtw_init_pwrctrl_priv(struct adapter *padapter)
                    (unsigned long)padapter);
 }
 
-inline void rtw_set_ips_deny(struct 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 struct adapter structure
index 8501eb89882491126ea4521a2dacb52124eda16f..44eeb03213e6fec788e4108d7b01fcd6befe4a74 100644 (file)
@@ -74,10 +74,8 @@ int _rtw_init_recv_priv(struct recv_priv *precvpriv, struct adapter *padapter)
 
        precvpriv->pallocated_frame_buf = vzalloc(NR_RECVFRAME * sizeof(struct recv_frame) + RXFRAME_ALIGN_SZ);
 
-       if (precvpriv->pallocated_frame_buf == NULL) {
-               res = _FAIL;
-               goto exit;
-       }
+       if (!precvpriv->pallocated_frame_buf)
+               return _FAIL;
 
        precvpriv->precv_frame_buf = (u8 *)N_BYTE_ALIGMENT((size_t)(precvpriv->pallocated_frame_buf), RXFRAME_ALIGN_SZ);
 
@@ -89,7 +87,7 @@ int _rtw_init_recv_priv(struct recv_priv *precvpriv, struct adapter *padapter)
                list_add_tail(&(precvframe->list),
                                     &(precvpriv->free_recv_queue.queue));
 
-               res = rtw_os_recv_resource_alloc(padapter, precvframe);
+               rtw_os_recv_resource_alloc(precvframe);
 
                precvframe->len = 0;
 
@@ -107,8 +105,6 @@ int _rtw_init_recv_priv(struct recv_priv *precvpriv, struct adapter *padapter)
        precvpriv->signal_stat_sampling_interval = 1000; /* ms */
 
        rtw_set_signal_stat_timer(precvpriv);
-exit:
-
 
        return res;
 }
@@ -117,7 +113,6 @@ void _rtw_free_recv_priv(struct recv_priv *precvpriv)
 {
        struct adapter  *padapter = precvpriv->adapter;
 
-
        rtw_free_uc_swdec_pending_queue(padapter);
 
        if (precvpriv->pallocated_frame_buf) {
@@ -153,7 +148,6 @@ struct recv_frame *_rtw_alloc_recvframe(struct __queue *pfree_recv_queue)
                }
        }
 
-
        return (struct recv_frame *)hdr;
 }
 
@@ -170,14 +164,6 @@ struct recv_frame *rtw_alloc_recvframe(struct __queue *pfree_recv_queue)
        return precvframe;
 }
 
-void rtw_init_recvframe(struct recv_frame *precvframe, struct recv_priv *precvpriv)
-{
-       /* Perry: This can be removed */
-       INIT_LIST_HEAD(&precvframe->list);
-
-       precvframe->len = 0;
-}
-
 int rtw_free_recvframe(struct recv_frame *precvframe,
                       struct __queue *pfree_recv_queue)
 {
@@ -208,7 +194,6 @@ int rtw_free_recvframe(struct recv_frame *precvframe,
 
       spin_unlock_bh(&pfree_recv_queue->lock);
 
-
        return _SUCCESS;
 }
 
@@ -217,7 +202,6 @@ int _rtw_enqueue_recvframe(struct recv_frame *precvframe, struct __queue *queue)
        struct adapter *padapter = precvframe->adapter;
        struct recv_priv *precvpriv = &padapter->recvpriv;
 
-
        list_del_init(&(precvframe->list));
        list_add_tail(&(precvframe->list), get_list_head(queue));
 
@@ -226,7 +210,6 @@ int _rtw_enqueue_recvframe(struct recv_frame *precvframe, struct __queue *queue)
                        precvpriv->free_recvframe_cnt++;
        }
 
-
        return _SUCCESS;
 }
 
@@ -421,7 +404,6 @@ static int recvframe_chkmic(struct adapter *adapter,
 
 exit:
 
-
        return res;
 }
 
@@ -483,7 +465,6 @@ static struct recv_frame *decryptor(struct adapter *padapter,
                return_packet = NULL;
        }
 
-
        return return_packet;
 }
 
@@ -502,7 +483,6 @@ static struct recv_frame *portctrl(struct adapter *adapter,
        struct rx_pkt_attrib *pattrib;
        __be16 be_tmp;
 
-
        pstapriv = &adapter->stapriv;
 
        auth_alg = adapter->securitypriv.dot11AuthAlgrthm;
@@ -561,7 +541,6 @@ static struct recv_frame *portctrl(struct adapter *adapter,
                prtnframe = precv_frame;
        }
 
-
                return prtnframe;
 }
 
@@ -573,7 +552,6 @@ static int recv_decache(struct recv_frame *precv_frame, u8 bretry,
        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));
 
@@ -590,7 +568,6 @@ static int recv_decache(struct recv_frame *precv_frame, u8 bretry,
 
        prxcache->tid_rxseq[tid] = seq_ctrl;
 
-
        return _SUCCESS;
 }
 
@@ -727,7 +704,6 @@ int sta2sta_data_frame(struct adapter *adapter, struct recv_frame *precv_frame,
        u8 *sta_addr = NULL;
        int bmcast = IS_MCAST(pattrib->dst);
 
-
        if ((check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == true) ||
            (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == true)) {
                /*  filter packets that SA is myself or multicast or broadcast */
@@ -815,7 +791,6 @@ static int ap2sta_data_frame(
        u8 *myhwaddr = myid(&adapter->eeprompriv);
        int bmcast = IS_MCAST(pattrib->dst);
 
-
        if ((check_fwstate(pmlmepriv, WIFI_STATION_STATE) == true) &&
            (check_fwstate(pmlmepriv, _FW_LINKED) == true ||
            check_fwstate(pmlmepriv, _FW_UNDER_LINKING))) {
@@ -907,7 +882,6 @@ static int ap2sta_data_frame(
 
 exit:
 
-
        return ret;
 }
 
@@ -922,7 +896,6 @@ static int sta2ap_data_frame(struct adapter *adapter,
        unsigned char *mybssid  = get_bssid(pmlmepriv);
        int ret = _SUCCESS;
 
-
        if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == true) {
                /* For AP mode, RA = BSSID, TX = STA(SRC_ADDR), A3 = DST_ADDR */
                if (memcmp(pattrib->bssid, mybssid, ETH_ALEN)) {
@@ -967,7 +940,6 @@ static int sta2ap_data_frame(struct adapter *adapter,
 
 exit:
 
-
        return ret;
 }
 
@@ -1149,7 +1121,6 @@ static int validate_recv_data_frame(struct adapter *adapter,
        struct security_priv    *psecuritypriv = &adapter->securitypriv;
        int ret = _SUCCESS;
 
-
        bretry = GetRetry(ptr);
        pda = get_da(ptr);
        psa = get_sa(ptr);
@@ -1253,7 +1224,6 @@ static int validate_recv_data_frame(struct adapter *adapter,
 
 exit:
 
-
        return ret;
 }
 
@@ -1273,7 +1243,6 @@ static int validate_recv_frame(struct adapter *adapter,
        u8  ver = (unsigned char)(*ptr)&0x3;
        struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
 
-
        if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) {
                int ch_set_idx = rtw_ch_set_search_ch(pmlmeext->channel_set, rtw_get_oper_ch(adapter));
                if (ch_set_idx >= 0)
@@ -1362,7 +1331,6 @@ static int validate_recv_frame(struct adapter *adapter,
 
 exit:
 
-
        return retval;
 }
 
@@ -1445,7 +1413,6 @@ static struct recv_frame *recvframe_defrag(struct adapter *adapter,
        struct recv_frame *prframe, *pnextrframe;
        struct __queue *pfree_recv_queue;
 
-
        curfragnum = 0;
        pfree_recv_queue = &adapter->recvpriv.free_recv_queue;
 
@@ -1510,7 +1477,6 @@ static struct recv_frame *recvframe_defrag(struct adapter *adapter,
 
        RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("Performance defrag!!!!!\n"));
 
-
        return prframe;
 }
 
@@ -1528,7 +1494,6 @@ struct recv_frame *recvframe_chk_defrag(struct adapter *padapter,
        struct recv_frame *prtnframe = NULL;
        struct __queue *pfree_recv_queue, *pdefrag_q;
 
-
        pstapriv = &padapter->stapriv;
 
        pfhdr = precv_frame;
@@ -1612,7 +1577,6 @@ struct recv_frame *recvframe_chk_defrag(struct adapter *padapter,
                }
        }
 
-
        return prtnframe;
 }
 
@@ -2116,7 +2080,6 @@ s32 rtw_recv_entry(struct recv_frame *precvframe)
        struct recv_priv *precvpriv;
        s32 ret = _SUCCESS;
 
-
        padapter = precvframe->adapter;
 
        precvpriv = &padapter->recvpriv;
@@ -2129,7 +2092,6 @@ s32 rtw_recv_entry(struct recv_frame *precvframe)
 
        precvpriv->rx_pkts++;
 
-
        return ret;
 
 _recv_entry_drop:
index d870a5ce858533a4fa2e16e3e12000fe00e24e8d..22839d57dc8cea02cb0a91d18f561e7cdad77179 100644 (file)
@@ -1330,7 +1330,7 @@ static int aes_decipher(u8 *key, uint     hdrlen,
                bitwise_xor(aes_out, &pframe[payload_index], chain_buffer);
 
                for (j = 0; j < 16; j++)
-                        pframe[payload_index++] = chain_buffer[j];
+                       pframe[payload_index++] = chain_buffer[j];
        }
 
        if (payload_remainder > 0) {    /* If there is a short final block, then pad it,*/
index 32300df7b99671dec4b97c130025935f75dfe402..077b39a41c60a0d0cc32479a7ca51fcfdcc682ca 100644 (file)
@@ -19,6 +19,8 @@
  ******************************************************************************/
 #define _RTW_WLAN_UTIL_C_
 
+#include <linux/ieee80211.h>
+
 #include <osdep_service.h>
 #include <drv_types.h>
 #include <wifi.h>
index fda169d377714e52eac42b470387c286d97063de..5dc0b90e8ab56f8c6667756f6921d1f509ea5ad0 100644 (file)
@@ -868,7 +868,7 @@ s32 rtw_make_wlanhdr(struct adapter *padapter, u8 *hdr, struct pkt_attrib *pattr
                        /* check if enable ampdu */
                        if (pattrib->ht_en && psta->htpriv.ampdu_enable) {
                                if (psta->htpriv.agg_enable_bitmap & BIT(pattrib->priority))
-                               pattrib->ampdu_en = true;
+                                       pattrib->ampdu_en = true;
                        }
 
                        /* re-check if enable ampdu by BA_starting_seqctrl */
@@ -1026,22 +1026,22 @@ s32 rtw_xmitframe_coalesce(struct adapter *padapter, struct sk_buff *pkt, struct
                /* adding icv, if necessary... */
                if (pattrib->iv_len) {
                        switch (pattrib->encrypt) {
-                               case _WEP40_:
-                               case _WEP104_:
-                                       WEP_IV(pattrib->iv, psta->dot11txpn, pattrib->key_idx);
-                                       break;
-                               case _TKIP_:
-                                       if (bmcst)
-                                               TKIP_IV(pattrib->iv, psta->dot11txpn, pattrib->key_idx);
-                                       else
-                                               TKIP_IV(pattrib->iv, psta->dot11txpn, 0);
-                                       break;
-                               case _AES_:
-                                       if (bmcst)
-                                               AES_IV(pattrib->iv, psta->dot11txpn, pattrib->key_idx);
-                                       else
-                                               AES_IV(pattrib->iv, psta->dot11txpn, 0);
-                                       break;
+                       case _WEP40_:
+                       case _WEP104_:
+                               WEP_IV(pattrib->iv, psta->dot11txpn, pattrib->key_idx);
+                               break;
+                       case _TKIP_:
+                               if (bmcst)
+                                       TKIP_IV(pattrib->iv, psta->dot11txpn, pattrib->key_idx);
+                               else
+                                       TKIP_IV(pattrib->iv, psta->dot11txpn, 0);
+                               break;
+                       case _AES_:
+                               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);
@@ -1769,7 +1769,7 @@ int xmitframe_enqueue_for_sleeping_sta(struct adapter *padapter, struct xmit_fra
        int bmcst = IS_MCAST(pattrib->ra);
 
        if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == false)
-           return ret;
+               return ret;
 
        if (pattrib->psta)
                psta = pattrib->psta;
index 8eb2b39a0b6737008867f2032cd8371ced743fee..9c7e626aa703e62bb3f9626a2a61ea42fdfd3135 100644 (file)
@@ -24,9 +24,9 @@
 
 #define read_next_pair(array, v1, v2, i)               \
         do {                                           \
-                i += 2;                                \
-                v1 = array[i];                         \
-                v2 = array[i+1];                       \
+               i += 2;                                 \
+               v1 = array[i];                          \
+               v2 = array[i+1];                        \
         } while (0)
 
 
index 170e3de5eab4de8f3f3e09315c6f69486d51882a..38e9fdc312d336f5d914f7757204134cf40adabb 100644 (file)
@@ -31,18 +31,7 @@ void dump_chip_info(struct HAL_VERSION       chip_vers)
        uint cnt = 0;
        char buf[128];
 
-       if (IS_81XXC(chip_vers)) {
-               cnt += sprintf((buf+cnt), "Chip Version Info: %s_",
-                              IS_92C_SERIAL(chip_vers) ?
-                              "CHIP_8192C" : "CHIP_8188C");
-       } else if (IS_92D(chip_vers)) {
-               cnt += sprintf((buf+cnt), "Chip Version Info: CHIP_8192D_");
-       } else if (IS_8723_SERIES(chip_vers)) {
-               cnt += sprintf((buf+cnt), "Chip Version Info: CHIP_8723A_");
-       } else if (IS_8188E(chip_vers)) {
-               cnt += sprintf((buf+cnt), "Chip Version Info: CHIP_8188E_");
-       }
-
+       cnt += sprintf((buf+cnt), "Chip Version Info: CHIP_8188E_");
        cnt += sprintf((buf+cnt), "%s_", IS_NORMAL_CHIP(chip_vers) ?
                       "Normal_Chip" : "Test_Chip");
        cnt += sprintf((buf+cnt), "%s_", IS_CHIP_VENDOR_TSMC(chip_vers) ?
@@ -60,18 +49,8 @@ void dump_chip_info(struct HAL_VERSION       chip_vers)
        else
                cnt += sprintf((buf+cnt), "UNKNOWN_CUT(%d)_",
                               chip_vers.CUTVersion);
-
-       if (IS_1T1R(chip_vers))
-               cnt += sprintf((buf+cnt), "1T1R_");
-       else if (IS_1T2R(chip_vers))
-               cnt += sprintf((buf+cnt), "1T2R_");
-       else if (IS_2T2R(chip_vers))
-               cnt += sprintf((buf+cnt), "2T2R_");
-       else
-               cnt += sprintf((buf+cnt), "UNKNOWN_RFTYPE(%d)_",
-                              chip_vers.RFType);
-
-       cnt += sprintf((buf+cnt), "RomVer(%d)\n", chip_vers.ROMVer);
+       cnt += sprintf((buf+cnt), "1T1R_");
+       cnt += sprintf((buf+cnt), "RomVer(0)\n");
 
        pr_info("%s", buf);
 }
index 5edb5c41c8e705c8ae08edae94d75d1df460c669..85c17ef942f351038c49d2796ce71103612cb7cd 100644 (file)
@@ -131,14 +131,6 @@ void rtw_hal_get_hwreg(struct adapter *adapt, u8 variable, u8 *val)
                adapt->HalFunc.GetHwRegHandler(adapt, variable, val);
 }
 
-u8 rtw_hal_set_def_var(struct adapter *adapt, enum hal_def_variable var,
-                     void *val)
-{
-       if (adapt->HalFunc.SetHalDefVarHandler)
-               return adapt->HalFunc.SetHalDefVarHandler(adapt, var, val);
-       return _FAIL;
-}
-
 u8 rtw_hal_get_def_var(struct adapter *adapt,
                       enum hal_def_variable var, void *val)
 {
@@ -156,22 +148,6 @@ void rtw_hal_set_odm_var(struct adapter *adapt,
                                                      val1, set);
 }
 
-void rtw_hal_enable_interrupt(struct adapter *adapt)
-{
-       if (adapt->HalFunc.enable_interrupt)
-               adapt->HalFunc.enable_interrupt(adapt);
-       else
-               DBG_88E("%s: HalFunc.enable_interrupt is NULL!\n", __func__);
-}
-
-void rtw_hal_disable_interrupt(struct adapter *adapt)
-{
-       if (adapt->HalFunc.disable_interrupt)
-               adapt->HalFunc.disable_interrupt(adapt);
-       else
-               DBG_88E("%s: HalFunc.disable_interrupt is NULL!\n", __func__);
-}
-
 u32 rtw_hal_inirp_init(struct adapter *adapt)
 {
        u32 rst = _FAIL;
@@ -269,14 +245,6 @@ u32 rtw_hal_read_rfreg(struct adapter *adapt, enum rf_radio_path rfpath,
        return data;
 }
 
-void rtw_hal_write_rfreg(struct adapter *adapt, enum rf_radio_path rfpath,
-                        u32 regaddr, u32 bitmask, u32 data)
-{
-       if (adapt->HalFunc.write_rfreg)
-               adapt->HalFunc.write_rfreg(adapt, rfpath, regaddr,
-                                             bitmask, data);
-}
-
 void rtw_hal_set_bwmode(struct adapter *adapt,
                        enum ht_channel_width bandwidth, u8 offset)
 {
index 28b5e7bd4fc0223beddd07102ce3d116bf0b116b..710fdc3449f835b9ee174778c14b309d2e15ef16 100644 (file)
@@ -1170,13 +1170,10 @@ void odm_RSSIMonitorCheckCE(struct odm_dm_struct *pDM_Odm)
        }
 
        for (i = 0; i < sta_cnt; i++) {
-               if (PWDB_rssi[i] != (0)) {
-                       if (pHalData->fw_ractrl) {
-                               /*  Report every sta's RSSI to FW */
-                       } else {
-                               ODM_RA_SetRSSI_8188E(
-                               &(pHalData->odmpriv), (PWDB_rssi[i]&0xFF), (u8)((PWDB_rssi[i]>>16) & 0xFF));
-                       }
+               if (PWDB_rssi[i] != 0) {
+                       ODM_RA_SetRSSI_8188E(&pHalData->odmpriv,
+                                            PWDB_rssi[i] & 0xFF,
+                                            (PWDB_rssi[i] >> 16) & 0xFF);
                }
        }
 
index 097092772a860d4b66845394ab0ca46e3b005b09..38845d17d593c155b9dab40c6f931f8857b57416 100644 (file)
@@ -102,7 +102,7 @@ void rtl88eu_phy_rf6052_set_cck_txpower(struct adapter *adapt, u8 *powerlevel)
                }
        }
        rtl88eu_dm_txpower_track_adjust(&hal_data->odmpriv, 1, &direction,
-                                       &pwrtrac_value);
+                                       &pwrtrac_value);
 
        if (direction == 1) {
                /*  Increase TX power */
index 455ecdc8d9fa7c8a0d78c5d11a4049a9142f4d11..954cade478db37b3a0394ec1dc37f9b5925fe336 100644 (file)
@@ -295,7 +295,7 @@ static bool rf6052_conf_para(struct adapter *adapt)
                        break;
                }
 
-               if (rtstatus != true)
+               if (!rtstatus)
                        return false;
        }
 
index 86347f2ccdfdab27b353c06a7621e809b585e37e..0a62bfa210febdc0f6cd58f58ab68c1d498fdc49 100644 (file)
@@ -127,27 +127,6 @@ exit:
        return ret;
 }
 
-u8 rtl8188e_set_raid_cmd(struct adapter *adapt, u32 mask)
-{
-       u8 buf[3];
-       u8 res = _SUCCESS;
-       struct hal_data_8188e *haldata = GET_HAL_DATA(adapt);
-
-       if (haldata->fw_ractrl) {
-
-               memset(buf, 0, 3);
-               put_unaligned_le32(mask, buf);
-
-               FillH2CCmd_88E(adapt, H2C_DM_MACID_CFG, 3, buf);
-       } else {
-               DBG_88E("==>%s fw dont support RA\n", __func__);
-               res = _FAIL;
-       }
-
-
-       return res;
-}
-
 /* bitmap[0:27] = tx_rate_bitmap */
 /* bitmap[28:31]= Rate Adaptive id */
 /* arg[0:4] = macid */
index 7904d2260f2cfd6b0f0e2eafeb1727ddab5683e7..a6295ca6a73e8c429d8b44bef8d5c8e811c0e59e 100644 (file)
@@ -128,7 +128,7 @@ static void rtl8188e_free_hal_data(struct adapter *padapter)
        padapter->HalData = NULL;
 }
 
-static struct HAL_VERSION ReadChipVersion8188E(struct adapter *padapter)
+static void ReadChipVersion8188E(struct adapter *padapter)
 {
        u32                             value32;
        struct HAL_VERSION              ChipVersion;
@@ -137,41 +137,17 @@ static struct HAL_VERSION ReadChipVersion8188E(struct adapter *padapter)
        pHalData = GET_HAL_DATA(padapter);
 
        value32 = usb_read32(padapter, REG_SYS_CFG);
-       ChipVersion.ICType = CHIP_8188E;
        ChipVersion.ChipType = ((value32 & RTL_ID) ? TEST_CHIP : NORMAL_CHIP);
-
-       ChipVersion.RFType = RF_TYPE_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 & TRP_BT_EN) ? RT_LDO_REGULATOR : RT_SWITCHING_REGULATOR);
-
-       ChipVersion.ROMVer = 0; /*  ROM code version. */
-
        dump_chip_info(ChipVersion);
 
        pHalData->VersionID = ChipVersion;
-
-       if (IS_1T2R(ChipVersion)) {
-               pHalData->rf_type = RF_1T2R;
-               pHalData->NumTotalRFPath = 2;
-       } else if (IS_2T2R(ChipVersion)) {
-               pHalData->rf_type = RF_2T2R;
-               pHalData->NumTotalRFPath = 2;
-       } else{
-               pHalData->rf_type = RF_1T1R;
-               pHalData->NumTotalRFPath = 1;
-       }
+       pHalData->rf_type = RF_1T1R;
+       pHalData->NumTotalRFPath = 1;
 
        MSG_88E("RF_Type is %x!!\n", pHalData->rf_type);
-
-       return ChipVersion;
-}
-
-static void rtl8188e_read_chip_version(struct adapter *padapter)
-{
-       ReadChipVersion8188E(padapter);
 }
 
 static void rtl8188e_SetHalODMVar(struct adapter *Adapter, enum hal_odm_variable eVariable, void *pValue1, bool bSet)
@@ -220,7 +196,7 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc)
 
        pHalFunc->dm_init = &rtl8188e_init_dm_priv;
 
-       pHalFunc->read_chip_version = &rtl8188e_read_chip_version;
+       pHalFunc->read_chip_version = &ReadChipVersion8188E;
 
        pHalFunc->set_bwmode_handler = &phy_set_bw_mode;
        pHalFunc->set_channel_handler = &phy_sw_chnl;
@@ -232,7 +208,6 @@ void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc)
        pHalFunc->AntDivBeforeLinkHandler = &AntDivBeforeLink8188E;
        pHalFunc->AntDivCompareHandler = &AntDivCompare8188E;
        pHalFunc->read_rfreg = &phy_query_rf_reg;
-       pHalFunc->write_rfreg = &phy_set_rf_reg;
 
        pHalFunc->sreset_init_value = &sreset_init_value;
        pHalFunc->sreset_get_wifi_status  = &sreset_get_wifi_status;
index 8726222142648fb6e07f12a015342415ea8f2ab9..1ef878fd997bae0356d6f7d16a4106cfbef32ad8 100644 (file)
@@ -743,19 +743,16 @@ static u32 rtl8188eu_hal_init(struct adapter *Adapter)
        if (Adapter->registrypriv.mp_mode == 1) {
                _InitRxSetting(Adapter);
                Adapter->bFWReady = false;
-               haldata->fw_ractrl = false;
        } else {
                status = rtl88eu_download_fw(Adapter);
 
                if (status) {
                        DBG_88E("%s: Download Firmware failed!!\n", __func__);
                        Adapter->bFWReady = false;
-                       haldata->fw_ractrl = false;
                        return status;
                } else {
                        RT_TRACE(_module_hci_hal_init_c_, _drv_info_, ("Initializeadapt8192CSdio(): Download Firmware Success!!\n"));
                        Adapter->bFWReady = true;
-                       haldata->fw_ractrl = false;
                }
        }
        rtl8188e_InitializeFirmwareVars(Adapter);
@@ -1703,7 +1700,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val)
 
                        /*  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 ((psmode != PS_MODE_ACTIVE) && (!IS_92C_SERIAL(haldata->VersionID)))
+                       if (psmode != PS_MODE_ACTIVE)
                                ODM_RF_Saving(podmpriv, true);
                        rtl8188e_set_FwPwrMode_cmd(Adapter, psmode);
                }
@@ -1961,75 +1958,6 @@ GetHalDefVar8188EUsb(
        return bResult;
 }
 
-/*  */
-/*     Description: */
-/*             Change default setting of specified variable. */
-/*  */
-static u8 SetHalDefVar8188EUsb(struct adapter *Adapter, enum hal_def_variable eVariable, void *pValue)
-{
-       struct hal_data_8188e   *haldata = GET_HAL_DATA(Adapter);
-       u8 bResult = _SUCCESS;
-
-       switch (eVariable) {
-       case HAL_DEF_DBG_DM_FUNC:
-               {
-                       u8 dm_func = *((u8 *)pValue);
-                       struct odm_dm_struct *podmpriv = &haldata->odmpriv;
-
-                       if (dm_func == 0) { /* disable all dynamic func */
-                               podmpriv->SupportAbility = DYNAMIC_FUNC_DISABLE;
-                               DBG_88E("==> Disable all dynamic function...\n");
-                       } else if (dm_func == 1) {/* disable DIG */
-                               podmpriv->SupportAbility  &= (~DYNAMIC_BB_DIG);
-                               DBG_88E("==> Disable DIG...\n");
-                       } else if (dm_func == 2) {/* disable High power */
-                               podmpriv->SupportAbility  &= (~DYNAMIC_BB_DYNAMIC_TXPWR);
-                       } else if (dm_func == 3) {/* disable tx power tracking */
-                               podmpriv->SupportAbility  &= (~DYNAMIC_RF_CALIBRATION);
-                               DBG_88E("==> Disable tx power tracking...\n");
-                       } else if (dm_func == 5) {/* disable antenna diversity */
-                               podmpriv->SupportAbility  &= (~DYNAMIC_BB_ANT_DIV);
-                       } else if (dm_func == 6) {/* turn on all dynamic func */
-                               if (!(podmpriv->SupportAbility  & DYNAMIC_BB_DIG)) {
-                                       struct rtw_dig *pDigTable = &podmpriv->DM_DigTable;
-                                       pDigTable->CurIGValue = usb_read8(Adapter, 0xc50);
-                               }
-                               podmpriv->SupportAbility = DYNAMIC_ALL_FUNC_ENABLE;
-                               DBG_88E("==> Turn on all dynamic function...\n");
-                       }
-               }
-               break;
-       case HAL_DEF_DBG_DUMP_RXPKT:
-               haldata->bDumpRxPkt = *((u8 *)pValue);
-               break;
-       case HAL_DEF_DBG_DUMP_TXPKT:
-               haldata->bDumpTxPkt = *((u8 *)pValue);
-               break;
-       case HW_DEF_FA_CNT_DUMP:
-               {
-                       u8 bRSSIDump = *((u8 *)pValue);
-                       struct odm_dm_struct *dm_ocm = &(haldata->odmpriv);
-                       if (bRSSIDump)
-                               dm_ocm->DebugComponents =       ODM_COMP_DIG|ODM_COMP_FA_CNT;
-                       else
-                               dm_ocm->DebugComponents = 0;
-               }
-               break;
-       case HW_DEF_ODM_DBG_FLAG:
-               {
-                       u64     DebugComponents = *((u64 *)pValue);
-                       struct odm_dm_struct *dm_ocm = &(haldata->odmpriv);
-                       dm_ocm->DebugComponents = DebugComponents;
-               }
-               break;
-       default:
-               bResult = _FAIL;
-               break;
-       }
-
-       return bResult;
-}
-
 static void UpdateHalRAMask8188EUsb(struct adapter *adapt, u32 mac_id, u8 rssi_level)
 {
        u8 init_rate = 0;
@@ -2085,28 +2013,9 @@ static void UpdateHalRAMask8188EUsb(struct adapter *adapt, u32 mac_id, u8 rssi_l
 
        init_rate = get_highest_rate_idx(mask)&0x3f;
 
-       if (haldata->fw_ractrl) {
-               u8 arg;
-
-               arg = mac_id & 0x1f;/* MACID */
-               arg |= BIT(7);
-               if (shortGIrate)
-                       arg |= BIT(5);
-               mask |= ((raid << 28) & 0xf0000000);
-               DBG_88E("update raid entry, mask=0x%x, arg=0x%x\n", mask, arg);
-               psta->ra_mask = mask;
-               mask |= ((raid << 28) & 0xf0000000);
+       ODM_RA_UpdateRateInfo_8188E(&haldata->odmpriv, mac_id,
+                                   raid, mask, shortGIrate);
 
-               /* to do ,for 8188E-SMIC */
-               rtl8188e_set_raid_cmd(adapt, mask);
-       } else {
-               ODM_RA_UpdateRateInfo_8188E(&(haldata->odmpriv),
-                               mac_id,
-                               raid,
-                               mask,
-                               shortGIrate
-                               );
-       }
        /* set ra_id */
        psta->raid = raid;
        psta->init_rate = init_rate;
@@ -2156,7 +2065,6 @@ static void rtl8188eu_init_default_value(struct adapter *adapt)
        pwrctrlpriv = &adapt->pwrctrlpriv;
 
        /* init default value */
-       haldata->fw_ractrl = false;
        if (!pwrctrlpriv->bkeepfwalive)
                haldata->LastHMEBoxNum = 0;
 
@@ -2200,7 +2108,6 @@ void rtl8188eu_set_hal_ops(struct adapter *adapt)
        halfunc->SetHwRegHandler = &SetHwReg8188EU;
        halfunc->GetHwRegHandler = &GetHwReg8188EU;
        halfunc->GetHalDefVarHandler = &GetHalDefVar8188EUsb;
-       halfunc->SetHalDefVarHandler = &SetHalDefVar8188EUsb;
 
        halfunc->UpdateRAMaskHandler = &UpdateHalRAMask8188EUsb;
        halfunc->SetBeaconRelatedRegistersHandler = &SetBeaconRelatedRegisters8188EUsb;
index 97047cf06780f7ee11054a60a20ea25225c7da10..56b4ff08e509cba62a0d3a96f2ea57d2b87096d7 100644 (file)
 #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,
@@ -55,48 +41,20 @@ enum HAL_VENDOR {
        CHIP_VENDOR_UMC         =       1,
 };
 
-enum HAL_RF_TYPE {
-       RF_TYPE_1T1R    =       0,
-       RF_TYPE_1T2R    =       1,
-       RF_TYPE_2T2R    =       2,
-       RF_TYPE_2T3R    =       3,
-       RF_TYPE_2T4R    =       4,
-       RF_TYPE_3T3R    =       5,
-       RF_TYPE_3T4R    =       6,
-       RF_TYPE_4T4R    =       7,
-};
-
 struct HAL_VERSION {
-       enum HAL_IC_TYPE        ICType;
        enum HAL_CHIP_TYPE      ChipType;
        enum HAL_CUT_VERSION    CUTVersion;
        enum HAL_VENDOR         VendorType;
-       enum HAL_RF_TYPE        RFType;
-       u8                      ROMVer;
 };
 
 /*  Get element */
-#define GET_CVID_IC_TYPE(version)      (((version).ICType))
 #define GET_CVID_CHIP_TYPE(version)    (((version).ChipType))
-#define GET_CVID_RF_TYPE(version)      (((version).RFType))
 #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. -- */
 /* HAL_VERSION VersionID */
 
-/*  HAL_IC_TYPE_E */
-#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_92D(version)                                        \
-       ((GET_CVID_IC_TYPE(version) == CHIP_8192D) ? true : false)
-#define IS_8188E(version)                              \
-       ((GET_CVID_IC_TYPE(version) == CHIP_8188E) ? true : false)
-
 /* HAL_CHIP_TYPE_E */
 #define IS_TEST_CHIP(version)                          \
        ((GET_CVID_CHIP_TYPE(version) == TEST_CHIP) ? true : false)
@@ -122,46 +80,4 @@ struct HAL_VERSION {
 #define IS_CHIP_VENDOR_UMC(version)                    \
        ((GET_CVID_MANUFACTUER(version) == CHIP_VENDOR_UMC) ? true : false)
 
-/* HAL_RF_TYPE_E */
-#define IS_1T1R(version)                               \
-       ((GET_CVID_RF_TYPE(version) == RF_TYPE_1T1R) ? true : false)
-#define IS_1T2R(version)                               \
-       ((GET_CVID_RF_TYPE(version) == RF_TYPE_1T2R) ? true : false)
-#define IS_2T2R(version)                               \
-       ((GET_CVID_RF_TYPE(version) == RF_TYPE_2T2R) ? true : false)
-
-/* Chip version Macro. -- */
-#define IS_81XXC_TEST_CHIP(version)                    \
-       ((IS_81XXC(version) && (!IS_NORMAL_CHIP(version))) ? true : false)
-
-#define IS_92C_SERIAL(version)                         \
-       ((IS_81XXC(version) && IS_2T2R(version)) ? true : false)
-#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_NORMAL_CHIP92D(version)                     \
-       ((IS_92D(version)) ?                            \
-       ((GET_CVID_CHIP_TYPE(version) == NORMAL_CHIP) ? true : false) : false)
-
-#define IS_92D_SINGLEPHY(version)                      \
-       ((IS_92D(version)) ? (IS_2T2R(version) ? true : false) : false)
-#define IS_92D_C_CUT(version)                          \
-       ((IS_92D(version)) ? (IS_C_CUT(version) ? true : false) : false)
-#define IS_92D_D_CUT(version)                          \
-       ((IS_92D(version)) ? (IS_D_CUT(version) ? true : false) : false)
-#define IS_92D_E_CUT(version)                          \
-       ((IS_92D(version)) ? (IS_E_CUT(version) ? true : 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
index 3b476d80f64d68430fb1c24f40a5adb5e3a0ba2f..e73c6341248eb9acbca4bf320b2bdc884ada61ff 100644 (file)
@@ -171,8 +171,6 @@ struct hal_ops {
 
        void    (*read_adapter_info)(struct adapter *padapter);
 
-       void    (*enable_interrupt)(struct adapter *padapter);
-       void    (*disable_interrupt)(struct adapter *padapter);
        s32     (*interrupt_handler)(struct adapter *padapter);
 
        void    (*set_bwmode_handler)(struct adapter *padapter,
@@ -190,9 +188,6 @@ struct hal_ops {
        u8      (*GetHalDefVarHandler)(struct adapter *padapter,
                                       enum hal_def_variable eVariable,
                                       void *pValue);
-       u8      (*SetHalDefVarHandler)(struct adapter *padapter,
-                                      enum hal_def_variable eVariable,
-                                      void *pValue);
 
        void    (*SetHalODMVarHandler)(struct adapter *padapter,
                                       enum hal_odm_variable eVariable,
@@ -216,9 +211,6 @@ struct hal_ops {
        u32     (*read_rfreg)(struct adapter *padapter,
                              enum rf_radio_path eRFPath, u32 RegAddr,
                              u32 BitMask);
-       void    (*write_rfreg)(struct adapter *padapter,
-                              enum rf_radio_path eRFPath, u32 RegAddr,
-                              u32 BitMask, u32 Data);
 
        void (*sreset_init_value)(struct adapter *padapter);
        u8 (*sreset_get_wifi_status)(struct adapter *padapter);
@@ -267,8 +259,6 @@ void rtw_hal_chip_configure(struct adapter *padapter);
 void rtw_hal_read_chip_info(struct adapter *padapter);
 void rtw_hal_read_chip_version(struct adapter *padapter);
 
-u8 rtw_hal_set_def_var(struct adapter *padapter,
-                      enum hal_def_variable eVariable, void *pValue);
 u8 rtw_hal_get_def_var(struct adapter *padapter,
                       enum hal_def_variable eVariable, void *pValue);
 
@@ -276,9 +266,6 @@ void rtw_hal_set_odm_var(struct adapter *padapter,
                         enum hal_odm_variable eVariable, void *pValue1,
                         bool bSet);
 
-void rtw_hal_enable_interrupt(struct adapter *padapter);
-void rtw_hal_disable_interrupt(struct adapter *padapter);
-
 u32    rtw_hal_inirp_init(struct adapter *padapter);
 u32    rtw_hal_inirp_deinit(struct adapter *padapter);
 
@@ -300,9 +287,6 @@ void rtw_hal_bcn_related_reg_setting(struct adapter *padapter);
 
 u32    rtw_hal_read_rfreg(struct adapter *padapter, enum rf_radio_path eRFPath,
                           u32 RegAddr, u32 BitMask);
-void   rtw_hal_write_rfreg(struct adapter *padapter,
-                           enum rf_radio_path eRFPath, u32 RegAddr,
-                           u32 BitMask, u32 Data);
 
 void   rtw_hal_set_bwmode(struct adapter *padapter,
                           enum ht_channel_width Bandwidth, u8 Offset);
index b129ad148b4728dc283eee1b62866c274552904b..6400f75707bd54a2ba7ba40277b1364afe8afb0c 100644 (file)
@@ -477,63 +477,9 @@ struct ieee80211_snap_hdr {
 #define WLAN_GET_SEQ_FRAG(seq) ((seq) & RTW_IEEE80211_SCTL_FRAG)
 #define WLAN_GET_SEQ_SEQ(seq)  ((seq) & RTW_IEEE80211_SCTL_SEQ)
 
-/* Authentication algorithms */
-#define WLAN_AUTH_OPEN 0
-#define WLAN_AUTH_SHARED_KEY 1
-
-#define WLAN_AUTH_CHALLENGE_LEN 128
-
-#define WLAN_CAPABILITY_BSS (1<<0)
-#define WLAN_CAPABILITY_IBSS (1<<1)
-#define WLAN_CAPABILITY_CF_POLLABLE (1<<2)
-#define WLAN_CAPABILITY_CF_POLL_REQUEST (1<<3)
-#define WLAN_CAPABILITY_PRIVACY (1<<4)
-#define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5)
-#define WLAN_CAPABILITY_PBCC (1<<6)
-#define WLAN_CAPABILITY_CHANNEL_AGILITY (1<<7)
-#define WLAN_CAPABILITY_SHORT_SLOT (1<<10)
-
 /* Non standard?  Not in <linux/ieee80211.h> */
 #define WLAN_REASON_EXPIRATION_CHK 65535
 
-/* Information Element IDs */
-#define WLAN_EID_SSID 0
-#define WLAN_EID_SUPP_RATES 1
-#define WLAN_EID_FH_PARAMS 2
-#define WLAN_EID_DS_PARAMS 3
-#define WLAN_EID_CF_PARAMS 4
-#define WLAN_EID_TIM 5
-#define WLAN_EID_IBSS_PARAMS 6
-#define WLAN_EID_CHALLENGE 16
-/* EIDs defined by IEEE 802.11h - START */
-#define WLAN_EID_PWR_CONSTRAINT 32
-#define WLAN_EID_PWR_CAPABILITY 33
-#define WLAN_EID_TPC_REQUEST 34
-#define WLAN_EID_TPC_REPORT 35
-#define WLAN_EID_SUPPORTED_CHANNELS 36
-#define WLAN_EID_CHANNEL_SWITCH 37
-#define WLAN_EID_MEASURE_REQUEST 38
-#define WLAN_EID_MEASURE_REPORT 39
-#define WLAN_EID_QUITE 40
-#define WLAN_EID_IBSS_DFS 41
-/* EIDs defined by IEEE 802.11h - END */
-#define WLAN_EID_ERP_INFO 42
-#define WLAN_EID_HT_CAP 45
-#define WLAN_EID_RSN 48
-#define WLAN_EID_EXT_SUPP_RATES 50
-#define WLAN_EID_MOBILITY_DOMAIN 54
-#define WLAN_EID_FAST_BSS_TRANSITION 55
-#define WLAN_EID_TIMEOUT_INTERVAL 56
-#define WLAN_EID_RIC_DATA 57
-#define WLAN_EID_HT_OPERATION 61
-#define WLAN_EID_SECONDARY_CHANNEL_OFFSET 62
-#define WLAN_EID_20_40_BSS_COEXISTENCE 72
-#define WLAN_EID_20_40_BSS_INTOLERANT 73
-#define WLAN_EID_OVERLAPPING_BSS_SCAN_PARAMS 74
-#define WLAN_EID_MMIE 76
-#define WLAN_EID_VENDOR_SPECIFIC 221
-#define WLAN_EID_GENERIC (WLAN_EID_VENDOR_SPECIFIC)
-
 #define IEEE80211_MGMT_HDR_LEN 24
 #define IEEE80211_DATA_HDR3_LEN 24
 #define IEEE80211_DATA_HDR4_LEN 30
index 0809963ce6aa890a8f6571ebca9ad927fb432b79..fdeb603b6cc1b59315ef901c766d23fe44bc9fbd 100644 (file)
@@ -38,8 +38,7 @@ 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);
 
-int rtw_os_recv_resource_alloc(struct adapter *adapt,
-                              struct recv_frame *recvfr);
+void rtw_os_recv_resource_alloc(struct recv_frame *recvfr);
 
 int rtw_os_recvbuf_resource_alloc(struct adapter *adapt, struct recv_buf *buf);
 
index 42b1f22424eb693b9656bbc57142e713507224c2..f813ce0563f8536d72a8c05e20ab965be0a0fa81 100644 (file)
@@ -107,7 +107,6 @@ struct P2P_PS_CTWPeriod_t {
 /*  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);
-u8 rtl8188e_set_raid_cmd(struct adapter *padapter, u32 mask);
 void rtl8188e_Add_RateATid(struct adapter *padapter, u32 bitmap, u8 arg,
                           u8 rssi_level);
 
index 7d8e022925e013eb432362f67ea3ff2f441b9104..cbad364f189c865dc4b366417624b807e62d48fe 100644 (file)
@@ -188,15 +188,8 @@ struct txpowerinfo24g {
 
 #define EFUSE_PROTECT_BYTES_BANK       16
 
-/*  For RTL8723 regulator mode. */
-enum rt_regulator_mode {
-       RT_SWITCHING_REGULATOR = 0,
-       RT_LDO_REGULATOR = 1,
-};
-
 struct hal_data_8188e {
        struct HAL_VERSION      VersionID;
-       enum rt_regulator_mode RegulatorMode; /*  switching regulator or LDO */
        u16     CustomerID;
        u8 *pfirmware;
        u32 fwsize;
@@ -301,7 +294,6 @@ struct hal_data_8188e {
        /* for host message to fw */
        u8      LastHMEBoxNum;
 
-       u8      fw_ractrl;
        u8      RegTxPause;
        /*  Beacon function related global variable. */
        u32     RegBcnCtrlVal;
index 8c7e8a36aa13a32dd1205107fab08dd9a87b9cf7..4c992573e3ca9fe630f8ed3caad56a2f0fad4274 100644 (file)
@@ -535,7 +535,8 @@ void rtw_generate_random_ibss(u8 *pibss);
 struct wlan_network *rtw_find_network(struct __queue *scanned_queue, u8 *addr);
 struct wlan_network *rtw_get_oldest_wlan_network(struct __queue *scanned_queue);
 
-void rtw_free_assoc_resources(struct adapter *adapter, int lock_scanned_queue);
+void rtw_free_assoc_resources(struct adapter *adapter);
+void rtw_free_assoc_resources_locked(struct adapter *adapter);
 void rtw_indicate_disconnect(struct adapter *adapter);
 void rtw_indicate_connect(struct adapter *adapter);
 void rtw_indicate_scan_done(struct adapter *padapter, bool aborted);
index aa1fd87c47fba84c561b386f42117176d833ccc0..a493d4c37ef180fc2096167d3b1b451b2b3a77cc 100644 (file)
@@ -257,7 +257,6 @@ s32 LPS_RF_ON_check(struct adapter *adapter, u32 delay_ms);
 void LPS_Enter(struct adapter *adapter);
 void LPS_Leave(struct adapter *adapter);
 
-void rtw_set_ips_deny(struct adapter *adapter, u32 ms);
 int _rtw_pwr_wakeup(struct adapter *adapter, u32 ips_defer_ms,
                    const char *caller);
 #define rtw_pwr_wakeup(adapter)                                                \
index 9612490539b36df39d780f14726dca7ea32ec9c4..7bbeedfc49aa73e4a5dab4541d89c89ad7653d45 100644 (file)
@@ -113,7 +113,6 @@ struct sta_info {
 
        u8      raid;
        u8      init_rate;
-       u32     ra_mask;
        u8      wireless_mode;  /*  NETWORK_TYPE */
        struct stainfo_stats sta_stats;
 
index a08a2e045e594a9f63d7b7d2f8939e4278c5d24c..dba8af1ec41e183c8faf5f6973bc5899a4b2a1e0 100644 (file)
@@ -649,13 +649,6 @@ enum ht_cap_ampdu_factor {
 #define IEEE80211_MAX_AMPDU_BUF 0x40
 
 
-/* Spatial Multiplexing Power Save Modes */
-#define WLAN_HT_CAP_SM_PS_STATIC       0
-#define WLAN_HT_CAP_SM_PS_DYNAMIC      1
-#define WLAN_HT_CAP_SM_PS_INVALID      2
-#define WLAN_HT_CAP_SM_PS_DISABLED     3
-
-
 #define OP_MODE_PURE                    0
 #define OP_MODE_MAY_BE_LEGACY_STAS      1
 #define OP_MODE_20MHZ_HT_STA_ASSOCED    2
index 38dba1435c1ee23948fdfaa415dad8b16deed60e..969574926e21c939defa1e0967a614afeef0421a 100644 (file)
@@ -179,8 +179,8 @@ static char *translate_scan(struct adapter *padapter,
 
        cap = le16_to_cpu(le_tmp);
 
-       if (cap & (WLAN_CAPABILITY_IBSS | WLAN_CAPABILITY_BSS)) {
-               if (cap & WLAN_CAPABILITY_BSS)
+       if (!WLAN_CAPABILITY_IS_STA_BSS(cap)) {
+               if (cap & WLAN_CAPABILITY_ESS)
                        iwe.u.mode = IW_MODE_MASTER;
                else
                        iwe.u.mode = IW_MODE_ADHOC;
@@ -1871,7 +1871,7 @@ static int rtw_wx_set_auth(struct net_device *dev,
                        rtw_disassoc_cmd(padapter, 500, false);
                        DBG_88E("%s...call rtw_indicate_disconnect\n ", __func__);
                        rtw_indicate_disconnect(padapter);
-                       rtw_free_assoc_resources(padapter, 1);
+                       rtw_free_assoc_resources(padapter);
                }
                ret = wpa_set_auth_algs(dev, (u32)param->value);
                break;
@@ -2485,16 +2485,13 @@ static int rtw_set_beacon(struct net_device *dev, struct ieee_param *param, int
 
 static int rtw_hostapd_sta_flush(struct net_device *dev)
 {
-       int ret = 0;
        struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
 
        DBG_88E("%s\n", __func__);
 
        flush_all_cam_entry(padapter);  /* clear CAM */
 
-       ret = rtw_sta_flush(padapter);
-
-       return ret;
+       return rtw_sta_flush(padapter);
 }
 
 static int rtw_add_sta(struct net_device *dev, struct ieee_param *param)
@@ -2666,7 +2663,8 @@ static int rtw_get_sta_wpaie(struct net_device *dev, struct ieee_param *param)
 
        psta = rtw_get_stainfo(pstapriv, param->sta_addr);
        if (psta) {
-               if ((psta->wpa_ie[0] == WLAN_EID_RSN) || (psta->wpa_ie[0] == WLAN_EID_GENERIC)) {
+               if (psta->wpa_ie[0] == WLAN_EID_RSN ||
+                   psta->wpa_ie[0] == WLAN_EID_VENDOR_SPECIFIC) {
                        int wpa_ie_len;
                        int copy_len;
 
@@ -2809,7 +2807,6 @@ static int rtw_set_hidden_ssid(struct net_device *dev, struct ieee_param *param,
 
 static int rtw_ioctl_acl_remove_sta(struct net_device *dev, struct ieee_param *param, int len)
 {
-       int ret = 0;
        struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
        struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
 
@@ -2820,13 +2817,11 @@ static int rtw_ioctl_acl_remove_sta(struct net_device *dev, struct ieee_param *p
            param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
            param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
                return -EINVAL;
-       ret = rtw_acl_remove_sta(padapter, param->sta_addr);
-       return ret;
+       return rtw_acl_remove_sta(padapter, param->sta_addr);
 }
 
 static int rtw_ioctl_acl_add_sta(struct net_device *dev, struct ieee_param *param, int len)
 {
-       int ret = 0;
        struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
        struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
 
@@ -2837,8 +2832,7 @@ static int rtw_ioctl_acl_add_sta(struct net_device *dev, struct ieee_param *para
            param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
            param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
                return -EINVAL;
-       ret = rtw_acl_add_sta(padapter, param->sta_addr);
-       return ret;
+       return rtw_acl_add_sta(padapter, param->sta_addr);
 }
 
 static int rtw_ioctl_set_macaddr_acl(struct net_device *dev, struct ieee_param *param, int len)
index a14e79f31abf72d3e459cc7381c220201dac4f6d..2361bce480c3fa51b1b9c4d81aaec8047a92e8e7 100644 (file)
@@ -1175,7 +1175,7 @@ static int netdev_close(struct net_device *pnetdev)
                /* s2-2.  indicate disconnect to os */
                rtw_indicate_disconnect(padapter);
                /* s2-3. */
-               rtw_free_assoc_resources(padapter, 1);
+               rtw_free_assoc_resources(padapter);
                /* s2-4. */
                rtw_free_network_queue(padapter, true);
                /*  Close LED */
index 05701328dce408bf63d9827b42f39d998f49095b..3ebb8b206e468ce00cf25a7819b9f72cec8eea7b 100644 (file)
@@ -17,8 +17,6 @@
  *
  *
  ******************************************************************************/
-#define _RECV_OSDEP_C_
-
 #include <osdep_service.h>
 #include <drv_types.h>
 
 #include <usb_ops_linux.h>
 
 /* alloc os related resource in struct recv_frame */
-int rtw_os_recv_resource_alloc(struct adapter *padapter,
-                              struct recv_frame *precvframe)
+void rtw_os_recv_resource_alloc(struct recv_frame *precvframe)
 {
        precvframe->pkt_newalloc = NULL;
        precvframe->pkt = NULL;
-       return _SUCCESS;
 }
 
 /* alloc os related resource in struct recv_buf */
 int rtw_os_recvbuf_resource_alloc(struct adapter *padapter,
                                  struct recv_buf *precvbuf)
 {
-       int res = _SUCCESS;
-
-       precvbuf->purb = usb_alloc_urb(0, GFP_KERNEL);
-       if (precvbuf->purb == NULL)
-               res = _FAIL;
        precvbuf->pskb = NULL;
        precvbuf->reuse = false;
-       return res;
+       precvbuf->purb = usb_alloc_urb(0, GFP_KERNEL);
+       if (!precvbuf->purb)
+               return _FAIL;
+       return _SUCCESS;
 }
 
 void rtw_handle_tkip_mic_err(struct adapter *padapter, u8 bgroup)
index d0d4335b444c3eea93883c944cd361ca9a12a3f9..33bfe054f8677d5d4cc129c9b4111a4d9bf81a72 100644 (file)
@@ -17,8 +17,8 @@
  *
  *
  ******************************************************************************/
-#define _HCI_INTF_C_
 
+#define pr_fmt(fmt) "R8188EU: " fmt
 #include <osdep_service.h>
 #include <drv_types.h>
 #include <recv_osdep.h>
@@ -55,7 +55,6 @@ MODULE_DEVICE_TABLE(usb, rtw_usb_id_tbl);
 static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf)
 {
        int     i;
-       int     status = _FAIL;
        struct dvobj_priv *pdvobjpriv;
        struct usb_host_config          *phost_conf;
        struct usb_config_descriptor    *pconf_desc;
@@ -64,10 +63,9 @@ static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf)
        struct usb_endpoint_descriptor  *pendp_desc;
        struct usb_device       *pusbd;
 
-
        pdvobjpriv = kzalloc(sizeof(*pdvobjpriv), GFP_KERNEL);
        if (pdvobjpriv == NULL)
-               goto exit;
+               return NULL;
 
        pdvobjpriv->pusbintf = usb_intf;
        pusbd = interface_to_usbdev(usb_intf);
@@ -115,20 +113,13 @@ static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf)
        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)
-               goto free_dvobj;
-
-       usb_get_dev(pusbd);
-
-       status = _SUCCESS;
-
-free_dvobj:
-       if (status != _SUCCESS && pdvobjpriv) {
+       if (!pdvobjpriv->usb_vendor_req_buf) {
                usb_set_intfdata(usb_intf, NULL);
                kfree(pdvobjpriv);
-               pdvobjpriv = NULL;
+               return NULL;
        }
-exit:
+       usb_get_dev(pusbd);
+
        return pdvobjpriv;
 }
 
@@ -136,7 +127,6 @@ 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 */
@@ -150,7 +140,7 @@ static void usb_dvobj_deinit(struct usb_interface *usb_intf)
                                 * on sitesurvey for the first time when
                                 * device is up . Reset usb port for sitesurvey
                                 * fail issue. */
-                               DBG_88E("usb attached..., try to reset usb device\n");
+                               pr_debug("usb attached..., try to reset usb device\n");
                                usb_reset_device(interface_to_usbdev(usb_intf));
                        }
                }
@@ -201,7 +191,7 @@ static void rtw_dev_unload(struct adapter *padapter)
        RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+rtw_dev_unload\n"));
 
        if (padapter->bup) {
-               DBG_88E("===> rtw_dev_unload\n");
+               pr_debug("===> rtw_dev_unload\n");
                padapter->bDriverStopped = true;
                if (padapter->xmitpriv.ack_tx)
                        rtw_ack_tx_done(&padapter->xmitpriv, RTW_SCTX_DONE_DRV_STOP);
@@ -224,7 +214,7 @@ static void rtw_dev_unload(struct adapter *padapter)
                         ("r871x_dev_unload():padapter->bup == false\n"));
        }
 
-       DBG_88E("<=== rtw_dev_unload\n");
+       pr_debug("<=== rtw_dev_unload\n");
 
        RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("-rtw_dev_unload\n"));
 }
@@ -236,16 +226,13 @@ static int rtw_suspend(struct usb_interface *pusb_intf, pm_message_t message)
        struct net_device *pnetdev = padapter->pnetdev;
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
        struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-
-       int ret = 0;
        u32 start_time = jiffies;
 
-
-       DBG_88E("==> %s (%s:%d)\n", __func__, current->comm, current->pid);
+       pr_debug("==> %s (%s:%d)\n", __func__, current->comm, current->pid);
 
        if ((!padapter->bup) || (padapter->bDriverStopped) ||
            (padapter->bSurpriseRemoved)) {
-               DBG_88E("padapter->bup=%d bDriverStopped=%d bSurpriseRemoved = %d\n",
+               pr_debug("padapter->bup=%d bDriverStopped=%d bSurpriseRemoved = %d\n",
                        padapter->bup, padapter->bDriverStopped,
                        padapter->bSurpriseRemoved);
                goto exit;
@@ -267,7 +254,7 @@ static int rtw_suspend(struct usb_interface *pusb_intf, pm_message_t message)
 
        if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) &&
            check_fwstate(pmlmepriv, _FW_LINKED)) {
-               DBG_88E("%s:%d %s(%pM), length:%d assoc_ssid.length:%d\n",
+               pr_debug("%s:%d %s(%pM), length:%d assoc_ssid.length:%d\n",
                        __func__, __LINE__,
                        pmlmepriv->cur_network.network.Ssid.Ssid,
                        pmlmepriv->cur_network.network.MacAddress,
@@ -279,7 +266,7 @@ static int rtw_suspend(struct usb_interface *pusb_intf, pm_message_t message)
        /* s2-2.  indicate disconnect to os */
        rtw_indicate_disconnect(padapter);
        /* s2-3. */
-       rtw_free_assoc_resources(padapter, 1);
+       rtw_free_assoc_resources(padapter);
        /* s2-4. */
        rtw_free_network_queue(padapter, true);
 
@@ -293,10 +280,10 @@ static int rtw_suspend(struct usb_interface *pusb_intf, pm_message_t message)
                rtw_indicate_disconnect(padapter);
 
 exit:
-       DBG_88E("<===  %s return %d.............. in %dms\n", __func__
-               , ret, rtw_get_passing_time_ms(start_time));
+       pr_debug("<===  %s .............. in %dms\n", __func__,
+                rtw_get_passing_time_ms(start_time));
 
-       return ret;
+       return 0;
 }
 
 static int rtw_resume_process(struct adapter *padapter)
@@ -306,7 +293,7 @@ static int rtw_resume_process(struct adapter *padapter)
        int ret = -1;
        u32 start_time = jiffies;
 
-       DBG_88E("==> %s (%s:%d)\n", __func__, current->comm, current->pid);
+       pr_debug("==> %s (%s:%d)\n", __func__, current->comm, current->pid);
 
        if (padapter) {
                pnetdev = padapter->pnetdev;
@@ -319,7 +306,7 @@ static int rtw_resume_process(struct adapter *padapter)
        rtw_reset_drv_sw(padapter);
        pwrpriv->bkeepfwalive = false;
 
-       DBG_88E("bkeepfwalive(%x)\n", pwrpriv->bkeepfwalive);
+       pr_debug("bkeepfwalive(%x)\n", pwrpriv->bkeepfwalive);
        if (pm_netdev_open(pnetdev, true) != 0)
                goto exit;
 
@@ -334,10 +321,9 @@ static int rtw_resume_process(struct adapter *padapter)
 exit:
        if (pwrpriv)
                pwrpriv->bInSuspend = false;
-       DBG_88E("<===  %s return %d.............. in %dms\n", __func__,
+       pr_debug("<===  %s return %d.............. in %dms\n", __func__,
                ret, rtw_get_passing_time_ms(start_time));
 
-
        return ret;
 }
 
@@ -407,8 +393,8 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,
                dvobj->pusbdev->do_remote_wakeup = 1;
                pusb_intf->needs_remote_wakeup = 1;
                device_init_wakeup(&pusb_intf->dev, 1);
-               DBG_88E("\n  padapter->pwrctrlpriv.bSupportRemoteWakeup~~~~~~\n");
-               DBG_88E("\n  padapter->pwrctrlpriv.bSupportRemoteWakeup~~~[%d]~~~\n",
+               pr_debug("\n  padapter->pwrctrlpriv.bSupportRemoteWakeup~~~~~~\n");
+               pr_debug("\n  padapter->pwrctrlpriv.bSupportRemoteWakeup~~~[%d]~~~\n",
                        device_may_wakeup(&pusb_intf->dev));
        }
 #endif
@@ -416,13 +402,13 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,
        /* 2012-07-11 Move here to prevent the 8723AS-VAU BT auto
         * suspend influence */
        if (usb_autopm_get_interface(pusb_intf) < 0)
-                       DBG_88E("can't get autopm:\n");
+                       pr_debug("can't get autopm:\n");
 
        /*  alloc dev name after read efuse. */
        rtw_init_netdev_name(pnetdev, padapter->registrypriv.ifname);
        rtw_macaddr_cfg(padapter->eeprompriv.mac_addr);
        memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);
-       DBG_88E("MAC Address from pnetdev->dev_addr =  %pM\n",
+       pr_debug("MAC Address from pnetdev->dev_addr =  %pM\n",
                pnetdev->dev_addr);
 
        /* step 6. Tell the network stack we exist */
@@ -431,7 +417,7 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,
                goto free_hal_data;
        }
 
-       DBG_88E("bDriverStopped:%d, bSurpriseRemoved:%d, bup:%d, hw_init_completed:%d\n"
+       pr_debug("bDriverStopped:%d, bSurpriseRemoved:%d, bup:%d, hw_init_completed:%d\n"
                , padapter->bDriverStopped
                , padapter->bSurpriseRemoved
                , padapter->bup
@@ -475,7 +461,7 @@ static void rtw_usb_if1_deinit(struct adapter *if1)
        rtw_cancel_all_timer(if1);
 
        rtw_dev_unload(if1);
-       DBG_88E("+r871xu_dev_remove, hw_init_completed=%d\n",
+       pr_debug("+r871xu_dev_remove, hw_init_completed=%d\n",
                if1->hw_init_completed);
        rtw_free_drv_sw(if1);
        if (pnetdev)
@@ -485,7 +471,6 @@ static void rtw_usb_if1_deinit(struct adapter *if1)
 static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device_id *pdid)
 {
        struct adapter *if1 = NULL;
-       int status = _FAIL;
        struct dvobj_priv *dvobj;
 
        RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+rtw_drv_init\n"));
@@ -500,19 +485,18 @@ static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device
 
        if1 = rtw_usb_if1_init(dvobj, pusb_intf, pdid);
        if (if1 == NULL) {
-               DBG_88E("rtw_init_primarystruct adapter Failed!\n");
+               pr_debug("rtw_init_primarystruct adapter Failed!\n");
                goto free_dvobj;
        }
 
        RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("-871x_drv - drv_init, success!\n"));
 
-       status = _SUCCESS;
+       return 0;
 
 free_dvobj:
-       if (status != _SUCCESS)
-               usb_dvobj_deinit(pusb_intf);
+       usb_dvobj_deinit(pusb_intf);
 exit:
-       return status == _SUCCESS ? 0 : -ENODEV;
+       return -ENODEV;
 }
 
 /*
@@ -524,8 +508,7 @@ static void rtw_dev_remove(struct usb_interface *pusb_intf)
        struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf);
        struct adapter *padapter = dvobj->if1;
 
-
-       DBG_88E("+rtw_dev_remove\n");
+       pr_debug("+rtw_dev_remove\n");
        RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+dev_remove()\n"));
 
        if (!pusb_intf->unregistering)
@@ -541,7 +524,7 @@ static void rtw_dev_remove(struct usb_interface *pusb_intf)
        usb_dvobj_deinit(pusb_intf);
 
        RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("-dev_remove()\n"));
-       DBG_88E("-r871xu_dev_remove, done\n");
+       pr_debug("-r871xu_dev_remove, done\n");
 }
 
 static struct usb_driver rtl8188e_usb_drv = {
index ef9da863c3357ec33bbb856831334d74ec77f251..fcf9b3bcf76a9dc39069c943be460a389a778b18 100644 (file)
@@ -160,21 +160,6 @@ void Dot11d_UpdateCountryIe(struct rtllib_device *dev, u8 *pTaddr,
        pDot11dInfo->State = DOT11D_STATE_LEARNED;
 }
 
-u8 DOT11D_GetMaxTxPwrInDbm(struct rtllib_device *dev, u8 Channel)
-{
-       struct rt_dot11d_info *pDot11dInfo = GET_DOT11D_INFO(dev);
-       u8 MaxTxPwrInDbm = 255;
-
-       if (MAX_CHANNEL_NUMBER < Channel) {
-               netdev_info(dev->dev, "DOT11D_GetMaxTxPwrInDbm(): Invalid Channel\n");
-               return MaxTxPwrInDbm;
-       }
-       if (pDot11dInfo->channel_map[Channel])
-               MaxTxPwrInDbm = pDot11dInfo->MaxTxPwrDbmList[Channel];
-
-       return MaxTxPwrInDbm;
-}
-
 void DOT11D_ScanComplete(struct rtllib_device *dev)
 {
        struct rt_dot11d_info *pDot11dInfo = GET_DOT11D_INFO(dev);
@@ -190,27 +175,3 @@ void DOT11D_ScanComplete(struct rtllib_device *dev)
                break;
        }
 }
-
-int ToLegalChannel(struct rtllib_device *dev, u8 channel)
-{
-       struct rt_dot11d_info *pDot11dInfo = GET_DOT11D_INFO(dev);
-       u8 default_chn = 0;
-       u32 i;
-
-       for (i = 1; i <= MAX_CHANNEL_NUMBER; i++) {
-               if (pDot11dInfo->channel_map[i] > 0) {
-                       default_chn = i;
-                       break;
-               }
-       }
-
-       if (MAX_CHANNEL_NUMBER < channel) {
-               netdev_err(dev->dev, "%s(): Invalid Channel\n", __func__);
-               return default_chn;
-       }
-
-       if (pDot11dInfo->channel_map[channel] > 0)
-               return channel;
-
-       return default_chn;
-}
index 69e0f8f7e3f8b3e6a2eeecfd138b493c77306b31..129ebed2e3cc294b96fb79bb6cfb6bd9d58b6486 100644 (file)
@@ -79,7 +79,6 @@ static inline void cpMacAddr(unsigned char *des, unsigned char *src)
 #define UPDATE_CIE_SRC(__pIeeeDev, __pTa)              \
        cpMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa)
 
-#define CIE_WATCHDOG_TH 1
 #define GET_CIE_WATCHDOG(__pIeeeDev)                           \
         (GET_DOT11D_INFO(__pIeeeDev)->CountryIeWatchdog)
 static inline void RESET_CIE_WATCHDOG(struct rtllib_device *__pIeeeDev)
@@ -88,16 +87,11 @@ static inline void RESET_CIE_WATCHDOG(struct rtllib_device *__pIeeeDev)
 }
 #define UPDATE_CIE_WATCHDOG(__pIeeeDev) (++GET_CIE_WATCHDOG(__pIeeeDev))
 
-#define IS_DOT11D_STATE_DONE(__pIeeeDev)                       \
-       (GET_DOT11D_INFO(__pIeeeDev)->State == DOT11D_STATE_DONE)
-
 void dot11d_init(struct rtllib_device *dev);
 void Dot11d_Channelmap(u8 channel_plan, struct rtllib_device *ieee);
 void Dot11d_Reset(struct rtllib_device *dev);
 void Dot11d_UpdateCountryIe(struct rtllib_device *dev, u8 *pTaddr,
                            u16 CoutryIeLen, u8 *pCoutryIe);
-u8 DOT11D_GetMaxTxPwrInDbm(struct rtllib_device *dev, u8 Channel);
 void DOT11D_ScanComplete(struct rtllib_device *dev);
-int ToLegalChannel(struct rtllib_device *dev, u8 channel);
 
 #endif
index d0b08301b88f22bac941a58b40a2b4a00f565e25..dba4584c70067f5b8a4cdaf9bd1e0183987a6b05 100644 (file)
@@ -26,8 +26,6 @@
 #define                MAX_SILENT_RESET_RX_SLOT_NUM    10
 
 #define RX_MPDU_QUEUE                          0
-#define RX_CMD_QUEUE                           1
-
 
 enum rtl819x_loopback {
        RTL819X_NO_LOOPBACK = 0,
@@ -36,11 +34,6 @@ enum rtl819x_loopback {
        RTL819X_CCK_LOOPBACK = 3,
 };
 
-
-#define RESET_DELAY_8185                       20
-
-#define RT_IBSS_INT_MASKS (IMR_BcnInt | IMR_BcnInt | IMR_TBDOK | IMR_TBDER)
-
 #define DESC90_RATE1M                          0x00
 #define DESC90_RATE2M                          0x01
 #define DESC90_RATE5_5M                                0x02
@@ -74,17 +67,6 @@ enum rtl819x_loopback {
 #define SHORT_SLOT_TIME                                9
 #define NON_SHORT_SLOT_TIME            20
 
-
-#define        MAX_LINES_HWCONFIG_TXT                  1000
-#define MAX_BYTES_LINE_HWCONFIG_TXT            128
-
-#define SW_THREE_WIRE                  0
-#define HW_THREE_WIRE                  2
-
-#define BT_DEMO_BOARD                  0
-#define BT_QA_BOARD                            1
-#define BT_FPGA                                        2
-
 #define        RX_SMOOTH                               20
 
 #define QSLT_BK                                        0x1
@@ -96,25 +78,14 @@ enum rtl819x_loopback {
 #define        QSLT_MGNT                               0x12
 #define        QSLT_CMD                                0x13
 
-#define NUM_OF_FIRMWARE_QUEUE                          10
-#define NUM_OF_PAGES_IN_FW                                     0x100
 #define NUM_OF_PAGE_IN_FW_QUEUE_BK             0x007
 #define NUM_OF_PAGE_IN_FW_QUEUE_BE             0x0aa
 #define NUM_OF_PAGE_IN_FW_QUEUE_VI             0x024
 #define NUM_OF_PAGE_IN_FW_QUEUE_VO             0x007
-#define NUM_OF_PAGE_IN_FW_QUEUE_HCCA           0
-#define NUM_OF_PAGE_IN_FW_QUEUE_CMD            0x2
 #define NUM_OF_PAGE_IN_FW_QUEUE_MGNT           0x10
-#define NUM_OF_PAGE_IN_FW_QUEUE_HIGH           0
 #define NUM_OF_PAGE_IN_FW_QUEUE_BCN            0x4
 #define NUM_OF_PAGE_IN_FW_QUEUE_PUB            0xd
 
-#define NUM_OF_PAGE_IN_FW_QUEUE_BK_DTM 0x026
-#define NUM_OF_PAGE_IN_FW_QUEUE_BE_DTM 0x048
-#define NUM_OF_PAGE_IN_FW_QUEUE_VI_DTM 0x048
-#define NUM_OF_PAGE_IN_FW_QUEUE_VO_DTM 0x026
-#define NUM_OF_PAGE_IN_FW_QUEUE_PUB_DTM        0x00
-
 #define APPLIED_RESERVED_QUEUE_IN_FW           0x80000000
 #define RSVD_FW_QUEUE_PAGE_BK_SHIFT            0x00
 #define RSVD_FW_QUEUE_PAGE_BE_SHIFT            0x08
@@ -197,23 +168,6 @@ struct tx_fwinfo_8190pci {
 
 };
 
-
-#define TX_DESC_SIZE                   32
-
-#define TX_DESC_CMD_SIZE       32
-
-
-#define TX_STATUS_DESC_SIZE    32
-
-#define TX_FWINFO_SIZE 8
-
-
-#define RX_DESC_SIZE   16
-
-#define RX_STATUS_DESC_SIZE    16
-
-#define RX_DRIVER_INFO_SIZE    8
-
 struct log_int_8190 {
        u32     nIMR_COMDOK;
        u32     nIMR_MGNTDOK;
index facc6f1f302bf212f24a8634a47a3987f156c17b..c8f25ade25355c42022de5593df7457cb9b6dc0f 100644 (file)
 #include "r8192E_phy.h"
 #include "r8190P_rtl8256.h"
 
-void PHY_SetRF8256Bandwidth(struct net_device *dev,
-                           enum ht_channel_width Bandwidth)
+void rtl92e_set_bandwidth(struct net_device *dev,
+                         enum ht_channel_width Bandwidth)
 {
        u8      eRFPath;
        struct r8192_priv *priv = rtllib_priv(dev);
 
+       if (priv->card_8192_version != VERSION_8190_BD &&
+           priv->card_8192_version != VERSION_8190_BE) {
+               netdev_warn(dev, "%s(): Unknown HW version.\n", __func__);
+               return;
+       }
+
        for (eRFPath = 0; eRFPath < priv->NumTotalRFPath; eRFPath++) {
-               if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath))
+               if (!rtl92e_is_legal_rf_path(dev, eRFPath))
                                continue;
 
                switch (Bandwidth) {
                case HT_CHANNEL_WIDTH_20:
-                       if (priv->card_8192_version == VERSION_8190_BD ||
-                           priv->card_8192_version == VERSION_8190_BE) {
-                               rtl8192_phy_SetRFReg(dev,
-                                               (enum rf90_radio_path)eRFPath,
-                                               0x0b, bMask12Bits, 0x100);
-                               rtl8192_phy_SetRFReg(dev,
-                                               (enum rf90_radio_path)eRFPath,
-                                               0x2c, bMask12Bits, 0x3d7);
-                               rtl8192_phy_SetRFReg(dev,
-                                               (enum rf90_radio_path)eRFPath,
-                                               0x0e, bMask12Bits, 0x021);
-
-                       } else {
-                               netdev_warn(dev, "%s(): Unknown HW version.\n",
-                                           __func__);
-                       }
-
+                       rtl92e_set_rf_reg(dev, (enum rf90_radio_path)eRFPath,
+                                         0x0b, bMask12Bits, 0x100);
+                       rtl92e_set_rf_reg(dev, (enum rf90_radio_path)eRFPath,
+                                         0x2c, bMask12Bits, 0x3d7);
+                       rtl92e_set_rf_reg(dev, (enum rf90_radio_path)eRFPath,
+                                         0x0e, bMask12Bits, 0x021);
                        break;
                case HT_CHANNEL_WIDTH_20_40:
-                       if (priv->card_8192_version == VERSION_8190_BD ||
-                           priv->card_8192_version == VERSION_8190_BE) {
-                               rtl8192_phy_SetRFReg(dev,
-                                                (enum rf90_radio_path)eRFPath,
-                                                0x0b, bMask12Bits, 0x300);
-                               rtl8192_phy_SetRFReg(dev,
-                                                (enum rf90_radio_path)eRFPath,
-                                                0x2c, bMask12Bits, 0x3ff);
-                               rtl8192_phy_SetRFReg(dev,
-                                                (enum rf90_radio_path)eRFPath,
-                                                0x0e, bMask12Bits, 0x0e1);
-
-                       } else {
-                               netdev_warn(dev, "%s(): Unknown HW version.\n",
-                                           __func__);
-                       }
-
-
+                       rtl92e_set_rf_reg(dev, (enum rf90_radio_path)eRFPath,
+                                         0x0b, bMask12Bits, 0x300);
+                       rtl92e_set_rf_reg(dev, (enum rf90_radio_path)eRFPath,
+                                         0x2c, bMask12Bits, 0x3ff);
+                       rtl92e_set_rf_reg(dev, (enum rf90_radio_path)eRFPath,
+                                         0x0e, bMask12Bits, 0x0e1);
                        break;
                default:
                        netdev_err(dev, "%s(): Unknown bandwidth: %#X\n",
@@ -81,15 +64,7 @@ void PHY_SetRF8256Bandwidth(struct net_device *dev,
        }
 }
 
-bool PHY_RF8256_Config(struct net_device *dev)
-{
-       struct r8192_priv *priv = rtllib_priv(dev);
-
-       priv->NumTotalRFPath = RTL819X_TOTAL_RF_PATH;
-       return phy_RF8256_Config_ParaFile(dev);
-}
-
-bool phy_RF8256_Config_ParaFile(struct net_device *dev)
+bool rtl92e_config_rf(struct net_device *dev)
 {
        u32     u4RegValue = 0;
        u8      eRFPath;
@@ -102,9 +77,11 @@ bool phy_RF8256_Config_ParaFile(struct net_device *dev)
        u8      ConstRetryTimes = 5, RetryTimes = 5;
        u8 ret = 0;
 
+       priv->NumTotalRFPath = RTL819X_TOTAL_RF_PATH;
+
        for (eRFPath = (enum rf90_radio_path)RF90_PATH_A;
             eRFPath < priv->NumTotalRFPath; eRFPath++) {
-               if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath))
+               if (!rtl92e_is_legal_rf_path(dev, eRFPath))
                                continue;
 
                pPhyReg = &priv->PHYRegDef[eRFPath];
@@ -113,114 +90,63 @@ bool phy_RF8256_Config_ParaFile(struct net_device *dev)
                switch (eRFPath) {
                case RF90_PATH_A:
                case RF90_PATH_C:
-                       u4RegValue = rtl8192_QueryBBReg(dev, pPhyReg->rfintfs,
-                                                       bRFSI_RFENV);
+                       u4RegValue = rtl92e_get_bb_reg(dev, pPhyReg->rfintfs,
+                                                      bRFSI_RFENV);
                        break;
                case RF90_PATH_B:
                case RF90_PATH_D:
-                       u4RegValue = rtl8192_QueryBBReg(dev, pPhyReg->rfintfs,
-                                                       bRFSI_RFENV<<16);
+                       u4RegValue = rtl92e_get_bb_reg(dev, pPhyReg->rfintfs,
+                                                      bRFSI_RFENV<<16);
                        break;
                }
 
-               rtl8192_setBBreg(dev, pPhyReg->rfintfe, bRFSI_RFENV<<16, 0x1);
+               rtl92e_set_bb_reg(dev, pPhyReg->rfintfe, bRFSI_RFENV<<16, 0x1);
 
-               rtl8192_setBBreg(dev, pPhyReg->rfintfo, bRFSI_RFENV, 0x1);
+               rtl92e_set_bb_reg(dev, pPhyReg->rfintfo, bRFSI_RFENV, 0x1);
 
-               rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2,
-                                b3WireAddressLength, 0x0);
-               rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2,
-                                b3WireDataLength, 0x0);
+               rtl92e_set_bb_reg(dev, pPhyReg->rfHSSIPara2,
+                                 b3WireAddressLength, 0x0);
+               rtl92e_set_bb_reg(dev, pPhyReg->rfHSSIPara2,
+                                 b3WireDataLength, 0x0);
 
-               rtl8192_phy_SetRFReg(dev, (enum rf90_radio_path) eRFPath, 0x0,
-                                    bMask12Bits, 0xbf);
+               rtl92e_set_rf_reg(dev, (enum rf90_radio_path)eRFPath, 0x0,
+                                 bMask12Bits, 0xbf);
 
-               rtStatus = rtl8192_phy_checkBBAndRF(dev, HW90_BLOCK_RF,
-                                               (enum rf90_radio_path)eRFPath);
+               rtStatus = rtl92e_check_bb_and_rf(dev, HW90_BLOCK_RF,
+                                                 (enum rf90_radio_path)eRFPath);
                if (!rtStatus) {
                        netdev_err(dev, "%s(): Failed to check RF Path %d.\n",
                                   __func__, eRFPath);
-                       goto phy_RF8256_Config_ParaFile_Fail;
+                       goto fail;
                }
 
                RetryTimes = ConstRetryTimes;
                RF3_Final_Value = 0;
-               switch (eRFPath) {
-               case RF90_PATH_A:
-                       while (RF3_Final_Value != RegValueToBeCheck &&
-                              RetryTimes != 0) {
-                               ret = rtl8192_phy_ConfigRFWithHeaderFile(dev,
-                                               (enum rf90_radio_path)eRFPath);
-                               RF3_Final_Value = rtl8192_phy_QueryRFReg(dev,
-                                                (enum rf90_radio_path)eRFPath,
-                                                RegOffSetToBeCheck,
-                                                bMask12Bits);
-                               RT_TRACE(COMP_RF,
-                                        "RF %d %d register final value: %x\n",
-                                        eRFPath, RegOffSetToBeCheck,
-                                        RF3_Final_Value);
-                               RetryTimes--;
-                       }
-                       break;
-               case RF90_PATH_B:
-                       while (RF3_Final_Value != RegValueToBeCheck &&
-                              RetryTimes != 0) {
-                               ret = rtl8192_phy_ConfigRFWithHeaderFile(dev,
-                                               (enum rf90_radio_path)eRFPath);
-                               RF3_Final_Value = rtl8192_phy_QueryRFReg(dev,
-                                                (enum rf90_radio_path)eRFPath,
-                                                RegOffSetToBeCheck,
-                                                bMask12Bits);
-                               RT_TRACE(COMP_RF,
-                                        "RF %d %d register final value: %x\n",
-                                        eRFPath, RegOffSetToBeCheck,
-                                        RF3_Final_Value);
-                               RetryTimes--;
-                       }
-                       break;
-               case RF90_PATH_C:
-                       while (RF3_Final_Value != RegValueToBeCheck &&
-                              RetryTimes != 0) {
-                               ret = rtl8192_phy_ConfigRFWithHeaderFile(dev,
+               while (RF3_Final_Value != RegValueToBeCheck &&
+                      RetryTimes != 0) {
+                       ret = rtl92e_config_rf_path(dev,
                                                (enum rf90_radio_path)eRFPath);
-                               RF3_Final_Value = rtl8192_phy_QueryRFReg(dev,
+                       RF3_Final_Value = rtl92e_get_rf_reg(dev,
                                                (enum rf90_radio_path)eRFPath,
                                                RegOffSetToBeCheck,
                                                bMask12Bits);
-                               RT_TRACE(COMP_RF,
-                                        "RF %d %d register final value: %x\n",
-                                        eRFPath, RegOffSetToBeCheck,
-                                        RF3_Final_Value);
-                               RetryTimes--;
-                       }
-                       break;
-               case RF90_PATH_D:
-                       while (RF3_Final_Value != RegValueToBeCheck &&
-                              RetryTimes != 0) {
-                               ret = rtl8192_phy_ConfigRFWithHeaderFile(dev,
-                                              (enum rf90_radio_path)eRFPath);
-                               RF3_Final_Value = rtl8192_phy_QueryRFReg(dev,
-                                              (enum rf90_radio_path)eRFPath,
-                                              RegOffSetToBeCheck, bMask12Bits);
-                               RT_TRACE(COMP_RF,
-                                        "RF %d %d register final value: %x\n",
-                                        eRFPath, RegOffSetToBeCheck,
-                                        RF3_Final_Value);
-                               RetryTimes--;
-                       }
-                       break;
+                       RT_TRACE(COMP_RF,
+                                "RF %d %d register final value: %x\n",
+                                eRFPath, RegOffSetToBeCheck,
+                                RF3_Final_Value);
+                       RetryTimes--;
                }
 
                switch (eRFPath) {
                case RF90_PATH_A:
                case RF90_PATH_C:
-                       rtl8192_setBBreg(dev, pPhyReg->rfintfs, bRFSI_RFENV,
-                                        u4RegValue);
+                       rtl92e_set_bb_reg(dev, pPhyReg->rfintfs, bRFSI_RFENV,
+                                         u4RegValue);
                        break;
                case RF90_PATH_B:
                case RF90_PATH_D:
-                       rtl8192_setBBreg(dev, pPhyReg->rfintfs, bRFSI_RFENV<<16,
-                                        u4RegValue);
+                       rtl92e_set_bb_reg(dev, pPhyReg->rfintfs,
+                                         bRFSI_RFENV<<16, u4RegValue);
                        break;
                }
 
@@ -228,7 +154,7 @@ bool phy_RF8256_Config_ParaFile(struct net_device *dev)
                        netdev_err(dev,
                                   "%s(): Failed to initialize RF Path %d.\n",
                                   __func__, eRFPath);
-                       goto phy_RF8256_Config_ParaFile_Fail;
+                       goto fail;
                }
 
        }
@@ -236,11 +162,11 @@ bool phy_RF8256_Config_ParaFile(struct net_device *dev)
        RT_TRACE(COMP_PHY, "PHY Initialization Success\n");
        return true;
 
-phy_RF8256_Config_ParaFile_Fail:
+fail:
        return false;
 }
 
-void PHY_SetRF8256CCKTxPower(struct net_device *dev, u8        powerlevel)
+void rtl92e_set_cck_tx_power(struct net_device *dev, u8 powerlevel)
 {
        u32     TxAGC = 0;
        struct r8192_priv *priv = rtllib_priv(dev);
@@ -254,11 +180,11 @@ void PHY_SetRF8256CCKTxPower(struct net_device *dev, u8   powerlevel)
        }
        if (TxAGC > 0x24)
                TxAGC = 0x24;
-       rtl8192_setBBreg(dev, rTxAGC_CCK_Mcs32, bTxAGCRateCCK, TxAGC);
+       rtl92e_set_bb_reg(dev, rTxAGC_CCK_Mcs32, bTxAGCRateCCK, TxAGC);
 }
 
 
-void PHY_SetRF8256OFDMTxPower(struct net_device *dev, u8 powerlevel)
+void rtl92e_set_ofdm_tx_power(struct net_device *dev, u8 powerlevel)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        u32 writeVal, powerBase0, powerBase1, writeVal_tmp;
@@ -300,7 +226,7 @@ void PHY_SetRF8256OFDMTxPower(struct net_device *dev, u8 powerlevel)
                else
                        writeVal = (byte3 << 24) | (byte2 << 16) |
                                   (byte1 << 8) | byte0;
-               rtl8192_setBBreg(dev, RegOffset[index], 0x7f7f7f7f, writeVal);
+               rtl92e_set_bb_reg(dev, RegOffset[index], 0x7f7f7f7f, writeVal);
        }
 
 }
index 64e831d2f4e565b89a90e3ed529b6c1da268d5ac..5af837f969b89b534798d10990a1c8a30e2846f8 100644 (file)
 #define RTL8225H
 
 #define RTL819X_TOTAL_RF_PATH 2
-extern void PHY_SetRF8256Bandwidth(struct net_device *dev,
-                                  enum ht_channel_width Bandwidth);
-extern bool PHY_RF8256_Config(struct net_device *dev);
-extern bool phy_RF8256_Config_ParaFile(struct net_device *dev);
-extern void PHY_SetRF8256CCKTxPower(struct net_device *dev, u8 powerlevel);
-extern void PHY_SetRF8256OFDMTxPower(struct net_device *dev, u8 powerlevel);
+extern void rtl92e_set_bandwidth(struct net_device *dev,
+                                enum ht_channel_width Bandwidth);
+extern bool rtl92e_config_rf(struct net_device *dev);
+extern void rtl92e_set_cck_tx_power(struct net_device *dev, u8 powerlevel);
+extern void rtl92e_set_ofdm_tx_power(struct net_device *dev, u8 powerlevel);
 
 #endif
index ebd08a16685ecd7eefb67c5bd924dfcf0599c582..9ddabf59784c5c6809b2ea3e3a7ad3b26907aad6 100644 (file)
 #include "r8192E_hw.h"
 #include "r8192E_cmdpkt.h"
 
-bool cmpk_message_handle_tx(
-       struct net_device *dev,
-       u8      *code_virtual_address,
-       u32     packettype,
-       u32     buffer_len)
+bool rtl92e_send_cmd_pkt(struct net_device *dev, u8 *code_virtual_address,
+                        u32 packettype, u32 buffer_len)
 {
 
        bool                            rt_status = true;
@@ -41,7 +38,7 @@ bool cmpk_message_handle_tx(
        struct tx_fwinfo_8190pci *pTxFwInfo = NULL;
 
        RT_TRACE(COMP_CMDPKT, "%s(),buffer_len is %d\n", __func__, buffer_len);
-       firmware_init_param(dev);
+       rtl92e_init_fw_param(dev);
        frag_threshold = pfirmware->cmdpacket_frag_thresold;
 
        do {
@@ -84,7 +81,7 @@ bool cmpk_message_handle_tx(
 
        } while (frag_offset < buffer_len);
 
-       write_nic_byte(dev, TPPoll, TPPoll_CQ);
+       rtl92e_writeb(dev, TPPoll, TPPoll_CQ);
 Failed:
        return rt_status;
 }
index f714d5100059ab3d841a59b4f242a725cba21afd..5718fd8fd1189fc87d330bcb1affd7537392c8f5 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef R819XUSB_CMDPKT_H
 #define R819XUSB_CMDPKT_H
 
-extern bool cmpk_message_handle_tx(struct net_device *dev,
-                                  u8 *codevirtualaddress, u32 packettype,
-                                  u32 buffer_len);
+extern bool rtl92e_send_cmd_pkt(struct net_device *dev, u8 *codevirtualaddress,
+                               u32 packettype, u32 buffer_len);
 #endif
index f6661bbae7a8150e197fd685c350f9b518fc6e3e..c28cabc23fc05b6e25cb5b506a2238611c401277 100644 (file)
@@ -33,7 +33,7 @@
 static int WDCAPARA_ADD[] = {EDCAPARA_BE, EDCAPARA_BK, EDCAPARA_VI,
                             EDCAPARA_VO};
 
-void rtl8192e_start_beacon(struct net_device *dev)
+void rtl92e_start_beacon(struct net_device *dev)
 {
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
        struct rtllib_network *net = &priv->rtllib->current_network;
@@ -41,21 +41,20 @@ void rtl8192e_start_beacon(struct net_device *dev)
        u16 BcnCW = 6;
        u16 BcnIFS = 0xf;
 
-       DMESG("Enabling beacon TX");
-       rtl8192_irq_disable(dev);
+       rtl92e_irq_disable(dev);
 
-       write_nic_word(dev, ATIMWND, 2);
+       rtl92e_writew(dev, ATIMWND, 2);
 
-       write_nic_word(dev, BCN_INTERVAL, net->beacon_interval);
-       write_nic_word(dev, BCN_DRV_EARLY_INT, 10);
-       write_nic_word(dev, BCN_DMATIME, 256);
+       rtl92e_writew(dev, BCN_INTERVAL, net->beacon_interval);
+       rtl92e_writew(dev, BCN_DRV_EARLY_INT, 10);
+       rtl92e_writew(dev, BCN_DMATIME, 256);
 
-       write_nic_byte(dev, BCN_ERR_THRESH, 100);
+       rtl92e_writeb(dev, BCN_ERR_THRESH, 100);
 
        BcnTimeCfg |= BcnCW<<BCN_TCFG_CW_SHIFT;
        BcnTimeCfg |= BcnIFS<<BCN_TCFG_IFS;
-       write_nic_word(dev, BCN_TCFG, BcnTimeCfg);
-       rtl8192_irq_enable(dev);
+       rtl92e_writew(dev, BCN_TCFG, BcnTimeCfg);
+       rtl92e_irq_enable(dev);
 }
 
 static void rtl8192e_update_msr(struct net_device *dev)
@@ -64,7 +63,7 @@ static void rtl8192e_update_msr(struct net_device *dev)
        u8 msr;
        enum led_ctl_mode LedAction = LED_CTL_NO_LINK;
 
-       msr  = read_nic_byte(dev, MSR);
+       msr  = rtl92e_readb(dev, MSR);
        msr &= ~MSR_LINK_MASK;
 
        switch (priv->rtllib->iw_mode) {
@@ -91,26 +90,26 @@ static void rtl8192e_update_msr(struct net_device *dev)
                break;
        }
 
-       write_nic_byte(dev, MSR, msr);
+       rtl92e_writeb(dev, MSR, msr);
        if (priv->rtllib->LedControlHandler)
                priv->rtllib->LedControlHandler(dev, LedAction);
 }
 
-void rtl8192e_SetHwReg(struct net_device *dev, u8 variable, u8 *val)
+void rtl92e_set_reg(struct net_device *dev, u8 variable, u8 *val)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
        switch (variable) {
        case HW_VAR_BSSID:
-               write_nic_dword(dev, BSSIDR, ((u32 *)(val))[0]);
-               write_nic_word(dev, BSSIDR+2, ((u16 *)(val+2))[0]);
+               rtl92e_writel(dev, BSSIDR, ((u32 *)(val))[0]);
+               rtl92e_writew(dev, BSSIDR+2, ((u16 *)(val+2))[0]);
                break;
 
        case HW_VAR_MEDIA_STATUS:
        {
                enum rt_op_mode OpMode = *((enum rt_op_mode *)(val));
                enum led_ctl_mode LedAction = LED_CTL_NO_LINK;
-               u8              btMsr = read_nic_byte(dev, MSR);
+               u8 btMsr = rtl92e_readb(dev, MSR);
 
                btMsr &= 0xfc;
 
@@ -134,7 +133,7 @@ void rtl8192e_SetHwReg(struct net_device *dev, u8 variable, u8 *val)
                        break;
                }
 
-               write_nic_byte(dev, MSR, btMsr);
+               rtl92e_writeb(dev, MSR, btMsr);
 
        }
        break;
@@ -144,7 +143,7 @@ void rtl8192e_SetHwReg(struct net_device *dev, u8 variable, u8 *val)
                u32     RegRCR, Type;
 
                Type = ((u8 *)(val))[0];
-               RegRCR = read_nic_dword(dev, RCR);
+               RegRCR = rtl92e_readl(dev, RCR);
                priv->ReceiveConfig = RegRCR;
 
                if (Type == true)
@@ -152,7 +151,7 @@ void rtl8192e_SetHwReg(struct net_device *dev, u8 variable, u8 *val)
                else if (Type == false)
                        RegRCR &= (~RCR_CBSSID);
 
-               write_nic_dword(dev, RCR, RegRCR);
+               rtl92e_writel(dev, RCR, RegRCR);
                priv->ReceiveConfig = RegRCR;
 
        }
@@ -161,7 +160,7 @@ void rtl8192e_SetHwReg(struct net_device *dev, u8 variable, u8 *val)
        case HW_VAR_SLOT_TIME:
 
                priv->slot_time = val[0];
-               write_nic_byte(dev, SLOT_TIME, val[0]);
+               rtl92e_writeb(dev, SLOT_TIME, val[0]);
 
                break;
 
@@ -173,12 +172,12 @@ void rtl8192e_SetHwReg(struct net_device *dev, u8 variable, u8 *val)
                regTmp = priv->basic_rate;
                if (priv->short_preamble)
                        regTmp |= BRSR_AckShortPmb;
-               write_nic_dword(dev, RRSR, regTmp);
+               rtl92e_writel(dev, RRSR, regTmp);
                break;
        }
 
        case HW_VAR_CPU_RST:
-               write_nic_dword(dev, CPU_GEN, ((u32 *)(val))[0]);
+               rtl92e_writel(dev, CPU_GEN, ((u32 *)(val))[0]);
                break;
 
        case HW_VAR_AC_PARAM:
@@ -194,7 +193,7 @@ void rtl8192e_SetHwReg(struct net_device *dev, u8 variable, u8 *val)
                u1bAIFS = qop->aifs[pAcParam] *
                          ((mode&(IEEE_G|IEEE_N_24G)) ? 9 : 20) + aSifsTime;
 
-               dm_init_edca_turbo(dev);
+               rtl92e_dm_init_edca_turbo(dev);
 
                u4bAcParam = (le16_to_cpu(qop->tx_op_limit[pAcParam]) <<
                              AC_PARAM_TXOP_LIMIT_OFFSET) |
@@ -208,19 +207,19 @@ void rtl8192e_SetHwReg(struct net_device *dev, u8 variable, u8 *val)
                         __func__, eACI, u4bAcParam);
                switch (eACI) {
                case AC1_BK:
-                       write_nic_dword(dev, EDCAPARA_BK, u4bAcParam);
+                       rtl92e_writel(dev, EDCAPARA_BK, u4bAcParam);
                        break;
 
                case AC0_BE:
-                       write_nic_dword(dev, EDCAPARA_BE, u4bAcParam);
+                       rtl92e_writel(dev, EDCAPARA_BE, u4bAcParam);
                        break;
 
                case AC2_VI:
-                       write_nic_dword(dev, EDCAPARA_VI, u4bAcParam);
+                       rtl92e_writel(dev, EDCAPARA_VI, u4bAcParam);
                        break;
 
                case AC3_VO:
-                       write_nic_dword(dev, EDCAPARA_VO, u4bAcParam);
+                       rtl92e_writel(dev, EDCAPARA_VO, u4bAcParam);
                        break;
 
                default:
@@ -242,7 +241,7 @@ void rtl8192e_SetHwReg(struct net_device *dev, u8 variable, u8 *val)
                union aci_aifsn *pAciAifsn = (union aci_aifsn *) &
                                              (qos_parameters->aifs[0]);
                u8 acm = pAciAifsn->f.acm;
-               u8 AcmCtrl = read_nic_byte(dev, AcmHwCtrl);
+               u8 AcmCtrl = rtl92e_readb(dev, AcmHwCtrl);
 
                RT_TRACE(COMP_DBG, "===========>%s():HW_VAR_ACM_CTRL:%x\n",
                         __func__, eACI);
@@ -290,20 +289,20 @@ void rtl8192e_SetHwReg(struct net_device *dev, u8 variable, u8 *val)
                RT_TRACE(COMP_QOS,
                         "SetHwReg8190pci(): [HW_VAR_ACM_CTRL] Write 0x%X\n",
                         AcmCtrl);
-               write_nic_byte(dev, AcmHwCtrl, AcmCtrl);
+               rtl92e_writeb(dev, AcmHwCtrl, AcmCtrl);
                break;
        }
 
        case HW_VAR_SIFS:
-               write_nic_byte(dev, SIFS, val[0]);
-               write_nic_byte(dev, SIFS+1, val[0]);
+               rtl92e_writeb(dev, SIFS, val[0]);
+               rtl92e_writeb(dev, SIFS+1, val[0]);
                break;
 
        case HW_VAR_RF_TIMING:
        {
                u8 Rf_Timing = *((u8 *)val);
 
-               write_nic_byte(dev, rFPGA0_RFTiming1, Rf_Timing);
+               rtl92e_writeb(dev, rFPGA0_RFTiming1, Rf_Timing);
                break;
        }
 
@@ -324,7 +323,7 @@ static void rtl8192_read_eeprom_info(struct net_device *dev)
 
        RT_TRACE(COMP_INIT, "====> rtl8192_read_eeprom_info\n");
 
-       EEPROMId = eprom_read(dev, 0);
+       EEPROMId = rtl92e_eeprom_read(dev, 0);
        if (EEPROMId != RTL8190_EEPROM_ID) {
                netdev_err(dev, "%s(): Invalid EEPROM ID: %x\n", __func__,
                           EEPROMId);
@@ -334,12 +333,14 @@ static void rtl8192_read_eeprom_info(struct net_device *dev)
        }
 
        if (!priv->AutoloadFailFlag) {
-               priv->eeprom_vid = eprom_read(dev, EEPROM_VID >> 1);
-               priv->eeprom_did = eprom_read(dev, EEPROM_DID >> 1);
+               priv->eeprom_vid = rtl92e_eeprom_read(dev, EEPROM_VID >> 1);
+               priv->eeprom_did = rtl92e_eeprom_read(dev, EEPROM_DID >> 1);
 
-               usValue = eprom_read(dev, (u16)(EEPROM_Customer_ID>>1)) >> 8;
+               usValue = rtl92e_eeprom_read(dev,
+                                            (u16)(EEPROM_Customer_ID>>1)) >> 8;
                priv->eeprom_CustomerID = (u8)(usValue & 0xff);
-               usValue = eprom_read(dev, EEPROM_ICVersion_ChannelPlan>>1);
+               usValue = rtl92e_eeprom_read(dev,
+                                            EEPROM_ICVersion_ChannelPlan>>1);
                priv->eeprom_ChannelPlan = usValue&0xff;
                IC_Version = (usValue & 0xff00)>>8;
 
@@ -377,7 +378,7 @@ static void rtl8192_read_eeprom_info(struct net_device *dev)
 
        if (!priv->AutoloadFailFlag) {
                for (i = 0; i < 6; i += 2) {
-                       usValue = eprom_read(dev,
+                       usValue = rtl92e_eeprom_read(dev,
                                 (u16)((EEPROM_NODE_ADDRESS_BYTE_0 + i) >> 1));
                        *(u16 *)(&dev->dev_addr[i]) = usValue;
                }
@@ -397,8 +398,8 @@ static void rtl8192_read_eeprom_info(struct net_device *dev)
 
        if (priv->card_8192_version > VERSION_8190_BD) {
                if (!priv->AutoloadFailFlag) {
-                       tempval = (eprom_read(dev, (EEPROM_RFInd_PowerDiff >>
-                                             1))) & 0xff;
+                       tempval = (rtl92e_eeprom_read(dev,
+                                                     (EEPROM_RFInd_PowerDiff >> 1))) & 0xff;
                        priv->EEPROMLegacyHTTxPowerDiff = tempval & 0xf;
 
                        if (tempval&0x80)
@@ -412,7 +413,7 @@ static void rtl8192_read_eeprom_info(struct net_device *dev)
                        priv->EEPROMLegacyHTTxPowerDiff);
 
                if (!priv->AutoloadFailFlag)
-                       priv->EEPROMThermalMeter = (u8)(((eprom_read(dev,
+                       priv->EEPROMThermalMeter = (u8)(((rtl92e_eeprom_read(dev,
                                                   (EEPROM_ThermalMeter>>1))) &
                                                   0xff00)>>8);
                else
@@ -423,7 +424,7 @@ static void rtl8192_read_eeprom_info(struct net_device *dev)
 
                if (priv->epromtype == EEPROM_93C46) {
                        if (!priv->AutoloadFailFlag) {
-                               usValue = eprom_read(dev,
+                               usValue = rtl92e_eeprom_read(dev,
                                          EEPROM_TxPwDiff_CrystalCap >> 1);
                                priv->EEPROMAntPwDiff = (usValue&0x0fff);
                                priv->EEPROMCrystalCap = (u8)((usValue & 0xf000)
@@ -441,7 +442,7 @@ static void rtl8192_read_eeprom_info(struct net_device *dev)
 
                        for (i = 0; i < 14; i += 2) {
                                if (!priv->AutoloadFailFlag)
-                                       usValue = eprom_read(dev,
+                                       usValue = rtl92e_eeprom_read(dev,
                                                  (u16)((EEPROM_TxPwIndex_CCK +
                                                  i) >> 1));
                                else
@@ -457,7 +458,7 @@ static void rtl8192_read_eeprom_info(struct net_device *dev)
                        }
                        for (i = 0; i < 14; i += 2) {
                                if (!priv->AutoloadFailFlag)
-                                       usValue = eprom_read(dev,
+                                       usValue = rtl92e_eeprom_read(dev,
                                                (u16)((EEPROM_TxPwIndex_OFDM_24G
                                                + i) >> 1));
                                else
@@ -561,7 +562,7 @@ static void rtl8192_read_eeprom_info(struct net_device *dev)
                RT_TRACE(COMP_INIT, "\n2T4R config\n");
        }
 
-       init_rate_adaptive(dev);
+       rtl92e_init_adaptive_rate(dev);
 
        priv->rf_chip = RF_8256;
 
@@ -626,13 +627,13 @@ static void rtl8192_read_eeprom_info(struct net_device *dev)
        RT_TRACE(COMP_TRACE, "<==== ReadAdapterInfo\n");
 }
 
-void rtl8192_get_eeprom_size(struct net_device *dev)
+void rtl92e_get_eeprom_size(struct net_device *dev)
 {
        u16 curCR;
        struct r8192_priv *priv = rtllib_priv(dev);
 
        RT_TRACE(COMP_INIT, "===========>%s()\n", __func__);
-       curCR = read_nic_dword(dev, EPROM_CMD);
+       curCR = rtl92e_readl(dev, EPROM_CMD);
        RT_TRACE(COMP_INIT, "read from Reg Cmd9346CR(%x):%x\n", EPROM_CMD,
                 curCR);
        priv->epromtype = (curCR & EPROM_CMD_9356SEL) ? EEPROM_93C56 :
@@ -684,26 +685,26 @@ static void rtl8192_hwconfig(struct net_device *dev)
                break;
        }
 
-       write_nic_byte(dev, BW_OPMODE, regBwOpMode);
+       rtl92e_writeb(dev, BW_OPMODE, regBwOpMode);
        {
                u32 ratr_value = 0;
 
                ratr_value = regRATR;
                if (priv->rf_type == RF_1T2R)
                        ratr_value &= ~(RATE_ALL_OFDM_2SS);
-               write_nic_dword(dev, RATR0, ratr_value);
-               write_nic_byte(dev, UFWP, 1);
+               rtl92e_writel(dev, RATR0, ratr_value);
+               rtl92e_writeb(dev, UFWP, 1);
        }
-       regTmp = read_nic_byte(dev, 0x313);
+       regTmp = rtl92e_readb(dev, 0x313);
        regRRSR = ((regTmp) << 24) | (regRRSR & 0x00ffffff);
-       write_nic_dword(dev, RRSR, regRRSR);
+       rtl92e_writel(dev, RRSR, regRRSR);
 
-       write_nic_word(dev, RETRY_LIMIT,
-                       priv->ShortRetryLimit << RETRY_LIMIT_SHORT_SHIFT |
-                       priv->LongRetryLimit << RETRY_LIMIT_LONG_SHIFT);
+       rtl92e_writew(dev, RETRY_LIMIT,
+                     priv->ShortRetryLimit << RETRY_LIMIT_SHORT_SHIFT |
+                     priv->LongRetryLimit << RETRY_LIMIT_LONG_SHIFT);
 }
 
-bool rtl8192_adapter_start(struct net_device *dev)
+bool rtl92e_start_adapter(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        u32 ulRegRead;
@@ -719,10 +720,10 @@ bool rtl8192_adapter_start(struct net_device *dev)
        priv->being_init_adapter = true;
 
 start:
-       rtl8192_pci_resetdescring(dev);
+       rtl92e_reset_desc_ring(dev);
        priv->Rf_Mode = RF_OP_By_SW_3wire;
        if (priv->ResetProgress == RESET_TYPE_NORESET) {
-               write_nic_byte(dev, ANAPAR, 0x37);
+               rtl92e_writeb(dev, ANAPAR, 0x37);
                mdelay(500);
        }
        priv->pFirmware->firmware_status = FW_STATUS_0_INIT;
@@ -730,7 +731,7 @@ start:
        if (priv->RegRfOff)
                priv->rtllib->eRFPowerState = eRfOff;
 
-       ulRegRead = read_nic_dword(dev, CPU_GEN);
+       ulRegRead = rtl92e_readl(dev, CPU_GEN);
        if (priv->pFirmware->firmware_status == FW_STATUS_0_INIT)
                ulRegRead |= CPU_GEN_SYSTEM_RESET;
        else if (priv->pFirmware->firmware_status == FW_STATUS_5_READY)
@@ -739,19 +740,19 @@ start:
                netdev_err(dev, "%s(): undefined firmware state: %d.\n",
                           __func__, priv->pFirmware->firmware_status);
 
-       write_nic_dword(dev, CPU_GEN, ulRegRead);
+       rtl92e_writel(dev, CPU_GEN, ulRegRead);
 
-       ICVersion = read_nic_byte(dev, IC_VERRSION);
+       ICVersion = rtl92e_readb(dev, IC_VERRSION);
        if (ICVersion >= 0x4) {
-               SwitchingRegulatorOutput = read_nic_byte(dev, SWREGULATOR);
+               SwitchingRegulatorOutput = rtl92e_readb(dev, SWREGULATOR);
                if (SwitchingRegulatorOutput  != 0xb8) {
-                       write_nic_byte(dev, SWREGULATOR, 0xa8);
+                       rtl92e_writeb(dev, SWREGULATOR, 0xa8);
                        mdelay(1);
-                       write_nic_byte(dev, SWREGULATOR, 0xb8);
+                       rtl92e_writeb(dev, SWREGULATOR, 0xb8);
                }
        }
        RT_TRACE(COMP_INIT, "BB Config Start!\n");
-       rtStatus = rtl8192_BBConfig(dev);
+       rtStatus = rtl92e_config_bb(dev);
        if (!rtStatus) {
                netdev_warn(dev, "%s(): Failed to configure BB\n", __func__);
                return rtStatus;
@@ -760,7 +761,7 @@ start:
 
        priv->LoopbackMode = RTL819X_NO_LOOPBACK;
        if (priv->ResetProgress == RESET_TYPE_NORESET) {
-               ulRegRead = read_nic_dword(dev, CPU_GEN);
+               ulRegRead = rtl92e_readl(dev, CPU_GEN);
                if (priv->LoopbackMode == RTL819X_NO_LOOPBACK)
                        ulRegRead = ((ulRegRead & CPU_GEN_NO_LOOPBACK_MSK) |
                                     CPU_GEN_NO_LOOPBACK_SET);
@@ -770,73 +771,73 @@ start:
                        netdev_err(dev, "%s: Invalid loopback mode setting.\n",
                                   __func__);
 
-               write_nic_dword(dev, CPU_GEN, ulRegRead);
+               rtl92e_writel(dev, CPU_GEN, ulRegRead);
 
                udelay(500);
        }
        rtl8192_hwconfig(dev);
-       write_nic_byte(dev, CMDR, CR_RE | CR_TE);
-
-       write_nic_byte(dev, PCIF, ((MXDMA2_NoLimit<<MXDMA2_RX_SHIFT) |
-                      (MXDMA2_NoLimit<<MXDMA2_TX_SHIFT)));
-       write_nic_dword(dev, MAC0, ((u32 *)dev->dev_addr)[0]);
-       write_nic_word(dev, MAC4, ((u16 *)(dev->dev_addr + 4))[0]);
-       write_nic_dword(dev, RCR, priv->ReceiveConfig);
-
-       write_nic_dword(dev, RQPN1,  NUM_OF_PAGE_IN_FW_QUEUE_BK <<
-                       RSVD_FW_QUEUE_PAGE_BK_SHIFT |
-                       NUM_OF_PAGE_IN_FW_QUEUE_BE <<
-                       RSVD_FW_QUEUE_PAGE_BE_SHIFT |
-                       NUM_OF_PAGE_IN_FW_QUEUE_VI <<
-                       RSVD_FW_QUEUE_PAGE_VI_SHIFT |
-                       NUM_OF_PAGE_IN_FW_QUEUE_VO <<
-                       RSVD_FW_QUEUE_PAGE_VO_SHIFT);
-       write_nic_dword(dev, RQPN2, NUM_OF_PAGE_IN_FW_QUEUE_MGNT <<
-                       RSVD_FW_QUEUE_PAGE_MGNT_SHIFT);
-       write_nic_dword(dev, RQPN3, APPLIED_RESERVED_QUEUE_IN_FW |
-                       NUM_OF_PAGE_IN_FW_QUEUE_BCN <<
-                       RSVD_FW_QUEUE_PAGE_BCN_SHIFT|
-                       NUM_OF_PAGE_IN_FW_QUEUE_PUB <<
-                       RSVD_FW_QUEUE_PAGE_PUB_SHIFT);
-
-       rtl8192_tx_enable(dev);
-       rtl8192_rx_enable(dev);
-       ulRegRead = (0xFFF00000 & read_nic_dword(dev, RRSR))  |
+       rtl92e_writeb(dev, CMDR, CR_RE | CR_TE);
+
+       rtl92e_writeb(dev, PCIF, ((MXDMA2_NoLimit<<MXDMA2_RX_SHIFT) |
+                                 (MXDMA2_NoLimit<<MXDMA2_TX_SHIFT)));
+       rtl92e_writel(dev, MAC0, ((u32 *)dev->dev_addr)[0]);
+       rtl92e_writew(dev, MAC4, ((u16 *)(dev->dev_addr + 4))[0]);
+       rtl92e_writel(dev, RCR, priv->ReceiveConfig);
+
+       rtl92e_writel(dev, RQPN1, NUM_OF_PAGE_IN_FW_QUEUE_BK <<
+                     RSVD_FW_QUEUE_PAGE_BK_SHIFT |
+                     NUM_OF_PAGE_IN_FW_QUEUE_BE <<
+                     RSVD_FW_QUEUE_PAGE_BE_SHIFT |
+                     NUM_OF_PAGE_IN_FW_QUEUE_VI <<
+                     RSVD_FW_QUEUE_PAGE_VI_SHIFT |
+                     NUM_OF_PAGE_IN_FW_QUEUE_VO <<
+                     RSVD_FW_QUEUE_PAGE_VO_SHIFT);
+       rtl92e_writel(dev, RQPN2, NUM_OF_PAGE_IN_FW_QUEUE_MGNT <<
+                     RSVD_FW_QUEUE_PAGE_MGNT_SHIFT);
+       rtl92e_writel(dev, RQPN3, APPLIED_RESERVED_QUEUE_IN_FW |
+                     NUM_OF_PAGE_IN_FW_QUEUE_BCN <<
+                     RSVD_FW_QUEUE_PAGE_BCN_SHIFT|
+                     NUM_OF_PAGE_IN_FW_QUEUE_PUB <<
+                     RSVD_FW_QUEUE_PAGE_PUB_SHIFT);
+
+       rtl92e_tx_enable(dev);
+       rtl92e_rx_enable(dev);
+       ulRegRead = (0xFFF00000 & rtl92e_readl(dev, RRSR))  |
                     RATE_ALL_OFDM_AG | RATE_ALL_CCK;
-       write_nic_dword(dev, RRSR, ulRegRead);
-       write_nic_dword(dev, RATR0+4*7, (RATE_ALL_OFDM_AG | RATE_ALL_CCK));
+       rtl92e_writel(dev, RRSR, ulRegRead);
+       rtl92e_writel(dev, RATR0+4*7, (RATE_ALL_OFDM_AG | RATE_ALL_CCK));
 
-       write_nic_byte(dev, ACK_TIMEOUT, 0x30);
+       rtl92e_writeb(dev, ACK_TIMEOUT, 0x30);
 
        if (priv->ResetProgress == RESET_TYPE_NORESET)
-               rtl8192_SetWirelessMode(dev, priv->rtllib->mode);
-       CamResetAllEntry(dev);
+               rtl92e_set_wireless_mode(dev, priv->rtllib->mode);
+       rtl92e_cam_reset(dev);
        {
                u8 SECR_value = 0x0;
 
                SECR_value |= SCR_TxEncEnable;
                SECR_value |= SCR_RxDecEnable;
                SECR_value |= SCR_NoSKMC;
-               write_nic_byte(dev, SECR, SECR_value);
+               rtl92e_writeb(dev, SECR, SECR_value);
        }
-       write_nic_word(dev, ATIMWND, 2);
-       write_nic_word(dev, BCN_INTERVAL, 100);
+       rtl92e_writew(dev, ATIMWND, 2);
+       rtl92e_writew(dev, BCN_INTERVAL, 100);
        {
                int i;
 
                for (i = 0; i < QOS_QUEUE_NUM; i++)
-                       write_nic_dword(dev, WDCAPARA_ADD[i], 0x005e4332);
+                       rtl92e_writel(dev, WDCAPARA_ADD[i], 0x005e4332);
        }
-       write_nic_byte(dev, 0xbe, 0xc0);
+       rtl92e_writeb(dev, 0xbe, 0xc0);
 
-       rtl8192_phy_configmac(dev);
+       rtl92e_config_mac(dev);
 
        if (priv->card_8192_version > (u8) VERSION_8190_BD) {
-               rtl8192_phy_getTxPower(dev);
-               rtl8192_phy_setTxPower(dev, priv->chan);
+               rtl92e_get_tx_power(dev);
+               rtl92e_set_tx_power(dev, priv->chan);
        }
 
-       tmpvalue = read_nic_byte(dev, IC_VERRSION);
+       tmpvalue = rtl92e_readb(dev, IC_VERRSION);
        priv->IC_Cut = tmpvalue;
        RT_TRACE(COMP_INIT, "priv->IC_Cut= 0x%x\n", priv->IC_Cut);
        if (priv->IC_Cut >= IC_VersionCut_D) {
@@ -851,7 +852,7 @@ start:
        }
 
        RT_TRACE(COMP_INIT, "Load Firmware!\n");
-       bfirmwareok = init_firmware(dev);
+       bfirmwareok = rtl92e_init_fw(dev);
        if (!bfirmwareok) {
                if (retry_times < 10) {
                        retry_times++;
@@ -864,37 +865,34 @@ start:
        RT_TRACE(COMP_INIT, "Load Firmware finished!\n");
        if (priv->ResetProgress == RESET_TYPE_NORESET) {
                RT_TRACE(COMP_INIT, "RF Config Started!\n");
-               rtStatus = rtl8192_phy_RFConfig(dev);
+               rtStatus = rtl92e_config_phy(dev);
                if (!rtStatus) {
                        netdev_info(dev, "RF Config failed\n");
                        return rtStatus;
                }
                RT_TRACE(COMP_INIT, "RF Config Finished!\n");
        }
-       rtl8192_phy_updateInitGain(dev);
 
-       rtl8192_setBBreg(dev, rFPGA0_RFMOD, bCCKEn, 0x1);
-       rtl8192_setBBreg(dev, rFPGA0_RFMOD, bOFDMEn, 0x1);
+       rtl92e_set_bb_reg(dev, rFPGA0_RFMOD, bCCKEn, 0x1);
+       rtl92e_set_bb_reg(dev, rFPGA0_RFMOD, bOFDMEn, 0x1);
 
-       write_nic_byte(dev, 0x87, 0x0);
+       rtl92e_writeb(dev, 0x87, 0x0);
 
        if (priv->RegRfOff) {
                RT_TRACE((COMP_INIT | COMP_RF | COMP_POWER),
                          "%s(): Turn off RF for RegRfOff ----------\n",
                          __func__);
-               MgntActSet_RF_State(dev, eRfOff, RF_CHANGE_BY_SW, true);
+               rtl92e_set_rf_state(dev, eRfOff, RF_CHANGE_BY_SW);
        } else if (priv->rtllib->RfOffReason > RF_CHANGE_BY_PS) {
                RT_TRACE((COMP_INIT|COMP_RF|COMP_POWER),
                         "%s(): Turn off RF for RfOffReason(%d) ----------\n",
                         __func__, priv->rtllib->RfOffReason);
-               MgntActSet_RF_State(dev, eRfOff, priv->rtllib->RfOffReason,
-                                   true);
+               rtl92e_set_rf_state(dev, eRfOff, priv->rtllib->RfOffReason);
        } else if (priv->rtllib->RfOffReason >= RF_CHANGE_BY_IPS) {
                RT_TRACE((COMP_INIT|COMP_RF|COMP_POWER),
                         "%s(): Turn off RF for RfOffReason(%d) ----------\n",
                         __func__, priv->rtllib->RfOffReason);
-               MgntActSet_RF_State(dev, eRfOff, priv->rtllib->RfOffReason,
-                                   true);
+               rtl92e_set_rf_state(dev, eRfOff, priv->rtllib->RfOffReason);
        } else {
                RT_TRACE((COMP_INIT|COMP_RF|COMP_POWER), "%s(): RF-ON\n",
                          __func__);
@@ -908,13 +906,13 @@ start:
                priv->Rf_Mode = RF_OP_By_SW_3wire;
 
        if (priv->ResetProgress == RESET_TYPE_NORESET) {
-               dm_initialize_txpower_tracking(dev);
+               rtl92e_dm_init_txpower_tracking(dev);
 
                if (priv->IC_Cut >= IC_VersionCut_D) {
-                       tmpRegA = rtl8192_QueryBBReg(dev,
-                                 rOFDM0_XATxIQImbalance, bMaskDWord);
-                       tmpRegC = rtl8192_QueryBBReg(dev,
-                                 rOFDM0_XCTxIQImbalance, bMaskDWord);
+                       tmpRegA = rtl92e_get_bb_reg(dev, rOFDM0_XATxIQImbalance,
+                                                   bMaskDWord);
+                       tmpRegC = rtl92e_get_bb_reg(dev, rOFDM0_XCTxIQImbalance,
+                                                   bMaskDWord);
                        for (i = 0; i < TxBBGainTableLength; i++) {
                                if (tmpRegA == dm_tx_bb_gain[i]) {
                                        priv->rfa_txpowertrackingindex = (u8)i;
@@ -926,8 +924,8 @@ start:
                                }
                        }
 
-                       TempCCk = rtl8192_QueryBBReg(dev,
-                                 rCCK0_TxFilter1, bMaskByte2);
+                       TempCCk = rtl92e_get_bb_reg(dev, rCCK0_TxFilter1,
+                                                   bMaskByte2);
 
                        for (i = 0; i < CCKTxBBGainTableLength; i++) {
                                if (TempCCk == dm_cck_tx_bb_gain[i][0]) {
@@ -954,7 +952,7 @@ start:
                        priv->btxpower_tracking = false;
                }
        }
-       rtl8192_irq_enable(dev);
+       rtl92e_irq_enable(dev);
 end:
        priv->being_init_adapter = false;
        return rtStatus;
@@ -969,27 +967,27 @@ static void rtl8192_net_update(struct net_device *dev)
        u16 rate_config = 0;
 
        net = &priv->rtllib->current_network;
-       rtl8192_config_rate(dev, &rate_config);
+       rtl92e_config_rate(dev, &rate_config);
        priv->dot11CurrentPreambleMode = PREAMBLE_AUTO;
         priv->basic_rate = rate_config &= 0x15f;
-       write_nic_dword(dev, BSSIDR, ((u32 *)net->bssid)[0]);
-       write_nic_word(dev, BSSIDR+4, ((u16 *)net->bssid)[2]);
+       rtl92e_writel(dev, BSSIDR, ((u32 *)net->bssid)[0]);
+       rtl92e_writew(dev, BSSIDR+4, ((u16 *)net->bssid)[2]);
 
        if (priv->rtllib->iw_mode == IW_MODE_ADHOC) {
-               write_nic_word(dev, ATIMWND, 2);
-               write_nic_word(dev, BCN_DMATIME, 256);
-               write_nic_word(dev, BCN_INTERVAL, net->beacon_interval);
-               write_nic_word(dev, BCN_DRV_EARLY_INT, 10);
-               write_nic_byte(dev, BCN_ERR_THRESH, 100);
+               rtl92e_writew(dev, ATIMWND, 2);
+               rtl92e_writew(dev, BCN_DMATIME, 256);
+               rtl92e_writew(dev, BCN_INTERVAL, net->beacon_interval);
+               rtl92e_writew(dev, BCN_DRV_EARLY_INT, 10);
+               rtl92e_writeb(dev, BCN_ERR_THRESH, 100);
 
                BcnTimeCfg |= (BcnCW<<BCN_TCFG_CW_SHIFT);
                BcnTimeCfg |= BcnIFS<<BCN_TCFG_IFS;
 
-               write_nic_word(dev, BCN_TCFG, BcnTimeCfg);
+               rtl92e_writew(dev, BCN_TCFG, BcnTimeCfg);
        }
 }
 
-void rtl8192_link_change(struct net_device *dev)
+void rtl92e_link_change(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rtllib_device *ieee = priv->rtllib;
@@ -1002,16 +1000,16 @@ void rtl8192_link_change(struct net_device *dev)
                priv->ops->update_ratr_table(dev);
                if ((KEY_TYPE_WEP40 == ieee->pairwise_key_type) ||
                    (KEY_TYPE_WEP104 == ieee->pairwise_key_type))
-                       EnableHWSecurityConfig8192(dev);
+                       rtl92e_enable_hw_security_config(dev);
        } else {
-               write_nic_byte(dev, 0x173, 0);
+               rtl92e_writeb(dev, 0x173, 0);
        }
        rtl8192e_update_msr(dev);
 
        if (ieee->iw_mode == IW_MODE_INFRA || ieee->iw_mode == IW_MODE_ADHOC) {
                u32 reg = 0;
 
-               reg = read_nic_dword(dev, RCR);
+               reg = rtl92e_readl(dev, RCR);
                if (priv->rtllib->state == RTLLIB_LINKED) {
                        if (ieee->IntelPromiscuousModeInfo.bPromiscuousOn)
                                ;
@@ -1020,12 +1018,12 @@ void rtl8192_link_change(struct net_device *dev)
                } else
                        priv->ReceiveConfig = reg &= ~RCR_CBSSID;
 
-               write_nic_dword(dev, RCR, reg);
+               rtl92e_writel(dev, RCR, reg);
        }
 }
 
-void rtl8192_AllowAllDestAddr(struct net_device *dev,
-                             bool bAllowAllDA, bool WriteIntoReg)
+void rtl92e_set_monitor_mode(struct net_device *dev, bool bAllowAllDA,
+                            bool WriteIntoReg)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
@@ -1035,7 +1033,7 @@ void rtl8192_AllowAllDestAddr(struct net_device *dev,
                priv->ReceiveConfig &= ~RCR_AAP;
 
        if (WriteIntoReg)
-               write_nic_dword(dev, RCR, priv->ReceiveConfig);
+               rtl92e_writel(dev, RCR, priv->ReceiveConfig);
 }
 
 static u8 MRateToHwRate8190Pci(u8 rate)
@@ -1177,8 +1175,20 @@ static u8 rtl8192_MapHwQueueToFirmwareQueue(struct net_device *dev, u8 QueueID,
        return QueueSelect;
 }
 
-void  rtl8192_tx_fill_desc(struct net_device *dev, struct tx_desc *pdesc,
-                          struct cb_desc *cb_desc, struct sk_buff *skb)
+static u8 rtl8192_QueryIsShort(u8 TxHT, u8 TxRate, struct cb_desc *tcb_desc)
+{
+       u8   tmp_Short;
+
+       tmp_Short = (TxHT == 1) ? ((tcb_desc->bUseShortGI) ? 1 : 0) :
+                       ((tcb_desc->bUseShortPreamble) ? 1 : 0);
+       if (TxHT == 1 && TxRate != DESC90_RATEMCS15)
+               tmp_Short = 0;
+
+       return tmp_Short;
+}
+
+void  rtl92e_fill_tx_desc(struct net_device *dev, struct tx_desc *pdesc,
+                         struct cb_desc *cb_desc, struct sk_buff *skb)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        dma_addr_t mapping = pci_map_single(priv->pdev, skb->data, skb->len,
@@ -1286,9 +1296,8 @@ void  rtl8192_tx_fill_desc(struct net_device *dev, struct tx_desc *pdesc,
        pdesc->TxBuffAddr = mapping;
 }
 
-void  rtl8192_tx_fill_cmd_desc(struct net_device *dev,
-                              struct tx_desc_cmd *entry,
-                              struct cb_desc *cb_desc, struct sk_buff *skb)
+void  rtl92e_fill_tx_cmd_desc(struct net_device *dev, struct tx_desc_cmd *entry,
+                             struct cb_desc *cb_desc, struct sk_buff *skb)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        dma_addr_t mapping = pci_map_single(priv->pdev, skb->data, skb->len,
@@ -1506,8 +1515,9 @@ static void rtl8192_query_rxphystatus(
        pstats->bPacketBeacon = precord_stats->bPacketBeacon = bPacketBeacon;
        pstats->bToSelfBA = precord_stats->bToSelfBA = bToSelfBA;
        if (check_reg824 == 0) {
-               reg824_bit9 = rtl8192_QueryBBReg(priv->rtllib->dev,
-                             rFPGA0_XA_HSSIParameter2, 0x200);
+               reg824_bit9 = rtl92e_get_bb_reg(priv->rtllib->dev,
+                                               rFPGA0_XA_HSSIParameter2,
+                                               0x200);
                check_reg824 = 1;
        }
 
@@ -1575,7 +1585,7 @@ static void rtl8192_query_rxphystatus(
                        }
                }
 
-               pwdb_all = rtl819x_query_rxpwrpercentage(rx_pwr_all);
+               pwdb_all = rtl92e_rx_db_to_percent(rx_pwr_all);
                pstats->RxPWDBAll = precord_stats->RxPWDBAll = pwdb_all;
                pstats->RecvSignalPower = rx_pwr_all;
 
@@ -1615,7 +1625,7 @@ static void rtl8192_query_rxphystatus(
                        rx_snrX /= 2;
                        priv->stats.rxSNRdB[i] = (long)rx_snrX;
 
-                       RSSI = rtl819x_query_rxpwrpercentage(rx_pwr[i]);
+                       RSSI = rtl92e_rx_db_to_percent(rx_pwr[i]);
                        if (priv->brfpath_rxenable[i])
                                total_rssi += RSSI;
 
@@ -1628,7 +1638,7 @@ static void rtl8192_query_rxphystatus(
 
 
                rx_pwr_all = (((pofdm_buf->pwdb_all) >> 1) & 0x7f) - 106;
-               pwdb_all = rtl819x_query_rxpwrpercentage(rx_pwr_all);
+               pwdb_all = rtl92e_rx_db_to_percent(rx_pwr_all);
 
                pstats->RxPWDBAll = precord_stats->RxPWDBAll = pwdb_all;
                pstats->RxPower = precord_stats->RxPower =      rx_pwr_all;
@@ -1645,7 +1655,7 @@ static void rtl8192_query_rxphystatus(
 
                        rx_evmX /= 2;
 
-                       evm = rtl819x_evm_dbtopercentage(rx_evmX);
+                       evm = rtl92e_evm_db_to_percent(rx_evmX);
                        if (bpacket_match_bssid) {
                                if (i == 0) {
                                        pstats->SignalQuality = (u8)(evm &
@@ -1721,8 +1731,8 @@ static void rtl8192_process_phyinfo(struct r8192_priv *priv, u8 *buffer,
                slide_rssi_index = 0;
 
        tmp_val = priv->stats.slide_rssi_total/slide_rssi_statistics;
-       priv->stats.signal_strength = rtl819x_translate_todbm(priv,
-                                     (u8)tmp_val);
+       priv->stats.signal_strength = rtl92e_translate_to_dbm(priv,
+                                                             (u8)tmp_val);
        curr_st->rssi = priv->stats.signal_strength;
        if (!prev_st->bPacketMatchBSSID) {
                if (!prev_st->bToSelfBA)
@@ -1732,13 +1742,10 @@ static void rtl8192_process_phyinfo(struct r8192_priv *priv, u8 *buffer,
        if (!bcheck)
                return;
 
-       rtl819x_process_cck_rxpathsel(priv, prev_st);
-
        priv->stats.num_process_phyinfo++;
        if (!prev_st->bIsCCK && prev_st->bPacketToSelf) {
                for (rfpath = RF90_PATH_A; rfpath < RF90_PATH_C; rfpath++) {
-                       if (!rtl8192_phy_CheckIsLegalRFPath(priv->rtllib->dev,
-                           rfpath))
+                       if (!rtl92e_is_legal_rf_path(priv->rtllib->dev, rfpath))
                                continue;
                        RT_TRACE(COMP_DBG,
                                 "Jacken -> pPreviousstats->RxMIMOSignalStrength[rfpath]  = %d\n",
@@ -1813,7 +1820,7 @@ static void rtl8192_process_phyinfo(struct r8192_priv *priv, u8 *buffer,
                                        (RX_SMOOTH-1)) +
                                        (prev_st->RxPWDBAll)) / (RX_SMOOTH);
                }
-               rtl819x_update_rxsignalstatistics8190pci(priv, prev_st);
+               rtl92e_update_rx_statistics(priv, prev_st);
        }
 
        if (prev_st->SignalQuality != 0) {
@@ -1900,7 +1907,7 @@ static void rtl8192_TranslateRxSignalStuff(struct net_device *dev,
        rtl8192_query_rxphystatus(priv, pstats, pdesc, pdrvinfo,
                                  &previous_stats, bpacket_match_bssid,
                                  bpacket_toself, bPacketBeacon, bToSelfBA);
-       rtl8192_record_rxdesc_forlateruse(pstats, &previous_stats);
+       rtl92e_copy_mpdu_stats(pstats, &previous_stats);
 }
 
 static void rtl8192_UpdateReceivedRateHistogramStatistics(
@@ -2016,10 +2023,8 @@ static void rtl8192_UpdateReceivedRateHistogramStatistics(
        priv->stats.received_rate_histogram[rcvType][rateIndex]++;
 }
 
-bool rtl8192_rx_query_status_desc(struct net_device *dev,
-                                 struct rtllib_rx_stats *stats,
-                                 struct rx_desc *pdesc,
-                                 struct sk_buff *skb)
+bool rtl92e_get_rx_stats(struct net_device *dev, struct rtllib_rx_stats *stats,
+                        struct rx_desc *pdesc, struct sk_buff *skb)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rx_fwinfo *pDrvInfo = NULL;
@@ -2063,9 +2068,9 @@ bool rtl8192_rx_query_status_desc(struct net_device *dev,
                            (pDrvInfo->FirstAGGR == 1);
 
        stats->TimeStampLow = pDrvInfo->TSFL;
-       stats->TimeStampHigh = read_nic_dword(dev, TSFR+4);
+       stats->TimeStampHigh = rtl92e_readl(dev, TSFR+4);
 
-       rtl819x_UpdateRxPktTimeStamp(dev, stats);
+       rtl92e_update_rx_pkt_timestamp(dev, stats);
 
        if ((stats->RxBufShift + stats->RxDrvInfoSize) > 0)
                stats->bShift = 1;
@@ -2089,7 +2094,7 @@ bool rtl8192_rx_query_status_desc(struct net_device *dev,
        return true;
 }
 
-void rtl8192_halt_adapter(struct net_device *dev, bool reset)
+void rtl92e_stop_adapter(struct net_device *dev, bool reset)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        int i;
@@ -2102,7 +2107,7 @@ void rtl8192_halt_adapter(struct net_device *dev, bool reset)
 
        if (!priv->rtllib->bSupportRemoteWakeUp) {
                u1bTmp = 0x0;
-               write_nic_byte(dev, CMDR, u1bTmp);
+               rtl92e_writeb(dev, CMDR, u1bTmp);
        }
 
        mdelay(20);
@@ -2113,18 +2118,18 @@ void rtl8192_halt_adapter(struct net_device *dev, bool reset)
                priv->bHwRfOffAction = 2;
 
                if (!priv->rtllib->bSupportRemoteWakeUp) {
-                       PHY_SetRtl8192eRfOff(dev);
-                       ulRegRead = read_nic_dword(dev, CPU_GEN);
+                       rtl92e_set_rf_off(dev);
+                       ulRegRead = rtl92e_readl(dev, CPU_GEN);
                        ulRegRead |= CPU_GEN_SYSTEM_RESET;
-                       write_nic_dword(dev, CPU_GEN, ulRegRead);
+                       rtl92e_writel(dev, CPU_GEN, ulRegRead);
                } else {
-                       write_nic_dword(dev, WFCRC0, 0xffffffff);
-                       write_nic_dword(dev, WFCRC1, 0xffffffff);
-                       write_nic_dword(dev, WFCRC2, 0xffffffff);
+                       rtl92e_writel(dev, WFCRC0, 0xffffffff);
+                       rtl92e_writel(dev, WFCRC1, 0xffffffff);
+                       rtl92e_writel(dev, WFCRC2, 0xffffffff);
 
 
-                       write_nic_byte(dev, PMR, 0x5);
-                       write_nic_byte(dev, MacBlkCtrl, 0xa);
+                       rtl92e_writeb(dev, PMR, 0x5);
+                       rtl92e_writeb(dev, MacBlkCtrl, 0xa);
                }
        }
 
@@ -2136,7 +2141,7 @@ void rtl8192_halt_adapter(struct net_device *dev, bool reset)
        skb_queue_purge(&priv->skb_queue);
 }
 
-void rtl8192_update_ratr_table(struct net_device *dev)
+void rtl92e_update_ratr_table(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rtllib_device *ieee = priv->rtllib;
@@ -2145,7 +2150,7 @@ void rtl8192_update_ratr_table(struct net_device *dev)
        u16 rate_config = 0;
        u8 rate_index = 0;
 
-       rtl8192_config_rate(dev, &rate_config);
+       rtl92e_config_rate(dev, &rate_config);
        ratr_value = rate_config | *pMcsRate << 12;
        switch (ieee->mode) {
        case IEEE_A:
@@ -2179,12 +2184,12 @@ void rtl8192_update_ratr_table(struct net_device *dev)
        else if (!ieee->pHTInfo->bCurTxBW40MHz &&
                  ieee->pHTInfo->bCurShortGI20MHz)
                ratr_value |= 0x80000000;
-       write_nic_dword(dev, RATR0+rate_index*4, ratr_value);
-       write_nic_byte(dev, UFWP, 1);
+       rtl92e_writel(dev, RATR0+rate_index*4, ratr_value);
+       rtl92e_writeb(dev, UFWP, 1);
 }
 
 void
-rtl8192_InitializeVariables(struct net_device  *dev)
+rtl92e_init_variables(struct net_device  *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
@@ -2218,66 +2223,65 @@ rtl8192_InitializeVariables(struct net_device  *dev)
        priv->bfirst_after_down = false;
 }
 
-void rtl8192_EnableInterrupt(struct net_device *dev)
+void rtl92e_enable_irq(struct net_device *dev)
 {
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
 
        priv->irq_enabled = 1;
 
-       write_nic_dword(dev, INTA_MASK, priv->irq_mask[0]);
+       rtl92e_writel(dev, INTA_MASK, priv->irq_mask[0]);
 
 }
 
-void rtl8192_DisableInterrupt(struct net_device *dev)
+void rtl92e_disable_irq(struct net_device *dev)
 {
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
 
-       write_nic_dword(dev, INTA_MASK, 0);
+       rtl92e_writel(dev, INTA_MASK, 0);
 
        priv->irq_enabled = 0;
 }
 
-void rtl8192_ClearInterrupt(struct net_device *dev)
+void rtl92e_clear_irq(struct net_device *dev)
 {
        u32 tmp = 0;
 
-       tmp = read_nic_dword(dev, ISR);
-       write_nic_dword(dev, ISR, tmp);
+       tmp = rtl92e_readl(dev, ISR);
+       rtl92e_writel(dev, ISR, tmp);
 }
 
 
-void rtl8192_enable_rx(struct net_device *dev)
+void rtl92e_enable_rx(struct net_device *dev)
 {
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
 
-       write_nic_dword(dev, RDQDA, priv->rx_ring_dma[RX_MPDU_QUEUE]);
+       rtl92e_writel(dev, RDQDA, priv->rx_ring_dma[RX_MPDU_QUEUE]);
 }
 
 static const u32 TX_DESC_BASE[] = {
        BKQDA, BEQDA, VIQDA, VOQDA, HCCAQDA, CQDA, MQDA, HQDA, BQDA
 };
 
-void rtl8192_enable_tx(struct net_device *dev)
+void rtl92e_enable_tx(struct net_device *dev)
 {
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
        u32 i;
 
        for (i = 0; i < MAX_TX_QUEUE_COUNT; i++)
-               write_nic_dword(dev, TX_DESC_BASE[i], priv->tx_ring[i].dma);
+               rtl92e_writel(dev, TX_DESC_BASE[i], priv->tx_ring[i].dma);
 }
 
 
-void rtl8192_interrupt_recognized(struct net_device *dev, u32 *p_inta,
-                                 u32 *p_intb)
+void rtl92e_ack_irq(struct net_device *dev, u32 *p_inta, u32 *p_intb)
 {
-       *p_inta = read_nic_dword(dev, ISR);
-       write_nic_dword(dev, ISR, *p_inta);
+       *p_inta = rtl92e_readl(dev, ISR);
+       rtl92e_writel(dev, ISR, *p_inta);
 }
 
-bool rtl8192_HalRxCheckStuck(struct net_device *dev)
+bool rtl92e_is_rx_stuck(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
-       u16               RegRxCounter = read_nic_word(dev, 0x130);
+       u16               RegRxCounter = rtl92e_readw(dev, 0x130);
        bool              bStuck = false;
        static u8         rx_chk_cnt;
        u32             SlotIndex = 0, TotalRxStuckCount = 0;
@@ -2338,11 +2342,11 @@ bool rtl8192_HalRxCheckStuck(struct net_device *dev)
        return bStuck;
 }
 
-bool rtl8192_HalTxCheckStuck(struct net_device *dev)
+bool rtl92e_is_tx_stuck(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        bool    bStuck = false;
-       u16     RegTxCounter = read_nic_word(dev, 0x128);
+       u16     RegTxCounter = rtl92e_readw(dev, 0x128);
 
        RT_TRACE(COMP_RESET, "%s():RegTxCounter is %d,TxCounter is %d\n",
                 __func__, RegTxCounter, priv->TxCounter);
@@ -2355,7 +2359,7 @@ bool rtl8192_HalTxCheckStuck(struct net_device *dev)
        return bStuck;
 }
 
-bool rtl8192_GetNmodeSupportBySecCfg(struct net_device *dev)
+bool rtl92e_get_nmode_support_by_sec(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rtllib_device *ieee = priv->rtllib;
@@ -2369,34 +2373,10 @@ bool rtl8192_GetNmodeSupportBySecCfg(struct net_device *dev)
        }
 }
 
-bool rtl8192_GetHalfNmodeSupportByAPs(struct net_device *dev)
+bool rtl92e_is_halfn_supported_by_ap(struct net_device *dev)
 {
-       bool Reval;
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rtllib_device *ieee = priv->rtllib;
 
-       if (ieee->bHalfWirelessN24GMode == true)
-               Reval = true;
-       else
-               Reval =  false;
-
-       return Reval;
-}
-
-u8 rtl8192_QueryIsShort(u8 TxHT, u8 TxRate, struct cb_desc *tcb_desc)
-{
-       u8   tmp_Short;
-
-       tmp_Short = (TxHT == 1) ? ((tcb_desc->bUseShortGI) ? 1 : 0) :
-                       ((tcb_desc->bUseShortPreamble) ? 1 : 0);
-       if (TxHT == 1 && TxRate != DESC90_RATEMCS15)
-               tmp_Short = 0;
-
-       return tmp_Short;
-}
-
-void ActUpdateChannelAccessSetting(struct net_device *dev,
-       enum wireless_mode WirelessMode,
-       struct channel_access_setting *ChnlAccessSetting)
-{
+       return ieee->bHalfWirelessN24GMode;
 }
index dbe0e1c87056bea9ef480f399a9227c41b29a033..6bd6b3a4fcea617ea35255124b3b1fd014541ee1 100644 (file)
 
 #include "r8190P_def.h"
 
-u8 rtl8192_QueryIsShort(u8 TxHT, u8 TxRate, struct cb_desc *tcb_desc);
-bool rtl8192_GetHalfNmodeSupportByAPs(struct net_device *dev);
-bool rtl8192_GetNmodeSupportBySecCfg(struct net_device *dev);
-bool rtl8192_HalTxCheckStuck(struct net_device *dev);
-bool rtl8192_HalRxCheckStuck(struct net_device *dev);
-void rtl8192_interrupt_recognized(struct net_device *dev, u32 *p_inta,
-                                 u32 *p_intb);
-void rtl8192_enable_rx(struct net_device *dev);
-void rtl8192_enable_tx(struct net_device *dev);
-void rtl8192_EnableInterrupt(struct net_device *dev);
-void rtl8192_DisableInterrupt(struct net_device *dev);
-void rtl8192_ClearInterrupt(struct net_device *dev);
-void rtl8192_InitializeVariables(struct net_device  *dev);
-void rtl8192e_start_beacon(struct net_device *dev);
-void rtl8192e_SetHwReg(struct net_device *dev, u8 variable, u8 *val);
-void rtl8192_get_eeprom_size(struct net_device *dev);
-bool rtl8192_adapter_start(struct net_device *dev);
-void rtl8192_link_change(struct net_device *dev);
-void rtl8192_AllowAllDestAddr(struct net_device *dev, bool bAllowAllDA,
-                             bool WriteIntoReg);
-void  rtl8192_tx_fill_desc(struct net_device *dev, struct tx_desc *pdesc,
-                          struct cb_desc *cb_desc,
-                          struct sk_buff *skb);
-void  rtl8192_tx_fill_cmd_desc(struct net_device *dev,
-                              struct tx_desc_cmd *entry,
-                              struct cb_desc *cb_desc, struct sk_buff *skb);
-bool rtl8192_rx_query_status_desc(struct net_device *dev,
-                                 struct rtllib_rx_stats *stats,
-                                 struct rx_desc *pdesc,
-                                 struct sk_buff *skb);
-void rtl8192_halt_adapter(struct net_device *dev, bool reset);
-void rtl8192_update_ratr_table(struct net_device *dev);
+bool rtl92e_is_halfn_supported_by_ap(struct net_device *dev);
+bool rtl92e_get_nmode_support_by_sec(struct net_device *dev);
+bool rtl92e_is_tx_stuck(struct net_device *dev);
+bool rtl92e_is_rx_stuck(struct net_device *dev);
+void rtl92e_ack_irq(struct net_device *dev, u32 *p_inta, u32 *p_intb);
+void rtl92e_enable_rx(struct net_device *dev);
+void rtl92e_enable_tx(struct net_device *dev);
+void rtl92e_enable_irq(struct net_device *dev);
+void rtl92e_disable_irq(struct net_device *dev);
+void rtl92e_clear_irq(struct net_device *dev);
+void rtl92e_init_variables(struct net_device  *dev);
+void rtl92e_start_beacon(struct net_device *dev);
+void rtl92e_set_reg(struct net_device *dev, u8 variable, u8 *val);
+void rtl92e_get_eeprom_size(struct net_device *dev);
+bool rtl92e_start_adapter(struct net_device *dev);
+void rtl92e_link_change(struct net_device *dev);
+void rtl92e_set_monitor_mode(struct net_device *dev, bool bAllowAllDA,
+                            bool WriteIntoReg);
+void  rtl92e_fill_tx_desc(struct net_device *dev, struct tx_desc *pdesc,
+                         struct cb_desc *cb_desc, struct sk_buff *skb);
+void  rtl92e_fill_tx_cmd_desc(struct net_device *dev, struct tx_desc_cmd *entry,
+                             struct cb_desc *cb_desc, struct sk_buff *skb);
+bool rtl92e_get_rx_stats(struct net_device *dev, struct rtllib_rx_stats *stats,
+                        struct rx_desc *pdesc, struct sk_buff *skb);
+void rtl92e_stop_adapter(struct net_device *dev, bool reset);
+void rtl92e_update_ratr_table(struct net_device *dev);
 #endif
index 17d2a1540cc8b3635f4f89017eb18b4ff4424275..5c527c419bc9eeb474ebd01f82ed526324594c7c 100644 (file)
@@ -23,7 +23,7 @@
 #include "r8192E_firmware.h"
 #include <linux/firmware.h>
 
-void firmware_init_param(struct net_device *dev)
+void rtl92e_init_fw_param(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rt_firmware *pfirmware = priv->pFirmware;
@@ -46,7 +46,7 @@ static bool fw_download_code(struct net_device *dev, u8 *code_virtual_address,
        struct cb_desc *tcb_desc;
        u8                  bLastIniPkt;
 
-       firmware_init_param(dev);
+       rtl92e_init_fw_param(dev);
        frag_threshold = pfirmware->cmdpacket_frag_thresold;
        do {
                if ((buffer_len - frag_offset) > frag_threshold) {
@@ -96,7 +96,7 @@ static bool fw_download_code(struct net_device *dev, u8 *code_virtual_address,
 
        } while (frag_offset < buffer_len);
 
-       write_nic_byte(dev, TPPoll, TPPoll_CQ);
+       rtl92e_writeb(dev, TPPoll, TPPoll_CQ);
 
        return true;
 }
@@ -109,7 +109,7 @@ static bool CPUcheck_maincodeok_turnonCPU(struct net_device *dev)
 
        timeout = jiffies + msecs_to_jiffies(200);
        while (time_before(jiffies, timeout)) {
-               CPU_status = read_nic_dword(dev, CPU_GEN);
+               CPU_status = rtl92e_readl(dev, CPU_GEN);
                if (CPU_status & CPU_GEN_PUT_CODE_OK)
                        break;
                mdelay(2);
@@ -122,14 +122,14 @@ static bool CPUcheck_maincodeok_turnonCPU(struct net_device *dev)
                RT_TRACE(COMP_FIRMWARE, "Download Firmware: Put code ok!\n");
        }
 
-       CPU_status = read_nic_dword(dev, CPU_GEN);
-       write_nic_byte(dev, CPU_GEN,
-                      (u8)((CPU_status|CPU_GEN_PWR_STB_CPU)&0xff));
+       CPU_status = rtl92e_readl(dev, CPU_GEN);
+       rtl92e_writeb(dev, CPU_GEN,
+                     (u8)((CPU_status|CPU_GEN_PWR_STB_CPU)&0xff));
        mdelay(1);
 
        timeout = jiffies + msecs_to_jiffies(200);
        while (time_before(jiffies, timeout)) {
-               CPU_status = read_nic_dword(dev, CPU_GEN);
+               CPU_status = rtl92e_readl(dev, CPU_GEN);
                if (CPU_status&CPU_GEN_BOOT_RDY)
                        break;
                mdelay(2);
@@ -158,7 +158,7 @@ static bool CPUcheck_firmware_ready(struct net_device *dev)
 
        timeout = jiffies + msecs_to_jiffies(20);
        while (time_before(jiffies, timeout)) {
-               CPU_status = read_nic_dword(dev, CPU_GEN);
+               CPU_status = rtl92e_readl(dev, CPU_GEN);
                if (CPU_status&CPU_GEN_FIRM_RDY)
                        break;
                mdelay(2);
@@ -223,7 +223,7 @@ static bool firmware_check_ready(struct net_device *dev,
        return rt_status;
 }
 
-bool init_firmware(struct net_device *dev)
+bool rtl92e_init_fw(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        bool                    rt_status = true;
index d79e5420319983a71ce599bc8d53af97d4e8cfda..4c464eaee69f02b3dbc3b9d76aca622c7bc83f96 100644 (file)
@@ -19,8 +19,6 @@
 #ifndef __INC_FIRMWARE_H
 #define __INC_FIRMWARE_H
 
-#define RTL8190_CPU_START_OFFSET       0x80
-
 #define GET_COMMAND_PACKET_FRAG_THRESHOLD(v)   (4*(v/4) - 8)
 
 #define RTL8192E_BOOT_IMG_FW   "RTL8192E/boot.img"
@@ -61,7 +59,7 @@ struct rt_firmware {
        u16               firmware_buf_size[MAX_FW_INIT_STEP];
 };
 
-bool init_firmware(struct net_device *dev);
-extern void firmware_init_param(struct net_device *dev);
+bool rtl92e_init_fw(struct net_device *dev);
+extern void rtl92e_init_fw_param(struct net_device *dev);
 
 #endif
index 43c3fb859d10e1692acf55e07c27420036827e04..c81832dcf1817bef47f1fc11e22e5ab23612d0f7 100644 (file)
@@ -119,10 +119,10 @@ enum _RTL8192Pci_HW {
 #define EPROM_CMD_NORMAL 0
 #define EPROM_CMD_LOAD 1
 #define EPROM_CMD_PROGRAM 2
-#define EPROM_CS_SHIFT 3
-#define EPROM_CK_SHIFT 2
-#define EPROM_W_SHIFT 1
-#define EPROM_R_SHIFT 0
+#define EPROM_CS_BIT 3
+#define EPROM_CK_BIT 2
+#define EPROM_W_BIT 1
+#define EPROM_R_BIT 0
 
        AFR                      = 0x010,
 #define AFR_CardBEn            (1<<0)
index fba7654160e807ab6be3aa432cb099144bbfc62d..3a15a0f5b479626c49238e7b8807e0cfae7ec952 100644 (file)
@@ -64,7 +64,7 @@ static u32 rtl8192_CalculateBitShift(u32 dwBitMask)
        return i;
 }
 
-u8 rtl8192_phy_CheckIsLegalRFPath(struct net_device *dev, u32 eRFPath)
+u8 rtl92e_is_legal_rf_path(struct net_device *dev, u32 eRFPath)
 {
        u8 ret = 1;
        struct r8192_priv *priv = rtllib_priv(dev);
@@ -80,27 +80,27 @@ u8 rtl8192_phy_CheckIsLegalRFPath(struct net_device *dev, u32 eRFPath)
        return ret;
 }
 
-void rtl8192_setBBreg(struct net_device *dev, u32 dwRegAddr, u32 dwBitMask,
-                     u32 dwData)
+void rtl92e_set_bb_reg(struct net_device *dev, u32 dwRegAddr, u32 dwBitMask,
+                      u32 dwData)
 {
 
        u32 OriginalValue, BitShift, NewValue;
 
        if (dwBitMask != bMaskDWord) {
-               OriginalValue = read_nic_dword(dev, dwRegAddr);
+               OriginalValue = rtl92e_readl(dev, dwRegAddr);
                BitShift = rtl8192_CalculateBitShift(dwBitMask);
                NewValue = (((OriginalValue) & (~dwBitMask)) |
                            (dwData << BitShift));
-               write_nic_dword(dev, dwRegAddr, NewValue);
+               rtl92e_writel(dev, dwRegAddr, NewValue);
        } else
-               write_nic_dword(dev, dwRegAddr, dwData);
+               rtl92e_writel(dev, dwRegAddr, dwData);
 }
 
-u32 rtl8192_QueryBBReg(struct net_device *dev, u32 dwRegAddr, u32 dwBitMask)
+u32 rtl92e_get_bb_reg(struct net_device *dev, u32 dwRegAddr, u32 dwBitMask)
 {
        u32 Ret = 0, OriginalValue, BitShift;
 
-       OriginalValue = read_nic_dword(dev, dwRegAddr);
+       OriginalValue = rtl92e_readl(dev, dwRegAddr);
        BitShift = rtl8192_CalculateBitShift(dwBitMask);
        Ret = (OriginalValue & dwBitMask) >> BitShift;
 
@@ -117,19 +117,19 @@ static u32 rtl8192_phy_RFSerialRead(struct net_device *dev,
        Offset &= 0x3f;
 
        if (priv->rf_chip == RF_8256) {
-               rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0x0);
+               rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter4, 0xf00, 0x0);
                if (Offset >= 31) {
                        priv->RfReg0Value[eRFPath] |= 0x140;
-                       rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset,
-                                        bMaskDWord,
-                                        (priv->RfReg0Value[eRFPath]<<16));
+                       rtl92e_set_bb_reg(dev, pPhyReg->rf3wireOffset,
+                                         bMaskDWord,
+                                         (priv->RfReg0Value[eRFPath]<<16));
                        NewOffset = Offset - 30;
                } else if (Offset >= 16) {
                        priv->RfReg0Value[eRFPath] |= 0x100;
                        priv->RfReg0Value[eRFPath] &= (~0x40);
-                       rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset,
-                                        bMaskDWord,
-                                        (priv->RfReg0Value[eRFPath]<<16));
+                       rtl92e_set_bb_reg(dev, pPhyReg->rf3wireOffset,
+                                         bMaskDWord,
+                                         (priv->RfReg0Value[eRFPath]<<16));
 
                        NewOffset = Offset - 15;
                } else
@@ -139,23 +139,23 @@ static u32 rtl8192_phy_RFSerialRead(struct net_device *dev,
                         "check RF type here, need to be 8256\n");
                NewOffset = Offset;
        }
-       rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, bLSSIReadAddress,
-                        NewOffset);
-       rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2,  bLSSIReadEdge, 0x0);
-       rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2,  bLSSIReadEdge, 0x1);
+       rtl92e_set_bb_reg(dev, pPhyReg->rfHSSIPara2, bLSSIReadAddress,
+                         NewOffset);
+       rtl92e_set_bb_reg(dev, pPhyReg->rfHSSIPara2,  bLSSIReadEdge, 0x0);
+       rtl92e_set_bb_reg(dev, pPhyReg->rfHSSIPara2,  bLSSIReadEdge, 0x1);
 
        mdelay(1);
 
-       ret = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBack,
-                                bLSSIReadBackData);
+       ret = rtl92e_get_bb_reg(dev, pPhyReg->rfLSSIReadBack,
+                               bLSSIReadBackData);
 
        if (priv->rf_chip == RF_8256) {
                priv->RfReg0Value[eRFPath] &= 0xebf;
 
-               rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset, bMaskDWord,
-                               (priv->RfReg0Value[eRFPath] << 16));
+               rtl92e_set_bb_reg(dev, pPhyReg->rf3wireOffset, bMaskDWord,
+                                 (priv->RfReg0Value[eRFPath] << 16));
 
-               rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0x300, 0x3);
+               rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter4, 0x300, 0x3);
        }
 
 
@@ -173,20 +173,20 @@ static void rtl8192_phy_RFSerialWrite(struct net_device *dev,
 
        Offset &= 0x3f;
        if (priv->rf_chip == RF_8256) {
-               rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0x0);
+               rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter4, 0xf00, 0x0);
 
                if (Offset >= 31) {
                        priv->RfReg0Value[eRFPath] |= 0x140;
-                       rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset,
-                                        bMaskDWord,
-                                        (priv->RfReg0Value[eRFPath] << 16));
+                       rtl92e_set_bb_reg(dev, pPhyReg->rf3wireOffset,
+                                         bMaskDWord,
+                                         (priv->RfReg0Value[eRFPath] << 16));
                        NewOffset = Offset - 30;
                } else if (Offset >= 16) {
                        priv->RfReg0Value[eRFPath] |= 0x100;
                        priv->RfReg0Value[eRFPath] &= (~0x40);
-                       rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset,
-                                        bMaskDWord,
-                                        (priv->RfReg0Value[eRFPath] << 16));
+                       rtl92e_set_bb_reg(dev, pPhyReg->rf3wireOffset,
+                                         bMaskDWord,
+                                         (priv->RfReg0Value[eRFPath] << 16));
                        NewOffset = Offset - 15;
                } else
                        NewOffset = Offset;
@@ -198,7 +198,7 @@ static void rtl8192_phy_RFSerialWrite(struct net_device *dev,
 
        DataAndAddr = (Data<<16) | (NewOffset&0x3f);
 
-       rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset, bMaskDWord, DataAndAddr);
+       rtl92e_set_bb_reg(dev, pPhyReg->rf3wireOffset, bMaskDWord, DataAndAddr);
 
        if (Offset == 0x0)
                priv->RfReg0Value[eRFPath] = Data;
@@ -206,23 +206,21 @@ static void rtl8192_phy_RFSerialWrite(struct net_device *dev,
        if (priv->rf_chip == RF_8256) {
                if (Offset != 0) {
                        priv->RfReg0Value[eRFPath] &= 0xebf;
-                       rtl8192_setBBreg(
-                               dev,
-                               pPhyReg->rf3wireOffset,
-                               bMaskDWord,
-                               (priv->RfReg0Value[eRFPath] << 16));
+                       rtl92e_set_bb_reg(dev, pPhyReg->rf3wireOffset,
+                                         bMaskDWord,
+                                         (priv->RfReg0Value[eRFPath] << 16));
                }
-               rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0x300, 0x3);
+               rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter4, 0x300, 0x3);
        }
 }
 
-void rtl8192_phy_SetRFReg(struct net_device *dev, enum rf90_radio_path eRFPath,
-                         u32 RegAddr, u32 BitMask, u32 Data)
+void rtl92e_set_rf_reg(struct net_device *dev, enum rf90_radio_path eRFPath,
+                      u32 RegAddr, u32 BitMask, u32 Data)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        u32 Original_Value, BitShift, New_Value;
 
-       if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath))
+       if (!rtl92e_is_legal_rf_path(dev, eRFPath))
                return;
        if (priv->rtllib->eRFPowerState != eRfOn && !priv->being_init_adapter)
                return;
@@ -256,13 +254,13 @@ void rtl8192_phy_SetRFReg(struct net_device *dev, enum rf90_radio_path eRFPath,
        }
 }
 
-u32 rtl8192_phy_QueryRFReg(struct net_device *dev, enum rf90_radio_path eRFPath,
-                          u32 RegAddr, u32 BitMask)
+u32 rtl92e_get_rf_reg(struct net_device *dev, enum rf90_radio_path eRFPath,
+                     u32 RegAddr, u32 BitMask)
 {
        u32 Original_Value, Readback_Value, BitShift;
        struct r8192_priv *priv = rtllib_priv(dev);
 
-       if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath))
+       if (!rtl92e_is_legal_rf_path(dev, eRFPath))
                return 0;
        if (priv->rtllib->eRFPowerState != eRfOn && !priv->being_init_adapter)
                return  0;
@@ -289,20 +287,20 @@ static u32 phy_FwRFSerialRead(struct net_device *dev,
        Data |= ((Offset & 0xFF) << 12);
        Data |= ((eRFPath & 0x3) << 20);
        Data |= 0x80000000;
-       while (read_nic_dword(dev, QPNR)&0x80000000) {
+       while (rtl92e_readl(dev, QPNR) & 0x80000000) {
                if (time++ < 100)
                        udelay(10);
                else
                        break;
        }
-       write_nic_dword(dev, QPNR, Data);
-       while (read_nic_dword(dev, QPNR) & 0x80000000) {
+       rtl92e_writel(dev, QPNR, Data);
+       while (rtl92e_readl(dev, QPNR) & 0x80000000) {
                if (time++ < 100)
                        udelay(10);
                else
                        return 0;
        }
-       return read_nic_dword(dev, RF_DATA);
+       return rtl92e_readl(dev, RF_DATA);
 
 }
 
@@ -317,18 +315,18 @@ static void phy_FwRFSerialWrite(struct net_device *dev,
        Data |= 0x400000;
        Data |= 0x80000000;
 
-       while (read_nic_dword(dev, QPNR) & 0x80000000) {
+       while (rtl92e_readl(dev, QPNR) & 0x80000000) {
                if (time++ < 100)
                        udelay(10);
                else
                        break;
        }
-       write_nic_dword(dev, QPNR, Data);
+       rtl92e_writel(dev, QPNR, Data);
 
 }
 
 
-void rtl8192_phy_configmac(struct net_device *dev)
+void rtl92e_config_mac(struct net_device *dev)
 {
        u32 dwArrayLen = 0, i = 0;
        u32 *pdwArray = NULL;
@@ -350,14 +348,14 @@ void rtl8192_phy_configmac(struct net_device *dev)
                         pdwArray[i], pdwArray[i+1], pdwArray[i+2]);
                if (pdwArray[i] == 0x318)
                        pdwArray[i+2] = 0x00000800;
-               rtl8192_setBBreg(dev, pdwArray[i], pdwArray[i+1],
-                                pdwArray[i+2]);
+               rtl92e_set_bb_reg(dev, pdwArray[i], pdwArray[i+1],
+                                 pdwArray[i+2]);
        }
        return;
 
 }
 
-void rtl8192_phyConfigBB(struct net_device *dev, u8 ConfigType)
+static void rtl8192_phyConfigBB(struct net_device *dev, u8 ConfigType)
 {
        int i;
        u32 *Rtl819XPHY_REGArray_Table = NULL;
@@ -377,9 +375,9 @@ void rtl8192_phyConfigBB(struct net_device *dev, u8 ConfigType)
 
        if (ConfigType == BaseBand_Config_PHY_REG) {
                for (i = 0; i < PHY_REGArrayLen; i += 2) {
-                       rtl8192_setBBreg(dev, Rtl819XPHY_REGArray_Table[i],
-                                        bMaskDWord,
-                                        Rtl819XPHY_REGArray_Table[i+1]);
+                       rtl92e_set_bb_reg(dev, Rtl819XPHY_REGArray_Table[i],
+                                         bMaskDWord,
+                                         Rtl819XPHY_REGArray_Table[i+1]);
                        RT_TRACE(COMP_DBG,
                                 "i: %x, The Rtl819xUsbPHY_REGArray[0] is %x Rtl819xUsbPHY_REGArray[1] is %x\n",
                                 i, Rtl819XPHY_REGArray_Table[i],
@@ -387,9 +385,9 @@ void rtl8192_phyConfigBB(struct net_device *dev, u8 ConfigType)
                }
        } else if (ConfigType == BaseBand_Config_AGC_TAB) {
                for (i = 0; i < AGCTAB_ArrayLen; i += 2) {
-                       rtl8192_setBBreg(dev, Rtl819XAGCTAB_Array_Table[i],
-                                        bMaskDWord,
-                                        Rtl819XAGCTAB_Array_Table[i+1]);
+                       rtl92e_set_bb_reg(dev, Rtl819XAGCTAB_Array_Table[i],
+                                         bMaskDWord,
+                                         Rtl819XAGCTAB_Array_Table[i+1]);
                        RT_TRACE(COMP_DBG,
                                 "i:%x, The rtl819XAGCTAB_Array[0] is %x rtl819XAGCTAB_Array[1] is %x\n",
                                 i, Rtl819XAGCTAB_Array_Table[i],
@@ -489,9 +487,8 @@ static void rtl8192_InitBBRFRegDef(struct net_device *dev)
 
 }
 
-bool rtl8192_phy_checkBBAndRF(struct net_device *dev,
-                             enum hw90_block CheckBlock,
-                             enum rf90_radio_path eRFPath)
+bool rtl92e_check_bb_and_rf(struct net_device *dev, enum hw90_block CheckBlock,
+                           enum rf90_radio_path eRFPath)
 {
        bool ret = true;
        u32 i, CheckTimes = 4, dwRegRead = 0;
@@ -515,20 +512,20 @@ bool rtl8192_phy_checkBBAndRF(struct net_device *dev,
                switch (CheckBlock) {
                case HW90_BLOCK_PHY0:
                case HW90_BLOCK_PHY1:
-                       write_nic_dword(dev, WriteAddr[CheckBlock],
-                                       WriteData[i]);
-                       dwRegRead = read_nic_dword(dev, WriteAddr[CheckBlock]);
+                       rtl92e_writel(dev, WriteAddr[CheckBlock],
+                                     WriteData[i]);
+                       dwRegRead = rtl92e_readl(dev, WriteAddr[CheckBlock]);
                        break;
 
                case HW90_BLOCK_RF:
                        WriteData[i] &= 0xfff;
-                       rtl8192_phy_SetRFReg(dev, eRFPath,
-                                                WriteAddr[HW90_BLOCK_RF],
-                                                bMask12Bits, WriteData[i]);
+                       rtl92e_set_rf_reg(dev, eRFPath,
+                                         WriteAddr[HW90_BLOCK_RF],
+                                         bMask12Bits, WriteData[i]);
                        mdelay(10);
-                       dwRegRead = rtl8192_phy_QueryRFReg(dev, eRFPath,
-                                                WriteAddr[HW90_BLOCK_RF],
-                                                bMaskDWord);
+                       dwRegRead = rtl92e_get_rf_reg(dev, eRFPath,
+                                                     WriteAddr[HW90_BLOCK_RF],
+                                                     bMaskDWord);
                        mdelay(10);
                        break;
 
@@ -555,29 +552,29 @@ static bool rtl8192_BB_Config_ParaFile(struct net_device *dev)
        u8 bRegValue = 0, eCheckItem = 0;
        u32 dwRegValue = 0;
 
-       bRegValue = read_nic_byte(dev, BB_GLOBAL_RESET);
-       write_nic_byte(dev, BB_GLOBAL_RESET, (bRegValue|BB_GLOBAL_RESET_BIT));
+       bRegValue = rtl92e_readb(dev, BB_GLOBAL_RESET);
+       rtl92e_writeb(dev, BB_GLOBAL_RESET, (bRegValue|BB_GLOBAL_RESET_BIT));
 
-       dwRegValue = read_nic_dword(dev, CPU_GEN);
-       write_nic_dword(dev, CPU_GEN, (dwRegValue&(~CPU_GEN_BB_RST)));
+       dwRegValue = rtl92e_readl(dev, CPU_GEN);
+       rtl92e_writel(dev, CPU_GEN, (dwRegValue&(~CPU_GEN_BB_RST)));
 
        for (eCheckItem = (enum hw90_block)HW90_BLOCK_PHY0;
             eCheckItem <= HW90_BLOCK_PHY1; eCheckItem++) {
-               rtStatus  = rtl8192_phy_checkBBAndRF(dev,
-                                        (enum hw90_block)eCheckItem,
-                                        (enum rf90_radio_path)0);
+               rtStatus  = rtl92e_check_bb_and_rf(dev,
+                                                  (enum hw90_block)eCheckItem,
+                                                  (enum rf90_radio_path)0);
                if (!rtStatus) {
                        RT_TRACE((COMP_ERR | COMP_PHY),
-                                "PHY_RF8256_Config():Check PHY%d Fail!!\n",
+                                "rtl92e_config_rf():Check PHY%d Fail!!\n",
                                 eCheckItem-1);
                        return rtStatus;
                }
        }
-       rtl8192_setBBreg(dev, rFPGA0_RFMOD, bCCKEn|bOFDMEn, 0x0);
+       rtl92e_set_bb_reg(dev, rFPGA0_RFMOD, bCCKEn|bOFDMEn, 0x0);
        rtl8192_phyConfigBB(dev, BaseBand_Config_PHY_REG);
 
-       dwRegValue = read_nic_dword(dev, CPU_GEN);
-       write_nic_dword(dev, CPU_GEN, (dwRegValue|CPU_GEN_BB_RST));
+       dwRegValue = rtl92e_readl(dev, CPU_GEN);
+       rtl92e_writel(dev, CPU_GEN, (dwRegValue|CPU_GEN_BB_RST));
 
        rtl8192_phyConfigBB(dev, BaseBand_Config_AGC_TAB);
 
@@ -588,57 +585,57 @@ static bool rtl8192_BB_Config_ParaFile(struct net_device *dev)
                                      priv->AntennaTxPwDiff[0]);
                else
                        dwRegValue = 0x0;
-               rtl8192_setBBreg(dev, rFPGA0_TxGainStage,
-                       (bXBTxAGC|bXCTxAGC|bXDTxAGC), dwRegValue);
+               rtl92e_set_bb_reg(dev, rFPGA0_TxGainStage,
+                                 (bXBTxAGC|bXCTxAGC|bXDTxAGC), dwRegValue);
 
 
                dwRegValue = priv->CrystalCap;
-               rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, bXtalCap92x,
-                                dwRegValue);
+               rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter1, bXtalCap92x,
+                                 dwRegValue);
        }
 
        return rtStatus;
 }
-bool rtl8192_BBConfig(struct net_device *dev)
+bool rtl92e_config_bb(struct net_device *dev)
 {
        rtl8192_InitBBRFRegDef(dev);
        return rtl8192_BB_Config_ParaFile(dev);
 }
 
-void rtl8192_phy_getTxPower(struct net_device *dev)
+void rtl92e_get_tx_power(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
        priv->MCSTxPowerLevelOriginalOffset[0] =
-               read_nic_dword(dev, rTxAGC_Rate18_06);
+               rtl92e_readl(dev, rTxAGC_Rate18_06);
        priv->MCSTxPowerLevelOriginalOffset[1] =
-               read_nic_dword(dev, rTxAGC_Rate54_24);
+               rtl92e_readl(dev, rTxAGC_Rate54_24);
        priv->MCSTxPowerLevelOriginalOffset[2] =
-               read_nic_dword(dev, rTxAGC_Mcs03_Mcs00);
+               rtl92e_readl(dev, rTxAGC_Mcs03_Mcs00);
        priv->MCSTxPowerLevelOriginalOffset[3] =
-               read_nic_dword(dev, rTxAGC_Mcs07_Mcs04);
+               rtl92e_readl(dev, rTxAGC_Mcs07_Mcs04);
        priv->MCSTxPowerLevelOriginalOffset[4] =
-               read_nic_dword(dev, rTxAGC_Mcs11_Mcs08);
+               rtl92e_readl(dev, rTxAGC_Mcs11_Mcs08);
        priv->MCSTxPowerLevelOriginalOffset[5] =
-               read_nic_dword(dev, rTxAGC_Mcs15_Mcs12);
+               rtl92e_readl(dev, rTxAGC_Mcs15_Mcs12);
 
-       priv->DefaultInitialGain[0] = read_nic_byte(dev, rOFDM0_XAAGCCore1);
-       priv->DefaultInitialGain[1] = read_nic_byte(dev, rOFDM0_XBAGCCore1);
-       priv->DefaultInitialGain[2] = read_nic_byte(dev, rOFDM0_XCAGCCore1);
-       priv->DefaultInitialGain[3] = read_nic_byte(dev, rOFDM0_XDAGCCore1);
+       priv->DefaultInitialGain[0] = rtl92e_readb(dev, rOFDM0_XAAGCCore1);
+       priv->DefaultInitialGain[1] = rtl92e_readb(dev, rOFDM0_XBAGCCore1);
+       priv->DefaultInitialGain[2] = rtl92e_readb(dev, rOFDM0_XCAGCCore1);
+       priv->DefaultInitialGain[3] = rtl92e_readb(dev, rOFDM0_XDAGCCore1);
        RT_TRACE(COMP_INIT,
                 "Default initial gain (c50=0x%x, c58=0x%x, c60=0x%x, c68=0x%x)\n",
                 priv->DefaultInitialGain[0], priv->DefaultInitialGain[1],
                 priv->DefaultInitialGain[2], priv->DefaultInitialGain[3]);
 
-       priv->framesync = read_nic_byte(dev, rOFDM0_RxDetector3);
-       priv->framesyncC34 = read_nic_dword(dev, rOFDM0_RxDetector2);
+       priv->framesync = rtl92e_readb(dev, rOFDM0_RxDetector3);
+       priv->framesyncC34 = rtl92e_readl(dev, rOFDM0_RxDetector2);
        RT_TRACE(COMP_INIT, "Default framesync (0x%x) = 0x%x\n",
                rOFDM0_RxDetector3, priv->framesync);
-       priv->SifsTime = read_nic_word(dev, SIFS);
+       priv->SifsTime = rtl92e_readw(dev, SIFS);
 }
 
-void rtl8192_phy_setTxPower(struct net_device *dev, u8 channel)
+void rtl92e_set_tx_power(struct net_device *dev, u8 channel)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        u8      powerlevel = 0, powerlevelOFDM24G = 0;
@@ -671,16 +668,17 @@ void rtl8192_phy_setTxPower(struct net_device *dev, u8 channel)
                                      priv->AntennaTxPwDiff[1]<<4 |
                                      priv->AntennaTxPwDiff[0]);
 
-                       rtl8192_setBBreg(dev, rFPGA0_TxGainStage,
-                       (bXBTxAGC|bXCTxAGC|bXDTxAGC), u4RegValue);
+                       rtl92e_set_bb_reg(dev, rFPGA0_TxGainStage,
+                                         (bXBTxAGC|bXCTxAGC|bXDTxAGC),
+                                         u4RegValue);
                }
        }
        switch (priv->rf_chip) {
        case RF_8225:
                break;
        case RF_8256:
-               PHY_SetRF8256CCKTxPower(dev, powerlevel);
-               PHY_SetRF8256OFDMTxPower(dev, powerlevelOFDM24G);
+               rtl92e_set_cck_tx_power(dev, powerlevel);
+               rtl92e_set_ofdm_tx_power(dev, powerlevelOFDM24G);
                break;
        case RF_8258:
                break;
@@ -690,7 +688,7 @@ void rtl8192_phy_setTxPower(struct net_device *dev, u8 channel)
        }
 }
 
-bool rtl8192_phy_RFConfig(struct net_device *dev)
+bool rtl92e_config_phy(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        bool rtStatus = true;
@@ -699,7 +697,7 @@ bool rtl8192_phy_RFConfig(struct net_device *dev)
        case RF_8225:
                break;
        case RF_8256:
-               rtStatus = PHY_RF8256_Config(dev);
+               rtStatus = rtl92e_config_rf(dev);
                break;
 
        case RF_8258:
@@ -714,12 +712,7 @@ bool rtl8192_phy_RFConfig(struct net_device *dev)
        return rtStatus;
 }
 
-void rtl8192_phy_updateInitGain(struct net_device *dev)
-{
-}
-
-u8 rtl8192_phy_ConfigRFWithHeaderFile(struct net_device *dev,
-                                     enum rf90_radio_path eRFPath)
+u8 rtl92e_config_rf_path(struct net_device *dev, enum rf90_radio_path eRFPath)
 {
 
        int i;
@@ -731,10 +724,9 @@ u8 rtl8192_phy_ConfigRFWithHeaderFile(struct net_device *dev,
                                msleep(100);
                                continue;
                        }
-                       rtl8192_phy_SetRFReg(dev, eRFPath,
-                                            Rtl819XRadioA_Array[i],
-                                            bMask12Bits,
-                                            Rtl819XRadioA_Array[i+1]);
+                       rtl92e_set_rf_reg(dev, eRFPath, Rtl819XRadioA_Array[i],
+                                         bMask12Bits,
+                                         Rtl819XRadioA_Array[i+1]);
 
                }
                break;
@@ -744,10 +736,9 @@ u8 rtl8192_phy_ConfigRFWithHeaderFile(struct net_device *dev,
                                msleep(100);
                                continue;
                        }
-                       rtl8192_phy_SetRFReg(dev, eRFPath,
-                                            Rtl819XRadioB_Array[i],
-                                            bMask12Bits,
-                                            Rtl819XRadioB_Array[i+1]);
+                       rtl92e_set_rf_reg(dev, eRFPath, Rtl819XRadioB_Array[i],
+                                         bMask12Bits,
+                                         Rtl819XRadioB_Array[i+1]);
 
                }
                break;
@@ -757,10 +748,9 @@ u8 rtl8192_phy_ConfigRFWithHeaderFile(struct net_device *dev,
                                msleep(100);
                                continue;
                        }
-                       rtl8192_phy_SetRFReg(dev, eRFPath,
-                                            Rtl819XRadioC_Array[i],
-                                            bMask12Bits,
-                                            Rtl819XRadioC_Array[i+1]);
+                       rtl92e_set_rf_reg(dev, eRFPath, Rtl819XRadioC_Array[i],
+                                         bMask12Bits,
+                                         Rtl819XRadioC_Array[i+1]);
 
                }
                break;
@@ -770,9 +760,9 @@ u8 rtl8192_phy_ConfigRFWithHeaderFile(struct net_device *dev,
                                        msleep(100);
                                        continue;
                        }
-                       rtl8192_phy_SetRFReg(dev, eRFPath,
-                                        Rtl819XRadioD_Array[i], bMask12Bits,
-                                        Rtl819XRadioD_Array[i+1]);
+                       rtl92e_set_rf_reg(dev, eRFPath, Rtl819XRadioD_Array[i],
+                                         bMask12Bits,
+                                         Rtl819XRadioD_Array[i+1]);
 
                }
                break;
@@ -794,8 +784,8 @@ static void rtl8192_SetTxPowerLevel(struct net_device *dev, u8 channel)
                break;
 
        case RF_8256:
-               PHY_SetRF8256CCKTxPower(dev, powerlevel);
-               PHY_SetRF8256OFDMTxPower(dev, powerlevelOFDM24G);
+               rtl92e_set_cck_tx_power(dev, powerlevel);
+               rtl92e_set_ofdm_tx_power(dev, powerlevelOFDM24G);
                break;
 
        case RF_8258:
@@ -941,21 +931,21 @@ static u8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel,
                                        rtl8192_SetTxPowerLevel(dev, channel);
                                break;
                        case CmdID_WritePortUlong:
-                               write_nic_dword(dev, CurrentCmd->Para1,
-                                               CurrentCmd->Para2);
+                               rtl92e_writel(dev, CurrentCmd->Para1,
+                                             CurrentCmd->Para2);
                                break;
                        case CmdID_WritePortUshort:
-                               write_nic_word(dev, CurrentCmd->Para1,
-                                              (u16)CurrentCmd->Para2);
+                               rtl92e_writew(dev, CurrentCmd->Para1,
+                                             (u16)CurrentCmd->Para2);
                                break;
                        case CmdID_WritePortUchar:
-                               write_nic_byte(dev, CurrentCmd->Para1,
-                                              (u8)CurrentCmd->Para2);
+                               rtl92e_writeb(dev, CurrentCmd->Para1,
+                                             (u8)CurrentCmd->Para2);
                                break;
                        case CmdID_RF_WriteReg:
                                for (eRFPath = 0; eRFPath <
                                     priv->NumTotalRFPath; eRFPath++)
-                                       rtl8192_phy_SetRFReg(dev,
+                                       rtl92e_set_rf_reg(dev,
                                                 (enum rf90_radio_path)eRFPath,
                                                 CurrentCmd->Para1, bMask12Bits,
                                                 CurrentCmd->Para2<<7);
@@ -986,7 +976,7 @@ static void rtl8192_phy_FinishSwChnlNow(struct net_device *dev, u8 channel)
                        break;
        }
 }
-void rtl8192_SwChnl_WorkItem(struct net_device *dev)
+static void rtl8192_SwChnl_WorkItem(struct net_device *dev)
 {
 
        struct r8192_priv *priv = rtllib_priv(dev);
@@ -1001,7 +991,7 @@ void rtl8192_SwChnl_WorkItem(struct net_device *dev)
        RT_TRACE(COMP_TRACE, "<== SwChnlCallback819xUsbWorkItem()\n");
 }
 
-u8 rtl8192_phy_SwChnl(struct net_device *dev, u8 channel)
+u8 rtl92e_set_channel(struct net_device *dev, u8 channel)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
@@ -1082,13 +1072,13 @@ static void CCK_Tx_Power_Track_BW_Switch_TSSI(struct net_device *dev)
                if (priv->rtllib->current_network.channel == 14 &&
                    !priv->bcck_in_ch14) {
                        priv->bcck_in_ch14 = true;
-                       dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
+                       rtl92e_dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
                } else if (priv->rtllib->current_network.channel !=
                           14 && priv->bcck_in_ch14) {
                        priv->bcck_in_ch14 = false;
-                       dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
+                       rtl92e_dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
                } else {
-                       dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
+                       rtl92e_dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
                }
                break;
 
@@ -1110,13 +1100,13 @@ static void CCK_Tx_Power_Track_BW_Switch_TSSI(struct net_device *dev)
                if (priv->rtllib->current_network.channel == 14 &&
                    !priv->bcck_in_ch14) {
                        priv->bcck_in_ch14 = true;
-                       dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
+                       rtl92e_dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
                } else if (priv->rtllib->current_network.channel != 14
                           && priv->bcck_in_ch14) {
                        priv->bcck_in_ch14 = false;
-                       dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
+                       rtl92e_dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
                } else {
-                       dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
+                       rtl92e_dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
                }
                break;
        }
@@ -1150,7 +1140,7 @@ static void CCK_Tx_Power_Track_BW_Switch_ThermalMeter(struct net_device *dev)
                         priv->CCK_index);
        break;
        }
-       dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
+       rtl92e_dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
 }
 
 static void CCK_Tx_Power_Track_BW_Switch(struct net_device *dev)
@@ -1163,7 +1153,7 @@ static void CCK_Tx_Power_Track_BW_Switch(struct net_device *dev)
                CCK_Tx_Power_Track_BW_Switch_ThermalMeter(dev);
 }
 
-void rtl8192_SetBWModeWorkItem(struct net_device *dev)
+static void rtl8192_SetBWModeWorkItem(struct net_device *dev)
 {
 
        struct r8192_priv *priv = rtllib_priv(dev);
@@ -1183,17 +1173,17 @@ void rtl8192_SetBWModeWorkItem(struct net_device *dev)
                netdev_err(dev, "%s(): Driver is not initialized\n", __func__);
                return;
        }
-       regBwOpMode = read_nic_byte(dev, BW_OPMODE);
+       regBwOpMode = rtl92e_readb(dev, BW_OPMODE);
 
        switch (priv->CurrentChannelBW) {
        case HT_CHANNEL_WIDTH_20:
                regBwOpMode |= BW_OPMODE_20MHZ;
-               write_nic_byte(dev, BW_OPMODE, regBwOpMode);
+               rtl92e_writeb(dev, BW_OPMODE, regBwOpMode);
                break;
 
        case HT_CHANNEL_WIDTH_20_40:
                regBwOpMode &= ~BW_OPMODE_20MHZ;
-               write_nic_byte(dev, BW_OPMODE, regBwOpMode);
+               rtl92e_writeb(dev, BW_OPMODE, regBwOpMode);
                break;
 
        default:
@@ -1204,38 +1194,38 @@ void rtl8192_SetBWModeWorkItem(struct net_device *dev)
 
        switch (priv->CurrentChannelBW) {
        case HT_CHANNEL_WIDTH_20:
-               rtl8192_setBBreg(dev, rFPGA0_RFMOD, bRFMOD, 0x0);
-               rtl8192_setBBreg(dev, rFPGA1_RFMOD, bRFMOD, 0x0);
+               rtl92e_set_bb_reg(dev, rFPGA0_RFMOD, bRFMOD, 0x0);
+               rtl92e_set_bb_reg(dev, rFPGA1_RFMOD, bRFMOD, 0x0);
 
                if (!priv->btxpower_tracking) {
-                       write_nic_dword(dev, rCCK0_TxFilter1, 0x1a1b0000);
-                       write_nic_dword(dev, rCCK0_TxFilter2, 0x090e1317);
-                       write_nic_dword(dev, rCCK0_DebugPort, 0x00000204);
+                       rtl92e_writel(dev, rCCK0_TxFilter1, 0x1a1b0000);
+                       rtl92e_writel(dev, rCCK0_TxFilter2, 0x090e1317);
+                       rtl92e_writel(dev, rCCK0_DebugPort, 0x00000204);
                } else {
                        CCK_Tx_Power_Track_BW_Switch(dev);
                }
 
-               rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x00100000, 1);
+               rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter1, 0x00100000, 1);
 
                break;
        case HT_CHANNEL_WIDTH_20_40:
-               rtl8192_setBBreg(dev, rFPGA0_RFMOD, bRFMOD, 0x1);
-               rtl8192_setBBreg(dev, rFPGA1_RFMOD, bRFMOD, 0x1);
+               rtl92e_set_bb_reg(dev, rFPGA0_RFMOD, bRFMOD, 0x1);
+               rtl92e_set_bb_reg(dev, rFPGA1_RFMOD, bRFMOD, 0x1);
 
                if (!priv->btxpower_tracking) {
-                       write_nic_dword(dev, rCCK0_TxFilter1, 0x35360000);
-                       write_nic_dword(dev, rCCK0_TxFilter2, 0x121c252e);
-                       write_nic_dword(dev, rCCK0_DebugPort, 0x00000409);
+                       rtl92e_writel(dev, rCCK0_TxFilter1, 0x35360000);
+                       rtl92e_writel(dev, rCCK0_TxFilter2, 0x121c252e);
+                       rtl92e_writel(dev, rCCK0_DebugPort, 0x00000409);
                } else {
                        CCK_Tx_Power_Track_BW_Switch(dev);
                }
 
-               rtl8192_setBBreg(dev, rCCK0_System, bCCKSideBand,
-                                (priv->nCur40MhzPrimeSC>>1));
-               rtl8192_setBBreg(dev, rOFDM1_LSTF, 0xC00,
-                                priv->nCur40MhzPrimeSC);
+               rtl92e_set_bb_reg(dev, rCCK0_System, bCCKSideBand,
+                                 (priv->nCur40MhzPrimeSC>>1));
+               rtl92e_set_bb_reg(dev, rOFDM1_LSTF, 0xC00,
+                                 priv->nCur40MhzPrimeSC);
 
-               rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x00100000, 0);
+               rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter1, 0x00100000, 0);
                break;
        default:
                netdev_err(dev, "%s(): unknown Bandwidth: %#X\n", __func__,
@@ -1249,7 +1239,7 @@ void rtl8192_SetBWModeWorkItem(struct net_device *dev)
                break;
 
        case RF_8256:
-               PHY_SetRF8256Bandwidth(dev, priv->CurrentChannelBW);
+               rtl92e_set_bandwidth(dev, priv->CurrentChannelBW);
                break;
 
        case RF_8258:
@@ -1270,8 +1260,8 @@ void rtl8192_SetBWModeWorkItem(struct net_device *dev)
        RT_TRACE(COMP_SWBW, "<==SetBWMode819xUsb()");
 }
 
-void rtl8192_SetBWMode(struct net_device *dev, enum ht_channel_width Bandwidth,
-                      enum ht_extchnl_offset Offset)
+void rtl92e_set_bw_mode(struct net_device *dev, enum ht_channel_width Bandwidth,
+                       enum ht_extchnl_offset Offset)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
@@ -1295,7 +1285,7 @@ void rtl8192_SetBWMode(struct net_device *dev, enum ht_channel_width Bandwidth,
 
 }
 
-void InitialGain819xPci(struct net_device *dev, u8 Operation)
+void rtl92e_init_gain(struct net_device *dev, u8 Operation)
 {
 #define SCAN_RX_INITIAL_GAIN   0x17
 #define POWER_DETECTION_TH     0x08
@@ -1312,21 +1302,21 @@ void InitialGain819xPci(struct net_device *dev, u8 Operation)
                        BitMask = bMaskByte0;
                        if (dm_digtable.dig_algorithm ==
                            DIG_ALGO_BY_FALSE_ALARM)
-                               rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x8);
+                               rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x8);
                        priv->initgain_backup.xaagccore1 =
-                                (u8)rtl8192_QueryBBReg(dev, rOFDM0_XAAGCCore1,
-                                BitMask);
+                                (u8)rtl92e_get_bb_reg(dev, rOFDM0_XAAGCCore1,
+                                                      BitMask);
                        priv->initgain_backup.xbagccore1 =
-                                (u8)rtl8192_QueryBBReg(dev, rOFDM0_XBAGCCore1,
-                                BitMask);
+                                (u8)rtl92e_get_bb_reg(dev, rOFDM0_XBAGCCore1,
+                                                      BitMask);
                        priv->initgain_backup.xcagccore1 =
-                                (u8)rtl8192_QueryBBReg(dev, rOFDM0_XCAGCCore1,
-                                BitMask);
+                                (u8)rtl92e_get_bb_reg(dev, rOFDM0_XCAGCCore1,
+                                                      BitMask);
                        priv->initgain_backup.xdagccore1 =
-                                (u8)rtl8192_QueryBBReg(dev, rOFDM0_XDAGCCore1,
-                                BitMask);
+                                (u8)rtl92e_get_bb_reg(dev, rOFDM0_XDAGCCore1,
+                                                      BitMask);
                        BitMask = bMaskByte2;
-                       priv->initgain_backup.cca = (u8)rtl8192_QueryBBReg(dev,
+                       priv->initgain_backup.cca = (u8)rtl92e_get_bb_reg(dev,
                                                    rCCK0_CCA, BitMask);
 
                        RT_TRACE(COMP_SCAN,
@@ -1347,13 +1337,13 @@ void InitialGain819xPci(struct net_device *dev, u8 Operation)
 
                        RT_TRACE(COMP_SCAN, "Write scan initial gain = 0x%x\n",
                                 initial_gain);
-                       write_nic_byte(dev, rOFDM0_XAAGCCore1, initial_gain);
-                       write_nic_byte(dev, rOFDM0_XBAGCCore1, initial_gain);
-                       write_nic_byte(dev, rOFDM0_XCAGCCore1, initial_gain);
-                       write_nic_byte(dev, rOFDM0_XDAGCCore1, initial_gain);
+                       rtl92e_writeb(dev, rOFDM0_XAAGCCore1, initial_gain);
+                       rtl92e_writeb(dev, rOFDM0_XBAGCCore1, initial_gain);
+                       rtl92e_writeb(dev, rOFDM0_XCAGCCore1, initial_gain);
+                       rtl92e_writeb(dev, rOFDM0_XDAGCCore1, initial_gain);
                        RT_TRACE(COMP_SCAN, "Write scan 0xa0a = 0x%x\n",
                                 POWER_DETECTION_TH);
-                       write_nic_byte(dev, 0xa0a, POWER_DETECTION_TH);
+                       rtl92e_writeb(dev, 0xa0a, POWER_DETECTION_TH);
                        break;
                case IG_Restore:
                        RT_TRACE(COMP_SCAN,
@@ -1361,18 +1351,18 @@ void InitialGain819xPci(struct net_device *dev, u8 Operation)
                        BitMask = 0x7f;
                        if (dm_digtable.dig_algorithm ==
                            DIG_ALGO_BY_FALSE_ALARM)
-                               rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x8);
+                               rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x8);
 
-                       rtl8192_setBBreg(dev, rOFDM0_XAAGCCore1, BitMask,
+                       rtl92e_set_bb_reg(dev, rOFDM0_XAAGCCore1, BitMask,
                                         (u32)priv->initgain_backup.xaagccore1);
-                       rtl8192_setBBreg(dev, rOFDM0_XBAGCCore1, BitMask,
+                       rtl92e_set_bb_reg(dev, rOFDM0_XBAGCCore1, BitMask,
                                         (u32)priv->initgain_backup.xbagccore1);
-                       rtl8192_setBBreg(dev, rOFDM0_XCAGCCore1, BitMask,
+                       rtl92e_set_bb_reg(dev, rOFDM0_XCAGCCore1, BitMask,
                                         (u32)priv->initgain_backup.xcagccore1);
-                       rtl8192_setBBreg(dev, rOFDM0_XDAGCCore1, BitMask,
+                       rtl92e_set_bb_reg(dev, rOFDM0_XDAGCCore1, BitMask,
                                         (u32)priv->initgain_backup.xdagccore1);
                        BitMask  = bMaskByte2;
-                       rtl8192_setBBreg(dev, rCCK0_CCA, BitMask,
+                       rtl92e_set_bb_reg(dev, rCCK0_CCA, BitMask,
                                         (u32)priv->initgain_backup.cca);
 
                        RT_TRACE(COMP_SCAN,
@@ -1391,12 +1381,12 @@ void InitialGain819xPci(struct net_device *dev, u8 Operation)
                                 "Scan BBInitialGainRestore 0xa0a is %x\n",
                                 priv->initgain_backup.cca);
 
-                       rtl8192_phy_setTxPower(dev,
+                       rtl92e_set_tx_power(dev,
                                         priv->rtllib->current_network.channel);
 
                        if (dm_digtable.dig_algorithm ==
                            DIG_ALGO_BY_FALSE_ALARM)
-                               rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x1);
+                               rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x1);
                        break;
                default:
                        RT_TRACE(COMP_SCAN, "Unknown IG Operation.\n");
@@ -1405,17 +1395,17 @@ void InitialGain819xPci(struct net_device *dev, u8 Operation)
        }
 }
 
-void PHY_SetRtl8192eRfOff(struct net_device *dev)
+void rtl92e_set_rf_off(struct net_device *dev)
 {
 
-       rtl8192_setBBreg(dev, rFPGA0_XA_RFInterfaceOE, BIT4, 0x0);
-       rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0x300, 0x0);
-       rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x18, 0x0);
-       rtl8192_setBBreg(dev, rOFDM0_TRxPathEnable, 0xf, 0x0);
-       rtl8192_setBBreg(dev, rOFDM1_TRxPathEnable, 0xf, 0x0);
-       rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x60, 0x0);
-       rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x4, 0x0);
-       write_nic_byte(dev, ANAPAR_FOR_8192PciE, 0x07);
+       rtl92e_set_bb_reg(dev, rFPGA0_XA_RFInterfaceOE, BIT4, 0x0);
+       rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter4, 0x300, 0x0);
+       rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter1, 0x18, 0x0);
+       rtl92e_set_bb_reg(dev, rOFDM0_TRxPathEnable, 0xf, 0x0);
+       rtl92e_set_bb_reg(dev, rOFDM1_TRxPathEnable, 0xf, 0x0);
+       rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter1, 0x60, 0x0);
+       rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter1, 0x4, 0x0);
+       rtl92e_writeb(dev, ANAPAR_FOR_8192PciE, 0x07);
 
 }
 
@@ -1447,7 +1437,7 @@ static bool SetRFPowerState8190(struct net_device *dev,
                                do {
                                        InitilizeCount--;
                                        priv->RegRfOff = false;
-                                       rtstatus = NicIFEnableNIC(dev);
+                                       rtstatus = rtl92e_enable_nic(dev);
                                } while (!rtstatus && (InitilizeCount > 0));
 
                                if (!rtstatus) {
@@ -1461,24 +1451,24 @@ static bool SetRFPowerState8190(struct net_device *dev,
                                RT_CLEAR_PS_LEVEL(pPSC,
                                                  RT_RF_OFF_LEVL_HALT_NIC);
                        } else {
-                               write_nic_byte(dev, ANAPAR, 0x37);
+                               rtl92e_writeb(dev, ANAPAR, 0x37);
                                mdelay(1);
-                               rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1,
+                               rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter1,
                                                 0x4, 0x1);
                                priv->bHwRfOffAction = 0;
 
-                               rtl8192_setBBreg(dev, rFPGA0_XA_RFInterfaceOE,
-                                                BIT4, 0x1);
-                               rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4,
-                                                0x300, 0x3);
-                               rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1,
-                                                0x18, 0x3);
-                               rtl8192_setBBreg(dev, rOFDM0_TRxPathEnable, 0x3,
-                                                0x3);
-                               rtl8192_setBBreg(dev, rOFDM1_TRxPathEnable, 0x3,
-                                                0x3);
-                               rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1,
-                                                0x60, 0x3);
+                               rtl92e_set_bb_reg(dev, rFPGA0_XA_RFInterfaceOE,
+                                                 BIT4, 0x1);
+                               rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter4,
+                                                 0x300, 0x3);
+                               rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter1,
+                                                 0x18, 0x3);
+                               rtl92e_set_bb_reg(dev, rOFDM0_TRxPathEnable,
+                                                 0x3, 0x3);
+                               rtl92e_set_bb_reg(dev, rOFDM1_TRxPathEnable,
+                                                 0x3, 0x3);
+                               rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter1,
+                                                 0x60, 0x3);
 
                        }
 
@@ -1511,7 +1501,7 @@ static bool SetRFPowerState8190(struct net_device *dev,
                                        break;
                                }
                        }
-                       PHY_SetRtl8192eRfOff(dev);
+                       rtl92e_set_rf_off(dev);
                        break;
 
                case eRfOff:
@@ -1543,11 +1533,11 @@ static bool SetRFPowerState8190(struct net_device *dev,
 
                        if (pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_HALT_NIC &&
                            !RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC)) {
-                               NicIFDisableNIC(dev);
+                               rtl92e_disable_nic(dev);
                                RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC);
                        } else if (!(pPSC->RegRfPsLevel &
                                   RT_RF_OFF_LEVL_HALT_NIC)) {
-                               PHY_SetRtl8192eRfOff(dev);
+                               rtl92e_set_rf_off(dev);
                        }
 
                        break;
@@ -1586,32 +1576,34 @@ static bool SetRFPowerState8190(struct net_device *dev,
        return bResult;
 }
 
-bool SetRFPowerState(struct net_device *dev,
-                    enum rt_rf_power_state eRFPowerState)
+bool rtl92e_set_rf_power_state(struct net_device *dev,
+                              enum rt_rf_power_state eRFPowerState)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
        bool bResult = false;
 
-       RT_TRACE(COMP_PS, "---------> SetRFPowerState(): eRFPowerState(%d)\n",
+       RT_TRACE(COMP_PS,
+                "---------> rtl92e_set_rf_power_state(): eRFPowerState(%d)\n",
                 eRFPowerState);
        if (eRFPowerState == priv->rtllib->eRFPowerState &&
            priv->bHwRfOffAction == 0) {
                RT_TRACE(COMP_PS,
-                        "<--------- SetRFPowerState(): discard the request for eRFPowerState(%d) is the same.\n",
+                        "<--------- rtl92e_set_rf_power_state(): discard the request for eRFPowerState(%d) is the same.\n",
                         eRFPowerState);
                return bResult;
        }
 
        bResult = SetRFPowerState8190(dev, eRFPowerState);
 
-       RT_TRACE(COMP_PS, "<--------- SetRFPowerState(): bResult(%d)\n",
+       RT_TRACE(COMP_PS,
+                "<--------- rtl92e_set_rf_power_state(): bResult(%d)\n",
                 bResult);
 
        return bResult;
 }
 
-void PHY_ScanOperationBackup8192(struct net_device *dev, u8 Operation)
+void rtl92e_scan_op_backup(struct net_device *dev, u8 Operation)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
index 18bc58240fbeb4455e2d99f423c73c82a72b5035..350d3063df72dd76439b8a67db3b07fde32ce3bb 100644 (file)
@@ -67,48 +67,40 @@ enum rf90_radio_path {
 #define bMaskLWord                0x0000ffff
 #define bMaskDWord                0xffffffff
 
-extern u8 rtl8192_phy_CheckIsLegalRFPath(struct net_device *dev,
-                                        u32 eRFPath);
-extern void rtl8192_setBBreg(struct net_device *dev, u32 dwRegAddr,
-                            u32 dwBitMask, u32 dwData);
-extern u32 rtl8192_QueryBBReg(struct net_device *dev, u32 dwRegAddr,
-                             u32 dwBitMask);
-extern void rtl8192_phy_SetRFReg(struct net_device *dev,
-                                enum rf90_radio_path eRFPath,
-                                u32 RegAddr, u32 BitMask, u32 Data);
-extern u32 rtl8192_phy_QueryRFReg(struct net_device *dev,
-                                 enum rf90_radio_path eRFPath,
-                                 u32 RegAddr, u32 BitMask);
-extern void rtl8192_phy_configmac(struct net_device *dev);
-extern void rtl8192_phyConfigBB(struct net_device *dev, u8 ConfigType);
-extern bool rtl8192_phy_checkBBAndRF(struct net_device *dev,
-                                    enum hw90_block CheckBlock,
-                                    enum rf90_radio_path eRFPath);
-extern bool rtl8192_BBConfig(struct net_device *dev);
-extern void rtl8192_phy_getTxPower(struct net_device *dev);
-extern void rtl8192_phy_setTxPower(struct net_device *dev, u8 channel);
-extern bool rtl8192_phy_RFConfig(struct net_device *dev);
-extern void rtl8192_phy_updateInitGain(struct net_device *dev);
-extern u8 rtl8192_phy_ConfigRFWithHeaderFile(struct net_device *dev,
-                                            enum rf90_radio_path eRFPath);
+extern u8 rtl92e_is_legal_rf_path(struct net_device *dev, u32 eRFPath);
+extern void rtl92e_set_bb_reg(struct net_device *dev, u32 dwRegAddr,
+                             u32 dwBitMask, u32 dwData);
+extern u32 rtl92e_get_bb_reg(struct net_device *dev, u32 dwRegAddr,
+                            u32 dwBitMask);
+extern void rtl92e_set_rf_reg(struct net_device *dev,
+                             enum rf90_radio_path eRFPath, u32 RegAddr,
+                             u32 BitMask, u32 Data);
+extern u32 rtl92e_get_rf_reg(struct net_device *dev,
+                            enum rf90_radio_path eRFPath, u32 RegAddr,
+                            u32 BitMask);
+extern void rtl92e_config_mac(struct net_device *dev);
+extern bool rtl92e_check_bb_and_rf(struct net_device *dev,
+                                  enum hw90_block CheckBlock,
+                                  enum rf90_radio_path eRFPath);
+extern bool rtl92e_config_bb(struct net_device *dev);
+extern void rtl92e_get_tx_power(struct net_device *dev);
+extern void rtl92e_set_tx_power(struct net_device *dev, u8 channel);
+extern bool rtl92e_config_phy(struct net_device *dev);
+extern u8 rtl92e_config_rf_path(struct net_device *dev,
+                               enum rf90_radio_path eRFPath);
 
-extern u8 rtl8192_phy_SwChnl(struct net_device *dev, u8 channel);
-extern void rtl8192_SetBWMode(struct net_device *dev,
-                             enum ht_channel_width Bandwidth,
-                             enum ht_extchnl_offset Offset);
-extern void rtl8192_SwChnl_WorkItem(struct net_device *dev);
-extern void rtl8192_SetBWModeWorkItem(struct net_device *dev);
-extern void InitialGain819xPci(struct net_device *dev, u8 Operation);
+extern u8 rtl92e_set_channel(struct net_device *dev, u8 channel);
+extern void rtl92e_set_bw_mode(struct net_device *dev,
+                              enum ht_channel_width Bandwidth,
+                              enum ht_extchnl_offset Offset);
+extern void rtl92e_init_gain(struct net_device *dev, u8 Operation);
 
-extern void PHY_SetRtl8192eRfOff(struct net_device *dev);
+extern void rtl92e_set_rf_off(struct net_device *dev);
 
-bool
-SetRFPowerState(
-       struct net_device *dev,
-       enum rt_rf_power_state eRFPowerState
-       );
-#define PHY_SetRFPowerState SetRFPowerState
+bool rtl92e_set_rf_power_state(struct net_device *dev,
+                              enum rt_rf_power_state eRFPowerState);
+#define PHY_SetRFPowerState rtl92e_set_rf_power_state
 
-extern void PHY_ScanOperationBackup8192(struct net_device *dev, u8 Operation);
+extern void rtl92e_scan_op_backup(struct net_device *dev, u8 Operation);
 
 #endif
index f246222e5fc954e83cc8fb8be0344aaf057d48a2..29dd93ac5e93fdfd4e3eacc67116023e01746408 100644 (file)
 #include "r8190P_rtl8256.h" /* RTL8225 Radio frontend */
 #include "r8192E_cmdpkt.h"
 
-void CamResetAllEntry(struct net_device *dev)
+void rtl92e_cam_reset(struct net_device *dev)
 {
        u32 ulcommand = 0;
 
        ulcommand |= BIT31|BIT30;
-       write_nic_dword(dev, RWCAM, ulcommand);
+       rtl92e_writel(dev, RWCAM, ulcommand);
 }
 
-void EnableHWSecurityConfig8192(struct net_device *dev)
+void rtl92e_enable_hw_security_config(struct net_device *dev)
 {
        u8 SECR_value = 0x0;
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
@@ -65,11 +65,12 @@ void EnableHWSecurityConfig8192(struct net_device *dev)
        RT_TRACE(COMP_SEC, "%s:, hwsec:%d, pairwise_key:%d, SECR_value:%x\n",
                 __func__, ieee->hwsec_active, ieee->pairwise_key_type,
                 SECR_value);
-       write_nic_byte(dev, SECR,  SECR_value);
+       rtl92e_writeb(dev, SECR, SECR_value);
 }
 
-void set_swcam(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType,
-              const u8 *MacAddr, u8 DefaultKey, u32 *KeyContent, u8 is_mesh)
+void rtl92e_set_swcam(struct net_device *dev, u8 EntryNo, u8 KeyIndex,
+                     u16 KeyType, const u8 *MacAddr, u8 DefaultKey,
+                     u32 *KeyContent, u8 is_mesh)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rtllib_device *ieee = priv->rtllib;
@@ -77,6 +78,10 @@ void set_swcam(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType,
        RT_TRACE(COMP_DBG,
                 "===========>%s():EntryNo is %d,KeyIndex is %d,KeyType is %d,is_mesh is %d\n",
                 __func__, EntryNo, KeyIndex, KeyType, is_mesh);
+
+       if (EntryNo >= TOTAL_CAM_ENTRY)
+               return;
+
        if (!is_mesh) {
                ieee->swcamtable[EntryNo].bused = true;
                ieee->swcamtable[EntryNo].key_index = KeyIndex;
@@ -87,8 +92,9 @@ void set_swcam(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType,
        }
 }
 
-void setKey(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType,
-           const u8 *MacAddr, u8 DefaultKey, u32 *KeyContent)
+void rtl92e_set_key(struct net_device *dev, u8 EntryNo, u8 KeyIndex,
+                   u16 KeyType, const u8 *MacAddr, u8 DefaultKey,
+                   u32 *KeyContent)
 {
        u32 TargetCommand = 0;
        u32 TargetContent = 0;
@@ -106,16 +112,18 @@ void setKey(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType,
                                return;
                        }
                        down(&priv->rtllib->ips_sem);
-                       IPSLeave(dev);
+                       rtl92e_ips_leave(dev);
                        up(&priv->rtllib->ips_sem);
                }
        }
        priv->rtllib->is_set_key = true;
-       if (EntryNo >= TOTAL_CAM_ENTRY)
+       if (EntryNo >= TOTAL_CAM_ENTRY) {
                netdev_info(dev, "%s(): Invalid CAM entry\n", __func__);
+               return;
+       }
 
        RT_TRACE(COMP_SEC,
-                "====>to setKey(), dev:%p, EntryNo:%d, KeyIndex:%d,KeyType:%d, MacAddr %pM\n",
+                "====>to rtl92e_set_key(), dev:%p, EntryNo:%d, KeyIndex:%d,KeyType:%d, MacAddr %pM\n",
                 dev, EntryNo, KeyIndex, KeyType, MacAddr);
 
        if (DefaultKey)
@@ -133,20 +141,20 @@ void setKey(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType,
                                (u32)(*(MacAddr+1)) << 24 |
                                (u32)usConfig;
 
-                       write_nic_dword(dev, WCAMI, TargetContent);
-                       write_nic_dword(dev, RWCAM, TargetCommand);
+                       rtl92e_writel(dev, WCAMI, TargetContent);
+                       rtl92e_writel(dev, RWCAM, TargetCommand);
                } else if (i == 1) {
                        TargetContent = (u32)(*(MacAddr+2)) |
                                (u32)(*(MacAddr+3)) <<  8 |
                                (u32)(*(MacAddr+4)) << 16 |
                                (u32)(*(MacAddr+5)) << 24;
-                       write_nic_dword(dev, WCAMI, TargetContent);
-                       write_nic_dword(dev, RWCAM, TargetCommand);
+                       rtl92e_writel(dev, WCAMI, TargetContent);
+                       rtl92e_writel(dev, RWCAM, TargetCommand);
                } else {
                        if (KeyContent != NULL) {
-                               write_nic_dword(dev, WCAMI,
-                                               (u32)(*(KeyContent+i-2)));
-                               write_nic_dword(dev, RWCAM, TargetCommand);
+                               rtl92e_writel(dev, WCAMI,
+                                             (u32)(*(KeyContent+i-2)));
+                               rtl92e_writel(dev, RWCAM, TargetCommand);
                                udelay(100);
                        }
                }
@@ -154,7 +162,7 @@ void setKey(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType,
        RT_TRACE(COMP_SEC, "=========>after set key, usconfig:%x\n", usConfig);
 }
 
-void CamRestoreAllEntry(struct net_device *dev)
+void rtl92e_cam_restore(struct net_device *dev)
 {
        u8 EntryId = 0;
        struct r8192_priv *priv = rtllib_priv(dev);
@@ -170,7 +178,7 @@ void CamRestoreAllEntry(struct net_device *dev)
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff
        };
 
-       RT_TRACE(COMP_SEC, "CamRestoreAllEntry:\n");
+       RT_TRACE(COMP_SEC, "rtl92e_cam_restore:\n");
 
 
        if ((priv->rtllib->pairwise_key_type == KEY_TYPE_WEP40) ||
@@ -179,36 +187,41 @@ void CamRestoreAllEntry(struct net_device *dev)
                for (EntryId = 0; EntryId < 4; EntryId++) {
                        MacAddr = CAM_CONST_ADDR[EntryId];
                        if (priv->rtllib->swcamtable[EntryId].bused) {
-                               setKey(dev, EntryId, EntryId,
-                                      priv->rtllib->pairwise_key_type, MacAddr,
-                                      0, (u32 *)(&priv->rtllib->swcamtable
-                                     [EntryId].key_buf[0]));
+                               rtl92e_set_key(dev, EntryId, EntryId,
+                                              priv->rtllib->pairwise_key_type,
+                                              MacAddr, 0,
+                                              (u32 *)(&priv->rtllib->swcamtable
+                                                      [EntryId].key_buf[0]));
                        }
                }
 
        } else if (priv->rtllib->pairwise_key_type == KEY_TYPE_TKIP) {
                if (priv->rtllib->iw_mode == IW_MODE_ADHOC) {
-                       setKey(dev, 4, 0, priv->rtllib->pairwise_key_type,
-                              (u8 *)dev->dev_addr, 0,
-                              (u32 *)(&priv->rtllib->swcamtable[4].key_buf[0]));
+                       rtl92e_set_key(dev, 4, 0,
+                                      priv->rtllib->pairwise_key_type,
+                                      (u8 *)dev->dev_addr, 0,
+                                      (u32 *)(&priv->rtllib->swcamtable[4].
+                                      key_buf[0]));
                } else {
-                       setKey(dev, 4, 0, priv->rtllib->pairwise_key_type,
-                              MacAddr, 0,
-                              (u32 *)(&priv->rtllib->swcamtable[4].key_buf[0]));
+                       rtl92e_set_key(dev, 4, 0,
+                                      priv->rtllib->pairwise_key_type,
+                                      MacAddr, 0,
+                                      (u32 *)(&priv->rtllib->swcamtable[4].
+                                      key_buf[0]));
                }
 
        } else if (priv->rtllib->pairwise_key_type == KEY_TYPE_CCMP) {
                if (priv->rtllib->iw_mode == IW_MODE_ADHOC) {
-                       setKey(dev, 4, 0,
-                              priv->rtllib->pairwise_key_type,
-                              (u8 *)dev->dev_addr, 0,
-                              (u32 *)(&priv->rtllib->swcamtable[4].
-                              key_buf[0]));
+                       rtl92e_set_key(dev, 4, 0,
+                                      priv->rtllib->pairwise_key_type,
+                                      (u8 *)dev->dev_addr, 0,
+                                      (u32 *)(&priv->rtllib->swcamtable[4].
+                                      key_buf[0]));
                } else {
-                       setKey(dev, 4, 0,
-                              priv->rtllib->pairwise_key_type, MacAddr,
-                              0, (u32 *)(&priv->rtllib->swcamtable[4].
-                              key_buf[0]));
+                       rtl92e_set_key(dev, 4, 0,
+                                      priv->rtllib->pairwise_key_type, MacAddr,
+                                      0, (u32 *)(&priv->rtllib->swcamtable[4].
+                                      key_buf[0]));
                        }
        }
 
@@ -216,20 +229,18 @@ void CamRestoreAllEntry(struct net_device *dev)
                MacAddr = CAM_CONST_BROAD;
                for (EntryId = 1; EntryId < 4; EntryId++) {
                        if (priv->rtllib->swcamtable[EntryId].bused) {
-                               setKey(dev, EntryId, EntryId,
-                                       priv->rtllib->group_key_type,
-                                       MacAddr, 0,
-                                       (u32 *)(&priv->rtllib->swcamtable[EntryId].key_buf[0])
-                                    );
+                               rtl92e_set_key(dev, EntryId, EntryId,
+                                              priv->rtllib->group_key_type,
+                                              MacAddr, 0,
+                                              (u32 *)(&priv->rtllib->swcamtable[EntryId].key_buf[0]));
                        }
                }
                if (priv->rtllib->iw_mode == IW_MODE_ADHOC) {
                        if (priv->rtllib->swcamtable[0].bused) {
-                               setKey(dev, 0, 0,
-                                      priv->rtllib->group_key_type,
-                                      CAM_CONST_ADDR[0], 0,
-                                      (u32 *)(&priv->rtllib->swcamtable[0].key_buf[0])
-                                    );
+                               rtl92e_set_key(dev, 0, 0,
+                                              priv->rtllib->group_key_type,
+                                              CAM_CONST_ADDR[0], 0,
+                                              (u32 *)(&priv->rtllib->swcamtable[0].key_buf[0]));
                        } else {
                                netdev_warn(dev,
                                            "%s(): ADHOC TKIP: missing key entry.\n",
@@ -241,19 +252,19 @@ void CamRestoreAllEntry(struct net_device *dev)
                MacAddr = CAM_CONST_BROAD;
                for (EntryId = 1; EntryId < 4; EntryId++) {
                        if (priv->rtllib->swcamtable[EntryId].bused) {
-                               setKey(dev, EntryId, EntryId,
-                                      priv->rtllib->group_key_type,
-                                      MacAddr, 0,
-                                      (u32 *)(&priv->rtllib->swcamtable[EntryId].key_buf[0]));
+                               rtl92e_set_key(dev, EntryId, EntryId,
+                                              priv->rtllib->group_key_type,
+                                              MacAddr, 0,
+                                              (u32 *)(&priv->rtllib->swcamtable[EntryId].key_buf[0]));
                        }
                }
 
                if (priv->rtllib->iw_mode == IW_MODE_ADHOC) {
                        if (priv->rtllib->swcamtable[0].bused) {
-                               setKey(dev, 0, 0,
-                                       priv->rtllib->group_key_type,
-                                       CAM_CONST_ADDR[0], 0,
-                                       (u32 *)(&priv->rtllib->swcamtable[0].key_buf[0]));
+                               rtl92e_set_key(dev, 0, 0,
+                                              priv->rtllib->group_key_type,
+                                              CAM_CONST_ADDR[0], 0,
+                                              (u32 *)(&priv->rtllib->swcamtable[0].key_buf[0]));
                        } else {
                                netdev_warn(dev,
                                            "%s(): ADHOC CCMP: missing key entry.\n",
index f23ab46c77e7f7fb962d0d0e821a20888efa8ac8..9ef8b36fc6b51bfb965ada3322fb3bbdaacb1f61 100644 (file)
 #include <linux/types.h>
 struct net_device;
 
-void CamResetAllEntry(struct net_device *dev);
-void EnableHWSecurityConfig8192(struct net_device *dev);
-void setKey(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType,
-           const u8 *MacAddr, u8 DefaultKey, u32 *KeyContent);
-void set_swcam(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType,
-              const u8 *MacAddr, u8 DefaultKey, u32 *KeyContent, u8 is_mesh);
-void CamRestoreAllEntry(struct net_device *dev);
+void rtl92e_cam_reset(struct net_device *dev);
+void rtl92e_enable_hw_security_config(struct net_device *dev);
+void rtl92e_set_key(struct net_device *dev, u8 EntryNo, u8 KeyIndex,
+                   u16 KeyType, const u8 *MacAddr, u8 DefaultKey,
+                   u32 *KeyContent);
+void rtl92e_set_swcam(struct net_device *dev, u8 EntryNo, u8 KeyIndex,
+                     u16 KeyType, const u8 *MacAddr, u8 DefaultKey,
+                     u32 *KeyContent, u8 is_mesh);
+void rtl92e_cam_restore(struct net_device *dev);
 
 #endif
index c6cdb43b864c1996813c5d83b0042416335f71f7..c868cb373a4b8a6f58f01e02a4909e5d059c22fb 100644 (file)
  * Contact Information:
  * wlanfae <wlanfae@realtek.com>
 ******************************************************************************/
-#undef RX_DONT_PASS_UL
-#undef DEBUG_EPROM
-#undef DEBUG_RX_VERBOSE
-#undef DUMMY_RX
-#undef DEBUG_ZERO_RX
-#undef DEBUG_RX_SKB
-#undef DEBUG_TX_FRAG
-#undef DEBUG_RX_FRAG
-#undef DEBUG_TX_FILLDESC
-#undef DEBUG_TX
-#undef DEBUG_IRQ
-#undef DEBUG_RX
-#undef DEBUG_RXALLOC
-#undef DEBUG_REGISTERS
-#undef DEBUG_RING
-#undef DEBUG_IRQ_TASKLET
-#undef DEBUG_TX_ALLOC
-#undef DEBUG_TX_DESC
-
 #include <linux/uaccess.h>
 #include <linux/pci.h>
 #include <linux/vmalloc.h>
@@ -63,24 +44,24 @@ static char *ifname = "wlan%d";
 
 static struct rtl819x_ops rtl819xp_ops = {
        .nic_type                       = NIC_8192E,
-       .get_eeprom_size                = rtl8192_get_eeprom_size,
-       .init_adapter_variable          = rtl8192_InitializeVariables,
-       .initialize_adapter             = rtl8192_adapter_start,
-       .link_change                    = rtl8192_link_change,
-       .tx_fill_descriptor             = rtl8192_tx_fill_desc,
-       .tx_fill_cmd_descriptor         = rtl8192_tx_fill_cmd_desc,
-       .rx_query_status_descriptor     = rtl8192_rx_query_status_desc,
+       .get_eeprom_size                = rtl92e_get_eeprom_size,
+       .init_adapter_variable          = rtl92e_init_variables,
+       .initialize_adapter             = rtl92e_start_adapter,
+       .link_change                    = rtl92e_link_change,
+       .tx_fill_descriptor             = rtl92e_fill_tx_desc,
+       .tx_fill_cmd_descriptor         = rtl92e_fill_tx_cmd_desc,
+       .rx_query_status_descriptor     = rtl92e_get_rx_stats,
        .rx_command_packet_handler = NULL,
-       .stop_adapter                   = rtl8192_halt_adapter,
-       .update_ratr_table              = rtl8192_update_ratr_table,
-       .irq_enable                     = rtl8192_EnableInterrupt,
-       .irq_disable                    = rtl8192_DisableInterrupt,
-       .irq_clear                      = rtl8192_ClearInterrupt,
-       .rx_enable                      = rtl8192_enable_rx,
-       .tx_enable                      = rtl8192_enable_tx,
-       .interrupt_recognized           = rtl8192_interrupt_recognized,
-       .TxCheckStuckHandler            = rtl8192_HalTxCheckStuck,
-       .RxCheckStuckHandler            = rtl8192_HalRxCheckStuck,
+       .stop_adapter                   = rtl92e_stop_adapter,
+       .update_ratr_table              = rtl92e_update_ratr_table,
+       .irq_enable                     = rtl92e_enable_irq,
+       .irq_disable                    = rtl92e_disable_irq,
+       .irq_clear                      = rtl92e_clear_irq,
+       .rx_enable                      = rtl92e_enable_rx,
+       .tx_enable                      = rtl92e_enable_tx,
+       .interrupt_recognized           = rtl92e_ack_irq,
+       .TxCheckStuckHandler            = rtl92e_is_tx_stuck,
+       .RxCheckStuckHandler            = rtl92e_is_rx_stuck,
 };
 
 static struct pci_device_id rtl8192_pci_id_tbl[] = {
@@ -102,202 +83,61 @@ static struct pci_driver rtl8192_pci_driver = {
        .id_table = rtl8192_pci_id_tbl, /* PCI_ID table  */
        .probe  = rtl8192_pci_probe,    /* probe fn      */
        .remove  = rtl8192_pci_disconnect,      /* remove fn */
-       .suspend = rtl8192E_suspend,    /* PM suspend fn */
-       .resume = rtl8192E_resume,                 /* PM resume fn  */
+       .suspend = rtl92e_suspend,      /* PM suspend fn */
+       .resume = rtl92e_resume,                 /* PM resume fn  */
 };
 
+static short rtl8192_is_tx_queue_empty(struct net_device *dev);
+static void rtl819x_watchdog_wqcallback(void *data);
+static void watch_dog_timer_callback(unsigned long data);
+static void rtl8192_hard_data_xmit(struct sk_buff *skb, struct net_device *dev,
+                                  int rate);
+static int rtl8192_hard_start_xmit(struct sk_buff *skb, struct net_device *dev);
+static void rtl8192_tx_cmd(struct net_device *dev, struct sk_buff *skb);
+static short rtl8192_tx(struct net_device *dev, struct sk_buff *skb);
+static short rtl8192_pci_initdescring(struct net_device *dev);
+static void rtl8192_irq_tx_tasklet(struct r8192_priv *priv);
+static void rtl8192_irq_rx_tasklet(struct r8192_priv *priv);
+static void rtl8192_cancel_deferred_work(struct r8192_priv *priv);
+static int _rtl8192_up(struct net_device *dev, bool is_silent_reset);
+static int rtl8192_up(struct net_device *dev);
+static int rtl8192_down(struct net_device *dev, bool shutdownrf);
+static void rtl8192_restart(void *data);
+
 /****************************************************************************
    -----------------------------IO STUFF-------------------------
 *****************************************************************************/
-static bool PlatformIOCheckPageLegalAndGetRegMask(u32 u4bPage, u8 *pu1bPageMask)
-{
-       bool            bReturn = false;
-
-       *pu1bPageMask = 0xfe;
-
-       switch (u4bPage) {
-       case 1: case 2: case 3: case 4:
-       case 8: case 9: case 10: case 12: case 13:
-               bReturn = true;
-               *pu1bPageMask = 0xf0;
-               break;
-
-       default:
-               bReturn = false;
-               break;
-       }
-
-       return bReturn;
-}
-
-void write_nic_io_byte(struct net_device *dev, int x, u8 y)
-{
-       u32 u4bPage = x >> 8;
-       u8 u1PageMask = 0;
-       bool    bIsLegalPage = false;
-
-       if (u4bPage == 0) {
-               outb(y&0xff, dev->base_addr + x);
-
-       } else {
-               bIsLegalPage = PlatformIOCheckPageLegalAndGetRegMask(u4bPage,
-                              &u1PageMask);
-               if (bIsLegalPage) {
-                       u8 u1bPsr = read_nic_io_byte(dev, PSR);
-
-                       write_nic_io_byte(dev, PSR, ((u1bPsr & u1PageMask) |
-                                         (u8)u4bPage));
-                       write_nic_io_byte(dev, (x & 0xff), y);
-                       write_nic_io_byte(dev, PSR, (u1bPsr & u1PageMask));
-               }
-       }
-}
-
-void write_nic_io_word(struct net_device *dev, int x, u16 y)
-{
-       u32 u4bPage = x >> 8;
-       u8 u1PageMask = 0;
-       bool    bIsLegalPage = false;
-
-       if (u4bPage == 0) {
-               outw(y, dev->base_addr + x);
-       } else {
-               bIsLegalPage = PlatformIOCheckPageLegalAndGetRegMask(u4bPage,
-                                                        &u1PageMask);
-               if (bIsLegalPage) {
-                       u8 u1bPsr = read_nic_io_byte(dev, PSR);
-
-                       write_nic_io_byte(dev, PSR, ((u1bPsr & u1PageMask) |
-                                         (u8)u4bPage));
-                       write_nic_io_word(dev, (x & 0xff), y);
-                       write_nic_io_byte(dev, PSR, (u1bPsr & u1PageMask));
-
-               }
-       }
-}
-
-void write_nic_io_dword(struct net_device *dev, int x, u32 y)
-{
-       u32 u4bPage = x >> 8;
-       u8 u1PageMask = 0;
-       bool    bIsLegalPage = false;
-
-       if (u4bPage == 0) {
-               outl(y, dev->base_addr + x);
-       } else {
-               bIsLegalPage = PlatformIOCheckPageLegalAndGetRegMask(u4bPage,
-                                                &u1PageMask);
-               if (bIsLegalPage) {
-                       u8 u1bPsr = read_nic_io_byte(dev, PSR);
-
-                       write_nic_io_byte(dev, PSR, ((u1bPsr & u1PageMask) |
-                                         (u8)u4bPage));
-                       write_nic_io_dword(dev, (x & 0xff), y);
-                       write_nic_io_byte(dev, PSR, (u1bPsr & u1PageMask));
-               }
-       }
-}
-
-u8 read_nic_io_byte(struct net_device *dev, int x)
-{
-       u32 u4bPage = x >> 8;
-       u8 u1PageMask = 0;
-       bool    bIsLegalPage = false;
-       u8      Data = 0;
-
-       if (u4bPage == 0)
-               return 0xff&inb(dev->base_addr + x);
-
-       bIsLegalPage = PlatformIOCheckPageLegalAndGetRegMask(u4bPage,
-                                                            &u1PageMask);
-       if (bIsLegalPage) {
-               u8 u1bPsr = read_nic_io_byte(dev, PSR);
-
-               write_nic_io_byte(dev, PSR, ((u1bPsr & u1PageMask) |
-                                 (u8)u4bPage));
-               Data = read_nic_io_byte(dev, (x & 0xff));
-               write_nic_io_byte(dev, PSR, (u1bPsr & u1PageMask));
-       }
-
-       return Data;
-}
-
-u16 read_nic_io_word(struct net_device *dev, int x)
-{
-       u32 u4bPage = x >> 8;
-       u8 u1PageMask = 0;
-       bool    bIsLegalPage = false;
-       u16     Data = 0;
-
-       if (u4bPage == 0)
-               return inw(dev->base_addr + x);
-       bIsLegalPage = PlatformIOCheckPageLegalAndGetRegMask(u4bPage,
-                                                            &u1PageMask);
-       if (bIsLegalPage) {
-               u8 u1bPsr = read_nic_io_byte(dev, PSR);
-
-               write_nic_io_byte(dev, PSR, ((u1bPsr & u1PageMask) |
-                                 (u8)u4bPage));
-               Data = read_nic_io_word(dev, (x & 0xff));
-               write_nic_io_byte(dev, PSR, (u1bPsr & u1PageMask));
-       }
-
-       return Data;
-}
 
-u32 read_nic_io_dword(struct net_device *dev, int x)
-{
-       u32 u4bPage = x >> 8;
-       u8 u1PageMask = 0;
-       bool    bIsLegalPage = false;
-       u32     Data = 0;
-
-       if (u4bPage == 0)
-               return inl(dev->base_addr + x);
-       bIsLegalPage = PlatformIOCheckPageLegalAndGetRegMask(u4bPage,
-                      &u1PageMask);
-       if (bIsLegalPage) {
-               u8 u1bPsr = read_nic_io_byte(dev, PSR);
-
-               write_nic_io_byte(dev, PSR, ((u1bPsr & u1PageMask) |
-                                 (u8)u4bPage));
-               Data = read_nic_io_dword(dev, (x & 0xff));
-               write_nic_io_byte(dev, PSR, (u1bPsr & u1PageMask));
-       }
-
-       return Data;
-}
-
-u8 read_nic_byte(struct net_device *dev, int x)
+u8 rtl92e_readb(struct net_device *dev, int x)
 {
        return 0xff & readb((u8 __iomem *)dev->mem_start + x);
 }
 
-u32 read_nic_dword(struct net_device *dev, int x)
+u32 rtl92e_readl(struct net_device *dev, int x)
 {
        return readl((u8 __iomem *)dev->mem_start + x);
 }
 
-u16 read_nic_word(struct net_device *dev, int x)
+u16 rtl92e_readw(struct net_device *dev, int x)
 {
        return readw((u8 __iomem *)dev->mem_start + x);
 }
 
-void write_nic_byte(struct net_device *dev, int x, u8 y)
+void rtl92e_writeb(struct net_device *dev, int x, u8 y)
 {
        writeb(y, (u8 __iomem *)dev->mem_start + x);
 
        udelay(20);
 }
 
-void write_nic_dword(struct net_device *dev, int x, u32 y)
+void rtl92e_writel(struct net_device *dev, int x, u32 y)
 {
        writel(y, (u8 __iomem *)dev->mem_start + x);
 
        udelay(20);
 }
 
-void write_nic_word(struct net_device *dev, int x, u16 y)
+void rtl92e_writew(struct net_device *dev, int x, u16 y)
 {
        writew(y, (u8 __iomem *)dev->mem_start + x);
 
@@ -307,10 +147,9 @@ void write_nic_word(struct net_device *dev, int x, u16 y)
 /****************************************************************************
    -----------------------------GENERAL FUNCTION-------------------------
 *****************************************************************************/
-bool MgntActSet_RF_State(struct net_device *dev,
+bool rtl92e_set_rf_state(struct net_device *dev,
                         enum rt_rf_power_state StateToSet,
-                        RT_RF_CHANGE_SOURCE ChangeSource,
-                        bool   ProtectOrNot)
+                        RT_RF_CHANGE_SOURCE ChangeSource)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rtllib_device *ieee = priv->rtllib;
@@ -321,39 +160,34 @@ bool MgntActSet_RF_State(struct net_device *dev,
        unsigned long flag;
 
        RT_TRACE((COMP_PS | COMP_RF),
-                "===>MgntActSet_RF_State(): StateToSet(%d)\n", StateToSet);
-
-       ProtectOrNot = false;
+                "===>rtl92e_set_rf_state(): StateToSet(%d)\n", StateToSet);
 
+       while (true) {
+               spin_lock_irqsave(&priv->rf_ps_lock, flag);
+               if (priv->RFChangeInProgress) {
+                       spin_unlock_irqrestore(&priv->rf_ps_lock, flag);
+                       RT_TRACE((COMP_PS | COMP_RF),
+                                "rtl92e_set_rf_state(): RF Change in progress! Wait to set..StateToSet(%d).\n",
+                                StateToSet);
 
-       if (!ProtectOrNot) {
-               while (true) {
-                       spin_lock_irqsave(&priv->rf_ps_lock, flag);
-                       if (priv->RFChangeInProgress) {
-                               spin_unlock_irqrestore(&priv->rf_ps_lock, flag);
+                       while (priv->RFChangeInProgress) {
+                               RFWaitCounter++;
                                RT_TRACE((COMP_PS | COMP_RF),
-                                        "MgntActSet_RF_State(): RF Change in progress! Wait to set..StateToSet(%d).\n",
-                                        StateToSet);
-
-                               while (priv->RFChangeInProgress) {
-                                       RFWaitCounter++;
-                                       RT_TRACE((COMP_PS | COMP_RF),
-                                                "MgntActSet_RF_State(): Wait 1 ms (%d times)...\n",
-                                                RFWaitCounter);
-                                       mdelay(1);
-
-                                       if (RFWaitCounter > 100) {
-                                               netdev_warn(dev,
-                                                           "%s(): Timeout waiting for RF change.\n",
-                                                           __func__);
-                                               return false;
-                                       }
+                                        "rtl92e_set_rf_state(): Wait 1 ms (%d times)...\n",
+                                        RFWaitCounter);
+                               mdelay(1);
+
+                               if (RFWaitCounter > 100) {
+                                       netdev_warn(dev,
+                                                   "%s(): Timeout waiting for RF change.\n",
+                                                   __func__);
+                                       return false;
                                }
-                       } else {
-                               priv->RFChangeInProgress = true;
-                               spin_unlock_irqrestore(&priv->rf_ps_lock, flag);
-                               break;
                        }
+               } else {
+                       priv->RFChangeInProgress = true;
+                       spin_unlock_irqrestore(&priv->rf_ps_lock, flag);
+                       break;
                }
        }
 
@@ -376,7 +210,7 @@ bool MgntActSet_RF_State(struct net_device *dev,
                                bConnectBySSID = true;
                } else {
                        RT_TRACE((COMP_PS | COMP_RF),
-                                "MgntActSet_RF_State - eRfon reject pMgntInfo->RfOffReason= 0x%x, ChangeSource=0x%X\n",
+                                "rtl92e_set_rf_state - eRfon reject pMgntInfo->RfOffReason= 0x%x, ChangeSource=0x%X\n",
                                  priv->rtllib->RfOffReason, ChangeSource);
        }
 
@@ -413,7 +247,7 @@ bool MgntActSet_RF_State(struct net_device *dev,
 
        if (bActionAllowed) {
                RT_TRACE((COMP_PS | COMP_RF),
-                        "MgntActSet_RF_State(): Action is allowed.... StateToSet(%d), RfOffReason(%#X)\n",
+                        "rtl92e_set_rf_state(): Action is allowed.... StateToSet(%d), RfOffReason(%#X)\n",
                         StateToSet, priv->rtllib->RfOffReason);
                PHY_SetRFPowerState(dev, StateToSet);
                if (StateToSet == eRfOn) {
@@ -426,17 +260,15 @@ bool MgntActSet_RF_State(struct net_device *dev,
                }
        } else {
                RT_TRACE((COMP_PS | COMP_RF),
-                        "MgntActSet_RF_State(): Action is rejected.... StateToSet(%d), ChangeSource(%#X), RfOffReason(%#X)\n",
+                        "rtl92e_set_rf_state(): Action is rejected.... StateToSet(%d), ChangeSource(%#X), RfOffReason(%#X)\n",
                         StateToSet, ChangeSource, priv->rtllib->RfOffReason);
        }
 
-       if (!ProtectOrNot) {
-               spin_lock_irqsave(&priv->rf_ps_lock, flag);
-               priv->RFChangeInProgress = false;
-               spin_unlock_irqrestore(&priv->rf_ps_lock, flag);
-       }
+       spin_lock_irqsave(&priv->rf_ps_lock, flag);
+       priv->RFChangeInProgress = false;
+       spin_unlock_irqrestore(&priv->rf_ps_lock, flag);
 
-       RT_TRACE((COMP_PS | COMP_RF), "<===MgntActSet_RF_State()\n");
+       RT_TRACE((COMP_PS | COMP_RF), "<===rtl92e_set_rf_state()\n");
        return bActionAllowed;
 }
 
@@ -450,7 +282,7 @@ static short rtl8192_check_nic_enough_desc(struct net_device *dev, int prio)
        return 0;
 }
 
-void rtl8192_tx_timeout(struct net_device *dev)
+static void rtl8192_tx_timeout(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
@@ -458,7 +290,7 @@ void rtl8192_tx_timeout(struct net_device *dev)
        netdev_info(dev, "TXTIMEOUT");
 }
 
-void rtl8192_irq_enable(struct net_device *dev)
+void rtl92e_irq_enable(struct net_device *dev)
 {
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
 
@@ -467,7 +299,7 @@ void rtl8192_irq_enable(struct net_device *dev)
        priv->ops->irq_enable(dev);
 }
 
-void rtl8192_irq_disable(struct net_device *dev)
+void rtl92e_irq_disable(struct net_device *dev)
 {
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
 
@@ -476,7 +308,7 @@ void rtl8192_irq_disable(struct net_device *dev)
        priv->irq_enabled = 0;
 }
 
-void rtl8192_set_chan(struct net_device *dev, short ch)
+static void rtl8192_set_chan(struct net_device *dev, short ch)
 {
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
 
@@ -490,7 +322,7 @@ void rtl8192_set_chan(struct net_device *dev, short ch)
                priv->rf_set_chan(dev, priv->chan);
 }
 
-void rtl8192_update_cap(struct net_device *dev, u16 cap)
+static void rtl8192_update_cap(struct net_device *dev, u16 cap)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rtllib_network *net = &priv->rtllib->current_network;
@@ -683,7 +515,7 @@ static int rtl8192_qos_association_resp(struct r8192_priv *priv,
        RT_TRACE(COMP_QOS, "%s: network->flags = %d,%d\n", __func__,
                 network->flags, priv->rtllib->current_network.qos_data.active);
        if (set_qos_param == 1) {
-               dm_init_edca_turbo(priv->rtllib->dev);
+               rtl92e_dm_init_edca_turbo(priv->rtllib->dev);
                queue_work_rsl(priv->priv_wq, &priv->qos_activate);
        }
        return 0;
@@ -733,7 +565,7 @@ static void rtl8192_stop_beacon(struct net_device *dev)
 {
 }
 
-void rtl8192_config_rate(struct net_device *dev, u16 *rate_config)
+void rtl92e_config_rate(struct net_device *dev, u16 *rate_config)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rtllib_network *net;
@@ -864,7 +696,7 @@ static u8 rtl8192_getSupportedWireleeMode(struct net_device *dev)
        return ret;
 }
 
-void rtl8192_SetWirelessMode(struct net_device *dev, u8 wireless_mode)
+void rtl92e_set_wireless_mode(struct net_device *dev, u8 wireless_mode)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        u8 bSupportMode = rtl8192_getSupportedWireleeMode(dev);
@@ -895,9 +727,6 @@ void rtl8192_SetWirelessMode(struct net_device *dev, u8 wireless_mode)
 
        priv->rtllib->mode = wireless_mode;
 
-       ActUpdateChannelAccessSetting(dev, wireless_mode,
-                                     &priv->ChannelAccessSetting);
-
        if ((wireless_mode == WIRELESS_MODE_N_24G) ||
            (wireless_mode == WIRELESS_MODE_N_5G)) {
                priv->rtllib->pHTInfo->bEnableHT = 1;
@@ -941,7 +770,7 @@ static int _rtl8192_sta_up(struct net_device *dev, bool is_silent_reset)
        priv->bfirst_init = false;
 
        if (priv->polling_timer_on == 0)
-               check_rfctrl_gpio_timer((unsigned long)dev);
+               rtl92e_check_rfctrl_gpio_timer((unsigned long)dev);
 
        if (priv->rtllib->state != RTLLIB_LINKED)
                rtllib_softmac_start_protocol(priv->rtllib, 0);
@@ -969,7 +798,7 @@ static int rtl8192_sta_down(struct net_device *dev, bool shutdownrf)
                priv->rtllib->rtllib_ips_leave(dev);
 
        if (priv->rtllib->state == RTLLIB_LINKED)
-               LeisurePSLeave(dev);
+               rtl92e_leisure_ps_leave(dev);
 
        priv->bDriverIsGoingToUnload = true;
        priv->up = 0;
@@ -982,9 +811,9 @@ static int rtl8192_sta_down(struct net_device *dev, bool shutdownrf)
        priv->rtllib->wpa_ie_len = 0;
        kfree(priv->rtllib->wpa_ie);
        priv->rtllib->wpa_ie = NULL;
-       CamResetAllEntry(dev);
+       rtl92e_cam_reset(dev);
        memset(priv->rtllib->swcamtable, 0, sizeof(struct sw_cam_table) * 32);
-       rtl8192_irq_disable(dev);
+       rtl92e_irq_disable(dev);
 
        del_timer_sync(&priv->watch_dog_timer);
        rtl8192_cancel_deferred_work(priv);
@@ -1027,38 +856,36 @@ static void rtl8192_init_priv_handler(struct net_device *dev)
        priv->rtllib->set_chan                  = rtl8192_set_chan;
        priv->rtllib->link_change               = priv->ops->link_change;
        priv->rtllib->softmac_data_hard_start_xmit = rtl8192_hard_data_xmit;
-       priv->rtllib->data_hard_stop            = rtl8192_data_hard_stop;
-       priv->rtllib->data_hard_resume          = rtl8192_data_hard_resume;
        priv->rtllib->check_nic_enough_desc     = rtl8192_check_nic_enough_desc;
        priv->rtllib->handle_assoc_response     = rtl8192_handle_assoc_response;
        priv->rtllib->handle_beacon             = rtl8192_handle_beacon;
-       priv->rtllib->SetWirelessMode           = rtl8192_SetWirelessMode;
-       priv->rtllib->LeisurePSLeave            = LeisurePSLeave;
-       priv->rtllib->SetBWModeHandler          = rtl8192_SetBWMode;
-       priv->rf_set_chan                       = rtl8192_phy_SwChnl;
+       priv->rtllib->SetWirelessMode           = rtl92e_set_wireless_mode;
+       priv->rtllib->LeisurePSLeave            = rtl92e_leisure_ps_leave;
+       priv->rtllib->SetBWModeHandler          = rtl92e_set_bw_mode;
+       priv->rf_set_chan                       = rtl92e_set_channel;
 
-       priv->rtllib->start_send_beacons = rtl8192e_start_beacon;
+       priv->rtllib->start_send_beacons = rtl92e_start_beacon;
        priv->rtllib->stop_send_beacons = rtl8192_stop_beacon;
 
-       priv->rtllib->sta_wake_up = rtl8192_hw_wakeup;
-       priv->rtllib->enter_sleep_state = rtl8192_hw_to_sleep;
+       priv->rtllib->sta_wake_up = rtl92e_hw_wakeup;
+       priv->rtllib->enter_sleep_state = rtl92e_enter_sleep;
        priv->rtllib->ps_is_queue_empty = rtl8192_is_tx_queue_empty;
 
-       priv->rtllib->GetNmodeSupportBySecCfg = rtl8192_GetNmodeSupportBySecCfg;
+       priv->rtllib->GetNmodeSupportBySecCfg = rtl92e_get_nmode_support_by_sec;
        priv->rtllib->GetHalfNmodeSupportByAPsHandler =
-                                        rtl8192_GetHalfNmodeSupportByAPs;
+                                               rtl92e_is_halfn_supported_by_ap;
 
-       priv->rtllib->SetHwRegHandler = rtl8192e_SetHwReg;
-       priv->rtllib->AllowAllDestAddrHandler = rtl8192_AllowAllDestAddr;
+       priv->rtllib->SetHwRegHandler = rtl92e_set_reg;
+       priv->rtllib->AllowAllDestAddrHandler = rtl92e_set_monitor_mode;
        priv->rtllib->SetFwCmdHandler = NULL;
-       priv->rtllib->InitialGainHandler = InitialGain819xPci;
-       priv->rtllib->rtllib_ips_leave_wq = rtllib_ips_leave_wq;
-       priv->rtllib->rtllib_ips_leave = rtllib_ips_leave;
+       priv->rtllib->InitialGainHandler = rtl92e_init_gain;
+       priv->rtllib->rtllib_ips_leave_wq = rtl92e_rtllib_ips_leave_wq;
+       priv->rtllib->rtllib_ips_leave = rtl92e_rtllib_ips_leave;
 
        priv->rtllib->LedControlHandler = NULL;
        priv->rtllib->UpdateBeaconInterruptHandler = NULL;
 
-       priv->rtllib->ScanOperationBackupHandler = PHY_ScanOperationBackup8192;
+       priv->rtllib->ScanOperationBackupHandler = rtl92e_scan_op_backup;
 }
 
 static void rtl8192_init_priv_constant(struct net_device *dev)
@@ -1181,20 +1008,21 @@ static void rtl8192_init_priv_task(struct net_device *dev)
 
        priv->priv_wq = create_workqueue(DRV_NAME);
        INIT_WORK_RSL(&priv->reset_wq, (void *)rtl8192_restart, dev);
-       INIT_WORK_RSL(&priv->rtllib->ips_leave_wq, (void *)IPSLeave_wq, dev);
+       INIT_WORK_RSL(&priv->rtllib->ips_leave_wq, (void *)rtl92e_ips_leave_wq,
+                     dev);
        INIT_DELAYED_WORK_RSL(&priv->watch_dog_wq,
                              (void *)rtl819x_watchdog_wqcallback, dev);
        INIT_DELAYED_WORK_RSL(&priv->txpower_tracking_wq,
-                             (void *)dm_txpower_trackingcallback, dev);
+                             (void *)rtl92e_dm_txpower_tracking_wq, dev);
        INIT_DELAYED_WORK_RSL(&priv->rfpath_check_wq,
-                             (void *)dm_rf_pathcheck_workitemcallback, dev);
+                             (void *)rtl92e_dm_rf_pathcheck_wq, dev);
        INIT_DELAYED_WORK_RSL(&priv->update_beacon_wq,
                              (void *)rtl8192_update_beacon, dev);
        INIT_WORK_RSL(&priv->qos_activate, (void *)rtl8192_qos_activate, dev);
        INIT_DELAYED_WORK_RSL(&priv->rtllib->hw_wakeup_wq,
-                             (void *) rtl8192_hw_wakeup_wq, dev);
+                             (void *) rtl92e_hw_wakeup_wq, dev);
        INIT_DELAYED_WORK_RSL(&priv->rtllib->hw_sleep_wq,
-                             (void *) rtl8192_hw_sleep_wq, dev);
+                             (void *) rtl92e_hw_sleep_wq, dev);
        tasklet_init(&priv->irq_rx_tasklet,
                     (void(*)(unsigned long))rtl8192_irq_rx_tasklet,
                     (unsigned long)priv);
@@ -1250,17 +1078,17 @@ static short rtl8192_init(struct net_device *dev)
        priv->ops->init_adapter_variable(dev);
        rtl8192_get_channel_map(dev);
 
-       init_hal_dm(dev);
+       rtl92e_dm_init(dev);
 
        setup_timer(&priv->watch_dog_timer,
                    watch_dog_timer_callback,
                    (unsigned long) dev);
 
        setup_timer(&priv->gpio_polling_timer,
-                   check_rfctrl_gpio_timer,
+                   rtl92e_check_rfctrl_gpio_timer,
                    (unsigned long)dev);
 
-       rtl8192_irq_disable(dev);
+       rtl92e_irq_disable(dev);
        if (request_irq(dev->irq, rtl8192_interrupt, IRQF_SHARED,
            dev->name, dev)) {
                netdev_err(dev, "Error allocating IRQ %d", dev->irq);
@@ -1282,7 +1110,7 @@ static short rtl8192_init(struct net_device *dev)
 /***************************************************************************
        -------------------------------WATCHDOG STUFF---------------------------
 ***************************************************************************/
-short rtl8192_is_tx_queue_empty(struct net_device *dev)
+static short rtl8192_is_tx_queue_empty(struct net_device *dev)
 {
        int i = 0;
        struct r8192_priv *priv = rtllib_priv(dev);
@@ -1439,7 +1267,7 @@ RESET_START:
                down(&priv->wx_sem);
 
                if (priv->rtllib->state == RTLLIB_LINKED)
-                       LeisurePSLeave(dev);
+                       rtl92e_leisure_ps_leave(dev);
 
                if (priv->up) {
                        netdev_info(dev, "%s():the driver is not up.\n",
@@ -1459,10 +1287,10 @@ RESET_START:
                if (!netif_queue_stopped(dev))
                        netif_stop_queue(dev);
 
-               rtl8192_irq_disable(dev);
+               rtl92e_irq_disable(dev);
                del_timer_sync(&priv->watch_dog_timer);
                rtl8192_cancel_deferred_work(priv);
-               deinit_hal_dm(dev);
+               rtl92e_dm_deinit(dev);
                rtllib_stop_scan_syncro(ieee);
 
                if (ieee->state == RTLLIB_LINKED) {
@@ -1479,7 +1307,7 @@ RESET_START:
                        rtllib_softmac_stop_protocol(priv->rtllib, 0, true);
                }
 
-               dm_backup_dynamic_mechanism_state(dev);
+               rtl92e_dm_backup_state(dev);
 
                up(&priv->wx_sem);
                RT_TRACE(COMP_RESET,
@@ -1508,7 +1336,7 @@ RESET_START:
                priv->RFChangeInProgress = false;
                spin_unlock_irqrestore(&priv->rf_ps_lock, flag);
 
-               EnableHWSecurityConfig8192(dev);
+               rtl92e_enable_hw_security_config(dev);
 
                if (ieee->state == RTLLIB_LINKED && ieee->iw_mode ==
                    IW_MODE_INFRA) {
@@ -1527,15 +1355,13 @@ RESET_START:
 
                        rtllib_start_send_beacons(ieee);
 
-                       if (ieee->data_hard_resume)
-                               ieee->data_hard_resume(ieee->dev);
                        netif_carrier_on(ieee->dev);
                } else if (ieee->iw_mode == IW_MODE_MESH) {
                        rtl819x_silentreset_mesh_bk(dev, IsPortal);
                }
 
-               CamRestoreAllEntry(dev);
-               dm_restore_dynamic_mechanism_state(dev);
+               rtl92e_cam_restore(dev);
+               rtl92e_dm_restore_state(dev);
 END:
                priv->ResetProgress = RESET_TYPE_NORESET;
                priv->reset_count++;
@@ -1543,7 +1369,7 @@ END:
                priv->bForcedSilentReset = false;
                priv->bResetInProgress = false;
 
-               write_nic_byte(dev, UFWP, 1);
+               rtl92e_writeb(dev, UFWP, 1);
                RT_TRACE(COMP_RESET, "Reset finished!! ====>[%d]\n",
                         priv->reset_count);
        }
@@ -1570,8 +1396,7 @@ static void rtl819x_update_rxcounts(struct r8192_priv *priv, u32 *TotalRxBcnNum,
        }
 }
 
-
-void   rtl819x_watchdog_wqcallback(void *data)
+static void rtl819x_watchdog_wqcallback(void *data)
 {
        struct r8192_priv *priv = container_of_dwork_rsl(data,
                                  struct r8192_priv, watch_dog_wq);
@@ -1597,7 +1422,7 @@ void      rtl819x_watchdog_wqcallback(void *data)
                priv->rtllib->CntAfterLink = 0;
        }
 
-       hal_dm_watchdog(dev);
+       rtl92e_dm_watchdog(dev);
 
        if (rtllib_act_scanning(priv->rtllib, false) == false) {
                if ((ieee->iw_mode == IW_MODE_INFRA) && (ieee->state ==
@@ -1608,8 +1433,8 @@ void      rtl819x_watchdog_wqcallback(void *data)
                             IPS_CALLBACK_NONE) &&
                             (!ieee->bNetPromiscuousMode)) {
                                RT_TRACE(COMP_PS,
-                                        "====================>haha: IPSEnter()\n");
-                               IPSEnter(dev);
+                                        "====================>haha: rtl92e_ips_enter()\n");
+                               rtl92e_ips_enter(dev);
                        }
                }
        }
@@ -1640,13 +1465,13 @@ void    rtl819x_watchdog_wqcallback(void *data)
                        bEnterPS = false;
 
                if (bEnterPS)
-                       LeisurePSEnter(dev);
+                       rtl92e_leisure_ps_enter(dev);
                else
-                       LeisurePSLeave(dev);
+                       rtl92e_leisure_ps_leave(dev);
 
        } else {
                RT_TRACE(COMP_LPS, "====>no link LPS leave\n");
-               LeisurePSLeave(dev);
+               rtl92e_leisure_ps_leave(dev);
        }
 
        ieee->LinkDetectInfo.NumRxOkInPeriod = 0;
@@ -1725,7 +1550,7 @@ void      rtl819x_watchdog_wqcallback(void *data)
        RT_TRACE(COMP_TRACE, " <==RtUsbCheckForHangWorkItemCallback()\n");
 }
 
-void watch_dog_timer_callback(unsigned long data)
+static void watch_dog_timer_callback(unsigned long data)
 {
        struct r8192_priv *priv = rtllib_priv((struct net_device *)data);
 
@@ -1737,14 +1562,14 @@ void watch_dog_timer_callback(unsigned long data)
 /****************************************************************************
  ---------------------------- NIC TX/RX STUFF---------------------------
 *****************************************************************************/
-void rtl8192_rx_enable(struct net_device *dev)
+void rtl92e_rx_enable(struct net_device *dev)
 {
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
 
        priv->ops->rx_enable(dev);
 }
 
-void rtl8192_tx_enable(struct net_device *dev)
+void rtl92e_tx_enable(struct net_device *dev)
 {
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
 
@@ -1802,16 +1627,7 @@ static void rtl8192_free_tx_ring(struct net_device *dev, unsigned int prio)
        ring->desc = NULL;
 }
 
-void rtl8192_data_hard_stop(struct net_device *dev)
-{
-}
-
-
-void rtl8192_data_hard_resume(struct net_device *dev)
-{
-}
-
-void rtl8192_hard_data_xmit(struct sk_buff *skb, struct net_device *dev,
+static void rtl8192_hard_data_xmit(struct sk_buff *skb, struct net_device *dev,
                            int rate)
 {
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
@@ -1843,7 +1659,7 @@ void rtl8192_hard_data_xmit(struct sk_buff *skb, struct net_device *dev,
        }
 }
 
-int rtl8192_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static int rtl8192_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
        int ret;
@@ -1902,7 +1718,7 @@ static void rtl8192_tx_isr(struct net_device *dev, int prio)
                tasklet_schedule(&priv->irq_tx_tasklet);
 }
 
-void rtl8192_tx_cmd(struct net_device *dev, struct sk_buff *skb)
+static void rtl8192_tx_cmd(struct net_device *dev, struct sk_buff *skb)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rtl8192_tx_ring *ring;
@@ -1925,7 +1741,7 @@ void rtl8192_tx_cmd(struct net_device *dev, struct sk_buff *skb)
        spin_unlock_irqrestore(&priv->irq_th_lock, flags);
 }
 
-short rtl8192_tx(struct net_device *dev, struct sk_buff *skb)
+static short rtl8192_tx(struct net_device *dev, struct sk_buff *skb)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rtl8192_tx_ring  *ring;
@@ -1997,7 +1813,7 @@ short rtl8192_tx(struct net_device *dev, struct sk_buff *skb)
        spin_unlock_irqrestore(&priv->irq_th_lock, flags);
        dev->trans_start = jiffies;
 
-       write_nic_word(dev, TPPoll, 0x01 << tcb_desc->queue_index);
+       rtl92e_writew(dev, TPPoll, 0x01 << tcb_desc->queue_index);
        return 0;
 }
 
@@ -2077,8 +1893,7 @@ static int rtl8192_alloc_tx_desc_ring(struct net_device *dev,
        return 0;
 }
 
-
-short rtl8192_pci_initdescring(struct net_device *dev)
+static short rtl8192_pci_initdescring(struct net_device *dev)
 {
        u32 ret;
        int i;
@@ -2104,7 +1919,7 @@ err_free_rings:
        return 1;
 }
 
-void rtl8192_pci_resetdescring(struct net_device *dev)
+void rtl92e_reset_desc_ring(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        int i, rx_queue_idx;
@@ -2144,8 +1959,8 @@ void rtl8192_pci_resetdescring(struct net_device *dev)
        spin_unlock_irqrestore(&priv->irq_th_lock, flags);
 }
 
-void rtl819x_UpdateRxPktTimeStamp(struct net_device *dev,
-                                 struct rtllib_rx_stats *stats)
+void rtl92e_update_rx_pkt_timestamp(struct net_device *dev,
+                                   struct rtllib_rx_stats *stats)
 {
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
 
@@ -2155,7 +1970,7 @@ void rtl819x_UpdateRxPktTimeStamp(struct net_device *dev,
                priv->LastRxDescTSF = stats->mac_time;
 }
 
-long rtl819x_translate_todbm(struct r8192_priv *priv, u8 signal_strength_index)
+long rtl92e_translate_to_dbm(struct r8192_priv *priv, u8 signal_strength_index)
 {
        long    signal_power;
 
@@ -2166,11 +1981,8 @@ long rtl819x_translate_todbm(struct r8192_priv *priv, u8 signal_strength_index)
 }
 
 
-void
-rtl819x_update_rxsignalstatistics8190pci(
-       struct r8192_priv *priv,
-       struct rtllib_rx_stats *pprevious_stats
-       )
+void rtl92e_update_rx_statistics(struct r8192_priv *priv,
+                                struct rtllib_rx_stats *pprevious_stats)
 {
        int weighting = 0;
 
@@ -2189,13 +2001,7 @@ rtl819x_update_rxsignalstatistics8190pci(
                                        weighting) / 6;
 }
 
-void rtl819x_process_cck_rxpathsel(struct r8192_priv *priv,
-                                  struct rtllib_rx_stats *pprevious_stats)
-{
-}
-
-
-u8 rtl819x_query_rxpwrpercentage(char antpower)
+u8 rtl92e_rx_db_to_percent(char antpower)
 {
        if ((antpower <= -100) || (antpower >= 20))
                return  0;
@@ -2206,10 +2012,7 @@ u8 rtl819x_query_rxpwrpercentage(char antpower)
 
 }      /* QueryRxPwrPercentage */
 
-u8
-rtl819x_evm_dbtopercentage(
-       char value
-       )
+u8 rtl92e_evm_db_to_percent(char value)
 {
        char ret_val;
 
@@ -2226,11 +2029,8 @@ rtl819x_evm_dbtopercentage(
        return ret_val;
 }
 
-void
-rtl8192_record_rxdesc_forlateruse(
-       struct rtllib_rx_stats *psrc_stats,
-       struct rtllib_rx_stats *ptarget_stats
-)
+void rtl92e_copy_mpdu_stats(struct rtllib_rx_stats *psrc_stats,
+                           struct rtllib_rx_stats *ptarget_stats)
 {
        ptarget_stats->bIsAMPDU = psrc_stats->bIsAMPDU;
        ptarget_stats->bFirstMPDU = psrc_stats->bFirstMPDU;
@@ -2344,11 +2144,6 @@ done:
 
 }
 
-static void rtl8192_rx_cmd(struct net_device *dev)
-{
-}
-
-
 static void rtl8192_tx_resume(struct net_device *dev)
 {
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
@@ -2366,26 +2161,23 @@ static void rtl8192_tx_resume(struct net_device *dev)
        }
 }
 
-void rtl8192_irq_tx_tasklet(struct r8192_priv *priv)
+static void rtl8192_irq_tx_tasklet(struct r8192_priv *priv)
 {
        rtl8192_tx_resume(priv->rtllib->dev);
 }
 
-void rtl8192_irq_rx_tasklet(struct r8192_priv *priv)
+static void rtl8192_irq_rx_tasklet(struct r8192_priv *priv)
 {
        rtl8192_rx_normal(priv->rtllib->dev);
 
-       if (MAX_RX_QUEUE > 1)
-               rtl8192_rx_cmd(priv->rtllib->dev);
-
-       write_nic_dword(priv->rtllib->dev, INTA_MASK,
-                       read_nic_dword(priv->rtllib->dev, INTA_MASK) | IMR_RDU);
+       rtl92e_writel(priv->rtllib->dev, INTA_MASK,
+                     rtl92e_readl(priv->rtllib->dev, INTA_MASK) | IMR_RDU);
 }
 
 /****************************************************************************
  ---------------------------- NIC START/CLOSE STUFF---------------------------
 *****************************************************************************/
-void rtl8192_cancel_deferred_work(struct r8192_priv *priv)
+static void rtl8192_cancel_deferred_work(struct r8192_priv *priv)
 {
        cancel_delayed_work(&priv->watch_dog_wq);
        cancel_delayed_work(&priv->update_beacon_wq);
@@ -2394,14 +2186,13 @@ void rtl8192_cancel_deferred_work(struct r8192_priv *priv)
        cancel_work_sync(&priv->qos_activate);
 }
 
-int _rtl8192_up(struct net_device *dev, bool is_silent_reset)
+static int _rtl8192_up(struct net_device *dev, bool is_silent_reset)
 {
        if (_rtl8192_sta_up(dev, is_silent_reset) == -1)
                return -1;
        return 0;
 }
 
-
 static int rtl8192_open(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
@@ -2414,8 +2205,7 @@ static int rtl8192_open(struct net_device *dev)
 
 }
 
-
-int rtl8192_up(struct net_device *dev)
+static int rtl8192_up(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
@@ -2445,7 +2235,7 @@ static int rtl8192_close(struct net_device *dev)
 
 }
 
-int rtl8192_down(struct net_device *dev, bool shutdownrf)
+static int rtl8192_down(struct net_device *dev, bool shutdownrf)
 {
        if (rtl8192_sta_down(dev, shutdownrf) == -1)
                return -1;
@@ -2453,19 +2243,19 @@ int rtl8192_down(struct net_device *dev, bool shutdownrf)
        return 0;
 }
 
-void rtl8192_commit(struct net_device *dev)
+void rtl92e_commit(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
        if (priv->up == 0)
                return;
        rtllib_softmac_stop_protocol(priv->rtllib, 0, true);
-       rtl8192_irq_disable(dev);
+       rtl92e_irq_disable(dev);
        priv->ops->stop_adapter(dev, true);
        _rtl8192_up(dev, false);
 }
 
-void rtl8192_restart(void *data)
+static void rtl8192_restart(void *data)
 {
        struct r8192_priv *priv = container_of_work_rsl(data, struct r8192_priv,
                                  reset_wq);
@@ -2473,7 +2263,7 @@ void rtl8192_restart(void *data)
 
        down(&priv->wx_sem);
 
-       rtl8192_commit(dev);
+       rtl92e_commit(dev);
 
        up(&priv->wx_sem);
 }
@@ -2552,30 +2342,34 @@ static int rtl8192_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
                                        if (is_zero_ether_addr(ieee->ap_mac_addr))
                                                ieee->iw_mode = IW_MODE_ADHOC;
                                        memcpy((u8 *)key, ipw->u.crypt.key, 16);
-                                       EnableHWSecurityConfig8192(dev);
-                                       set_swcam(dev, 4, ipw->u.crypt.idx,
-                                                 ieee->pairwise_key_type,
-                                                 (u8 *)ieee->ap_mac_addr,
-                                                 0, key, 0);
-                                       setKey(dev, 4, ipw->u.crypt.idx,
-                                              ieee->pairwise_key_type,
-                                              (u8 *)ieee->ap_mac_addr, 0, key);
-                                       if (ieee->iw_mode == IW_MODE_ADHOC) {
-                                               set_swcam(dev, ipw->u.crypt.idx,
-                                                       ipw->u.crypt.idx,
-                                                       ieee->pairwise_key_type,
-                                                       (u8 *)ieee->ap_mac_addr,
-                                                       0, key, 0);
-                                               setKey(dev, ipw->u.crypt.idx,
-                                                      ipw->u.crypt.idx,
+                                       rtl92e_enable_hw_security_config(dev);
+                                       rtl92e_set_swcam(dev, 4,
+                                                        ipw->u.crypt.idx,
+                                                        ieee->pairwise_key_type,
+                                                        (u8 *)ieee->ap_mac_addr,
+                                                        0, key, 0);
+                                       rtl92e_set_key(dev, 4, ipw->u.crypt.idx,
                                                       ieee->pairwise_key_type,
                                                       (u8 *)ieee->ap_mac_addr,
                                                       0, key);
+                                       if (ieee->iw_mode == IW_MODE_ADHOC) {
+                                               rtl92e_set_swcam(dev,
+                                                                ipw->u.crypt.idx,
+                                                                ipw->u.crypt.idx,
+                                                                ieee->pairwise_key_type,
+                                                                (u8 *)ieee->ap_mac_addr,
+                                                                0, key, 0);
+                                               rtl92e_set_key(dev,
+                                                              ipw->u.crypt.idx,
+                                                              ipw->u.crypt.idx,
+                                                              ieee->pairwise_key_type,
+                                                              (u8 *)ieee->ap_mac_addr,
+                                                              0, key);
                                        }
                                }
                                if ((ieee->pairwise_key_type == KEY_TYPE_CCMP)
                                     && ieee->pHTInfo->bCurrentHTSupport) {
-                                       write_nic_byte(dev, 0x173, 1);
+                                       rtl92e_writeb(dev, 0x173, 1);
                                }
 
                        } else {
@@ -2595,14 +2389,15 @@ static int rtl8192_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
                                        ieee->group_key_type = KEY_TYPE_NA;
 
                                if (ieee->group_key_type) {
-                                       set_swcam(dev, ipw->u.crypt.idx,
-                                                 ipw->u.crypt.idx,
-                                                 ieee->group_key_type,
-                                                 broadcast_addr, 0, key, 0);
-                                       setKey(dev, ipw->u.crypt.idx,
-                                              ipw->u.crypt.idx,
-                                              ieee->group_key_type,
-                                              broadcast_addr, 0, key);
+                                       rtl92e_set_swcam(dev, ipw->u.crypt.idx,
+                                                        ipw->u.crypt.idx,
+                                                        ieee->group_key_type,
+                                                        broadcast_addr, 0, key,
+                                                        0);
+                                       rtl92e_set_key(dev, ipw->u.crypt.idx,
+                                                      ipw->u.crypt.idx,
+                                                      ieee->group_key_type,
+                                                      broadcast_addr, 0, key);
                                }
                        }
                }
@@ -2707,8 +2502,8 @@ static irqreturn_t rtl8192_interrupt(int irq, void *netdev)
        if (inta & IMR_RDU) {
                RT_TRACE(COMP_INTR, "rx descriptor unavailable!\n");
                priv->stats.rxrdu++;
-               write_nic_dword(dev, INTA_MASK,
-                               read_nic_dword(dev, INTA_MASK) & ~IMR_RDU);
+               rtl92e_writel(dev, INTA_MASK,
+                             rtl92e_readl(dev, INTA_MASK) & ~IMR_RDU);
                tasklet_schedule(&priv->irq_rx_tasklet);
        }
 
@@ -2782,7 +2577,6 @@ static int rtl8192_pci_probe(struct pci_dev *pdev,
        struct rtl819x_ops *ops = (struct rtl819x_ops *)(id->driver_data);
        unsigned long pmem_start, pmem_len, pmem_flags;
        int err = -ENOMEM;
-       bool bdma64 = false;
        u8 revision_id;
 
        RT_TRACE(COMP_INIT, "Configuring chip resources");
@@ -2806,8 +2600,6 @@ static int rtl8192_pci_probe(struct pci_dev *pdev,
                goto err_pci_disable;
 
        err = -ENODEV;
-       if (bdma64)
-               dev->features |= NETIF_F_HIGHDMA;
 
        pci_set_drvdata(pdev, dev);
        SET_NETDEV_DEV(dev, &pdev->dev);
@@ -2850,12 +2642,12 @@ static int rtl8192_pci_probe(struct pci_dev *pdev,
        pci_read_config_byte(pdev, 0x08, &revision_id);
        /* If the revisionid is 0x10, the device uses rtl8192se. */
        if (pdev->device == 0x8192 && revision_id == 0x10)
-               goto err_rel_mem;
+               goto err_unmap;
 
        priv->ops = ops;
 
-       if (rtl8192_pci_findadapter(pdev, dev) == false)
-               goto err_rel_mem;
+       if (rtl92e_check_adapter(pdev, dev) == false)
+               goto err_unmap;
 
        dev->irq = pdev->irq;
        priv->irq = 0;
@@ -2888,7 +2680,7 @@ static int rtl8192_pci_probe(struct pci_dev *pdev,
        RT_TRACE(COMP_INIT, "dev name: %s\n", dev->name);
 
        if (priv->polling_timer_on == 0)
-               check_rfctrl_gpio_timer((unsigned long)dev);
+               rtl92e_check_rfctrl_gpio_timer((unsigned long)dev);
 
        RT_TRACE(COMP_INIT, "Driver probe completed\n");
        return 0;
@@ -2896,12 +2688,12 @@ static int rtl8192_pci_probe(struct pci_dev *pdev,
 err_free_irq:
        free_irq(dev->irq, dev);
        priv->irq = 0;
+err_unmap:
+       iounmap((void __iomem *)ioaddr);
 err_rel_mem:
        release_mem_region(pmem_start, pmem_len);
 err_rel_rtllib:
        free_rtllib(dev);
-
-       DMESG("wlan driver load failed\n");
 err_pci_disable:
        pci_disable_device(pdev);
        return err;
@@ -2922,7 +2714,7 @@ static void rtl8192_pci_disconnect(struct pci_dev *pdev)
                cancel_delayed_work(&priv->gpio_change_rf_wq);
                priv->polling_timer_on = 0;
                rtl8192_down(dev, true);
-               deinit_hal_dm(dev);
+               rtl92e_dm_deinit(dev);
                if (priv->pFirmware) {
                        vfree(priv->pFirmware);
                        priv->pFirmware = NULL;
@@ -2952,7 +2744,7 @@ static void rtl8192_pci_disconnect(struct pci_dev *pdev)
        RT_TRACE(COMP_DOWN, "wlan driver removed\n");
 }
 
-bool NicIFEnableNIC(struct net_device *dev)
+bool rtl92e_enable_nic(struct net_device *dev)
 {
        bool init_status = true;
        struct r8192_priv *priv = rtllib_priv(dev);
@@ -2977,12 +2769,12 @@ bool NicIFEnableNIC(struct net_device *dev)
        RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC);
        priv->bfirst_init = false;
 
-       rtl8192_irq_enable(dev);
+       rtl92e_irq_enable(dev);
        priv->bdisable_nic = false;
        RT_TRACE(COMP_PS, "<===========%s()\n", __func__);
        return init_status;
 }
-bool NicIFDisableNIC(struct net_device *dev)
+bool rtl92e_disable_nic(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        u8 tmp_state = 0;
@@ -2993,7 +2785,7 @@ bool NicIFDisableNIC(struct net_device *dev)
        rtllib_softmac_stop_protocol(priv->rtllib, 0, false);
        priv->rtllib->state = tmp_state;
        rtl8192_cancel_deferred_work(priv);
-       rtl8192_irq_disable(dev);
+       rtl92e_irq_disable(dev);
 
        priv->ops->stop_adapter(dev, false);
        RT_TRACE(COMP_PS, "<=========%s()\n", __func__);
@@ -3007,7 +2799,6 @@ static int __init rtl8192_pci_module_init(void)
        pr_info("Copyright (c) 2007-2008, Realsil Wlan Driver\n");
 
        if (0 != pci_register_driver(&rtl8192_pci_driver)) {
-               DMESG("No device found");
                /*pci_unregister_driver (&rtl8192_pci_driver);*/
                return -ENODEV;
        }
@@ -3021,7 +2812,7 @@ static void __exit rtl8192_pci_module_exit(void)
        RT_TRACE(COMP_DOWN, "Exiting");
 }
 
-void check_rfctrl_gpio_timer(unsigned long data)
+void rtl92e_check_rfctrl_gpio_timer(unsigned long data)
 {
        struct r8192_priv *priv = rtllib_priv((struct net_device *)data);
 
index 776d950655cba16763189bd11c7ce4732ec8621f..cd948bb1384018169b2b6686735ac380e0ff7424 100644 (file)
@@ -578,84 +578,44 @@ struct r8192_priv {
 
 extern const struct ethtool_ops rtl819x_ethtool_ops;
 
-void rtl8192_tx_cmd(struct net_device *dev, struct sk_buff *skb);
-short rtl8192_tx(struct net_device *dev, struct sk_buff *skb);
-
-u8 read_nic_io_byte(struct net_device *dev, int x);
-u32 read_nic_io_dword(struct net_device *dev, int x);
-u16 read_nic_io_word(struct net_device *dev, int x);
-void write_nic_io_byte(struct net_device *dev, int x, u8 y);
-void write_nic_io_word(struct net_device *dev, int x, u16 y);
-void write_nic_io_dword(struct net_device *dev, int x, u32 y);
-
-u8 read_nic_byte(struct net_device *dev, int x);
-u32 read_nic_dword(struct net_device *dev, int x);
-u16 read_nic_word(struct net_device *dev, int x);
-void write_nic_byte(struct net_device *dev, int x, u8 y);
-void write_nic_word(struct net_device *dev, int x, u16 y);
-void write_nic_dword(struct net_device *dev, int x, u32 y);
+u8 rtl92e_readb(struct net_device *dev, int x);
+u32 rtl92e_readl(struct net_device *dev, int x);
+u16 rtl92e_readw(struct net_device *dev, int x);
+void rtl92e_writeb(struct net_device *dev, int x, u8 y);
+void rtl92e_writew(struct net_device *dev, int x, u16 y);
+void rtl92e_writel(struct net_device *dev, int x, u32 y);
 
 void force_pci_posting(struct net_device *dev);
 
-void rtl8192_rx_enable(struct net_device *);
-void rtl8192_tx_enable(struct net_device *);
-
-int rtl8192_hard_start_xmit(struct sk_buff *skb, struct net_device *dev);
-void rtl8192_hard_data_xmit(struct sk_buff *skb, struct net_device *dev,
-                           int rate);
-void rtl8192_data_hard_stop(struct net_device *dev);
-void rtl8192_data_hard_resume(struct net_device *dev);
-void rtl8192_restart(void *data);
-void rtl819x_watchdog_wqcallback(void *data);
-void rtl8192_hw_sleep_wq(void *data);
-void watch_dog_timer_callback(unsigned long data);
-void rtl8192_irq_rx_tasklet(struct r8192_priv *priv);
-void rtl8192_irq_tx_tasklet(struct r8192_priv *priv);
-int rtl8192_down(struct net_device *dev, bool shutdownrf);
-int rtl8192_up(struct net_device *dev);
-void rtl8192_commit(struct net_device *dev);
-void rtl8192_set_chan(struct net_device *dev, short ch);
-
-void check_rfctrl_gpio_timer(unsigned long data);
-
-void rtl8192_hw_wakeup_wq(void *data);
-short rtl8192_pci_initdescring(struct net_device *dev);
-
-void rtl8192_cancel_deferred_work(struct r8192_priv *priv);
-
-int _rtl8192_up(struct net_device *dev, bool is_silent_reset);
-
-short rtl8192_is_tx_queue_empty(struct net_device *dev);
-void rtl8192_irq_disable(struct net_device *dev);
-
-void rtl8192_tx_timeout(struct net_device *dev);
-void rtl8192_pci_resetdescring(struct net_device *dev);
-void rtl8192_SetWirelessMode(struct net_device *dev, u8 wireless_mode);
-void rtl8192_irq_enable(struct net_device *dev);
-void rtl8192_config_rate(struct net_device *dev, u16 *rate_config);
-void rtl8192_update_cap(struct net_device *dev, u16 cap);
-void rtl8192_irq_disable(struct net_device *dev);
-
-void rtl819x_UpdateRxPktTimeStamp(struct net_device *dev,
-                                 struct rtllib_rx_stats *stats);
-long rtl819x_translate_todbm(struct r8192_priv *priv, u8 signal_strength_index);
-void rtl819x_update_rxsignalstatistics8190pci(struct r8192_priv *priv,
-                                     struct rtllib_rx_stats *pprevious_stats);
-u8 rtl819x_evm_dbtopercentage(char value);
-void rtl819x_process_cck_rxpathsel(struct r8192_priv *priv,
-                                  struct rtllib_rx_stats *pprevious_stats);
-u8 rtl819x_query_rxpwrpercentage(char antpower);
-void rtl8192_record_rxdesc_forlateruse(struct rtllib_rx_stats *psrc_stats,
-                                      struct rtllib_rx_stats *ptarget_stats);
-bool NicIFEnableNIC(struct net_device *dev);
-bool NicIFDisableNIC(struct net_device *dev);
-
-bool MgntActSet_RF_State(struct net_device *dev,
-                        enum rt_rf_power_state StateToSet,
-                        RT_RF_CHANGE_SOURCE ChangeSource,
-                        bool   ProtectOrNot);
-void ActUpdateChannelAccessSetting(struct net_device *dev,
-                          enum wireless_mode WirelessMode,
-                          struct channel_access_setting *ChnlAccessSetting);
+void rtl92e_rx_enable(struct net_device *);
+void rtl92e_tx_enable(struct net_device *);
+
+void rtl92e_hw_sleep_wq(void *data);
+void rtl92e_commit(struct net_device *dev);
+
+void rtl92e_check_rfctrl_gpio_timer(unsigned long data);
+
+void rtl92e_hw_wakeup_wq(void *data);
 
+void rtl92e_reset_desc_ring(struct net_device *dev);
+void rtl92e_set_wireless_mode(struct net_device *dev, u8 wireless_mode);
+void rtl92e_irq_enable(struct net_device *dev);
+void rtl92e_config_rate(struct net_device *dev, u16 *rate_config);
+void rtl92e_irq_disable(struct net_device *dev);
+
+void rtl92e_update_rx_pkt_timestamp(struct net_device *dev,
+                                   struct rtllib_rx_stats *stats);
+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);
+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);
+bool rtl92e_disable_nic(struct net_device *dev);
+
+bool rtl92e_set_rf_state(struct net_device *dev,
+                        enum rt_rf_power_state StateToSet,
+                        RT_RF_CHANGE_SOURCE ChangeSource);
 #endif
index 3de7cc549794803cfaac646a6b96440544e73040..1a0c690bfa075d45adb3ca3dcf8efa2d185c73a8 100644 (file)
@@ -58,9 +58,6 @@ static u32 edca_setting_UL[HT_IOT_PEER_MAX] = {
        0x5e4332
 };
 
-#define RTK_UL_EDCA 0xa44f
-#define RTK_DL_EDCA 0x5e4322
-
 const u32 dm_tx_bb_gain[TxBBGainTableLength] = {
        0x7f8001fe, /* 12 dB */
        0x788001e2, /* 11 dB */
@@ -213,6 +210,9 @@ static void dm_deInit_fsync(struct net_device *dev);
 
 static void dm_check_txrateandretrycount(struct net_device *dev);
 static  void dm_check_ac_dc_power(struct net_device *dev);
+static void dm_check_fsync(struct net_device *dev);
+static void dm_CheckRfCtrlGPIO(void *data);
+static void dm_fsync_timer_callback(unsigned long data);
 
 /*---------------------Define local function prototype-----------------------*/
 
@@ -224,7 +224,7 @@ static      void dm_send_rssi_tofw(struct net_device *dev);
 static void    dm_ctstoself(struct net_device *dev);
 /*---------------------------Define function prototype------------------------*/
 
-void init_hal_dm(struct net_device *dev)
+void rtl92e_dm_init(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
@@ -234,10 +234,10 @@ void init_hal_dm(struct net_device *dev)
 
        dm_init_dynamic_txpower(dev);
 
-       init_rate_adaptive(dev);
+       rtl92e_init_adaptive_rate(dev);
 
        dm_dig_init(dev);
-       dm_init_edca_turbo(dev);
+       rtl92e_dm_init_edca_turbo(dev);
        dm_init_bandwidth_autoswitch(dev);
        dm_init_fsync(dev);
        dm_init_rxpath_selection(dev);
@@ -249,14 +249,14 @@ void init_hal_dm(struct net_device *dev)
                              (void *)dm_CheckRfCtrlGPIO, dev);
 }
 
-void deinit_hal_dm(struct net_device *dev)
+void rtl92e_dm_deinit(struct net_device *dev)
 {
 
        dm_deInit_fsync(dev);
 
 }
 
-void hal_dm_watchdog(struct net_device *dev)
+void rtl92e_dm_watchdog(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
@@ -307,7 +307,7 @@ static void dm_check_ac_dc_power(struct net_device *dev)
 };
 
 
-void init_rate_adaptive(struct net_device *dev)
+void rtl92e_init_adaptive_rate(struct net_device *dev)
 {
 
        struct r8192_priv *priv = rtllib_priv(dev);
@@ -444,7 +444,7 @@ static void dm_check_rate_adaptive(struct net_device *dev)
                if (priv->rtllib->GetHalfNmodeSupportByAPsHandler(dev))
                        targetRATR &=  0xf00fffff;
 
-               currentRATR = read_nic_dword(dev, RATR0);
+               currentRATR = rtl92e_readl(dev, RATR0);
                if (targetRATR !=  currentRATR) {
                        u32 ratr_value;
 
@@ -454,8 +454,8 @@ static void dm_check_rate_adaptive(struct net_device *dev)
                                 currentRATR, targetRATR);
                        if (priv->rf_type == RF_1T2R)
                                ratr_value &= ~(RATE_ALL_OFDM_2SS);
-                       write_nic_dword(dev, RATR0, ratr_value);
-                       write_nic_byte(dev, UFWP, 1);
+                       rtl92e_writel(dev, RATR0, ratr_value);
+                       rtl92e_writeb(dev, UFWP, 1);
 
                        pra->last_ratr = targetRATR;
                }
@@ -561,40 +561,40 @@ static void dm_tx_update_tssi_weak_signal(struct net_device *dev, u8 RF_Type)
                        p->rfa_txpowertrackingindex--;
                        if (p->rfa_txpowertrackingindex_real > 4) {
                                p->rfa_txpowertrackingindex_real--;
-                               rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance,
-                                                bMaskDWord,
-                                                dm_tx_bb_gain[p->rfa_txpowertrackingindex_real]);
+                               rtl92e_set_bb_reg(dev, rOFDM0_XATxIQImbalance,
+                                                 bMaskDWord,
+                                                 dm_tx_bb_gain[p->rfa_txpowertrackingindex_real]);
                        }
 
                        p->rfc_txpowertrackingindex--;
                        if (p->rfc_txpowertrackingindex_real > 4) {
                                p->rfc_txpowertrackingindex_real--;
-                               rtl8192_setBBreg(dev,
-                                                rOFDM0_XCTxIQImbalance,
-                                                bMaskDWord,
-                                                dm_tx_bb_gain[p->rfc_txpowertrackingindex_real]);
+                               rtl92e_set_bb_reg(dev,
+                                                 rOFDM0_XCTxIQImbalance,
+                                                 bMaskDWord,
+                                                 dm_tx_bb_gain[p->rfc_txpowertrackingindex_real]);
                        }
                } else {
-                       rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance,
-                                        bMaskDWord,
-                                        dm_tx_bb_gain[4]);
-                       rtl8192_setBBreg(dev,
-                                        rOFDM0_XCTxIQImbalance,
-                                        bMaskDWord, dm_tx_bb_gain[4]);
+                       rtl92e_set_bb_reg(dev, rOFDM0_XATxIQImbalance,
+                                         bMaskDWord,
+                                         dm_tx_bb_gain[4]);
+                       rtl92e_set_bb_reg(dev,
+                                         rOFDM0_XCTxIQImbalance,
+                                         bMaskDWord, dm_tx_bb_gain[4]);
                }
        } else {
                if (p->rfa_txpowertrackingindex > 0) {
                        p->rfa_txpowertrackingindex--;
                        if (p->rfa_txpowertrackingindex_real > 4) {
                                p->rfa_txpowertrackingindex_real--;
-                               rtl8192_setBBreg(dev,
-                                                rOFDM0_XATxIQImbalance,
-                                                bMaskDWord,
-                                                dm_tx_bb_gain[p->rfa_txpowertrackingindex_real]);
+                               rtl92e_set_bb_reg(dev,
+                                                 rOFDM0_XATxIQImbalance,
+                                                 bMaskDWord,
+                                                 dm_tx_bb_gain[p->rfa_txpowertrackingindex_real]);
                        }
                } else {
-                       rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance,
-                                        bMaskDWord, dm_tx_bb_gain[4]);
+                       rtl92e_set_bb_reg(dev, rOFDM0_XATxIQImbalance,
+                                         bMaskDWord, dm_tx_bb_gain[4]);
                }
        }
 }
@@ -608,36 +608,33 @@ static void dm_tx_update_tssi_strong_signal(struct net_device *dev, u8 RF_Type)
                    (p->rfc_txpowertrackingindex < TxBBGainTableLength - 1)) {
                        p->rfa_txpowertrackingindex++;
                        p->rfa_txpowertrackingindex_real++;
-                       rtl8192_setBBreg(dev,
-                                rOFDM0_XATxIQImbalance,
-                                bMaskDWord,
-                                dm_tx_bb_gain[p->rfa_txpowertrackingindex_real]);
+                       rtl92e_set_bb_reg(dev, rOFDM0_XATxIQImbalance,
+                                         bMaskDWord,
+                                         dm_tx_bb_gain[p->rfa_txpowertrackingindex_real]);
                        p->rfc_txpowertrackingindex++;
                        p->rfc_txpowertrackingindex_real++;
-                       rtl8192_setBBreg(dev,
-                                rOFDM0_XCTxIQImbalance,
-                                bMaskDWord,
-                                dm_tx_bb_gain[p->rfc_txpowertrackingindex_real]);
+                       rtl92e_set_bb_reg(dev, rOFDM0_XCTxIQImbalance,
+                                         bMaskDWord,
+                                         dm_tx_bb_gain[p->rfc_txpowertrackingindex_real]);
                } else {
-                       rtl8192_setBBreg(dev,
-                                rOFDM0_XATxIQImbalance,
-                                bMaskDWord,
-                                dm_tx_bb_gain[TxBBGainTableLength - 1]);
-                       rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance,
-                                        bMaskDWord,
-                                        dm_tx_bb_gain[TxBBGainTableLength - 1]);
+                       rtl92e_set_bb_reg(dev, rOFDM0_XATxIQImbalance,
+                                         bMaskDWord,
+                                         dm_tx_bb_gain[TxBBGainTableLength - 1]);
+                       rtl92e_set_bb_reg(dev, rOFDM0_XCTxIQImbalance,
+                                         bMaskDWord,
+                                         dm_tx_bb_gain[TxBBGainTableLength - 1]);
                }
        } else {
                if (p->rfa_txpowertrackingindex < (TxBBGainTableLength - 1)) {
                        p->rfa_txpowertrackingindex++;
                        p->rfa_txpowertrackingindex_real++;
-                       rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance,
-                                        bMaskDWord,
-                                        dm_tx_bb_gain[p->rfa_txpowertrackingindex_real]);
+                       rtl92e_set_bb_reg(dev, rOFDM0_XATxIQImbalance,
+                                         bMaskDWord,
+                                         dm_tx_bb_gain[p->rfa_txpowertrackingindex_real]);
                } else {
-                       rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance,
-                                        bMaskDWord,
-                                        dm_tx_bb_gain[TxBBGainTableLength - 1]);
+                       rtl92e_set_bb_reg(dev, rOFDM0_XATxIQImbalance,
+                                         bMaskDWord,
+                                         dm_tx_bb_gain[TxBBGainTableLength - 1]);
                }
        }
 }
@@ -656,8 +653,8 @@ static void dm_TXPowerTrackingCallback_TSSI(struct net_device *dev)
        u32     delta = 0;
 
        RT_TRACE(COMP_POWER_TRACKING, "%s()\n", __func__);
-       write_nic_byte(dev, Pw_Track_Flag, 0);
-       write_nic_byte(dev, FW_Busy_Flag, 0);
+       rtl92e_writeb(dev, Pw_Track_Flag, 0);
+       rtl92e_writeb(dev, FW_Busy_Flag, 0);
        priv->rtllib->bdynamic_txpower_enable = false;
        bHighpowerstate = priv->bDynamicTxHighPower;
 
@@ -674,12 +671,11 @@ static void dm_TXPowerTrackingCallback_TSSI(struct net_device *dev)
                tx_cmd.Op               = TXCMD_SET_TX_PWR_TRACKING;
                tx_cmd.Length   = 4;
                tx_cmd.Value            = Value;
-               cmpk_message_handle_tx(dev, (u8 *)&tx_cmd,
-                                      DESC_PACKET_TYPE_INIT,
-                                      sizeof(struct dcmd_txcmd));
+               rtl92e_send_cmd_pkt(dev, (u8 *)&tx_cmd, DESC_PACKET_TYPE_INIT,
+                                   sizeof(struct dcmd_txcmd));
                mdelay(1);
                for (i = 0; i <= 30; i++) {
-                       Pwr_Flag = read_nic_byte(dev, Pw_Track_Flag);
+                       Pwr_Flag = rtl92e_readb(dev, Pw_Track_Flag);
 
                        if (Pwr_Flag == 0) {
                                mdelay(1);
@@ -687,35 +683,35 @@ static void dm_TXPowerTrackingCallback_TSSI(struct net_device *dev)
                                if (priv->bResetInProgress) {
                                        RT_TRACE(COMP_POWER_TRACKING,
                                                 "we are in silent reset progress, so return\n");
-                                       write_nic_byte(dev, Pw_Track_Flag, 0);
-                                       write_nic_byte(dev, FW_Busy_Flag, 0);
+                                       rtl92e_writeb(dev, Pw_Track_Flag, 0);
+                                       rtl92e_writeb(dev, FW_Busy_Flag, 0);
                                        return;
                                }
                                if (priv->rtllib->eRFPowerState != eRfOn) {
                                        RT_TRACE(COMP_POWER_TRACKING,
                                                 "we are in power save, so return\n");
-                                       write_nic_byte(dev, Pw_Track_Flag, 0);
-                                       write_nic_byte(dev, FW_Busy_Flag, 0);
+                                       rtl92e_writeb(dev, Pw_Track_Flag, 0);
+                                       rtl92e_writeb(dev, FW_Busy_Flag, 0);
                                        return;
                                }
 
                                continue;
                        }
 
-                       Avg_TSSI_Meas = read_nic_word(dev, Tssi_Mea_Value);
+                       Avg_TSSI_Meas = rtl92e_readw(dev, Tssi_Mea_Value);
 
                        if (Avg_TSSI_Meas == 0) {
-                               write_nic_byte(dev, Pw_Track_Flag, 0);
-                               write_nic_byte(dev, FW_Busy_Flag, 0);
+                               rtl92e_writeb(dev, Pw_Track_Flag, 0);
+                               rtl92e_writeb(dev, FW_Busy_Flag, 0);
                                return;
                        }
 
                        for (k = 0; k < 5; k++) {
                                if (k != 4)
-                                       tmp_report[k] = read_nic_byte(dev,
+                                       tmp_report[k] = rtl92e_readb(dev,
                                                         Tssi_Report_Value1+k);
                                else
-                                       tmp_report[k] = read_nic_byte(dev,
+                                       tmp_report[k] = rtl92e_readb(dev,
                                                         Tssi_Report_Value2);
 
                                RT_TRACE(COMP_POWER_TRACKING,
@@ -729,7 +725,7 @@ static void dm_TXPowerTrackingCallback_TSSI(struct net_device *dev)
                        }
 
                        if (viviflag) {
-                               write_nic_byte(dev, Pw_Track_Flag, 0);
+                               rtl92e_writeb(dev, Pw_Track_Flag, 0);
                                viviflag = false;
                                RT_TRACE(COMP_POWER_TRACKING,
                                         "we filted this data\n");
@@ -756,8 +752,8 @@ static void dm_TXPowerTrackingCallback_TSSI(struct net_device *dev)
 
                        if (delta <= E_FOR_TX_POWER_TRACK) {
                                priv->rtllib->bdynamic_txpower_enable = true;
-                               write_nic_byte(dev, Pw_Track_Flag, 0);
-                               write_nic_byte(dev, FW_Busy_Flag, 0);
+                               rtl92e_writeb(dev, Pw_Track_Flag, 0);
+                               rtl92e_writeb(dev, FW_Busy_Flag, 0);
                                RT_TRACE(COMP_POWER_TRACKING,
                                         "tx power track is done\n");
                                RT_TRACE(COMP_POWER_TRACKING,
@@ -806,12 +802,12 @@ static void dm_TXPowerTrackingCallback_TSSI(struct net_device *dev)
                                if (priv->rtllib->current_network.channel == 14 &&
                                    !priv->bcck_in_ch14) {
                                        priv->bcck_in_ch14 = true;
-                                       dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
+                                       rtl92e_dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
                                } else if (priv->rtllib->current_network.channel != 14 && priv->bcck_in_ch14) {
                                        priv->bcck_in_ch14 = false;
-                                       dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
+                                       rtl92e_dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
                                } else
-                                       dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
+                                       rtl92e_dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
                        }
                        RT_TRACE(COMP_POWER_TRACKING,
                                 "priv->rfa_txpowertrackingindex = %d\n",
@@ -829,23 +825,23 @@ static void dm_TXPowerTrackingCallback_TSSI(struct net_device *dev)
                        if (priv->CCKPresentAttentuation_difference <= -12 ||
                            priv->CCKPresentAttentuation_difference >= 24) {
                                priv->rtllib->bdynamic_txpower_enable = true;
-                               write_nic_byte(dev, Pw_Track_Flag, 0);
-                               write_nic_byte(dev, FW_Busy_Flag, 0);
+                               rtl92e_writeb(dev, Pw_Track_Flag, 0);
+                               rtl92e_writeb(dev, FW_Busy_Flag, 0);
                                RT_TRACE(COMP_POWER_TRACKING,
                                         "tx power track--->limited\n");
                                return;
                        }
 
-                       write_nic_byte(dev, Pw_Track_Flag, 0);
+                       rtl92e_writeb(dev, Pw_Track_Flag, 0);
                        Avg_TSSI_Meas_from_driver = 0;
                        for (k = 0; k < 5; k++)
                                tmp_report[k] = 0;
                        break;
                }
-               write_nic_byte(dev, FW_Busy_Flag, 0);
+               rtl92e_writeb(dev, FW_Busy_Flag, 0);
        }
        priv->rtllib->bdynamic_txpower_enable = true;
-       write_nic_byte(dev, Pw_Track_Flag, 0);
+       rtl92e_writeb(dev, Pw_Track_Flag, 0);
 }
 
 static void dm_TXPowerTrackingCallback_ThermalMeter(struct net_device *dev)
@@ -857,8 +853,8 @@ static void dm_TXPowerTrackingCallback_ThermalMeter(struct net_device *dev)
        int i = 0, CCKSwingNeedUpdate = 0;
 
        if (!priv->btxpower_trackingInit) {
-               tmpRegA = rtl8192_QueryBBReg(dev, rOFDM0_XATxIQImbalance,
-                                            bMaskDWord);
+               tmpRegA = rtl92e_get_bb_reg(dev, rOFDM0_XATxIQImbalance,
+                                           bMaskDWord);
                for (i = 0; i < OFDM_Table_Length; i++) {
                        if (tmpRegA == OFDMSwingTable[i]) {
                                priv->OFDM_index[0] = (u8)i;
@@ -869,7 +865,7 @@ static void dm_TXPowerTrackingCallback_ThermalMeter(struct net_device *dev)
                        }
                }
 
-               TempCCk = rtl8192_QueryBBReg(dev, rCCK0_TxFilter1, bMaskByte2);
+               TempCCk = rtl92e_get_bb_reg(dev, rCCK0_TxFilter1, bMaskByte2);
                for (i = 0; i < CCK_Table_length; i++) {
                        if (TempCCk == (u32)CCKSwingTable_Ch1_Ch13[i][0]) {
                                priv->CCK_index = (u8) i;
@@ -884,7 +880,7 @@ static void dm_TXPowerTrackingCallback_ThermalMeter(struct net_device *dev)
                return;
        }
 
-       tmpRegA = rtl8192_phy_QueryRFReg(dev, RF90_PATH_A, 0x12, 0x078);
+       tmpRegA = rtl92e_get_rf_reg(dev, RF90_PATH_A, 0x12, 0x078);
        RT_TRACE(COMP_POWER_TRACKING, "Readback ThermalMeterA = %d\n", tmpRegA);
        if (tmpRegA < 3 || tmpRegA > 13)
                return;
@@ -939,11 +935,11 @@ static void dm_TXPowerTrackingCallback_ThermalMeter(struct net_device *dev)
        }
 
        if (CCKSwingNeedUpdate)
-               dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
+               rtl92e_dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
        if (priv->OFDM_index[0] != tmpOFDMindex) {
                priv->OFDM_index[0] = tmpOFDMindex;
-               rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord,
-                                OFDMSwingTable[priv->OFDM_index[0]]);
+               rtl92e_set_bb_reg(dev, rOFDM0_XATxIQImbalance, bMaskDWord,
+                                 OFDMSwingTable[priv->OFDM_index[0]]);
                RT_TRACE(COMP_POWER_TRACKING, "Update OFDMSwing[%d] = 0x%x\n",
                         priv->OFDM_index[0],
                         OFDMSwingTable[priv->OFDM_index[0]]);
@@ -951,7 +947,7 @@ static void dm_TXPowerTrackingCallback_ThermalMeter(struct net_device *dev)
        priv->txpower_count = 0;
 }
 
-void   dm_txpower_trackingcallback(void *data)
+void rtl92e_dm_txpower_tracking_wq(void *data)
 {
        struct r8192_priv *priv = container_of_dwork_rsl(data,
                                  struct r8192_priv, txpower_tracking_wq);
@@ -989,7 +985,7 @@ static void dm_InitializeTXPowerTracking_ThermalMeter(struct net_device *dev)
                 priv->btxpower_tracking);
 }
 
-void dm_initialize_txpower_tracking(struct net_device *dev)
+void rtl92e_dm_init_txpower_tracking(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
@@ -1005,7 +1001,7 @@ static void dm_CheckTXPowerTracking_TSSI(struct net_device *dev)
        static u32 tx_power_track_counter;
 
        RT_TRACE(COMP_POWER_TRACKING, "%s()\n", __func__);
-       if (read_nic_byte(dev, 0x11e) == 1)
+       if (rtl92e_readb(dev, 0x11e) == 1)
                return;
        if (!priv->btxpower_tracking)
                return;
@@ -1039,10 +1035,10 @@ static void dm_CheckTXPowerTracking_ThermalMeter(struct net_device *dev)
 
        if (!TM_Trigger) {
                {
-               rtl8192_phy_SetRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4d);
-               rtl8192_phy_SetRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4f);
-               rtl8192_phy_SetRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4d);
-               rtl8192_phy_SetRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4f);
+               rtl92e_set_rf_reg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4d);
+               rtl92e_set_rf_reg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4f);
+               rtl92e_set_rf_reg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4d);
+               rtl92e_set_rf_reg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4f);
                }
                TM_Trigger = 1;
                return;
@@ -1074,30 +1070,30 @@ static void dm_CCKTxPowerAdjust_TSSI(struct net_device *dev, bool  bInCH14)
                TempVal = (u32)(dm_cck_tx_bb_gain[attenuation][0] +
                          (dm_cck_tx_bb_gain[attenuation][1] << 8));
 
-               rtl8192_setBBreg(dev, rCCK0_TxFilter1, bMaskHWord, TempVal);
+               rtl92e_set_bb_reg(dev, rCCK0_TxFilter1, bMaskHWord, TempVal);
                TempVal = (u32)((dm_cck_tx_bb_gain[attenuation][2]) +
                          (dm_cck_tx_bb_gain[attenuation][3] << 8) +
                          (dm_cck_tx_bb_gain[attenuation][4] << 16)+
                          (dm_cck_tx_bb_gain[attenuation][5] << 24));
-               rtl8192_setBBreg(dev, rCCK0_TxFilter2, bMaskDWord, TempVal);
+               rtl92e_set_bb_reg(dev, rCCK0_TxFilter2, bMaskDWord, TempVal);
                TempVal = (u32)(dm_cck_tx_bb_gain[attenuation][6] +
                          (dm_cck_tx_bb_gain[attenuation][7] << 8));
 
-               rtl8192_setBBreg(dev, rCCK0_DebugPort, bMaskLWord, TempVal);
+               rtl92e_set_bb_reg(dev, rCCK0_DebugPort, bMaskLWord, TempVal);
        } else {
                TempVal = (u32)((dm_cck_tx_bb_gain_ch14[attenuation][0]) +
                          (dm_cck_tx_bb_gain_ch14[attenuation][1] << 8));
 
-               rtl8192_setBBreg(dev, rCCK0_TxFilter1, bMaskHWord, TempVal);
+               rtl92e_set_bb_reg(dev, rCCK0_TxFilter1, bMaskHWord, TempVal);
                TempVal = (u32)((dm_cck_tx_bb_gain_ch14[attenuation][2]) +
                          (dm_cck_tx_bb_gain_ch14[attenuation][3] << 8) +
                          (dm_cck_tx_bb_gain_ch14[attenuation][4] << 16)+
                          (dm_cck_tx_bb_gain_ch14[attenuation][5] << 24));
-               rtl8192_setBBreg(dev, rCCK0_TxFilter2, bMaskDWord, TempVal);
+               rtl92e_set_bb_reg(dev, rCCK0_TxFilter2, bMaskDWord, TempVal);
                TempVal = (u32)((dm_cck_tx_bb_gain_ch14[attenuation][6]) +
                          (dm_cck_tx_bb_gain_ch14[attenuation][7] << 8));
 
-               rtl8192_setBBreg(dev, rCCK0_DebugPort, bMaskLWord, TempVal);
+               rtl92e_set_bb_reg(dev, rCCK0_DebugPort, bMaskLWord, TempVal);
        }
 }
 
@@ -1111,7 +1107,7 @@ static void dm_CCKTxPowerAdjust_ThermalMeter(struct net_device *dev,
        if (!bInCH14) {
                TempVal = CCKSwingTable_Ch1_Ch13[priv->CCK_index][0] +
                          (CCKSwingTable_Ch1_Ch13[priv->CCK_index][1] << 8);
-               rtl8192_setBBreg(dev, rCCK0_TxFilter1, bMaskHWord, TempVal);
+               rtl92e_set_bb_reg(dev, rCCK0_TxFilter1, bMaskHWord, TempVal);
                RT_TRACE(COMP_POWER_TRACKING,
                         "CCK not chnl 14, reg 0x%x = 0x%x\n", rCCK0_TxFilter1,
                         TempVal);
@@ -1119,14 +1115,14 @@ static void dm_CCKTxPowerAdjust_ThermalMeter(struct net_device *dev,
                          (CCKSwingTable_Ch1_Ch13[priv->CCK_index][3] << 8) +
                          (CCKSwingTable_Ch1_Ch13[priv->CCK_index][4] << 16)+
                          (CCKSwingTable_Ch1_Ch13[priv->CCK_index][5] << 24);
-               rtl8192_setBBreg(dev, rCCK0_TxFilter2, bMaskDWord, TempVal);
+               rtl92e_set_bb_reg(dev, rCCK0_TxFilter2, bMaskDWord, TempVal);
                RT_TRACE(COMP_POWER_TRACKING,
                         "CCK not chnl 14, reg 0x%x = 0x%x\n", rCCK0_TxFilter2,
                         TempVal);
                TempVal = CCKSwingTable_Ch1_Ch13[priv->CCK_index][6] +
                          (CCKSwingTable_Ch1_Ch13[priv->CCK_index][7] << 8);
 
-               rtl8192_setBBreg(dev, rCCK0_DebugPort, bMaskLWord, TempVal);
+               rtl92e_set_bb_reg(dev, rCCK0_DebugPort, bMaskLWord, TempVal);
                RT_TRACE(COMP_POWER_TRACKING,
                         "CCK not chnl 14, reg 0x%x = 0x%x\n", rCCK0_DebugPort,
                         TempVal);
@@ -1134,26 +1130,26 @@ static void dm_CCKTxPowerAdjust_ThermalMeter(struct net_device *dev,
                TempVal = CCKSwingTable_Ch14[priv->CCK_index][0] +
                          (CCKSwingTable_Ch14[priv->CCK_index][1] << 8);
 
-               rtl8192_setBBreg(dev, rCCK0_TxFilter1, bMaskHWord, TempVal);
+               rtl92e_set_bb_reg(dev, rCCK0_TxFilter1, bMaskHWord, TempVal);
                RT_TRACE(COMP_POWER_TRACKING, "CCK chnl 14, reg 0x%x = 0x%x\n",
                        rCCK0_TxFilter1, TempVal);
                TempVal = CCKSwingTable_Ch14[priv->CCK_index][2] +
                          (CCKSwingTable_Ch14[priv->CCK_index][3] << 8) +
                          (CCKSwingTable_Ch14[priv->CCK_index][4] << 16)+
                          (CCKSwingTable_Ch14[priv->CCK_index][5] << 24);
-               rtl8192_setBBreg(dev, rCCK0_TxFilter2, bMaskDWord, TempVal);
+               rtl92e_set_bb_reg(dev, rCCK0_TxFilter2, bMaskDWord, TempVal);
                RT_TRACE(COMP_POWER_TRACKING, "CCK chnl 14, reg 0x%x = 0x%x\n",
                        rCCK0_TxFilter2, TempVal);
                TempVal = CCKSwingTable_Ch14[priv->CCK_index][6] +
                          (CCKSwingTable_Ch14[priv->CCK_index][7]<<8);
 
-               rtl8192_setBBreg(dev, rCCK0_DebugPort, bMaskLWord, TempVal);
+               rtl92e_set_bb_reg(dev, rCCK0_DebugPort, bMaskLWord, TempVal);
                RT_TRACE(COMP_POWER_TRACKING, "CCK chnl 14, reg 0x%x = 0x%x\n",
                        rCCK0_DebugPort, TempVal);
        }
 }
 
-void dm_cck_txpower_adjust(struct net_device *dev, bool  binch14)
+void rtl92e_dm_cck_txpower_adjust(struct net_device *dev, bool binch14)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
@@ -1168,8 +1164,8 @@ static void dm_txpower_reset_recovery(struct net_device *dev)
        struct r8192_priv *priv = rtllib_priv(dev);
 
        RT_TRACE(COMP_POWER_TRACKING, "Start Reset Recovery ==>\n");
-       rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord,
-                        dm_tx_bb_gain[priv->rfa_txpowertrackingindex]);
+       rtl92e_set_bb_reg(dev, rOFDM0_XATxIQImbalance, bMaskDWord,
+                         dm_tx_bb_gain[priv->rfa_txpowertrackingindex]);
        RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery: Fill in 0xc80 is %08x\n",
                 dm_tx_bb_gain[priv->rfa_txpowertrackingindex]);
        RT_TRACE(COMP_POWER_TRACKING,
@@ -1181,10 +1177,10 @@ static void dm_txpower_reset_recovery(struct net_device *dev)
        RT_TRACE(COMP_POWER_TRACKING,
                 "Reset Recovery: CCK Attenuation is %d dB\n",
                 priv->CCKPresentAttentuation);
-       dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
+       rtl92e_dm_cck_txpower_adjust(dev, priv->bcck_in_ch14);
 
-       rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord,
-                        dm_tx_bb_gain[priv->rfc_txpowertrackingindex]);
+       rtl92e_set_bb_reg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord,
+                         dm_tx_bb_gain[priv->rfc_txpowertrackingindex]);
        RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery: Fill in 0xc90 is %08x\n",
                 dm_tx_bb_gain[priv->rfc_txpowertrackingindex]);
        RT_TRACE(COMP_POWER_TRACKING,
@@ -1195,7 +1191,7 @@ static void dm_txpower_reset_recovery(struct net_device *dev)
                 dm_tx_bb_gain_idx_to_amplify(priv->rfc_txpowertrackingindex));
 }
 
-void dm_restore_dynamic_mechanism_state(struct net_device *dev)
+void rtl92e_dm_restore_state(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        u32     reg_ratr = priv->rate_adaptive.last_ratr;
@@ -1203,7 +1199,7 @@ void dm_restore_dynamic_mechanism_state(struct net_device *dev)
 
        if (!priv->up) {
                RT_TRACE(COMP_RATE,
-                        "<---- dm_restore_dynamic_mechanism_state(): driver is going to unload\n");
+                        "<---- rtl92e_dm_restore_state(): driver is going to unload\n");
                return;
        }
 
@@ -1215,8 +1211,8 @@ void dm_restore_dynamic_mechanism_state(struct net_device *dev)
        ratr_value = reg_ratr;
        if (priv->rf_type == RF_1T2R)
                ratr_value &= ~(RATE_ALL_OFDM_2SS);
-       write_nic_dword(dev, RATR0, ratr_value);
-       write_nic_byte(dev, UFWP, 1);
+       rtl92e_writel(dev, RATR0, ratr_value);
+       rtl92e_writeb(dev, UFWP, 1);
        if (priv->btxpower_trackingInit && priv->btxpower_tracking)
                dm_txpower_reset_recovery(dev);
 
@@ -1232,18 +1228,18 @@ static void dm_bb_initialgain_restore(struct net_device *dev)
        if (dm_digtable.dig_algorithm == DIG_ALGO_BY_RSSI)
                return;
 
-       rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x8);
-       rtl8192_setBBreg(dev, rOFDM0_XAAGCCore1, bit_mask,
-                        (u32)priv->initgain_backup.xaagccore1);
-       rtl8192_setBBreg(dev, rOFDM0_XBAGCCore1, bit_mask,
-                        (u32)priv->initgain_backup.xbagccore1);
-       rtl8192_setBBreg(dev, rOFDM0_XCAGCCore1, bit_mask,
-                        (u32)priv->initgain_backup.xcagccore1);
-       rtl8192_setBBreg(dev, rOFDM0_XDAGCCore1, bit_mask,
-                        (u32)priv->initgain_backup.xdagccore1);
+       rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x8);
+       rtl92e_set_bb_reg(dev, rOFDM0_XAAGCCore1, bit_mask,
+                         (u32)priv->initgain_backup.xaagccore1);
+       rtl92e_set_bb_reg(dev, rOFDM0_XBAGCCore1, bit_mask,
+                         (u32)priv->initgain_backup.xbagccore1);
+       rtl92e_set_bb_reg(dev, rOFDM0_XCAGCCore1, bit_mask,
+                         (u32)priv->initgain_backup.xcagccore1);
+       rtl92e_set_bb_reg(dev, rOFDM0_XDAGCCore1, bit_mask,
+                         (u32)priv->initgain_backup.xdagccore1);
        bit_mask  = bMaskByte2;
-       rtl8192_setBBreg(dev, rCCK0_CCA, bit_mask,
-                        (u32)priv->initgain_backup.cca);
+       rtl92e_set_bb_reg(dev, rCCK0_CCA, bit_mask,
+                         (u32)priv->initgain_backup.cca);
 
        RT_TRACE(COMP_DIG, "dm_BBInitialGainRestore 0xc50 is %x\n",
                 priv->initgain_backup.xaagccore1);
@@ -1255,12 +1251,12 @@ static void dm_bb_initialgain_restore(struct net_device *dev)
                 priv->initgain_backup.xdagccore1);
        RT_TRACE(COMP_DIG, "dm_BBInitialGainRestore 0xa0a is %x\n",
                 priv->initgain_backup.cca);
-       rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x1);
+       rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x1);
 
 }
 
 
-void dm_backup_dynamic_mechanism_state(struct net_device *dev)
+void rtl92e_dm_backup_state(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
@@ -1279,13 +1275,13 @@ static void dm_bb_initialgain_backup(struct net_device *dev)
        if (dm_digtable.dig_algorithm == DIG_ALGO_BY_RSSI)
                return;
 
-       rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x8);
-       priv->initgain_backup.xaagccore1 = (u8)rtl8192_QueryBBReg(dev, rOFDM0_XAAGCCore1, bit_mask);
-       priv->initgain_backup.xbagccore1 = (u8)rtl8192_QueryBBReg(dev, rOFDM0_XBAGCCore1, bit_mask);
-       priv->initgain_backup.xcagccore1 = (u8)rtl8192_QueryBBReg(dev, rOFDM0_XCAGCCore1, bit_mask);
-       priv->initgain_backup.xdagccore1 = (u8)rtl8192_QueryBBReg(dev, rOFDM0_XDAGCCore1, bit_mask);
+       rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x8);
+       priv->initgain_backup.xaagccore1 = (u8)rtl92e_get_bb_reg(dev, rOFDM0_XAAGCCore1, bit_mask);
+       priv->initgain_backup.xbagccore1 = (u8)rtl92e_get_bb_reg(dev, rOFDM0_XBAGCCore1, bit_mask);
+       priv->initgain_backup.xcagccore1 = (u8)rtl92e_get_bb_reg(dev, rOFDM0_XCAGCCore1, bit_mask);
+       priv->initgain_backup.xdagccore1 = (u8)rtl92e_get_bb_reg(dev, rOFDM0_XDAGCCore1, bit_mask);
        bit_mask  = bMaskByte2;
-       priv->initgain_backup.cca = (u8)rtl8192_QueryBBReg(dev, rCCK0_CCA, bit_mask);
+       priv->initgain_backup.cca = (u8)rtl92e_get_bb_reg(dev, rCCK0_CCA, bit_mask);
 
        RT_TRACE(COMP_DIG, "BBInitialGainBackup 0xc50 is %x\n",
                 priv->initgain_backup.xaagccore1);
@@ -1376,7 +1372,7 @@ static void dm_ctrl_initgain_byrssi_by_driverrssi(
                fw_dig = 0;
        if (fw_dig <= 3) {
                for (i = 0; i < 3; i++)
-                       rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x8);
+                       rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x8);
                fw_dig++;
                dm_digtable.dig_state = DM_STA_DIG_OFF;
        }
@@ -1410,7 +1406,7 @@ static void dm_ctrl_initgain_byrssi_by_fwfalse_alarm(
        if (dm_digtable.dig_algorithm_switch) {
                dm_digtable.dig_state = DM_STA_DIG_MAX;
                for (i = 0; i < 3; i++)
-                       rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x1);
+                       rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x1);
                dm_digtable.dig_algorithm_switch = 0;
        }
 
@@ -1429,19 +1425,19 @@ static void dm_ctrl_initgain_byrssi_by_fwfalse_alarm(
                dm_digtable.dig_highpwr_state = DM_STA_DIG_MAX;
                dm_digtable.dig_state = DM_STA_DIG_OFF;
 
-               rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x8);
+               rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x8);
 
-               write_nic_byte(dev, rOFDM0_XAAGCCore1, 0x17);
-               write_nic_byte(dev, rOFDM0_XBAGCCore1, 0x17);
-               write_nic_byte(dev, rOFDM0_XCAGCCore1, 0x17);
-               write_nic_byte(dev, rOFDM0_XDAGCCore1, 0x17);
+               rtl92e_writeb(dev, rOFDM0_XAAGCCore1, 0x17);
+               rtl92e_writeb(dev, rOFDM0_XBAGCCore1, 0x17);
+               rtl92e_writeb(dev, rOFDM0_XCAGCCore1, 0x17);
+               rtl92e_writeb(dev, rOFDM0_XDAGCCore1, 0x17);
 
                if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)
-                       write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x00);
+                       rtl92e_writeb(dev, (rOFDM0_XATxAFE+3), 0x00);
                else
-                       write_nic_byte(dev, rOFDM0_RxDetector1, 0x42);
+                       rtl92e_writeb(dev, rOFDM0_RxDetector1, 0x42);
 
-               write_nic_byte(dev, 0xa0a, 0x08);
+               rtl92e_writeb(dev, 0xa0a, 0x08);
 
                return;
        }
@@ -1462,25 +1458,25 @@ static void dm_ctrl_initgain_byrssi_by_fwfalse_alarm(
                dm_digtable.dig_state = DM_STA_DIG_ON;
 
                if (reset_flag == 1) {
-                       write_nic_byte(dev, rOFDM0_XAAGCCore1, 0x2c);
-                       write_nic_byte(dev, rOFDM0_XBAGCCore1, 0x2c);
-                       write_nic_byte(dev, rOFDM0_XCAGCCore1, 0x2c);
-                       write_nic_byte(dev, rOFDM0_XDAGCCore1, 0x2c);
+                       rtl92e_writeb(dev, rOFDM0_XAAGCCore1, 0x2c);
+                       rtl92e_writeb(dev, rOFDM0_XBAGCCore1, 0x2c);
+                       rtl92e_writeb(dev, rOFDM0_XCAGCCore1, 0x2c);
+                       rtl92e_writeb(dev, rOFDM0_XDAGCCore1, 0x2c);
                } else {
-                       write_nic_byte(dev, rOFDM0_XAAGCCore1, 0x20);
-                       write_nic_byte(dev, rOFDM0_XBAGCCore1, 0x20);
-                       write_nic_byte(dev, rOFDM0_XCAGCCore1, 0x20);
-                       write_nic_byte(dev, rOFDM0_XDAGCCore1, 0x20);
+                       rtl92e_writeb(dev, rOFDM0_XAAGCCore1, 0x20);
+                       rtl92e_writeb(dev, rOFDM0_XBAGCCore1, 0x20);
+                       rtl92e_writeb(dev, rOFDM0_XCAGCCore1, 0x20);
+                       rtl92e_writeb(dev, rOFDM0_XDAGCCore1, 0x20);
                }
 
                if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)
-                       write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x20);
+                       rtl92e_writeb(dev, (rOFDM0_XATxAFE+3), 0x20);
                else
-                       write_nic_byte(dev, rOFDM0_RxDetector1, 0x44);
+                       rtl92e_writeb(dev, rOFDM0_RxDetector1, 0x44);
 
-               write_nic_byte(dev, 0xa0a, 0xcd);
+               rtl92e_writeb(dev, 0xa0a, 0xcd);
 
-               rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x1);
+               rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x1);
        }
        dm_ctrl_initgain_byrssi_highpwr(dev);
 }
@@ -1505,9 +1501,9 @@ static void dm_ctrl_initgain_byrssi_highpwr(struct net_device *dev)
                dm_digtable.dig_highpwr_state = DM_STA_DIG_ON;
 
                if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)
-                               write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x10);
+                               rtl92e_writeb(dev, (rOFDM0_XATxAFE+3), 0x10);
                else
-                       write_nic_byte(dev, rOFDM0_RxDetector1, 0x43);
+                       rtl92e_writeb(dev, rOFDM0_RxDetector1, 0x43);
        } else {
                if (dm_digtable.dig_highpwr_state == DM_STA_DIG_OFF &&
                        (priv->reset_count == reset_cnt_highpwr))
@@ -1519,9 +1515,9 @@ static void dm_ctrl_initgain_byrssi_highpwr(struct net_device *dev)
                    (priv->undecorated_smoothed_pwdb >=
                    dm_digtable.rssi_high_thresh)) {
                        if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)
-                               write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x20);
+                               rtl92e_writeb(dev, (rOFDM0_XATxAFE+3), 0x20);
                        else
-                               write_nic_byte(dev, rOFDM0_RxDetector1, 0x44);
+                               rtl92e_writeb(dev, rOFDM0_RxDetector1, 0x44);
                }
        }
        reset_cnt_highpwr = priv->reset_count;
@@ -1568,16 +1564,16 @@ static void dm_initial_gain(struct net_device *dev)
                reset_cnt = priv->reset_count;
        }
 
-       if (dm_digtable.pre_ig_value != read_nic_byte(dev, rOFDM0_XAAGCCore1))
+       if (dm_digtable.pre_ig_value != rtl92e_readb(dev, rOFDM0_XAAGCCore1))
                force_write = 1;
 
        if ((dm_digtable.pre_ig_value != dm_digtable.cur_ig_value)
            || !initialized || force_write) {
                initial_gain = (u8)dm_digtable.cur_ig_value;
-               write_nic_byte(dev, rOFDM0_XAAGCCore1, initial_gain);
-               write_nic_byte(dev, rOFDM0_XBAGCCore1, initial_gain);
-               write_nic_byte(dev, rOFDM0_XCAGCCore1, initial_gain);
-               write_nic_byte(dev, rOFDM0_XDAGCCore1, initial_gain);
+               rtl92e_writeb(dev, rOFDM0_XAAGCCore1, initial_gain);
+               rtl92e_writeb(dev, rOFDM0_XBAGCCore1, initial_gain);
+               rtl92e_writeb(dev, rOFDM0_XCAGCCore1, initial_gain);
+               rtl92e_writeb(dev, rOFDM0_XDAGCCore1, initial_gain);
                dm_digtable.pre_ig_value = dm_digtable.cur_ig_value;
                initialized = 1;
                force_write = 0;
@@ -1630,20 +1626,20 @@ static void dm_pd_th(struct net_device *dev)
            (initialized <= 3) || force_write) {
                if (dm_digtable.curpd_thstate == DIG_PD_AT_LOW_POWER) {
                        if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)
-                               write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x00);
+                               rtl92e_writeb(dev, (rOFDM0_XATxAFE+3), 0x00);
                        else
-                               write_nic_byte(dev, rOFDM0_RxDetector1, 0x42);
+                               rtl92e_writeb(dev, rOFDM0_RxDetector1, 0x42);
                } else if (dm_digtable.curpd_thstate ==
                           DIG_PD_AT_NORMAL_POWER) {
                        if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)
-                               write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x20);
+                               rtl92e_writeb(dev, (rOFDM0_XATxAFE+3), 0x20);
                        else
-                               write_nic_byte(dev, rOFDM0_RxDetector1, 0x44);
+                               rtl92e_writeb(dev, rOFDM0_RxDetector1, 0x44);
                } else if (dm_digtable.curpd_thstate == DIG_PD_AT_HIGH_POWER) {
                        if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)
-                               write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x10);
+                               rtl92e_writeb(dev, (rOFDM0_XATxAFE+3), 0x10);
                        else
-                               write_nic_byte(dev, rOFDM0_RxDetector1, 0x43);
+                               rtl92e_writeb(dev, rOFDM0_RxDetector1, 0x43);
                }
                dm_digtable.prepd_thstate = dm_digtable.curpd_thstate;
                if (initialized <= 3)
@@ -1687,16 +1683,16 @@ static  void dm_cs_ratio(struct net_device *dev)
        if ((dm_digtable.precs_ratio_state != dm_digtable.curcs_ratio_state) ||
            !initialized || force_write) {
                if (dm_digtable.curcs_ratio_state == DIG_CS_RATIO_LOWER)
-                       write_nic_byte(dev, 0xa0a, 0x08);
+                       rtl92e_writeb(dev, 0xa0a, 0x08);
                else if (dm_digtable.curcs_ratio_state == DIG_CS_RATIO_HIGHER)
-                       write_nic_byte(dev, 0xa0a, 0xcd);
+                       rtl92e_writeb(dev, 0xa0a, 0xcd);
                dm_digtable.precs_ratio_state = dm_digtable.curcs_ratio_state;
                initialized = 1;
                force_write = 0;
        }
 }
 
-void dm_init_edca_turbo(struct net_device *dev)
+void rtl92e_dm_init_edca_turbo(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
@@ -1745,21 +1741,19 @@ static void dm_check_edca_turbo(struct net_device *dev)
                        if (curTxOkCnt > 4*curRxOkCnt) {
                                if (priv->bis_cur_rdlstate ||
                                    !priv->bcurrent_turbo_EDCA) {
-                                       write_nic_dword(dev, EDCAPARA_BE,
-                                                edca_setting_UL[pHTInfo->IOTPeer]);
+                                       rtl92e_writel(dev, EDCAPARA_BE,
+                                                     edca_setting_UL[pHTInfo->IOTPeer]);
                                        priv->bis_cur_rdlstate = false;
                                }
                        } else {
                                if (!priv->bis_cur_rdlstate ||
                                    !priv->bcurrent_turbo_EDCA) {
                                        if (priv->rtllib->mode == WIRELESS_MODE_G)
-                                               write_nic_dword(dev,
-                                                               EDCAPARA_BE,
-                                                        edca_setting_DL_GMode[pHTInfo->IOTPeer]);
+                                               rtl92e_writel(dev, EDCAPARA_BE,
+                                                             edca_setting_DL_GMode[pHTInfo->IOTPeer]);
                                        else
-                                               write_nic_dword(dev,
-                                                               EDCAPARA_BE,
-                                                        edca_setting_DL[pHTInfo->IOTPeer]);
+                                               rtl92e_writel(dev, EDCAPARA_BE,
+                                                             edca_setting_DL[pHTInfo->IOTPeer]);
                                        priv->bis_cur_rdlstate = true;
                                }
                        }
@@ -1769,20 +1763,18 @@ static void dm_check_edca_turbo(struct net_device *dev)
                                if (!priv->bis_cur_rdlstate ||
                                    !priv->bcurrent_turbo_EDCA) {
                                        if (priv->rtllib->mode == WIRELESS_MODE_G)
-                                               write_nic_dword(dev,
-                                                               EDCAPARA_BE,
-                                                        edca_setting_DL_GMode[pHTInfo->IOTPeer]);
+                                               rtl92e_writel(dev, EDCAPARA_BE,
+                                                             edca_setting_DL_GMode[pHTInfo->IOTPeer]);
                                        else
-                                               write_nic_dword(dev,
-                                                               EDCAPARA_BE,
-                                                        edca_setting_DL[pHTInfo->IOTPeer]);
+                                               rtl92e_writel(dev, EDCAPARA_BE,
+                                                             edca_setting_DL[pHTInfo->IOTPeer]);
                                        priv->bis_cur_rdlstate = true;
                                }
                        } else {
                                if (priv->bis_cur_rdlstate ||
                                    !priv->bcurrent_turbo_EDCA) {
-                                       write_nic_dword(dev, EDCAPARA_BE,
-                                                       edca_setting_UL[pHTInfo->IOTPeer]);
+                                       rtl92e_writel(dev, EDCAPARA_BE,
+                                                     edca_setting_UL[pHTInfo->IOTPeer]);
                                        priv->bis_cur_rdlstate = false;
                                }
 
@@ -1854,7 +1846,7 @@ static    void    dm_check_pbc_gpio(struct net_device *dev)
 {
 }
 
-void dm_CheckRfCtrlGPIO(void *data)
+static void dm_CheckRfCtrlGPIO(void *data)
 {
        struct r8192_priv *priv = container_of_dwork_rsl(data,
                                  struct r8192_priv, gpio_change_rf_wq);
@@ -1877,7 +1869,7 @@ void dm_CheckRfCtrlGPIO(void *data)
                return;
        }
 
-       tmp1byte = read_nic_byte(dev, GPI);
+       tmp1byte = rtl92e_readb(dev, GPI);
 
        eRfPowerStateToSet = (tmp1byte&BIT1) ?  eRfOn : eRfOff;
 
@@ -1896,8 +1888,7 @@ void dm_CheckRfCtrlGPIO(void *data)
        if (bActuallySet) {
                mdelay(1000);
                priv->bHwRfOffAction = 1;
-               MgntActSet_RF_State(dev, eRfPowerStateToSet, RF_CHANGE_BY_HW,
-                                   true);
+               rtl92e_set_rf_state(dev, eRfPowerStateToSet, RF_CHANGE_BY_HW);
                if (priv->bHwRadioOff)
                        argv[1] = "RFOFF";
                else
@@ -1909,7 +1900,7 @@ void dm_CheckRfCtrlGPIO(void *data)
        }
 }
 
-void   dm_rf_pathcheck_workitemcallback(void *data)
+void rtl92e_dm_rf_pathcheck_wq(void *data)
 {
        struct r8192_priv *priv = container_of_dwork_rsl(data,
                                  struct r8192_priv,
@@ -1917,7 +1908,7 @@ void      dm_rf_pathcheck_workitemcallback(void *data)
        struct net_device *dev = priv->rtllib->dev;
        u8 rfpath = 0, i;
 
-       rfpath = read_nic_byte(dev, 0xc04);
+       rfpath = rtl92e_readb(dev, 0xc04);
 
        for (i = 0; i < RF90_PATH_MAX; i++) {
                if (rfpath & (0x01<<i))
@@ -1974,12 +1965,12 @@ static void dm_rxpath_sel_byrssi(struct net_device *dev)
                return;
 
        if (!cck_Rx_Path_initialized) {
-               DM_RxPathSelTable.cck_Rx_path = (read_nic_byte(dev, 0xa07)&0xf);
+               DM_RxPathSelTable.cck_Rx_path = (rtl92e_readb(dev, 0xa07)&0xf);
                cck_Rx_Path_initialized = 1;
        }
 
        DM_RxPathSelTable.disabledRF = 0xf;
-       DM_RxPathSelTable.disabledRF &= ~(read_nic_byte(dev, 0xc04));
+       DM_RxPathSelTable.disabledRF &= ~(rtl92e_readb(dev, 0xc04));
 
        if (priv->rtllib->mode == WIRELESS_MODE_B)
                DM_RxPathSelTable.cck_method = CCK_Rx_Version_2;
@@ -2116,10 +2107,10 @@ static void dm_rxpath_sel_byrssi(struct net_device *dev)
                     DM_RxPathSelTable.diff_TH) {
                        DM_RxPathSelTable.rf_enable_rssi_th[min_rssi_index] =
                                 tmp_max_rssi+5;
-                       rtl8192_setBBreg(dev, rOFDM0_TRxPathEnable,
-                                0x1<<min_rssi_index, 0x0);
-                       rtl8192_setBBreg(dev, rOFDM1_TRxPathEnable,
-                                0x1<<min_rssi_index, 0x0);
+                       rtl92e_set_bb_reg(dev, rOFDM0_TRxPathEnable,
+                                         0x1<<min_rssi_index, 0x0);
+                       rtl92e_set_bb_reg(dev, rOFDM1_TRxPathEnable,
+                                         0x1<<min_rssi_index, 0x0);
                        disabled_rf_cnt++;
                }
                if (DM_RxPathSelTable.cck_method == CCK_Rx_Version_1) {
@@ -2133,8 +2124,8 @@ static void dm_rxpath_sel_byrssi(struct net_device *dev)
        if (update_cck_rx_path) {
                DM_RxPathSelTable.cck_Rx_path = (cck_default_Rx<<2) |
                                                (cck_optional_Rx);
-               rtl8192_setBBreg(dev, rCCK0_AFESetting, 0x0f000000,
-                                DM_RxPathSelTable.cck_Rx_path);
+               rtl92e_set_bb_reg(dev, rCCK0_AFESetting, 0x0f000000,
+                                 DM_RxPathSelTable.cck_Rx_path);
        }
 
        if (DM_RxPathSelTable.disabledRF) {
@@ -2142,12 +2133,12 @@ static void dm_rxpath_sel_byrssi(struct net_device *dev)
                        if ((DM_RxPathSelTable.disabledRF>>i) & 0x1) {
                                if (tmp_max_rssi >=
                                    DM_RxPathSelTable.rf_enable_rssi_th[i]) {
-                                       rtl8192_setBBreg(dev,
-                                                rOFDM0_TRxPathEnable, 0x1 << i,
-                                                0x1);
-                                       rtl8192_setBBreg(dev,
-                                                rOFDM1_TRxPathEnable,
-                                                0x1 << i, 0x1);
+                                       rtl92e_set_bb_reg(dev,
+                                                         rOFDM0_TRxPathEnable,
+                                                         0x1 << i, 0x1);
+                                       rtl92e_set_bb_reg(dev,
+                                                         rOFDM1_TRxPathEnable,
+                                                         0x1 << i, 0x1);
                                        DM_RxPathSelTable.rf_enable_rssi_th[i]
                                                 = 100;
                                        disabled_rf_cnt--;
@@ -2191,7 +2182,7 @@ static void dm_deInit_fsync(struct net_device *dev)
        del_timer_sync(&priv->fsync_timer);
 }
 
-void dm_fsync_timer_callback(unsigned long data)
+static void dm_fsync_timer_callback(unsigned long data)
 {
        struct net_device *dev = (struct net_device *)data;
        struct r8192_priv *priv = rtllib_priv((struct net_device *)data);
@@ -2252,18 +2243,18 @@ void dm_fsync_timer_callback(unsigned long data)
                        bDoubleTimeInterval = true;
                        priv->bswitch_fsync = !priv->bswitch_fsync;
                        if (priv->bswitch_fsync) {
-                               write_nic_byte(dev, 0xC36, 0x1c);
-                               write_nic_byte(dev, 0xC3e, 0x90);
+                               rtl92e_writeb(dev, 0xC36, 0x1c);
+                               rtl92e_writeb(dev, 0xC3e, 0x90);
                        } else {
-                               write_nic_byte(dev, 0xC36, 0x5c);
-                               write_nic_byte(dev, 0xC3e, 0x96);
+                               rtl92e_writeb(dev, 0xC36, 0x5c);
+                               rtl92e_writeb(dev, 0xC3e, 0x96);
                        }
                } else if (priv->undecorated_smoothed_pwdb <=
                           priv->rtllib->fsync_rssi_threshold) {
                        if (priv->bswitch_fsync) {
                                priv->bswitch_fsync  = false;
-                               write_nic_byte(dev, 0xC36, 0x5c);
-                               write_nic_byte(dev, 0xC3e, 0x96);
+                               rtl92e_writeb(dev, 0xC36, 0x5c);
+                               rtl92e_writeb(dev, 0xC3e, 0x96);
                        }
                }
                if (bDoubleTimeInterval) {
@@ -2283,11 +2274,11 @@ void dm_fsync_timer_callback(unsigned long data)
        } else {
                if (priv->bswitch_fsync) {
                        priv->bswitch_fsync  = false;
-                       write_nic_byte(dev, 0xC36, 0x5c);
-                       write_nic_byte(dev, 0xC3e, 0x96);
+                       rtl92e_writeb(dev, 0xC36, 0x5c);
+                       rtl92e_writeb(dev, 0xC3e, 0x96);
                }
                priv->ContinueDiffCount = 0;
-               write_nic_dword(dev, rOFDM0_RxDetector2, 0x465c52cd);
+               rtl92e_writel(dev, rOFDM0_RxDetector2, 0x465c52cd);
        }
        RT_TRACE(COMP_HALDM, "ContinueDiffCount %d\n", priv->ContinueDiffCount);
        RT_TRACE(COMP_HALDM,
@@ -2302,10 +2293,10 @@ static void dm_StartHWFsync(struct net_device *dev)
        struct r8192_priv *priv = rtllib_priv(dev);
 
        RT_TRACE(COMP_HALDM, "%s\n", __func__);
-       write_nic_dword(dev, rOFDM0_RxDetector2, 0x465c12cf);
+       rtl92e_writel(dev, rOFDM0_RxDetector2, 0x465c12cf);
        priv->rtllib->SetHwRegHandler(dev, HW_VAR_RF_TIMING,
                                      (u8 *)(&rf_timing));
-       write_nic_byte(dev, 0xc3b, 0x41);
+       rtl92e_writeb(dev, 0xc3b, 0x41);
 }
 
 static void dm_EndHWFsync(struct net_device *dev)
@@ -2314,10 +2305,10 @@ static void dm_EndHWFsync(struct net_device *dev)
        struct r8192_priv *priv = rtllib_priv(dev);
 
        RT_TRACE(COMP_HALDM, "%s\n", __func__);
-       write_nic_dword(dev, rOFDM0_RxDetector2, 0x465c52cd);
+       rtl92e_writel(dev, rOFDM0_RxDetector2, 0x465c52cd);
        priv->rtllib->SetHwRegHandler(dev, HW_VAR_RF_TIMING, (u8 *)
                                     (&rf_timing));
-       write_nic_byte(dev, 0xc3b, 0x49);
+       rtl92e_writeb(dev, 0xc3b, 0x49);
 }
 
 static void dm_EndSWFsync(struct net_device *dev)
@@ -2330,13 +2321,13 @@ static void dm_EndSWFsync(struct net_device *dev)
        if (priv->bswitch_fsync) {
                priv->bswitch_fsync  = false;
 
-               write_nic_byte(dev, 0xC36, 0x5c);
+               rtl92e_writeb(dev, 0xC36, 0x5c);
 
-               write_nic_byte(dev, 0xC3e, 0x96);
+               rtl92e_writeb(dev, 0xC3e, 0x96);
        }
 
        priv->ContinueDiffCount = 0;
-       write_nic_dword(dev, rOFDM0_RxDetector2, 0x465c52cd);
+       rtl92e_writel(dev, rOFDM0_RxDetector2, 0x465c52cd);
 }
 
 static void dm_StartSWFsync(struct net_device *dev)
@@ -2371,11 +2362,11 @@ static void dm_StartSWFsync(struct net_device *dev)
                                    msecs_to_jiffies(priv->rtllib->fsync_time_interval);
        add_timer(&priv->fsync_timer);
 
-       write_nic_dword(dev, rOFDM0_RxDetector2, 0x465c12cd);
+       rtl92e_writel(dev, rOFDM0_RxDetector2, 0x465c12cd);
 
 }
 
-void dm_check_fsync(struct net_device *dev)
+static void dm_check_fsync(struct net_device *dev)
 {
 #define        RegC38_Default                  0
 #define        RegC38_NonFsync_Other_AP        1
@@ -2431,7 +2422,7 @@ void dm_check_fsync(struct net_device *dev)
                }
                if (priv->framesyncMonitor) {
                        if (reg_c38_State != RegC38_Fsync_AP_BCM) {
-                               write_nic_byte(dev, rOFDM0_RxDetector3, 0x95);
+                               rtl92e_writeb(dev, rOFDM0_RxDetector3, 0x95);
 
                                reg_c38_State = RegC38_Fsync_AP_BCM;
                        }
@@ -2457,7 +2448,7 @@ void dm_check_fsync(struct net_device *dev)
                                    RegC38_TH) {
                                        if (reg_c38_State !=
                                            RegC38_NonFsync_Other_AP) {
-                                                       write_nic_byte(dev,
+                                                       rtl92e_writeb(dev,
                                                            rOFDM0_RxDetector3,
                                                            0x90);
 
@@ -2467,7 +2458,7 @@ void dm_check_fsync(struct net_device *dev)
                                } else if (priv->undecorated_smoothed_pwdb >=
                                           (RegC38_TH+5)) {
                                        if (reg_c38_State) {
-                                               write_nic_byte(dev,
+                                               rtl92e_writeb(dev,
                                                        rOFDM0_RxDetector3,
                                                        priv->framesync);
                                                reg_c38_State = RegC38_Default;
@@ -2475,8 +2466,8 @@ void dm_check_fsync(struct net_device *dev)
                                }
                        } else {
                                if (reg_c38_State) {
-                                       write_nic_byte(dev, rOFDM0_RxDetector3,
-                                                      priv->framesync);
+                                       rtl92e_writeb(dev, rOFDM0_RxDetector3,
+                                                     priv->framesync);
                                        reg_c38_State = RegC38_Default;
                                }
                        }
@@ -2484,14 +2475,14 @@ void dm_check_fsync(struct net_device *dev)
        }
        if (priv->framesyncMonitor) {
                if (priv->reset_count != reset_cnt) {
-                       write_nic_byte(dev, rOFDM0_RxDetector3,
+                       rtl92e_writeb(dev, rOFDM0_RxDetector3,
                                       priv->framesync);
                        reg_c38_State = RegC38_Default;
                        reset_cnt = priv->reset_count;
                }
        } else {
                if (reg_c38_State) {
-                       write_nic_byte(dev, rOFDM0_RxDetector3,
+                       rtl92e_writeb(dev, rOFDM0_RxDetector3,
                                       priv->framesync);
                        reg_c38_State = RegC38_Default;
                }
@@ -2556,8 +2547,7 @@ static void dm_dynamic_txpower(struct net_device *dev)
                RT_TRACE(COMP_TXAGC, "SetTxPowerLevel8190()  channel = %d\n",
                         priv->rtllib->current_network.channel);
 
-               rtl8192_phy_setTxPower(dev,
-                                priv->rtllib->current_network.channel);
+               rtl92e_set_tx_power(dev, priv->rtllib->current_network.channel);
        }
        priv->bLastDTPFlag_High = priv->bDynamicTxHighPower;
        priv->bLastDTPFlag_Low = priv->bDynamicTxLowPower;
@@ -2569,13 +2559,13 @@ static void dm_check_txrateandretrycount(struct net_device *dev)
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rtllib_device *ieee = priv->rtllib;
 
-       ieee->softmac_stats.CurrentShowTxate = read_nic_byte(dev,
+       ieee->softmac_stats.CurrentShowTxate = rtl92e_readb(dev,
                                                 Current_Tx_Rate_Reg);
 
-       ieee->softmac_stats.last_packet_rate = read_nic_byte(dev,
+       ieee->softmac_stats.last_packet_rate = rtl92e_readb(dev,
                                                 Initial_Tx_Rate_Reg);
 
-       ieee->softmac_stats.txretrycount = read_nic_dword(dev,
+       ieee->softmac_stats.txretrycount = rtl92e_readl(dev,
                                                 Tx_Retry_Count_Reg);
 }
 
@@ -2583,5 +2573,5 @@ static void dm_send_rssi_tofw(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
-       write_nic_byte(dev, DRIVER_RSSI, (u8)priv->undecorated_smoothed_pwdb);
+       rtl92e_writeb(dev, DRIVER_RSSI, (u8)priv->undecorated_smoothed_pwdb);
 }
index b037451c3ada4c5e71543b8a5f78d4bdfad80362..e16502d12cdc5e7e5f6a2295718ed186df85c132 100644 (file)
 #define                DM_DIG_THRESH_HIGH                                      40
 #define                DM_DIG_THRESH_LOW                                       35
 
-#define                DM_FALSEALARM_THRESH_LOW        40
-#define                DM_FALSEALARM_THRESH_HIGH       1000
-
 #define                DM_DIG_HIGH_PWR_THRESH_HIGH             75
 #define                DM_DIG_HIGH_PWR_THRESH_LOW              70
 
 #define                BW_AUTO_SWITCH_HIGH_LOW                 25
 #define                BW_AUTO_SWITCH_LOW_HIGH                 30
 
-#define                DM_check_fsync_time_interval                            500
-
-
 #define                DM_DIG_BACKOFF                          12
 #define                DM_DIG_MAX                                      0x36
 #define                DM_DIG_MIN                                      0x1c
 #define                DM_DIG_MIN_Netcore                      0x12
 
-#define                DM_DIG_BACKOFF_MAX                      12
-#define                DM_DIG_BACKOFF_MIN                      -4
-
 #define                RxPathSelection_SS_TH_low               30
 #define                RxPathSelection_diff_TH                 18
 
@@ -55,8 +46,6 @@
 #define                RateAdaptiveTH_Low_40M          10
 #define                VeryLowRSSI                                     15
 
-#define                CTSToSelfTHVal                                  35
-
 #define                WAIotTHVal                                              25
 
 #define                E_FOR_TX_POWER_TRACK           300
 #define                        Tx_Retry_Count_Reg       0x1ac
 #define                RegC38_TH                                20
 
-#define                TX_POWER_NEAR_FIELD_THRESH_LVL2 74
-#define                TX_POWER_NEAR_FIELD_THRESH_LVL1 67
-
-#define                TxHighPwrLevel_Normal           0
-#define                TxHighPwrLevel_Level1           1
-#define                TxHighPwrLevel_Level2           2
-
-#define                DM_Type_ByFW                    0
 #define                DM_Type_ByDriver                1
 
 /*--------------------------Define Parameters-------------------------------*/
@@ -207,23 +188,20 @@ extern const u8 dm_cck_tx_bb_gain_ch14[CCKTxBBGainTableLength][8];
 /*--------------------------Exported Function prototype---------------------*/
 /*--------------------------Exported Function prototype---------------------*/
 
-extern  void    init_hal_dm(struct net_device *dev);
-extern  void deinit_hal_dm(struct net_device *dev);
+extern  void rtl92e_dm_init(struct net_device *dev);
+extern  void rtl92e_dm_deinit(struct net_device *dev);
 
-extern void hal_dm_watchdog(struct net_device *dev);
+extern void rtl92e_dm_watchdog(struct net_device *dev);
 
 
-extern  void    init_rate_adaptive(struct net_device *dev);
-extern  void    dm_txpower_trackingcallback(void *data);
+extern  void    rtl92e_init_adaptive_rate(struct net_device *dev);
+extern  void    rtl92e_dm_txpower_tracking_wq(void *data);
 
-extern  void dm_cck_txpower_adjust(struct net_device *dev, bool binch14);
+extern  void rtl92e_dm_cck_txpower_adjust(struct net_device *dev, bool binch14);
 
-extern  void    dm_restore_dynamic_mechanism_state(struct net_device *dev);
-extern  void    dm_backup_dynamic_mechanism_state(struct net_device *dev);
-extern  void    dm_init_edca_turbo(struct net_device *dev);
-extern  void    dm_rf_pathcheck_workitemcallback(void *data);
-extern  void dm_fsync_timer_callback(unsigned long data);
-extern  void dm_check_fsync(struct net_device *dev);
-extern  void dm_initialize_txpower_tracking(struct net_device *dev);
-extern  void    dm_CheckRfCtrlGPIO(void *data);
+extern  void    rtl92e_dm_restore_state(struct net_device *dev);
+extern  void    rtl92e_dm_backup_state(struct net_device *dev);
+extern  void    rtl92e_dm_init_edca_turbo(struct net_device *dev);
+extern  void    rtl92e_dm_rf_pathcheck_wq(void *data);
+extern  void rtl92e_dm_init_txpower_tracking(struct net_device *dev);
 #endif /*__R8192UDM_H__ */
index a6778e0853c7251de0ff3efe801a8ba943e22c45..039ccfd41230276f083db2fd700e928f0fb4947b 100644 (file)
 #include "rtl_core.h"
 #include "rtl_eeprom.h"
 
-static void eprom_cs(struct net_device *dev, short bit)
+static void _rtl92e_gpio_write_bit(struct net_device *dev, int no, bool val)
 {
-       if (bit)
-               write_nic_byte(dev, EPROM_CMD,
-                              (1 << EPROM_CS_SHIFT) |
-                              read_nic_byte(dev, EPROM_CMD));
+       u8 reg = rtl92e_readb(dev, EPROM_CMD);
+
+       if (val)
+               reg |= 1 << no;
        else
-               write_nic_byte(dev, EPROM_CMD, read_nic_byte(dev, EPROM_CMD)
-                              & ~(1<<EPROM_CS_SHIFT));
+               reg &= ~(1 << no);
 
+       rtl92e_writeb(dev, EPROM_CMD, reg);
        udelay(EPROM_DELAY);
 }
 
-
-static void eprom_ck_cycle(struct net_device *dev)
+static bool _rtl92e_gpio_get_bit(struct net_device *dev, int no)
 {
-       write_nic_byte(dev, EPROM_CMD,
-                      (1<<EPROM_CK_SHIFT) | read_nic_byte(dev, EPROM_CMD));
-       udelay(EPROM_DELAY);
-       write_nic_byte(dev, EPROM_CMD,
-                      read_nic_byte(dev, EPROM_CMD) & ~(1<<EPROM_CK_SHIFT));
-       udelay(EPROM_DELAY);
-}
+       u8 reg = rtl92e_readb(dev, EPROM_CMD);
 
+       return (reg >> no) & 0x1;
+}
 
-static void eprom_w(struct net_device *dev, short bit)
+static void _rtl92e_eeprom_ck_cycle(struct net_device *dev)
 {
-       if (bit)
-               write_nic_byte(dev, EPROM_CMD, (1<<EPROM_W_SHIFT) |
-                              read_nic_byte(dev, EPROM_CMD));
-       else
-               write_nic_byte(dev, EPROM_CMD, read_nic_byte(dev, EPROM_CMD)
-                              & ~(1<<EPROM_W_SHIFT));
-
-       udelay(EPROM_DELAY);
+       _rtl92e_gpio_write_bit(dev, EPROM_CK_BIT, 1);
+       _rtl92e_gpio_write_bit(dev, EPROM_CK_BIT, 0);
 }
 
-
-static short eprom_r(struct net_device *dev)
+static u16 _rtl92e_eeprom_xfer(struct net_device *dev, u16 data, int tx_len)
 {
-       short bit;
+       u16 ret = 0;
+       int rx_len = 16;
 
-       bit = (read_nic_byte(dev, EPROM_CMD) & (1<<EPROM_R_SHIFT));
-       udelay(EPROM_DELAY);
+       _rtl92e_gpio_write_bit(dev, EPROM_CS_BIT, 1);
+       _rtl92e_eeprom_ck_cycle(dev);
 
-       if (bit)
-               return 1;
-       return 0;
-}
+       while (tx_len--) {
+               _rtl92e_gpio_write_bit(dev, EPROM_W_BIT,
+                                      (data >> tx_len) & 0x1);
+               _rtl92e_eeprom_ck_cycle(dev);
+       }
 
-static void eprom_send_bits_string(struct net_device *dev, short b[], int len)
-{
-       int i;
+       _rtl92e_gpio_write_bit(dev, EPROM_W_BIT, 0);
 
-       for (i = 0; i < len; i++) {
-               eprom_w(dev, b[i]);
-               eprom_ck_cycle(dev);
+       while (rx_len--) {
+               _rtl92e_eeprom_ck_cycle(dev);
+               ret |= _rtl92e_gpio_get_bit(dev, EPROM_R_BIT) << rx_len;
        }
+
+       _rtl92e_gpio_write_bit(dev, EPROM_CS_BIT, 0);
+       _rtl92e_eeprom_ck_cycle(dev);
+
+       return ret;
 }
 
-u32 eprom_read(struct net_device *dev, u32 addr)
+u32 rtl92e_eeprom_read(struct net_device *dev, u32 addr)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
-       short read_cmd[] = {1, 1, 0};
-       short addr_str[8];
-       int i;
-       int addr_len;
-       u32 ret;
-
-       ret = 0;
-       write_nic_byte(dev, EPROM_CMD,
-                      (EPROM_CMD_PROGRAM << EPROM_CMD_OPERATING_MODE_SHIFT));
-       udelay(EPROM_DELAY);
+       u32 ret = 0;
 
-       if (priv->epromtype == EEPROM_93C56) {
-               addr_str[7] = addr & 1;
-               addr_str[6] = addr & (1<<1);
-               addr_str[5] = addr & (1<<2);
-               addr_str[4] = addr & (1<<3);
-               addr_str[3] = addr & (1<<4);
-               addr_str[2] = addr & (1<<5);
-               addr_str[1] = addr & (1<<6);
-               addr_str[0] = addr & (1<<7);
-               addr_len = 8;
-       } else {
-               addr_str[5] = addr & 1;
-               addr_str[4] = addr & (1<<1);
-               addr_str[3] = addr & (1<<2);
-               addr_str[2] = addr & (1<<3);
-               addr_str[1] = addr & (1<<4);
-               addr_str[0] = addr & (1<<5);
-               addr_len = 6;
-       }
-       eprom_cs(dev, 1);
-       eprom_ck_cycle(dev);
-       eprom_send_bits_string(dev, read_cmd, 3);
-       eprom_send_bits_string(dev, addr_str, addr_len);
-
-       eprom_w(dev, 0);
-
-       for (i = 0; i < 16; i++) {
-               eprom_ck_cycle(dev);
-               ret |= (eprom_r(dev)<<(15-i));
-       }
+       rtl92e_writeb(dev, EPROM_CMD,
+                     (EPROM_CMD_PROGRAM << EPROM_CMD_OPERATING_MODE_SHIFT));
+       udelay(EPROM_DELAY);
 
-       eprom_cs(dev, 0);
-       eprom_ck_cycle(dev);
+       /* EEPROM is configured as x16 */
+       if (priv->epromtype == EEPROM_93C56)
+               ret = _rtl92e_eeprom_xfer(dev, (addr & 0xFF) | (0x6 << 8), 11);
+       else
+               ret = _rtl92e_eeprom_xfer(dev, (addr & 0x3F) | (0x6 << 6), 9);
 
-       write_nic_byte(dev, EPROM_CMD,
-                      (EPROM_CMD_NORMAL<<EPROM_CMD_OPERATING_MODE_SHIFT));
+       rtl92e_writeb(dev, EPROM_CMD,
+                     (EPROM_CMD_NORMAL<<EPROM_CMD_OPERATING_MODE_SHIFT));
        return ret;
 }
index adea2b4c7a449eb943caa1c3b326e9d3af57d4a5..8d23aea5fb4f3d11833c5858aa9996011af2860d 100644 (file)
@@ -26,4 +26,4 @@
 
 #define EPROM_DELAY 10
 
-u32 eprom_read(struct net_device *dev, u32 addr);
+u32 rtl92e_eeprom_read(struct net_device *dev, u32 addr);
index 6bbd1c626e24293bec5c25f2fc60c268827c3748..9fcb099e6edd3b28dc26d46e5cc26e0317e656df 100644 (file)
@@ -45,7 +45,7 @@ static void rtl8192_parse_pci_configuration(struct pci_dev *pdev,
        pci_write_config_byte(pdev, 0x70f, tmp);
 }
 
-bool rtl8192_pci_findadapter(struct pci_dev *pdev, struct net_device *dev)
+bool rtl92e_check_adapter(struct pci_dev *pdev, struct net_device *dev)
 {
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
        u16 VenderID;
index e8d5527a5f046d415ddea5c847a1909dc945ce64..6246841bde1555f535178a88721bdd44b10bad79 100644 (file)
@@ -29,6 +29,6 @@
 #include <linux/pci.h>
 
 struct net_device;
-bool rtl8192_pci_findadapter(struct pci_dev *pdev, struct net_device *dev);
+bool rtl92e_check_adapter(struct pci_dev *pdev, struct net_device *dev);
 
 #endif
index e4908672421ce1a1f712f986e68e0a19235490a8..b0268fdc100f4c9e37fb4fedc4f1678118fd6633 100644 (file)
@@ -23,7 +23,7 @@
 #include "rtl_pm.h"
 
 
-int rtl8192E_suspend(struct pci_dev *pdev, pm_message_t state)
+int rtl92e_suspend(struct pci_dev *pdev, pm_message_t state)
 {
        struct net_device *dev = pci_get_drvdata(pdev);
        struct r8192_priv *priv = rtllib_priv(dev);
@@ -45,16 +45,16 @@ int rtl8192E_suspend(struct pci_dev *pdev, pm_message_t state)
        netif_device_detach(dev);
 
        if (!priv->rtllib->bSupportRemoteWakeUp) {
-               MgntActSet_RF_State(dev, eRfOff, RF_CHANGE_BY_INIT, true);
-               ulRegRead = read_nic_dword(dev, CPU_GEN);
+               rtl92e_set_rf_state(dev, eRfOff, RF_CHANGE_BY_INIT);
+               ulRegRead = rtl92e_readl(dev, CPU_GEN);
                ulRegRead |= CPU_GEN_SYSTEM_RESET;
-               write_nic_dword(dev, CPU_GEN, ulRegRead);
+               rtl92e_writel(dev, CPU_GEN, ulRegRead);
        } else {
-               write_nic_dword(dev, WFCRC0, 0xffffffff);
-               write_nic_dword(dev, WFCRC1, 0xffffffff);
-               write_nic_dword(dev, WFCRC2, 0xffffffff);
-               write_nic_byte(dev, PMR, 0x5);
-               write_nic_byte(dev, MacBlkCtrl, 0xa);
+               rtl92e_writel(dev, WFCRC0, 0xffffffff);
+               rtl92e_writel(dev, WFCRC1, 0xffffffff);
+               rtl92e_writel(dev, WFCRC2, 0xffffffff);
+               rtl92e_writeb(dev, PMR, 0x5);
+               rtl92e_writeb(dev, MacBlkCtrl, 0xa);
        }
 out_pci_suspend:
        netdev_info(dev, "WOL is %s\n", priv->rtllib->bSupportRemoteWakeUp ?
@@ -70,7 +70,7 @@ out_pci_suspend:
        return 0;
 }
 
-int rtl8192E_resume(struct pci_dev *pdev)
+int rtl92e_resume(struct pci_dev *pdev)
 {
        struct net_device *dev = pci_get_drvdata(pdev);
        struct r8192_priv *priv = rtllib_priv(dev);
@@ -95,7 +95,7 @@ int rtl8192E_resume(struct pci_dev *pdev)
        pci_enable_wake(pdev, PCI_D0, 0);
 
        if (priv->polling_timer_on == 0)
-               check_rfctrl_gpio_timer((unsigned long)dev);
+               rtl92e_check_rfctrl_gpio_timer((unsigned long)dev);
 
        if (!netif_running(dev)) {
                netdev_info(dev,
@@ -108,7 +108,7 @@ int rtl8192E_resume(struct pci_dev *pdev)
                dev->netdev_ops->ndo_open(dev);
 
        if (!priv->rtllib->bSupportRemoteWakeUp)
-               MgntActSet_RF_State(dev, eRfOn, RF_CHANGE_BY_INIT, true);
+               rtl92e_set_rf_state(dev, eRfOn, RF_CHANGE_BY_INIT);
 
 out:
        RT_TRACE(COMP_POWER, "<================r8192E resume call.\n");
index 7bfe44817f230d8e1d0f721538d88b1ce4cfc9da..cdc45f7fb33934a2d419c86e25af73bd8f48c1be 100644 (file)
@@ -23,7 +23,7 @@
 #include <linux/types.h>
 #include <linux/pci.h>
 
-int rtl8192E_suspend(struct pci_dev *dev, pm_message_t state);
-int rtl8192E_resume(struct pci_dev *dev);
+int rtl92e_suspend(struct pci_dev *dev, pm_message_t state);
+int rtl92e_resume(struct pci_dev *dev);
 
 #endif
index 404cb83153d9409d5c0111b50817579d0256eb66..f09560d60dc4f2c96add5d3c33c356988506441a 100644 (file)
@@ -45,10 +45,10 @@ static void rtl8192_hw_sleep_down(struct net_device *dev)
        spin_unlock_irqrestore(&priv->rf_ps_lock, flags);
        RT_TRACE(COMP_DBG, "%s()============>come to sleep down\n", __func__);
 
-       MgntActSet_RF_State(dev, eRfSleep, RF_CHANGE_BY_PS, false);
+       rtl92e_set_rf_state(dev, eRfSleep, RF_CHANGE_BY_PS);
 }
 
-void rtl8192_hw_sleep_wq(void *data)
+void rtl92e_hw_sleep_wq(void *data)
 {
        struct rtllib_device *ieee = container_of_dwork_rsl(data,
                                     struct rtllib_device, hw_sleep_wq);
@@ -57,7 +57,7 @@ void rtl8192_hw_sleep_wq(void *data)
        rtl8192_hw_sleep_down(dev);
 }
 
-void rtl8192_hw_wakeup(struct net_device *dev)
+void rtl92e_hw_wakeup(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        unsigned long flags = 0;
@@ -66,7 +66,7 @@ void rtl8192_hw_wakeup(struct net_device *dev)
        if (priv->RFChangeInProgress) {
                spin_unlock_irqrestore(&priv->rf_ps_lock, flags);
                RT_TRACE(COMP_DBG,
-                        "rtl8192_hw_wakeup(): RF Change in progress!\n");
+                        "rtl92e_hw_wakeup(): RF Change in progress!\n");
                queue_delayed_work_rsl(priv->rtllib->wq,
                                       &priv->rtllib->hw_wakeup_wq,
                                       msecs_to_jiffies(10));
@@ -74,21 +74,21 @@ void rtl8192_hw_wakeup(struct net_device *dev)
        }
        spin_unlock_irqrestore(&priv->rf_ps_lock, flags);
        RT_TRACE(COMP_PS, "%s()============>come to wake up\n", __func__);
-       MgntActSet_RF_State(dev, eRfOn, RF_CHANGE_BY_PS, false);
+       rtl92e_set_rf_state(dev, eRfOn, RF_CHANGE_BY_PS);
 }
 
-void rtl8192_hw_wakeup_wq(void *data)
+void rtl92e_hw_wakeup_wq(void *data)
 {
        struct rtllib_device *ieee = container_of_dwork_rsl(data,
                                     struct rtllib_device, hw_wakeup_wq);
        struct net_device *dev = ieee->dev;
 
-       rtl8192_hw_wakeup(dev);
+       rtl92e_hw_wakeup(dev);
 }
 
 #define MIN_SLEEP_TIME 50
 #define MAX_SLEEP_TIME 10000
-void rtl8192_hw_to_sleep(struct net_device *dev, u64 time)
+void rtl92e_enter_sleep(struct net_device *dev, u64 time)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
@@ -133,14 +133,13 @@ static void InactivePsWorkItemCallback(struct net_device *dev)
 
        RT_TRACE(COMP_PS, "InactivePsWorkItemCallback(): Set RF to %s.\n",
                 pPSC->eInactivePowerState == eRfOff ? "OFF" : "ON");
-       MgntActSet_RF_State(dev, pPSC->eInactivePowerState, RF_CHANGE_BY_IPS,
-                           false);
+       rtl92e_set_rf_state(dev, pPSC->eInactivePowerState, RF_CHANGE_BY_IPS);
 
        pPSC->bSwRfProcessing = false;
        RT_TRACE(COMP_PS, "InactivePsWorkItemCallback() <---------\n");
 }
 
-void IPSEnter(struct net_device *dev)
+void rtl92e_ips_enter(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rt_pwr_save_ctrl *pPSC = (struct rt_pwr_save_ctrl *)
@@ -152,7 +151,7 @@ void IPSEnter(struct net_device *dev)
                if (rtState == eRfOn && !pPSC->bSwRfProcessing &&
                        (priv->rtllib->state != RTLLIB_LINKED) &&
                        (priv->rtllib->iw_mode != IW_MODE_MASTER)) {
-                       RT_TRACE(COMP_PS, "IPSEnter(): Turn off RF.\n");
+                       RT_TRACE(COMP_PS, "rtl92e_ips_enter(): Turn off RF.\n");
                        pPSC->eInactivePowerState = eRfOff;
                        priv->isRFOff = true;
                        priv->bInPowerSaveMode = true;
@@ -161,7 +160,7 @@ void IPSEnter(struct net_device *dev)
        }
 }
 
-void IPSLeave(struct net_device *dev)
+void rtl92e_ips_leave(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rt_pwr_save_ctrl *pPSC = (struct rt_pwr_save_ctrl *)
@@ -172,7 +171,7 @@ void IPSLeave(struct net_device *dev)
                rtState = priv->rtllib->eRFPowerState;
                if (rtState != eRfOn  && !pPSC->bSwRfProcessing &&
                    priv->rtllib->RfOffReason <= RF_CHANGE_BY_IPS) {
-                       RT_TRACE(COMP_PS, "IPSLeave(): Turn on RF.\n");
+                       RT_TRACE(COMP_PS, "rtl92e_ips_leave(): Turn on RF.\n");
                        pPSC->eInactivePowerState = eRfOn;
                        priv->bInPowerSaveMode = false;
                        InactivePsWorkItemCallback(dev);
@@ -180,7 +179,7 @@ void IPSLeave(struct net_device *dev)
        }
 }
 
-void IPSLeave_wq(void *data)
+void rtl92e_ips_leave_wq(void *data)
 {
        struct rtllib_device *ieee = container_of_work_rsl(data,
                                     struct rtllib_device, ips_leave_wq);
@@ -188,11 +187,11 @@ void IPSLeave_wq(void *data)
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
 
        down(&priv->rtllib->ips_sem);
-       IPSLeave(dev);
+       rtl92e_ips_leave(dev);
        up(&priv->rtllib->ips_sem);
 }
 
-void rtllib_ips_leave_wq(struct net_device *dev)
+void rtl92e_rtllib_ips_leave_wq(struct net_device *dev)
 {
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
        enum rt_rf_power_state rtState;
@@ -206,7 +205,7 @@ void rtllib_ips_leave_wq(struct net_device *dev)
                                            __func__);
                                return;
                        }
-                       netdev_info(dev, "=========>%s(): IPSLeave\n",
+                       netdev_info(dev, "=========>%s(): rtl92e_ips_leave\n",
                                    __func__);
                        queue_work_rsl(priv->rtllib->wq,
                                       &priv->rtllib->ips_leave_wq);
@@ -214,12 +213,12 @@ void rtllib_ips_leave_wq(struct net_device *dev)
        }
 }
 
-void rtllib_ips_leave(struct net_device *dev)
+void rtl92e_rtllib_ips_leave(struct net_device *dev)
 {
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
 
        down(&priv->rtllib->ips_sem);
-       IPSLeave(dev);
+       rtl92e_ips_leave(dev);
        up(&priv->rtllib->ips_sem);
 }
 
@@ -238,7 +237,7 @@ static bool MgntActSet_802_11_PowerSaveMode(struct net_device *dev,
            rtPsMode == RTLLIB_PS_DISABLED) {
                unsigned long flags;
 
-               rtl8192_hw_wakeup(dev);
+               rtl92e_hw_wakeup(dev);
                priv->rtllib->sta_sleep = LPS_IS_WAKE;
 
                spin_lock_irqsave(&(priv->rtllib->mgmt_tx_lock), flags);
@@ -251,13 +250,13 @@ static bool MgntActSet_802_11_PowerSaveMode(struct net_device *dev,
        return true;
 }
 
-void LeisurePSEnter(struct net_device *dev)
+void rtl92e_leisure_ps_enter(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rt_pwr_save_ctrl *pPSC = (struct rt_pwr_save_ctrl *)
                                        &(priv->rtllib->PowerSaveControl);
 
-       RT_TRACE(COMP_PS, "LeisurePSEnter()...\n");
+       RT_TRACE(COMP_PS, "rtl92e_leisure_ps_enter()...\n");
        RT_TRACE(COMP_PS,
                 "pPSC->bLeisurePs = %d, ieee->ps = %d,pPSC->LpsIdleCount is %d,RT_CHECK_FOR_HANG_PERIOD is %d\n",
                 pPSC->bLeisurePs, priv->rtllib->ps, pPSC->LpsIdleCount,
@@ -275,7 +274,7 @@ void LeisurePSEnter(struct net_device *dev)
                        if (priv->rtllib->ps == RTLLIB_PS_DISABLED) {
 
                                RT_TRACE(COMP_LPS,
-                                        "LeisurePSEnter(): Enter 802.11 power save mode...\n");
+                                        "rtl92e_leisure_ps_enter(): Enter 802.11 power save mode...\n");
 
                                if (!pPSC->bFwCtrlLPS) {
                                        if (priv->rtllib->SetFwCmdHandler)
@@ -291,21 +290,21 @@ void LeisurePSEnter(struct net_device *dev)
        }
 }
 
-void LeisurePSLeave(struct net_device *dev)
+void rtl92e_leisure_ps_leave(struct net_device *dev)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rt_pwr_save_ctrl *pPSC = (struct rt_pwr_save_ctrl *)
                                        &(priv->rtllib->PowerSaveControl);
 
 
-       RT_TRACE(COMP_PS, "LeisurePSLeave()...\n");
+       RT_TRACE(COMP_PS, "rtl92e_leisure_ps_leave()...\n");
        RT_TRACE(COMP_PS, "pPSC->bLeisurePs = %d, ieee->ps = %d\n",
                pPSC->bLeisurePs, priv->rtllib->ps);
 
        if (pPSC->bLeisurePs) {
                if (priv->rtllib->ps != RTLLIB_PS_DISABLED) {
                        RT_TRACE(COMP_LPS,
-                                "LeisurePSLeave(): Busy Traffic , Leave 802.11 power save..\n");
+                                "rtl92e_leisure_ps_leave(): Busy Traffic , Leave 802.11 power save..\n");
                        MgntActSet_802_11_PowerSaveMode(dev,
                                         RTLLIB_PS_DISABLED);
 
index 962f2e5b8bf826b420e26fad94615733ba56ceb8..35fc9e2a3365ba9b7c38a7923b28dd039bb42878 100644 (file)
 struct net_device;
 
 #define RT_CHECK_FOR_HANG_PERIOD 2
-#define INIT_DEFAULT_CHAN       1
 
-void rtl8192_hw_wakeup(struct net_device *dev);
-void rtl8192_hw_to_sleep(struct net_device *dev, u64 time);
-void rtllib_ips_leave_wq(struct net_device *dev);
-void rtllib_ips_leave(struct net_device *dev);
-void IPSLeave_wq(void *data);
+void rtl92e_hw_wakeup(struct net_device *dev);
+void rtl92e_enter_sleep(struct net_device *dev, u64 time);
+void rtl92e_rtllib_ips_leave_wq(struct net_device *dev);
+void rtl92e_rtllib_ips_leave(struct net_device *dev);
+void rtl92e_ips_leave_wq(void *data);
 
-void IPSEnter(struct net_device *dev);
-void IPSLeave(struct net_device *dev);
+void rtl92e_ips_enter(struct net_device *dev);
+void rtl92e_ips_leave(struct net_device *dev);
 
-void LeisurePSEnter(struct net_device *dev);
-void LeisurePSLeave(struct net_device *dev);
+void rtl92e_leisure_ps_enter(struct net_device *dev);
+void rtl92e_leisure_ps_leave(struct net_device *dev);
 
 #endif
index f5e4961677d2f5f74d2eebe79ee37c4b89fd6b00..7e3ca7ef997b9f5a5e8a22caf200c7c052e499c2 100644 (file)
@@ -192,7 +192,7 @@ static int r8192_wx_adapter_power_status(struct net_device *dev,
                pPSC->bLeisurePs = true;
        } else {
                if (priv->rtllib->state == RTLLIB_LINKED)
-                       LeisurePSLeave(dev);
+                       rtl92e_leisure_ps_leave(dev);
 
                priv->ps_force = true;
                pPSC->bLeisurePs = false;
@@ -282,10 +282,11 @@ static int r8192_wx_set_mode(struct net_device *dev, struct iw_request_info *a,
                                        up(&priv->wx_sem);
                                        return -1;
                                }
-                               netdev_info(dev,  "=========>%s(): IPSLeave\n",
+                               netdev_info(dev,
+                                           "=========>%s(): rtl92e_ips_leave\n",
                                            __func__);
                                down(&priv->rtllib->ips_sem);
-                               IPSLeave(dev);
+                               rtl92e_ips_leave(dev);
                                up(&priv->rtllib->ips_sem);
                        }
                }
@@ -442,10 +443,11 @@ static int r8192_wx_set_scan(struct net_device *dev, struct iw_request_info *a,
                                        up(&priv->wx_sem);
                                        return -1;
                                }
-                               RT_TRACE(COMP_PS, "=========>%s(): IPSLeave\n",
+                               RT_TRACE(COMP_PS,
+                                        "=========>%s(): rtl92e_ips_leave\n",
                                         __func__);
                                down(&priv->rtllib->ips_sem);
-                               IPSLeave(dev);
+                               rtl92e_ips_leave(dev);
                                up(&priv->rtllib->ips_sem);
                        }
                }
@@ -700,7 +702,7 @@ static int r8192_wx_set_enc(struct net_device *dev,
 
        priv->rtllib->wx_set_enc = 1;
        down(&priv->rtllib->ips_sem);
-       IPSLeave(dev);
+       rtl92e_ips_leave(dev);
        up(&priv->rtllib->ips_sem);
        down(&priv->wx_sem);
 
@@ -711,7 +713,7 @@ static int r8192_wx_set_enc(struct net_device *dev,
 
        if (wrqu->encoding.flags & IW_ENCODE_DISABLED) {
                ieee->pairwise_key_type = ieee->group_key_type = KEY_TYPE_NA;
-               CamResetAllEntry(dev);
+               rtl92e_cam_reset(dev);
                memset(priv->rtllib->swcamtable, 0,
                       sizeof(struct sw_cam_table) * 32);
                goto end_hw_sec;
@@ -729,9 +731,6 @@ static int r8192_wx_set_enc(struct net_device *dev,
                        hwkey[i] |= (key[4 * i + 3] & mask) << 24;
                }
 
-               #define CONF_WEP40  0x4
-               #define CONF_WEP104 0x14
-
                switch (wrqu->encoding.flags & IW_ENCODE_INDEX) {
                case 0:
                        key_idx = ieee->crypt_info.tx_keyidx;
@@ -753,16 +752,16 @@ static int r8192_wx_set_enc(struct net_device *dev,
                }
                if (wrqu->encoding.length == 0x5) {
                        ieee->pairwise_key_type = KEY_TYPE_WEP40;
-                       EnableHWSecurityConfig8192(dev);
+                       rtl92e_enable_hw_security_config(dev);
                }
 
                else if (wrqu->encoding.length == 0xd) {
                        ieee->pairwise_key_type = KEY_TYPE_WEP104;
-                               EnableHWSecurityConfig8192(dev);
-                       setKey(dev, key_idx, key_idx, KEY_TYPE_WEP104,
-                              zero_addr[key_idx], 0, hwkey);
-                       set_swcam(dev, key_idx, key_idx, KEY_TYPE_WEP104,
-                                 zero_addr[key_idx], 0, hwkey, 0);
+                               rtl92e_enable_hw_security_config(dev);
+                       rtl92e_set_key(dev, key_idx, key_idx, KEY_TYPE_WEP104,
+                                      zero_addr[key_idx], 0, hwkey);
+                       rtl92e_set_swcam(dev, key_idx, key_idx, KEY_TYPE_WEP104,
+                                        zero_addr[key_idx], 0, hwkey, 0);
                } else {
                        netdev_info(dev,
                                    "wrong type in WEP, not WEP40 and WEP104\n");
@@ -821,17 +820,13 @@ static int r8192_wx_set_retry(struct net_device *dev,
        }
        if (wrqu->retry.flags & IW_RETRY_MAX) {
                priv->retry_rts = wrqu->retry.value;
-               DMESG("Setting retry for RTS/CTS data to %d",
-                     wrqu->retry.value);
 
        } else {
                priv->retry_data = wrqu->retry.value;
-               DMESG("Setting retry for non RTS/CTS data to %d",
-                     wrqu->retry.value);
        }
 
 
-       rtl8192_commit(dev);
+       rtl92e_commit(dev);
 exit:
        up(&priv->wx_sem);
 
@@ -917,7 +912,7 @@ static int r8192_wx_set_enc_ext(struct net_device *dev,
 
        priv->rtllib->wx_set_enc = 1;
        down(&priv->rtllib->ips_sem);
-       IPSLeave(dev);
+       rtl92e_ips_leave(dev);
        up(&priv->rtllib->ips_sem);
 
        ret = rtllib_wx_set_encode_ext(ieee, info, wrqu, extra);
@@ -933,7 +928,7 @@ static int r8192_wx_set_enc_ext(struct net_device *dev,
                     ext->alg == IW_ENCODE_ALG_NONE) {
                        ieee->pairwise_key_type = ieee->group_key_type
                                                = KEY_TYPE_NA;
-                       CamResetAllEntry(dev);
+                       rtl92e_cam_reset(dev);
                        memset(priv->rtllib->swcamtable, 0,
                               sizeof(struct sw_cam_table) * 32);
                        goto end_hw_sec;
@@ -950,28 +945,29 @@ static int r8192_wx_set_enc_ext(struct net_device *dev,
                        if ((ext->key_len == 13) && (alg == KEY_TYPE_WEP40))
                                alg = KEY_TYPE_WEP104;
                        ieee->pairwise_key_type = alg;
-                       EnableHWSecurityConfig8192(dev);
+                       rtl92e_enable_hw_security_config(dev);
                }
                memcpy((u8 *)key, ext->key, 16);
 
                if ((alg & KEY_TYPE_WEP40) && (ieee->auth_mode != 2)) {
                        if (ext->key_len == 13)
                                ieee->pairwise_key_type = alg = KEY_TYPE_WEP104;
-                       setKey(dev, idx, idx, alg, zero, 0, key);
-                       set_swcam(dev, idx, idx, alg, zero, 0, key, 0);
+                       rtl92e_set_key(dev, idx, idx, alg, zero, 0, key);
+                       rtl92e_set_swcam(dev, idx, idx, alg, zero, 0, key, 0);
                } else if (group) {
                        ieee->group_key_type = alg;
-                       setKey(dev, idx, idx, alg, broadcast_addr, 0, key);
-                       set_swcam(dev, idx, idx, alg, broadcast_addr, 0,
-                                 key, 0);
+                       rtl92e_set_key(dev, idx, idx, alg, broadcast_addr, 0,
+                                      key);
+                       rtl92e_set_swcam(dev, idx, idx, alg, broadcast_addr, 0,
+                                        key, 0);
                } else {
                        if ((ieee->pairwise_key_type == KEY_TYPE_CCMP) &&
                             ieee->pHTInfo->bCurrentHTSupport)
-                               write_nic_byte(dev, 0x173, 1);
-                       setKey(dev, 4, idx, alg, (u8 *)ieee->ap_mac_addr,
-                              0, key);
-                       set_swcam(dev, 4, idx, alg, (u8 *)ieee->ap_mac_addr,
-                                 0, key, 0);
+                               rtl92e_writeb(dev, 0x173, 1);
+                       rtl92e_set_key(dev, 4, idx, alg,
+                                      (u8 *)ieee->ap_mac_addr, 0, key);
+                       rtl92e_set_swcam(dev, 4, idx, alg,
+                                        (u8 *)ieee->ap_mac_addr, 0, key, 0);
                }
 
 
@@ -1119,41 +1115,41 @@ static int r8192_wx_get_PromiscuousMode(struct net_device *dev,
 }
 
 
-#define IW_IOCTL(x) [(x)-SIOCSIWCOMMIT]
+#define IW_IOCTL(x) ((x) - SIOCSIWCOMMIT)
 static iw_handler r8192_wx_handlers[] = {
-       IW_IOCTL(SIOCGIWNAME) = r8192_wx_get_name,
-       IW_IOCTL(SIOCSIWFREQ) = r8192_wx_set_freq,
-       IW_IOCTL(SIOCGIWFREQ) = r8192_wx_get_freq,
-       IW_IOCTL(SIOCSIWMODE) = r8192_wx_set_mode,
-       IW_IOCTL(SIOCGIWMODE) = r8192_wx_get_mode,
-       IW_IOCTL(SIOCSIWSENS) = r8192_wx_set_sens,
-       IW_IOCTL(SIOCGIWSENS) = r8192_wx_get_sens,
-       IW_IOCTL(SIOCGIWRANGE) = rtl8192_wx_get_range,
-       IW_IOCTL(SIOCSIWAP) = r8192_wx_set_wap,
-       IW_IOCTL(SIOCGIWAP) = r8192_wx_get_wap,
-       IW_IOCTL(SIOCSIWSCAN) = r8192_wx_set_scan,
-       IW_IOCTL(SIOCGIWSCAN) = r8192_wx_get_scan,
-       IW_IOCTL(SIOCSIWESSID) = r8192_wx_set_essid,
-       IW_IOCTL(SIOCGIWESSID) = r8192_wx_get_essid,
-       IW_IOCTL(SIOCSIWNICKN) = r8192_wx_set_nick,
-               IW_IOCTL(SIOCGIWNICKN) = r8192_wx_get_nick,
-       IW_IOCTL(SIOCSIWRATE) = r8192_wx_set_rate,
-       IW_IOCTL(SIOCGIWRATE) = r8192_wx_get_rate,
-       IW_IOCTL(SIOCSIWRTS) = r8192_wx_set_rts,
-       IW_IOCTL(SIOCGIWRTS) = r8192_wx_get_rts,
-       IW_IOCTL(SIOCSIWFRAG) = r8192_wx_set_frag,
-       IW_IOCTL(SIOCGIWFRAG) = r8192_wx_get_frag,
-       IW_IOCTL(SIOCSIWRETRY) = r8192_wx_set_retry,
-       IW_IOCTL(SIOCGIWRETRY) = r8192_wx_get_retry,
-       IW_IOCTL(SIOCSIWENCODE) = r8192_wx_set_enc,
-       IW_IOCTL(SIOCGIWENCODE) = r8192_wx_get_enc,
-       IW_IOCTL(SIOCSIWPOWER) = r8192_wx_set_power,
-       IW_IOCTL(SIOCGIWPOWER) = r8192_wx_get_power,
-       IW_IOCTL(SIOCSIWGENIE) = r8192_wx_set_gen_ie,
-       IW_IOCTL(SIOCGIWGENIE) = r8192_wx_get_gen_ie,
-       IW_IOCTL(SIOCSIWMLME) = r8192_wx_set_mlme,
-       IW_IOCTL(SIOCSIWAUTH) = r8192_wx_set_auth,
-       IW_IOCTL(SIOCSIWENCODEEXT) = r8192_wx_set_enc_ext,
+       [IW_IOCTL(SIOCGIWNAME)] = r8192_wx_get_name,
+       [IW_IOCTL(SIOCSIWFREQ)] = r8192_wx_set_freq,
+       [IW_IOCTL(SIOCGIWFREQ)] = r8192_wx_get_freq,
+       [IW_IOCTL(SIOCSIWMODE)] = r8192_wx_set_mode,
+       [IW_IOCTL(SIOCGIWMODE)] = r8192_wx_get_mode,
+       [IW_IOCTL(SIOCSIWSENS)] = r8192_wx_set_sens,
+       [IW_IOCTL(SIOCGIWSENS)] = r8192_wx_get_sens,
+       [IW_IOCTL(SIOCGIWRANGE)] = rtl8192_wx_get_range,
+       [IW_IOCTL(SIOCSIWAP)] = r8192_wx_set_wap,
+       [IW_IOCTL(SIOCGIWAP)] = r8192_wx_get_wap,
+       [IW_IOCTL(SIOCSIWSCAN)] = r8192_wx_set_scan,
+       [IW_IOCTL(SIOCGIWSCAN)] = r8192_wx_get_scan,
+       [IW_IOCTL(SIOCSIWESSID)] = r8192_wx_set_essid,
+       [IW_IOCTL(SIOCGIWESSID)] = r8192_wx_get_essid,
+       [IW_IOCTL(SIOCSIWNICKN)] = r8192_wx_set_nick,
+       [IW_IOCTL(SIOCGIWNICKN)] = r8192_wx_get_nick,
+       [IW_IOCTL(SIOCSIWRATE)] = r8192_wx_set_rate,
+       [IW_IOCTL(SIOCGIWRATE)] = r8192_wx_get_rate,
+       [IW_IOCTL(SIOCSIWRTS)] = r8192_wx_set_rts,
+       [IW_IOCTL(SIOCGIWRTS)] = r8192_wx_get_rts,
+       [IW_IOCTL(SIOCSIWFRAG)] = r8192_wx_set_frag,
+       [IW_IOCTL(SIOCGIWFRAG)] = r8192_wx_get_frag,
+       [IW_IOCTL(SIOCSIWRETRY)] = r8192_wx_set_retry,
+       [IW_IOCTL(SIOCGIWRETRY)] = r8192_wx_get_retry,
+       [IW_IOCTL(SIOCSIWENCODE)] = r8192_wx_set_enc,
+       [IW_IOCTL(SIOCGIWENCODE)] = r8192_wx_get_enc,
+       [IW_IOCTL(SIOCSIWPOWER)] = r8192_wx_set_power,
+       [IW_IOCTL(SIOCGIWPOWER)] = r8192_wx_get_power,
+       [IW_IOCTL(SIOCSIWGENIE)] = r8192_wx_set_gen_ie,
+       [IW_IOCTL(SIOCGIWGENIE)] = r8192_wx_get_gen_ie,
+       [IW_IOCTL(SIOCSIWMLME)] = r8192_wx_set_mlme,
+       [IW_IOCTL(SIOCSIWAUTH)] = r8192_wx_set_auth,
+       [IW_IOCTL(SIOCSIWENCODEEXT)] = r8192_wx_set_enc_ext,
 };
 
 /* the following rule need to be following,
index 613e14c12df36496b3268522bb7e04b2df71d300..89466646515279af44141667d33ad13f09526dc9 100644 (file)
 #ifndef _BATYPE_H_
 #define _BATYPE_H_
 
-#define                TOTAL_TXBA_NUM  16
-#define        TOTAL_RXBA_NUM  16
-
 #define        BA_SETUP_TIMEOUT        200
-#define        BA_INACT_TIMEOUT        60000
 
 #define        BA_POLICY_DELAYED               0
 #define        BA_POLICY_IMMEDIATE     1
@@ -32,7 +28,6 @@
 #define        ADDBA_STATUS_REFUSED            37
 #define        ADDBA_STATUS_INVALID_PARAM      38
 
-#define        DELBA_REASON_QSTA_LEAVING       36
 #define        DELBA_REASON_END_BA                     37
 #define        DELBA_REASON_UNKNOWN_BA 38
 #define        DELBA_REASON_TIMEOUT                    39
index 60f536c295abe3ddb43e0373357b1a51a6ea1513..78ede4a817fc6a39b81c7b8c21ef2f8d7f112880 100644 (file)
@@ -428,7 +428,6 @@ int rtllib_rx_DELBA(struct rtllib_device *ieee, struct sk_buff *skb)
 {
         struct rtllib_hdr_3addr *delba = NULL;
        union delba_param_set *pDelBaParamSet = NULL;
-       u16 *pReasonCode = NULL;
        u8 *dst = NULL;
 
        if (skb->len < sizeof(struct rtllib_hdr_3addr) + 6) {
@@ -453,9 +452,7 @@ int rtllib_rx_DELBA(struct rtllib_device *ieee, struct sk_buff *skb)
 #endif
        delba = (struct rtllib_hdr_3addr *)skb->data;
        dst = (u8 *)(&delba->addr2[0]);
-       delba += sizeof(struct rtllib_hdr_3addr);
-       pDelBaParamSet = (union delba_param_set *)(delba+2);
-       pReasonCode = (u16 *)(delba+4);
+       pDelBaParamSet = (union delba_param_set *)&delba->payload[2];
 
        if (pDelBaParamSet->field.Initiator == 1) {
                struct rx_ts_record *pRxTs;
index 0c263d9f724639b1b66f5e216ae4bf49b9be2db0..51711dcdc8ef40d41f82ad790e60ca343ed73cd1 100644 (file)
@@ -20,8 +20,6 @@
 #define _RTL819XU_HTTYPE_H_
 
 #define MIMO_PS_STATIC                         0
-#define MIMO_PS_DYNAMIC                        1
-#define MIMO_PS_NOLIMIT                        3
 
 #define sHTCLng        4
 
index b5c3647b0f80492af8996c0b717962126b36b57b..555745b2a75e47c4224691f5e923722ecb5b2632 100644 (file)
@@ -117,7 +117,7 @@ void HTUpdateDefaultSetting(struct rtllib_device *ieee)
        pHTInfo->RxReorderPendingTime = 30;
 }
 
-u16 HTMcsToDataRate(struct rtllib_device *ieee, u8 nMcsRate)
+static u16 HTMcsToDataRate(struct rtllib_device *ieee, u8 nMcsRate)
 {
        struct rt_hi_throughput *pHTInfo = ieee->pHTInfo;
 
@@ -502,7 +502,8 @@ u8 HTGetHighestMCSRate(struct rtllib_device *ieee, u8 *pMCSRateSet,
        return mcsRate | 0x80;
 }
 
-u8 HTFilterMCSRate(struct rtllib_device *ieee, u8 *pSupportMCS, u8 *pOperateMCS)
+static u8 HTFilterMCSRate(struct rtllib_device *ieee, u8 *pSupportMCS,
+                         u8 *pOperateMCS)
 {
 
        u8 i;
index 3aa35ced2b8b5cad68f72dbbc8893e420642e566..fcc8fabbebb7ab2861a3db0ec0ee4dbadeeab3e1 100644 (file)
@@ -96,11 +96,6 @@ struct octet_string {
        u16 Length;
 };
 
-enum ack_policy {
-       eAckPlc0_ACK            = 0x00,
-       eAckPlc1_NoACK          = 0x01,
-};
-
 #define AC0_BE 0
 #define AC1_BK 1
 #define AC2_VI 2
index b8fed556928cd458c5a189aad3018a3e8ca3328a..a93348c37f17e1298a87107fd8ff1b165078d4c1 100644 (file)
@@ -19,8 +19,6 @@
 #ifndef _TSTYPE_H_
 #define _TSTYPE_H_
 #include "rtl819x_Qos.h"
-#define TS_SETUP_TIMEOUT       60
-#define TS_INACT_TIMEOUT       60
 #define TS_ADDBA_DELAY         60
 
 #define TOTAL_TS_NUM           16
index 05aea4321b9def15b83ec322bb861d015e0157ae..7087959443cb40e634519fd12df3e5e991292681 100644 (file)
@@ -113,7 +113,7 @@ static void TsAddBaProcess(unsigned long data)
 
 static void ResetTsCommonInfo(struct ts_common_info *pTsCommonInfo)
 {
-       memset(pTsCommonInfo->Addr, 0, 6);
+       eth_zero_addr(pTsCommonInfo->Addr);
        memset(&pTsCommonInfo->TSpec, 0, sizeof(union tspec_body));
        memset(&pTsCommonInfo->TClass, 0, sizeof(union qos_tclas)*TCLAS_NUM);
        pTsCommonInfo->TClasProc = 0;
index fd38c6dd146be78c569ef69da62089613a447a2f..617f79efe4ca4dd2f47df854a5255c75e149b794 100644 (file)
@@ -84,9 +84,6 @@
 #define iwe_stream_add_point_rsl(info, start, stop, iwe, p)    \
        iwe_stream_add_point(info, start, stop, iwe, p)
 
-#define usb_alloc_urb_rsl(x, y) usb_alloc_urb(x, y)
-#define usb_submit_urb_rsl(x, y) usb_submit_urb(x, y)
-
 static inline void *netdev_priv_rsl(struct net_device *dev)
 {
        return netdev_priv(dev);
@@ -110,27 +107,14 @@ static inline void *netdev_priv_rsl(struct net_device *dev)
 #define HIGH_QUEUE                          7
 #define BEACON_QUEUE                      8
 
-#define LOW_QUEUE                            BE_QUEUE
-#define NORMAL_QUEUE                      MGNT_QUEUE
-
 #ifndef IW_MODE_MESH
 #define IW_MODE_MESH                   7
 #endif
-#define AMSDU_SUBHEADER_LEN 14
-#define SWRF_TIMEOUT                           50
 
 #define IE_CISCO_FLAG_POSITION         0x08
 #define SUPPORT_CKIP_MIC                       0x08
 #define SUPPORT_CKIP_PK                        0x10
-#define        RT_RF_OFF_LEVL_ASPM                     BIT0
-#define        RT_RF_OFF_LEVL_CLK_REQ          BIT1
-#define        RT_RF_OFF_LEVL_PCI_D3                   BIT2
 #define        RT_RF_OFF_LEVL_HALT_NIC         BIT3
-#define        RT_RF_OFF_LEVL_FREE_FW          BIT4
-#define        RT_RF_OFF_LEVL_FW_32K           BIT5
-#define        RT_RF_PS_LEVEL_ALWAYS_ASPM      BIT6
-#define        RT_RF_LPS_DISALBE_2R                    BIT30
-#define        RT_RF_LPS_LEVEL_ASPM                    BIT31
 #define        RT_IN_PS_LEVEL(pPSC, _PS_FLAG)          \
        ((pPSC->CurPsLevel & _PS_FLAG) ? true : false)
 #define        RT_CLEAR_PS_LEVEL(pPSC, _PS_FLAG)       \
@@ -244,22 +228,6 @@ struct sw_chnl_cmd {
 #define MGN_MCS13             0x8d
 #define MGN_MCS14             0x8e
 #define MGN_MCS15             0x8f
-#define        MGN_MCS0_SG                     0x90
-#define        MGN_MCS1_SG                     0x91
-#define        MGN_MCS2_SG                     0x92
-#define        MGN_MCS3_SG                     0x93
-#define        MGN_MCS4_SG                     0x94
-#define        MGN_MCS5_SG                     0x95
-#define        MGN_MCS6_SG                     0x96
-#define        MGN_MCS7_SG                     0x97
-#define        MGN_MCS8_SG                     0x98
-#define        MGN_MCS9_SG                     0x99
-#define        MGN_MCS10_SG            0x9a
-#define        MGN_MCS11_SG            0x9b
-#define        MGN_MCS12_SG            0x9c
-#define        MGN_MCS13_SG            0x9d
-#define        MGN_MCS14_SG            0x9e
-#define        MGN_MCS15_SG            0x9f
 
 enum hw_variables {
        HW_VAR_ETHER_ADDR,
@@ -722,42 +690,13 @@ struct rtllib_frag_entry {
        u8 dst_addr[ETH_ALEN];
 };
 
-struct rtllib_stats {
-       unsigned int tx_unicast_frames;
-       unsigned int tx_multicast_frames;
-       unsigned int tx_fragments;
-       unsigned int tx_unicast_octets;
-       unsigned int tx_multicast_octets;
-       unsigned int tx_deferred_transmissions;
-       unsigned int tx_single_retry_frames;
-       unsigned int tx_multiple_retry_frames;
-       unsigned int tx_retry_limit_exceeded;
-       unsigned int tx_discards;
-       unsigned int rx_unicast_frames;
-       unsigned int rx_multicast_frames;
-       unsigned int rx_fragments;
-       unsigned int rx_unicast_octets;
-       unsigned int rx_multicast_octets;
-       unsigned int rx_fcs_errors;
-       unsigned int rx_discards_no_buffer;
-       unsigned int tx_discards_wrong_sa;
-       unsigned int rx_discards_undecryptable;
-       unsigned int rx_message_in_msg_fragments;
-       unsigned int rx_message_in_bad_msg_fragments;
-};
-
 struct rtllib_device;
 
-#define SEC_KEY_1       (1<<0)
-#define SEC_KEY_2       (1<<1)
-#define SEC_KEY_3       (1<<2)
-#define SEC_KEY_4       (1<<3)
 #define SEC_ACTIVE_KEY    (1<<4)
 #define SEC_AUTH_MODE     (1<<5)
 #define SEC_UNICAST_GROUP (1<<6)
 #define SEC_LEVEL       (1<<7)
 #define SEC_ENABLED       (1<<8)
-#define SEC_ENCRYPT       (1<<9)
 
 #define SEC_LEVEL_0      0 /* None */
 #define SEC_LEVEL_1      1 /* WEP 40 and 104 bit */
@@ -772,7 +711,6 @@ struct rtllib_device;
 
 #define WEP_KEY_LEN            13
 #define SCM_KEY_LEN            32
-#define SCM_TEMPORAL_KEY_LENGTH 16
 
 struct rtllib_security {
        u16 active_key:2,
@@ -1187,8 +1125,6 @@ enum {WMM_all_frame, WMM_two_frame, WMM_four_frame, WMM_six_frame};
 #define WME_AC_BE   0x01
 #define WME_AC_VI   0x02
 #define WME_AC_VO   0x03
-#define WME_ACI_MASK 0x03
-#define WME_AIFSN_MASK 0x03
 #define WME_AC_PRAM_LEN 16
 
 #define MAX_RECEIVE_BUFFER_SIZE 9100
@@ -1204,12 +1140,6 @@ enum {WMM_all_frame, WMM_two_frame, WMM_four_frame, WMM_six_frame};
 #define ETHERNET_HEADER_SIZE    14      /* length of two Ethernet address
                                         * plus ether type*/
 
-struct ether_header {
-       u8 ether_dhost[ETHER_ADDR_LEN];
-       u8 ether_shost[ETHER_ADDR_LEN];
-       u16 ether_type;
-} __packed;
-
 enum erp_t {
        ERP_NonERPpresent       = 0x01,
        ERP_UseProtection       = 0x02,
@@ -1591,7 +1521,6 @@ struct rtllib_device {
 
        /* Bookkeeping structures */
        struct net_device_stats stats;
-       struct rtllib_stats ieee_stats;
        struct rtllib_softmac_stats softmac_stats;
 
        /* Probe / Beacon management */
@@ -1673,7 +1602,6 @@ struct rtllib_device {
        int short_slot;
        int mode;       /* A, B, G */
        int modulation; /* CCK, OFDM */
-       int freq_band;  /* 2.4Ghz, 5.2Ghz, Mixed */
 
        /* used for forcing the ibss workqueue to terminate
         * without wait for the syncro scan to terminate
@@ -2067,15 +1995,11 @@ extern int rtllib_encrypt_fragment(
        int hdr_len);
 
 extern int rtllib_xmit(struct sk_buff *skb,  struct net_device *dev);
-extern int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev);
 extern void rtllib_txb_free(struct rtllib_txb *);
 
 /* rtllib_rx.c */
 extern int rtllib_rx(struct rtllib_device *ieee, struct sk_buff *skb,
                        struct rtllib_rx_stats *rx_stats);
-extern void rtllib_rx_mgt(struct rtllib_device *ieee,
-                            struct sk_buff *skb,
-                            struct rtllib_rx_stats *stats);
 extern void rtllib_rx_probe_rq(struct rtllib_device *ieee,
                           struct sk_buff *skb);
 extern int rtllib_legal_channel(struct rtllib_device *rtllib, u8 channel);
@@ -2102,7 +2026,6 @@ extern int rtllib_wx_set_mlme(struct rtllib_device *ieee,
 extern int rtllib_wx_set_gen_ie(struct rtllib_device *ieee, u8 *ie, size_t len);
 
 /* rtllib_softmac.c */
-extern short rtllib_is_54g(struct rtllib_network *net);
 extern int rtllib_rx_frame_softmac(struct rtllib_device *ieee,
                                   struct sk_buff *skb,
                                   struct rtllib_rx_stats *rx_stats, u16 type,
@@ -2116,13 +2039,9 @@ extern void rtllib_softmac_xmit(struct rtllib_txb *txb,
 
 extern void rtllib_stop_send_beacons(struct rtllib_device *ieee);
 extern void notify_wx_assoc_event(struct rtllib_device *ieee);
-extern void rtllib_softmac_check_all_nets(struct rtllib_device *ieee);
-extern void rtllib_start_bss(struct rtllib_device *ieee);
-extern void rtllib_start_master_bss(struct rtllib_device *ieee);
 extern void rtllib_start_ibss(struct rtllib_device *ieee);
 extern void rtllib_softmac_init(struct rtllib_device *ieee);
 extern void rtllib_softmac_free(struct rtllib_device *ieee);
-extern void rtllib_associate_abort(struct rtllib_device *ieee);
 extern void rtllib_disassociate(struct rtllib_device *ieee);
 extern void rtllib_stop_scan(struct rtllib_device *ieee);
 extern bool rtllib_act_scanning(struct rtllib_device *ieee, bool sync_scan);
@@ -2130,7 +2049,6 @@ extern void rtllib_stop_scan_syncro(struct rtllib_device *ieee);
 extern void rtllib_start_scan_syncro(struct rtllib_device *ieee, u8 is_mesh);
 extern void rtllib_sta_ps_send_null_frame(struct rtllib_device *ieee,
                                          short pwr);
-extern void rtllib_sta_wakeup(struct rtllib_device *ieee, short nl);
 extern void rtllib_sta_ps_send_pspoll_frame(struct rtllib_device *ieee);
 extern void rtllib_start_protocol(struct rtllib_device *ieee);
 extern void rtllib_stop_protocol(struct rtllib_device *ieee, u8 shutdown);
@@ -2143,8 +2061,6 @@ extern void rtllib_EnableIntelPromiscuousMode(struct net_device *dev,
                                              bool bInitState);
 extern void rtllib_DisableIntelPromiscuousMode(struct net_device *dev,
                                               bool bInitState);
-extern void rtllib_send_probe_requests(struct rtllib_device *ieee, u8 is_mesh);
-
 extern void rtllib_softmac_stop_protocol(struct rtllib_device *ieee,
                                         u8 mesh_flag, u8 shutdown);
 extern void rtllib_softmac_start_protocol(struct rtllib_device *ieee,
@@ -2164,8 +2080,6 @@ extern void rtllib_ps_tx_ack(struct rtllib_device *ieee, short success);
 
 extern void softmac_mgmt_xmit(struct sk_buff *skb,
                              struct rtllib_device *ieee);
-extern u16 rtllib_query_seqnum(struct rtllib_device *ieee,
-                              struct sk_buff *skb, u8 *dst);
 extern u8 rtllib_ap_sec_type(struct rtllib_device *ieee);
 
 /* rtllib_softmac_wx.c */
@@ -2266,7 +2180,6 @@ extern u16 MCS_DATA_RATE[2][2][77];
 extern u8 HTCCheck(struct rtllib_device *ieee, u8 *pFrame);
 extern void HTResetIOTSetting(struct rt_hi_throughput *pHTInfo);
 extern bool IsHTHalfNmodeAPs(struct rtllib_device *ieee);
-extern u16 HTMcsToDataRate(struct rtllib_device *ieee, u8 nMcsRate);
 extern u16  TxCountToDataRate(struct rtllib_device *ieee, u8 nDataRate);
 extern int rtllib_rx_ADDBAReq(struct rtllib_device *ieee, struct sk_buff *skb);
 extern int rtllib_rx_ADDBARsp(struct rtllib_device *ieee, struct sk_buff *skb);
@@ -2293,7 +2206,6 @@ extern  void TsStartAddBaProcess(struct rtllib_device *ieee,
                                  struct tx_ts_record *pTxTS);
 extern void RemovePeerTS(struct rtllib_device *ieee, u8 *Addr);
 extern void RemoveAllTS(struct rtllib_device *ieee);
-void rtllib_softmac_scan_syncro(struct rtllib_device *ieee, u8 is_mesh);
 
 extern const long rtllib_wlan_frequencies[];
 
@@ -2317,7 +2229,6 @@ bool rtllib_MgntDisconnect(struct rtllib_device *rtllib, u8 asRsn);
 /* For the function is more related to hardware setting, it's better to use the
  * ieee handler to refer to it.
  */
-extern void rtllib_update_active_chan_map(struct rtllib_device *ieee);
 extern void rtllib_FlushRxTsPendingPkts(struct rtllib_device *ieee,
                                        struct rx_ts_record *pTS);
 extern int rtllib_parse_info_param(struct rtllib_device *ieee,
@@ -2328,12 +2239,9 @@ extern int rtllib_parse_info_param(struct rtllib_device *ieee,
 
 void rtllib_indicate_packets(struct rtllib_device *ieee,
                             struct rtllib_rxb **prxbIndicateArray, u8  index);
-extern u8 HTFilterMCSRate(struct rtllib_device *ieee, u8 *pSupportMCS,
-                         u8 *pOperateMCS);
 extern void HTUseDefaultSetting(struct rtllib_device *ieee);
 #define RT_ASOC_RETRY_LIMIT    5
 u8 MgntQuery_TxRateExcludeCCKRates(struct rtllib_device *ieee);
-extern void rtllib_TURBO_Info(struct rtllib_device *ieee, u8 **tag_p);
 #define SEM_DOWN_IEEE_WX(psem) down(psem)
 #define SEM_UP_IEEE_WX(psem) up(psem)
 
index 42e88d69ae63c016f56719f848b68f7c6289b702..17c276d710582b1588babc773a55dda54b9a215a 100644 (file)
@@ -30,8 +30,6 @@
 #define DRV_NAME "rtllib_92e"
 #endif
 
-#define DMESG(x, a...)
-
 extern u32 rt_global_debug_component;
 
 /* These are the defines for rt_global_debug_component */
@@ -40,10 +38,7 @@ enum RTL_DEBUG {
        COMP_DBG                = (1 << 1),
        COMP_INIT               = (1 << 2),
        COMP_RECV               = (1 << 3),
-       COMP_SEND               = (1 << 4),
-       COMP_CMD                = (1 << 5),
        COMP_POWER              = (1 << 6),
-       COMP_EPROM              = (1 << 7),
        COMP_SWBW               = (1 << 8),
        COMP_SEC                = (1 << 9),
        COMP_LPS                = (1 << 10),
@@ -58,15 +53,12 @@ enum RTL_DEBUG {
        COMP_CH                 = (1 << 19),
        COMP_RF                 = (1 << 20),
        COMP_FIRMWARE           = (1 << 21),
-       COMP_HT                 = (1 << 22),
        COMP_RESET              = (1 << 23),
        COMP_CMDPKT             = (1 << 24),
        COMP_SCAN               = (1 << 25),
        COMP_PS                 = (1 << 26),
        COMP_DOWN               = (1 << 27),
        COMP_INTR               = (1 << 28),
-       COMP_LED                = (1 << 29),
-       COMP_MLME               = (1 << 30),
        COMP_ERR                = (1 << 31)
 };
 
index da862c3da4ce342be9afb6b673b9cf3766c755ca..09f0820fb3402c2779c706bf18fcd3bec2e19ab0 100644 (file)
@@ -44,6 +44,9 @@
 #include "rtllib.h"
 #include "dot11d.h"
 
+static void rtllib_rx_mgt(struct rtllib_device *ieee, struct sk_buff *skb,
+                         struct rtllib_rx_stats *stats);
+
 static inline void rtllib_monitor_rx(struct rtllib_device *ieee,
                                     struct sk_buff *skb,
                                     struct rtllib_rx_stats *rx_status,
@@ -317,7 +320,6 @@ rtllib_rx_frame_decrypt(struct rtllib_device *ieee, struct sk_buff *skb,
                        netdev_dbg(ieee->dev,
                                   "Decryption failed ICV mismatch (key %d)\n",
                                   skb->data[hdrlen + 3] >> 6);
-               ieee->ieee_stats.rx_discards_undecryptable++;
                return -1;
        }
 
@@ -1077,7 +1079,6 @@ static int rtllib_rx_get_crypt(struct rtllib_device *ieee, struct sk_buff *skb,
                        netdev_dbg(ieee->dev,
                                   "Decryption failed (not set) (SA= %pM)\n",
                                   hdr->addr2);
-                       ieee->ieee_stats.rx_discards_undecryptable++;
                        return -1;
                }
        }
@@ -1743,37 +1744,61 @@ static int rtllib_parse_qos_info_param_IE(struct rtllib_device *ieee,
        return rc;
 }
 
-#define MFIE_STRING(x) case MFIE_TYPE_ ##x: return #x
-
 static const char *get_info_element_string(u16 id)
 {
        switch (id) {
-       MFIE_STRING(SSID);
-       MFIE_STRING(RATES);
-       MFIE_STRING(FH_SET);
-       MFIE_STRING(DS_SET);
-       MFIE_STRING(CF_SET);
-       MFIE_STRING(TIM);
-       MFIE_STRING(IBSS_SET);
-       MFIE_STRING(COUNTRY);
-       MFIE_STRING(HOP_PARAMS);
-       MFIE_STRING(HOP_TABLE);
-       MFIE_STRING(REQUEST);
-       MFIE_STRING(CHALLENGE);
-       MFIE_STRING(POWER_CONSTRAINT);
-       MFIE_STRING(POWER_CAPABILITY);
-       MFIE_STRING(TPC_REQUEST);
-       MFIE_STRING(TPC_REPORT);
-       MFIE_STRING(SUPP_CHANNELS);
-       MFIE_STRING(CSA);
-       MFIE_STRING(MEASURE_REQUEST);
-       MFIE_STRING(MEASURE_REPORT);
-       MFIE_STRING(QUIET);
-       MFIE_STRING(IBSS_DFS);
-       MFIE_STRING(RSN);
-       MFIE_STRING(RATES_EX);
-       MFIE_STRING(GENERIC);
-       MFIE_STRING(QOS_PARAMETER);
+       case MFIE_TYPE_SSID:
+               return "SSID";
+       case MFIE_TYPE_RATES:
+               return "RATES";
+       case MFIE_TYPE_FH_SET:
+               return "FH_SET";
+       case MFIE_TYPE_DS_SET:
+               return "DS_SET";
+       case MFIE_TYPE_CF_SET:
+               return "CF_SET";
+       case MFIE_TYPE_TIM:
+               return "TIM";
+       case MFIE_TYPE_IBSS_SET:
+               return "IBSS_SET";
+       case MFIE_TYPE_COUNTRY:
+               return "COUNTRY";
+       case MFIE_TYPE_HOP_PARAMS:
+               return "HOP_PARAMS";
+       case MFIE_TYPE_HOP_TABLE:
+               return "HOP_TABLE";
+       case MFIE_TYPE_REQUEST:
+               return "REQUEST";
+       case MFIE_TYPE_CHALLENGE:
+               return "CHALLENGE";
+       case MFIE_TYPE_POWER_CONSTRAINT:
+               return "POWER_CONSTRAINT";
+       case MFIE_TYPE_POWER_CAPABILITY:
+               return "POWER_CAPABILITY";
+       case MFIE_TYPE_TPC_REQUEST:
+               return "TPC_REQUEST";
+       case MFIE_TYPE_TPC_REPORT:
+               return "TPC_REPORT";
+       case MFIE_TYPE_SUPP_CHANNELS:
+               return "SUPP_CHANNELS";
+       case MFIE_TYPE_CSA:
+               return "CSA";
+       case MFIE_TYPE_MEASURE_REQUEST:
+               return "MEASURE_REQUEST";
+       case MFIE_TYPE_MEASURE_REPORT:
+               return "MEASURE_REPORT";
+       case MFIE_TYPE_QUIET:
+               return "QUIET";
+       case MFIE_TYPE_IBSS_DFS:
+               return "IBSS_DFS";
+       case MFIE_TYPE_RSN:
+               return "RSN";
+       case MFIE_TYPE_RATES_EX:
+               return "RATES_EX";
+       case MFIE_TYPE_GENERIC:
+               return "GENERIC";
+       case MFIE_TYPE_QOS_PARAMETER:
+               return "QOS_PARAMETER";
        default:
                return "UNKNOWN";
        }
@@ -2717,9 +2742,9 @@ free_network:
        kfree(network);
 }
 
-void rtllib_rx_mgt(struct rtllib_device *ieee,
-                     struct sk_buff *skb,
-                     struct rtllib_rx_stats *stats)
+static void rtllib_rx_mgt(struct rtllib_device *ieee,
+                         struct sk_buff *skb,
+                         struct rtllib_rx_stats *stats)
 {
        struct rtllib_hdr_4addr *header = (struct rtllib_hdr_4addr *)skb->data;
 
index d320c31732f242b965635350906e3d0b1e5ab542..1503cbb3574ef7341594190aeeff7eebbd4231f2 100644 (file)
 #include <linux/ieee80211.h>
 #include "dot11d.h"
 
-short rtllib_is_54g(struct rtllib_network *net)
+static void rtllib_sta_wakeup(struct rtllib_device *ieee, short nl);
+
+
+static short rtllib_is_54g(struct rtllib_network *net)
 {
        return (net->rates_ex_len > 0) || (net->rates_len > 4);
 }
@@ -107,7 +110,7 @@ static void rtllib_WMM_Info(struct rtllib_device *ieee, u8 **tag_p)
        *tag_p = tag;
 }
 
-void rtllib_TURBO_Info(struct rtllib_device *ieee, u8 **tag_p)
+static void rtllib_TURBO_Info(struct rtllib_device *ieee, u8 **tag_p)
 {
        u8 *tag = *tag_p;
 
@@ -369,7 +372,7 @@ static inline struct sk_buff *rtllib_probe_req(struct rtllib_device *ieee)
        return skb;
 }
 
-struct sk_buff *rtllib_get_beacon_(struct rtllib_device *ieee);
+static struct sk_buff *rtllib_get_beacon_(struct rtllib_device *ieee);
 
 static void rtllib_send_beacon(struct rtllib_device *ieee)
 {
@@ -483,7 +486,7 @@ static void rtllib_send_probe(struct rtllib_device *ieee, u8 is_mesh)
 }
 
 
-void rtllib_send_probe_requests(struct rtllib_device *ieee, u8 is_mesh)
+static void rtllib_send_probe_requests(struct rtllib_device *ieee, u8 is_mesh)
 {
        if (ieee->active_scan && (ieee->softmac_features &
            IEEE_SOFTMAC_PROBERQ)) {
@@ -492,7 +495,7 @@ void rtllib_send_probe_requests(struct rtllib_device *ieee, u8 is_mesh)
        }
 }
 
-void rtllib_update_active_chan_map(struct rtllib_device *ieee)
+static void rtllib_update_active_chan_map(struct rtllib_device *ieee)
 {
        memcpy(ieee->active_channel_map, GET_DOT11D_INFO(ieee)->channel_map,
               MAX_CHANNEL_NUMBER+1);
@@ -501,7 +504,7 @@ void rtllib_update_active_chan_map(struct rtllib_device *ieee)
 /* this performs syncro scan blocking the caller until all channels
  * in the allowed channel map has been checked.
  */
-void rtllib_softmac_scan_syncro(struct rtllib_device *ieee, u8 is_mesh)
+static void rtllib_softmac_scan_syncro(struct rtllib_device *ieee, u8 is_mesh)
 {
        union iwreq_data wrqu;
        short ch = 0;
@@ -1401,7 +1404,7 @@ inline struct sk_buff *rtllib_association_req(struct rtllib_network *beacon,
        return skb;
 }
 
-void rtllib_associate_abort(struct rtllib_device *ieee)
+static void rtllib_associate_abort(struct rtllib_device *ieee)
 {
        unsigned long flags;
 
@@ -1511,7 +1514,6 @@ static void rtllib_associate_step2(struct rtllib_device *ieee)
        }
 }
 
-#define CANCELLED  2
 static void rtllib_associate_complete_wq(void *data)
 {
        struct rtllib_device *ieee = (struct rtllib_device *)
@@ -1753,7 +1755,7 @@ inline void rtllib_softmac_new_net(struct rtllib_device *ieee,
        }
 }
 
-void rtllib_softmac_check_all_nets(struct rtllib_device *ieee)
+static void rtllib_softmac_check_all_nets(struct rtllib_device *ieee)
 {
        unsigned long flags;
        struct rtllib_network *target;
@@ -2109,7 +2111,7 @@ out:
 
 }
 
-void rtllib_sta_wakeup(struct rtllib_device *ieee, short nl)
+static void rtllib_sta_wakeup(struct rtllib_device *ieee, short nl)
 {
        if (ieee->sta_sleep == LPS_IS_WAKE) {
                if (nl) {
@@ -2545,7 +2547,7 @@ inline void rtllib_randomize_cell(struct rtllib_device *ieee)
 }
 
 /* called in user context only */
-void rtllib_start_master_bss(struct rtllib_device *ieee)
+static void rtllib_start_master_bss(struct rtllib_device *ieee)
 {
        ieee->assoc_id = 1;
 
@@ -2720,7 +2722,7 @@ inline void rtllib_start_ibss(struct rtllib_device *ieee)
 }
 
 /* this is called only in user context, with wx_sem held */
-void rtllib_start_bss(struct rtllib_device *ieee)
+static void rtllib_start_bss(struct rtllib_device *ieee)
 {
        unsigned long flags;
 
@@ -2817,7 +2819,7 @@ exit:
        up(&ieee->wx_sem);
 }
 
-struct sk_buff *rtllib_get_beacon_(struct rtllib_device *ieee)
+static struct sk_buff *rtllib_get_beacon_(struct rtllib_device *ieee)
 {
        const u8 broadcast_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
 
@@ -3084,7 +3086,7 @@ static int rtllib_wpa_enable(struct rtllib_device *ieee, int value)
         */
        netdev_info(ieee->dev, "%s WPA\n", value ? "enabling" : "disabling");
        ieee->wpa_enabled = value;
-       memset(ieee->ap_mac_addr, 0, 6);
+       eth_zero_addr(ieee->ap_mac_addr);
        return 0;
 }
 
index e99ea5e67ef98c6f0be353930417d81ee08d49bf..b992e4612fd89990c30628b2b21246a0aa2e4773 100644 (file)
 static u8 P802_1H_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0xf8 };
 static u8 RFC1042_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0x00 };
 
-inline int rtllib_put_snap(u8 *data, u16 h_proto)
+static int rtllib_put_snap(u8 *data, u16 h_proto)
 {
        struct rtllib_snap_hdr *snap;
        u8 *oui;
@@ -205,7 +205,6 @@ int rtllib_encrypt_fragment(struct rtllib_device *ieee, struct sk_buff *frag,
        if (res < 0) {
                netdev_info(ieee->dev, "%s: Encryption failed: len=%d.\n",
                            ieee->dev->name, frag->len);
-               ieee->ieee_stats.tx_discards++;
                return -1;
        }
 
@@ -515,8 +514,8 @@ static void rtllib_txrate_selectmode(struct rtllib_device *ieee,
        }
 }
 
-u16 rtllib_query_seqnum(struct rtllib_device *ieee, struct sk_buff *skb,
-                       u8 *dst)
+static u16 rtllib_query_seqnum(struct rtllib_device *ieee, struct sk_buff *skb,
+                              u8 *dst)
 {
        u16 seqnum = 0;
 
@@ -566,7 +565,7 @@ static u8 rtllib_current_rate(struct rtllib_device *ieee)
                return ieee->rate & 0x7F;
 }
 
-int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
+static int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
 {
        struct rtllib_device *ieee = (struct rtllib_device *)
                                     netdev_priv_rsl(dev);
index b374088c5ff87c11fa9f4baa78324d5680206ea6..0aa9021cb95e751e0c2f6c2f9f3963e5638d2ef6 100644 (file)
@@ -1014,7 +1014,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
                goto rx_dropped;
 
        // if QoS enabled, should check the sequence for each of the AC
-       if( (ieee->pHTInfo->bCurRxReorderEnable == false) || !ieee->current_network.qos_data.active|| !IsDataFrame(skb->data) || IsLegacyDataFrame(skb->data)){
+       if ((!ieee->pHTInfo->bCurRxReorderEnable) || !ieee->current_network.qos_data.active|| !IsDataFrame(skb->data) || IsLegacyDataFrame(skb->data)) {
                if (is_duplicate_packet(ieee, hdr))
                goto rx_dropped;
 
@@ -1307,7 +1307,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
        }
 
 //added by amy for reorder
-       if(ieee->pHTInfo->bCurRxReorderEnable == false ||pTS == NULL){
+       if (!ieee->pHTInfo->bCurRxReorderEnable || pTS == NULL){
 //added by amy for reorder
                for(i = 0; i<rxb->nr_subframes; i++) {
                        struct sk_buff *sub_skb = rxb->subframes[i];
index 1b11acb9623327d7aae801bd34ce82882cfb9e51..39e9892c3fa6a8ba04f82a6d9e9967c294aad20b 100644 (file)
@@ -1177,7 +1177,7 @@ inline struct sk_buff *ieee80211_association_req(struct ieee80211_network *beaco
                        tag = skb_put(skb, ht_cap_len);
                        *tag++ = MFIE_TYPE_HT_CAP;
                        *tag++ = ht_cap_len - 2;
-                       memcpy(tag, ht_cap_buf,ht_cap_len -2);
+                       memcpy(tag, ht_cap_buf, ht_cap_len - 2);
                        tag += ht_cap_len -2;
                }
        }
@@ -1214,7 +1214,7 @@ inline struct sk_buff *ieee80211_association_req(struct ieee80211_network *beaco
                        tag = skb_put(skb, realtek_ie_len);
                        *tag++ = MFIE_TYPE_GENERIC;
                        *tag++ = realtek_ie_len - 2;
-                       memcpy(tag, realtek_ie_buf,realtek_ie_len -2 );
+                       memcpy(tag, realtek_ie_buf, realtek_ie_len - 2);
                }
        }
 //     printk("<=====%s(), %p, %p\n", __func__, ieee->dev, ieee->dev->dev_addr);
@@ -1964,7 +1964,7 @@ static void ieee80211_check_auth_response(struct ieee80211_device *ieee,
                        }
 
                        if (ieee->current_network.mode == IEEE_N_24G &&
-                                       bHalfSupportNmode == true) {
+                                       bHalfSupportNmode) {
                                netdev_dbg(ieee->dev, "enter half N mode\n");
                                ieee->bHalfWirelessN24GMode = true;
                        } else
index 714fbcace72b1bc12db648f4fb293eccf67d34bc..3e502520648ea2a8ffcbdaa3bdd3cc431a69acdb 100644 (file)
@@ -391,7 +391,7 @@ int ieee80211_wx_set_essid(struct ieee80211_device *ieee,
                              union iwreq_data *wrqu, char *extra)
 {
 
-       int ret=0,len;
+       int ret = 0, len;
        short proto_started;
        unsigned long flags;
 
index 5353a45ffdffd411bb522e79d53f7a8c12250b40..fff8d583c62faa4501163d19da20a7f43f580671 100644 (file)
@@ -336,12 +336,12 @@ static void ieee80211_tx_query_agg_cap(struct ieee80211_device *ieee,
                        printk("===>can't get TS\n");
                        return;
                }
-               if (pTxTs->TxAdmittedBARecord.bValid == false)
+               if (!pTxTs->TxAdmittedBARecord.bValid)
                {
                        TsStartAddBaProcess(ieee, pTxTs);
                        goto FORCED_AGG_SETTING;
                }
-               else if (pTxTs->bUsingBa == false)
+               else if (!pTxTs->bUsingBa)
                {
                        if (SN_LESS(pTxTs->TxAdmittedBARecord.BaStartSeqCtrl.field.SeqNum, (pTxTs->TxCurSeq+1)%4096))
                                pTxTs->bUsingBa = true;
index 9ff8e056ab7f10095bc05cbb0d65ead7d8a39c01..3bde744604c210eaf2dd55739b0527768b173b4b 100644 (file)
@@ -364,8 +364,8 @@ int ieee80211_rx_ADDBAReq(struct ieee80211_device *ieee, struct sk_buff *skb)
        printk("====================>rx ADDBAREQ from :%pM\n", dst);
 //some other capability is not ready now.
        if ((ieee->current_network.qos_data.active == 0) ||
-               (ieee->pHTInfo->bCurrentHTSupport == false)) //||
-       //      (ieee->pStaQos->bEnableRxImmBA == false)        )
+               (!ieee->pHTInfo->bCurrentHTSupport)) //||
+       //      (!ieee->pStaQos->bEnableRxImmBA)        )
        {
                rc = ADDBA_STATUS_REFUSED;
                IEEE80211_DEBUG(IEEE80211_DL_ERR, "Failed to reply on ADDBA_REQ as some capability is not ready(%d, %d)\n", ieee->current_network.qos_data.active, ieee->pHTInfo->bCurrentHTSupport);
@@ -462,8 +462,8 @@ int ieee80211_rx_ADDBARsp(struct ieee80211_device *ieee, struct sk_buff *skb)
        // Check the capability
        // Since we can always receive A-MPDU, we just check if it is under HT mode.
        if (ieee->current_network.qos_data.active == 0  ||
-           ieee->pHTInfo->bCurrentHTSupport == false ||
-           ieee->pHTInfo->bCurrentAMPDUEnable == false) {
+           !ieee->pHTInfo->bCurrentHTSupport ||
+           !ieee->pHTInfo->bCurrentAMPDUEnable) {
                IEEE80211_DEBUG(IEEE80211_DL_ERR, "reject to ADDBA_RSP as some capability is not ready(%d, %d, %d)\n",ieee->current_network.qos_data.active, ieee->pHTInfo->bCurrentHTSupport, ieee->pHTInfo->bCurrentAMPDUEnable);
                ReasonCode = DELBA_REASON_UNKNOWN_BA;
                goto OnADDBARsp_Reject;
@@ -502,7 +502,7 @@ int ieee80211_rx_ADDBARsp(struct ieee80211_device *ieee, struct sk_buff *skb)
                IEEE80211_DEBUG(IEEE80211_DL_BA, "OnADDBARsp(): Recv ADDBA Rsp. Drop because already admit it! \n");
                return -1;
        }
-       else if((pPendingBA->bValid == false) ||(*pDialogToken != pPendingBA->DialogToken))
+       else if((!pPendingBA->bValid) ||(*pDialogToken != pPendingBA->DialogToken))
        {
                IEEE80211_DEBUG(IEEE80211_DL_ERR,  "OnADDBARsp(): Recv ADDBA Rsp. BA invalid, DELBA! \n");
                ReasonCode = DELBA_REASON_UNKNOWN_BA;
@@ -571,7 +571,6 @@ int ieee80211_rx_DELBA(struct ieee80211_device *ieee, struct sk_buff *skb)
 {
         struct rtl_80211_hdr_3addr *delba = NULL;
        PDELBA_PARAM_SET        pDelBaParamSet = NULL;
-       u16                     *pReasonCode = NULL;
        u8                      *dst = NULL;
 
        if (skb->len < sizeof(struct rtl_80211_hdr_3addr) + 6) {
@@ -583,7 +582,7 @@ int ieee80211_rx_DELBA(struct ieee80211_device *ieee, struct sk_buff *skb)
        }
 
        if (ieee->current_network.qos_data.active == 0 ||
-               ieee->pHTInfo->bCurrentHTSupport == false )
+           !ieee->pHTInfo->bCurrentHTSupport)
        {
                IEEE80211_DEBUG(IEEE80211_DL_ERR, "received DELBA while QOS or HT is not supported(%d, %d)\n",ieee->current_network.qos_data.active, ieee->pHTInfo->bCurrentHTSupport);
                return -1;
@@ -592,9 +591,7 @@ int ieee80211_rx_DELBA(struct ieee80211_device *ieee, struct sk_buff *skb)
        IEEE80211_DEBUG_DATA(IEEE80211_DL_DATA|IEEE80211_DL_BA, skb->data, skb->len);
        delba = (struct rtl_80211_hdr_3addr *)skb->data;
        dst = (u8 *)(&delba->addr2[0]);
-       delba += sizeof(struct rtl_80211_hdr_3addr);
-       pDelBaParamSet = (PDELBA_PARAM_SET)(delba+2);
-       pReasonCode = (u16 *)(delba+4);
+       pDelBaParamSet = (PDELBA_PARAM_SET)&delba->payload[2];
 
        if(pDelBaParamSet->field.Initiator == 1)
        {
index c2588f80625b99e23c9aaf519e35ef22f62c1746..c27397b14adb86874aa745ec1dc3bf027f76e173 100644 (file)
@@ -224,9 +224,9 @@ static bool IsHTHalfNmode40Bandwidth(struct ieee80211_device *ieee)
        bool                    retValue = false;
        PRT_HIGH_THROUGHPUT      pHTInfo = ieee->pHTInfo;
 
-       if(pHTInfo->bCurrentHTSupport == false )        // wireless is n mode
+       if(!pHTInfo->bCurrentHTSupport)         // wireless is n mode
                retValue = false;
-       else if(pHTInfo->bRegBW40MHz == false)  // station supports 40 bw
+       else if(!pHTInfo->bRegBW40MHz)          // station supports 40 bw
                retValue = false;
        else if(!ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev))      // station in half n mode
                retValue = false;
@@ -243,7 +243,7 @@ static bool IsHTHalfNmodeSGI(struct ieee80211_device *ieee, bool is40MHz)
        bool                    retValue = false;
        PRT_HIGH_THROUGHPUT      pHTInfo = ieee->pHTInfo;
 
-       if(pHTInfo->bCurrentHTSupport == false )        // wireless is n mode
+       if(!pHTInfo->bCurrentHTSupport)         // wireless is n mode
                retValue = false;
        else if(!ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev))      // station in half n mode
                retValue = false;
@@ -675,7 +675,7 @@ void HTConstructInfoElement(struct ieee80211_device *ieee, u8 *posHTInfo, u8 *le
        if ( (ieee->iw_mode == IW_MODE_ADHOC) || (ieee->iw_mode == IW_MODE_MASTER)) //ap mode is not currently supported
        {
                pHTInfoEle->ControlChl                  = ieee->current_network.channel;
-               pHTInfoEle->ExtChlOffset                        = ((pHT->bRegBW40MHz == false)?HT_EXTCHNL_OFFSET_NO_EXT:
+               pHTInfoEle->ExtChlOffset                        = ((!pHT->bRegBW40MHz)?HT_EXTCHNL_OFFSET_NO_EXT:
                                                                                        (ieee->current_network.channel<=6)?
                                                                                                HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER);
                pHTInfoEle->RecommemdedTxWidth  = pHT->bRegBW40MHz;
@@ -945,7 +945,7 @@ void HTOnAssocRsp(struct ieee80211_device *ieee)
        static u8                               EWC11NHTCap[] = {0x00, 0x90, 0x4c, 0x33};               // For 11n EWC definition, 2007.07.17, by Emily
        static u8                               EWC11NHTInfo[] = {0x00, 0x90, 0x4c, 0x34};      // For 11n EWC definition, 2007.07.17, by Emily
 
-       if (pHTInfo->bCurrentHTSupport == false) {
+       if (!pHTInfo->bCurrentHTSupport) {
                IEEE80211_DEBUG(IEEE80211_DL_ERR, "<=== HTOnAssocRsp(): HT_DISABLE\n");
                return;
        }
@@ -956,7 +956,7 @@ void HTOnAssocRsp(struct ieee80211_device *ieee)
 //     HTDebugHTCapability(pHTInfo->PeerHTCapBuf,"HTOnAssocRsp_wq");
 //     HTDebugHTInfo(pHTInfo->PeerHTInfoBuf,"HTOnAssocRsp_wq");
        //
-       if(!memcmp(pHTInfo->PeerHTCapBuf,EWC11NHTCap, sizeof(EWC11NHTCap)))
+       if (!memcmp(pHTInfo->PeerHTCapBuf, EWC11NHTCap, sizeof(EWC11NHTCap)))
                pPeerHTCap = (PHT_CAPABILITY_ELE)(&pHTInfo->PeerHTCapBuf[4]);
        else
                pPeerHTCap = (PHT_CAPABILITY_ELE)(pHTInfo->PeerHTCapBuf);
@@ -976,7 +976,7 @@ void HTOnAssocRsp(struct ieee80211_device *ieee)
        //
        HTSetConnectBwMode(ieee, (HT_CHANNEL_WIDTH)(pPeerHTCap->ChlWidth), (HT_EXTCHNL_OFFSET)(pPeerHTInfo->ExtChlOffset));
 
-//     if(pHTInfo->bCurBW40MHz == true)
+//     if (pHTInfo->bCurBW40MHz)
                pHTInfo->bCurTxBW40MHz = ((pPeerHTInfo->RecommemdedTxWidth == 1)?true:false);
 
        //
@@ -1341,7 +1341,7 @@ void HTSetConnectBwMode(struct ieee80211_device *ieee, HT_CHANNEL_WIDTH   Bandwidt
        PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo;
 //     u32 flags = 0;
 
-       if(pHTInfo->bRegBW40MHz == false)
+       if(!pHTInfo->bRegBW40MHz)
                return;
 
 
index ea92fdebe5a748a9f762f482f97ad706d428271e..f33c74342cf3bf1f4629b09e0bbc54f956c5f50f 100644 (file)
@@ -112,7 +112,7 @@ static void TsAddBaProcess(unsigned long data)
 
 static void ResetTsCommonInfo(PTS_COMMON_INFO pTsCommonInfo)
 {
-       memset(pTsCommonInfo->Addr, 0, 6);
+       eth_zero_addr(pTsCommonInfo->Addr);
        memset(&pTsCommonInfo->TSpec, 0, sizeof(TSPEC_BODY));
        memset(&pTsCommonInfo->TClass, 0, sizeof(QOS_TCLAS)*TCLAS_NUM);
        pTsCommonInfo->TClasProc = 0;
@@ -584,7 +584,7 @@ void RemoveAllTS(struct ieee80211_device *ieee)
 
 void TsStartAddBaProcess(struct ieee80211_device *ieee, PTX_TS_RECORD  pTxTS)
 {
-       if(pTxTS->bAddBaReqInProgress == false)
+       if(!pTxTS->bAddBaReqInProgress)
        {
                pTxTS->bAddBaReqInProgress = true;
                if(pTxTS->bAddBaReqDelayed)
index b852396d21e6af5a4bbd48fab8e486f3061c2ae5..6f6fe38081bcefff290d832db78818dac63ec7a7 100644 (file)
@@ -2043,16 +2043,9 @@ static bool GetNmodeSupportBySecCfg8192(struct net_device *dev)
 
 static bool GetHalfNmodeSupportByAPs819xUsb(struct net_device *dev)
 {
-       bool                    Reval;
        struct r8192_priv *priv = ieee80211_priv(dev);
-       struct ieee80211_device *ieee = priv->ieee80211;
-
-       if (ieee->bHalfWirelessN24GMode == true)
-               Reval = true;
-       else
-               Reval =  false;
 
-       return Reval;
+       return priv->ieee80211->bHalfWirelessN24GMode;
 }
 
 static void rtl8192_refresh_supportrate(struct r8192_priv *priv)
@@ -2762,7 +2755,7 @@ static bool rtl8192_adapter_start(struct net_device *dev)
        //
 #ifdef TO_DO_LIST
        if (Adapter->ResetProgress == RESET_TYPE_NORESET) {
-               if (pMgntInfo->RegRfOff == true) { /* User disable RF via registry. */
+               if (pMgntInfo->RegRfOff) { /* User disable RF via registry. */
                        RT_TRACE((COMP_INIT|COMP_RF), DBG_LOUD, ("InitializeAdapter819xUsb(): Turn off RF for RegRfOff ----------\n"));
                        MgntActSet_RF_State(Adapter, eRfOff, RF_CHANGE_BY_SW);
                        // Those actions will be discard in MgntActSet_RF_State because of the same state
@@ -4406,7 +4399,8 @@ static void query_rxdesc_status(struct sk_buff *skb,
        /* RTL8190 set this bit to indicate that Hw does not decrypt packet */
        stats->Decrypted = !desc->SWDec;
 
-       if ((priv->ieee80211->pHTInfo->bCurrentHTSupport == true) && (priv->ieee80211->pairwise_key_type == KEY_TYPE_CCMP))
+       if ((priv->ieee80211->pHTInfo->bCurrentHTSupport) &&
+           (priv->ieee80211->pairwise_key_type == KEY_TYPE_CCMP))
                stats->bHwError = false;
        else
                stats->bHwError = stats->bCRC|stats->bICV;
index 7ca5d8fbc57fe3faeb5416170d859185aabbbef4..5277f2eec0339537000c716ec9d65fda75cb2d99 100644 (file)
@@ -438,7 +438,7 @@ static void dm_bandwidth_autoswitch(struct net_device *dev)
 
        if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20 || !priv->ieee80211->bandwidth_auto_switch.bautoswitch_enable)
                return;
-       if (priv->ieee80211->bandwidth_auto_switch.bforced_tx20Mhz == false) { /* If send packets in 40 Mhz in 20/40 */
+       if (!priv->ieee80211->bandwidth_auto_switch.bforced_tx20Mhz) { /* If send packets in 40 Mhz in 20/40 */
                if (priv->undecorated_smoothed_pwdb <= priv->ieee80211->bandwidth_auto_switch.threshold_40Mhzto20Mhz)
                        priv->ieee80211->bandwidth_auto_switch.bforced_tx20Mhz = true;
        } else { /* in force send packets in 20 Mhz in 20/40 */
@@ -1731,7 +1731,7 @@ static void dm_dig_init(struct net_device *dev)
  *---------------------------------------------------------------------------*/
 static void dm_ctrl_initgain_byrssi(struct net_device *dev)
 {
-       if (dm_digtable.dig_enable_flag == false)
+       if (!dm_digtable.dig_enable_flag)
                return;
 
        if (dm_digtable.dig_algorithm == DIG_ALGO_BY_FALSE_ALARM)
@@ -1750,7 +1750,7 @@ static void dm_ctrl_initgain_byrssi_by_driverrssi(
        u8 i;
        static u8       fw_dig;
 
-       if (dm_digtable.dig_enable_flag == false)
+       if (!dm_digtable.dig_enable_flag)
                return;
 
        /*DbgPrint("Dig by Sw Rssi\n");*/
@@ -1792,7 +1792,7 @@ static void dm_ctrl_initgain_byrssi_by_fwfalse_alarm(
        static u32 reset_cnt;
        u8 i;
 
-       if (dm_digtable.dig_enable_flag == false)
+       if (!dm_digtable.dig_enable_flag)
                return;
 
        if (dm_digtable.dig_algorithm_switch) {
index d27b1e24ca4a1829141179bf7f2e617fa2eba79f..08302dfb0d90dd884d8889f245a5d804b0bd0dd3 100644 (file)
@@ -66,7 +66,7 @@ static bool fw_download_code(struct net_device *dev, u8 *code_virtual_address,
                skb  = dev_alloc_skb(USB_HWDESC_HEADER_LEN + frag_length + 4);
                if (!skb)
                        return false;
-               memcpy((unsigned char *)(skb->cb),&dev,sizeof(dev));
+               memcpy((unsigned char *)(skb->cb), &dev, sizeof(dev));
                tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
                tcb_desc->queue_index = TXCMD_QUEUE;
                tcb_desc->bCmdOrInit = DESC_PACKET_TYPE_INIT;
@@ -91,7 +91,7 @@ static bool fw_download_code(struct net_device *dev, u8 *code_virtual_address,
                if (!priv->ieee80211->check_nic_enough_desc(dev, index) ||
                       (!skb_queue_empty(&priv->ieee80211->skb_waitQ[index])) ||
                       (priv->ieee80211->queue_stop)) {
-                       RT_TRACE(COMP_FIRMWARE,"=====================================================> tx full!\n");
+                       RT_TRACE(COMP_FIRMWARE, "=====================================================> tx full!\n");
                        skb_queue_tail(&priv->ieee80211->skb_waitQ[tcb_desc->queue_index], skb);
                } else {
                        priv->ieee80211->softmac_hard_start_xmit(skb, dev);
@@ -144,7 +144,8 @@ static bool CPUcheck_maincodeok_turnonCPU(struct net_device *dev)
 
        /* Turn On CPU */
        read_nic_dword(dev, CPU_GEN, &CPU_status);
-       write_nic_byte(dev, CPU_GEN, (u8)((CPU_status|CPU_GEN_PWR_STB_CPU)&0xff));
+       write_nic_byte(dev, CPU_GEN,
+                      (u8)((CPU_status | CPU_GEN_PWR_STB_CPU) & 0xff));
        mdelay(1000);
 
        /* Check whether CPU boot OK */
@@ -242,7 +243,7 @@ bool init_firmware(struct net_device *dev)
                 * or read image file from array. Default load from IMG file
                 */
                if (rst_opt == OPT_SYSTEM_RESET) {
-                       rc = request_firmware(&fw_entry, fw_name[init_step],&priv->udev->dev);
+                       rc = request_firmware(&fw_entry, fw_name[init_step], &priv->udev->dev);
                        if (rc < 0) {
                                RT_TRACE(COMP_ERR, "request firmware fail!\n");
                                goto download_firmware_fail;
@@ -254,12 +255,12 @@ bool init_firmware(struct net_device *dev)
                        }
 
                        if (init_step != FW_INIT_STEP1_MAIN) {
-                               memcpy(pfirmware->firmware_buf,fw_entry->data,fw_entry->size);
+                               memcpy(pfirmware->firmware_buf, fw_entry->data, fw_entry->size);
                                mapped_file = pfirmware->firmware_buf;
                                file_length = fw_entry->size;
                        } else {
                                memset(pfirmware->firmware_buf, 0, 128);
-                               memcpy(&pfirmware->firmware_buf[128],fw_entry->data,fw_entry->size);
+                               memcpy(&pfirmware->firmware_buf[128], fw_entry->data, fw_entry->size);
                                mapped_file = pfirmware->firmware_buf;
                                file_length = fw_entry->size + 128;
                        }
@@ -319,7 +320,7 @@ bool init_firmware(struct net_device *dev)
 
                        rt_status = CPUcheck_firmware_ready(dev);
                        if (!rt_status) {
-                               RT_TRACE(COMP_ERR, "CPUcheck_firmware_ready fail(%d)!\n",rt_status);
+                               RT_TRACE(COMP_ERR, "CPUcheck_firmware_ready fail(%d)!\n", rt_status);
                                goto download_firmware_fail;
                        }
 
index 57868085ce58c45c85aa8a5a37bbb034675f83cc..c5527c1ccaa6d7103e52f18eba0375d0e5051ba7 100644 (file)
@@ -134,22 +134,20 @@ u8 *r8712_get_ie(u8 *pbuf, sint index, sint *len, sint limit)
        return NULL;
 }
 
-static void set_supported_rate(u8 *SupportedRates, uint mode)
+static void set_supported_rate(u8 *rates, uint mode)
 {
-       memset(SupportedRates, 0, NDIS_802_11_LENGTH_RATES_EX);
+       memset(rates, 0, NDIS_802_11_LENGTH_RATES_EX);
        switch (mode) {
        case WIRELESS_11B:
-               memcpy(SupportedRates, WIFI_CCKRATES,
-                       IEEE80211_CCK_RATE_LEN);
+               memcpy(rates, WIFI_CCKRATES, IEEE80211_CCK_RATE_LEN);
                break;
        case WIRELESS_11G:
        case WIRELESS_11A:
-               memcpy(SupportedRates, WIFI_OFDMRATES,
-                       IEEE80211_NUM_OFDM_RATESLEN);
+               memcpy(rates, WIFI_OFDMRATES, IEEE80211_NUM_OFDM_RATESLEN);
                break;
        case WIRELESS_11BG:
-               memcpy(SupportedRates, WIFI_CCKRATES, IEEE80211_CCK_RATE_LEN);
-               memcpy(SupportedRates + IEEE80211_CCK_RATE_LEN, WIFI_OFDMRATES,
+               memcpy(rates, WIFI_CCKRATES, IEEE80211_CCK_RATE_LEN);
+               memcpy(rates + IEEE80211_CCK_RATE_LEN, WIFI_OFDMRATES,
                        IEEE80211_NUM_OFDM_RATESLEN);
                break;
        }
@@ -195,17 +193,16 @@ int r8712_generate_ie(struct registry_priv *pregistrypriv)
        ie = r8712_set_ie(ie, _SSID_IE_, pdev_network->Ssid.SsidLength,
                    pdev_network->Ssid.Ssid, &sz);
        /*supported rates*/
-       set_supported_rate(pdev_network->SupportedRates,
-                          pregistrypriv->wireless_mode);
-       rateLen = r8712_get_rateset_len(pdev_network->SupportedRates);
+       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->SupportedRates, &sz);
+                           pdev_network->rates, &sz);
                ie = r8712_set_ie(ie, _EXT_SUPPORTEDRATES_IE_, (rateLen - 8),
-                           (pdev_network->SupportedRates + 8), &sz);
+                           (pdev_network->rates + 8), &sz);
        } else
                ie = r8712_set_ie(ie, _SUPPORTEDRATES_IE_,
-                           rateLen, pdev_network->SupportedRates, &sz);
+                           rateLen, pdev_network->rates, &sz);
        /*DS parameter set*/
        ie = r8712_set_ie(ie, _DSSET_IE_, 1,
                    (u8 *)&(pdev_network->Configuration.DSConfig), &sz);
index fcb8c61b28844fa78eb4c5637a11f7fa102865bc..4fa2540a6c3470c29cb364ef89372f1d583ab083 100644 (file)
@@ -58,8 +58,8 @@ int r8712_init_recv_priv(struct recv_priv *precvpriv, struct _adapter *padapter)
 
        /*init recv_buf*/
        _init_queue(&precvpriv->free_recv_buf_queue);
-       precvpriv->pallocated_recv_buf = kzalloc(NR_RECVBUFF * sizeof(struct recv_buf) + 4,
-                                                GFP_ATOMIC);
+       precvpriv->pallocated_recv_buf =
+               kzalloc(NR_RECVBUFF * sizeof(struct recv_buf) + 4, GFP_ATOMIC);
        if (precvpriv->pallocated_recv_buf == NULL)
                return _FAIL;
        precvpriv->precv_buf = precvpriv->pallocated_recv_buf + 4 -
index e35854d28f90ed96aa3ff149f39175c9e46b1373..ef7182961002e8c45394a6a208cfe9bf850023e3 100644 (file)
@@ -456,9 +456,7 @@ u8 r8712_createbss_cmd(struct _adapter *padapter)
        INIT_LIST_HEAD(&pcmd->list);
        pcmd->cmdcode = _CreateBss_CMD_;
        pcmd->parmbuf = (unsigned char *)pdev_network;
-       pcmd->cmdsz = r8712_get_ndis_wlan_bssid_ex_sz((
-                       struct ndis_wlan_bssid_ex *)
-                       pdev_network);
+       pcmd->cmdsz = r8712_get_wlan_bssid_ex_sz(pdev_network);
        pcmd->rsp = NULL;
        pcmd->rspsz = 0;
        /* notes: translate IELength & Length after assign to cmdsz; */
@@ -471,8 +469,7 @@ u8 r8712_createbss_cmd(struct _adapter *padapter)
 
 u8 r8712_joinbss_cmd(struct _adapter  *padapter, struct wlan_network *pnetwork)
 {
-       uint t_len = 0;
-       struct ndis_wlan_bssid_ex *psecnetwork;
+       struct wlan_bssid_ex *psecnetwork;
        struct cmd_obj          *pcmd;
        struct cmd_priv         *pcmdpriv = &padapter->cmdpriv;
        struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
@@ -486,14 +483,6 @@ u8 r8712_joinbss_cmd(struct _adapter  *padapter, struct wlan_network *pnetwork)
        pcmd = kmalloc(sizeof(*pcmd), GFP_ATOMIC);
        if (pcmd == NULL)
                return _FAIL;
-       t_len = sizeof(u32) + 6 * sizeof(unsigned char) + 2 +
-                       sizeof(struct ndis_802_11_ssid) + sizeof(u32) +
-                       sizeof(s32) +
-                       sizeof(enum NDIS_802_11_NETWORK_TYPE) +
-                       sizeof(struct NDIS_802_11_CONFIGURATION) +
-                       sizeof(enum NDIS_802_11_NETWORK_INFRASTRUCTURE) +
-                       sizeof(NDIS_802_11_RATES_EX) +
-                       sizeof(u32) + MAX_IE_SZ;
 
        /* for hidden ap to set fw_state here */
        if (check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) !=
@@ -511,12 +500,12 @@ u8 r8712_joinbss_cmd(struct _adapter  *padapter, struct wlan_network *pnetwork)
                        break;
                }
        }
-       psecnetwork = (struct ndis_wlan_bssid_ex *)&psecuritypriv->sec_bss;
+       psecnetwork = &psecuritypriv->sec_bss;
        if (psecnetwork == NULL) {
                kfree(pcmd);
                return _FAIL;
        }
-       memcpy(psecnetwork, &pnetwork->network, t_len);
+       memcpy(psecnetwork, &pnetwork->network, sizeof(*psecnetwork));
        psecuritypriv->authenticator_ie[0] = (unsigned char)
                                             psecnetwork->IELength;
        if ((psecnetwork->IELength-12) < (256 - 1))
@@ -575,7 +564,7 @@ u8 r8712_joinbss_cmd(struct _adapter  *padapter, struct wlan_network *pnetwork)
                memcpy(&psecuritypriv->supplicant_ie[1], &psecnetwork->IEs[0],
                        255);
        /* get cmdsz before endian conversion */
-       pcmd->cmdsz = r8712_get_ndis_wlan_bssid_ex_sz(psecnetwork);
+       pcmd->cmdsz = r8712_get_wlan_bssid_ex_sz(psecnetwork);
 #ifdef __BIG_ENDIAN
        /* wlan_network endian conversion */
        psecnetwork->Length = cpu_to_le32(psecnetwork->Length);
@@ -903,8 +892,7 @@ void r8712_createbss_cmd_callback(struct _adapter *padapter,
        struct sta_info *psta = NULL;
        struct wlan_network *pwlan = NULL;
        struct  mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct ndis_wlan_bssid_ex *pnetwork = (struct ndis_wlan_bssid_ex *)
-                                             pcmd->parmbuf;
+       struct wlan_bssid_ex *pnetwork = (struct wlan_bssid_ex *)pcmd->parmbuf;
        struct wlan_network *tgt_network = &(pmlmepriv->cur_network);
 
        if (pcmd->res != H2C_SUCCESS)
@@ -958,11 +946,11 @@ void r8712_createbss_cmd_callback(struct _adapter *padapter,
                } else
                        list_add_tail(&(pwlan->list),
                                         &pmlmepriv->scanned_queue.queue);
-               pnetwork->Length = r8712_get_ndis_wlan_bssid_ex_sz(pnetwork);
+               pnetwork->Length = r8712_get_wlan_bssid_ex_sz(pnetwork);
                memcpy(&(pwlan->network), pnetwork, pnetwork->Length);
                pwlan->fixed = true;
                memcpy(&tgt_network->network, pnetwork,
-                       (r8712_get_ndis_wlan_bssid_ex_sz(pnetwork)));
+                       (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
index cb8225b94cf10bdeaf71ae3468dd38a79ed934bf..818cd8807a380a45a111d889f8b43560a3014a52 100644 (file)
@@ -122,15 +122,6 @@ struct usb_suspend_parm {
        u32 action; /* 1: sleep, 0:resume */
 };
 
-/*
- * Caller Mode: Infra, Ad-Hoc
- * Notes: To join the specified bss
- * Command Event Mode
- */
-struct joinbss_parm {
-       struct ndis_wlan_bssid_ex network;
-};
-
 /*
  * Caller Mode: Infra, Ad-HoC(C)
  * Notes: To disconnect the current associated BSS
@@ -140,15 +131,6 @@ struct disconnect_parm {
        u32 rsvd;
 };
 
-/*
- * Caller Mode: AP, Ad-HoC(M)
- * Notes: To create a BSS
- * Command Mode
- */
-struct createbss_parm {
-       struct ndis_wlan_bssid_ex network;
-};
-
 /*
  * Caller Mode: AP, Ad-HoC, Infra
  * Notes: To set the NIC mode of RTL8711
index e03ee90d2870888c732f846b4d6567cace7ed8f9..697c8d735150eac0bf1dd9877038b314c541b797 100644 (file)
@@ -36,7 +36,7 @@
  * Used to report a bss has been scanned
 */
 struct survey_event    {
-       struct ndis_wlan_bssid_ex bss;
+       struct wlan_bssid_ex bss;
 };
 
 /*
index 3388f971fb486ca766db532a4035ecac5600f814..143be0fdc578ead8afcf361d9d0a7ebeabc995ec 100644 (file)
@@ -203,14 +203,12 @@ static inline char *translate_scan(struct _adapter *padapter,
        }
        /* Add the protocol name */
        iwe.cmd = SIOCGIWNAME;
-       if ((r8712_is_cckratesonly_included((u8 *)&pnetwork->network.
-            SupportedRates)) == true) {
+       if (r8712_is_cckratesonly_included(pnetwork->network.rates)) {
                if (ht_cap == true)
                        snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11bn");
                else
                        snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11b");
-       } else if ((r8712_is_cckrates_included((u8 *)&pnetwork->network.
-                   SupportedRates)) == true) {
+       } else if (r8712_is_cckrates_included(pnetwork->network.rates)) {
                if (ht_cap == true)
                        snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11bgn");
                else
@@ -270,9 +268,9 @@ static inline char *translate_scan(struct _adapter *padapter,
        iwe.u.bitrate.disabled = 0;
        iwe.u.bitrate.value = 0;
        i = 0;
-       while (pnetwork->network.SupportedRates[i] != 0) {
+       while (pnetwork->network.rates[i] != 0) {
                /* Bit rate given in 500 kb/s units */
-               iwe.u.bitrate.value = (pnetwork->network.SupportedRates[i++] &
+               iwe.u.bitrate.value = (pnetwork->network.rates[i++] &
                                      0x7F) * 500000;
                current_val = iwe_stream_add_value(info, start, current_val,
                              stop, &iwe, IW_EV_PARAM_LEN);
@@ -634,8 +632,8 @@ static int r8711_wx_get_name(struct net_device *dev,
        char *p;
        u8 ht_cap = false;
        struct  mlme_priv       *pmlmepriv = &(padapter->mlmepriv);
-       struct ndis_wlan_bssid_ex  *pcur_bss = &pmlmepriv->cur_network.network;
-       NDIS_802_11_RATES_EX *prates = NULL;
+       struct wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network;
+       u8 *prates;
 
        if (check_fwstate(pmlmepriv, _FW_LINKED|WIFI_ADHOC_MASTER_STATE) ==
            true) {
@@ -644,15 +642,15 @@ static int r8711_wx_get_name(struct net_device *dev,
                                 &ht_ielen, pcur_bss->IELength - 12);
                if (p && ht_ielen > 0)
                        ht_cap = true;
-               prates = &pcur_bss->SupportedRates;
-               if (r8712_is_cckratesonly_included((u8 *)prates) == true) {
+               prates = pcur_bss->rates;
+               if (r8712_is_cckratesonly_included(prates) == true) {
                        if (ht_cap == true)
                                snprintf(wrqu->name, IFNAMSIZ,
                                         "IEEE 802.11bn");
                        else
                                snprintf(wrqu->name, IFNAMSIZ,
                                         "IEEE 802.11b");
-               } else if ((r8712_is_cckrates_included((u8 *)prates)) == true) {
+               } else if ((r8712_is_cckrates_included(prates)) == true) {
                        if (ht_cap == true)
                                snprintf(wrqu->name, IFNAMSIZ,
                                         "IEEE 802.11bgn");
@@ -723,7 +721,7 @@ static int r8711_wx_get_freq(struct net_device *dev,
 {
        struct _adapter *padapter = netdev_priv(dev);
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct ndis_wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network;
+       struct wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network;
 
        if (check_fwstate(pmlmepriv, _FW_LINKED) == true) {
                wrqu->freq.m = ieee80211_wlan_frequencies[
@@ -1111,7 +1109,7 @@ static int r8711_wx_get_wap(struct net_device *dev,
 {
        struct _adapter *padapter = netdev_priv(dev);
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct ndis_wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network;
+       struct wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network;
 
        wrqu->ap_addr.sa_family = ARPHRD_ETHER;
        if (check_fwstate(pmlmepriv, _FW_LINKED | WIFI_ADHOC_MASTER_STATE |
@@ -1327,7 +1325,7 @@ static int r8711_wx_get_essid(struct net_device *dev,
 {
        struct _adapter *padapter = netdev_priv(dev);
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct ndis_wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network;
+       struct wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network;
        u32 len, ret = 0;
 
        if (check_fwstate(pmlmepriv, _FW_LINKED|WIFI_ADHOC_MASTER_STATE)) {
@@ -1419,7 +1417,7 @@ static int r8711_wx_get_rate(struct net_device *dev,
 {
        struct _adapter *padapter = netdev_priv(dev);
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct ndis_wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network;
+       struct wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network;
        struct ieee80211_ht_cap *pht_capie;
        unsigned char rf_type = padapter->registrypriv.rf_config;
        int i;
@@ -1444,9 +1442,9 @@ static int r8711_wx_get_rate(struct net_device *dev,
                                    (IEEE80211_HT_CAP_SGI_20 |
                                    IEEE80211_HT_CAP_SGI_40)) ? 1 : 0;
                }
-               while ((pcur_bss->SupportedRates[i] != 0) &&
-                       (pcur_bss->SupportedRates[i] != 0xFF)) {
-                       rate = pcur_bss->SupportedRates[i] & 0x7F;
+               while ((pcur_bss->rates[i] != 0) &&
+                       (pcur_bss->rates[i] != 0xFF)) {
+                       rate = pcur_bss->rates[i] & 0x7F;
                        if (rate > max_rate)
                                max_rate = rate;
                        wrqu->bitrate.fixed = 0;        /* no auto select */
index c044b0e55ba93d0c989031d52ce99f4008ae0630..fc5dbea08cb490d53cda38f81c3e3404fac09b6a 100644 (file)
@@ -208,19 +208,9 @@ void r8712_generate_random_ibss(u8 *pibss)
        pibss[5] = (u8)((curtime>>16) & 0xff);
 }
 
-uint r8712_get_ndis_wlan_bssid_ex_sz(struct ndis_wlan_bssid_ex *bss)
+uint r8712_get_wlan_bssid_ex_sz(struct wlan_bssid_ex *bss)
 {
-       uint t_len;
-
-       t_len = sizeof(u32) + 6 * sizeof(unsigned long) + 2 +
-                       sizeof(struct ndis_802_11_ssid) + sizeof(u32) +
-                       sizeof(s32) +
-                       sizeof(enum NDIS_802_11_NETWORK_TYPE) +
-                       sizeof(struct NDIS_802_11_CONFIGURATION) +
-                       sizeof(enum NDIS_802_11_NETWORK_INFRASTRUCTURE) +
-                       sizeof(NDIS_802_11_RATES_EX) +
-                       sizeof(u32) + bss->IELength;
-       return t_len;
+       return sizeof(*bss) + bss->IELength - MAX_IE_SZ;
 }
 
 u8 *r8712_get_capability_from_ie(u8 *ie)
@@ -286,8 +276,8 @@ int r8712_is_same_ibss(struct _adapter *adapter, struct wlan_network *pnetwork)
 
 }
 
-static int is_same_network(struct ndis_wlan_bssid_ex *src,
-                          struct ndis_wlan_bssid_ex *dst)
+static int is_same_network(struct wlan_bssid_ex *src,
+                          struct wlan_bssid_ex *dst)
 {
         u16 s_cap, d_cap;
 
@@ -332,8 +322,8 @@ struct      wlan_network *r8712_get_oldest_wlan_network(
        return oldest;
 }
 
-static void update_network(struct ndis_wlan_bssid_ex *dst,
-                          struct ndis_wlan_bssid_ex *src,
+static void update_network(struct wlan_bssid_ex *dst,
+                          struct wlan_bssid_ex *src,
                           struct _adapter *padapter)
 {
        u32 last_evm = 0, tmpVal;
@@ -366,11 +356,11 @@ static void update_network(struct ndis_wlan_bssid_ex *dst,
                src->Rssi = padapter->recvpriv.signal;
        } else
                src->Rssi = (src->Rssi + dst->Rssi) / 2;
-       memcpy((u8 *)dst, (u8 *)src, r8712_get_ndis_wlan_bssid_ex_sz(src));
+       memcpy((u8 *)dst, (u8 *)src, r8712_get_wlan_bssid_ex_sz(src));
 }
 
 static void update_current_network(struct _adapter *adapter,
-                                  struct ndis_wlan_bssid_ex *pnetwork)
+                                  struct wlan_bssid_ex *pnetwork)
 {
        struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
 
@@ -388,7 +378,7 @@ static void update_current_network(struct _adapter *adapter,
 Caller must hold pmlmepriv->lock first.
 */
 static void update_scanned_network(struct _adapter *adapter,
-                           struct ndis_wlan_bssid_ex *target)
+                           struct wlan_bssid_ex *target)
 {
        struct list_head *plist, *phead;
 
@@ -426,7 +416,7 @@ static void update_scanned_network(struct _adapter *adapter,
                        target->Rssi = (pnetwork->network.Rssi +
                                        target->Rssi) / 2;
                        memcpy(&pnetwork->network, target,
-                               r8712_get_ndis_wlan_bssid_ex_sz(target));
+                               r8712_get_wlan_bssid_ex_sz(target));
                        pnetwork->last_scanned = jiffies;
                } else {
                        /* Otherwise just pull from the free list */
@@ -434,7 +424,7 @@ static void update_scanned_network(struct _adapter *adapter,
                        pnetwork = alloc_network(pmlmepriv);
                        if (pnetwork == NULL)
                                return;
-                       bssid_ex_sz = r8712_get_ndis_wlan_bssid_ex_sz(target);
+                       bssid_ex_sz = r8712_get_wlan_bssid_ex_sz(target);
                        target->Length = bssid_ex_sz;
                        memcpy(&pnetwork->network, target, bssid_ex_sz);
                        list_add_tail(&pnetwork->list, &queue->queue);
@@ -451,7 +441,7 @@ static void update_scanned_network(struct _adapter *adapter,
 }
 
 static void rtl8711_add_network(struct _adapter *adapter,
-                        struct ndis_wlan_bssid_ex *pnetwork)
+                        struct wlan_bssid_ex *pnetwork)
 {
        unsigned long irqL;
        struct mlme_priv *pmlmepriv = &(((struct _adapter *)adapter)->mlmepriv);
@@ -507,10 +497,10 @@ void r8712_survey_event_callback(struct _adapter *adapter, u8 *pbuf)
 {
        unsigned long flags;
        u32 len;
-       struct ndis_wlan_bssid_ex *pnetwork;
+       struct wlan_bssid_ex *pnetwork;
        struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
 
-       pnetwork = (struct ndis_wlan_bssid_ex *)pbuf;
+       pnetwork = (struct wlan_bssid_ex *)pbuf;
 #ifdef __BIG_ENDIAN
        /* endian_convert */
        pnetwork->Length = le32_to_cpu(pnetwork->Length);
@@ -538,7 +528,7 @@ void r8712_survey_event_callback(struct _adapter *adapter, u8 *pbuf)
                 le32_to_cpu(pnetwork->InfrastructureMode);
        pnetwork->IELength = le32_to_cpu(pnetwork->IELength);
 #endif
-       len = r8712_get_ndis_wlan_bssid_ex_sz(pnetwork);
+       len = r8712_get_wlan_bssid_ex_sz(pnetwork);
        if (len > sizeof(struct wlan_bssid_ex))
                return;
        spin_lock_irqsave(&pmlmepriv->lock2, flags);
@@ -769,7 +759,7 @@ void r8712_joinbss_event_callback(struct _adapter *adapter, u8 *pbuf)
        the_same_macaddr = !memcmp(pnetwork->network.MacAddress,
                                   cur_network->network.MacAddress, ETH_ALEN);
        pnetwork->network.Length =
-                r8712_get_ndis_wlan_bssid_ex_sz(&pnetwork->network);
+                r8712_get_wlan_bssid_ex_sz(&pnetwork->network);
        spin_lock_irqsave(&pmlmepriv->lock, irqL);
        if (pnetwork->network.Length > sizeof(struct wlan_bssid_ex))
                goto ignore_joinbss_callback;
@@ -1001,7 +991,7 @@ void r8712_stadel_event_callback(struct _adapter *adapter, u8 *pbuf)
                        pdev_network = &(adapter->registrypriv.dev_network);
                        pibss = adapter->registrypriv.dev_network.MacAddress;
                        memcpy(pdev_network, &tgt_network->network,
-                               r8712_get_ndis_wlan_bssid_ex_sz(&tgt_network->
+                               r8712_get_wlan_bssid_ex_sz(&tgt_network->
                                                        network));
                        memcpy(&pdev_network->Ssid,
                                &pmlmepriv->assoc_ssid,
@@ -1668,8 +1658,7 @@ void r8712_update_registrypriv_dev_network(struct _adapter *adapter)
         */
        sz = r8712_generate_ie(pregistrypriv);
        pdev_network->IELength = sz;
-       pdev_network->Length = r8712_get_ndis_wlan_bssid_ex_sz(
-                             (struct ndis_wlan_bssid_ex *)pdev_network);
+       pdev_network->Length = r8712_get_wlan_bssid_ex_sz(pdev_network);
 }
 
 /*the function is at passive_level*/
index 42bd0bf8a8168b30d181eff560c6f86e5d522498..08d6c986c11e26f5afe8f3eaab963ab31b54f949 100644 (file)
@@ -202,7 +202,7 @@ sint r8712_set_key(struct _adapter *adapter,
                   struct security_priv *psecuritypriv, sint keyid);
 sint r8712_set_auth(struct _adapter *adapter,
                    struct security_priv *psecuritypriv);
-uint r8712_get_ndis_wlan_bssid_ex_sz(struct ndis_wlan_bssid_ex *bss);
+uint r8712_get_wlan_bssid_ex_sz(struct wlan_bssid_ex *bss);
 void r8712_generate_random_ibss(u8 *pibss);
 u8 *r8712_get_capability_from_ie(u8 *ie);
 struct wlan_network *r8712_get_oldest_wlan_network(
index 0b5461208eb902637c2179d0a9782ccb5eb8b75f..77f01bf1ca3c023e04653e7c1e5290ad4efb398d 100644 (file)
@@ -160,13 +160,13 @@ static int mp_start_test(struct _adapter *padapter)
        struct mp_priv *pmppriv = &padapter->mppriv;
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
        struct wlan_network *tgt_network = &pmlmepriv->cur_network;
-       struct ndis_wlan_bssid_ex bssid;
+       struct wlan_bssid_ex bssid;
        struct sta_info *psta;
        unsigned long length;
        unsigned long irqL;
        int res = _SUCCESS;
 
-       /* 3 1. initialize a new struct ndis_wlan_bssid_ex */
+       /* 3 1. initialize a new struct wlan_bssid_ex */
        memcpy(bssid.MacAddress, pmppriv->network_macaddr, ETH_ALEN);
        bssid.Ssid.SsidLength = 16;
        memcpy(bssid.Ssid.Ssid, (unsigned char *)"mp_pseudo_adhoc",
@@ -174,7 +174,7 @@ static int mp_start_test(struct _adapter *padapter)
        bssid.InfrastructureMode = Ndis802_11IBSS;
        bssid.NetworkTypeInUse = Ndis802_11DS;
        bssid.IELength = 0;
-       length = r8712_get_ndis_wlan_bssid_ex_sz(&bssid);
+       length = r8712_get_wlan_bssid_ex_sz(&bssid);
        if (length % 4) {
                /*round up to multiple of 4 bytes.*/
                bssid.Length = ((length >> 2) + 1) << 2;
index bcd1a51288689d1043d069b3d96829baa87b8408..862792826dc5f73839eb28a6f8dd35742cd1a6b8 100644 (file)
@@ -124,28 +124,25 @@ static u8 crc32_reverseBit(u8 data)
 
 static void crc32_init(void)
 {
+       sint i, j;
+       u32 c;
+       u8 *p = (u8 *)&c, *p1;
+       u8 k;
+
        if (bcrc32initialized == 1)
                return;
-       else {
-               sint i, j;
-               u32 c;
-               u8 *p = (u8 *)&c, *p1;
-               u8 k;
-
-               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;
+
+       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, u32 len)
index 2ea8a3d6b705587a715127650d4c69792d422d31..fda5707c4acda0f383fccc9b29f1c70cfa6e058d 100644 (file)
 #define NDIS_802_11_LENGTH_RATES        8
 #define NDIS_802_11_LENGTH_RATES_EX     16
 
-/* Set of 8 data rates*/
-typedef unsigned char   NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES];
-/* Set of 16 data rates */
-typedef unsigned char   NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX];
-
 struct ndis_802_11_ssid {
        u32 SsidLength;
        u8  Ssid[32];
@@ -83,18 +78,7 @@ struct NDIS_802_11_FIXED_IEs {
        u16 Capabilities;
 };
 
-/*
- * Length is the 4 bytes multiples of the sume of
- * 6 * sizeof (unsigned char) + 2 + sizeof (ndis_802_11_ssid) + sizeof (u32)
- * + sizeof (s32) + sizeof (NDIS_802_11_NETWORK_TYPE)
- * + sizeof (struct NDIS_802_11_CONFIGURATION)
- * + sizeof (NDIS_802_11_RATES_EX) + IELength
-
- * Except the IELength, all other fields are fixed length. Therefore, we can
- * define a macro to present the partial sum.
- */
-
-struct ndis_wlan_bssid_ex {
+struct wlan_bssid_ex {
        u32 Length;
        unsigned char  MacAddress[6];
        u8  Reserved[2];
@@ -104,7 +88,8 @@ struct ndis_wlan_bssid_ex {
        enum NDIS_802_11_NETWORK_TYPE  NetworkTypeInUse;
        struct NDIS_802_11_CONFIGURATION  Configuration;
        enum NDIS_802_11_NETWORK_INFRASTRUCTURE  InfrastructureMode;
-       NDIS_802_11_RATES_EX  SupportedRates;
+       u8 rates[NDIS_802_11_LENGTH_RATES_EX];
+       /* number of content bytes in EIs, which varies */
        u32 IELength;
        /*(timestamp, beacon interval, and capability information) */
        u8 IEs[MAX_IE_SZ];
@@ -213,7 +198,7 @@ struct      wlan_network {
        unsigned int    last_scanned; /*timestamp for the network */
        int     aid;            /*will only be valid when a BSS is joined. */
        int     join_res;
-       struct ndis_wlan_bssid_ex network; /*must be the last item */
+       struct wlan_bssid_ex network; /*must be the last item */
 };
 
 enum VRTL_CARRIER_SENSE {
@@ -244,24 +229,5 @@ enum UAPSD_MAX_SP {
 #define NUM_PRE_AUTH_KEY 16
 #define NUM_PMKID_CACHE NUM_PRE_AUTH_KEY
 
-/*
- *     WPA2
- */
-struct wlan_bssid_ex {
-       u32 Length;
-       unsigned char  MacAddress[6];
-       u8  Reserved[2];
-       struct ndis_802_11_ssid  Ssid;
-       u32 Privacy;
-       s32 Rssi;
-       enum NDIS_802_11_NETWORK_TYPE  NetworkTypeInUse;
-       struct NDIS_802_11_CONFIGURATION  Configuration;
-       enum NDIS_802_11_NETWORK_INFRASTRUCTURE  InfrastructureMode;
-       NDIS_802_11_RATES_EX  SupportedRates;
-       u32 IELength;
-       u8  IEs[MAX_IE_SZ];     /* (timestamp, beacon interval, and capability
-                                * information) */
-};
-
 #endif /* #ifndef WLAN_BSSDEF_H_ */
 
index 274a4b65c0226d33581f3cfde71e7ca04ad940ba..ad0549c66529057dac8fe4ed5264df7666c95e39 100644 (file)
@@ -1554,8 +1554,7 @@ static int wlanhdr_to_ethhdr (struct recv_frame *precvframe)
        ether_addr_copy(ptr + ETH_ALEN, pattrib->src);
 
        if (!bsnaphdr) {
-               len = htons(len);
-               memcpy(ptr + 12, &len, 2);
+               put_unaligned_be16(len, ptr + 12);
        }
 
 
index f354f5e11a3028d1463535d358401ce440d003f6..6b9dbeffafcbd029ce1311540125b428553f4b21 100644 (file)
@@ -985,7 +985,7 @@ void ODM_RF_Saving23a(struct dm_odm_t *pDM_Odm, u8 bForceInNormal)
                        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);
index 342dec3e939f325eae79d2b31766047c0802cdca..a63c6cb88bc9eff4f1ab951e186057164165de84 100644 (file)
@@ -21,7 +21,7 @@ odm_ConfigRFReg_8723A(
        struct dm_odm_t *pDM_Odm,
        u32                                     Addr,
        u32                                     Data,
-  enum RF_RADIO_PATH     RF_PATH,
+       enum RF_RADIO_PATH     RF_PATH,
        u32                                 RegAddr
        )
 {
index cb5076abda8bc14c20554f42f88fd7678011f66f..cf2388f4f6e75b9d047aaac669e8d8f6cbb0632a 100644 (file)
@@ -1838,7 +1838,7 @@ Hal_EfuseParseThermalMeter_8723A(struct rtw_adapter *padapter,
 
 static void rtl8723a_cal_txdesc_chksum(struct tx_desc *ptxdesc)
 {
-       u16 *usPtr = (u16 *) ptxdesc;
+       __le16 *usPtr = (__le16 *)ptxdesc;
        u32 count = 16;         /*  (32 bytes / 2 bytes per XOR) => 16 times */
        u32 index;
        u16 checksum = 0;
@@ -1847,7 +1847,7 @@ static void rtl8723a_cal_txdesc_chksum(struct tx_desc *ptxdesc)
        ptxdesc->txdw7 &= cpu_to_le32(0xffff0000);
 
        for (index = 0; index < count; index++)
-               checksum ^= le16_to_cpu(*(usPtr + index));
+               checksum ^= le16_to_cpu(usPtr[index]);
 
        ptxdesc->txdw7 |= cpu_to_le32(checksum & 0x0000ffff);
 }
index ee818b0dc4011f7aab19db049e7fb6f82958f197..cdaa1aba50edeb1b428e83069b1565fa7e523d82 100644 (file)
@@ -1121,11 +1121,10 @@ static int ms_read_attribute_info(struct rtsx_chip *chip)
 
 #ifdef SUPPORT_MSXC
                if ((buf[cur_addr_off + 8] == 0x10) ||
-                       (buf[cur_addr_off + 8] == 0x13))
+                       (buf[cur_addr_off + 8] == 0x13)) {
 #else
-               if (buf[cur_addr_off + 8] == 0x10)
+               if (buf[cur_addr_off + 8] == 0x10) {
 #endif
-               {
                        sys_info_addr = ((u32)buf[cur_addr_off + 0] << 24) |
                                ((u32)buf[cur_addr_off + 1] << 16) |
                                ((u32)buf[cur_addr_off + 2] << 8) |
index a8d657bb5c1bca8f99be1ea050a952ff9d337afa..d6c498209b2c6a4020a864a3b2e752881d4db1f1 100644 (file)
@@ -246,11 +246,10 @@ RTY_SEND_CMD:
                                }
                        }
 #ifdef SUPPORT_SD_LOCK
-                       if (ptr[1] & 0x7D)
+                       if (ptr[1] & 0x7D) {
 #else
-                       if (ptr[1] & 0x7F)
+                       if (ptr[1] & 0x7F) {
 #endif
-                       {
                                dev_dbg(rtsx_dev(chip), "ptr[1]: 0x%02x\n",
                                        ptr[1]);
                                rtsx_trace(chip);
@@ -3520,12 +3519,11 @@ int reset_sd_card(struct rtsx_chip *chip)
                        if (chip->sd_io) {
                                rtsx_trace(chip);
                                return STATUS_FAIL;
-                       } else {
-                               retval = reset_mmc(chip);
-                               if (retval != STATUS_SUCCESS) {
-                                       rtsx_trace(chip);
-                                       return STATUS_FAIL;
-                               }
+                       }
+                       retval = reset_mmc(chip);
+                       if (retval != STATUS_SUCCESS) {
+                               rtsx_trace(chip);
+                               return STATUS_FAIL;
                        }
                }
        }
@@ -4149,11 +4147,10 @@ RTY_SEND_CMD:
                        }
                }
 #ifdef SUPPORT_SD_LOCK
-               if (ptr[1] & 0x7D)
+               if (ptr[1] & 0x7D) {
 #else
-               if (ptr[1] & 0x7F)
+               if (ptr[1] & 0x7F) {
 #endif
-               {
                        rtsx_trace(chip);
                        return STATUS_FAIL;
                }
index a609f3e67256aba12dbfda1fb9e1e2d3958c2f67..858597087ba7d0bf809984dfb0dca9a0a2d9a811 100644 (file)
@@ -2329,6 +2329,7 @@ static int slic_if_init(struct adapter *adapter, unsigned long *flags)
 
        if (!adapter->isp_initialized) {
                unsigned long flags;
+
                pshmem = (struct slic_shmem *)(unsigned long)
                         adapter->phys_shmem;
 
index f4975d2d97ad5a282ce4f2bc13a56bb154f4345c..5e6798ea9468af13a15bdbf366a6b61387c9144e 100644 (file)
@@ -268,7 +268,7 @@ int ddk750_initHw(initchip_param_t *pInitParam)
 #endif
 
 
-       if (pInitParam->powerMode != 0 )
+       if (pInitParam->powerMode != 0)
                pInitParam->powerMode = 0;
        setPowerMode(pInitParam->powerMode);
 
@@ -464,17 +464,18 @@ unsigned int calcPllValue(unsigned int request_orig, pll_value_t *pll)
                RN = N * request;
                quo = RN / input;
                rem = RN % input;/* rem always small than 14318181 */
-               fl_quo = (rem * 10000 /input);
+               fl_quo = (rem * 10000 / input);
 
                for (d = xcnt - 1; d >= 0; d--) {
                        X = xparm[d].value;
                        M = quo*X;
                        M += fl_quo * X / 10000;
                        /* round step */
-                       M += (fl_quo*X % 10000)>5000?1:0;
+                       M += (fl_quo*X % 10000) > 5000?1:0;
                        if (M < 256 && M > 0) {
                                unsigned int diff;
-                               tmpClock = pll->inputFreq *M / N / X;
+
+                               tmpClock = pll->inputFreq * M / N / X;
                                diff = absDiff(tmpClock, request_orig);
                                if (diff < miniDiff) {
                                        pll->M = M;
@@ -599,9 +600,9 @@ unsigned int formatPllReg(pll_value_t *pPLL)
        On returning a 32 bit number, the value can be applied to any PLL in the calling function.
     */
        ulPllReg =
-       FIELD_SET(  0, PANEL_PLL_CTRL, BYPASS, OFF)
-       | FIELD_SET(  0, PANEL_PLL_CTRL, POWER,  ON)
-       | FIELD_SET(  0, PANEL_PLL_CTRL, INPUT,  OSC)
+       FIELD_SET(0, PANEL_PLL_CTRL, BYPASS, OFF)
+       | FIELD_SET(0, PANEL_PLL_CTRL, POWER,  ON)
+       | FIELD_SET(0, PANEL_PLL_CTRL, INPUT,  OSC)
 #ifndef VALIDATION_CHIP
        | FIELD_VALUE(0, PANEL_PLL_CTRL, POD,    pPLL->POD)
 #endif
index 4e030e820cf328db9636a0254e953950ea249a1e..6ff043608fe95c8be833fabd7f8cc972990ff220 100644 (file)
@@ -8,8 +8,7 @@
 #include <linux/io.h>
 
 /* This is all the chips recognized by this library */
-typedef enum _logical_chip_type_t
-{
+typedef enum _logical_chip_type_t {
        SM_UNKNOWN,
        SM718,
        SM750,
@@ -18,8 +17,7 @@ typedef enum _logical_chip_type_t
 logical_chip_type_t;
 
 
-typedef enum _clock_type_t
-{
+typedef enum _clock_type_t {
        MXCLK_PLL,
        PRIMARY_PLL,
        SECONDARY_PLL,
@@ -28,8 +26,7 @@ typedef enum _clock_type_t
 }
 clock_type_t;
 
-typedef struct _pll_value_t
-{
+typedef struct _pll_value_t {
        clock_type_t clockType;
        unsigned long inputFreq; /* Input clock frequency to the PLL */
 
@@ -42,8 +39,7 @@ typedef struct _pll_value_t
 pll_value_t;
 
 /* input struct to initChipParam() function */
-typedef struct _initchip_param_t
-{
+typedef struct _initchip_param_t {
        unsigned short powerMode;    /* Use power mode 0 or 1 */
        unsigned short chipClock;    /**
                                      * Speed of main chip clock in MHz unit
index a3e672056ef8b99794e08085ed6cb20ca27decd4..8348113482d998754218d859d6b618a7a32a949c 100644 (file)
@@ -15,16 +15,14 @@ static void setDisplayControl(int ctrl, int dispState)
        cnt = 0;
 
        /* Set the primary display control */
-       if (!ctrl)
-       {
+       if (!ctrl) {
                ulDisplayCtrlReg = PEEK32(PANEL_DISPLAY_CTRL);
                /* Turn on/off the Panel display control */
-               if (dispState)
-               {
+               if (dispState) {
                        /* Timing should be enabled first before enabling the plane
                         * because changing at the same time does not guarantee that
                         * the plane will also enabled or disabled.
-            */
+                        */
                        ulDisplayCtrlReg = FIELD_SET(ulDisplayCtrlReg,
                                                                PANEL_DISPLAY_CTRL, TIMING, ENABLE);
                        POKE32(PANEL_DISPLAY_CTRL, ulDisplayCtrlReg);
@@ -45,16 +43,13 @@ static void setDisplayControl(int ctrl, int dispState)
                         * until a few delay. Need to write
                         * and read it a couple times
                         */
-                       do
-                       {
+                       do {
                                cnt++;
                                POKE32(PANEL_DISPLAY_CTRL, ulDisplayCtrlReg);
-                       } while((PEEK32(PANEL_DISPLAY_CTRL) & ~ulReservedBits) !=
+                       } while ((PEEK32(PANEL_DISPLAY_CTRL) & ~ulReservedBits) !=
                                        (ulDisplayCtrlReg & ~ulReservedBits));
                        printk("Set Panel Plane enbit:after tried %d times\n", cnt);
-               }
-               else
-               {
+               } else {
                        /* When turning off, there is no rule on the programming
                         * sequence since whenever the clock is off, then it does not
                         * matter whether the plane is enabled or disabled.
@@ -71,14 +66,11 @@ static void setDisplayControl(int ctrl, int dispState)
                        POKE32(PANEL_DISPLAY_CTRL, ulDisplayCtrlReg);
                }
 
-       }
-       /* Set the secondary display control */
-       else
-       {
+       } else {
+               /* Set the secondary display control */
                ulDisplayCtrlReg = PEEK32(CRT_DISPLAY_CTRL);
 
-               if (dispState)
-               {
+               if (dispState) {
                        /* Timing should be enabled first before enabling the plane because changing at the
                           same time does not guarantee that the plane will also enabled or disabled.
                           */
@@ -100,16 +92,13 @@ static void setDisplayControl(int ctrl, int dispState)
                                FIELD_SET(0, CRT_DISPLAY_CTRL, RESERVED_3_MASK, ENABLE) |
                                FIELD_SET(0, CRT_DISPLAY_CTRL, RESERVED_4_MASK, ENABLE);
 
-                       do
-                       {
+                       do {
                                cnt++;
                                POKE32(CRT_DISPLAY_CTRL, ulDisplayCtrlReg);
-                       } while((PEEK32(CRT_DISPLAY_CTRL) & ~ulReservedBits) !=
+                       } while ((PEEK32(CRT_DISPLAY_CTRL) & ~ulReservedBits) !=
                                        (ulDisplayCtrlReg & ~ulReservedBits));
                                printk("Set Crt Plane enbit:after tried %d times\n", cnt);
-               }
-               else
-               {
+               } else {
                        /* When turning off, there is no rule on the programming
                         * sequence since whenever the clock is off, then it does not
                         * matter whether the plane is enabled or disabled.
@@ -132,71 +121,60 @@ static void setDisplayControl(int ctrl, int dispState)
 static void waitNextVerticalSync(int ctrl, int delay)
 {
        unsigned int status;
-       if(!ctrl){
+
+       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 ((FIELD_GET(PEEK32(PANEL_PLL_CTRL), PANEL_PLL_CTRL, POWER) ==
                         PANEL_PLL_CTRL_POWER_OFF) ||
                        (FIELD_GET(PEEK32(PANEL_DISPLAY_CTRL), PANEL_DISPLAY_CTRL, TIMING) ==
-                        PANEL_DISPLAY_CTRL_TIMING_DISABLE))
-               {
+                        PANEL_DISPLAY_CTRL_TIMING_DISABLE)) {
                        return;
                }
 
-        while (delay-- > 0)
-        {
-            /* Wait for end of vsync. */
-            do
-            {
-                status = FIELD_GET(PEEK32(SYSTEM_CTRL),
-                                   SYSTEM_CTRL,
-                                   PANEL_VSYNC);
-            }
-            while (status == SYSTEM_CTRL_PANEL_VSYNC_ACTIVE);
-
-            /* Wait for start of vsync. */
-            do
-            {
-                status = FIELD_GET(PEEK32(SYSTEM_CTRL),
-                                   SYSTEM_CTRL,
-                                   PANEL_VSYNC);
-            }
-            while (status == SYSTEM_CTRL_PANEL_VSYNC_INACTIVE);
-        }
-
-       }else{
+               while (delay-- > 0) {
+                       /* Wait for end of vsync. */
+                       do {
+                               status = FIELD_GET(PEEK32(SYSTEM_CTRL),
+                                                  SYSTEM_CTRL,
+                                                  PANEL_VSYNC);
+                       } while (status == SYSTEM_CTRL_PANEL_VSYNC_ACTIVE);
+
+                       /* Wait for start of vsync. */
+                       do {
+                               status = FIELD_GET(PEEK32(SYSTEM_CTRL),
+                                                  SYSTEM_CTRL,
+                                                  PANEL_VSYNC);
+                       } while (status == SYSTEM_CTRL_PANEL_VSYNC_INACTIVE);
+               }
+
+       } else {
 
                /* Do not wait when the Primary PLL is off or display control is already off.
                           This will prevent the software to wait forever. */
                if ((FIELD_GET(PEEK32(CRT_PLL_CTRL), CRT_PLL_CTRL, POWER) ==
                         CRT_PLL_CTRL_POWER_OFF) ||
                        (FIELD_GET(PEEK32(CRT_DISPLAY_CTRL), CRT_DISPLAY_CTRL, TIMING) ==
-                        CRT_DISPLAY_CTRL_TIMING_DISABLE))
-               {
+                        CRT_DISPLAY_CTRL_TIMING_DISABLE)) {
                        return;
                }
 
-               while (delay-- > 0)
-               {
+               while (delay-- > 0) {
                        /* Wait for end of vsync. */
-                       do
-                       {
+                       do {
                                status = FIELD_GET(PEEK32(SYSTEM_CTRL),
                                                                   SYSTEM_CTRL,
                                                                   CRT_VSYNC);
-                       }
-                       while (status == SYSTEM_CTRL_CRT_VSYNC_ACTIVE);
+                       } while (status == SYSTEM_CTRL_CRT_VSYNC_ACTIVE);
 
                        /* Wait for start of vsync. */
-                       do
-                       {
+                       do {
                                status = FIELD_GET(PEEK32(SYSTEM_CTRL),
                                                                   SYSTEM_CTRL,
                                                                   CRT_VSYNC);
-                       }
-                       while (status == SYSTEM_CTRL_CRT_VSYNC_INACTIVE);
+                       } while (status == SYSTEM_CTRL_CRT_VSYNC_INACTIVE);
                }
        }
 }
@@ -233,14 +211,15 @@ static void swPanelPowerSequence(int disp, int delay)
 void ddk750_setLogicalDispOut(disp_output_t output)
 {
        unsigned int reg;
-       if(output & PNL_2_USAGE){
+
+       if (output & PNL_2_USAGE) {
                /* set panel path controller select */
                reg = PEEK32(PANEL_DISPLAY_CTRL);
                reg = FIELD_VALUE(reg, PANEL_DISPLAY_CTRL, SELECT, (output & PNL_2_MASK)>>PNL_2_OFFSET);
                POKE32(PANEL_DISPLAY_CTRL, reg);
        }
 
-       if(output & CRT_2_USAGE){
+       if (output & CRT_2_USAGE) {
                /* set crt path controller select */
                reg = PEEK32(CRT_DISPLAY_CTRL);
                reg = FIELD_VALUE(reg, CRT_DISPLAY_CTRL, SELECT, (output & CRT_2_MASK)>>CRT_2_OFFSET);
@@ -250,58 +229,57 @@ void ddk750_setLogicalDispOut(disp_output_t output)
 
        }
 
-       if(output & PRI_TP_USAGE){
+       if (output & PRI_TP_USAGE) {
                /* set primary timing and plane en_bit */
                setDisplayControl(0, (output&PRI_TP_MASK)>>PRI_TP_OFFSET);
        }
 
-       if(output & SEC_TP_USAGE){
+       if (output & SEC_TP_USAGE) {
                /* set secondary timing and plane en_bit*/
                setDisplayControl(1, (output&SEC_TP_MASK)>>SEC_TP_OFFSET);
        }
 
-       if(output & PNL_SEQ_USAGE){
+       if (output & PNL_SEQ_USAGE) {
                /* set  panel sequence */
                swPanelPowerSequence((output&PNL_SEQ_MASK)>>PNL_SEQ_OFFSET, 4);
        }
 
-       if(output & DAC_USAGE)
+       if (output & DAC_USAGE)
                setDAC((output & DAC_MASK)>>DAC_OFFSET);
 
-       if(output & DPMS_USAGE)
+       if (output & DPMS_USAGE)
                ddk750_setDPMS((output & DPMS_MASK) >> DPMS_OFFSET);
 }
 
 
 int ddk750_initDVIDisp(void)
 {
-    /* Initialize DVI. If the dviInit fail and the VendorID or the DeviceID are
-       not zeroed, then set the failure flag. If it is zeroe, it might mean
-       that the system is in Dual CRT Monitor configuration. */
-
-    /* De-skew enabled with default 111b value.
-       This will fix some artifacts problem in some mode on board 2.2.
-       Somehow this fix does not affect board 2.1.
-     */
-    if ((dviInit(1,  /* Select Rising Edge */
-                1,  /* Select 24-bit bus */
-                0,  /* Select Single Edge clock */
-                1,  /* Enable HSync as is */
-                1,  /* Enable VSync as is */
-                1,  /* Enable De-skew */
-                7,  /* Set the de-skew setting to maximum setup */
-                1,  /* Enable continuous Sync */
-                1,  /* Enable PLL Filter */
-                4   /* Use the recommended value for PLL Filter value */
-        ) != 0) && (dviGetVendorID() != 0x0000) && (dviGetDeviceID() != 0x0000))
-    {
-        return (-1);
-    }
-
-    /* TODO: Initialize other display component */
-
-    /* Success */
-    return 0;
+       /* Initialize DVI. If the dviInit fail and the VendorID or the DeviceID are
+          not zeroed, then set the failure flag. If it is zeroe, it might mean
+          that the system is in Dual CRT Monitor configuration. */
+
+       /* De-skew enabled with default 111b value.
+          This will fix some artifacts problem in some mode on board 2.2.
+          Somehow this fix does not affect board 2.1.
+        */
+       if ((dviInit(1,  /* Select Rising Edge */
+                    1,  /* Select 24-bit bus */
+                    0,  /* Select Single Edge clock */
+                    1,  /* Enable HSync as is */
+                    1,  /* Enable VSync as is */
+                    1,  /* Enable De-skew */
+                    7,  /* Set the de-skew setting to maximum setup */
+                    1,  /* Enable continuous Sync */
+                    1,  /* Enable PLL Filter */
+                    4   /* Use the recommended value for PLL Filter value */
+                    ) != 0) && (dviGetVendorID() != 0x0000) && (dviGetDeviceID() != 0x0000)) {
+               return (-1);
+       }
+
+       /* TODO: Initialize other display component */
+
+       /* Success */
+       return 0;
 
 }
 
index ae0f84c68de5b670c3560ed9e92c8dada854af46..abccf84a8c9a752f4d6ae663171890853e85bc93 100644 (file)
@@ -8,7 +8,7 @@
 #define PNL_2_OFFSET 0
 #define PNL_2_MASK (3 << PNL_2_OFFSET)
 #define PNL_2_USAGE    (PNL_2_MASK << 16)
-#define PNL_2_PRI      ((0 << PNL_2_OFFSET)|PNL_2_USAGE)
+#define PNL_2_PRI      ((0 << PNL_2_OFFSET)|PNL_2_USAGE)
 #define PNL_2_SEC      ((2 << PNL_2_OFFSET)|PNL_2_USAGE)
 
 
@@ -46,7 +46,7 @@
        0: both off
 */
 #define SEC_TP_OFFSET 5
-#define SEC_TP_MASK (1<< SEC_TP_OFFSET)
+#define SEC_TP_MASK (1 << SEC_TP_OFFSET)
 #define SEC_TP_USAGE (SEC_TP_MASK << 16)
 #define SEC_TP_ON  ((0x1 << SEC_TP_OFFSET)|SEC_TP_USAGE)
 #define SEC_TP_OFF ((0x0 << SEC_TP_OFFSET)|SEC_TP_USAGE)
@@ -67,7 +67,7 @@
 #define DAC_OFFSET 7
 #define DAC_MASK (1 << DAC_OFFSET)
 #define DAC_USAGE (DAC_MASK << 16)
-#define DAC_ON ((0x0<< DAC_OFFSET)|DAC_USAGE)
+#define DAC_ON ((0x0 << DAC_OFFSET)|DAC_USAGE)
 #define DAC_OFF ((0x1 << DAC_OFFSET)|DAC_USAGE)
 
 /* DPMS only affect D-SUB head
@@ -86,8 +86,7 @@
        CRT means crt path DSUB
 */
 #if 0
-typedef enum _disp_output_t
-{
+typedef enum _disp_output_t {
        NO_DISPLAY = DPMS_OFF,
 
        LCD1_PRI = PNL_2_PRI|PRI_TP_ON|PNL_SEQ_ON|DPMS_OFF|DAC_ON,
@@ -129,7 +128,7 @@ typedef enum _disp_output_t
 }
 disp_output_t;
 #else
-typedef enum _disp_output_t{
+typedef enum _disp_output_t {
        do_LCD1_PRI = PNL_2_PRI|PRI_TP_ON|PNL_SEQ_ON|DAC_ON,
        do_LCD1_SEC = PNL_2_SEC|SEC_TP_ON|PNL_SEQ_ON|DAC_ON,
 #if 0
index b2bf7e66d5cb5104674e19e04b34140752bd15f2..a7a23514ac3900b31e20844b676c8d22e3cfb925 100644 (file)
@@ -1,4 +1,4 @@
-#define USE_DVICHIP 
+#define USE_DVICHIP
 #ifdef USE_DVICHIP
 #include "ddk750_help.h"
 #include "ddk750_reg.h"
@@ -9,47 +9,46 @@
 /* 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[] =
-{
+static dvi_ctrl_device_t g_dcftSupportedDviController[] = {
 #ifdef DVI_CTRL_SII164
-    {
-        .pfnInit = sii164InitChip,
-        .pfnGetVendorId = sii164GetVendorID,
-        .pfnGetDeviceId = sii164GetDeviceID,
+       {
+               .pfnInit = sii164InitChip,
+               .pfnGetVendorId = sii164GetVendorID,
+               .pfnGetDeviceId = sii164GetDeviceID,
 #ifdef SII164_FULL_FUNCTIONS
-        .pfnResetChip = sii164ResetChip,
-        .pfnGetChipString = sii164GetChipString,
-        .pfnSetPower = sii164SetPower,
-        .pfnEnableHotPlugDetection = sii164EnableHotPlugDetection,
-        .pfnIsConnected = sii164IsConnected,
-        .pfnCheckInterrupt = sii164CheckInterrupt,
-        .pfnClearInterrupt = sii164ClearInterrupt,
+               .pfnResetChip = sii164ResetChip,
+               .pfnGetChipString = sii164GetChipString,
+               .pfnSetPower = sii164SetPower,
+               .pfnEnableHotPlugDetection = sii164EnableHotPlugDetection,
+               .pfnIsConnected = sii164IsConnected,
+               .pfnCheckInterrupt = sii164CheckInterrupt,
+               .pfnClearInterrupt = sii164ClearInterrupt,
 #endif
-    },
+       },
 #endif
 };
 
 
 int dviInit(
-    unsigned char edgeSelect,
-    unsigned char busSelect,
-    unsigned char dualEdgeClkSelect,
-    unsigned char hsyncEnable,
-    unsigned char vsyncEnable,
-    unsigned char deskewEnable,
-    unsigned char deskewSetting,
-    unsigned char continuousSyncEnable,
-    unsigned char pllFilterEnable,
-    unsigned char pllFilterValue
+       unsigned char edgeSelect,
+       unsigned char busSelect,
+       unsigned char dualEdgeClkSelect,
+       unsigned char hsyncEnable,
+       unsigned char vsyncEnable,
+       unsigned char deskewEnable,
+       unsigned char deskewSetting,
+       unsigned char continuousSyncEnable,
+       unsigned char pllFilterEnable,
+       unsigned char pllFilterValue
                        )
 {
        dvi_ctrl_device_t *pCurrentDviCtrl;
+
        pCurrentDviCtrl = g_dcftSupportedDviController;
-       if(pCurrentDviCtrl->pfnInit != NULL)
-       {
+       if (pCurrentDviCtrl->pfnInit != NULL) {
                return pCurrentDviCtrl->pfnInit(edgeSelect, busSelect, dualEdgeClkSelect, hsyncEnable,
-                              vsyncEnable, deskewEnable, deskewSetting, continuousSyncEnable,
-                              pllFilterEnable, pllFilterValue);
+                                               vsyncEnable, deskewEnable, deskewSetting, continuousSyncEnable,
+                                               pllFilterEnable, pllFilterValue);
        }
        return -1; /* error */
 }
@@ -64,13 +63,13 @@ int dviInit(
  */
 unsigned short dviGetVendorID(void)
 {
-    dvi_ctrl_device_t *pCurrentDviCtrl;
+       dvi_ctrl_device_t *pCurrentDviCtrl;
 
-    pCurrentDviCtrl = g_dcftSupportedDviController;
-    if (pCurrentDviCtrl != (dvi_ctrl_device_t *)0)
-        return pCurrentDviCtrl->pfnGetVendorId();
+       pCurrentDviCtrl = g_dcftSupportedDviController;
+       if (pCurrentDviCtrl != (dvi_ctrl_device_t *)0)
+               return pCurrentDviCtrl->pfnGetVendorId();
 
-    return 0x0000;
+       return 0x0000;
 }
 
 
@@ -83,13 +82,13 @@ unsigned short dviGetVendorID(void)
  */
 unsigned short dviGetDeviceID(void)
 {
-    dvi_ctrl_device_t *pCurrentDviCtrl;
+       dvi_ctrl_device_t *pCurrentDviCtrl;
 
        pCurrentDviCtrl = g_dcftSupportedDviController;
-    if (pCurrentDviCtrl != (dvi_ctrl_device_t *)0)
-        return pCurrentDviCtrl->pfnGetDeviceId();
+       if (pCurrentDviCtrl != (dvi_ctrl_device_t *)0)
+               return pCurrentDviCtrl->pfnGetDeviceId();
 
-    return 0x0000;
+       return 0x0000;
 }
 
 #endif
index 83bbd6d62061b1f58c99d43866b570cce37f48eb..e1d4c9a2d50a2461e685960cd97271079c152b4f 100644 (file)
@@ -26,8 +26,7 @@ typedef unsigned char (*PFN_DVICTRL_CHECKINTERRUPT)(void);
 typedef void (*PFN_DVICTRL_CLEARINTERRUPT)(void);
 
 /* Structure to hold all the function pointer to the DVI Controller. */
-typedef struct _dvi_ctrl_device_t
-{
+typedef struct _dvi_ctrl_device_t {
        PFN_DVICTRL_INIT                pfnInit;
        PFN_DVICTRL_RESETCHIP           pfnResetChip;
        PFN_DVICTRL_GETCHIPSTRING       pfnGetChipString;
index 1adcafcc51336b7bcdcd30a8b1bbc552611ab5b3..9637dd30d037918325391f84758ea3505657a418 100644 (file)
@@ -1,8 +1,8 @@
 #include "ddk750_help.h"
 
-void __iomem *mmio750 = NULL;
-char revId750 = 0;
-unsigned short devId750 = 0;
+void __iomem *mmio750;
+char revId750;
+unsigned short devId750;
 
 /* after driver mapped io registers, use this function first */
 void ddk750_set_mmio(void __iomem *addr, unsigned short devId, char revId)
@@ -10,7 +10,7 @@ void ddk750_set_mmio(void __iomem *addr, unsigned short devId, char revId)
        mmio750 = addr;
        devId750 = devId;
        revId750 = revId;
-       if(revId == 0xfe)
+       if (revId == 0xfe)
                printk("found sm750le\n");
 }
 
index 4285b056585aaed3883a80482c1fae6a10236f0a..3b06aed431bd23b24746492002107f80c92e890b 100644 (file)
@@ -12,8 +12,8 @@
 #if 0
 /* if 718 big endian turned on,be aware that don't use this driver for general use,only for ppc big-endian */
 #warning "big endian on target cpu and enable nature big endian support of 718 capability !"
-#define PEEK32(addr)                   __raw_readl(mmio750 + addr)
-#define POKE32(addr, data)             __raw_writel(data, mmio750 + addr)
+#define PEEK32(addr)                   __raw_readl(mmio750 + addr)
+#define POKE32(addr, data)             __raw_writel(data, mmio750 + addr)
 #else /* software control endianness */
 #define PEEK32(addr) readl(addr + mmio750)
 #define POKE32(addr, data) writel(data, addr + mmio750)
index 7826376ed705d587c9e214a6e71177359b4a9286..5ddac430aea2ef321d8a5c2bf189f7535b8299b6 100644 (file)
 
 
 int hwI2CInit(
-    unsigned char busSpeedMode
+unsigned char busSpeedMode
 )
 {
-    unsigned int value;
+       unsigned int value;
 
-    /* Enable GPIO 30 & 31 as IIC clock & data */
+       /* Enable GPIO 30 & 31 as IIC clock & data */
        value = PEEK32(GPIO_MUX);
 
-    value = FIELD_SET(value, GPIO_MUX, 30, I2C) |
-                       FIELD_SET(0, GPIO_MUX, 31, I2C);
+       value = FIELD_SET(value, GPIO_MUX, 30, I2C) |
+                         FIELD_SET(0, GPIO_MUX, 31, I2C);
        POKE32(GPIO_MUX, value);
 
-    /* Enable Hardware I2C power.
-       TODO: Check if we need to enable GPIO power?
-     */
-    enableI2C(1);
-
-    /* Enable the I2C Controller and set the bus speed mode */
-    value = PEEK32(I2C_CTRL);
-    if (busSpeedMode == 0)
-        value = FIELD_SET(value, I2C_CTRL, MODE, STANDARD);
-    else
-        value = FIELD_SET(value, I2C_CTRL, MODE, FAST);
-    value = FIELD_SET(value, I2C_CTRL, EN, ENABLE);
-    POKE32(I2C_CTRL, value);
-
-    return 0;
+       /* Enable Hardware I2C power.
+        TODO: Check if we need to enable GPIO power?
+        */
+       enableI2C(1);
+
+       /* Enable the I2C Controller and set the bus speed mode */
+       value = PEEK32(I2C_CTRL);
+       if (busSpeedMode == 0)
+               value = FIELD_SET(value, I2C_CTRL, MODE, STANDARD);
+       else
+               value = FIELD_SET(value, I2C_CTRL, MODE, FAST);
+       value = FIELD_SET(value, I2C_CTRL, EN, ENABLE);
+       POKE32(I2C_CTRL, value);
+
+       return 0;
 }
 
 
 void hwI2CClose(void)
 {
-    unsigned int value;
+       unsigned int value;
 
-    /* Disable I2C controller */
-    value = PEEK32(I2C_CTRL);
-    value = FIELD_SET(value, I2C_CTRL, EN, DISABLE);
-    POKE32(I2C_CTRL, value);
+       /* Disable I2C controller */
+       value = PEEK32(I2C_CTRL);
+       value = FIELD_SET(value, I2C_CTRL, EN, DISABLE);
+       POKE32(I2C_CTRL, value);
 
-    /* Disable I2C Power */
-    enableI2C(0);
+       /* Disable I2C Power */
+       enableI2C(0);
 
-    /* Set GPIO 30 & 31 back as GPIO pins */
-    value = PEEK32(GPIO_MUX);
-    value = FIELD_SET(value, GPIO_MUX, 30, GPIO);
-    value = FIELD_SET(value, GPIO_MUX, 31, GPIO);
-    POKE32(GPIO_MUX, value);
+       /* Set GPIO 30 & 31 back as GPIO pins */
+       value = PEEK32(GPIO_MUX);
+       value = FIELD_SET(value, GPIO_MUX, 30, GPIO);
+       value = FIELD_SET(value, GPIO_MUX, 31, GPIO);
+       POKE32(GPIO_MUX, value);
 }
 
 
 static long hwI2CWaitTXDone(void)
 {
-    unsigned int timeout;
+       unsigned int timeout;
 
-    /* Wait until the transfer is completed. */
-    timeout = HWI2C_WAIT_TIMEOUT;
+       /* Wait until the transfer is completed. */
+       timeout = HWI2C_WAIT_TIMEOUT;
        while ((FIELD_GET(PEEK32(I2C_STATUS), I2C_STATUS, TX) != I2C_STATUS_TX_COMPLETED) &&
-           (timeout != 0))
+              (timeout != 0))
                timeout--;
 
        if (timeout == 0)
-           return (-1);
+               return (-1);
 
-    return 0;
+       return 0;
 }
 
 
@@ -91,53 +91,52 @@ static long hwI2CWaitTXDone(void)
  *      Total number of bytes those are actually written.
  */
 static unsigned int hwI2CWriteData(
-    unsigned char deviceAddress,
-    unsigned int length,
-    unsigned char *pBuffer
+       unsigned char deviceAddress,
+       unsigned int length,
+       unsigned char *pBuffer
 )
 {
-    unsigned char count, i;
-    unsigned int totalBytes = 0;
+       unsigned char count, i;
+       unsigned int totalBytes = 0;
 
-    /* Set the Device Address */
-    POKE32(I2C_SLAVE_ADDRESS, deviceAddress & ~0x01);
+       /* Set the Device Address */
+       POKE32(I2C_SLAVE_ADDRESS, deviceAddress & ~0x01);
 
-    /* Write data.
-     * Note:
-     *      Only 16 byte can be accessed per i2c start instruction.
-     */
-    do
-    {
-        /* Reset I2C by writing 0 to I2C_RESET register to clear the previous status. */
-        POKE32(I2C_RESET, 0);
+       /* Write data.
+        * Note:
+        *      Only 16 byte can be accessed per i2c start instruction.
+        */
+       do {
+               /* Reset I2C by writing 0 to I2C_RESET register to clear the previous status. */
+               POKE32(I2C_RESET, 0);
 
-        /* Set the number of bytes to be written */
-        if (length < MAX_HWI2C_FIFO)
-            count = length - 1;
-        else
-            count = MAX_HWI2C_FIFO - 1;
-        POKE32(I2C_BYTE_COUNT, count);
+               /* Set the number of bytes to be written */
+               if (length < MAX_HWI2C_FIFO)
+                       count = length - 1;
+               else
+                       count = MAX_HWI2C_FIFO - 1;
+               POKE32(I2C_BYTE_COUNT, count);
 
-        /* Move the data to the I2C data register */
-           for (i = 0; i <= count; i++)
-            POKE32(I2C_DATA0 + i, *pBuffer++);
+               /* Move the data to the I2C data register */
+               for (i = 0; i <= count; i++)
+                       POKE32(I2C_DATA0 + i, *pBuffer++);
 
-        /* Start the I2C */
-        POKE32(I2C_CTRL, FIELD_SET(PEEK32(I2C_CTRL), I2C_CTRL, CTRL, START));
+               /* Start the I2C */
+               POKE32(I2C_CTRL, FIELD_SET(PEEK32(I2C_CTRL), I2C_CTRL, CTRL, START));
 
-        /* Wait until the transfer is completed. */
-        if (hwI2CWaitTXDone() != 0)
-            break;
+               /* Wait until the transfer is completed. */
+               if (hwI2CWaitTXDone() != 0)
+                       break;
 
-        /* Substract length */
-        length -= (count + 1);
+               /* Substract length */
+               length -= (count + 1);
 
-        /* Total byte written */
-        totalBytes += (count + 1);
+               /* Total byte written */
+               totalBytes += (count + 1);
 
-    } while (length > 0);
+       } while (length > 0);
 
-    return totalBytes;
+       return totalBytes;
 }
 
 
@@ -158,53 +157,52 @@ static unsigned int hwI2CWriteData(
  *      Total number of actual bytes read from the slave device
  */
 static unsigned int hwI2CReadData(
-    unsigned char deviceAddress,
-    unsigned int length,
-    unsigned char *pBuffer
+       unsigned char deviceAddress,
+       unsigned int length,
+       unsigned char *pBuffer
 )
 {
-    unsigned char count, i;
-    unsigned int totalBytes = 0;
+       unsigned char count, i;
+       unsigned int totalBytes = 0;
 
-    /* Set the Device Address */
-    POKE32(I2C_SLAVE_ADDRESS, deviceAddress | 0x01);
+       /* Set the Device Address */
+       POKE32(I2C_SLAVE_ADDRESS, deviceAddress | 0x01);
 
-    /* Read data and save them to the buffer.
-     * Note:
-     *      Only 16 byte can be accessed per i2c start instruction.
-     */
-    do
-    {
-        /* Reset I2C by writing 0 to I2C_RESET register to clear all the status. */
-        POKE32(I2C_RESET, 0);
+       /* Read data and save them to the buffer.
+        * Note:
+        *      Only 16 byte can be accessed per i2c start instruction.
+        */
+       do {
+               /* Reset I2C by writing 0 to I2C_RESET register to clear all the status. */
+               POKE32(I2C_RESET, 0);
 
-        /* Set the number of bytes to be read */
-        if (length <= MAX_HWI2C_FIFO)
-            count = length - 1;
-        else
-            count = MAX_HWI2C_FIFO - 1;
-        POKE32(I2C_BYTE_COUNT, count);
+               /* Set the number of bytes to be read */
+               if (length <= MAX_HWI2C_FIFO)
+                       count = length - 1;
+               else
+                       count = MAX_HWI2C_FIFO - 1;
+               POKE32(I2C_BYTE_COUNT, count);
 
-        /* Start the I2C */
-        POKE32(I2C_CTRL, FIELD_SET(PEEK32(I2C_CTRL), I2C_CTRL, CTRL, START));
+               /* Start the I2C */
+               POKE32(I2C_CTRL, FIELD_SET(PEEK32(I2C_CTRL), I2C_CTRL, CTRL, START));
 
-        /* Wait until transaction done. */
-        if (hwI2CWaitTXDone() != 0)
-            break;
+               /* Wait until transaction done. */
+               if (hwI2CWaitTXDone() != 0)
+                       break;
 
-        /* Save the data to the given buffer */
-        for (i = 0; i <= count; i++)
-                   *pBuffer++ = PEEK32(I2C_DATA0 + i);
+               /* Save the data to the given buffer */
+               for (i = 0; i <= count; i++)
+                       *pBuffer++ = PEEK32(I2C_DATA0 + i);
 
-        /* Substract length by 16 */
-        length -= (count + 1);
+               /* Substract length by 16 */
+               length -= (count + 1);
 
-        /* Number of bytes read. */
-        totalBytes += (count + 1);
+               /* Number of bytes read. */
+               totalBytes += (count + 1);
 
-    } while (length > 0);
+       } while (length > 0);
 
-    return totalBytes;
+       return totalBytes;
 }
 
 
@@ -222,16 +220,16 @@ static unsigned int hwI2CReadData(
  *      Register value
  */
 unsigned char hwI2CReadReg(
-    unsigned char deviceAddress,
-    unsigned char registerIndex
+       unsigned char deviceAddress,
+       unsigned char registerIndex
 )
 {
-    unsigned char value = (0xFF);
+       unsigned char value = (0xFF);
 
-    if (hwI2CWriteData(deviceAddress, 1, &registerIndex) == 1)
-        hwI2CReadData(deviceAddress, 1, &value);
+       if (hwI2CWriteData(deviceAddress, 1, &registerIndex) == 1)
+               hwI2CReadData(deviceAddress, 1, &value);
 
-    return value;
+       return value;
 }
 
 
@@ -252,19 +250,19 @@ unsigned char hwI2CReadReg(
  *         -1   - Fail
  */
 int hwI2CWriteReg(
-    unsigned char deviceAddress,
-    unsigned char registerIndex,
-    unsigned char data
+       unsigned char deviceAddress,
+       unsigned char registerIndex,
+       unsigned char data
 )
 {
-    unsigned char value[2];
+       unsigned char value[2];
 
-    value[0] = registerIndex;
-    value[1] = data;
-    if (hwI2CWriteData(deviceAddress, 2, value) == 2)
-        return 0;
+       value[0] = registerIndex;
+       value[1] = data;
+       if (hwI2CWriteData(deviceAddress, 2, value) == 2)
+               return 0;
 
-    return (-1);
+       return (-1);
 }
 
 
index 74313ff84e456879854b4cb7d07067ca62dbea68..2399b175ade0f222757a1485ffdde2d09c72e4be 100644 (file)
@@ -20,54 +20,54 @@ static unsigned long displayControlAdjust_SM750LE(mode_parameter_t *pModeParam,
        x = pModeParam->horizontal_display_end;
        y = pModeParam->vertical_display_end;
 
-    /* SM750LE has to set up the top-left and bottom-right
-       registers as well.
-       Note that normal SM750/SM718 only use those two register for
-       auto-centering mode.
-    */
-    POKE32(CRT_AUTO_CENTERING_TL,
-      FIELD_VALUE(0, CRT_AUTO_CENTERING_TL, TOP, 0)
-    | FIELD_VALUE(0, CRT_AUTO_CENTERING_TL, LEFT, 0));
-
-    POKE32(CRT_AUTO_CENTERING_BR,
-      FIELD_VALUE(0, CRT_AUTO_CENTERING_BR, BOTTOM, y-1)
-    | FIELD_VALUE(0, CRT_AUTO_CENTERING_BR, RIGHT, x-1));
-
-    /* Assume common fields in dispControl have been properly set before
-       calling this function.
-       This function only sets the extra fields in dispControl.
-    */
+       /* SM750LE has to set up the top-left and bottom-right
+          registers as well.
+          Note that normal SM750/SM718 only use those two register for
+          auto-centering mode.
+        */
+       POKE32(CRT_AUTO_CENTERING_TL,
+       FIELD_VALUE(0, CRT_AUTO_CENTERING_TL, TOP, 0)
+       | FIELD_VALUE(0, CRT_AUTO_CENTERING_TL, LEFT, 0));
+
+       POKE32(CRT_AUTO_CENTERING_BR,
+       FIELD_VALUE(0, CRT_AUTO_CENTERING_BR, BOTTOM, y-1)
+       | FIELD_VALUE(0, CRT_AUTO_CENTERING_BR, RIGHT, x-1));
+
+       /* Assume common fields in dispControl have been properly set before
+          calling this function.
+          This function only sets the extra fields in dispControl.
+        */
 
        /* Clear bit 29:27 of display control register */
-    dispControl &= FIELD_CLEAR(CRT_DISPLAY_CTRL, CLK);
+       dispControl &= FIELD_CLEAR(CRT_DISPLAY_CTRL, CLK);
 
        /* Set bit 29:27 of display control register for the right clock */
        /* Note that SM750LE only need to supported 7 resoluitons. */
-       if ( x == 800 && y == 600 )
-       dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, PLL41);
+       if (x == 800 && y == 600)
+               dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, PLL41);
        else if (x == 1024 && y == 768)
-       dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, PLL65);
+               dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, PLL65);
        else if (x == 1152 && y == 864)
-       dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, PLL80);
+               dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, PLL80);
        else if (x == 1280 && y == 768)
-       dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, PLL80);
+               dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, PLL80);
        else if (x == 1280 && y == 720)
-       dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, PLL74);
+               dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, PLL74);
        else if (x == 1280 && y == 960)
-       dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, PLL108);
+               dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, PLL108);
        else if (x == 1280 && y == 1024)
-       dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, PLL108);
+               dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, PLL108);
        else /* default to VGA clock */
-       dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, PLL25);
+       dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, PLL25);
 
        /* Set bit 25:24 of display controller */
-    dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CRTSELECT, CRT);
-    dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, RGBBIT, 24BIT);
+       dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CRTSELECT, CRT);
+       dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, RGBBIT, 24BIT);
 
-    /* Set bit 14 of display controller */
-    dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLOCK_PHASE, ACTIVE_LOW);
+       /* Set bit 14 of display controller */
+       dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLOCK_PHASE, ACTIVE_LOW);
 
-    POKE32(CRT_DISPLAY_CTRL, dispControl);
+       POKE32(CRT_DISPLAY_CTRL, dispControl);
 
        return dispControl;
 }
@@ -80,25 +80,25 @@ static int programModeRegisters(mode_parameter_t *pModeParam, pll_value_t *pll)
        int ret = 0;
        int cnt = 0;
        unsigned int ulTmpValue, ulReg;
-       if(pll->clockType == SECONDARY_PLL)
-       {
+
+       if (pll->clockType == SECONDARY_PLL) {
                /* programe secondary pixel clock */
                POKE32(CRT_PLL_CTRL, formatPllReg(pll));
-        POKE32(CRT_HORIZONTAL_TOTAL,
-              FIELD_VALUE(0, CRT_HORIZONTAL_TOTAL, TOTAL, pModeParam->horizontal_total - 1)
-            | FIELD_VALUE(0, CRT_HORIZONTAL_TOTAL, DISPLAY_END, pModeParam->horizontal_display_end - 1));
+               POKE32(CRT_HORIZONTAL_TOTAL,
+               FIELD_VALUE(0, CRT_HORIZONTAL_TOTAL, TOTAL, pModeParam->horizontal_total - 1)
+               | FIELD_VALUE(0, CRT_HORIZONTAL_TOTAL, DISPLAY_END, pModeParam->horizontal_display_end - 1));
 
-        POKE32(CRT_HORIZONTAL_SYNC,
-              FIELD_VALUE(0, CRT_HORIZONTAL_SYNC, WIDTH, pModeParam->horizontal_sync_width)
-            | FIELD_VALUE(0, CRT_HORIZONTAL_SYNC, START, pModeParam->horizontal_sync_start - 1));
+               POKE32(CRT_HORIZONTAL_SYNC,
+               FIELD_VALUE(0, CRT_HORIZONTAL_SYNC, WIDTH, pModeParam->horizontal_sync_width)
+               | FIELD_VALUE(0, CRT_HORIZONTAL_SYNC, START, pModeParam->horizontal_sync_start - 1));
 
-        POKE32(CRT_VERTICAL_TOTAL,
-              FIELD_VALUE(0, CRT_VERTICAL_TOTAL, TOTAL, pModeParam->vertical_total - 1)
-            | FIELD_VALUE(0, CRT_VERTICAL_TOTAL, DISPLAY_END, pModeParam->vertical_display_end - 1));
+               POKE32(CRT_VERTICAL_TOTAL,
+               FIELD_VALUE(0, CRT_VERTICAL_TOTAL, TOTAL, pModeParam->vertical_total - 1)
+               | FIELD_VALUE(0, CRT_VERTICAL_TOTAL, DISPLAY_END, pModeParam->vertical_display_end - 1));
 
-        POKE32(CRT_VERTICAL_SYNC,
-              FIELD_VALUE(0, CRT_VERTICAL_SYNC, HEIGHT, pModeParam->vertical_sync_height)
-            | FIELD_VALUE(0, CRT_VERTICAL_SYNC, START, pModeParam->vertical_sync_start - 1));
+               POKE32(CRT_VERTICAL_SYNC,
+               FIELD_VALUE(0, CRT_VERTICAL_SYNC, HEIGHT, pModeParam->vertical_sync_height)
+               | FIELD_VALUE(0, CRT_VERTICAL_SYNC, START, pModeParam->vertical_sync_start - 1));
 
 
                ulTmpValue = FIELD_VALUE(0, CRT_DISPLAY_CTRL, VSYNC_PHASE, pModeParam->vertical_sync_polarity)|
@@ -107,9 +107,9 @@ static int programModeRegisters(mode_parameter_t *pModeParam, pll_value_t *pll)
                                          FIELD_SET(0, CRT_DISPLAY_CTRL, PLANE, ENABLE);
 
 
-               if(getChipType() == SM750LE){
+               if (getChipType() == SM750LE) {
                        displayControlAdjust_SM750LE(pModeParam, ulTmpValue);
-               }else{
+               } else {
                        ulReg = PEEK32(CRT_DISPLAY_CTRL)
                                        & FIELD_CLEAR(CRT_DISPLAY_CTRL, VSYNC_PHASE)
                                        & FIELD_CLEAR(CRT_DISPLAY_CTRL, HSYNC_PHASE)
@@ -119,45 +119,44 @@ static int programModeRegisters(mode_parameter_t *pModeParam, pll_value_t *pll)
                         POKE32(CRT_DISPLAY_CTRL, ulTmpValue|ulReg);
                }
 
-       }
-       else if(pll->clockType == PRIMARY_PLL)
-       {
+       } else if (pll->clockType == PRIMARY_PLL) {
                unsigned int ulReservedBits;
+
                POKE32(PANEL_PLL_CTRL, formatPllReg(pll));
 
-        POKE32(PANEL_HORIZONTAL_TOTAL,
-              FIELD_VALUE(0, PANEL_HORIZONTAL_TOTAL, TOTAL, pModeParam->horizontal_total - 1)
-            | FIELD_VALUE(0, PANEL_HORIZONTAL_TOTAL, DISPLAY_END, pModeParam->horizontal_display_end - 1));
+               POKE32(PANEL_HORIZONTAL_TOTAL,
+               FIELD_VALUE(0, PANEL_HORIZONTAL_TOTAL, TOTAL, pModeParam->horizontal_total - 1)
+               | FIELD_VALUE(0, PANEL_HORIZONTAL_TOTAL, DISPLAY_END, pModeParam->horizontal_display_end - 1));
 
-        POKE32(PANEL_HORIZONTAL_SYNC,
-              FIELD_VALUE(0, PANEL_HORIZONTAL_SYNC, WIDTH, pModeParam->horizontal_sync_width)
-            | FIELD_VALUE(0, PANEL_HORIZONTAL_SYNC, START, pModeParam->horizontal_sync_start - 1));
+               POKE32(PANEL_HORIZONTAL_SYNC,
+               FIELD_VALUE(0, PANEL_HORIZONTAL_SYNC, WIDTH, pModeParam->horizontal_sync_width)
+               | FIELD_VALUE(0, PANEL_HORIZONTAL_SYNC, START, pModeParam->horizontal_sync_start - 1));
 
-        POKE32(PANEL_VERTICAL_TOTAL,
-              FIELD_VALUE(0, PANEL_VERTICAL_TOTAL, TOTAL, pModeParam->vertical_total - 1)
-            | FIELD_VALUE(0, PANEL_VERTICAL_TOTAL, DISPLAY_END, pModeParam->vertical_display_end - 1));
+               POKE32(PANEL_VERTICAL_TOTAL,
+               FIELD_VALUE(0, PANEL_VERTICAL_TOTAL, TOTAL, pModeParam->vertical_total - 1)
+                       | FIELD_VALUE(0, PANEL_VERTICAL_TOTAL, DISPLAY_END, pModeParam->vertical_display_end - 1));
 
-        POKE32(PANEL_VERTICAL_SYNC,
-              FIELD_VALUE(0, PANEL_VERTICAL_SYNC, HEIGHT, pModeParam->vertical_sync_height)
-            | FIELD_VALUE(0, PANEL_VERTICAL_SYNC, START, pModeParam->vertical_sync_start - 1));
+               POKE32(PANEL_VERTICAL_SYNC,
+               FIELD_VALUE(0, PANEL_VERTICAL_SYNC, HEIGHT, pModeParam->vertical_sync_height)
+               | FIELD_VALUE(0, PANEL_VERTICAL_SYNC, START, pModeParam->vertical_sync_start - 1));
 
                ulTmpValue = FIELD_VALUE(0, PANEL_DISPLAY_CTRL, VSYNC_PHASE, pModeParam->vertical_sync_polarity)|
-                                       FIELD_VALUE(0, PANEL_DISPLAY_CTRL, HSYNC_PHASE, pModeParam->horizontal_sync_polarity)|
-                                       FIELD_VALUE(0, PANEL_DISPLAY_CTRL, CLOCK_PHASE, pModeParam->clock_phase_polarity)|
-                                       FIELD_SET(0, PANEL_DISPLAY_CTRL, TIMING, ENABLE)|
-                                       FIELD_SET(0, PANEL_DISPLAY_CTRL, PLANE, ENABLE);
+                            FIELD_VALUE(0, PANEL_DISPLAY_CTRL, HSYNC_PHASE, pModeParam->horizontal_sync_polarity)|
+                            FIELD_VALUE(0, PANEL_DISPLAY_CTRL, CLOCK_PHASE, pModeParam->clock_phase_polarity)|
+                            FIELD_SET(0, PANEL_DISPLAY_CTRL, TIMING, ENABLE)|
+                            FIELD_SET(0, PANEL_DISPLAY_CTRL, PLANE, ENABLE);
 
-        ulReservedBits = FIELD_SET(0, PANEL_DISPLAY_CTRL, RESERVED_1_MASK, ENABLE) |
-                         FIELD_SET(0, PANEL_DISPLAY_CTRL, RESERVED_2_MASK, ENABLE) |
-                         FIELD_SET(0, PANEL_DISPLAY_CTRL, RESERVED_3_MASK, ENABLE)|
-                         FIELD_SET(0, PANEL_DISPLAY_CTRL, VSYNC, ACTIVE_LOW);
+               ulReservedBits = FIELD_SET(0, PANEL_DISPLAY_CTRL, RESERVED_1_MASK, ENABLE) |
+                                FIELD_SET(0, PANEL_DISPLAY_CTRL, RESERVED_2_MASK, ENABLE) |
+                                FIELD_SET(0, PANEL_DISPLAY_CTRL, RESERVED_3_MASK, ENABLE)|
+                                FIELD_SET(0, PANEL_DISPLAY_CTRL, VSYNC, ACTIVE_LOW);
 
-        ulReg = (PEEK32(PANEL_DISPLAY_CTRL) & ~ulReservedBits)
-              & FIELD_CLEAR(PANEL_DISPLAY_CTRL, CLOCK_PHASE)
-              & FIELD_CLEAR(PANEL_DISPLAY_CTRL, VSYNC_PHASE)
-              & FIELD_CLEAR(PANEL_DISPLAY_CTRL, HSYNC_PHASE)
-              & FIELD_CLEAR(PANEL_DISPLAY_CTRL, TIMING)
-              & FIELD_CLEAR(PANEL_DISPLAY_CTRL, PLANE);
+               ulReg = (PEEK32(PANEL_DISPLAY_CTRL) & ~ulReservedBits)
+                       & FIELD_CLEAR(PANEL_DISPLAY_CTRL, CLOCK_PHASE)
+                       & FIELD_CLEAR(PANEL_DISPLAY_CTRL, VSYNC_PHASE)
+                       & FIELD_CLEAR(PANEL_DISPLAY_CTRL, HSYNC_PHASE)
+                       & FIELD_CLEAR(PANEL_DISPLAY_CTRL, TIMING)
+                       & FIELD_CLEAR(PANEL_DISPLAY_CTRL, PLANE);
 
 
                /* May a hardware bug or just my test chip (not confirmed).
@@ -170,16 +169,14 @@ static int programModeRegisters(mode_parameter_t *pModeParam, pll_value_t *pll)
 
                POKE32(PANEL_DISPLAY_CTRL, ulTmpValue|ulReg);
 #if 1
-               while((PEEK32(PANEL_DISPLAY_CTRL) & ~ulReservedBits) != (ulTmpValue|ulReg))
-               {
+               while ((PEEK32(PANEL_DISPLAY_CTRL) & ~ulReservedBits) != (ulTmpValue|ulReg)) {
                        cnt++;
-                       if(cnt > 1000)
+                       if (cnt > 1000)
                                break;
                        POKE32(PANEL_DISPLAY_CTRL, ulTmpValue|ulReg);
                }
 #endif
-       }
-       else{
+       } else {
                ret = -1;
        }
        return ret;
@@ -189,11 +186,12 @@ int ddk750_setModeTiming(mode_parameter_t *parm, clock_type_t clock)
 {
        pll_value_t pll;
        unsigned int uiActualPixelClk;
+
        pll.inputFreq = DEFAULT_INPUT_CLOCK;
        pll.clockType = clock;
 
        uiActualPixelClk = calcPllValue(parm->pixel_clock, &pll);
-       if(getChipType() == SM750LE){
+       if (getChipType() == SM750LE) {
                /* set graphic mode via IO method */
                outb_p(0x88, 0x3d4);
                outb_p(0x06, 0x3d5);
index 4e8fab3f17e468d0aa3133ee066b499c92830196..e846dc2c3d5cc6f347eedbfa76a1e4791ed60556 100644 (file)
@@ -3,37 +3,35 @@
 
 #include "ddk750_chip.h"
 
-typedef enum _spolarity_t
-{
-    POS = 0, /* positive */
-    NEG, /* negative */
+typedef enum _spolarity_t {
+       POS = 0, /* positive */
+       NEG, /* negative */
 }
 spolarity_t;
 
 
-typedef struct _mode_parameter_t
-{
-    /* Horizontal timing. */
-    unsigned long horizontal_total;
-    unsigned long horizontal_display_end;
-    unsigned long horizontal_sync_start;
-    unsigned long horizontal_sync_width;
-    spolarity_t horizontal_sync_polarity;
-
-    /* Vertical timing. */
-    unsigned long vertical_total;
-    unsigned long vertical_display_end;
-    unsigned long vertical_sync_start;
-    unsigned long vertical_sync_height;
-    spolarity_t vertical_sync_polarity;
-
-    /* Refresh timing. */
-    unsigned long pixel_clock;
-    unsigned long horizontal_frequency;
-    unsigned long vertical_frequency;
-
-    /* Clock Phase. This clock phase only applies to Panel. */
-    spolarity_t clock_phase_polarity;
+typedef struct _mode_parameter_t {
+       /* Horizontal timing. */
+       unsigned long horizontal_total;
+       unsigned long horizontal_display_end;
+       unsigned long horizontal_sync_start;
+       unsigned long horizontal_sync_width;
+       spolarity_t horizontal_sync_polarity;
+
+       /* Vertical timing. */
+       unsigned long vertical_total;
+       unsigned long vertical_display_end;
+       unsigned long vertical_sync_start;
+       unsigned long vertical_sync_height;
+       spolarity_t vertical_sync_polarity;
+
+       /* Refresh timing. */
+       unsigned long pixel_clock;
+       unsigned long horizontal_frequency;
+       unsigned long vertical_frequency;
+
+       /* Clock Phase. This clock phase only applies to Panel. */
+       spolarity_t clock_phase_polarity;
 }
 mode_parameter_t;
 
index 1e5f398aed1001d12fd6dc9f00cc07334429fad4..e580dab2b625d128ee10b6959387c62b30213f7a 100644 (file)
@@ -5,21 +5,23 @@
 void ddk750_setDPMS(DPMS_t state)
 {
        unsigned int value;
-       if(getChipType() == SM750LE){
+
+       if (getChipType() == SM750LE) {
                value = PEEK32(CRT_DISPLAY_CTRL);
-               POKE32(CRT_DISPLAY_CTRL, FIELD_VALUE(value, CRT_DISPLAY_CTRL, DPMS, state));
-       }else{
+               POKE32(CRT_DISPLAY_CTRL, FIELD_VALUE(value, CRT_DISPLAY_CTRL,
+                                                    DPMS, state));
+       } else {
                value = PEEK32(SYSTEM_CTRL);
-               value= FIELD_VALUE(value, SYSTEM_CTRL, DPMS, state);
+               value = FIELD_VALUE(value, SYSTEM_CTRL, DPMS, state);
                POKE32(SYSTEM_CTRL, value);
        }
 }
 
 unsigned int getPowerMode(void)
 {
-       if(getChipType() == SM750LE)
+       if (getChipType() == SM750LE)
                return 0;
-    return (FIELD_GET(PEEK32(POWER_MODE_CTRL), POWER_MODE_CTRL, MODE));
+       return FIELD_GET(PEEK32(POWER_MODE_CTRL), POWER_MODE_CTRL, MODE);
 }
 
 
@@ -29,76 +31,74 @@ unsigned int getPowerMode(void)
  */
 void setPowerMode(unsigned int powerMode)
 {
-    unsigned int control_value = 0;
+       unsigned int control_value = 0;
 
-    control_value = PEEK32(POWER_MODE_CTRL);
+       control_value = PEEK32(POWER_MODE_CTRL);
 
-       if(getChipType() == SM750LE)
+       if (getChipType() == SM750LE)
                return;
 
-    switch (powerMode)
-    {
-        case POWER_MODE_CTRL_MODE_MODE0:
-            control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE, MODE0);
-            break;
+       switch (powerMode) {
+       case POWER_MODE_CTRL_MODE_MODE0:
+               control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE,
+                                         MODE0);
+               break;
 
-        case POWER_MODE_CTRL_MODE_MODE1:
-            control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE, MODE1);
-            break;
+       case POWER_MODE_CTRL_MODE_MODE1:
+               control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE,
+                                         MODE1);
+               break;
 
-        case POWER_MODE_CTRL_MODE_SLEEP:
-            control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE, SLEEP);
-            break;
+       case POWER_MODE_CTRL_MODE_SLEEP:
+               control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE,
+                                         SLEEP);
+               break;
 
-        default:
-            break;
-    }
+       default:
+               break;
+       }
 
-    /* Set up other fields in Power Control Register */
-    if (powerMode == POWER_MODE_CTRL_MODE_SLEEP)
-    {
-        control_value =
+       /* Set up other fields in Power Control Register */
+       if (powerMode == POWER_MODE_CTRL_MODE_SLEEP) {
+               control_value =
 #ifdef VALIDATION_CHIP
-            FIELD_SET(  control_value, POWER_MODE_CTRL, 336CLK, OFF) |
+               FIELD_SET(control_value, POWER_MODE_CTRL, 336CLK, OFF) |
 #endif
-            FIELD_SET(  control_value, POWER_MODE_CTRL, OSC_INPUT,  OFF);
-    }
-    else
-    {
-        control_value =
+               FIELD_SET(control_value, POWER_MODE_CTRL, OSC_INPUT,  OFF);
+       } else {
+               control_value =
 #ifdef VALIDATION_CHIP
-            FIELD_SET(  control_value, POWER_MODE_CTRL, 336CLK, ON) |
+               FIELD_SET(control_value, POWER_MODE_CTRL, 336CLK, ON) |
 #endif
-            FIELD_SET(  control_value, POWER_MODE_CTRL, OSC_INPUT,  ON);
-    }
+               FIELD_SET(control_value, POWER_MODE_CTRL, OSC_INPUT,  ON);
+       }
 
-    /* Program new power mode. */
-    POKE32(POWER_MODE_CTRL, control_value);
+       /* Program new power mode. */
+       POKE32(POWER_MODE_CTRL, control_value);
 }
 
 void setCurrentGate(unsigned int gate)
 {
-    unsigned int gate_reg;
-    unsigned int mode;
-
-    /* Get current power mode. */
-    mode = getPowerMode();
-
-    switch (mode)
-    {
-        case POWER_MODE_CTRL_MODE_MODE0:
-            gate_reg = MODE0_GATE;
-            break;
-
-        case POWER_MODE_CTRL_MODE_MODE1:
-            gate_reg = MODE1_GATE;
-            break;
-
-        default:
-            gate_reg = MODE0_GATE;
-            break;
-    }
-    POKE32(gate_reg, gate);
+       unsigned int gate_reg;
+       unsigned int mode;
+
+       /* Get current power mode. */
+       mode = getPowerMode();
+
+       switch (mode) {
+       case POWER_MODE_CTRL_MODE_MODE0:
+               gate_reg = MODE0_GATE;
+               break;
+
+       case POWER_MODE_CTRL_MODE_MODE1:
+               gate_reg = MODE1_GATE;
+               break;
+
+       default:
+               gate_reg = MODE0_GATE;
+               break;
+       }
+       POKE32(gate_reg, gate);
 }
 
 
@@ -108,21 +108,18 @@ void setCurrentGate(unsigned int gate)
  */
 void enable2DEngine(unsigned int enable)
 {
-    uint32_t gate;
-
-    gate = PEEK32(CURRENT_GATE);
-    if (enable)
-    {
-        gate = FIELD_SET(gate, CURRENT_GATE, DE,  ON);
-        gate = FIELD_SET(gate, CURRENT_GATE, CSC, ON);
-    }
-    else
-    {
-        gate = FIELD_SET(gate, CURRENT_GATE, DE,  OFF);
-        gate = FIELD_SET(gate, CURRENT_GATE, CSC, OFF);
-    }
-
-    setCurrentGate(gate);
+       uint32_t gate;
+
+       gate = PEEK32(CURRENT_GATE);
+       if (enable) {
+               gate = FIELD_SET(gate, CURRENT_GATE, DE,  ON);
+               gate = FIELD_SET(gate, CURRENT_GATE, CSC, ON);
+       } else {
+               gate = FIELD_SET(gate, CURRENT_GATE, DE,  OFF);
+               gate = FIELD_SET(gate, CURRENT_GATE, CSC, OFF);
+       }
+
+       setCurrentGate(gate);
 }
 
 
@@ -131,58 +128,56 @@ void enable2DEngine(unsigned int enable)
  */
 void enableZVPort(unsigned int enable)
 {
-    uint32_t gate;
+       uint32_t gate;
 
-    /* Enable ZV Port Gate */
-    gate = PEEK32(CURRENT_GATE);
-    if (enable)
-    {
-        gate = FIELD_SET(gate, CURRENT_GATE, ZVPORT, ON);
+       /* Enable ZV Port Gate */
+       gate = PEEK32(CURRENT_GATE);
+       if (enable) {
+               gate = FIELD_SET(gate, CURRENT_GATE, ZVPORT, ON);
 #if 1
-        /* Using Software I2C */
-        gate = FIELD_SET(gate, CURRENT_GATE, GPIO, ON);
+               /* Using Software I2C */
+               gate = FIELD_SET(gate, CURRENT_GATE, GPIO, ON);
 #else
-        /* Using Hardware I2C */
-        gate = FIELD_SET(gate, CURRENT_GATE, I2C,    ON);
+               /* Using Hardware I2C */
+               gate = FIELD_SET(gate, CURRENT_GATE, I2C,    ON);
 #endif
-    }
-    else
-    {
-        /* Disable ZV Port Gate. There is no way to know whether the GPIO pins are being used
-           or not. Therefore, do not disable the GPIO gate. */
-        gate = FIELD_SET(gate, CURRENT_GATE, ZVPORT, OFF);
-    }
-
-    setCurrentGate(gate);
+       } else {
+               /* Disable ZV Port Gate. There is no way to know whether the
+               GPIO pins are being used or not. Therefore, do not disable the
+               GPIO gate. */
+               gate = FIELD_SET(gate, CURRENT_GATE, ZVPORT, OFF);
+       }
+
+       setCurrentGate(gate);
 }
 
 
 void enableSSP(unsigned int enable)
 {
-    uint32_t gate;
+       uint32_t gate;
 
-    /* Enable SSP Gate */
-    gate = PEEK32(CURRENT_GATE);
-    if (enable)
-        gate = FIELD_SET(gate, CURRENT_GATE, SSP, ON);
-    else
-        gate = FIELD_SET(gate, CURRENT_GATE, SSP, OFF);
+       /* Enable SSP Gate */
+       gate = PEEK32(CURRENT_GATE);
+       if (enable)
+               gate = FIELD_SET(gate, CURRENT_GATE, SSP, ON);
+       else
+               gate = FIELD_SET(gate, CURRENT_GATE, SSP, OFF);
 
-    setCurrentGate(gate);
+       setCurrentGate(gate);
 }
 
 void enableDMA(unsigned int enable)
 {
-    uint32_t gate;
+       uint32_t gate;
 
-    /* Enable DMA Gate */
-    gate = PEEK32(CURRENT_GATE);
-    if (enable)
-        gate = FIELD_SET(gate, CURRENT_GATE, DMA, ON);
-    else
-        gate = FIELD_SET(gate, CURRENT_GATE, DMA, OFF);
+       /* Enable DMA Gate */
+       gate = PEEK32(CURRENT_GATE);
+       if (enable)
+               gate = FIELD_SET(gate, CURRENT_GATE, DMA, ON);
+       else
+               gate = FIELD_SET(gate, CURRENT_GATE, DMA, OFF);
 
-    setCurrentGate(gate);
+       setCurrentGate(gate);
 }
 
 /*
@@ -190,16 +185,16 @@ void enableDMA(unsigned int enable)
  */
 void enableGPIO(unsigned int enable)
 {
-    uint32_t gate;
+       uint32_t gate;
 
-    /* Enable GPIO Gate */
-    gate = PEEK32(CURRENT_GATE);
-    if (enable)
-        gate = FIELD_SET(gate, CURRENT_GATE, GPIO, ON);
-    else
-        gate = FIELD_SET(gate, CURRENT_GATE, GPIO, OFF);
+       /* Enable GPIO Gate */
+       gate = PEEK32(CURRENT_GATE);
+       if (enable)
+               gate = FIELD_SET(gate, CURRENT_GATE, GPIO, ON);
+       else
+               gate = FIELD_SET(gate, CURRENT_GATE, GPIO, OFF);
 
-    setCurrentGate(gate);
+       setCurrentGate(gate);
 }
 
 /*
@@ -207,16 +202,16 @@ void enableGPIO(unsigned int enable)
  */
 void enablePWM(unsigned int enable)
 {
-    uint32_t gate;
+       uint32_t gate;
 
-    /* Enable PWM Gate */
-    gate = PEEK32(CURRENT_GATE);
-    if (enable)
-        gate = FIELD_SET(gate, CURRENT_GATE, PWM, ON);
-    else
-        gate = FIELD_SET(gate, CURRENT_GATE, PWM, OFF);
+       /* Enable PWM Gate */
+       gate = PEEK32(CURRENT_GATE);
+       if (enable)
+               gate = FIELD_SET(gate, CURRENT_GATE, PWM, ON);
+       else
+               gate = FIELD_SET(gate, CURRENT_GATE, PWM, OFF);
 
-    setCurrentGate(gate);
+       setCurrentGate(gate);
 }
 
 /*
@@ -224,16 +219,16 @@ void enablePWM(unsigned int enable)
  */
 void enableI2C(unsigned int enable)
 {
-    uint32_t gate;
+       uint32_t gate;
 
-    /* Enable I2C Gate */
-    gate = PEEK32(CURRENT_GATE);
-    if (enable)
-        gate = FIELD_SET(gate, CURRENT_GATE, I2C, ON);
-    else
-        gate = FIELD_SET(gate, CURRENT_GATE, I2C, OFF);
+       /* Enable I2C Gate */
+       gate = PEEK32(CURRENT_GATE);
+       if (enable)
+               gate = FIELD_SET(gate, CURRENT_GATE, I2C, ON);
+       else
+       gate = FIELD_SET(gate, CURRENT_GATE, I2C, OFF);
 
-    setCurrentGate(gate);
+       setCurrentGate(gate);
 }
 
 
index 4e00955a07ddd08238d7fc7705e53496671d528d..b7cf6b281fb651fde508d3b177799d8e66084cde 100644 (file)
@@ -1,12 +1,11 @@
 #ifndef DDK750_POWER_H__
 #define DDK750_POWER_H__
 
-typedef enum _DPMS_t
-{
-    crtDPMS_ON = 0x0,
-    crtDPMS_STANDBY = 0x1,
-    crtDPMS_SUSPEND = 0x2,
-    crtDPMS_OFF = 0x3,
+typedef enum _DPMS_t {
+       crtDPMS_ON = 0x0,
+       crtDPMS_STANDBY = 0x1,
+       crtDPMS_SUSPEND = 0x2,
+       crtDPMS_OFF = 0x3,
 }
 DPMS_t;
 
index 1a40dc2a2f759ba383a70c1449cbd7f9c266bd98..2995625c3d62635b80938d1309158a99b30b7e22 100644 (file)
 /* CRT Graphics Control */
 
 #define CRT_DISPLAY_CTRL                              0x080200
-#define CRT_DISPLAY_CTRL_RESERVED_1_MASK                         31:27
-#define CRT_DISPLAY_CTRL_RESERVED_1_MASK_DISABLE                         0
-#define CRT_DISPLAY_CTRL_RESERVED_1_MASK_ENABLE                          0x1F
+#define CRT_DISPLAY_CTRL_RESERVED_1_MASK             31:27
+#define CRT_DISPLAY_CTRL_RESERVED_1_MASK_DISABLE      0
+#define CRT_DISPLAY_CTRL_RESERVED_1_MASK_ENABLE       0x1F
 
 /* SM750LE definition */
 #define CRT_DISPLAY_CTRL_DPMS                         31:30
 #define CRT_DISPLAY_CTRL_SHIFT_VGA_DAC_ENABLE         0
 
 
-#define CRT_DISPLAY_CTRL_RESERVED_2_MASK                         25:24
-#define CRT_DISPLAY_CTRL_RESERVED_2_MASK_ENABLE                          3
-#define CRT_DISPLAY_CTRL_RESERVED_2_MASK_DISABLE                         0
+#define CRT_DISPLAY_CTRL_RESERVED_2_MASK             25:24
+#define CRT_DISPLAY_CTRL_RESERVED_2_MASK_ENABLE              3
+#define CRT_DISPLAY_CTRL_RESERVED_2_MASK_DISABLE      0
 
 /* SM750LE definition */
 #define CRT_DISPLAY_CTRL_CRTSELECT                    25:25
 #define CRT_DISPLAY_CTRL_RGBBIT_12BIT                 1
 
 
-#define CRT_DISPLAY_CTRL_RESERVED_3_MASK                         15:15
+#define CRT_DISPLAY_CTRL_RESERVED_3_MASK             15:15
 #define CRT_DISPLAY_CTRL_RESERVED_3_MASK_DISABLE      0
 #define CRT_DISPLAY_CTRL_RESERVED_3_MASK_ENABLE       1
 
-#define CRT_DISPLAY_CTRL_RESERVED_4_MASK                         9:9
+#define CRT_DISPLAY_CTRL_RESERVED_4_MASK             9:9
 #define CRT_DISPLAY_CTRL_RESERVED_4_MASK_DISABLE      0
 #define CRT_DISPLAY_CTRL_RESERVED_4_MASK_ENABLE       1
 
 #endif
 
 /* sm750le new register to control panel output */
-#define DISPLAY_CONTROL_750LE  0x80288
+#define DISPLAY_CONTROL_750LE                        0x80288
 /* Palette RAM */
 
 /* Panel Palette register starts at 0x080400 ~ 0x0807FC */
index b6395b87fc21d05bc839e81f72517f5b6b851d23..0bdf3db11df04af03186360a0232b2853bcdf693 100644 (file)
@@ -36,12 +36,12 @@ static char *gDviCtrlChipName = "Silicon Image SiI 164";
  */
 unsigned short sii164GetVendorID(void)
 {
-    unsigned short vendorID;
+       unsigned short vendorID;
 
-    vendorID = ((unsigned short) i2cReadReg(SII164_I2C_ADDRESS, SII164_VENDOR_ID_HIGH) << 8) |
-                (unsigned short) i2cReadReg(SII164_I2C_ADDRESS, SII164_VENDOR_ID_LOW);
+       vendorID = ((unsigned short) i2cReadReg(SII164_I2C_ADDRESS, SII164_VENDOR_ID_HIGH) << 8) |
+                   (unsigned short) i2cReadReg(SII164_I2C_ADDRESS, SII164_VENDOR_ID_LOW);
 
-    return vendorID;
+       return vendorID;
 }
 
 /*
@@ -53,12 +53,12 @@ unsigned short sii164GetVendorID(void)
  */
 unsigned short sii164GetDeviceID(void)
 {
-    unsigned short deviceID;
+       unsigned short deviceID;
 
-    deviceID = ((unsigned short) i2cReadReg(SII164_I2C_ADDRESS, SII164_DEVICE_ID_HIGH) << 8) |
-                (unsigned short) i2cReadReg(SII164_I2C_ADDRESS, SII164_DEVICE_ID_LOW);
+       deviceID = ((unsigned short) i2cReadReg(SII164_I2C_ADDRESS, SII164_DEVICE_ID_HIGH) << 8) |
+                   (unsigned short) i2cReadReg(SII164_I2C_ADDRESS, SII164_DEVICE_ID_LOW);
 
-    return deviceID;
+       return deviceID;
 }
 
 
@@ -113,132 +113,130 @@ unsigned short sii164GetDeviceID(void)
  *     -1   - Fail.
  */
 long sii164InitChip(
-    unsigned char edgeSelect,
-    unsigned char busSelect,
-    unsigned char dualEdgeClkSelect,
-    unsigned char hsyncEnable,
-    unsigned char vsyncEnable,
-    unsigned char deskewEnable,
-    unsigned char deskewSetting,
-    unsigned char continuousSyncEnable,
-    unsigned char pllFilterEnable,
-    unsigned char pllFilterValue
+       unsigned char edgeSelect,
+       unsigned char busSelect,
+       unsigned char dualEdgeClkSelect,
+       unsigned char hsyncEnable,
+       unsigned char vsyncEnable,
+       unsigned char deskewEnable,
+       unsigned char deskewSetting,
+       unsigned char continuousSyncEnable,
+       unsigned char pllFilterEnable,
+       unsigned char pllFilterValue
 )
 {
        unsigned char config;
 
-    /* Initialize the i2c bus */
+       /* Initialize the i2c bus */
 #ifdef USE_HW_I2C
-    /* Use fast mode. */
-    hwI2CInit(1);
+       /* Use fast mode. */
+       hwI2CInit(1);
 #else
-    swI2CInit(DEFAULT_I2C_SCL, DEFAULT_I2C_SDA);
+       swI2CInit(DEFAULT_I2C_SCL, DEFAULT_I2C_SDA);
 #endif
 
-    /* Check if SII164 Chip exists */
-    if ((sii164GetVendorID() == SII164_VENDOR_ID) && (sii164GetDeviceID() == SII164_DEVICE_ID))
-    {
-        /*
-         *  Initialize SII164 controller chip.
-         */
-
-        /* Select the edge */
-        if (edgeSelect == 0)
-            config = SII164_CONFIGURATION_LATCH_FALLING;
-        else
-            config = SII164_CONFIGURATION_LATCH_RISING;
-
-        /* Select bus wide */
-        if (busSelect == 0)
-            config |= SII164_CONFIGURATION_BUS_12BITS;
-        else
-            config |= SII164_CONFIGURATION_BUS_24BITS;
-
-        /* Select Dual/Single Edge Clock */
-        if (dualEdgeClkSelect == 0)
-            config |= SII164_CONFIGURATION_CLOCK_SINGLE;
-        else
-            config |= SII164_CONFIGURATION_CLOCK_DUAL;
-
-        /* Select HSync Enable */
-        if (hsyncEnable == 0)
-            config |= SII164_CONFIGURATION_HSYNC_FORCE_LOW;
-        else
-            config |= SII164_CONFIGURATION_HSYNC_AS_IS;
-
-        /* Select VSync Enable */
-        if (vsyncEnable == 0)
-            config |= SII164_CONFIGURATION_VSYNC_FORCE_LOW;
-        else
-            config |= SII164_CONFIGURATION_VSYNC_AS_IS;
-
-        i2cWriteReg(SII164_I2C_ADDRESS, SII164_CONFIGURATION, config);
-
-        /* De-skew enabled with default 111b value.
-           This will fix some artifacts problem in some mode on board 2.2.
-           Somehow this fix does not affect board 2.1.
-         */
-        if (deskewEnable == 0)
-            config = SII164_DESKEW_DISABLE;
-        else
-            config = SII164_DESKEW_ENABLE;
-
-        switch (deskewSetting)
-        {
-            case 0:
-                config |= SII164_DESKEW_1_STEP;
-                break;
-            case 1:
-                config |= SII164_DESKEW_2_STEP;
-                break;
-            case 2:
-                config |= SII164_DESKEW_3_STEP;
-                break;
-            case 3:
-                config |= SII164_DESKEW_4_STEP;
-                break;
-            case 4:
-                config |= SII164_DESKEW_5_STEP;
-                break;
-            case 5:
-                config |= SII164_DESKEW_6_STEP;
-                break;
-            case 6:
-                config |= SII164_DESKEW_7_STEP;
-                break;
-            case 7:
-                config |= SII164_DESKEW_8_STEP;
-                break;
-        }
-        i2cWriteReg(SII164_I2C_ADDRESS, SII164_DESKEW, config);
-
-        /* Enable/Disable Continuous Sync. */
-        if (continuousSyncEnable == 0)
-            config = SII164_PLL_FILTER_SYNC_CONTINUOUS_DISABLE;
-        else
-            config = SII164_PLL_FILTER_SYNC_CONTINUOUS_ENABLE;
-
-        /* Enable/Disable PLL Filter */
-        if (pllFilterEnable == 0)
-            config |= SII164_PLL_FILTER_DISABLE;
-        else
-            config |= SII164_PLL_FILTER_ENABLE;
-
-        /* Set the PLL Filter value */
-        config |= ((pllFilterValue & 0x07) << 1);
-
-        i2cWriteReg(SII164_I2C_ADDRESS, SII164_PLL, config);
-
-        /* Recover from Power Down and enable output. */
-        config = i2cReadReg(SII164_I2C_ADDRESS, SII164_CONFIGURATION);
-        config |= SII164_CONFIGURATION_POWER_NORMAL;
-        i2cWriteReg(SII164_I2C_ADDRESS, SII164_CONFIGURATION, config);
-
-        return 0;
-    }
-
-    /* Return -1 if initialization fails. */
-    return (-1);
+       /* Check if SII164 Chip exists */
+       if ((sii164GetVendorID() == SII164_VENDOR_ID) && (sii164GetDeviceID() == SII164_DEVICE_ID)) {
+               /*
+                *  Initialize SII164 controller chip.
+                */
+
+               /* Select the edge */
+               if (edgeSelect == 0)
+                       config = SII164_CONFIGURATION_LATCH_FALLING;
+               else
+                       config = SII164_CONFIGURATION_LATCH_RISING;
+
+               /* Select bus wide */
+               if (busSelect == 0)
+                       config |= SII164_CONFIGURATION_BUS_12BITS;
+               else
+                       config |= SII164_CONFIGURATION_BUS_24BITS;
+
+               /* Select Dual/Single Edge Clock */
+               if (dualEdgeClkSelect == 0)
+                       config |= SII164_CONFIGURATION_CLOCK_SINGLE;
+               else
+                       config |= SII164_CONFIGURATION_CLOCK_DUAL;
+
+               /* Select HSync Enable */
+               if (hsyncEnable == 0)
+                       config |= SII164_CONFIGURATION_HSYNC_FORCE_LOW;
+               else
+                       config |= SII164_CONFIGURATION_HSYNC_AS_IS;
+
+               /* Select VSync Enable */
+               if (vsyncEnable == 0)
+                       config |= SII164_CONFIGURATION_VSYNC_FORCE_LOW;
+               else
+                       config |= SII164_CONFIGURATION_VSYNC_AS_IS;
+
+               i2cWriteReg(SII164_I2C_ADDRESS, SII164_CONFIGURATION, config);
+
+               /* De-skew enabled with default 111b value.
+                  This will fix some artifacts problem in some mode on board 2.2.
+                  Somehow this fix does not affect board 2.1.
+                */
+               if (deskewEnable == 0)
+                       config = SII164_DESKEW_DISABLE;
+               else
+                       config = SII164_DESKEW_ENABLE;
+
+               switch (deskewSetting) {
+               case 0:
+                       config |= SII164_DESKEW_1_STEP;
+                       break;
+               case 1:
+                       config |= SII164_DESKEW_2_STEP;
+                       break;
+               case 2:
+                       config |= SII164_DESKEW_3_STEP;
+                       break;
+               case 3:
+                       config |= SII164_DESKEW_4_STEP;
+                       break;
+               case 4:
+                       config |= SII164_DESKEW_5_STEP;
+                       break;
+               case 5:
+                       config |= SII164_DESKEW_6_STEP;
+                       break;
+               case 6:
+                       config |= SII164_DESKEW_7_STEP;
+                       break;
+               case 7:
+                       config |= SII164_DESKEW_8_STEP;
+                       break;
+               }
+               i2cWriteReg(SII164_I2C_ADDRESS, SII164_DESKEW, config);
+
+               /* Enable/Disable Continuous Sync. */
+               if (continuousSyncEnable == 0)
+                       config = SII164_PLL_FILTER_SYNC_CONTINUOUS_DISABLE;
+               else
+                       config = SII164_PLL_FILTER_SYNC_CONTINUOUS_ENABLE;
+
+               /* Enable/Disable PLL Filter */
+               if (pllFilterEnable == 0)
+                       config |= SII164_PLL_FILTER_DISABLE;
+               else
+                       config |= SII164_PLL_FILTER_ENABLE;
+
+               /* Set the PLL Filter value */
+               config |= ((pllFilterValue & 0x07) << 1);
+
+               i2cWriteReg(SII164_I2C_ADDRESS, SII164_PLL, config);
+
+               /* Recover from Power Down and enable output. */
+               config = i2cReadReg(SII164_I2C_ADDRESS, SII164_CONFIGURATION);
+               config |= SII164_CONFIGURATION_POWER_NORMAL;
+               i2cWriteReg(SII164_I2C_ADDRESS, SII164_CONFIGURATION, config);
+
+               return 0;
+       }
+
+       /* Return -1 if initialization fails. */
+       return (-1);
 }
 
 
@@ -255,9 +253,9 @@ long sii164InitChip(
  */
 void sii164ResetChip(void)
 {
-    /* Power down */
-    sii164SetPower(0);
-    sii164SetPower(1);
+       /* Power down */
+       sii164SetPower(0);
+       sii164SetPower(1);
 }
 
 
@@ -268,7 +266,7 @@ void sii164ResetChip(void)
  */
 char *sii164GetChipString(void)
 {
-    return gDviCtrlChipName;
+       return gDviCtrlChipName;
 }
 
 
@@ -280,26 +278,23 @@ char *sii164GetChipString(void)
  *      powerUp - Flag to set the power down or up
  */
 void sii164SetPower(
-    unsigned char powerUp
+       unsigned char powerUp
 )
 {
-    unsigned char config;
-
-    config = i2cReadReg(SII164_I2C_ADDRESS, SII164_CONFIGURATION);
-    if (powerUp == 1)
-    {
-        /* Power up the chip */
-        config &= ~SII164_CONFIGURATION_POWER_MASK;
-        config |= SII164_CONFIGURATION_POWER_NORMAL;
-        i2cWriteReg(SII164_I2C_ADDRESS, SII164_CONFIGURATION, config);
-    }
-    else
-    {
-        /* Power down the chip */
-        config &= ~SII164_CONFIGURATION_POWER_MASK;
-        config |= SII164_CONFIGURATION_POWER_DOWN;
-        i2cWriteReg(SII164_I2C_ADDRESS, SII164_CONFIGURATION, config);
-    }
+       unsigned char config;
+
+       config = i2cReadReg(SII164_I2C_ADDRESS, SII164_CONFIGURATION);
+       if (powerUp == 1) {
+               /* Power up the chip */
+               config &= ~SII164_CONFIGURATION_POWER_MASK;
+               config |= SII164_CONFIGURATION_POWER_NORMAL;
+               i2cWriteReg(SII164_I2C_ADDRESS, SII164_CONFIGURATION, config);
+       } else {
+               /* Power down the chip */
+               config &= ~SII164_CONFIGURATION_POWER_MASK;
+               config |= SII164_CONFIGURATION_POWER_DOWN;
+               i2cWriteReg(SII164_I2C_ADDRESS, SII164_CONFIGURATION, config);
+       }
 }
 
 
@@ -308,31 +303,30 @@ void sii164SetPower(
  *      This function selects the mode of the hot plug detection.
  */
 static void sii164SelectHotPlugDetectionMode(
-    sii164_hot_plug_mode_t hotPlugMode
+       sii164_hot_plug_mode_t hotPlugMode
 )
 {
-    unsigned char detectReg;
-
-    detectReg = i2cReadReg(SII164_I2C_ADDRESS, SII164_DETECT) & ~SII164_DETECT_MONITOR_SENSE_OUTPUT_FLAG;
-    switch (hotPlugMode)
-    {
-        case SII164_HOTPLUG_DISABLE:
-            detectReg |= SII164_DETECT_MONITOR_SENSE_OUTPUT_HIGH;
-            break;
-        case SII164_HOTPLUG_USE_MDI:
-            detectReg &= ~SII164_DETECT_INTERRUPT_MASK;
-            detectReg |= SII164_DETECT_INTERRUPT_BY_HTPLG_PIN;
-            detectReg |= SII164_DETECT_MONITOR_SENSE_OUTPUT_MDI;
-            break;
-        case SII164_HOTPLUG_USE_RSEN:
-            detectReg |= SII164_DETECT_MONITOR_SENSE_OUTPUT_RSEN;
-            break;
-        case SII164_HOTPLUG_USE_HTPLG:
-            detectReg |= SII164_DETECT_MONITOR_SENSE_OUTPUT_HTPLG;
-            break;
-    }
-
-    i2cWriteReg(SII164_I2C_ADDRESS, SII164_DETECT, detectReg);
+       unsigned char detectReg;
+
+       detectReg = i2cReadReg(SII164_I2C_ADDRESS, SII164_DETECT) & ~SII164_DETECT_MONITOR_SENSE_OUTPUT_FLAG;
+       switch (hotPlugMode) {
+       case SII164_HOTPLUG_DISABLE:
+               detectReg |= SII164_DETECT_MONITOR_SENSE_OUTPUT_HIGH;
+               break;
+       case SII164_HOTPLUG_USE_MDI:
+               detectReg &= ~SII164_DETECT_INTERRUPT_MASK;
+               detectReg |= SII164_DETECT_INTERRUPT_BY_HTPLG_PIN;
+               detectReg |= SII164_DETECT_MONITOR_SENSE_OUTPUT_MDI;
+               break;
+       case SII164_HOTPLUG_USE_RSEN:
+               detectReg |= SII164_DETECT_MONITOR_SENSE_OUTPUT_RSEN;
+               break;
+       case SII164_HOTPLUG_USE_HTPLG:
+               detectReg |= SII164_DETECT_MONITOR_SENSE_OUTPUT_HTPLG;
+               break;
+       }
+
+       i2cWriteReg(SII164_I2C_ADDRESS, SII164_DETECT, detectReg);
 }
 
 /*
@@ -342,18 +336,19 @@ static void sii164SelectHotPlugDetectionMode(
  *  enableHotPlug   - Enable (=1) / disable (=0) Hot Plug detection
  */
 void sii164EnableHotPlugDetection(
-    unsigned char enableHotPlug
+       unsigned char enableHotPlug
 )
 {
-    unsigned char detectReg;
-    detectReg = i2cReadReg(SII164_I2C_ADDRESS, SII164_DETECT);
-
-    /* Depending on each DVI controller, need to enable the hot plug based on each
-       individual chip design. */
-    if (enableHotPlug != 0)
-        sii164SelectHotPlugDetectionMode(SII164_HOTPLUG_USE_MDI);
-    else
-        sii164SelectHotPlugDetectionMode(SII164_HOTPLUG_DISABLE);
+       unsigned char detectReg;
+
+       detectReg = i2cReadReg(SII164_I2C_ADDRESS, SII164_DETECT);
+
+       /* Depending on each DVI controller, need to enable the hot plug based on each
+          individual chip design. */
+       if (enableHotPlug != 0)
+               sii164SelectHotPlugDetectionMode(SII164_HOTPLUG_USE_MDI);
+       else
+               sii164SelectHotPlugDetectionMode(SII164_HOTPLUG_DISABLE);
 }
 
 /*
@@ -366,13 +361,13 @@ void sii164EnableHotPlugDetection(
  */
 unsigned char sii164IsConnected(void)
 {
-    unsigned char hotPlugValue;
+       unsigned char hotPlugValue;
 
-    hotPlugValue = i2cReadReg(SII164_I2C_ADDRESS, SII164_DETECT) & SII164_DETECT_HOT_PLUG_STATUS_MASK;
-    if (hotPlugValue == SII164_DETECT_HOT_PLUG_STATUS_ON)
-        return 1;
-    else
-        return 0;
+       hotPlugValue = i2cReadReg(SII164_I2C_ADDRESS, SII164_DETECT) & SII164_DETECT_HOT_PLUG_STATUS_MASK;
+       if (hotPlugValue == SII164_DETECT_HOT_PLUG_STATUS_ON)
+               return 1;
+       else
+               return 0;
 }
 
 /*
@@ -385,13 +380,13 @@ unsigned char sii164IsConnected(void)
  */
 unsigned char sii164CheckInterrupt(void)
 {
-    unsigned char detectReg;
+       unsigned char detectReg;
 
-    detectReg = i2cReadReg(SII164_I2C_ADDRESS, SII164_DETECT) & SII164_DETECT_MONITOR_STATE_MASK;
-    if (detectReg == SII164_DETECT_MONITOR_STATE_CHANGE)
-        return 1;
-    else
-        return 0;
+       detectReg = i2cReadReg(SII164_I2C_ADDRESS, SII164_DETECT) & SII164_DETECT_MONITOR_STATE_MASK;
+       if (detectReg == SII164_DETECT_MONITOR_STATE_CHANGE)
+               return 1;
+       else
+               return 0;
 }
 
 /*
@@ -400,11 +395,11 @@ unsigned char sii164CheckInterrupt(void)
  */
 void sii164ClearInterrupt(void)
 {
-    unsigned char detectReg;
+       unsigned char detectReg;
 
-    /* Clear the MDI interrupt */
-    detectReg = i2cReadReg(SII164_I2C_ADDRESS, SII164_DETECT);
-    i2cWriteReg(SII164_I2C_ADDRESS, SII164_DETECT, detectReg | SII164_DETECT_MONITOR_STATE_CLEAR);
+       /* Clear the MDI interrupt */
+       detectReg = i2cReadReg(SII164_I2C_ADDRESS, SII164_DETECT);
+       i2cWriteReg(SII164_I2C_ADDRESS, SII164_DETECT, detectReg | SII164_DETECT_MONITOR_STATE_CLEAR);
 }
 
 #endif
index 2b4c7d3381dfd4773c484e74bac5be0f0e2e1bdf..f2610c90eeb4c2ead006ae01ba95eecb4f7fec1e 100644 (file)
@@ -4,27 +4,26 @@
 #define USE_DVICHIP
 
 /* Hot Plug detection mode structure */
-typedef enum _sii164_hot_plug_mode_t
-{
-    SII164_HOTPLUG_DISABLE = 0,         /* Disable Hot Plug output bit (always high). */
-    SII164_HOTPLUG_USE_MDI,             /* Use Monitor Detect Interrupt bit. */
-    SII164_HOTPLUG_USE_RSEN,            /* Use Receiver Sense detect bit. */
-    SII164_HOTPLUG_USE_HTPLG            /* Use Hot Plug detect bit. */
+typedef enum _sii164_hot_plug_mode_t {
+       SII164_HOTPLUG_DISABLE = 0,         /* Disable Hot Plug output bit (always high). */
+       SII164_HOTPLUG_USE_MDI,             /* Use Monitor Detect Interrupt bit. */
+       SII164_HOTPLUG_USE_RSEN,            /* Use Receiver Sense detect bit. */
+       SII164_HOTPLUG_USE_HTPLG            /* Use Hot Plug detect bit. */
 } sii164_hot_plug_mode_t;
 
 
 /* Silicon Image SiI164 chip prototype */
 long sii164InitChip(
-    unsigned char edgeSelect,
-    unsigned char busSelect,
-    unsigned char dualEdgeClkSelect,
-    unsigned char hsyncEnable,
-    unsigned char vsyncEnable,
-    unsigned char deskewEnable,
-    unsigned char deskewSetting,
-    unsigned char continuousSyncEnable,
-    unsigned char pllFilterEnable,
-    unsigned char pllFilterValue
+       unsigned char edgeSelect,
+       unsigned char busSelect,
+       unsigned char dualEdgeClkSelect,
+       unsigned char hsyncEnable,
+       unsigned char vsyncEnable,
+       unsigned char deskewEnable,
+       unsigned char deskewSetting,
+       unsigned char continuousSyncEnable,
+       unsigned char pllFilterEnable,
+       unsigned char pllFilterValue
 );
 
 unsigned short sii164GetVendorID(void);
index 8e201f19cc0d2b3862eba9ced37203e6598c27f7..07f8afd2defeb82da3b0f7fa502c2ffc661d666e 100644 (file)
@@ -24,8 +24,7 @@
 
 #include "modedb.h"
 
-int smi_indent = 0;
-
+int smi_indent;
 
 /*
  * #ifdef __BIG_ENDIAN
@@ -40,17 +39,15 @@ typedef void (*PROC_SPEC_SETUP)(struct lynx_share*, char *);
 typedef int (*PROC_SPEC_MAP)(struct lynx_share*, struct pci_dev*);
 typedef int (*PROC_SPEC_INITHW)(struct lynx_share*, struct pci_dev*);
 
-
 /* common var for all device */
 static int g_hwcursor = 1;
 static int g_noaccel;
 static int g_nomtrr;
 static const char *g_fbmode[] = {NULL, NULL};
 static const char *g_def_fbmode = "800x600-16@60";
-static char *g_settings = NULL;
+static char *g_settings;
 static int g_dualview;
-static char *g_option = NULL;
-
+static char *g_option;
 
 static const struct fb_videomode lynx750_ext[] = {
        /*      1024x600-60 VESA        [1.71:1] */
@@ -115,8 +112,6 @@ static const struct fb_videomode lynx750_ext[] = {
 };
 
 
-
-
 /* no hardware cursor supported under version 2.6.10, kernel bug */
 static int lynxfb_ops_cursor(struct fb_info *info, struct fb_cursor *fbcursor)
 {
@@ -149,18 +144,17 @@ static int lynxfb_ops_cursor(struct fb_info *info, struct fb_cursor *fbcursor)
                /* get the 16bit color of kernel means */
                u16 fg, bg;
 
-               fg = ((info->cmap.red[fbcursor->image.fg_color] & 0xf800))|
-                     ((info->cmap.green[fbcursor->image.fg_color] & 0xfc00) >> 5)|
+               fg = ((info->cmap.red[fbcursor->image.fg_color] & 0xf800)) |
+                     ((info->cmap.green[fbcursor->image.fg_color] & 0xfc00) >> 5) |
                      ((info->cmap.blue[fbcursor->image.fg_color] & 0xf800) >> 11);
 
-               bg = ((info->cmap.red[fbcursor->image.bg_color] & 0xf800))|
-                     ((info->cmap.green[fbcursor->image.bg_color] & 0xfc00) >> 5)|
+               bg = ((info->cmap.red[fbcursor->image.bg_color] & 0xf800)) |
+                     ((info->cmap.green[fbcursor->image.bg_color] & 0xfc00) >> 5) |
                      ((info->cmap.blue[fbcursor->image.bg_color] & 0xf800) >> 11);
 
                cursor->setColor(cursor, fg, bg);
        }
 
-
        if (fbcursor->set & (FB_CUR_SETSHAPE | FB_CUR_SETIMAGE)) {
                cursor->setData(cursor,
                                fbcursor->rop,
@@ -188,14 +182,17 @@ static void lynxfb_ops_fillrect(struct fb_info *info,
        par = info->par;
        share = par->share;
 
-       /* each time 2d function begin to work,below three variable always need
-        * be set, seems we can put them together in some place  */
+       /*
+        * each time 2d function begin to work,below three variable always need
+        * be set, seems we can put them together in some place
+        */
        base = par->crtc.oScreen;
        pitch = info->fix.line_length;
        Bpp = info->var.bits_per_pixel >> 3;
 
-       color = (Bpp == 1)?region->color:((u32 *)info->pseudo_palette)[region->color];
-       rop = (region->rop != ROP_COPY) ? HW_ROP2_XOR:HW_ROP2_COPY;
+       color = (Bpp == 1) ? region->color :
+               ((u32 *)info->pseudo_palette)[region->color];
+       rop = (region->rop != ROP_COPY) ? HW_ROP2_XOR : HW_ROP2_COPY;
 
        /*
         * If not use spin_lock,system will die if user load driver
@@ -223,8 +220,10 @@ static void lynxfb_ops_copyarea(struct fb_info *info,
        par = info->par;
        share = par->share;
 
-       /* each time 2d function begin to work,below three variable always need
-        * be set, seems we can put them together in some place  */
+       /*
+        * each time 2d function begin to work,below three variable always need
+        * be set, seems we can put them together in some place
+        */
        base = par->crtc.oScreen;
        pitch = info->fix.line_length;
        Bpp = info->var.bits_per_pixel >> 3;
@@ -254,28 +253,29 @@ static void lynxfb_ops_imageblit(struct fb_info *info,
 
        par = info->par;
        share = par->share;
-       /* each time 2d function begin to work,below three variable always need
-        * be set, seems we can put them together in some place  */
+       /*
+        * each time 2d function begin to work,below three variable always need
+        * be set, seems we can put them together in some place
+        */
        base = par->crtc.oScreen;
        pitch = info->fix.line_length;
        Bpp = info->var.bits_per_pixel >> 3;
 
-       if (image->depth == 1) {
-               if (info->fix.visual == FB_VISUAL_TRUECOLOR ||
-                   info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
-                       fgcol = ((u32 *)info->pseudo_palette)[image->fg_color];
-                       bgcol = ((u32 *)info->pseudo_palette)[image->bg_color];
-               } else {
-                       fgcol = image->fg_color;
-                       bgcol = image->bg_color;
-               }
-               goto _do_work;
-       }
        /* TODO: Implement hardware acceleration for image->depth > 1 */
-       cfb_imageblit(info, image);
-       return;
+       if (image->depth != 1) {
+               cfb_imageblit(info, image);
+               return;
+       }
+
+       if (info->fix.visual == FB_VISUAL_TRUECOLOR ||
+           info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
+               fgcol = ((u32 *)info->pseudo_palette)[image->fg_color];
+               bgcol = ((u32 *)info->pseudo_palette)[image->bg_color];
+       } else {
+               fgcol = image->fg_color;
+               bgcol = image->bg_color;
+       }
 
-_do_work:
        /*
         * If not use spin_lock, system will die if user load driver
         * and immediately unload driver frequently (dual)
@@ -284,7 +284,7 @@ _do_work:
                spin_lock(&share->slock);
 
        share->accel.de_imageblit(&share->accel,
-                                 image->data, image->width>>3, 0,
+                                 image->data, image->width >> 3, 0,
                                  base, pitch, Bpp,
                                  image->dx, image->dy,
                                  image->width, image->height,
@@ -298,18 +298,13 @@ static int lynxfb_ops_pan_display(struct fb_var_screeninfo *var,
 {
        struct lynxfb_par *par;
        struct lynxfb_crtc *crtc;
-       int ret;
-
 
        if (!info)
                return -EINVAL;
 
-       ret = 0;
        par = info->par;
        crtc = &par->crtc;
-       ret = crtc->proc_panDisplay(crtc, var, info);
-
-       return ret;
+       return crtc->proc_panDisplay(crtc, var, info);
 }
 
 static int lynxfb_ops_set_par(struct fb_info *info)
@@ -340,9 +335,10 @@ static int lynxfb_ops_set_par(struct fb_info *info)
        fix->line_length = line_length;
        pr_info("fix->line_length = %d\n", fix->line_length);
 
-       /* var->red,green,blue,transp are need to be set by driver
+       /*
+        * var->red,green,blue,transp are need to be set by driver
         * and these data should be set before setcolreg routine
-        * */
+        */
 
        switch (var->bits_per_pixel) {
        case 8:
@@ -466,7 +462,6 @@ static int lynxfb_resume(struct pci_dev *pdev)
 
        int ret;
 
-
        ret = 0;
        share = pci_get_drvdata(pdev);
 
@@ -478,7 +473,6 @@ static int lynxfb_resume(struct pci_dev *pdev)
                return ret;
        }
 
-
        if (pdev->dev.power.power_state.event != PM_EVENT_FREEZE) {
                pci_restore_state(pdev);
                ret = pci_enable_device(pdev);
@@ -493,7 +487,6 @@ static int lynxfb_resume(struct pci_dev *pdev)
 
        hw_sm750_inithw(share, pdev);
 
-
        info = share->fbinfo[0];
 
        if (info) {
@@ -518,7 +511,6 @@ static int lynxfb_resume(struct pci_dev *pdev)
                fb_set_suspend(info, 0);
        }
 
-
        console_unlock();
        return ret;
 }
@@ -534,7 +526,6 @@ static int lynxfb_ops_check_var(struct fb_var_screeninfo *var,
        int ret;
        resource_size_t request;
 
-
        par = info->par;
        crtc = &par->crtc;
        output = &par->output;
@@ -546,7 +537,6 @@ static int lynxfb_ops_check_var(struct fb_var_screeninfo *var,
                 var->yres,
                 var->bits_per_pixel);
 
-
        switch (var->bits_per_pixel) {
        case 8:
        case 16:
@@ -617,7 +607,6 @@ exit:
        return ret;
 }
 
-
 static int lynxfb_ops_setcolreg(unsigned regno,
                                unsigned red,
                                unsigned green,
@@ -652,7 +641,6 @@ static int lynxfb_ops_setcolreg(unsigned regno,
                goto exit;
        }
 
-
        if (info->fix.visual == FB_VISUAL_TRUECOLOR && regno < 256) {
                u32 val;
 
@@ -699,7 +687,8 @@ static int sm750fb_set_drv(struct lynxfb_par *par)
        output = &par->output;
        crtc = &par->crtc;
 
-       crtc->vidmem_size = (share->dual)?share->vidmem_size>>1:share->vidmem_size;
+       crtc->vidmem_size = (share->dual) ? share->vidmem_size >> 1 :
+                            share->vidmem_size;
        /* setup crtc and output member */
        spec_share->hwCursor = g_hwcursor;
 
@@ -716,10 +705,12 @@ static int sm750fb_set_drv(struct lynxfb_par *par)
        output->proc_setMode = hw_sm750_output_setMode;
        output->proc_checkMode = hw_sm750_output_checkMode;
 
-       output->proc_setBLANK = (share->revid == SM750LE_REVISION_ID)?hw_sm750le_setBLANK:hw_sm750_setBLANK;
+       output->proc_setBLANK = (share->revid == SM750LE_REVISION_ID) ?
+                                hw_sm750le_setBLANK : hw_sm750_setBLANK;
        output->clear = hw_sm750_output_clear;
        /* chip specific phase */
-       share->accel.de_wait = (share->revid == SM750LE_REVISION_ID)?hw_sm750le_deWait : hw_sm750_deWait;
+       share->accel.de_wait = (share->revid == SM750LE_REVISION_ID) ?
+                               hw_sm750le_deWait : hw_sm750_deWait;
        switch (spec_share->state.dataflow) {
        case sm750_simul_pri:
                output->paths = sm750_pnc;
@@ -782,7 +773,6 @@ static struct fb_ops lynxfb_ops = {
        .fb_cursor = lynxfb_ops_cursor,
 };
 
-
 static int lynxfb_set_fbinfo(struct fb_info *info, int index)
 {
        int i;
@@ -803,7 +793,6 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index)
                "kernel HELPERS prepared vesa_modes",
        };
 
-
        static const char *fixId[2] = {
                "sm750_fb1", "sm750_fb2",
        };
@@ -824,15 +813,16 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index)
        sm750fb_set_drv(par);
        lynxfb_ops.fb_pan_display = lynxfb_ops_pan_display;
 
-
-       /* set current cursor variable and proc pointer,
-        * must be set after crtc member initialized */
+       /*
+        * set current cursor variable and proc pointer,
+        * must be set after crtc member initialized
+        */
        crtc->cursor.offset = crtc->oScreen + crtc->vidmem_size - 1024;
        crtc->cursor.mmio = share->pvReg + 0x800f0 + (int)crtc->channel * 0x140;
 
        pr_info("crtc->cursor.mmio = %p\n", crtc->cursor.mmio);
        crtc->cursor.maxH = crtc->cursor.maxW = 64;
-       crtc->cursor.size = crtc->cursor.maxH*crtc->cursor.maxW*2/8;
+       crtc->cursor.size = crtc->cursor.maxH * crtc->cursor.maxW * 2 / 8;
        crtc->cursor.disable = hw_cursor_disable;
        crtc->cursor.enable = hw_cursor_enable;
        crtc->cursor.setColor = hw_cursor_setColor;
@@ -841,7 +831,6 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index)
        crtc->cursor.setData = hw_cursor_setData;
        crtc->cursor.vstart = share->pvMem + crtc->cursor.offset;
 
-
        crtc->cursor.share = share;
                memset_io(crtc->cursor.vstart, 0, crtc->cursor.size);
        if (!g_hwcursor) {
@@ -849,7 +838,6 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index)
                crtc->cursor.disable(&crtc->cursor);
        }
 
-
        /* set info->fbops, must be set before fb_find_mode */
        if (!share->accel_off) {
                /* use 2d acceleration */
@@ -865,7 +853,6 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index)
                        g_fbmode[index] = g_fbmode[0];
        }
 
-
        for (i = 0; i < 3; i++) {
 
                ret = fb_find_mode(var, info, g_fbmode[index],
@@ -917,13 +904,13 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index)
 
        /* set info */
        line_length = PADDING(crtc->line_pad,
-                             (var->xres_virtual * var->bits_per_pixel/8));
+                             (var->xres_virtual * var->bits_per_pixel / 8));
 
        info->pseudo_palette = &par->pseudo_palette[0];
        info->screen_base = crtc->vScreen;
        pr_debug("screen_base vaddr = %p\n", info->screen_base);
        info->screen_size = line_length * var->yres_virtual;
-       info->flags = FBINFO_FLAG_DEFAULT|0;
+       info->flags = FBINFO_FLAG_DEFAULT | 0;
 
        /* set info->fix */
        fix->type = FB_TYPE_PACKED_PIXELS;
@@ -935,15 +922,15 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index)
 
        strlcpy(fix->id, fixId[index], sizeof(fix->id));
 
-
        fix->smem_start = crtc->oScreen + share->vidmem_start;
        pr_info("fix->smem_start = %lx\n", fix->smem_start);
-       /* according to mmap experiment from user space application,
+       /*
+        * according to mmap experiment from user space application,
         * fix->mmio_len should not larger than virtual size
         * (xres_virtual x yres_virtual x ByPP)
         * Below line maybe buggy when user mmap fb dev node and write
         * data into the bound over virtual size
-        * */
+        */
        fix->smem_len = crtc->vidmem_size;
        pr_info("fix->smem_len = %x\n", fix->smem_len);
        info->screen_size = fix->smem_len;
@@ -967,7 +954,7 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index)
        var->accel_flags = 0;
        var->vmode = FB_VMODE_NONINTERLACED;
 
-       pr_debug("#1 show info->cmap : \nstart=%d,len=%d,red=%p,green=%p,blue=%p,transp=%p\n",
+       pr_debug("#1 show info->cmap :\nstart=%d,len=%d,red=%p,green=%p,blue=%p,transp=%p\n",
                 info->cmap.start, info->cmap.len,
                 info->cmap.red, info->cmap.green, info->cmap.blue,
                 info->cmap.transp);
@@ -998,7 +985,6 @@ static void sm750fb_setup(struct lynx_share *share, char *src)
 #endif
        int swap;
 
-
        spec_share = container_of(share, struct sm750_share, share);
 #ifdef CAP_EXPENSIION
        exp_res = NULL;
@@ -1096,15 +1082,16 @@ static int lynxfb_pci_probe(struct pci_dev *pdev,
        size_t spec_offset = 0;
        int fbidx;
 
-
        /* enable device */
        if (pci_enable_device(pdev)) {
                pr_err("can not enable device.\n");
                goto err_enable;
        }
 
-       /* though offset of share in sm750_share is 0,
-        * we use this marcro as the same */
+       /*
+        * though offset of share in sm750_share is 0,
+        * we use this marcro as the same
+        */
        spec_offset = offsetof(struct sm750_share, share);
 
        spec_share = kzalloc(sizeof(*spec_share), GFP_KERNEL);
@@ -1128,10 +1115,12 @@ static int lynxfb_pci_probe(struct pci_dev *pdev,
        spin_lock_init(&share->slock);
 
        if (!share->accel_off) {
-               /* hook deInit and 2d routines, notes that below hw_xxx
+               /*
+                * hook deInit and 2d routines, notes that below hw_xxx
                 * routine can work on most of lynx chips
                 * if some chip need specific function,
-                * please hook it in smXXX_set_drv routine */
+                * please hook it in smXXX_set_drv routine
+                */
                share->accel.de_init = hw_de_init;
                share->accel.de_fillrect = hw_fillrect;
                share->accel.de_copyarea = hw_copyarea;
@@ -1268,7 +1257,6 @@ static int __init lynxfb_setup(char *options)
        int len;
        char *opt, *tmp;
 
-
        if (!options || !*options) {
                pr_warn("no options.\n");
                return 0;
@@ -1283,14 +1271,15 @@ static int __init lynxfb_setup(char *options)
 
        tmp = g_settings;
 
-       /*      Notes:
-               char * strsep(char **s,const char * ct);
-               @s: the string to be searched
-               @ct :the characters to search for
-
-               strsep() updates @options to pointer after the first found token
-               it also returns the pointer ahead the token.
-               */
+       /*
+        * Notes:
+        * char * strsep(char **s,const char * ct);
+        * @s: the string to be searched
+        * @ct :the characters to search for
+        *
+        * strsep() updates @options to pointer after the first found token
+        * it also returns the pointer ahead the token.
+        */
        while ((opt = strsep(&options, ":")) != NULL) {
                /* options that mean for any lynx chips are configured here */
                if (!strncmp(opt, "noaccel", strlen("noaccel")))
@@ -1332,7 +1321,6 @@ static struct pci_driver lynxfb_driver = {
 #endif
 };
 
-
 static int __init lynxfb_init(void)
 {
        char *option;
index cc80580bc8233d8dbb98e196bc3cb1e1cfcf4131..9b101a937964a0e88f1d6cbcc70fdb26368f3423 100644 (file)
@@ -5,16 +5,16 @@
 
 #define FB_ACCEL_SMI 0xab
 /* please use revision id to distinguish sm750le and sm750*/
-#define SPC_SM750      0
+#define SPC_SM750 0
 
 #define MB(x) ((x)<<20)
 #define MHZ(x) ((x) * 1000000)
 /* align should be 2,4,8,16 */
-#define PADDING(align, data) (((data)+(align)-1)&(~((align) -1)))
+#define PADDING(align, data) (((data)+(align)-1)&(~((align) - 1)))
 extern int smi_indent;
 
 
-struct lynx_accel{
+struct lynx_accel {
        /* base virtual address of DPR registers */
        volatile unsigned char __iomem * dprBase;
        /* base virtual address of de data port */
@@ -38,10 +38,10 @@ struct lynx_accel{
 
 };
 
-/*     lynx_share stands for a presentation of two frame buffer
-       that use one smi adaptor , it is similar to a basic class of C++
+/* lynx_share stands for a presentation of two frame buffer
+   that use one smi adaptor , it is similar to a basic class of C++
 */
-struct lynx_share{
+struct lynx_share {
        /* common members */
        u16 devid;
        u8 revid;
@@ -53,7 +53,7 @@ struct lynx_share{
                int mtrr_off;
                struct{
                        int vram;
-               }mtrr;
+               } mtrr;
        /* all smi graphic adaptor got below attributes */
        unsigned long vidmem_start;
        unsigned long vidreg_start;
@@ -68,7 +68,7 @@ struct lynx_share{
        void (*resume)(struct lynx_share*);
 };
 
-struct lynx_cursor{
+struct lynx_cursor {
        /* cursor width ,height and size */
        int w;
        int h;
@@ -92,7 +92,7 @@ struct lynx_cursor{
        void (*setData)(struct lynx_cursor *, u16, const u8*, const u8*);
 };
 
-struct lynxfb_crtc{
+struct lynxfb_crtc {
        unsigned char __iomem *vCursor; /* virtual address of cursor */
        unsigned char __iomem *vScreen; /* virtual address of on_screen */
        int oCursor; /* cursor address offset in vidmem */
@@ -108,14 +108,14 @@ struct lynxfb_crtc{
 
        void *priv;
 
-       int(*proc_setMode)(struct lynxfb_crtc*,
+       int (*proc_setMode)(struct lynxfb_crtc*,
                                                struct fb_var_screeninfo*,
                                                struct fb_fix_screeninfo*);
 
-       int(*proc_checkMode)(struct lynxfb_crtc*, struct fb_var_screeninfo*);
-       int(*proc_setColReg)(struct lynxfb_crtc*, ushort, ushort, ushort, ushort);
+       int (*proc_checkMode)(struct lynxfb_crtc*, struct fb_var_screeninfo*);
+       int (*proc_setColReg)(struct lynxfb_crtc*, ushort, ushort, ushort, ushort);
        void (*clear)(struct lynxfb_crtc*);
-        /* pan display */
+       /* pan display */
        int (*proc_panDisplay)(struct lynxfb_crtc *,
                               const struct fb_var_screeninfo *,
                               const struct fb_info *);
@@ -123,33 +123,33 @@ struct lynxfb_crtc{
        struct lynx_cursor cursor;
 };
 
-struct lynxfb_output{
+struct lynxfb_output {
        int dpms;
        int paths;
-       /*      which paths(s) this output stands for,for sm750:
-               paths=1:means output for panel paths
-               paths=2:means output for crt paths
-               paths=3:means output for both panel and crt paths
+       /* which paths(s) this output stands for,for sm750:
+          paths=1:means output for panel paths
+          paths=2:means output for crt paths
+          paths=3:means output for both panel and crt paths
        */
 
        int *channel;
-       /*      which channel these outputs linked with,for sm750:
-               *channel=0 means primary channel
-               *channel=1 means secondary channel
-               output->channel ==> &crtc->channel
+       /* which channel these outputs linked with,for sm750:
+          *channel=0 means primary channel
+          *channel=1 means secondary channel
+          output->channel ==> &crtc->channel
        */
        void *priv;
 
-       int(*proc_setMode)(struct lynxfb_output*,
+       int (*proc_setMode)(struct lynxfb_output*,
                                                struct fb_var_screeninfo*,
                                                struct fb_fix_screeninfo*);
 
-       int(*proc_checkMode)(struct lynxfb_output*, struct fb_var_screeninfo*);
-       int(*proc_setBLANK)(struct lynxfb_output*, int);
+       int (*proc_checkMode)(struct lynxfb_output*, struct fb_var_screeninfo*);
+       int (*proc_setBLANK)(struct lynxfb_output*, int);
        void  (*clear)(struct lynxfb_output*);
 };
 
-struct lynxfb_par{
+struct lynxfb_par {
        /* either 0 or 1 for dual head adaptor,0 is the older one registered */
        int index;
        unsigned int pseudo_palette[256];
@@ -165,14 +165,14 @@ struct lynxfb_par{
 
 
 #define PS_TO_HZ(ps)   \
-                       ({      \
+                       ({ \
                        unsigned long long hz = 1000*1000*1000*1000ULL; \
                        do_div(hz, ps); \
-                       (unsigned long)hz;})
+                       (unsigned long)hz; })
 
 static inline unsigned long ps_to_hz(unsigned int psvalue)
 {
-       unsigned long long numerator=1000*1000*1000*1000ULL;
+       unsigned long long numerator = 1000*1000*1000*1000ULL;
        /* 10^12 / picosecond period gives frequency in Hz */
        do_div(numerator, psvalue);
        return (unsigned long)numerator;
index 6eee4cd582d1ba2e2c1cbdcb66e157600edc5835..1dd06a2e4edeb1a826278fd7df103a8a4bfe7c4d 100644 (file)
@@ -37,7 +37,7 @@ void hw_de_init(struct lynx_accel *accel)
 {
        /* setup 2d engine registers */
        u32 reg, clr;
-       
+
        write_dpr(accel, DE_MASKS, 0xFFFFFFFF);
 
        /* dpr1c */
@@ -82,7 +82,7 @@ void hw_de_init(struct lynx_accel *accel)
 void hw_set2dformat(struct lynx_accel *accel, int fmt)
 {
        u32 reg;
-       
+
        /* fmt=0,1,2 for 8,16,32,bpp on sm718/750/502 */
        reg = read_dpr(accel, DE_STRETCH_FORMAT);
        reg = FIELD_VALUE(reg, DE_STRETCH_FORMAT, PIXEL_FORMAT, fmt);
@@ -96,11 +96,10 @@ int hw_fillrect(struct lynx_accel *accel,
 {
        u32 deCtrl;
 
-       if(accel->de_wait() != 0)
-       {
+       if (accel->de_wait() != 0) {
                /* int time wait and always busy,seems hardware
                 * got something error */
-               pr_debug("%s:De engine always bussy\n", __func__);
+               pr_debug("De engine always busy\n");
                return -1;
        }
 
@@ -151,112 +150,102 @@ unsigned int width,
 unsigned int height, /* width and height of rectangle in pixel value */
 unsigned int rop2)   /* ROP value */
 {
-    unsigned int nDirection, de_ctrl;
-    int opSign;
-    nDirection = LEFT_TO_RIGHT;
+       unsigned int nDirection, de_ctrl;
+       int opSign;
+
+       nDirection = LEFT_TO_RIGHT;
        /* Direction of ROP2 operation: 1 = Left to Right, (-1) = Right to Left */
-    opSign = 1;
-    de_ctrl = 0;
-
-    /* If source and destination are the same surface, need to check for overlay cases */
-    if (sBase == dBase && sPitch == dPitch)
-    {
-        /* Determine direction of operation */
-        if (sy < dy)
-        {
-            /* +----------+
-               |S         |
-               |   +----------+
-               |   |      |   |
-               |   |      |   |
-               +---|------+   |
-                   |         D|
-                   +----------+ */
-
-            nDirection = BOTTOM_TO_TOP;
-        }
-        else if (sy > dy)
-        {
-            /* +----------+
-               |D         |
-               |   +----------+
-               |   |      |   |
-               |   |      |   |
-               +---|------+   |
-                   |         S|
-                   +----------+ */
-
-            nDirection = TOP_TO_BOTTOM;
-        }
-        else
-        {
-            /* sy == dy */
-
-            if (sx <= dx)
-            {
-                /* +------+---+------+
-                   |S     |   |     D|
-                   |      |   |      |
-                   |      |   |      |
-                   |      |   |      |
-                   +------+---+------+ */
-
-                nDirection = RIGHT_TO_LEFT;
-            }
-            else
-            {
-                /* sx > dx */
-
-                /* +------+---+------+
-                   |D     |   |     S|
-                   |      |   |      |
-                   |      |   |      |
-                   |      |   |      |
-                   +------+---+------+ */
-
-                nDirection = LEFT_TO_RIGHT;
-            }
-        }
-    }
-
-    if ((nDirection == BOTTOM_TO_TOP) || (nDirection == RIGHT_TO_LEFT))
-    {
-        sx += width - 1;
-        sy += height - 1;
-        dx += width - 1;
-        dy += height - 1;
-        opSign = (-1);
-    }
-
-    /* Note:
-       DE_FOREGROUND are DE_BACKGROUND are don't care.
-       DE_COLOR_COMPARE and DE_COLOR_COMPARE_MAKS are set by set deSetTransparency().
-    */
+       opSign = 1;
+       de_ctrl = 0;
+
+       /* If source and destination are the same surface, need to check for overlay cases */
+       if (sBase == dBase && sPitch == dPitch) {
+               /* Determine direction of operation */
+               if (sy < dy) {
+                       /* +----------+
+                          |S         |
+                          |   +----------+
+                          |   |      |   |
+                          |   |      |   |
+                          +---|------+   |
+                          |         D|
+                          +----------+ */
+
+                       nDirection = BOTTOM_TO_TOP;
+               } else if (sy > dy) {
+                       /* +----------+
+                          |D         |
+                          |   +----------+
+                          |   |      |   |
+                          |   |      |   |
+                          +---|------+   |
+                          |         S|
+                          +----------+ */
+
+                       nDirection = TOP_TO_BOTTOM;
+               } else {
+                       /* sy == dy */
+
+                       if (sx <= dx) {
+                               /* +------+---+------+
+                                  |S     |   |     D|
+                                  |      |   |      |
+                                  |      |   |      |
+                                  |      |   |      |
+                                  +------+---+------+ */
+
+                               nDirection = RIGHT_TO_LEFT;
+                       } else {
+                       /* sx > dx */
+
+                               /* +------+---+------+
+                                  |D     |   |     S|
+                                  |      |   |      |
+                                  |      |   |      |
+                                  |      |   |      |
+                                  +------+---+------+ */
+
+                               nDirection = LEFT_TO_RIGHT;
+                       }
+               }
+       }
 
-    /* 2D Source Base.
-       It is an address offset (128 bit aligned) from the beginning of frame buffer.
-    */
-    write_dpr(accel, DE_WINDOW_SOURCE_BASE, sBase); /* dpr40 */
+       if ((nDirection == BOTTOM_TO_TOP) || (nDirection == RIGHT_TO_LEFT)) {
+               sx += width - 1;
+               sy += height - 1;
+               dx += width - 1;
+               dy += height - 1;
+               opSign = (-1);
+       }
 
-    /* 2D Destination Base.
-       It is an address offset (128 bit aligned) from the beginning of frame buffer.
-    */
-    write_dpr(accel, DE_WINDOW_DESTINATION_BASE, dBase); /* dpr44 */
+       /* Note:
+          DE_FOREGROUND are DE_BACKGROUND are don't care.
+         DE_COLOR_COMPARE and DE_COLOR_COMPARE_MAKS are set by set deSetTransparency().
+        */
+
+       /* 2D Source Base.
+        It is an address offset (128 bit aligned) from the beginning of frame buffer.
+        */
+       write_dpr(accel, DE_WINDOW_SOURCE_BASE, sBase); /* dpr40 */
+
+       /* 2D Destination Base.
+        It is an address offset (128 bit aligned) from the beginning of frame buffer.
+        */
+       write_dpr(accel, DE_WINDOW_DESTINATION_BASE, dBase); /* dpr44 */
 
 #if 0
     /* Program pitch (distance between the 1st points of two adjacent lines).
        Note that input pitch is BYTE value, but the 2D Pitch register uses
        pixel values. Need Byte to pixel conversion.
     */
-       if(Bpp == 3){
+       if (Bpp == 3) {
                        sx *= 3;
                        dx *= 3;
                        width *= 3;
                write_dpr(accel, DE_PITCH,
                                FIELD_VALUE(0, DE_PITCH, DESTINATION, dPitch) |
                                FIELD_VALUE(0, DE_PITCH, SOURCE,      sPitch)); /* dpr10 */
-       }
-       else
+       } else
 #endif
        {
                write_dpr(accel, DE_PITCH,
@@ -267,54 +256,53 @@ unsigned int rop2)   /* ROP value */
     /* Screen Window width in Pixels.
        2D engine uses this value to calculate the linear address in frame buffer for a given point.
     */
-    write_dpr(accel, DE_WINDOW_WIDTH,
-        FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, (dPitch/Bpp)) |
-        FIELD_VALUE(0, DE_WINDOW_WIDTH, SOURCE,      (sPitch/Bpp))); /* dpr3c */
+       write_dpr(accel, DE_WINDOW_WIDTH,
+       FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, (dPitch/Bpp)) |
+       FIELD_VALUE(0, DE_WINDOW_WIDTH, SOURCE,      (sPitch/Bpp))); /* dpr3c */
 
-       if (accel->de_wait() != 0){
+       if (accel->de_wait() != 0)
                return -1;
+
+       {
+
+       write_dpr(accel, DE_SOURCE,
+                 FIELD_SET(0, DE_SOURCE, WRAP, DISABLE) |
+                 FIELD_VALUE(0, DE_SOURCE, X_K1, sx)   |
+                 FIELD_VALUE(0, DE_SOURCE, Y_K2, sy)); /* dpr0 */
+       write_dpr(accel, DE_DESTINATION,
+                 FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) |
+                 FIELD_VALUE(0, DE_DESTINATION, X,    dx)  |
+                 FIELD_VALUE(0, DE_DESTINATION, Y,    dy)); /* dpr04 */
+       write_dpr(accel, DE_DIMENSION,
+                 FIELD_VALUE(0, DE_DIMENSION, X,    width) |
+                 FIELD_VALUE(0, DE_DIMENSION, Y_ET, height)); /* dpr08 */
+
+       de_ctrl = FIELD_VALUE(0, DE_CONTROL, ROP, rop2) |
+                 FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) |
+                 FIELD_SET(0, DE_CONTROL, COMMAND, BITBLT) |
+                 ((nDirection == RIGHT_TO_LEFT) ?
+                 FIELD_SET(0, DE_CONTROL, DIRECTION, RIGHT_TO_LEFT)
+                 : FIELD_SET(0, DE_CONTROL, DIRECTION, LEFT_TO_RIGHT)) |
+                 FIELD_SET(0, DE_CONTROL, STATUS, START);
+       write_dpr(accel, DE_CONTROL, de_ctrl); /* dpr0c */
+
        }
 
-    {
-
-        write_dpr(accel, DE_SOURCE,
-            FIELD_SET  (0, DE_SOURCE, WRAP, DISABLE) |
-            FIELD_VALUE(0, DE_SOURCE, X_K1, sx)   |
-            FIELD_VALUE(0, DE_SOURCE, Y_K2, sy)); /* dpr0 */
-        write_dpr(accel, DE_DESTINATION,
-            FIELD_SET  (0, DE_DESTINATION, WRAP, DISABLE) |
-            FIELD_VALUE(0, DE_DESTINATION, X,    dx)  |
-            FIELD_VALUE(0, DE_DESTINATION, Y,    dy)); /* dpr04 */
-        write_dpr(accel, DE_DIMENSION,
-            FIELD_VALUE(0, DE_DIMENSION, X,    width) |
-            FIELD_VALUE(0, DE_DIMENSION, Y_ET, height)); /* dpr08 */
-
-        de_ctrl =
-            FIELD_VALUE(0, DE_CONTROL, ROP, rop2) |
-            FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) |
-            FIELD_SET(0, DE_CONTROL, COMMAND, BITBLT) |
-            ((nDirection == RIGHT_TO_LEFT) ?
-            FIELD_SET(0, DE_CONTROL, DIRECTION, RIGHT_TO_LEFT)
-            : FIELD_SET(0, DE_CONTROL, DIRECTION, LEFT_TO_RIGHT)) |
-            FIELD_SET(0, DE_CONTROL, STATUS, START);
-               write_dpr(accel, DE_CONTROL, de_ctrl); /* dpr0c */
-    }
-
-    return 0;
+       return 0;
 }
 
 static unsigned int deGetTransparency(struct lynx_accel *accel)
 {
-    unsigned int de_ctrl;
+       unsigned int de_ctrl;
 
-    de_ctrl = read_dpr(accel, DE_CONTROL);
+       de_ctrl = read_dpr(accel, DE_CONTROL);
 
-    de_ctrl &=
-        FIELD_MASK(DE_CONTROL_TRANSPARENCY_MATCH) |
-        FIELD_MASK(DE_CONTROL_TRANSPARENCY_SELECT)|
-        FIELD_MASK(DE_CONTROL_TRANSPARENCY);
+       de_ctrl &=
+                  FIELD_MASK(DE_CONTROL_TRANSPARENCY_MATCH) |
+                  FIELD_MASK(DE_CONTROL_TRANSPARENCY_SELECT)|
+                  FIELD_MASK(DE_CONTROL_TRANSPARENCY);
 
-    return de_ctrl;
+       return de_ctrl;
 }
 
 int hw_imageblit(struct lynx_accel *accel,
@@ -332,38 +320,36 @@ int hw_imageblit(struct lynx_accel *accel,
                 u32 bColor,   /* Background color (corresponding to a 0 in the monochrome data */
                 u32 rop2)     /* ROP value */
 {
-    unsigned int ulBytesPerScan;
-    unsigned int ul4BytesPerScan;
-    unsigned int ulBytesRemain;
-    unsigned int de_ctrl = 0;
-    unsigned char ajRemain[4];
-    int i, j;
-
-    startBit &= 7; /* Just make sure the start bit is within legal range */
-    ulBytesPerScan = (width + startBit + 7) / 8;
-    ul4BytesPerScan = ulBytesPerScan & ~3;
-    ulBytesRemain = ulBytesPerScan & 3;
-
-       if(accel->de_wait() != 0)
-    {
-        return -1;
-    }
-
-    /* 2D Source Base.
-       Use 0 for HOST Blt.
-    */
-    write_dpr(accel, DE_WINDOW_SOURCE_BASE, 0);
+       unsigned int ulBytesPerScan;
+       unsigned int ul4BytesPerScan;
+       unsigned int ulBytesRemain;
+       unsigned int de_ctrl = 0;
+       unsigned char ajRemain[4];
+       int i, j;
+
+       startBit &= 7; /* Just make sure the start bit is within legal range */
+       ulBytesPerScan = (width + startBit + 7) / 8;
+       ul4BytesPerScan = ulBytesPerScan & ~3;
+       ulBytesRemain = ulBytesPerScan & 3;
+
+       if (accel->de_wait() != 0)
+               return -1;
 
-    /* 2D Destination Base.
-       It is an address offset (128 bit aligned) from the beginning of frame buffer.
-    */
-    write_dpr(accel, DE_WINDOW_DESTINATION_BASE, dBase);
+       /* 2D Source Base.
+        Use 0 for HOST Blt.
+        */
+       write_dpr(accel, DE_WINDOW_SOURCE_BASE, 0);
+
+       /* 2D Destination Base.
+        It is an address offset (128 bit aligned) from the beginning of frame buffer.
+        */
+       write_dpr(accel, DE_WINDOW_DESTINATION_BASE, dBase);
 #if 0
     /* Program pitch (distance between the 1st points of two adjacent lines).
        Note that input pitch is BYTE value, but the 2D Pitch register uses
        pixel values. Need Byte to pixel conversion.
     */
-       if(bytePerPixel == 3 ){
+       if (bytePerPixel == 3) {
                dx *= 3;
                width *= 3;
                startBit *= 3;
@@ -371,8 +357,7 @@ int hw_imageblit(struct lynx_accel *accel,
                                FIELD_VALUE(0, DE_PITCH, DESTINATION, dPitch) |
                                FIELD_VALUE(0, DE_PITCH, SOURCE,      dPitch)); /* dpr10 */
 
-       }
-       else
+       } else
 #endif
        {
                write_dpr(accel, DE_PITCH,
@@ -380,30 +365,30 @@ int hw_imageblit(struct lynx_accel *accel,
                                FIELD_VALUE(0, DE_PITCH, SOURCE,      dPitch/bytePerPixel)); /* dpr10 */
        }
 
-    /* Screen Window width in Pixels.
-       2D engine uses this value to calculate the linear address in frame buffer for a given point.
-    */
-    write_dpr(accel, DE_WINDOW_WIDTH,
-        FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, (dPitch/bytePerPixel)) |
-        FIELD_VALUE(0, DE_WINDOW_WIDTH, SOURCE,      (dPitch/bytePerPixel)));
+       /* Screen Window width in Pixels.
+        2D engine uses this value to calculate the linear address in frame buffer for a given point.
+        */
+       write_dpr(accel, DE_WINDOW_WIDTH,
+                 FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, (dPitch/bytePerPixel)) |
+                 FIELD_VALUE(0, DE_WINDOW_WIDTH, SOURCE,      (dPitch/bytePerPixel)));
 
-    /* Note: For 2D Source in Host Write, only X_K1_MONO field is needed, and Y_K2 field is not used.
-             For mono bitmap, use startBit for X_K1. */
-    write_dpr(accel, DE_SOURCE,
-        FIELD_SET  (0, DE_SOURCE, WRAP, DISABLE)       |
-        FIELD_VALUE(0, DE_SOURCE, X_K1_MONO, startBit)); /* dpr00 */
+        /* Note: For 2D Source in Host Write, only X_K1_MONO field is needed, and Y_K2 field is not used.
+           For mono bitmap, use startBit for X_K1. */
+       write_dpr(accel, DE_SOURCE,
+                 FIELD_SET(0, DE_SOURCE, WRAP, DISABLE)       |
+                 FIELD_VALUE(0, DE_SOURCE, X_K1_MONO, startBit)); /* dpr00 */
 
-    write_dpr(accel, DE_DESTINATION,
-        FIELD_SET  (0, DE_DESTINATION, WRAP, DISABLE) |
-        FIELD_VALUE(0, DE_DESTINATION, X,    dx)    |
-        FIELD_VALUE(0, DE_DESTINATION, Y,    dy)); /* dpr04 */
+       write_dpr(accel, DE_DESTINATION,
+                 FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) |
+                 FIELD_VALUE(0, DE_DESTINATION, X,    dx)    |
+                 FIELD_VALUE(0, DE_DESTINATION, Y,    dy)); /* dpr04 */
 
-    write_dpr(accel, DE_DIMENSION,
-        FIELD_VALUE(0, DE_DIMENSION, X,    width) |
-        FIELD_VALUE(0, DE_DIMENSION, Y_ET, height)); /* dpr08 */
+       write_dpr(accel, DE_DIMENSION,
+                 FIELD_VALUE(0, DE_DIMENSION, X,    width) |
+                 FIELD_VALUE(0, DE_DIMENSION, Y_ET, height)); /* dpr08 */
 
-    write_dpr(accel, DE_FOREGROUND, fColor);
-    write_dpr(accel, DE_BACKGROUND, bColor);
+       write_dpr(accel, DE_FOREGROUND, fColor);
+       write_dpr(accel, DE_BACKGROUND, bColor);
 
        de_ctrl = FIELD_VALUE(0, DE_CONTROL, ROP, rop2)         |
                FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2)    |
@@ -413,24 +398,20 @@ int hw_imageblit(struct lynx_accel *accel,
 
        write_dpr(accel, DE_CONTROL, de_ctrl | deGetTransparency(accel));
 
-    /* Write MONO data (line by line) to 2D Engine data port */
-    for (i=0; i<height; i++)
-    {
-        /* For each line, send the data in chunks of 4 bytes */
-        for (j=0; j<(ul4BytesPerScan/4); j++)
-        {
-            write_dpPort(accel, *(unsigned int *)(pSrcbuf + (j * 4)));
-        }
-
-        if (ulBytesRemain)
-        {
-            memcpy(ajRemain, pSrcbuf+ul4BytesPerScan, ulBytesRemain);
-            write_dpPort(accel, *(unsigned int *)ajRemain);
-        }
-
-        pSrcbuf += srcDelta;
-    }
-
-    return 0;
+       /* Write MONO data (line by line) to 2D Engine data port */
+       for (i = 0; i < height; i++) {
+               /* For each line, send the data in chunks of 4 bytes */
+               for (j = 0; j < (ul4BytesPerScan/4); j++)
+                       write_dpPort(accel, *(unsigned int *)(pSrcbuf + (j * 4)));
+
+               if (ulBytesRemain) {
+                       memcpy(ajRemain, pSrcbuf+ul4BytesPerScan, ulBytesRemain);
+                       write_dpPort(accel, *(unsigned int *)ajRemain);
+               }
+
+               pSrcbuf += srcDelta;
+       }
+
+           return 0;
 }
 
index d3d256c21206b85b65d17401e9cac0d1e49973bc..f252e47d5ee9f9f713ae4c6abf09ecda03372c7a 100644 (file)
@@ -7,7 +7,7 @@
 /* notes: below address are the offset value from de_base_address (0x100000)*/
 
 /* for sm718/750/502 de_base is at mmreg_1mb*/
-#define DE_BASE_ADDR_TYPE1     0x100000
+#define DE_BASE_ADDR_TYPE1 0x100000
 /* for sm712,de_base is at mmreg_32kb */
 #define DE_BASE_ADDR_TYPE2  0x8000
 /* for sm722,de_base is at mmreg_0 */
@@ -26,7 +26,7 @@
 #define DE_SOURCE_WRAP_ENABLE                           1
 #define DE_SOURCE_X_K1                                  29:16
 #define DE_SOURCE_Y_K2                                  15:0
-#define DE_SOURCE_X_K1_MONO                                                    20:16
+#define DE_SOURCE_X_K1_MONO                            20:16
 
 #define DE_DESTINATION                                  0x4
 #define DE_DESTINATION_WRAP                             31:31
index 405e24b6768f8d709bbaec095a047ee1159a2bc9..2400c6c7586300533a83c8e7e333e0650512c1f7 100644 (file)
@@ -61,6 +61,7 @@ writel((data), cursor->mmio + (addr))
 void hw_cursor_enable(struct lynx_cursor *cursor)
 {
        u32 reg;
+
        reg = FIELD_VALUE(0, HWC_ADDRESS, ADDRESS, cursor->offset)|
                        FIELD_SET(0, HWC_ADDRESS, EXT, LOCAL)|
                        FIELD_SET(0, HWC_ADDRESS, ENABLE, ENABLE);
@@ -81,6 +82,7 @@ void hw_cursor_setPos(struct lynx_cursor *cursor,
                                                int x, int y)
 {
        u32 reg;
+
        reg = FIELD_VALUE(0, HWC_LOCATION, Y, y)|
                        FIELD_VALUE(0, HWC_LOCATION, X, x);
        POKE32(HWC_LOCATION, reg);
@@ -122,8 +124,7 @@ void hw_cursor_setData(struct lynx_cursor *cursor,
                odd=0;
 */
 
-       for(i=0;i<count;i++)
-       {
+       for (i = 0; i < count; i++) {
                color = *pcol++;
                mask = *pmsk++;
                data = 0;
@@ -132,26 +133,25 @@ void hw_cursor_setData(struct lynx_cursor *cursor,
                 * but method 2 shows no lag
                 * and method 1 seems a bit wrong*/
 #if 0
-               if(rop == ROP_XOR)
+               if (rop == ROP_XOR)
                        opr = mask ^ color;
                else
                        opr = mask & color;
 
-               for(j=0;j<8;j++)
-               {
+               for (j = 0; j < 8; j++) {
 
-                       if(opr & (0x80 >> j))
-                       {       /* use fg color,id = 2 */
+                       if (opr & (0x80 >> j)) {
+                               /* use fg color,id = 2 */
                                data |= 2 << (j*2);
-                       }else{
+                       } else {
                                /* use bg color,id = 1 */
                                data |= 1 << (j*2);
                        }
                }
 #else
-               for(j=0;j<8;j++){
-                       if(mask & (0x80>>j)){
-                               if(rop == ROP_XOR)
+               for (j = 0; j < 8; j++) {
+                       if (mask & (0x80>>j)) {
+                               if (rop == ROP_XOR)
                                        opr = mask ^ color;
                                else
                                        opr = mask & color;
@@ -165,15 +165,15 @@ void hw_cursor_setData(struct lynx_cursor *cursor,
 
                /* assume pitch is 1,2,4,8,...*/
 #if 0
-               if(!((i+1)&(pitch-1)))   /* below line equal to is line */
+               if (!((i+1)&(pitch-1)))   /* below line equal to is line */
 #else
-               if((i+1) % pitch == 0)
+               if ((i+1) % pitch == 0)
 #endif
                {
                        /* need a return */
                        pstart += offset;
                        pbuffer = pstart;
-               }else{
+               } else {
                        pbuffer += sizeof(u16);
                }
 
@@ -204,45 +204,42 @@ void hw_cursor_setData2(struct lynx_cursor *cursor,
        pstart = cursor->vstart;
        pbuffer = pstart;
 
-       for(i=0;i<count;i++)
-       {
+       for (i = 0; i < count; i++) {
                color = *pcol++;
                mask = *pmsk++;
                data = 0;
 
                /* either method below works well, but method 2 shows no lag */
 #if 0
-               if(rop == ROP_XOR)
+               if (rop == ROP_XOR)
                        opr = mask ^ color;
                else
                        opr = mask & color;
 
-               for(j=0;j<8;j++)
-               {
+               for (j = 0; j < 8; j++) {
 
-                       if(opr & (0x80 >> j))
-                       {       /* use fg color,id = 2 */
+                       if (opr & (0x80 >> j)) {
+                               /* use fg color,id = 2 */
                                data |= 2 << (j*2);
-                       }else{
+                       } else {
                                /* use bg color,id = 1 */
                                data |= 1 << (j*2);
                        }
                }
 #else
-               for(j=0;j<8;j++){
-                       if(mask & (1<<j))
+               for (j = 0; j < 8; j++) {
+                       if (mask & (1<<j))
                                data |= ((color & (1<<j))?1:2)<<(j*2);
                }
 #endif
                iowrite16(data, pbuffer);
 
                /* assume pitch is 1,2,4,8,...*/
-               if(!(i&(pitch-1)))
-               {
+               if (!(i&(pitch-1))) {
                        /* need a return */
                        pstart += offset;
                        pbuffer = pstart;
-               }else{
+               } else {
                        pbuffer += sizeof(u16);
                }
 
index 05777f72c16627e9309a0a124e9b9f68db2a84a5..8dc6bd22f5db87e3a4349e1f67d56116b66d6311 100644 (file)
@@ -11,9 +11,9 @@
 #define GET_FIELD(d, f)     (((d) >> _LSB(f)) & RAW_MASK(f))
 #define TEST_FIELD(d, f, v) (GET_FIELD(d, f) == f ## _ ## v)
 #define SET_FIELD(d, f, v)  (((d) & ~GET_MASK(f)) | \
-                            (((f ## _ ## v) & RAW_MASK(f)) << _LSB(f)))
+                           (((f ## _ ## v) & RAW_MASK(f)) << _LSB(f)))
 #define SET_FIELDV(d, f, v) (((d) & ~GET_MASK(f)) | \
-                            (((v) & RAW_MASK(f)) << _LSB(f)))
+                           (((v) & RAW_MASK(f)) << _LSB(f)))
 
 /* Internal macros */
 #define _F_START(f)             (0 ? f)
 /* Global macros */
 #define FIELD_GET(x, reg, field) \
 ( \
-    _F_NORMALIZE((x), reg ## _ ## field) \
+       _F_NORMALIZE((x), reg ## _ ## field) \
 )
 
 #define FIELD_SET(x, reg, field, value) \
 ( \
-    (x & ~_F_MASK(reg ## _ ## field)) \
-    | _F_DENORMALIZE(reg ## _ ## field ## _ ## value, reg ## _ ## field) \
+       (x & ~_F_MASK(reg ## _ ## field)) \
+       | _F_DENORMALIZE(reg ## _ ## field ## _ ## value, reg ## _ ## field) \
 )
 
 #define FIELD_VALUE(x, reg, field, value) \
 ( \
-    (x & ~_F_MASK(reg ## _ ## field)) \
-    | _F_DENORMALIZE(value, reg ## _ ## field) \
+       (x & ~_F_MASK(reg ## _ ## field)) \
+       | _F_DENORMALIZE(value, reg ## _ ## field) \
 )
 
 #define FIELD_CLEAR(reg, field) \
 ( \
-    ~ _F_MASK(reg ## _ ## field) \
+       ~ _F_MASK(reg ## _ ## field) \
 )
 
 /* Field Macros */
 #define FIELD_DENORMALIZE(field, value) (((value) << FIELD_START(field)) & FIELD_MASK(field))
 
 #define FIELD_INIT(reg, field, value)   FIELD_DENORMALIZE(reg ## _ ## field, \
-                                                          reg ## _ ## field ## _ ## value)
+                                                         reg ## _ ## field ## _ ## value)
 #define FIELD_INIT_VAL(reg, field, value) \
-                                        (FIELD_DENORMALIZE(reg ## _ ## field, value))
+       (FIELD_DENORMALIZE(reg ## _ ## field, value))
 #define FIELD_VAL_SET(x, r, f, v)       x = x & ~FIELD_MASK(r ## _ ## f) \
-                                              | FIELD_DENORMALIZE(r ## _ ## f, r ## _ ## f ## _ ## v)
+                                       | FIELD_DENORMALIZE(r ## _ ## f, r ## _ ## f ## _ ## v)
 
 #define RGB(r, g, b) \
 ( \
-    (unsigned long) (((r) << 16) | ((g) << 8) | (b)) \
+       (unsigned long) (((r) << 16) | ((g) << 8) | (b)) \
 )
 
 #define RGB16(r, g, b) \
 ( \
-    (unsigned short) ((((r) & 0xF8) << 8) | (((g) & 0xFC) << 3) | (((b) & 0xF8) >> 3)) \
+       (unsigned short) ((((r) & 0xF8) << 8) | (((g) & 0xFC) << 3) | (((b) & 0xF8) >> 3)) \
 )
 
 static inline unsigned int absDiff(unsigned int a, unsigned int b)
 {
-       if(a<b)
+       if (a < b)
                return b-a;
        else
                return a-b;
index 84381bc414e79779be56fb4f97ff84c1ee6a3828..7317ba9b7fe5c1b289280c23a8cacd1586b9c8e6 100644 (file)
 #include "ddk750.h"
 #include "sm750_accel.h"
 
-int hw_sm750_map(struct lynx_share* share, struct pci_dev* pdev)
+int hw_sm750_map(struct lynx_share *share, struct pci_dev *pdev)
 {
        int ret;
        struct sm750_share *spec_share;
-       
+
 
        spec_share = container_of(share, struct sm750_share, share);
        ret = 0;
@@ -43,24 +43,23 @@ int hw_sm750_map(struct lynx_share* share, struct pci_dev* pdev)
         * in lynxfb_remove, or memory will not be mapped again
         * successfully
         * */
-
-       if((ret = pci_request_region(pdev, 1, "sm750fb")))
-       {
+       ret = pci_request_region(pdev, 1, "sm750fb");
+       if (ret) {
                pr_err("Can not request PCI regions.\n");
                goto exit;
        }
 
        /* now map mmio and vidmem*/
        share->pvReg = ioremap_nocache(share->vidreg_start, share->vidreg_size);
-       if(!share->pvReg){
+       if (!share->pvReg) {
                pr_err("mmio failed\n");
                ret = -EFAULT;
                goto exit;
-       }else{
+       } else {
                pr_info("mmio virtual addr = %p\n", share->pvReg);
        }
 
-       
+
        share->accel.dprBase = share->pvReg + DE_BASE_ADDR_TYPE1;
        share->accel.dpPortBase = share->pvReg + DE_PORT_ADDR_TYPE1;
 
@@ -78,8 +77,8 @@ int hw_sm750_map(struct lynx_share* share, struct pci_dev* pdev)
 
        /* reserve the vidmem space of smi adaptor */
 #if 0
-       if((ret = pci_request_region(pdev, 0, _moduleName_)))
-       {
+       ret = pci_request_region(pdev, 0, _moduleName_);
+       if (ret) {
                pr_err("Can not request PCI regions.\n");
                goto exit;
        }
@@ -87,11 +86,11 @@ int hw_sm750_map(struct lynx_share* share, struct pci_dev* pdev)
 
        share->pvMem = ioremap_wc(share->vidmem_start, share->vidmem_size);
 
-       if(!share->pvMem){
+       if (!share->pvMem) {
                pr_err("Map video memory failed\n");
                ret = -EFAULT;
                goto exit;
-       }else{
+       } else {
                pr_info("video memory vaddr = %p\n", share->pvMem);
        }
 exit:
@@ -104,22 +103,22 @@ int hw_sm750_inithw(struct lynx_share *share, struct pci_dev *pdev)
 {
        struct sm750_share *spec_share;
        struct init_status *parm;
-       
+
        spec_share = container_of(share, struct sm750_share, share);
        parm = &spec_share->state.initParm;
-       if(parm->chip_clk == 0)
-               parm->chip_clk = (getChipType() == SM750LE)?
+       if (parm->chip_clk == 0)
+               parm->chip_clk = (getChipType() == SM750LE) ?
                                                DEFAULT_SM750LE_CHIP_CLOCK :
                                                DEFAULT_SM750_CHIP_CLOCK;
 
-       if(parm->mem_clk == 0)
+       if (parm->mem_clk == 0)
                parm->mem_clk = parm->chip_clk;
-       if(parm->master_clk == 0)
+       if (parm->master_clk == 0)
                parm->master_clk = parm->chip_clk/3;
 
        ddk750_initHw((initchip_param_t *)&spec_share->state.initParm);
        /* for sm718,open pci burst */
-       if(share->devid == 0x718){
+       if (share->devid == 0x718) {
                POKE32(SYSTEM_CTRL,
                                FIELD_SET(PEEK32(SYSTEM_CTRL), SYSTEM_CTRL, PCI_BURST, ON));
        }
@@ -130,10 +129,9 @@ int hw_sm750_inithw(struct lynx_share *share, struct pci_dev *pdev)
        ddk750_initDVIDisp();
 #endif
 
-       if(getChipType() != SM750LE)
-       {
+       if (getChipType() != SM750LE) {
                /* does user need CRT ?*/
-               if(spec_share->state.nocrt){
+               if (spec_share->state.nocrt) {
                        POKE32(MISC_CTRL,
                                        FIELD_SET(PEEK32(MISC_CTRL),
                                        MISC_CTRL,
@@ -143,7 +141,7 @@ int hw_sm750_inithw(struct lynx_share *share, struct pci_dev *pdev)
                                        FIELD_SET(PEEK32(SYSTEM_CTRL),
                                        SYSTEM_CTRL,
                                        DPMS, VNHN));
-               }else{
+               } else {
                        POKE32(MISC_CTRL,
                                        FIELD_SET(PEEK32(MISC_CTRL),
                                        MISC_CTRL,
@@ -155,45 +153,43 @@ int hw_sm750_inithw(struct lynx_share *share, struct pci_dev *pdev)
                                        DPMS, VPHP));
                }
 
-               switch (spec_share->state.pnltype){
-                       case sm750_doubleTFT:
-                       case sm750_24TFT:
-                       case sm750_dualTFT:
-                       POKE32(PANEL_DISPLAY_CTRL,
-                               FIELD_VALUE(PEEK32(PANEL_DISPLAY_CTRL),
-                                                       PANEL_DISPLAY_CTRL,
-                                                       TFT_DISP,
-                                                       spec_share->state.pnltype));
-                       break;
+               switch (spec_share->state.pnltype) {
+               case sm750_doubleTFT:
+               case sm750_24TFT:
+               case sm750_dualTFT:
+               POKE32(PANEL_DISPLAY_CTRL,
+                       FIELD_VALUE(PEEK32(PANEL_DISPLAY_CTRL),
+                                               PANEL_DISPLAY_CTRL,
+                                               TFT_DISP,
+                                               spec_share->state.pnltype));
+               break;
                }
-       }else{
+       } else {
                /* for 750LE ,no DVI chip initilization 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.
                 */
-        swI2CInit(0, 1);
+       swI2CInit(0, 1);
 
 
-        /* Customer may NOT use CH7301 DVI chip, which has to be
-           initialized differently.
-         */
-        if (swI2CReadReg(0xec, 0x4a) == 0x95)
-        {
-            /* The following register values for CH7301 are from
-               Chrontel app note and our experiment.
-             */
+       /* Customer may NOT use CH7301 DVI chip, which has to be
+          initialized differently.
+       */
+       if (swI2CReadReg(0xec, 0x4a) == 0x95) {
+               /* The following register values for CH7301 are from
+                  Chrontel app note and our experiment.
+               */
                        pr_info("yes,CH7301 DVI chip found\n");
-            swI2CWriteReg(0xec, 0x1d, 0x16);
-            swI2CWriteReg(0xec, 0x21, 0x9);
-            swI2CWriteReg(0xec, 0x49, 0xC0);
+               swI2CWriteReg(0xec, 0x1d, 0x16);
+               swI2CWriteReg(0xec, 0x21, 0x9);
+               swI2CWriteReg(0xec, 0x49, 0xC0);
                        pr_info("okay,CH7301 DVI chip setup done\n");
-        }
+       }
        }
 
        /* init 2d engine */
-       if(!share->accel_off){
+       if (!share->accel_off)
                hw_sm750_initAccel(share);
-       }
 
        return 0;
 }
@@ -202,86 +198,87 @@ int hw_sm750_inithw(struct lynx_share *share, struct pci_dev *pdev)
 resource_size_t hw_sm750_getVMSize(struct lynx_share *share)
 {
        resource_size_t ret;
-       
+
        ret = ddk750_getVMSize();
        return ret;
 }
 
 
 
-int hw_sm750_output_checkMode(struct lynxfb_output* output, struct fb_var_screeninfo* var)
+int hw_sm750_output_checkMode(struct lynxfb_output *output, struct fb_var_screeninfo *var)
 {
-       
+
        return 0;
 }
 
 
-int hw_sm750_output_setMode(struct lynxfb_outputoutput,
-                                                                       struct fb_var_screeninfo* var, struct fb_fix_screeninfo* fix)
+int hw_sm750_output_setMode(struct lynxfb_output *output,
+                                                                       struct fb_var_screeninfo *var, struct fb_fix_screeninfo *fix)
 {
        int ret;
        disp_output_t dispSet;
        int channel;
-       
+
        ret = 0;
        dispSet = 0;
        channel = *output->channel;
 
 
-       if(getChipType() != SM750LE){
-               if(channel == sm750_primary){
+       if (getChipType() != SM750LE) {
+               if (channel == sm750_primary) {
                        pr_info("primary channel\n");
-                       if(output->paths & sm750_panel)
+                       if (output->paths & sm750_panel)
                                dispSet |= do_LCD1_PRI;
-                       if(output->paths & sm750_crt)
+                       if (output->paths & sm750_crt)
                                dispSet |= do_CRT_PRI;
 
-               }else{
+               } else {
                        pr_info("secondary channel\n");
-                       if(output->paths & sm750_panel)
+                       if (output->paths & sm750_panel)
                                dispSet |= do_LCD1_SEC;
-                       if(output->paths & sm750_crt)
+                       if (output->paths & sm750_crt)
                                dispSet |= do_CRT_SEC;
 
                }
                ddk750_setLogicalDispOut(dispSet);
-       }else{
+       } else {
                /* just open DISPLAY_CONTROL_750LE register bit 3:0*/
                u32 reg;
+
                reg = PEEK32(DISPLAY_CONTROL_750LE);
                reg |= 0xf;
                POKE32(DISPLAY_CONTROL_750LE, reg);
        }
 
-       pr_info("ddk setlogicdispout done \n");
+       pr_info("ddk setlogicdispout done\n");
        return ret;
 }
 
-void hw_sm750_output_clear(struct lynxfb_outputoutput)
+void hw_sm750_output_clear(struct lynxfb_output *output)
 {
-       
+
        return;
 }
 
-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 lynx_share *share;
-       
+
 
        share = container_of(crtc, struct lynxfb_par, crtc)->share;
 
-       switch (var->bits_per_pixel){
-               case 8:
-               case 16:
-                       break;
-               case 32:
-                       if (share->revid == SM750LE_REVISION_ID) {
-                               pr_debug("750le do not support 32bpp\n");
-                               return -EINVAL;
-                       }
-                       break;
-               default:
+       switch (var->bits_per_pixel) {
+       case 8:
+       case 16:
+               break;
+       case 32:
+               if (share->revid == SM750LE_REVISION_ID) {
+                       pr_debug("750le do not support 32bpp\n");
                        return -EINVAL;
+               }
+               break;
+       default:
+               return -EINVAL;
 
        }
 
@@ -292,9 +289,9 @@ int hw_sm750_crtc_checkMode(struct lynxfb_crtc* crtc, struct fb_var_screeninfo*
 /*
        set the controller's mode for @crtc charged with @var and @fix parameters
 */
-int hw_sm750_crtc_setMode(struct lynxfb_crtccrtc,
-                                                               struct fb_var_screeninfovar,
-                                                               struct fb_fix_screeninfofix)
+int hw_sm750_crtc_setMode(struct lynxfb_crtc *crtc,
+                                                               struct fb_var_screeninfo *var,
+                                                               struct fb_fix_screeninfo *fix)
 {
        int ret, fmt;
        u32 reg;
@@ -303,24 +300,24 @@ int hw_sm750_crtc_setMode(struct lynxfb_crtc* crtc,
        struct lynx_share *share;
        struct lynxfb_par *par;
 
-       
+
        ret = 0;
        par = container_of(crtc, struct lynxfb_par, crtc);
        share = par->share;
 #if 1
-       if(!share->accel_off){
+       if (!share->accel_off) {
                /* set 2d engine pixel format according to mode bpp */
-               switch(var->bits_per_pixel){
-                       case 8:
-                               fmt = 0;
-                               break;
-                       case 16:
-                               fmt = 1;
-                               break;
-                       case 32:
-                       default:
-                               fmt = 2;
-                               break;
+               switch (var->bits_per_pixel) {
+               case 8:
+                       fmt = 0;
+                       break;
+               case 16:
+                       fmt = 1;
+                       break;
+               case 32:
+               default:
+                       fmt = 2;
+                       break;
                }
                hw_set2dformat(&share->accel, fmt);
        }
@@ -330,7 +327,7 @@ int hw_sm750_crtc_setMode(struct lynxfb_crtc* crtc,
        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.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;
@@ -341,19 +338,19 @@ int hw_sm750_crtc_setMode(struct lynxfb_crtc* crtc,
        modparm.vertical_total = var->yres + var->upper_margin + var->lower_margin + var->vsync_len;
 
        /* choose pll */
-       if(crtc->channel != sm750_secondary)
+       if (crtc->channel != sm750_secondary)
                clock = PRIMARY_PLL;
        else
                clock = SECONDARY_PLL;
 
        pr_debug("Request pixel clock = %lu\n", modparm.pixel_clock);
        ret = ddk750_setModeTiming(&modparm, clock);
-       if(ret){
+       if (ret) {
                pr_err("Set mode timing failed\n");
                goto exit;
        }
 
-       if(crtc->channel != sm750_secondary){
+       if (crtc->channel != sm750_secondary) {
                /* set pitch, offset ,width,start address ,etc... */
                POKE32(PANEL_FB_ADDRESS,
                        FIELD_SET(0, PANEL_FB_ADDRESS, STATUS, CURRENT)|
@@ -369,7 +366,7 @@ int hw_sm750_crtc_setMode(struct lynxfb_crtc* crtc,
                        FIELD_VALUE(0, PANEL_FB_WIDTH, OFFSET, fix->line_length));
 
                POKE32(PANEL_WINDOW_WIDTH,
-                       FIELD_VALUE(0, PANEL_WINDOW_WIDTH, WIDTH, var->xres -1)|
+                       FIELD_VALUE(0, PANEL_WINDOW_WIDTH, WIDTH, var->xres - 1)|
                        FIELD_VALUE(0, PANEL_WINDOW_WIDTH, X, var->xoffset));
 
                POKE32(PANEL_WINDOW_HEIGHT,
@@ -389,7 +386,7 @@ int hw_sm750_crtc_setMode(struct lynxfb_crtc* crtc,
                        PANEL_DISPLAY_CTRL, FORMAT,
                        (var->bits_per_pixel >> 4)
                        ));
-       }else{
+       } else {
                /* not implemented now */
                POKE32(CRT_FB_ADDRESS, crtc->oScreen);
                reg = var->xres * (var->bits_per_pixel >> 3);
@@ -412,138 +409,137 @@ exit:
        return ret;
 }
 
-void hw_sm750_crtc_clear(struct lynxfb_crtccrtc)
+void hw_sm750_crtc_clear(struct lynxfb_crtc *crtc)
 {
-       
+
        return;
 }
 
-int hw_sm750_setColReg(struct lynxfb_crtccrtc, ushort index,
+int hw_sm750_setColReg(struct lynxfb_crtc *crtc, ushort index,
                                                                ushort red, ushort green, ushort blue)
 {
-       static unsigned int add[]={PANEL_PALETTE_RAM, CRT_PALETTE_RAM};
+       static unsigned int add[] = {PANEL_PALETTE_RAM, CRT_PALETTE_RAM};
+
        POKE32(add[crtc->channel] + index*4, (red<<16)|(green<<8)|blue);
        return 0;
 }
 
-int hw_sm750le_setBLANK(struct lynxfb_output * output, int blank){
+int hw_sm750le_setBLANK(struct lynxfb_output *output, int blank)
+{
        int dpms, crtdb;
-       
-       switch(blank)
-       {
+
+       switch (blank) {
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 10)
-               case FB_BLANK_UNBLANK:
+       case FB_BLANK_UNBLANK:
 #else
-               case VESA_NO_BLANKING:
+       case VESA_NO_BLANKING:
 #endif
-                       dpms = CRT_DISPLAY_CTRL_DPMS_0;
-                       crtdb = CRT_DISPLAY_CTRL_BLANK_OFF;
-                       break;
+               dpms = CRT_DISPLAY_CTRL_DPMS_0;
+               crtdb = CRT_DISPLAY_CTRL_BLANK_OFF;
+               break;
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 10)
-               case FB_BLANK_NORMAL:
-                       dpms = CRT_DISPLAY_CTRL_DPMS_0;
-                       crtdb = CRT_DISPLAY_CTRL_BLANK_ON;
-                       break;
+       case FB_BLANK_NORMAL:
+               dpms = CRT_DISPLAY_CTRL_DPMS_0;
+               crtdb = CRT_DISPLAY_CTRL_BLANK_ON;
+               break;
 #endif
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 10)
-               case FB_BLANK_VSYNC_SUSPEND:
+       case FB_BLANK_VSYNC_SUSPEND:
 #else
-               case VESA_VSYNC_SUSPEND:
+       case VESA_VSYNC_SUSPEND:
 #endif
-                       dpms = CRT_DISPLAY_CTRL_DPMS_2;
-                       crtdb = CRT_DISPLAY_CTRL_BLANK_ON;
-                       break;
+               dpms = CRT_DISPLAY_CTRL_DPMS_2;
+               crtdb = CRT_DISPLAY_CTRL_BLANK_ON;
+               break;
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 10)
-               case FB_BLANK_HSYNC_SUSPEND:
+       case FB_BLANK_HSYNC_SUSPEND:
 #else
-               case VESA_HSYNC_SUSPEND:
+       case VESA_HSYNC_SUSPEND:
 #endif
-                       dpms = CRT_DISPLAY_CTRL_DPMS_1;
-                       crtdb = CRT_DISPLAY_CTRL_BLANK_ON;
-                       break;
+               dpms = CRT_DISPLAY_CTRL_DPMS_1;
+               crtdb = CRT_DISPLAY_CTRL_BLANK_ON;
+               break;
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 10)
-               case FB_BLANK_POWERDOWN:
+       case FB_BLANK_POWERDOWN:
 #else
-               case VESA_POWERDOWN:
+       case VESA_POWERDOWN:
 #endif
-                       dpms = CRT_DISPLAY_CTRL_DPMS_3;
-                       crtdb = CRT_DISPLAY_CTRL_BLANK_ON;
-                       break;
-               default:
-                       return -EINVAL;
+               dpms = CRT_DISPLAY_CTRL_DPMS_3;
+               crtdb = CRT_DISPLAY_CTRL_BLANK_ON;
+               break;
+       default:
+               return -EINVAL;
        }
 
-       if(output->paths & sm750_crt){
+       if (output->paths & sm750_crt) {
                POKE32(CRT_DISPLAY_CTRL, FIELD_VALUE(PEEK32(CRT_DISPLAY_CTRL), CRT_DISPLAY_CTRL, DPMS, dpms));
                POKE32(CRT_DISPLAY_CTRL, FIELD_VALUE(PEEK32(CRT_DISPLAY_CTRL), CRT_DISPLAY_CTRL, BLANK, crtdb));
        }
        return 0;
 }
 
-int hw_sm750_setBLANK(struct lynxfb_outputoutput, int blank)
+int hw_sm750_setBLANK(struct lynxfb_output *output, int blank)
 {
        unsigned int dpms, pps, crtdb;
-       
+
        dpms = pps = crtdb = 0;
 
-       switch (blank)
-       {
+       switch (blank) {
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 10)
-               case FB_BLANK_UNBLANK:
+       case FB_BLANK_UNBLANK:
 #else
-               case VESA_NO_BLANKING:
+       case VESA_NO_BLANKING:
 #endif
-                       pr_info("flag = FB_BLANK_UNBLANK \n");
-                       dpms = SYSTEM_CTRL_DPMS_VPHP;
-                       pps = PANEL_DISPLAY_CTRL_DATA_ENABLE;
-                       crtdb = CRT_DISPLAY_CTRL_BLANK_OFF;
-                       break;
+               pr_info("flag = FB_BLANK_UNBLANK\n");
+               dpms = SYSTEM_CTRL_DPMS_VPHP;
+               pps = PANEL_DISPLAY_CTRL_DATA_ENABLE;
+               crtdb = CRT_DISPLAY_CTRL_BLANK_OFF;
+               break;
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 10)
-               case FB_BLANK_NORMAL:
-                       pr_info("flag = FB_BLANK_NORMAL \n");
-                       dpms = SYSTEM_CTRL_DPMS_VPHP;
-                       pps = PANEL_DISPLAY_CTRL_DATA_DISABLE;
-                       crtdb = CRT_DISPLAY_CTRL_BLANK_ON;
-                       break;
+       case FB_BLANK_NORMAL:
+               pr_info("flag = FB_BLANK_NORMAL\n");
+               dpms = SYSTEM_CTRL_DPMS_VPHP;
+               pps = PANEL_DISPLAY_CTRL_DATA_DISABLE;
+               crtdb = CRT_DISPLAY_CTRL_BLANK_ON;
+               break;
 #endif
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 10)
-               case FB_BLANK_VSYNC_SUSPEND:
+       case FB_BLANK_VSYNC_SUSPEND:
 #else
-               case VESA_VSYNC_SUSPEND:
+       case VESA_VSYNC_SUSPEND:
 #endif
-                       dpms = SYSTEM_CTRL_DPMS_VNHP;
-                       pps = PANEL_DISPLAY_CTRL_DATA_DISABLE;
-                       crtdb = CRT_DISPLAY_CTRL_BLANK_ON;
-                       break;
+               dpms = SYSTEM_CTRL_DPMS_VNHP;
+               pps = PANEL_DISPLAY_CTRL_DATA_DISABLE;
+               crtdb = CRT_DISPLAY_CTRL_BLANK_ON;
+               break;
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 10)
-               case FB_BLANK_HSYNC_SUSPEND:
+       case FB_BLANK_HSYNC_SUSPEND:
 #else
-               case VESA_HSYNC_SUSPEND:
+       case VESA_HSYNC_SUSPEND:
 #endif
-                       dpms = SYSTEM_CTRL_DPMS_VPHN;
-                       pps = PANEL_DISPLAY_CTRL_DATA_DISABLE;
-                       crtdb = CRT_DISPLAY_CTRL_BLANK_ON;
-                       break;
+               dpms = SYSTEM_CTRL_DPMS_VPHN;
+               pps = PANEL_DISPLAY_CTRL_DATA_DISABLE;
+               crtdb = CRT_DISPLAY_CTRL_BLANK_ON;
+               break;
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 10)
-               case FB_BLANK_POWERDOWN:
+       case FB_BLANK_POWERDOWN:
 #else
-               case VESA_POWERDOWN:
+       case VESA_POWERDOWN:
 #endif
-                       dpms = SYSTEM_CTRL_DPMS_VNHN;
-                       pps = PANEL_DISPLAY_CTRL_DATA_DISABLE;
-                       crtdb = CRT_DISPLAY_CTRL_BLANK_ON;
-                       break;
+               dpms = SYSTEM_CTRL_DPMS_VNHN;
+               pps = PANEL_DISPLAY_CTRL_DATA_DISABLE;
+               crtdb = CRT_DISPLAY_CTRL_BLANK_ON;
+               break;
        }
 
-       if(output->paths & sm750_crt){
+       if (output->paths & sm750_crt) {
 
                POKE32(SYSTEM_CTRL, FIELD_VALUE(PEEK32(SYSTEM_CTRL), SYSTEM_CTRL, DPMS, dpms));
                POKE32(CRT_DISPLAY_CTRL, FIELD_VALUE(PEEK32(CRT_DISPLAY_CTRL), CRT_DISPLAY_CTRL, BLANK, crtdb));
        }
 
-       if(output->paths & sm750_panel){
+       if (output->paths & sm750_panel)
                POKE32(PANEL_DISPLAY_CTRL, FIELD_VALUE(PEEK32(PANEL_DISPLAY_CTRL), PANEL_DISPLAY_CTRL, DATA, pps));
-       }
 
        return 0;
 }
@@ -552,9 +548,10 @@ int hw_sm750_setBLANK(struct lynxfb_output* output, int blank)
 void hw_sm750_initAccel(struct lynx_share *share)
 {
        u32 reg;
+
        enable2DEngine(1);
 
-       if(getChipType() == SM750LE){
+       if (getChipType() == SM750LE) {
                reg = PEEK32(DE_STATE1);
                reg = FIELD_SET(reg, DE_STATE1, DE_ABORT, ON);
                POKE32(DE_STATE1, reg);
@@ -563,7 +560,7 @@ void hw_sm750_initAccel(struct lynx_share *share)
                reg = FIELD_SET(reg, DE_STATE1, DE_ABORT, OFF);
                POKE32(DE_STATE1, reg);
 
-       }else{
+       } else {
                /* engine reset */
                reg = PEEK32(SYSTEM_CTRL);
            reg = FIELD_SET(reg, SYSTEM_CTRL, DE_ABORT, ON);
@@ -580,13 +577,14 @@ void hw_sm750_initAccel(struct lynx_share *share)
 
 int hw_sm750le_deWait(void)
 {
-       int i=0x10000000;
-       while(i--){
+       int i = 0x10000000;
+
+       while (i--) {
                unsigned int dwVal = PEEK32(DE_STATE2);
-               if((FIELD_GET(dwVal, DE_STATE2, DE_STATUS) == DE_STATE2_DE_STATUS_IDLE) &&
+
+               if ((FIELD_GET(dwVal, DE_STATE2, DE_STATUS) == DE_STATE2_DE_STATUS_IDLE) &&
                        (FIELD_GET(dwVal, DE_STATE2, DE_FIFO)  == DE_STATE2_DE_FIFO_EMPTY) &&
-                       (FIELD_GET(dwVal, DE_STATE2, DE_MEM_FIFO) == DE_STATE2_DE_MEM_FIFO_EMPTY))
-               {
+                       (FIELD_GET(dwVal, DE_STATE2, DE_MEM_FIFO) == DE_STATE2_DE_MEM_FIFO_EMPTY)) {
                        return 0;
                }
        }
@@ -597,13 +595,14 @@ int hw_sm750le_deWait(void)
 
 int hw_sm750_deWait(void)
 {
-       int i=0x10000000;
-       while(i--){
+       int i = 0x10000000;
+
+       while (i--) {
                unsigned int dwVal = PEEK32(SYSTEM_CTRL);
-               if((FIELD_GET(dwVal, SYSTEM_CTRL, DE_STATUS) == SYSTEM_CTRL_DE_STATUS_IDLE) &&
+
+               if ((FIELD_GET(dwVal, SYSTEM_CTRL, DE_STATUS) == SYSTEM_CTRL_DE_STATUS_IDLE) &&
                        (FIELD_GET(dwVal, SYSTEM_CTRL, DE_FIFO)  == SYSTEM_CTRL_DE_FIFO_EMPTY) &&
-                       (FIELD_GET(dwVal, SYSTEM_CTRL, DE_MEM_FIFO) == SYSTEM_CTRL_DE_MEM_FIFO_EMPTY))
-               {
+                       (FIELD_GET(dwVal, SYSTEM_CTRL, DE_MEM_FIFO) == SYSTEM_CTRL_DE_MEM_FIFO_EMPTY)) {
                        return 0;
                }
        }
@@ -612,28 +611,27 @@ 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 */
-    if ((var->xoffset + var->xres > var->xres_virtual) ||
-            (var->yoffset + var->yres > var->yres_virtual)) {
-        return -EINVAL;
-    }
-
-    total = var->yoffset * info->fix.line_length +
-        ((var->xoffset * var->bits_per_pixel) >> 3);
-    total += crtc->oScreen;
-    if (crtc->channel == sm750_primary) {
-        POKE32(PANEL_FB_ADDRESS,
-                FIELD_VALUE(PEEK32(PANEL_FB_ADDRESS),
-                    PANEL_FB_ADDRESS, ADDRESS, total));
-    } else {
-        POKE32(CRT_FB_ADDRESS,
-                FIELD_VALUE(PEEK32(CRT_FB_ADDRESS),
-                    CRT_FB_ADDRESS, ADDRESS, total));
-    }
-    return 0;
-}
+       uint32_t total;
+       /* check params */
+       if ((var->xoffset + var->xres > var->xres_virtual) ||
+           (var->yoffset + var->yres > var->yres_virtual)) {
+               return -EINVAL;
+       }
 
+       total = var->yoffset * info->fix.line_length +
+               ((var->xoffset * var->bits_per_pixel) >> 3);
+       total += crtc->oScreen;
+       if (crtc->channel == sm750_primary) {
+               POKE32(PANEL_FB_ADDRESS,
+                       FIELD_VALUE(PEEK32(PANEL_FB_ADDRESS),
+                               PANEL_FB_ADDRESS, ADDRESS, total));
+       } else {
+               POKE32(CRT_FB_ADDRESS,
+                       FIELD_VALUE(PEEK32(CRT_FB_ADDRESS),
+                               CRT_FB_ADDRESS, ADDRESS, total));
+       }
+       return 0;
+}
index 93288b3a99d8914413522e74e6672684acd27ae2..ef0a16f27936d491eb4af81ee7716e970fa4b313 100644 (file)
@@ -2,14 +2,14 @@
 #define LYNX_HW750_H__
 
 
-#define DEFAULT_SM750_CHIP_CLOCK               290
-#define DEFAULT_SM750LE_CHIP_CLOCK     333
+#define DEFAULT_SM750_CHIP_CLOCK       290
+#define DEFAULT_SM750LE_CHIP_CLOCK     333
 #ifndef SM750LE_REVISION_ID
 #define SM750LE_REVISION_ID (unsigned char)0xfe
 #endif
 
 
-enum sm750_pnltype{
+enum sm750_pnltype {
 
        sm750_24TFT = 0,/* 24bit tft */
 
@@ -19,30 +19,30 @@ enum sm750_pnltype{
 };
 
 /* vga channel is not concerned  */
-enum sm750_dataflow{
+enum sm750_dataflow {
        sm750_simul_pri,/* primary => all head */
 
        sm750_simul_sec,/* secondary => all head */
 
-       sm750_dual_normal,/*    primary => panel head and secondary => crt */
+       sm750_dual_normal,/* primary => panel head and secondary => crt */
 
-       sm750_dual_swap,/*      primary => crt head and secondary => panel */
+       sm750_dual_swap,/* primary => crt head and secondary => panel */
 };
 
 
-enum sm750_channel{
+enum sm750_channel {
        sm750_primary = 0,
        /* enum value equal to the register filed data */
        sm750_secondary = 1,
 };
 
-enum sm750_path{
+enum sm750_path {
        sm750_panel = 1,
        sm750_crt = 2,
        sm750_pnc = 3,/* panel and crt */
 };
 
-struct init_status{
+struct init_status {
        ushort powerMode;
        /* below three clocks are in unit of MHZ*/
        ushort chip_clk;
@@ -52,7 +52,7 @@ struct init_status{
        ushort resetMemory;
 };
 
-struct sm750_state{
+struct sm750_state {
        struct init_status initParm;
        enum sm750_pnltype pnltype;
        enum sm750_dataflow dataflow;
@@ -61,20 +61,20 @@ struct sm750_state{
        int yLCD;
 };
 
-/*     sm750_share stands for a presentation of two frame buffer
-       that use one sm750 adaptor, it is similar to the super class of lynx_share
-       in C++
-*/
+/* sm750_share stands for a presentation of two frame buffer
+   that use one sm750 adaptor, it is similar to the super class of lynx_share
+   in C++
+ */
 
-struct sm750_share{
+struct sm750_share {
        /* it's better to put lynx_share struct to the first place of sm750_share */
        struct lynx_share share;
        struct sm750_state state;
        int hwCursor;
-       /*      0: no hardware cursor
-               1: primary crtc hw cursor enabled,
-               2: secondary crtc hw cursor enabled
-               3: both ctrc hw cursor enabled
+       /* 0: no hardware cursor
+          1: primary crtc hw cursor enabled,
+          2: secondary crtc hw cursor enabled
+          3: both ctrc hw cursor enabled
        */
 };
 
@@ -95,7 +95,7 @@ int hw_sm750le_setBLANK(struct lynxfb_output*, int);
 void hw_sm750_crtc_clear(struct lynxfb_crtc*);
 void hw_sm750_output_clear(struct lynxfb_output*);
 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);
 
 #endif
diff --git a/drivers/staging/sm7xxfb/Kconfig b/drivers/staging/sm7xxfb/Kconfig
deleted file mode 100644 (file)
index e2922ae..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-config FB_SM7XX
-       tristate "Silicon Motion SM7XX framebuffer support"
-       depends on FB && PCI
-       select FB_CFB_FILLRECT
-       select FB_CFB_COPYAREA
-       select FB_CFB_IMAGEBLIT
-       help
-         Frame buffer driver for the Silicon Motion SM710, SM712, SM721
-         and SM722 chips.
-
-         This driver is also available as a module. The module will be
-         called sm7xxfb. If you want to compile it as a module, say M
-         here and read <file:Documentation/kbuild/modules.txt>.
diff --git a/drivers/staging/sm7xxfb/Makefile b/drivers/staging/sm7xxfb/Makefile
deleted file mode 100644 (file)
index 48f471c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-obj-$(CONFIG_FB_SM7XX) += sm7xxfb.o
diff --git a/drivers/staging/sm7xxfb/TODO b/drivers/staging/sm7xxfb/TODO
deleted file mode 100644 (file)
index 7cb0b24..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-TODO:
-- Dual head support
-- 2D acceleration support
-- use kernel coding style
-- refine the code and remove unused code
-- move it to drivers/video/fbdev/sm7xxfb.c
-
-Please send any patches to
-       Greg Kroah-Hartman <greg@kroah.com>
-       Sudip Mukherjee <sudipm.mukherjee@gmail.com>
-       Teddy Wang <teddy.wang@siliconmotion.com>
-       Sudip Mukherjee <sudip@vectorindia.org>
diff --git a/drivers/staging/sm7xxfb/sm7xx.h b/drivers/staging/sm7xxfb/sm7xx.h
deleted file mode 100644 (file)
index 4bed094..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Silicon Motion SM712 frame buffer device
- *
- * Copyright (C) 2006 Silicon Motion Technology Corp.
- * Authors:    Ge Wang, gewang@siliconmotion.com
- *             Boyod boyod.yang@siliconmotion.com.cn
- *
- * Copyright (C) 2009 Lemote, Inc.
- * Author: Wu Zhangjin, wuzhangjin@gmail.com
- *
- *  This file is subject to the terms and conditions of the GNU General Public
- *  License. See the file COPYING in the main directory of this archive for
- *  more details.
- */
-
-#define NR_PALETTE        256
-
-#define FB_ACCEL_SMI_LYNX 88
-
-#define SCREEN_X_RES      1024
-#define SCREEN_Y_RES      600
-#define SCREEN_BPP        16
-
-/*Assume SM712 graphics chip has 4MB VRAM */
-#define SM712_VIDEOMEMORYSIZE    0x00400000
-/*Assume SM722 graphics chip has 8MB VRAM */
-#define SM722_VIDEOMEMORYSIZE    0x00800000
-
-#define dac_reg        (0x3c8)
-#define dac_val        (0x3c9)
-
-extern void __iomem *smtc_regbaseaddress;
-#define smtc_mmiowb(dat, reg)  writeb(dat, smtc_regbaseaddress + reg)
-#define smtc_mmioww(dat, reg)  writew(dat, smtc_regbaseaddress + reg)
-#define smtc_mmiowl(dat, reg)  writel(dat, smtc_regbaseaddress + reg)
-
-#define smtc_mmiorb(reg)       readb(smtc_regbaseaddress + reg)
-#define smtc_mmiorw(reg)       readw(smtc_regbaseaddress + reg)
-#define smtc_mmiorl(reg)       readl(smtc_regbaseaddress + reg)
-
-#define SIZE_SR00_SR04      (0x04 - 0x00 + 1)
-#define SIZE_SR10_SR24      (0x24 - 0x10 + 1)
-#define SIZE_SR30_SR75      (0x75 - 0x30 + 1)
-#define SIZE_SR80_SR93      (0x93 - 0x80 + 1)
-#define SIZE_SRA0_SRAF      (0xAF - 0xA0 + 1)
-#define SIZE_GR00_GR08      (0x08 - 0x00 + 1)
-#define SIZE_AR00_AR14      (0x14 - 0x00 + 1)
-#define SIZE_CR00_CR18      (0x18 - 0x00 + 1)
-#define SIZE_CR30_CR4D      (0x4D - 0x30 + 1)
-#define SIZE_CR90_CRA7      (0xA7 - 0x90 + 1)
-#define SIZE_VPR               (0x6C + 1)
-#define SIZE_DPR               (0x44 + 1)
-
-static inline void smtc_crtcw(int reg, int val)
-{
-       smtc_mmiowb(reg, 0x3d4);
-       smtc_mmiowb(val, 0x3d5);
-}
-
-static inline unsigned int smtc_crtcr(int reg)
-{
-       smtc_mmiowb(reg, 0x3d4);
-       return smtc_mmiorb(0x3d5);
-}
-
-static inline void smtc_grphw(int reg, int val)
-{
-       smtc_mmiowb(reg, 0x3ce);
-       smtc_mmiowb(val, 0x3cf);
-}
-
-static inline unsigned int smtc_grphr(int reg)
-{
-       smtc_mmiowb(reg, 0x3ce);
-       return smtc_mmiorb(0x3cf);
-}
-
-static inline void smtc_attrw(int reg, int val)
-{
-       smtc_mmiorb(0x3da);
-       smtc_mmiowb(reg, 0x3c0);
-       smtc_mmiorb(0x3c1);
-       smtc_mmiowb(val, 0x3c0);
-}
-
-static inline void smtc_seqw(int reg, int val)
-{
-       smtc_mmiowb(reg, 0x3c4);
-       smtc_mmiowb(val, 0x3c5);
-}
-
-static inline unsigned int smtc_seqr(int reg)
-{
-       smtc_mmiowb(reg, 0x3c4);
-       return smtc_mmiorb(0x3c5);
-}
-
-/* The next structure holds all information relevant for a specific video mode.
- */
-
-struct modeinit {
-       int mmsizex;
-       int mmsizey;
-       int bpp;
-       int hz;
-       unsigned char init_misc;
-       unsigned char init_sr00_sr04[SIZE_SR00_SR04];
-       unsigned char init_sr10_sr24[SIZE_SR10_SR24];
-       unsigned char init_sr30_sr75[SIZE_SR30_SR75];
-       unsigned char init_sr80_sr93[SIZE_SR80_SR93];
-       unsigned char init_sra0_sraf[SIZE_SRA0_SRAF];
-       unsigned char init_gr00_gr08[SIZE_GR00_GR08];
-       unsigned char init_ar00_ar14[SIZE_AR00_AR14];
-       unsigned char init_cr00_cr18[SIZE_CR00_CR18];
-       unsigned char init_cr30_cr4d[SIZE_CR30_CR4D];
-       unsigned char init_cr90_cra7[SIZE_CR90_CRA7];
-};
diff --git a/drivers/staging/sm7xxfb/sm7xxfb.c b/drivers/staging/sm7xxfb/sm7xxfb.c
deleted file mode 100644 (file)
index 2ff4fe7..0000000
+++ /dev/null
@@ -1,1686 +0,0 @@
-/*
- * Silicon Motion SM7XX frame buffer device
- *
- * Copyright (C) 2006 Silicon Motion Technology Corp.
- * Authors:  Ge Wang, gewang@siliconmotion.com
- *          Boyod boyod.yang@siliconmotion.com.cn
- *
- * Copyright (C) 2009 Lemote, Inc.
- * Author:   Wu Zhangjin, wuzhangjin@gmail.com
- *
- * Copyright (C) 2011 Igalia, S.L.
- * Author:   Javier M. Mellid <jmunhoz@igalia.com>
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file COPYING in the main directory of this archive for
- * more details.
- *
- * Framebuffer driver for Silicon Motion SM710, SM712, SM721 and SM722 chips
- */
-
-#include <linux/io.h>
-#include <linux/fb.h>
-#include <linux/pci.h>
-#include <linux/init.h>
-#include <linux/slab.h>
-#include <linux/uaccess.h>
-#include <linux/module.h>
-#include <linux/console.h>
-#include <linux/screen_info.h>
-
-#ifdef CONFIG_PM
-#include <linux/pm.h>
-#endif
-
-#include "sm7xx.h"
-
-/*
-* Private structure
-*/
-struct smtcfb_info {
-       struct pci_dev *pdev;
-       struct fb_info *fb;
-       u16 chip_id;
-       u8  chip_rev_id;
-
-       void __iomem *lfb;      /* linear frame buffer */
-       void __iomem *dp_regs;  /* drawing processor control regs */
-       void __iomem *vp_regs;  /* video processor control regs */
-       void __iomem *cp_regs;  /* capture processor control regs */
-       void __iomem *mmio;     /* memory map IO port */
-
-       u_int width;
-       u_int height;
-       u_int hz;
-
-       u32 colreg[17];
-};
-
-void __iomem *smtc_regbaseaddress;     /* Memory Map IO starting address */
-
-static struct fb_var_screeninfo smtcfb_var = {
-       .xres           = 1024,
-       .yres           = 600,
-       .xres_virtual   = 1024,
-       .yres_virtual   = 600,
-       .bits_per_pixel = 16,
-       .red            = {16, 8, 0},
-       .green          = {8, 8, 0},
-       .blue           = {0, 8, 0},
-       .activate       = FB_ACTIVATE_NOW,
-       .height         = -1,
-       .width          = -1,
-       .vmode          = FB_VMODE_NONINTERLACED,
-       .nonstd         = 0,
-       .accel_flags    = FB_ACCELF_TEXT,
-};
-
-static struct fb_fix_screeninfo smtcfb_fix = {
-       .id             = "smXXXfb",
-       .type           = FB_TYPE_PACKED_PIXELS,
-       .visual         = FB_VISUAL_TRUECOLOR,
-       .line_length    = 800 * 3,
-       .accel          = FB_ACCEL_SMI_LYNX,
-       .type_aux       = 0,
-       .xpanstep       = 0,
-       .ypanstep       = 0,
-       .ywrapstep      = 0,
-};
-
-struct vesa_mode {
-       char index[6];
-       u16  lfb_width;
-       u16  lfb_height;
-       u16  lfb_depth;
-};
-
-static const struct vesa_mode vesa_mode_table[] = {
-       {"0x301", 640,  480,  8},
-       {"0x303", 800,  600,  8},
-       {"0x305", 1024, 768,  8},
-       {"0x307", 1280, 1024, 8},
-
-       {"0x311", 640,  480,  16},
-       {"0x314", 800,  600,  16},
-       {"0x317", 1024, 768,  16},
-       {"0x31A", 1280, 1024, 16},
-
-       {"0x312", 640,  480,  24},
-       {"0x315", 800,  600,  24},
-       {"0x318", 1024, 768,  24},
-       {"0x31B", 1280, 1024, 24},
-};
-
-/**********************************************************************
-                        SM712 Mode table.
- **********************************************************************/
-static const struct modeinit vgamode[] = {
-       {
-               /*  mode#0: 640 x 480  16Bpp  60Hz */
-               640, 480, 16, 60,
-               /*  Init_MISC */
-               0xE3,
-               {       /*  Init_SR0_SR4 */
-                       0x03, 0x01, 0x0F, 0x00, 0x0E,
-               },
-               {       /*  Init_SR10_SR24 */
-                       0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
-                       0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0xC4, 0x30, 0x02, 0x01, 0x01,
-               },
-               {       /*  Init_SR30_SR75 */
-                       0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,
-                       0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,
-                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
-                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,
-                       0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,
-                       0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,
-                       0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
-                       0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,
-                       0x00, 0x45, 0x30, 0x30, 0x40, 0x30,
-               },
-               {       /*  Init_SR80_SR93 */
-                       0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,
-                       0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,
-                       0x00, 0x00, 0x00, 0x00,
-               },
-               {       /*  Init_SRA0_SRAF */
-                       0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
-                       0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,
-               },
-               {       /*  Init_GR00_GR08 */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
-                       0xFF,
-               },
-               {       /*  Init_AR00_AR14 */
-                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
-                       0x41, 0x00, 0x0F, 0x00, 0x00,
-               },
-               {       /*  Init_CR00_CR18 */
-                       0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,
-                       0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,
-                       0xFF,
-               },
-               {       /*  Init_CR30_CR4D */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,
-                       0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,
-                       0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,
-                       0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,
-               },
-               {       /*  Init_CR90_CRA7 */
-                       0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,
-                       0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,
-                       0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
-               },
-       },
-       {
-               /*  mode#1: 640 x 480  24Bpp  60Hz */
-               640, 480, 24, 60,
-               /*  Init_MISC */
-               0xE3,
-               {       /*  Init_SR0_SR4 */
-                       0x03, 0x01, 0x0F, 0x00, 0x0E,
-               },
-               {       /*  Init_SR10_SR24 */
-                       0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
-                       0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0xC4, 0x30, 0x02, 0x01, 0x01,
-               },
-               {       /*  Init_SR30_SR75 */
-                       0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,
-                       0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,
-                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
-                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,
-                       0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,
-                       0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,
-                       0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
-                       0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,
-                       0x00, 0x45, 0x30, 0x30, 0x40, 0x30,
-               },
-               {       /*  Init_SR80_SR93 */
-                       0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,
-                       0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,
-                       0x00, 0x00, 0x00, 0x00,
-               },
-               {       /*  Init_SRA0_SRAF */
-                       0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
-                       0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,
-               },
-               {       /*  Init_GR00_GR08 */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
-                       0xFF,
-               },
-               {       /*  Init_AR00_AR14 */
-                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
-                       0x41, 0x00, 0x0F, 0x00, 0x00,
-               },
-               {       /*  Init_CR00_CR18 */
-                       0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,
-                       0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,
-                       0xFF,
-               },
-               {       /*  Init_CR30_CR4D */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,
-                       0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,
-                       0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,
-                       0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,
-               },
-               {       /*  Init_CR90_CRA7 */
-                       0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,
-                       0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,
-                       0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
-               },
-       },
-       {
-               /*  mode#0: 640 x 480  32Bpp  60Hz */
-               640, 480, 32, 60,
-               /*  Init_MISC */
-               0xE3,
-               {       /*  Init_SR0_SR4 */
-                       0x03, 0x01, 0x0F, 0x00, 0x0E,
-               },
-               {       /*  Init_SR10_SR24 */
-                       0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
-                       0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0xC4, 0x30, 0x02, 0x01, 0x01,
-               },
-               {       /*  Init_SR30_SR75 */
-                       0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,
-                       0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,
-                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
-                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,
-                       0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,
-                       0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,
-                       0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
-                       0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,
-                       0x00, 0x45, 0x30, 0x30, 0x40, 0x30,
-               },
-               {       /*  Init_SR80_SR93 */
-                       0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,
-                       0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,
-                       0x00, 0x00, 0x00, 0x00,
-               },
-               {       /*  Init_SRA0_SRAF */
-                       0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
-                       0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,
-               },
-               {       /*  Init_GR00_GR08 */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
-                       0xFF,
-               },
-               {       /*  Init_AR00_AR14 */
-                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
-                       0x41, 0x00, 0x0F, 0x00, 0x00,
-               },
-               {       /*  Init_CR00_CR18 */
-                       0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,
-                       0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,
-                       0xFF,
-               },
-               {       /*  Init_CR30_CR4D */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,
-                       0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,
-                       0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,
-                       0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,
-               },
-               {       /*  Init_CR90_CRA7 */
-                       0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,
-                       0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,
-                       0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
-               },
-       },
-
-       {       /*  mode#2: 800 x 600  16Bpp  60Hz */
-               800, 600, 16, 60,
-               /*  Init_MISC */
-               0x2B,
-               {       /*  Init_SR0_SR4 */
-                       0x03, 0x01, 0x0F, 0x03, 0x0E,
-               },
-               {       /*  Init_SR10_SR24 */
-                       0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
-                       0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0xC4, 0x30, 0x02, 0x01, 0x01,
-               },
-               {       /*  Init_SR30_SR75 */
-                       0x34, 0x03, 0x20, 0x09, 0xC0, 0x24, 0x24, 0x24,
-                       0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x03, 0xFF,
-                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x38, 0x00, 0xFC,
-                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x24, 0x24, 0x24,
-                       0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,
-                       0x04, 0x55, 0x59, 0x24, 0x24, 0x00, 0x00, 0x24,
-                       0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
-                       0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,
-                       0x02, 0x45, 0x30, 0x35, 0x40, 0x20,
-               },
-               {       /*  Init_SR80_SR93 */
-                       0x00, 0x00, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x24,
-                       0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x24, 0x24,
-                       0x00, 0x00, 0x00, 0x00,
-               },
-               {       /*  Init_SRA0_SRAF */
-                       0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
-                       0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,
-               },
-               {       /*  Init_GR00_GR08 */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
-                       0xFF,
-               },
-               {       /*  Init_AR00_AR14 */
-                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
-                       0x41, 0x00, 0x0F, 0x00, 0x00,
-               },
-               {       /*  Init_CR00_CR18 */
-                       0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,
-                       0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,
-                       0xFF,
-               },
-               {       /*  Init_CR30_CR4D */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,
-                       0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,
-                       0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,
-                       0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,
-               },
-               {       /*  Init_CR90_CRA7 */
-                       0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,
-                       0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,
-                       0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,
-               },
-       },
-       {       /*  mode#3: 800 x 600  24Bpp  60Hz */
-               800, 600, 24, 60,
-               0x2B,
-               {       /*  Init_SR0_SR4 */
-                       0x03, 0x01, 0x0F, 0x03, 0x0E,
-               },
-               {       /*  Init_SR10_SR24 */
-                       0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
-                       0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0xC4, 0x30, 0x02, 0x01, 0x01,
-               },
-               {       /*  Init_SR30_SR75 */
-                       0x36, 0x03, 0x20, 0x09, 0xC0, 0x36, 0x36, 0x36,
-                       0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x03, 0xFF,
-                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
-                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x36, 0x36, 0x36,
-                       0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,
-                       0x04, 0x55, 0x59, 0x36, 0x36, 0x00, 0x00, 0x36,
-                       0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
-                       0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,
-                       0x02, 0x45, 0x30, 0x30, 0x40, 0x20,
-               },
-               {       /*  Init_SR80_SR93 */
-                       0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x36,
-                       0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x36, 0x36,
-                       0x00, 0x00, 0x00, 0x00,
-               },
-               {       /*  Init_SRA0_SRAF */
-                       0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
-                       0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,
-               },
-               {       /*  Init_GR00_GR08 */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
-                       0xFF,
-               },
-               {       /*  Init_AR00_AR14 */
-                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
-                       0x41, 0x00, 0x0F, 0x00, 0x00,
-               },
-               {       /*  Init_CR00_CR18 */
-                       0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,
-                       0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,
-                       0xFF,
-               },
-               {       /*  Init_CR30_CR4D */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,
-                       0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,
-                       0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,
-                       0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,
-               },
-               {       /*  Init_CR90_CRA7 */
-                       0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,
-                       0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,
-                       0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,
-               },
-       },
-       {       /*  mode#7: 800 x 600  32Bpp  60Hz */
-               800, 600, 32, 60,
-               /*  Init_MISC */
-               0x2B,
-               {       /*  Init_SR0_SR4 */
-                       0x03, 0x01, 0x0F, 0x03, 0x0E,
-               },
-               {       /*  Init_SR10_SR24 */
-                       0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
-                       0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0xC4, 0x30, 0x02, 0x01, 0x01,
-               },
-               {       /*  Init_SR30_SR75 */
-                       0x34, 0x03, 0x20, 0x09, 0xC0, 0x24, 0x24, 0x24,
-                       0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x03, 0xFF,
-                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x38, 0x00, 0xFC,
-                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x24, 0x24, 0x24,
-                       0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,
-                       0x04, 0x55, 0x59, 0x24, 0x24, 0x00, 0x00, 0x24,
-                       0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
-                       0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,
-                       0x02, 0x45, 0x30, 0x35, 0x40, 0x20,
-               },
-               {       /*  Init_SR80_SR93 */
-                       0x00, 0x00, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x24,
-                       0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x24, 0x24,
-                       0x00, 0x00, 0x00, 0x00,
-               },
-               {       /*  Init_SRA0_SRAF */
-                       0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
-                       0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,
-               },
-               {       /*  Init_GR00_GR08 */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
-                       0xFF,
-               },
-               {       /*  Init_AR00_AR14 */
-                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
-                       0x41, 0x00, 0x0F, 0x00, 0x00,
-               },
-               {       /*  Init_CR00_CR18 */
-                       0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,
-                       0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,
-                       0xFF,
-               },
-               {       /*  Init_CR30_CR4D */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,
-                       0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,
-                       0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,
-                       0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,
-               },
-               {       /*  Init_CR90_CRA7 */
-                       0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,
-                       0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,
-                       0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,
-               },
-       },
-       /* We use 1024x768 table to light 1024x600 panel for lemote */
-       {       /*  mode#4: 1024 x 600  16Bpp  60Hz  */
-               1024, 600, 16, 60,
-               /*  Init_MISC */
-               0xEB,
-               {       /*  Init_SR0_SR4 */
-                       0x03, 0x01, 0x0F, 0x00, 0x0E,
-               },
-               {       /*  Init_SR10_SR24 */
-                       0xC8, 0x40, 0x14, 0x60, 0x00, 0x0A, 0x17, 0x20,
-                       0x51, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0xC4, 0x30, 0x02, 0x00, 0x01,
-               },
-               {       /*  Init_SR30_SR75 */
-                       0x22, 0x03, 0x24, 0x09, 0xC0, 0x22, 0x22, 0x22,
-                       0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x03, 0xFF,
-                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
-                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x22, 0x22, 0x22,
-                       0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
-                       0x00, 0x60, 0x59, 0x22, 0x22, 0x00, 0x00, 0x22,
-                       0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
-                       0x50, 0x03, 0x16, 0x02, 0x0D, 0x82, 0x09, 0x02,
-                       0x04, 0x45, 0x3F, 0x30, 0x40, 0x20,
-               },
-               {       /*  Init_SR80_SR93 */
-                       0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
-                       0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
-                       0x00, 0x00, 0x00, 0x00,
-               },
-               {       /*  Init_SRA0_SRAF */
-                       0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
-                       0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
-               },
-               {       /*  Init_GR00_GR08 */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
-                       0xFF,
-               },
-               {       /*  Init_AR00_AR14 */
-                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
-                       0x41, 0x00, 0x0F, 0x00, 0x00,
-               },
-               {       /*  Init_CR00_CR18 */
-                       0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
-                       0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
-                       0xFF,
-               },
-               {       /*  Init_CR30_CR4D */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
-                       0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
-                       0xA3, 0x7F, 0x00, 0x82, 0x0b, 0x6f, 0x57, 0x00,
-                       0x5c, 0x0f, 0xE0, 0xe0, 0x7F, 0x57,
-               },
-               {       /*  Init_CR90_CRA7 */
-                       0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
-                       0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
-                       0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
-               },
-       },
-       {       /*  mode#5: 1024 x 768  24Bpp  60Hz */
-               1024, 768, 24, 60,
-               /*  Init_MISC */
-               0xEB,
-               {       /*  Init_SR0_SR4 */
-                       0x03, 0x01, 0x0F, 0x03, 0x0E,
-               },
-               {       /*  Init_SR10_SR24 */
-                       0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
-                       0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0xC4, 0x30, 0x02, 0x01, 0x01,
-               },
-               {       /*  Init_SR30_SR75 */
-                       0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
-                       0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
-                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
-                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
-                       0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
-                       0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
-                       0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
-                       0x50, 0x03, 0x74, 0x14, 0x3B, 0x0D, 0x09, 0x02,
-                       0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
-               },
-               {       /*  Init_SR80_SR93 */
-                       0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
-                       0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
-                       0x00, 0x00, 0x00, 0x00,
-               },
-               {       /*  Init_SRA0_SRAF */
-                       0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
-                       0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
-               },
-               {       /*  Init_GR00_GR08 */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
-                       0xFF,
-               },
-               {       /*  Init_AR00_AR14 */
-                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
-                       0x41, 0x00, 0x0F, 0x00, 0x00,
-               },
-               {       /*  Init_CR00_CR18 */
-                       0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
-                       0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
-                       0xFF,
-               },
-               {       /*  Init_CR30_CR4D */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
-                       0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
-                       0xA3, 0x7F, 0x00, 0x86, 0x15, 0x24, 0xFF, 0x00,
-                       0x01, 0x07, 0xE5, 0x20, 0x7F, 0xFF,
-               },
-               {       /*  Init_CR90_CRA7 */
-                       0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
-                       0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
-                       0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
-               },
-       },
-       {       /*  mode#4: 1024 x 768  32Bpp  60Hz */
-               1024, 768, 32, 60,
-               /*  Init_MISC */
-               0xEB,
-               {       /*  Init_SR0_SR4 */
-                       0x03, 0x01, 0x0F, 0x03, 0x0E,
-               },
-               {       /*  Init_SR10_SR24 */
-                       0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
-                       0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0xC4, 0x32, 0x02, 0x01, 0x01,
-               },
-               {       /*  Init_SR30_SR75 */
-                       0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
-                       0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
-                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
-                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
-                       0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
-                       0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
-                       0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
-                       0x50, 0x03, 0x74, 0x14, 0x3B, 0x0D, 0x09, 0x02,
-                       0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
-               },
-               {       /*  Init_SR80_SR93 */
-                       0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
-                       0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
-                       0x00, 0x00, 0x00, 0x00,
-               },
-               {       /*  Init_SRA0_SRAF */
-                       0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
-                       0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
-               },
-               {       /*  Init_GR00_GR08 */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
-                       0xFF,
-               },
-               {       /*  Init_AR00_AR14 */
-                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
-                       0x41, 0x00, 0x0F, 0x00, 0x00,
-               },
-               {       /*  Init_CR00_CR18 */
-                       0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
-                       0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
-                       0xFF,
-               },
-               {       /*  Init_CR30_CR4D */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
-                       0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
-                       0xA3, 0x7F, 0x00, 0x86, 0x15, 0x24, 0xFF, 0x00,
-                       0x01, 0x07, 0xE5, 0x20, 0x7F, 0xFF,
-               },
-               {       /*  Init_CR90_CRA7 */
-                       0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
-                       0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
-                       0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
-               },
-       },
-       {       /*  mode#6: 320 x 240  16Bpp  60Hz */
-               320, 240, 16, 60,
-               /*  Init_MISC */
-               0xEB,
-               {       /*  Init_SR0_SR4 */
-                       0x03, 0x01, 0x0F, 0x03, 0x0E,
-               },
-               {       /*  Init_SR10_SR24 */
-                       0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
-                       0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0xC4, 0x32, 0x02, 0x01, 0x01,
-               },
-               {       /*  Init_SR30_SR75 */
-                       0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
-                       0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
-                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
-                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
-                       0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
-                       0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
-                       0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
-                       0x50, 0x03, 0x74, 0x14, 0x08, 0x43, 0x08, 0x43,
-                       0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
-               },
-               {       /*  Init_SR80_SR93 */
-                       0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
-                       0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
-                       0x00, 0x00, 0x00, 0x00,
-               },
-               {       /*  Init_SRA0_SRAF */
-                       0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
-                       0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
-               },
-               {       /*  Init_GR00_GR08 */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
-                       0xFF,
-               },
-               {       /*  Init_AR00_AR14 */
-                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
-                       0x41, 0x00, 0x0F, 0x00, 0x00,
-               },
-               {       /*  Init_CR00_CR18 */
-                       0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
-                       0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
-                       0xFF,
-               },
-               {       /*  Init_CR30_CR4D */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
-                       0x00, 0x00, 0x30, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
-                       0x2E, 0x27, 0x00, 0x2b, 0x0c, 0x0F, 0xEF, 0x00,
-                       0xFe, 0x0f, 0x01, 0xC0, 0x27, 0xEF,
-               },
-               {       /*  Init_CR90_CRA7 */
-                       0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
-                       0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
-                       0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
-               },
-       },
-
-       {       /*  mode#8: 320 x 240  32Bpp  60Hz */
-               320, 240, 32, 60,
-               /*  Init_MISC */
-               0xEB,
-               {       /*  Init_SR0_SR4 */
-                       0x03, 0x01, 0x0F, 0x03, 0x0E,
-               },
-               {       /*  Init_SR10_SR24 */
-                       0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
-                       0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0xC4, 0x32, 0x02, 0x01, 0x01,
-               },
-               {       /*  Init_SR30_SR75 */
-                       0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
-                       0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
-                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
-                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
-                       0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
-                       0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
-                       0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
-                       0x50, 0x03, 0x74, 0x14, 0x08, 0x43, 0x08, 0x43,
-                       0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
-               },
-               {       /*  Init_SR80_SR93 */
-                       0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
-                       0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
-                       0x00, 0x00, 0x00, 0x00,
-               },
-               {       /*  Init_SRA0_SRAF */
-                       0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
-                       0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
-               },
-               {       /*  Init_GR00_GR08 */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
-                       0xFF,
-               },
-               {       /*  Init_AR00_AR14 */
-                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
-                       0x41, 0x00, 0x0F, 0x00, 0x00,
-               },
-               {       /*  Init_CR00_CR18 */
-                       0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
-                       0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                       0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
-                       0xFF,
-               },
-               {       /*  Init_CR30_CR4D */
-                       0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
-                       0x00, 0x00, 0x30, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
-                       0x2E, 0x27, 0x00, 0x2b, 0x0c, 0x0F, 0xEF, 0x00,
-                       0xFe, 0x0f, 0x01, 0xC0, 0x27, 0xEF,
-               },
-               {       /*  Init_CR90_CRA7 */
-                       0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
-                       0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
-                       0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
-               },
-       },
-};
-
-static struct screen_info smtc_scr_info;
-
-static char *mode_option;
-
-/* process command line options, get vga parameter */
-static void __init sm7xx_vga_setup(char *options)
-{
-       int i;
-
-       if (!options || !*options)
-               return;
-
-       smtc_scr_info.lfb_width = 0;
-       smtc_scr_info.lfb_height = 0;
-       smtc_scr_info.lfb_depth = 0;
-
-       pr_debug("sm7xx_vga_setup = %s\n", options);
-
-       for (i = 0; i < ARRAY_SIZE(vesa_mode_table); i++) {
-               if (strstr(options, vesa_mode_table[i].index)) {
-                       smtc_scr_info.lfb_width  = vesa_mode_table[i].lfb_width;
-                       smtc_scr_info.lfb_height =
-                                               vesa_mode_table[i].lfb_height;
-                       smtc_scr_info.lfb_depth  = vesa_mode_table[i].lfb_depth;
-                       return;
-               }
-       }
-}
-
-static void sm712_setpalette(int regno, unsigned red, unsigned green,
-                            unsigned blue, struct fb_info *info)
-{
-       /* set bit 5:4 = 01 (write LCD RAM only) */
-       smtc_seqw(0x66, (smtc_seqr(0x66) & 0xC3) | 0x10);
-
-       smtc_mmiowb(regno, dac_reg);
-       smtc_mmiowb(red >> 10, dac_val);
-       smtc_mmiowb(green >> 10, dac_val);
-       smtc_mmiowb(blue >> 10, dac_val);
-}
-
-/* chan_to_field
- *
- * convert a colour value into a field position
- *
- * from pxafb.c
- */
-
-static inline unsigned int chan_to_field(unsigned int chan,
-                                        struct fb_bitfield *bf)
-{
-       chan &= 0xffff;
-       chan >>= 16 - bf->length;
-       return chan << bf->offset;
-}
-
-static int smtc_blank(int blank_mode, struct fb_info *info)
-{
-       /* clear DPMS setting */
-       switch (blank_mode) {
-       case FB_BLANK_UNBLANK:
-               /* Screen On: HSync: On, VSync : On */
-               smtc_seqw(0x01, (smtc_seqr(0x01) & (~0x20)));
-               smtc_seqw(0x6a, 0x16);
-               smtc_seqw(0x6b, 0x02);
-               smtc_seqw(0x21, (smtc_seqr(0x21) & 0x77));
-               smtc_seqw(0x22, (smtc_seqr(0x22) & (~0x30)));
-               smtc_seqw(0x23, (smtc_seqr(0x23) & (~0xc0)));
-               smtc_seqw(0x24, (smtc_seqr(0x24) | 0x01));
-               smtc_seqw(0x31, (smtc_seqr(0x31) | 0x03));
-               break;
-       case FB_BLANK_NORMAL:
-               /* Screen Off: HSync: On, VSync : On   Soft blank */
-               smtc_seqw(0x01, (smtc_seqr(0x01) & (~0x20)));
-               smtc_seqw(0x6a, 0x16);
-               smtc_seqw(0x6b, 0x02);
-               smtc_seqw(0x22, (smtc_seqr(0x22) & (~0x30)));
-               smtc_seqw(0x23, (smtc_seqr(0x23) & (~0xc0)));
-               smtc_seqw(0x24, (smtc_seqr(0x24) | 0x01));
-               smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00));
-               break;
-       case FB_BLANK_VSYNC_SUSPEND:
-               /* Screen On: HSync: On, VSync : Off */
-               smtc_seqw(0x01, (smtc_seqr(0x01) | 0x20));
-               smtc_seqw(0x20, (smtc_seqr(0x20) & (~0xB0)));
-               smtc_seqw(0x6a, 0x0c);
-               smtc_seqw(0x6b, 0x02);
-               smtc_seqw(0x21, (smtc_seqr(0x21) | 0x88));
-               smtc_seqw(0x22, ((smtc_seqr(0x22) & (~0x30)) | 0x20));
-               smtc_seqw(0x23, ((smtc_seqr(0x23) & (~0xc0)) | 0x20));
-               smtc_seqw(0x24, (smtc_seqr(0x24) & (~0x01)));
-               smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00));
-               smtc_seqw(0x34, (smtc_seqr(0x34) | 0x80));
-               break;
-       case FB_BLANK_HSYNC_SUSPEND:
-               /* Screen On: HSync: Off, VSync : On */
-               smtc_seqw(0x01, (smtc_seqr(0x01) | 0x20));
-               smtc_seqw(0x20, (smtc_seqr(0x20) & (~0xB0)));
-               smtc_seqw(0x6a, 0x0c);
-               smtc_seqw(0x6b, 0x02);
-               smtc_seqw(0x21, (smtc_seqr(0x21) | 0x88));
-               smtc_seqw(0x22, ((smtc_seqr(0x22) & (~0x30)) | 0x10));
-               smtc_seqw(0x23, ((smtc_seqr(0x23) & (~0xc0)) | 0xD8));
-               smtc_seqw(0x24, (smtc_seqr(0x24) & (~0x01)));
-               smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00));
-               smtc_seqw(0x34, (smtc_seqr(0x34) | 0x80));
-               break;
-       case FB_BLANK_POWERDOWN:
-               /* Screen On: HSync: Off, VSync : Off */
-               smtc_seqw(0x01, (smtc_seqr(0x01) | 0x20));
-               smtc_seqw(0x20, (smtc_seqr(0x20) & (~0xB0)));
-               smtc_seqw(0x6a, 0x0c);
-               smtc_seqw(0x6b, 0x02);
-               smtc_seqw(0x21, (smtc_seqr(0x21) | 0x88));
-               smtc_seqw(0x22, ((smtc_seqr(0x22) & (~0x30)) | 0x30));
-               smtc_seqw(0x23, ((smtc_seqr(0x23) & (~0xc0)) | 0xD8));
-               smtc_seqw(0x24, (smtc_seqr(0x24) & (~0x01)));
-               smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00));
-               smtc_seqw(0x34, (smtc_seqr(0x34) | 0x80));
-               break;
-       default:
-               return -EINVAL;
-       }
-
-       return 0;
-}
-
-static int smtc_setcolreg(unsigned regno, unsigned red, unsigned green,
-                         unsigned blue, unsigned trans, struct fb_info *info)
-{
-       struct smtcfb_info *sfb;
-       u32 val;
-
-       sfb = info->par;
-
-       if (regno > 255)
-               return 1;
-
-       switch (sfb->fb->fix.visual) {
-       case FB_VISUAL_DIRECTCOLOR:
-       case FB_VISUAL_TRUECOLOR:
-               /*
-                * 16/32 bit true-colour, use pseudo-palette for 16 base color
-                */
-               if (regno >= 16)
-                       break;
-               if (sfb->fb->var.bits_per_pixel == 16) {
-                       u32 *pal = sfb->fb->pseudo_palette;
-
-                       val = chan_to_field(red, &sfb->fb->var.red);
-                       val |= chan_to_field(green, &sfb->fb->var.green);
-                       val |= chan_to_field(blue, &sfb->fb->var.blue);
-#ifdef __BIG_ENDIAN
-                       pal[regno] = ((red & 0xf800) >> 8) |
-                                    ((green & 0xe000) >> 13) |
-                                    ((green & 0x1c00) << 3) |
-                                    ((blue & 0xf800) >> 3);
-#else
-                       pal[regno] = val;
-#endif
-               } else {
-                       u32 *pal = sfb->fb->pseudo_palette;
-
-                       val = chan_to_field(red, &sfb->fb->var.red);
-                       val |= chan_to_field(green, &sfb->fb->var.green);
-                       val |= chan_to_field(blue, &sfb->fb->var.blue);
-#ifdef __BIG_ENDIAN
-                       val = (val & 0xff00ff00 >> 8) |
-                             (val & 0x00ff00ff << 8);
-#endif
-                       pal[regno] = val;
-               }
-               break;
-
-       case FB_VISUAL_PSEUDOCOLOR:
-               /* color depth 8 bit */
-               sm712_setpalette(regno, red, green, blue, info);
-               break;
-
-       default:
-               return 1;       /* unknown type */
-       }
-
-       return 0;
-}
-
-#ifdef __BIG_ENDIAN
-static ssize_t smtcfb_read(struct fb_info *info, char __user *buf,
-                          size_t count, loff_t *ppos)
-{
-       unsigned long p = *ppos;
-
-       u32 *buffer, *dst;
-       u32 __iomem *src;
-       int c, i, cnt = 0, err = 0;
-       unsigned long total_size;
-
-       if (!info || !info->screen_base)
-               return -ENODEV;
-
-       if (info->state != FBINFO_STATE_RUNNING)
-               return -EPERM;
-
-       total_size = info->screen_size;
-
-       if (total_size == 0)
-               total_size = info->fix.smem_len;
-
-       if (p >= total_size)
-               return 0;
-
-       if (count >= total_size)
-               count = total_size;
-
-       if (count + p > total_size)
-               count = total_size - p;
-
-       buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
-       if (!buffer)
-               return -ENOMEM;
-
-       src = (u32 __iomem *)(info->screen_base + p);
-
-       if (info->fbops->fb_sync)
-               info->fbops->fb_sync(info);
-
-       while (count) {
-               c = (count > PAGE_SIZE) ? PAGE_SIZE : count;
-               dst = buffer;
-               for (i = c >> 2; i--;) {
-                       *dst = fb_readl(src++);
-                       *dst = (*dst & 0xff00ff00 >> 8) |
-                              (*dst & 0x00ff00ff << 8);
-                       dst++;
-               }
-               if (c & 3) {
-                       u8 *dst8 = (u8 *)dst;
-                       u8 __iomem *src8 = (u8 __iomem *)src;
-
-                       for (i = c & 3; i--;) {
-                               if (i & 1) {
-                                       *dst8++ = fb_readb(++src8);
-                               } else {
-                                       *dst8++ = fb_readb(--src8);
-                                       src8 += 2;
-                               }
-                       }
-                       src = (u32 __iomem *)src8;
-               }
-
-               if (copy_to_user(buf, buffer, c)) {
-                       err = -EFAULT;
-                       break;
-               }
-               *ppos += c;
-               buf += c;
-               cnt += c;
-               count -= c;
-       }
-
-       kfree(buffer);
-
-       return (err) ? err : cnt;
-}
-
-static ssize_t smtcfb_write(struct fb_info *info, const char __user *buf,
-                           size_t count, loff_t *ppos)
-{
-       unsigned long p = *ppos;
-
-       u32 *buffer, *src;
-       u32 __iomem *dst;
-       int c, i, cnt = 0, err = 0;
-       unsigned long total_size;
-
-       if (!info || !info->screen_base)
-               return -ENODEV;
-
-       if (info->state != FBINFO_STATE_RUNNING)
-               return -EPERM;
-
-       total_size = info->screen_size;
-
-       if (total_size == 0)
-               total_size = info->fix.smem_len;
-
-       if (p > total_size)
-               return -EFBIG;
-
-       if (count > total_size) {
-               err = -EFBIG;
-               count = total_size;
-       }
-
-       if (count + p > total_size) {
-               if (!err)
-                       err = -ENOSPC;
-
-               count = total_size - p;
-       }
-
-       buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
-       if (!buffer)
-               return -ENOMEM;
-
-       dst = (u32 __iomem *)(info->screen_base + p);
-
-       if (info->fbops->fb_sync)
-               info->fbops->fb_sync(info);
-
-       while (count) {
-               c = (count > PAGE_SIZE) ? PAGE_SIZE : count;
-               src = buffer;
-
-               if (copy_from_user(src, buf, c)) {
-                       err = -EFAULT;
-                       break;
-               }
-
-               for (i = c >> 2; i--;) {
-                       fb_writel((*src & 0xff00ff00 >> 8) |
-                                 (*src & 0x00ff00ff << 8), dst++);
-                       src++;
-               }
-               if (c & 3) {
-                       u8 *src8 = (u8 *)src;
-                       u8 __iomem *dst8 = (u8 __iomem *)dst;
-
-                       for (i = c & 3; i--;) {
-                               if (i & 1) {
-                                       fb_writeb(*src8++, ++dst8);
-                               } else {
-                                       fb_writeb(*src8++, --dst8);
-                                       dst8 += 2;
-                               }
-                       }
-                       dst = (u32 __iomem *)dst8;
-               }
-
-               *ppos += c;
-               buf += c;
-               cnt += c;
-               count -= c;
-       }
-
-       kfree(buffer);
-
-       return (cnt) ? cnt : err;
-}
-#endif /* ! __BIG_ENDIAN */
-
-static void sm7xx_set_timing(struct smtcfb_info *sfb)
-{
-       int i = 0, j = 0;
-       u32 m_nscreenstride;
-
-       dev_dbg(&sfb->pdev->dev,
-               "sfb->width=%d sfb->height=%d sfb->fb->var.bits_per_pixel=%d sfb->hz=%d\n",
-               sfb->width, sfb->height, sfb->fb->var.bits_per_pixel, sfb->hz);
-
-       for (j = 0; j < ARRAY_SIZE(vgamode); j++) {
-               if (vgamode[j].mmsizex != sfb->width ||
-                   vgamode[j].mmsizey != sfb->height ||
-                   vgamode[j].bpp != sfb->fb->var.bits_per_pixel ||
-                   vgamode[j].hz != sfb->hz)
-                       continue;
-
-               dev_dbg(&sfb->pdev->dev,
-                       "vgamode[j].mmsizex=%d vgamode[j].mmSizeY=%d vgamode[j].bpp=%d vgamode[j].hz=%d\n",
-                       vgamode[j].mmsizex, vgamode[j].mmsizey,
-                       vgamode[j].bpp, vgamode[j].hz);
-
-               dev_dbg(&sfb->pdev->dev, "vgamode index=%d\n", j);
-
-               smtc_mmiowb(0x0, 0x3c6);
-
-               smtc_seqw(0, 0x1);
-
-               smtc_mmiowb(vgamode[j].init_misc, 0x3c2);
-
-               /* init SEQ register SR00 - SR04 */
-               for (i = 0; i < SIZE_SR00_SR04; i++)
-                       smtc_seqw(i, vgamode[j].init_sr00_sr04[i]);
-
-               /* init SEQ register SR10 - SR24 */
-               for (i = 0; i < SIZE_SR10_SR24; i++)
-                       smtc_seqw(i + 0x10, vgamode[j].init_sr10_sr24[i]);
-
-               /* init SEQ register SR30 - SR75 */
-               for (i = 0; i < SIZE_SR30_SR75; i++)
-                       if ((i + 0x30) != 0x62 && (i + 0x30) != 0x6a &&
-                           (i + 0x30) != 0x6b)
-                               smtc_seqw(i + 0x30,
-                                         vgamode[j].init_sr30_sr75[i]);
-
-               /* init SEQ register SR80 - SR93 */
-               for (i = 0; i < SIZE_SR80_SR93; i++)
-                       smtc_seqw(i + 0x80, vgamode[j].init_sr80_sr93[i]);
-
-               /* init SEQ register SRA0 - SRAF */
-               for (i = 0; i < SIZE_SRA0_SRAF; i++)
-                       smtc_seqw(i + 0xa0, vgamode[j].init_sra0_sraf[i]);
-
-               /* init Graphic register GR00 - GR08 */
-               for (i = 0; i < SIZE_GR00_GR08; i++)
-                       smtc_grphw(i, vgamode[j].init_gr00_gr08[i]);
-
-               /* init Attribute register AR00 - AR14 */
-               for (i = 0; i < SIZE_AR00_AR14; i++)
-                       smtc_attrw(i, vgamode[j].init_ar00_ar14[i]);
-
-               /* init CRTC register CR00 - CR18 */
-               for (i = 0; i < SIZE_CR00_CR18; i++)
-                       smtc_crtcw(i, vgamode[j].init_cr00_cr18[i]);
-
-               /* init CRTC register CR30 - CR4D */
-               for (i = 0; i < SIZE_CR30_CR4D; i++)
-                       smtc_crtcw(i + 0x30, vgamode[j].init_cr30_cr4d[i]);
-
-               /* init CRTC register CR90 - CRA7 */
-               for (i = 0; i < SIZE_CR90_CRA7; i++)
-                       smtc_crtcw(i + 0x90, vgamode[j].init_cr90_cra7[i]);
-       }
-       smtc_mmiowb(0x67, 0x3c2);
-
-       /* set VPR registers */
-       writel(0x0, sfb->vp_regs + 0x0C);
-       writel(0x0, sfb->vp_regs + 0x40);
-
-       /* set data width */
-       m_nscreenstride = (sfb->width * sfb->fb->var.bits_per_pixel) / 64;
-       switch (sfb->fb->var.bits_per_pixel) {
-       case 8:
-               writel(0x0, sfb->vp_regs + 0x0);
-               break;
-       case 16:
-               writel(0x00020000, sfb->vp_regs + 0x0);
-               break;
-       case 24:
-               writel(0x00040000, sfb->vp_regs + 0x0);
-               break;
-       case 32:
-               writel(0x00030000, sfb->vp_regs + 0x0);
-               break;
-       }
-       writel((u32)(((m_nscreenstride + 2) << 16) | m_nscreenstride),
-              sfb->vp_regs + 0x10);
-}
-
-static void smtc_set_timing(struct smtcfb_info *sfb)
-{
-       switch (sfb->chip_id) {
-       case 0x710:
-       case 0x712:
-       case 0x720:
-               sm7xx_set_timing(sfb);
-               break;
-       }
-}
-
-static void smtcfb_setmode(struct smtcfb_info *sfb)
-{
-       switch (sfb->fb->var.bits_per_pixel) {
-       case 32:
-               sfb->fb->fix.visual       = FB_VISUAL_TRUECOLOR;
-               sfb->fb->fix.line_length  = sfb->fb->var.xres * 4;
-               sfb->fb->var.red.length   = 8;
-               sfb->fb->var.green.length = 8;
-               sfb->fb->var.blue.length  = 8;
-               sfb->fb->var.red.offset   = 16;
-               sfb->fb->var.green.offset = 8;
-               sfb->fb->var.blue.offset  = 0;
-               break;
-       case 24:
-               sfb->fb->fix.visual       = FB_VISUAL_TRUECOLOR;
-               sfb->fb->fix.line_length  = sfb->fb->var.xres * 3;
-               sfb->fb->var.red.length   = 8;
-               sfb->fb->var.green.length = 8;
-               sfb->fb->var.blue.length  = 8;
-               sfb->fb->var.red.offset   = 16;
-               sfb->fb->var.green.offset = 8;
-               sfb->fb->var.blue.offset  = 0;
-               break;
-       case 8:
-               sfb->fb->fix.visual       = FB_VISUAL_PSEUDOCOLOR;
-               sfb->fb->fix.line_length  = sfb->fb->var.xres;
-               sfb->fb->var.red.length   = 3;
-               sfb->fb->var.green.length = 3;
-               sfb->fb->var.blue.length  = 2;
-               sfb->fb->var.red.offset   = 5;
-               sfb->fb->var.green.offset = 2;
-               sfb->fb->var.blue.offset  = 0;
-               break;
-       case 16:
-       default:
-               sfb->fb->fix.visual       = FB_VISUAL_TRUECOLOR;
-               sfb->fb->fix.line_length  = sfb->fb->var.xres * 2;
-               sfb->fb->var.red.length   = 5;
-               sfb->fb->var.green.length = 6;
-               sfb->fb->var.blue.length  = 5;
-               sfb->fb->var.red.offset   = 11;
-               sfb->fb->var.green.offset = 5;
-               sfb->fb->var.blue.offset  = 0;
-               break;
-       }
-
-       sfb->width  = sfb->fb->var.xres;
-       sfb->height = sfb->fb->var.yres;
-       sfb->hz = 60;
-       smtc_set_timing(sfb);
-}
-
-static int smtc_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
-{
-       /* sanity checks */
-       if (var->xres_virtual < var->xres)
-               var->xres_virtual = var->xres;
-
-       if (var->yres_virtual < var->yres)
-               var->yres_virtual = var->yres;
-
-       /* set valid default bpp */
-       if ((var->bits_per_pixel != 8)  && (var->bits_per_pixel != 16) &&
-           (var->bits_per_pixel != 24) && (var->bits_per_pixel != 32))
-               var->bits_per_pixel = 16;
-
-       return 0;
-}
-
-static int smtc_set_par(struct fb_info *info)
-{
-       smtcfb_setmode(info->par);
-
-       return 0;
-}
-
-static struct fb_ops smtcfb_ops = {
-       .owner        = THIS_MODULE,
-       .fb_check_var = smtc_check_var,
-       .fb_set_par   = smtc_set_par,
-       .fb_setcolreg = smtc_setcolreg,
-       .fb_blank     = smtc_blank,
-       .fb_fillrect  = cfb_fillrect,
-       .fb_imageblit = cfb_imageblit,
-       .fb_copyarea  = cfb_copyarea,
-#ifdef __BIG_ENDIAN
-       .fb_read      = smtcfb_read,
-       .fb_write     = smtcfb_write,
-#endif
-};
-
-/*
- * Unmap in the memory mapped IO registers
- */
-
-static void smtc_unmap_mmio(struct smtcfb_info *sfb)
-{
-       if (sfb && smtc_regbaseaddress)
-               smtc_regbaseaddress = NULL;
-}
-
-/*
- * Map in the screen memory
- */
-
-static int smtc_map_smem(struct smtcfb_info *sfb,
-                        struct pci_dev *pdev, u_long smem_len)
-{
-       sfb->fb->fix.smem_start = pci_resource_start(pdev, 0);
-
-#ifdef __BIG_ENDIAN
-       if (sfb->fb->var.bits_per_pixel == 32)
-               sfb->fb->fix.smem_start += 0x800000;
-#endif
-
-       sfb->fb->fix.smem_len = smem_len;
-
-       sfb->fb->screen_base = sfb->lfb;
-
-       if (!sfb->fb->screen_base) {
-               dev_err(&pdev->dev,
-                       "%s: unable to map screen memory\n", sfb->fb->fix.id);
-               return -ENOMEM;
-       }
-
-       return 0;
-}
-
-/*
- * Unmap in the screen memory
- *
- */
-static void smtc_unmap_smem(struct smtcfb_info *sfb)
-{
-       if (sfb && sfb->fb->screen_base) {
-               iounmap(sfb->fb->screen_base);
-               sfb->fb->screen_base = NULL;
-       }
-}
-
-/*
- * We need to wake up the device and make sure its in linear memory mode.
- */
-static inline void sm7xx_init_hw(void)
-{
-       outb_p(0x18, 0x3c4);
-       outb_p(0x11, 0x3c5);
-}
-
-static int smtcfb_pci_probe(struct pci_dev *pdev,
-                           const struct pci_device_id *ent)
-{
-       struct smtcfb_info *sfb;
-       struct fb_info *info;
-       u_long smem_size = 0x00800000;  /* default 8MB */
-       int err;
-       unsigned long mmio_base;
-
-       dev_info(&pdev->dev, "Silicon Motion display driver.\n");
-
-       err = pci_enable_device(pdev);  /* enable SMTC chip */
-       if (err)
-               return err;
-
-       err = pci_request_region(pdev, 0, "sm7xxfb");
-       if (err < 0) {
-               dev_err(&pdev->dev, "cannot reserve framebuffer region\n");
-               goto failed_regions;
-       }
-
-       sprintf(smtcfb_fix.id, "sm%Xfb", ent->device);
-
-       info = framebuffer_alloc(sizeof(*sfb), &pdev->dev);
-       if (!info) {
-               dev_err(&pdev->dev, "framebuffer_alloc failed\n");
-               err = -ENOMEM;
-               goto failed_free;
-       }
-
-       sfb = info->par;
-       sfb->fb = info;
-       sfb->chip_id = ent->device;
-       sfb->pdev = pdev;
-       info->flags = FBINFO_FLAG_DEFAULT;
-       info->fbops = &smtcfb_ops;
-       info->fix = smtcfb_fix;
-       info->var = smtcfb_var;
-       info->pseudo_palette = sfb->colreg;
-       info->par = sfb;
-
-       pci_set_drvdata(pdev, sfb);
-
-       sm7xx_init_hw();
-
-       /* get mode parameter from smtc_scr_info */
-       if (smtc_scr_info.lfb_width != 0) {
-               sfb->fb->var.xres = smtc_scr_info.lfb_width;
-               sfb->fb->var.yres = smtc_scr_info.lfb_height;
-               sfb->fb->var.bits_per_pixel = smtc_scr_info.lfb_depth;
-       } else {
-               /* default resolution 1024x600 16bit mode */
-               sfb->fb->var.xres = SCREEN_X_RES;
-               sfb->fb->var.yres = SCREEN_Y_RES;
-               sfb->fb->var.bits_per_pixel = SCREEN_BPP;
-       }
-
-#ifdef __BIG_ENDIAN
-       if (sfb->fb->var.bits_per_pixel == 24)
-               sfb->fb->var.bits_per_pixel = (smtc_scr_info.lfb_depth = 32);
-#endif
-       /* Map address and memory detection */
-       mmio_base = pci_resource_start(pdev, 0);
-       pci_read_config_byte(pdev, PCI_REVISION_ID, &sfb->chip_rev_id);
-
-       switch (sfb->chip_id) {
-       case 0x710:
-       case 0x712:
-               sfb->fb->fix.mmio_start = mmio_base + 0x00400000;
-               sfb->fb->fix.mmio_len = 0x00400000;
-               smem_size = SM712_VIDEOMEMORYSIZE;
-#ifdef __BIG_ENDIAN
-               sfb->lfb = ioremap(mmio_base, 0x00c00000);
-#else
-               sfb->lfb = ioremap(mmio_base, 0x00800000);
-#endif
-               sfb->mmio = (smtc_regbaseaddress =
-                   sfb->lfb + 0x00700000);
-               sfb->dp_regs = sfb->lfb + 0x00408000;
-               sfb->vp_regs = sfb->lfb + 0x0040c000;
-#ifdef __BIG_ENDIAN
-               if (sfb->fb->var.bits_per_pixel == 32) {
-                       sfb->lfb += 0x800000;
-                       dev_info(&pdev->dev, "sfb->lfb=%p\n", sfb->lfb);
-               }
-#endif
-               if (!smtc_regbaseaddress) {
-                       dev_err(&pdev->dev,
-                               "%s: unable to map memory mapped IO!\n",
-                               sfb->fb->fix.id);
-                       err = -ENOMEM;
-                       goto failed_fb;
-               }
-
-               /* set MCLK = 14.31818 * (0x16 / 0x2) */
-               smtc_seqw(0x6a, 0x16);
-               smtc_seqw(0x6b, 0x02);
-               smtc_seqw(0x62, 0x3e);
-               /* enable PCI burst */
-               smtc_seqw(0x17, 0x20);
-               /* enable word swap */
-#ifdef __BIG_ENDIAN
-               if (sfb->fb->var.bits_per_pixel == 32)
-                       smtc_seqw(0x17, 0x30);
-#endif
-               break;
-       case 0x720:
-               sfb->fb->fix.mmio_start = mmio_base;
-               sfb->fb->fix.mmio_len = 0x00200000;
-               smem_size = SM722_VIDEOMEMORYSIZE;
-               sfb->dp_regs = ioremap(mmio_base, 0x00a00000);
-               sfb->lfb = sfb->dp_regs + 0x00200000;
-               sfb->mmio = (smtc_regbaseaddress =
-                   sfb->dp_regs + 0x000c0000);
-               sfb->vp_regs = sfb->dp_regs + 0x800;
-
-               smtc_seqw(0x62, 0xff);
-               smtc_seqw(0x6a, 0x0d);
-               smtc_seqw(0x6b, 0x02);
-               break;
-       default:
-               dev_err(&pdev->dev,
-                       "No valid Silicon Motion display chip was detected!\n");
-
-               goto failed_fb;
-       }
-
-       /* can support 32 bpp */
-       if (15 == sfb->fb->var.bits_per_pixel)
-               sfb->fb->var.bits_per_pixel = 16;
-
-       sfb->fb->var.xres_virtual = sfb->fb->var.xres;
-       sfb->fb->var.yres_virtual = sfb->fb->var.yres;
-       err = smtc_map_smem(sfb, pdev, smem_size);
-       if (err)
-               goto failed;
-
-       smtcfb_setmode(sfb);
-
-       err = register_framebuffer(info);
-       if (err < 0)
-               goto failed;
-
-       dev_info(&pdev->dev,
-                "Silicon Motion SM%X Rev%X primary display mode %dx%d-%d Init Complete.\n",
-                sfb->chip_id, sfb->chip_rev_id, sfb->fb->var.xres,
-                sfb->fb->var.yres, sfb->fb->var.bits_per_pixel);
-
-       return 0;
-
-failed:
-       dev_err(&pdev->dev, "Silicon Motion, Inc. primary display init fail.\n");
-
-       smtc_unmap_smem(sfb);
-       smtc_unmap_mmio(sfb);
-failed_fb:
-       framebuffer_release(info);
-
-failed_free:
-       pci_release_region(pdev, 0);
-
-failed_regions:
-       pci_disable_device(pdev);
-
-       return err;
-}
-
-/*
- * 0x710 (LynxEM)
- * 0x712 (LynxEM+)
- * 0x720 (Lynx3DM, Lynx3DM+)
- */
-static const struct pci_device_id smtcfb_pci_table[] = {
-       { PCI_DEVICE(0x126f, 0x710), },
-       { PCI_DEVICE(0x126f, 0x712), },
-       { PCI_DEVICE(0x126f, 0x720), },
-       {0,}
-};
-
-MODULE_DEVICE_TABLE(pci, smtcfb_pci_table);
-
-static void smtcfb_pci_remove(struct pci_dev *pdev)
-{
-       struct smtcfb_info *sfb;
-
-       sfb = pci_get_drvdata(pdev);
-       smtc_unmap_smem(sfb);
-       smtc_unmap_mmio(sfb);
-       unregister_framebuffer(sfb->fb);
-       framebuffer_release(sfb->fb);
-       pci_release_region(pdev, 0);
-       pci_disable_device(pdev);
-}
-
-#ifdef CONFIG_PM
-static int smtcfb_pci_suspend(struct device *device)
-{
-       struct pci_dev *pdev = to_pci_dev(device);
-       struct smtcfb_info *sfb;
-
-       sfb = pci_get_drvdata(pdev);
-
-       /* set the hw in sleep mode use external clock and self memory refresh
-        * so that we can turn off internal PLLs later on
-        */
-       smtc_seqw(0x20, (smtc_seqr(0x20) | 0xc0));
-       smtc_seqw(0x69, (smtc_seqr(0x69) & 0xf7));
-
-       console_lock();
-       fb_set_suspend(sfb->fb, 1);
-       console_unlock();
-
-       /* additionally turn off all function blocks including internal PLLs */
-       smtc_seqw(0x21, 0xff);
-
-       return 0;
-}
-
-static int smtcfb_pci_resume(struct device *device)
-{
-       struct pci_dev *pdev = to_pci_dev(device);
-       struct smtcfb_info *sfb;
-
-       sfb = pci_get_drvdata(pdev);
-
-       /* reinit hardware */
-       sm7xx_init_hw();
-       switch (sfb->chip_id) {
-       case 0x710:
-       case 0x712:
-               /* set MCLK = 14.31818 *  (0x16 / 0x2) */
-               smtc_seqw(0x6a, 0x16);
-               smtc_seqw(0x6b, 0x02);
-               smtc_seqw(0x62, 0x3e);
-               /* enable PCI burst */
-               smtc_seqw(0x17, 0x20);
-#ifdef __BIG_ENDIAN
-               if (sfb->fb->var.bits_per_pixel == 32)
-                       smtc_seqw(0x17, 0x30);
-#endif
-               break;
-       case 0x720:
-               smtc_seqw(0x62, 0xff);
-               smtc_seqw(0x6a, 0x0d);
-               smtc_seqw(0x6b, 0x02);
-               break;
-       }
-
-       smtc_seqw(0x34, (smtc_seqr(0x34) | 0xc0));
-       smtc_seqw(0x33, ((smtc_seqr(0x33) | 0x08) & 0xfb));
-
-       smtcfb_setmode(sfb);
-
-       console_lock();
-       fb_set_suspend(sfb->fb, 0);
-       console_unlock();
-
-       return 0;
-}
-
-static SIMPLE_DEV_PM_OPS(sm7xx_pm_ops, smtcfb_pci_suspend, smtcfb_pci_resume);
-#define SM7XX_PM_OPS (&sm7xx_pm_ops)
-
-#else  /* !CONFIG_PM */
-
-#define SM7XX_PM_OPS NULL
-
-#endif /* !CONFIG_PM */
-
-static struct pci_driver smtcfb_driver = {
-       .name = "smtcfb",
-       .id_table = smtcfb_pci_table,
-       .probe = smtcfb_pci_probe,
-       .remove = smtcfb_pci_remove,
-       .driver.pm  = SM7XX_PM_OPS,
-};
-
-static int __init sm712fb_init(void)
-{
-#ifndef MODULE
-       char *option = NULL;
-
-       if (fb_get_options("sm712fb", &option))
-               return -ENODEV;
-       if (option && *option)
-               mode_option = option;
-#endif
-       sm7xx_vga_setup(mode_option);
-
-       return pci_register_driver(&smtcfb_driver);
-}
-
-module_init(sm712fb_init);
-
-static void __exit sm712fb_exit(void)
-{
-       pci_unregister_driver(&smtcfb_driver);
-}
-
-module_exit(sm712fb_exit);
-
-MODULE_AUTHOR("Siliconmotion ");
-MODULE_DESCRIPTION("Framebuffer driver for SMI Graphic Cards");
-MODULE_LICENSE("GPL");
index 94756742136f93f50bbf8b655a165993edafd590..02d5c706aee7bc85ca3f29035fba67e59fdd087e 100644 (file)
@@ -165,7 +165,7 @@ int spk_handle_help(struct vc_data *vc, u_char type, u_char ch, u_short key)
                        synth_printf("\n");
                        return 1;
                }
-       cur_item = letter_offsets[ch-'a'];
+               cur_item = letter_offsets[ch-'a'];
        } else if (type == KT_CUR) {
                if (ch == 0
                    && (MSG_FUNCNAMES_START + cur_item + 1) <=
index 0f524bb7b41d5bfaba0e038e20846c63d24b7785..1f9ba8beb06173adad9041b823498c41313d79b1 100644 (file)
@@ -1126,7 +1126,6 @@ MODULE_DEVICE_TABLE(i2c, synaptics_rmi4_id_table);
 static struct i2c_driver synaptics_rmi4_driver = {
        .driver = {
                .name   =       DRIVER_NAME,
-               .owner  =       THIS_MODULE,
                .pm     =       &synaptics_rmi4_dev_pm_ops,
        },
        .probe          =       synaptics_rmi4_probe,
index 778f9d05f98a83646604cc98f618af37591af4d5..624abe66c20c25f9685f607273ec6b14c003ea50 100644 (file)
@@ -3,7 +3,7 @@
 #
 menuconfig UNISYSSPAR
        bool "Unisys SPAR driver support"
-       depends on X86_64
+       depends on X86_64 && !UML
        select PCI
        select ACPI
        ---help---
index 706363fc3e9a77af30bc6c19b0fbee36be2bd302..17cb499cb53c3e5949679531d3b49f2662038945 100644 (file)
  * CHANNEL Guids
  */
 
-/* Used in IOChannel
- * {414815ed-c58c-11da-95a9-00e08161165f}
- */
+/* {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"
 
-/* Used in IOChannel
- * {8cd5994d-c58e-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"
 
-/* Used in IOChannel
- * {72120008-4AAB-11DC-8530-444553544200}
- */
+/* {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;
 
-/* Used in visornoop/visornoop_main.c
- * {5b52c5ac-e5f5-4d42-8dff-429eaecd221f}
- */
+/* {5b52c5ac-e5f5-4d42-8dff-429eaecd221f} */
 #define SPAR_CONTROLDIRECTOR_CHANNEL_PROTOCOL_UUID  \
                UUID_LE(0x5b52c5ac, 0xe5f5, 0x4d42, \
                                0x8d, 0xff, 0x42, 0x9e, 0xae, 0xcd, 0x22, 0x1f)
@@ -53,9 +49,7 @@ static const uuid_le spar_siovm_uuid = SPAR_SIOVM_UUID;
 static const uuid_le spar_controldirector_channel_protocol_uuid =
        SPAR_CONTROLDIRECTOR_CHANNEL_PROTOCOL_UUID;
 
-/* Used in visorchipset/visorchipset_main.c
- * {B4E79625-AEDE-4EAA-9E11-D3EDDCD4504C}
- */
+/* {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)
index e4a21e42e868c2bfdd3c6f748883636956cb6e78..9235536fa75f76ee2ace83093dec44e80b59efee 100644 (file)
@@ -113,7 +113,8 @@ struct visor_driver {
        struct driver_attribute version_attr;
 };
 
-#define to_visor_driver(x) container_of(x, struct visor_driver, driver)
+#define to_visor_driver(x) ((x) ? \
+       (container_of(x, struct visor_driver, driver)) : (NULL))
 
 /** A device type for things "plugged" into the visorbus bus */
 
@@ -200,6 +201,8 @@ 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);
index a50d9cf4bed740491423d5f1412a97e508700a37..ec25366b127c0fcc33e51093449baa126f5d52ea 100644 (file)
@@ -1,10 +1,9 @@
-/* Copyright (C) 2010 - 2013 UNISYS CORPORATION
+/* 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 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 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
index f74f5d8c282099d3a766d4c54c0e3f8c40a1007d..3c97ebac4f322fe493aeed4cf31ce06369c09519 100644 (file)
@@ -1,12 +1,11 @@
 /* controlvmcompletionstatus.c
  *
- * Copyright (C) 2010 - 2013 UNISYS CORPORATION
+ * 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 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 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
index 57dd93e0cc83f9f32ea1e7d8405e69844f606f0a..b08b6ecc8d31e26e6b23d4b30f737c539178233f 100644 (file)
@@ -1,10 +1,9 @@
-/* Copyright (C) 2010 - 2013 UNISYS CORPORATION
+/* 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 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 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
index 5e56088cf8555fce57cf410983236ca25f3afc98..a3631c3591f61cc088479ae90563e5e1f88752ff 100644 (file)
@@ -1,12 +1,11 @@
 /* periodic_work.c
  *
- * Copyright (C) 2010 - 2013 UNISYS CORPORATION
+ * 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 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 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
index 5ed83a3f14281b92c90aaef87da20f4efec274e2..80e64477e547ef70d11729f0425704a49191d20c 100644 (file)
@@ -1,10 +1,9 @@
-/* Copyright (C) 2010 - 2013 UNISYS CORPORATION
+/* 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 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 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
index 9b6d3e69355c77ded203a8eb6288ca3d8c3d7abb..f59fd8a523c4fa838d4b4f9f4d60166ec4d3f1f5 100644 (file)
@@ -1,10 +1,9 @@
-/* Copyright (C) 2010 - 2013 UNISYS CORPORATION
+/* 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 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 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
index 6db47196c1899b9b7c9a587f0fd38ccb64492a42..cc4a0292c287b6f813155fdf2fa8b19deb84e76d 100644 (file)
@@ -1,12 +1,11 @@
 /* visorbus_main.c
  *
- * Copyright ï¿½ 2010 - 2013 UNISYS CORPORATION
+ * Copyright ï¿½ 2010 - 2015 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 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
@@ -70,6 +69,38 @@ static const struct attribute_group *visorbus_bus_groups[] = {
        NULL,
 };
 
+/*
+ * DEVICE type attributes
+ *
+ * The modalias file will contain the guid of the device.
+ */
+static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
+                            char *buf)
+{
+       struct visor_device *vdev;
+       uuid_le guid;
+
+       vdev = to_visor_device(dev);
+       guid = visorchannel_get_uuid(vdev->visorchannel);
+       return snprintf(buf, PAGE_SIZE, "visorbus:%pUl\n", &guid);
+}
+static DEVICE_ATTR_RO(modalias);
+
+static struct attribute *visorbus_dev_attrs[] = {
+       &dev_attr_modalias.attr,
+       NULL,
+};
+
+/* sysfs example for bridge-only sysfs files using device_type's */
+static const struct attribute_group visorbus_dev_group = {
+       .attrs = visorbus_dev_attrs,
+};
+
+const struct attribute_group *visorbus_dev_groups[] = {
+       &visorbus_dev_group,
+       NULL,
+};
+
 /** This describes the TYPE of bus.
  *  (Don't confuse this with an INSTANCE of the bus.)
  */
@@ -77,6 +108,7 @@ struct bus_type visorbus_type = {
        .name = "visorbus",
        .match = visorbus_match,
        .uevent = visorbus_uevent,
+       .dev_groups = visorbus_dev_groups,
        .bus_groups = visorbus_bus_groups,
 };
 
@@ -129,7 +161,13 @@ static LIST_HEAD(list_all_device_instances);
 static int
 visorbus_uevent(struct device *xdev, struct kobj_uevent_env *env)
 {
-       if (add_uevent_var(env, "VERSION=%s", VERSION))
+       struct visor_device *dev;
+       uuid_le guid;
+
+       dev = to_visor_device(xdev);
+       guid = visorchannel_get_uuid(dev->visorchannel);
+
+       if (add_uevent_var(env, "MODALIAS=visorbus:%pUl", &guid))
                return -ENOMEM;
        return 0;
 }
@@ -218,9 +256,9 @@ visorbus_release_device(struct device *xdev)
 struct devmajorminor_attribute {
        struct attribute attr;
        int slot;
-        ssize_t (*show)(struct visor_device *, int slot, char *buf);
-        ssize_t (*store)(struct visor_device *, int slot, const char *buf,
-                         size_t count);
+       ssize_t (*show)(struct visor_device *, int slot, char *buf);
+       ssize_t (*store)(struct visor_device *, int slot, const char *buf,
+                        size_t count);
 };
 
 static ssize_t DEVMAJORMINOR_ATTR(struct visor_device *dev, int slot, char *buf)
@@ -281,12 +319,11 @@ devmajorminor_create_file(struct visor_device *dev, const char *name,
                rc = -ENOMEM;
                goto away;
        }
-       myattr = kmalloc(sizeof(*myattr), GFP_KERNEL);
+       myattr = kzalloc(sizeof(*myattr), GFP_KERNEL);
        if (!myattr) {
                rc = -ENOMEM;
                goto away;
        }
-       memset(myattr, 0, sizeof(struct devmajorminor_attribute));
        myattr->show = DEVMAJORMINOR_ATTR;
        myattr->store = NULL;
        myattr->slot = slot;
@@ -471,6 +508,7 @@ static struct attribute *channel_attrs[] = {
                &dev_attr_typeguid.attr,
                &dev_attr_zoneguid.attr,
                &dev_attr_typename.attr,
+               NULL
 };
 
 static struct attribute_group channel_attr_grp = {
@@ -478,7 +516,7 @@ static struct attribute_group channel_attr_grp = {
                .attrs = channel_attrs,
 };
 
-static const struct attribute_group *visorbus_dev_groups[] = {
+static const struct attribute_group *visorbus_channel_groups[] = {
                &channel_attr_grp,
                NULL
 };
@@ -937,7 +975,7 @@ create_visor_device(struct visor_device *dev)
 
        sema_init(&dev->visordriver_callback_lock, 1);  /* unlocked */
        dev->device.bus = &visorbus_type;
-       dev->device.groups = visorbus_dev_groups;
+       dev->device.groups = visorbus_channel_groups;
        device_initialize(&dev->device);
        dev->device.release = visorbus_release_device;
        /* keep a reference just for us (now 2) */
@@ -1043,10 +1081,10 @@ 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 -1;
+               return -1;
 
        if (visorchannel_write(chan, off, info, sizeof(*info)) < 0)
-                       return -1;
+               return -1;
        return 0;
 }
 
@@ -1061,10 +1099,10 @@ 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 -1;
+               return -1;
 
        if (visorchannel_write(chan, off, info, sizeof(*info)) < 0)
-                       return -1;
+               return -1;
        return 0;
 }
 
@@ -1081,10 +1119,10 @@ write_vbus_dev_info(struct visorchannel *chan,
            (hdr_info->device_info_struct_bytes * devix);
 
        if (hdr_info->dev_info_offset == 0)
-                       return -1;
+               return -1;
 
        if (visorchannel_write(chan, off, info, sizeof(*info)) < 0)
-                       return -1;
+               return -1;
        return 0;
 }
 
@@ -1106,7 +1144,7 @@ fix_vbus_dev_info(struct visor_device *visordev)
        struct spar_vbus_headerinfo *hdr_info;
 
        if (!visordev->device.driver)
-                       return;
+               return;
 
        hdr_info = (struct spar_vbus_headerinfo *)visordev->vbus_hdr_info;
        if (!hdr_info)
@@ -1319,11 +1357,11 @@ static void
 pause_state_change_complete(struct visor_device *dev, int status)
 {
        if (!dev->pausing)
-                       return;
+               return;
 
        dev->pausing = false;
        if (!chipset_responders.device_pause) /* this can never happen! */
-                       return;
+               return;
 
        /* Notify the chipset driver that the pause is complete, which
        * will presumably want to send some sort of response to the
@@ -1339,11 +1377,11 @@ static void
 resume_state_change_complete(struct visor_device *dev, int status)
 {
        if (!dev->resuming)
-                       return;
+               return;
 
        dev->resuming = false;
        if (!chipset_responders.device_resume) /* this can never happen! */
-                       return;
+               return;
 
        /* Notify the chipset driver that the resume is complete,
         * which will presumably want to send some sort of response to
@@ -1367,14 +1405,14 @@ initiate_chipset_device_pause_resume(struct visor_device *dev, bool is_pause)
        else
                notify_func = chipset_responders.device_resume;
        if (!notify_func)
-                       goto away;
+               goto away;
 
        drv = to_visor_driver(dev->device.driver);
        if (!drv)
-                       goto away;
+               goto away;
 
        if (dev->pausing || dev->resuming)
-                       goto away;
+               goto away;
 
        /* Note that even though both drv->pause() and drv->resume
         * specify a callback function, it is NOT necessary for us to
@@ -1385,7 +1423,7 @@ initiate_chipset_device_pause_resume(struct visor_device *dev, bool is_pause)
         */
        if (is_pause) {
                if (!drv->pause)
-                               goto away;
+                       goto away;
 
                dev->pausing = true;
                x = drv->pause(dev, pause_state_change_complete);
@@ -1397,7 +1435,7 @@ initiate_chipset_device_pause_resume(struct visor_device *dev, bool is_pause)
                 * would never even get here in that case. */
                fix_vbus_dev_info(dev);
                if (!drv->resume)
-                               goto away;
+                       goto away;
 
                dev->resuming = true;
                x = drv->resume(dev, resume_state_change_complete);
@@ -1413,7 +1451,7 @@ initiate_chipset_device_pause_resume(struct visor_device *dev, bool is_pause)
 away:
        if (rc < 0) {
                if (notify_func)
-                               (*notify_func)(dev, rc);
+                       (*notify_func)(dev, rc);
        }
 }
 
@@ -1469,8 +1507,8 @@ visorbus_init(void)
 
 away:
        if (rc)
-                       POSTCODE_LINUX_3(CHIPSET_INIT_FAILURE_PC, rc,
-                                        POSTCODE_SEVERITY_ERR);
+               POSTCODE_LINUX_3(CHIPSET_INIT_FAILURE_PC, rc,
+                                POSTCODE_SEVERITY_ERR);
        return rc;
 }
 
@@ -1495,9 +1533,8 @@ visorbus_exit(void)
 
        list_for_each_safe(listentry, listtmp, &list_all_bus_instances) {
                struct visor_device *dev = list_entry(listentry,
-                                                             struct
-                                                             visor_device,
-                                                             list_all);
+                                                     struct visor_device,
+                                                     list_all);
                remove_bus_instance(dev);
        }
        remove_bus_type();
index 2f12483e38ab3f6007adcf40c2d034a057929e24..39edd20184531f89b4174f3abaaa12807e6dbb35 100644 (file)
@@ -1,12 +1,11 @@
 /* visorchipset.h
  *
- * Copyright (C) 2010 - 2013 UNISYS CORPORATION
+ * 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 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 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
index 20b63496e9f215a51e6385fd0d2e4b96b8758e75..6da7e49a662758c7e673aea32705a86e2269cb2c 100644 (file)
@@ -1,12 +1,11 @@
 /* visorchannel_funcs.c
  *
- * Copyright (C) 2010 - 2013 UNISYS CORPORATION
+ * 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 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 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
@@ -259,7 +258,8 @@ visorchannel_write(struct visorchannel *channel, ulong offset,
 
        if (offset < chdr_size) {
                copy_size = min(chdr_size - offset, nbytes);
-               memcpy(&channel->chan_hdr + offset, local, copy_size);
+               memcpy(((char *)(&channel->chan_hdr)) + offset,
+                      local, copy_size);
        }
 
        memcpy_toio(channel->mapped + offset, local, nbytes);
@@ -416,11 +416,12 @@ bool
 visorchannel_signalremove(struct visorchannel *channel, u32 queue, void *msg)
 {
        bool rc;
+       unsigned long flags;
 
        if (channel->needs_lock) {
-               spin_lock(&channel->remove_lock);
+               spin_lock_irqsave(&channel->remove_lock, flags);
                rc = signalremove_inner(channel, queue, msg);
-               spin_unlock(&channel->remove_lock);
+               spin_unlock_irqrestore(&channel->remove_lock, flags);
        } else {
                rc = signalremove_inner(channel, queue, msg);
        }
@@ -429,6 +430,27 @@ visorchannel_signalremove(struct visorchannel *channel, u32 queue, void *msg)
 }
 EXPORT_SYMBOL_GPL(visorchannel_signalremove);
 
+bool
+visorchannel_signalempty(struct visorchannel *channel, u32 queue)
+{
+       unsigned long flags = 0;
+       struct signal_queue_header sig_hdr;
+       bool rc = false;
+
+       if (channel->needs_lock)
+               spin_lock_irqsave(&channel->remove_lock, flags);
+
+       if (!sig_read_header(channel, queue, &sig_hdr))
+               rc = true;
+       if (sig_hdr.head == sig_hdr.tail)
+               rc = true;
+       if (channel->needs_lock)
+               spin_unlock_irqrestore(&channel->remove_lock, flags);
+
+       return rc;
+}
+EXPORT_SYMBOL_GPL(visorchannel_signalempty);
+
 static bool
 signalinsert_inner(struct visorchannel *channel, u32 queue, void *msg)
 {
@@ -470,11 +492,12 @@ bool
 visorchannel_signalinsert(struct visorchannel *channel, u32 queue, void *msg)
 {
        bool rc;
+       unsigned long flags;
 
        if (channel->needs_lock) {
-               spin_lock(&channel->insert_lock);
+               spin_lock_irqsave(&channel->insert_lock, flags);
                rc = signalinsert_inner(channel, queue, msg);
-               spin_unlock(&channel->insert_lock);
+               spin_unlock_irqrestore(&channel->insert_lock, flags);
        } else {
                rc = signalinsert_inner(channel, queue, msg);
        }
index bb8087e70127c800015fa0d4fae8675cbcb0e2bd..4b76cb441ed4eb683a1bffbc792a40aa8b2adebd 100644 (file)
@@ -1,12 +1,11 @@
 /* visorchipset_main.c
  *
- * Copyright (C) 2010 - 2013 UNISYS CORPORATION
+ * 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 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 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
@@ -1247,10 +1246,11 @@ my_device_create(struct controlvm_message *inmsg)
        POSTCODE_LINUX_4(DEVICE_CREATE_ENTRY_PC, dev_no, bus_no,
                         POSTCODE_SEVERITY_INFO);
 
-       visorchannel = visorchannel_create(cmd->create_device.channel_addr,
-                                          cmd->create_device.channel_bytes,
-                                          GFP_KERNEL,
-                                          cmd->create_device.data_type_uuid);
+       visorchannel =
+              visorchannel_create_with_lock(cmd->create_device.channel_addr,
+                                            cmd->create_device.channel_bytes,
+                                            GFP_KERNEL,
+                                            cmd->create_device.data_type_uuid);
 
        if (!visorchannel) {
                POSTCODE_LINUX_4(DEVICE_CREATE_FAILURE_PC, dev_no, bus_no,
@@ -2047,6 +2047,7 @@ device_create_response(struct visor_device *dev_info, int response)
                         response);
 
        kfree(dev_info->pending_msg_hdr);
+       dev_info->pending_msg_hdr = NULL;
 }
 
 static void
@@ -2381,6 +2382,9 @@ static struct acpi_driver unisys_acpi_driver = {
                .remove = visorchipset_exit,
                },
 };
+
+MODULE_DEVICE_TABLE(acpi, unisys_device_ids);
+
 static __init uint32_t visorutil_spar_detect(void)
 {
        unsigned int eax, ebx, ecx, edx;
index 7a53df00726a31be9ce3180cc0deef8e70cceef5..7abd27a618f8d12f97e646c5d1f7b7ca541c497d 100644 (file)
@@ -1,10 +1,9 @@
-/* Copyright (C) 2010 - 2013 UNISYS CORPORATION
+/* 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 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 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
index 71007443773713ee5c5d58892ba4b299a6f3e555..63d90f5991584be2ff3c3d10773e37372161d289 100644 (file)
@@ -1,10 +1,9 @@
 /* Copyright (c) 2012 - 2015 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 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
  */
 
 #include <linux/debugfs.h>
-#include <linux/netdevice.h>
 #include <linux/etherdevice.h>
-#include <linux/skbuff.h>
+#include <linux/netdevice.h>
 #include <linux/kthread.h>
+#include <linux/skbuff.h>
+#include <linux/rtnetlink.h>
 
 #include "visorbus.h"
 #include "iochannel.h"
 
-#define VISORNIC_INFINITE_RESPONSE_WAIT 0
+#define VISORNIC_INFINITE_RSP_WAIT 0
 #define VISORNICSOPENMAX 32
 #define MAXDEVICES     16384
 
@@ -61,7 +61,6 @@ static const struct file_operations debugfs_enable_ints_fops = {
        .write = enable_ints_write,
 };
 
-static struct workqueue_struct *visornic_serverdown_workqueue;
 static struct workqueue_struct *visornic_timeout_reset_workqueue;
 
 /* GUIDS for director channel type supported by this driver.  */
@@ -90,12 +89,6 @@ static struct visor_driver visornic_driver = {
        .channel_interrupt = NULL,
 };
 
-struct visor_thread_info {
-       struct task_struct *task;
-       struct completion has_stopped;
-       int id;
-};
-
 struct chanstat {
        unsigned long got_rcv;
        unsigned long got_enbdisack;
@@ -104,6 +97,7 @@ struct chanstat {
        unsigned long sent_enbdis;
        unsigned long sent_promisc;
        unsigned long sent_post;
+       unsigned long sent_post_failed;
        unsigned long sent_xmit;
        unsigned long reject_count;
        unsigned long extra_rcvbufs_sent;
@@ -111,7 +105,6 @@ struct chanstat {
 
 struct visornic_devdata {
        int devnum;
-       int thread_wait_ms;
        unsigned short enabled;         /* 0 disabled 1 enabled to receive */
        unsigned short enab_dis_acked;  /* NET_RCV_ENABLE/DISABLE acked by
                                         * IOPART
@@ -119,7 +112,6 @@ struct visornic_devdata {
        struct visor_device *dev;
        char name[99];
        struct list_head list_all;   /* < link within list_all_devices list */
-       struct kref kref;
        struct net_device *netdev;
        struct net_device_stats net_stats;
        atomic_t interrupt_rcvd;
@@ -137,20 +129,21 @@ struct visornic_devdata {
        atomic_t num_rcvbuf_in_iovm;
        unsigned long alloc_failed_in_if_needed_cnt;
        unsigned long alloc_failed_in_repost_rtn_cnt;
-       int max_outstanding_net_xmits;   /* absolute max number of outstanding
-                                         * xmits - should never hit this
-                                         */
-       int upper_threshold_net_xmits;   /* high water mark for calling
-                                         * netif_stop_queue()
-                                         */
-       int lower_threshold_net_xmits;   /* high water mark for calling
-                                         * netif_wake_queue()
-                                         */
+       unsigned long max_outstanding_net_xmits; /* absolute max number of
+                                                 * outstanding xmits - should
+                                                 * never hit this
+                                                 */
+       unsigned long upper_threshold_net_xmits;  /* high water mark for
+                                                  * calling netif_stop_queue()
+                                                  */
+       unsigned long lower_threshold_net_xmits; /* high water mark for calling
+                                                 * netif_wake_queue()
+                                                 */
        struct sk_buff_head xmitbufhead; /* xmitbufhead is the head of the
                                          * xmit buffer list that have been
                                          * sent to the IOPART end
                                          */
-       struct work_struct serverdown_completion;
+       visorbus_state_complete_func server_down_complete_func;
        struct work_struct timeout_reset;
        struct uiscmdrsp *cmdrsp_rcv;    /* cmdrsp_rcv is used for
                                          * posting/unposting rcv buffers
@@ -161,8 +154,8 @@ struct visornic_devdata {
                                          */
        bool server_down;                /* IOPART is down */
        bool server_change_state;        /* Processing SERVER_CHANGESTATE msg */
+       bool going_away;                 /* device is being torn down */
        struct dentry *eth_debugfs_dir;
-       struct visor_thread_info threadinfo;
        u64 interrupts_rcvd;
        u64 interrupts_notme;
        u64 interrupts_disabled;
@@ -194,16 +187,19 @@ struct visornic_devdata {
 
        int queuefullmsg_logged;
        struct chanstat chstat;
+       struct timer_list irq_poll_timer;
+       struct napi_struct napi;
+       struct uiscmdrsp cmdrsp[SIZEOF_CMDRSP];
 };
 
-/* array of open devices maintained by open() and close() */
-static struct net_device *num_visornic_open[VISORNICSOPENMAX];
 
 /* List of all visornic_devdata structs,
  * linked via the list_all member
  */
 static LIST_HEAD(list_all_devices);
 static DEFINE_SPINLOCK(lock_all_devices);
+static int visornic_poll(struct napi_struct *napi, int budget);
+static void poll_for_irq(unsigned long v);
 
 /**
  *     visor_copy_fragsinfo_from_skb(
@@ -223,9 +219,25 @@ visor_copy_fragsinfo_from_skb(struct sk_buff *skb, unsigned int firstfraglen,
                              struct phys_info frags[])
 {
        unsigned int count = 0, ii, size, offset = 0, numfrags;
+       unsigned int total_count;
 
        numfrags = skb_shinfo(skb)->nr_frags;
 
+       /*
+        * Compute the number of fragments this skb has, and if its more than
+        * frag array can hold, linearize the skb
+        */
+       total_count = numfrags + (firstfraglen / PI_PAGE_SIZE);
+       if (firstfraglen % PI_PAGE_SIZE)
+               total_count++;
+
+       if (total_count > frags_max) {
+               if (skb_linearize(skb))
+                       return -EINVAL;
+               numfrags = skb_shinfo(skb)->nr_frags;
+               firstfraglen = 0;
+       }
+
        while (firstfraglen) {
                if (count == frags_max)
                        return -EINVAL;
@@ -256,8 +268,16 @@ visor_copy_fragsinfo_from_skb(struct sk_buff *skb, unsigned int firstfraglen,
                                              page_offset,
                                              skb_shinfo(skb)->frags[ii].
                                              size, count, frags_max, frags);
-                       if (!count)
-                               return -EIO;
+                       /*
+                        * add_physinfo_entries only returns
+                        * zero if the frags array is out of room
+                        * That should never happen because we
+                        * fail above, if count+numfrags > frags_max.
+                        * Given that theres no recovery mechanism from putting
+                        * half a packet in the I/O channel, panic here as this
+                        * should never happen
+                        */
+                       BUG_ON(!count);
                }
        }
        if (skb_shinfo(skb)->frag_list) {
@@ -279,222 +299,15 @@ visor_copy_fragsinfo_from_skb(struct sk_buff *skb, unsigned int firstfraglen,
        return count;
 }
 
-/**
- *     visort_thread_start - starts thread for the device
- *     @thrinfo: The thread to start
- *     @threadfn: Function the thread starts
- *     @thrcontext: Context to pass to the thread, i.e. devdata
- *     @name:  string describing name of thread
- *
- *     Starts a thread for the device, currently only thread is
- *     process_incoming_rsps
- *     Returns 0 on success;
- */
-static int visor_thread_start(struct visor_thread_info *thrinfo,
-                             int (*threadfn)(void *),
-                             void *thrcontext, char *name)
-{
-       /* used to stop the thread */
-       init_completion(&thrinfo->has_stopped);
-       thrinfo->task = kthread_run(threadfn, thrcontext, name);
-       if (IS_ERR(thrinfo->task)) {
-               thrinfo->id = 0;
-               return -EINVAL;
-       }
-       thrinfo->id = thrinfo->task->pid;
-       return 0;
-}
-
-/**
- *     visor_thread_stop - stop a thread for the device
- *     @thrinfo: The thread to stop
- *
- *     Stop the thread and wait for completion for a minute
- *     Returns void.
- */
-static void visor_thread_stop(struct visor_thread_info *thrinfo)
-{
-       if (!thrinfo->id)
-               return; /* thread not running */
-
-       kthread_stop(thrinfo->task);
-       /* give up if the thread has NOT died in 1 minute */
-       if (wait_for_completion_timeout(&thrinfo->has_stopped, 60 * HZ))
-               thrinfo->id = 0;
-}
-
-/* DebugFS code */
-static ssize_t info_debugfs_read(struct file *file, char __user *buf,
-                                size_t len, loff_t *offset)
-{
-       int i;
-       ssize_t bytes_read = 0;
-       int str_pos = 0;
-       struct visornic_devdata *devdata;
-       char *vbuf;
-
-       if (len > MAX_BUF)
-               len = MAX_BUF;
-       vbuf = kzalloc(len, GFP_KERNEL);
-       if (!vbuf)
-               return -ENOMEM;
-
-       /* for each vnic channel
-        * dump out channel specific data
-        */
-       for (i = 0; i < VISORNICSOPENMAX; i++) {
-               if (!num_visornic_open[i])
-                       continue;
-
-               devdata = netdev_priv(num_visornic_open[i]);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    "Vnic i = %d\n", i);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    "netdev = %s (0x%p), MAC Addr %pM\n",
-                                    num_visornic_open[i]->name,
-                                    num_visornic_open[i],
-                                    num_visornic_open[i]->dev_addr);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    "VisorNic Dev Info = 0x%p\n", devdata);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " num_rcv_bufs = %d\n",
-                                    devdata->num_rcv_bufs);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " max_oustanding_next_xmits = %d\n",
-                                   devdata->max_outstanding_net_xmits);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " upper_threshold_net_xmits = %d\n",
-                                    devdata->upper_threshold_net_xmits);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " lower_threshold_net_xmits = %d\n",
-                                    devdata->lower_threshold_net_xmits);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " queuefullmsg_logged = %d\n",
-                                    devdata->queuefullmsg_logged);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " chstat.got_rcv = %lu\n",
-                                    devdata->chstat.got_rcv);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " chstat.got_enbdisack = %lu\n",
-                                    devdata->chstat.got_enbdisack);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " chstat.got_xmit_done = %lu\n",
-                                    devdata->chstat.got_xmit_done);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " chstat.xmit_fail = %lu\n",
-                                    devdata->chstat.xmit_fail);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " chstat.sent_enbdis = %lu\n",
-                                    devdata->chstat.sent_enbdis);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " chstat.sent_promisc = %lu\n",
-                                    devdata->chstat.sent_promisc);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " chstat.sent_post = %lu\n",
-                                    devdata->chstat.sent_post);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " chstat.sent_xmit = %lu\n",
-                                    devdata->chstat.sent_xmit);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " chstat.reject_count = %lu\n",
-                                    devdata->chstat.reject_count);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " chstat.extra_rcvbufs_sent = %lu\n",
-                                    devdata->chstat.extra_rcvbufs_sent);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " n_rcv0 = %lu\n", devdata->n_rcv0);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " n_rcv1 = %lu\n", devdata->n_rcv1);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " n_rcv2 = %lu\n", devdata->n_rcv2);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " n_rcvx = %lu\n", devdata->n_rcvx);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " num_rcvbuf_in_iovm = %d\n",
-                                    atomic_read(&devdata->num_rcvbuf_in_iovm));
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " alloc_failed_in_if_needed_cnt = %lu\n",
-                                    devdata->alloc_failed_in_if_needed_cnt);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " alloc_failed_in_repost_rtn_cnt = %lu\n",
-                                    devdata->alloc_failed_in_repost_rtn_cnt);
-               /* str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                *                   " inner_loop_limit_reached_cnt = %lu\n",
-                *                   devdata->inner_loop_limit_reached_cnt);
-                */
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " found_repost_rcvbuf_cnt = %lu\n",
-                                    devdata->found_repost_rcvbuf_cnt);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " repost_found_skb_cnt = %lu\n",
-                                    devdata->repost_found_skb_cnt);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " n_repost_deficit = %lu\n",
-                                    devdata->n_repost_deficit);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " bad_rcv_buf = %lu\n",
-                                    devdata->bad_rcv_buf);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " n_rcv_packets_not_accepted = %lu\n",
-                                    devdata->n_rcv_packets_not_accepted);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " interrupts_rcvd = %llu\n",
-                                    devdata->interrupts_rcvd);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " interrupts_notme = %llu\n",
-                                    devdata->interrupts_notme);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " interrupts_disabled = %llu\n",
-                                    devdata->interrupts_disabled);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " busy_cnt = %llu\n",
-                                    devdata->busy_cnt);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " flow_control_upper_hits = %llu\n",
-                                    devdata->flow_control_upper_hits);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " flow_control_lower_hits = %llu\n",
-                                    devdata->flow_control_lower_hits);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " thread_wait_ms = %d\n",
-                                    devdata->thread_wait_ms);
-               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
-                                    " netif_queue = %s\n",
-                                    netif_queue_stopped(devdata->netdev) ?
-                                    "stopped" : "running");
-       }
-       bytes_read = simple_read_from_buffer(buf, len, offset, vbuf, str_pos);
-       kfree(vbuf);
-       return bytes_read;
-}
-
 static ssize_t enable_ints_write(struct file *file,
                                 const char __user *buffer,
                                 size_t count, loff_t *ppos)
 {
-       char buf[4];
-       int i, new_value;
-       struct visornic_devdata *devdata;
-
-       if (count >= ARRAY_SIZE(buf))
-               return -EINVAL;
-
-       buf[count] = '\0';
-       if (copy_from_user(buf, buffer, count))
-               return -EFAULT;
-
-       i = kstrtoint(buf, 10, &new_value);
-       if (i != 0)
-               return -EFAULT;
-
-       /* set all counts to new_value usually 0 */
-       for (i = 0; i < VISORNICSOPENMAX; i++) {
-               if (num_visornic_open[i]) {
-                       devdata = netdev_priv(num_visornic_open[i]);
-                       /* TODO update features bit in channel */
-               }
-       }
-
+       /*
+        * Don't want to break ABI here by having a debugfs
+        * file that no longer exists or is writable, so
+        * lets just make this a vestigual function
+        */
        return count;
 }
 
@@ -509,44 +322,29 @@ static ssize_t enable_ints_write(struct file *file,
  *     Returns void.
  */
 static void
-visornic_serverdown_complete(struct work_struct *work)
+visornic_serverdown_complete(struct visornic_devdata *devdata)
 {
-       struct visornic_devdata *devdata;
        struct net_device *netdev;
-       unsigned long flags;
-       int i = 0, count = 0;
 
-       devdata = container_of(work, struct visornic_devdata,
-                              serverdown_completion);
        netdev = devdata->netdev;
 
-       /* Stop using datachan */
-       visor_thread_stop(&devdata->threadinfo);
-
-       /* Inform Linux that the link is down */
-       netif_carrier_off(netdev);
-       netif_stop_queue(netdev);
+       /* Stop polling for interrupts */
+       del_timer_sync(&devdata->irq_poll_timer);
 
-       /* Free the skb for XMITs that haven't been serviced by the server
-        * We shouldn't have to inform Linux about these IOs because they
-        * are "lost in the ethernet"
-        */
-       skb_queue_purge(&devdata->xmitbufhead);
+       rtnl_lock();
+       dev_close(netdev);
+       rtnl_unlock();
 
-       spin_lock_irqsave(&devdata->priv_lock, flags);
-       /* free rcv buffers */
-       for (i = 0; i < devdata->num_rcv_bufs; i++) {
-               if (devdata->rcvbuf[i]) {
-                       kfree_skb(devdata->rcvbuf[i]);
-                       devdata->rcvbuf[i] = NULL;
-                       count++;
-               }
-       }
        atomic_set(&devdata->num_rcvbuf_in_iovm, 0);
-       spin_unlock_irqrestore(&devdata->priv_lock, flags);
+       devdata->chstat.sent_xmit = 0;
+       devdata->chstat.got_xmit_done = 0;
+
+       if (devdata->server_down_complete_func)
+               (*devdata->server_down_complete_func)(devdata->dev, 0);
 
        devdata->server_down = true;
        devdata->server_change_state = false;
+       devdata->server_down_complete_func = NULL;
 }
 
 /**
@@ -558,15 +356,31 @@ visornic_serverdown_complete(struct work_struct *work)
  *     Returns 0 if we scheduled the work, -EINVAL on error.
  */
 static int
-visornic_serverdown(struct visornic_devdata *devdata)
+visornic_serverdown(struct visornic_devdata *devdata,
+                   visorbus_state_complete_func complete_func)
 {
+       unsigned long flags;
+
+       spin_lock_irqsave(&devdata->priv_lock, flags);
        if (!devdata->server_down && !devdata->server_change_state) {
+               if (devdata->going_away) {
+                       spin_unlock_irqrestore(&devdata->priv_lock, flags);
+                       dev_dbg(&devdata->dev->device,
+                               "%s aborting because device removal pending\n",
+                               __func__);
+                       return -ENODEV;
+               }
                devdata->server_change_state = true;
-               queue_work(visornic_serverdown_workqueue,
-                          &devdata->serverdown_completion);
+               devdata->server_down_complete_func = complete_func;
+               spin_unlock_irqrestore(&devdata->priv_lock, flags);
+               visornic_serverdown_complete(devdata);
        } else if (devdata->server_change_state) {
+               dev_dbg(&devdata->dev->device, "%s changing state\n",
+                       __func__);
+               spin_unlock_irqrestore(&devdata->priv_lock, flags);
                return -EINVAL;
-       }
+       } else
+               spin_unlock_irqrestore(&devdata->priv_lock, flags);
        return 0;
 }
 
@@ -625,11 +439,14 @@ post_skb(struct uiscmdrsp *cmdrsp,
        if ((cmdrsp->net.rcvpost.frag.pi_off + skb->len) <= PI_PAGE_SIZE) {
                cmdrsp->net.type = NET_RCV_POST;
                cmdrsp->cmdtype = CMD_NET_TYPE;
-               visorchannel_signalinsert(devdata->dev->visorchannel,
+               if (visorchannel_signalinsert(devdata->dev->visorchannel,
                                          IOCHAN_TO_IOPART,
-                                         cmdrsp);
-               atomic_inc(&devdata->num_rcvbuf_in_iovm);
-               devdata->chstat.sent_post++;
+                                         cmdrsp)) {
+                       atomic_inc(&devdata->num_rcvbuf_in_iovm);
+                       devdata->chstat.sent_post++;
+               } else {
+                       devdata->chstat.sent_post_failed++;
+               }
        }
 }
 
@@ -651,10 +468,10 @@ send_enbdis(struct net_device *netdev, int state,
        devdata->cmdrsp_rcv->net.enbdis.context = netdev;
        devdata->cmdrsp_rcv->net.type = NET_RCV_ENBDIS;
        devdata->cmdrsp_rcv->cmdtype = CMD_NET_TYPE;
-       visorchannel_signalinsert(devdata->dev->visorchannel,
+       if (visorchannel_signalinsert(devdata->dev->visorchannel,
                                  IOCHAN_TO_IOPART,
-                                 devdata->cmdrsp_rcv);
-       devdata->chstat.sent_enbdis++;
+                                 devdata->cmdrsp_rcv))
+               devdata->chstat.sent_enbdis++;
 }
 
 /**
@@ -676,9 +493,6 @@ visornic_disable_with_timeout(struct net_device *netdev, const int timeout)
        unsigned long flags;
        int wait = 0;
 
-       /* stop the transmit queue so nothing more can be transmitted */
-       netif_stop_queue(netdev);
-
        /* send a msg telling the other end we are stopping incoming pkts */
        spin_lock_irqsave(&devdata->priv_lock, flags);
        devdata->enabled = 0;
@@ -695,12 +509,14 @@ visornic_disable_with_timeout(struct net_device *netdev, const int timeout)
         * when it gets a disable.
         */
        spin_lock_irqsave(&devdata->priv_lock, flags);
-       while ((timeout == VISORNIC_INFINITE_RESPONSE_WAIT) ||
+       while ((timeout == VISORNIC_INFINITE_RSP_WAIT) ||
               (wait < timeout)) {
                if (devdata->enab_dis_acked)
                        break;
                if (devdata->server_down || devdata->server_change_state) {
                        spin_unlock_irqrestore(&devdata->priv_lock, flags);
+                       dev_dbg(&netdev->dev, "%s server went away\n",
+                               __func__);
                        return -EIO;
                }
                set_current_state(TASK_INTERRUPTIBLE);
@@ -722,10 +538,16 @@ visornic_disable_with_timeout(struct net_device *netdev, const int timeout)
                                break;
                }
        }
-
        /* we've set enabled to 0, so we can give up the lock. */
        spin_unlock_irqrestore(&devdata->priv_lock, flags);
 
+       /* stop the transmit queue so nothing more can be transmitted */
+       netif_stop_queue(netdev);
+
+       napi_disable(&devdata->napi);
+
+       skb_queue_purge(&devdata->xmitbufhead);
+
        /* Free rcv buffers - other end has automatically unposed them on
         * disable
         */
@@ -736,13 +558,6 @@ visornic_disable_with_timeout(struct net_device *netdev, const int timeout)
                }
        }
 
-       /* remove references from array */
-       for (i = 0; i < VISORNICSOPENMAX; i++)
-               if (num_visornic_open[i] == netdev) {
-                       num_visornic_open[i] = NULL;
-                       break;
-               }
-
        return 0;
 }
 
@@ -814,11 +629,15 @@ visornic_enable_with_timeout(struct net_device *netdev, const int timeout)
         * gets a disable.
         */
        i = init_rcv_bufs(netdev, devdata);
-       if (i < 0)
+       if (i < 0) {
+               dev_err(&netdev->dev,
+                       "%s failed to init rcv bufs (%d)\n", __func__, i);
                return i;
+       }
 
        spin_lock_irqsave(&devdata->priv_lock, flags);
        devdata->enabled = 1;
+       devdata->enab_dis_acked = 0;
 
        /* now we're ready, let's send an ENB to uisnic but until we get
         * an ACK back from uisnic, we'll drop the packets
@@ -829,15 +648,18 @@ visornic_enable_with_timeout(struct net_device *netdev, const int timeout)
        /* send enable and wait for ack -- don't hold lock when sending enable
         * because if the queue is full, insert might sleep.
         */
+       napi_enable(&devdata->napi);
        send_enbdis(netdev, 1, devdata);
 
        spin_lock_irqsave(&devdata->priv_lock, flags);
-       while ((timeout == VISORNIC_INFINITE_RESPONSE_WAIT) ||
+       while ((timeout == VISORNIC_INFINITE_RSP_WAIT) ||
               (wait < timeout)) {
                if (devdata->enab_dis_acked)
                        break;
                if (devdata->server_down || devdata->server_change_state) {
                        spin_unlock_irqrestore(&devdata->priv_lock, flags);
+                       dev_dbg(&netdev->dev, "%s server went away\n",
+                               __func__);
                        return -EIO;
                }
                set_current_state(TASK_INTERRUPTIBLE);
@@ -848,19 +670,13 @@ visornic_enable_with_timeout(struct net_device *netdev, const int timeout)
 
        spin_unlock_irqrestore(&devdata->priv_lock, flags);
 
-       if (!devdata->enab_dis_acked)
+       if (!devdata->enab_dis_acked) {
+               dev_err(&netdev->dev, "%s missing ACK\n", __func__);
                return -EIO;
-
-       /* find an open slot in the array to save off VisorNic references
-        * for debug
-        */
-       for (i = 0; i < VISORNICSOPENMAX; i++) {
-               if (!num_visornic_open[i]) {
-                       num_visornic_open[i] = netdev;
-                       break;
-               }
        }
 
+       netif_start_queue(netdev);
+
        return 0;
 }
 
@@ -882,20 +698,29 @@ visornic_timeout_reset(struct work_struct *work)
        devdata = container_of(work, struct visornic_devdata, timeout_reset);
        netdev = devdata->netdev;
 
-       netif_stop_queue(netdev);
-       response = visornic_disable_with_timeout(netdev, 100);
+       rtnl_lock();
+       if (!netif_running(netdev)) {
+               rtnl_unlock();
+               return;
+       }
+
+       response = visornic_disable_with_timeout(netdev,
+                                                VISORNIC_INFINITE_RSP_WAIT);
        if (response)
                goto call_serverdown;
 
-       response = visornic_enable_with_timeout(netdev, 100);
+       response = visornic_enable_with_timeout(netdev,
+                                               VISORNIC_INFINITE_RSP_WAIT);
        if (response)
                goto call_serverdown;
-       netif_wake_queue(netdev);
+
+       rtnl_unlock();
 
        return;
 
 call_serverdown:
-       visornic_serverdown(devdata);
+       visornic_serverdown(devdata, NULL);
+       rtnl_unlock();
 }
 
 /**
@@ -908,12 +733,7 @@ call_serverdown:
 static int
 visornic_open(struct net_device *netdev)
 {
-       visornic_enable_with_timeout(netdev, VISORNIC_INFINITE_RESPONSE_WAIT);
-
-       /* start the interface's transmit queue, allowing it to accept
-        * packets for transmission
-        */
-       netif_start_queue(netdev);
+       visornic_enable_with_timeout(netdev, VISORNIC_INFINITE_RSP_WAIT);
 
        return 0;
 }
@@ -928,12 +748,58 @@ visornic_open(struct net_device *netdev)
 static int
 visornic_close(struct net_device *netdev)
 {
-       netif_stop_queue(netdev);
-       visornic_disable_with_timeout(netdev, VISORNIC_INFINITE_RESPONSE_WAIT);
+       visornic_disable_with_timeout(netdev, VISORNIC_INFINITE_RSP_WAIT);
 
        return 0;
 }
 
+/**
+ *     devdata_xmits_outstanding - compute outstanding xmits
+ *     @devdata: visornic_devdata for device
+ *
+ *     Return value is the number of outstanding xmits.
+ */
+static unsigned long devdata_xmits_outstanding(struct visornic_devdata *devdata)
+{
+       if (devdata->chstat.sent_xmit >= devdata->chstat.got_xmit_done)
+               return devdata->chstat.sent_xmit -
+                       devdata->chstat.got_xmit_done;
+       else
+               return (ULONG_MAX - devdata->chstat.got_xmit_done
+                       + devdata->chstat.sent_xmit + 1);
+}
+
+/**
+ *     vnic_hit_high_watermark
+ *     @devdata: indicates visornic device we are checking
+ *     @high_watermark: max num of unacked xmits we will tolerate,
+ *                       before we will start throttling
+ *
+ *      Returns true iff the number of unacked xmits sent to
+ *      the IO partition is >= high_watermark.
+ */
+static inline bool vnic_hit_high_watermark(struct visornic_devdata *devdata,
+                                          ulong high_watermark)
+{
+       return (devdata_xmits_outstanding(devdata) >= high_watermark);
+}
+
+/**
+ *     vnic_hit_low_watermark
+ *     @devdata: indicates visornic device we are checking
+ *     @low_watermark: we will wait until the num of unacked xmits
+ *                      drops to this value or lower before we start
+ *                      transmitting again
+ *
+ *      Returns true iff the number of unacked xmits sent to
+ *      the IO partition is <= low_watermark.
+ */
+static inline bool vnic_hit_low_watermark(struct visornic_devdata *devdata,
+                                         ulong low_watermark)
+{
+       return (devdata_xmits_outstanding(devdata) <= low_watermark);
+}
+
 /**
  *     visornic_xmit - send a packet to the IO Partition
  *     @skb: Packet to be sent
@@ -944,7 +810,7 @@ visornic_close(struct net_device *netdev)
  *     function is protected from concurrent calls by a spinlock xmit_lock
  *     in the net_device struct, but as soon as the function returns it
  *     can be called again.
- *     Returns NETDEV_TX_OK for success, NETDEV_TX_BUSY for error.
+ *     Returns NETDEV_TX_OK.
  */
 static int
 visornic_xmit(struct sk_buff *skb, struct net_device *netdev)
@@ -961,7 +827,10 @@ visornic_xmit(struct sk_buff *skb, struct net_device *netdev)
            devdata->server_change_state) {
                spin_unlock_irqrestore(&devdata->priv_lock, flags);
                devdata->busy_cnt++;
-               return NETDEV_TX_BUSY;
+               dev_dbg(&netdev->dev,
+                       "%s busy - queue stopped\n", __func__);
+               kfree_skb(skb);
+               return NETDEV_TX_OK;
        }
 
        /* sk_buff struct is used to host network data throughout all the
@@ -979,7 +848,11 @@ visornic_xmit(struct sk_buff *skb, struct net_device *netdev)
        if (firstfraglen < ETH_HEADER_SIZE) {
                spin_unlock_irqrestore(&devdata->priv_lock, flags);
                devdata->busy_cnt++;
-               return NETDEV_TX_BUSY;
+               dev_err(&netdev->dev,
+                       "%s busy - first frag too small (%d)\n",
+                       __func__, firstfraglen);
+               kfree_skb(skb);
+               return NETDEV_TX_OK;
        }
 
        if ((len < ETH_MIN_PACKET_SIZE) &&
@@ -1002,13 +875,8 @@ visornic_xmit(struct sk_buff *skb, struct net_device *netdev)
        /* save the pointer to skb -- we'll need it for completion */
        cmdrsp->net.buf = skb;
 
-       if (((devdata->chstat.sent_xmit >= devdata->chstat.got_xmit_done) &&
-            (devdata->chstat.sent_xmit - devdata->chstat.got_xmit_done >=
-            devdata->max_outstanding_net_xmits)) ||
-            ((devdata->chstat.sent_xmit < devdata->chstat.got_xmit_done) &&
-            (ULONG_MAX - devdata->chstat.got_xmit_done +
-             devdata->chstat.sent_xmit >=
-             devdata->max_outstanding_net_xmits))) {
+       if (vnic_hit_high_watermark(devdata,
+                                   devdata->max_outstanding_net_xmits)) {
                /* too many NET_XMITs queued over to IOVM - need to wait
                 */
                devdata->chstat.reject_count++;
@@ -1018,7 +886,11 @@ visornic_xmit(struct sk_buff *skb, struct net_device *netdev)
                netif_stop_queue(netdev);
                spin_unlock_irqrestore(&devdata->priv_lock, flags);
                devdata->busy_cnt++;
-               return NETDEV_TX_BUSY;
+               dev_dbg(&netdev->dev,
+                       "%s busy - waiting for iovm to catch up\n",
+                       __func__);
+               kfree_skb(skb);
+               return NETDEV_TX_OK;
        }
        if (devdata->queuefullmsg_logged)
                devdata->queuefullmsg_logged = 0;
@@ -1055,10 +927,13 @@ visornic_xmit(struct sk_buff *skb, struct net_device *netdev)
                visor_copy_fragsinfo_from_skb(skb, firstfraglen,
                                              MAX_PHYS_INFO,
                                              cmdrsp->net.xmt.frags);
-       if (cmdrsp->net.xmt.num_frags == -1) {
+       if (cmdrsp->net.xmt.num_frags < 0) {
                spin_unlock_irqrestore(&devdata->priv_lock, flags);
                devdata->busy_cnt++;
-               return NETDEV_TX_BUSY;
+               dev_err(&netdev->dev,
+                       "%s busy - copy frags failed\n", __func__);
+               kfree_skb(skb);
+               return NETDEV_TX_OK;
        }
 
        if (!visorchannel_signalinsert(devdata->dev->visorchannel,
@@ -1066,18 +941,15 @@ visornic_xmit(struct sk_buff *skb, struct net_device *netdev)
                netif_stop_queue(netdev);
                spin_unlock_irqrestore(&devdata->priv_lock, flags);
                devdata->busy_cnt++;
-               return NETDEV_TX_BUSY;
+               dev_dbg(&netdev->dev,
+                       "%s busy - signalinsert failed\n", __func__);
+               kfree_skb(skb);
+               return NETDEV_TX_OK;
        }
 
        /* Track the skbs that have been sent to the IOVM for XMIT */
        skb_queue_head(&devdata->xmitbufhead, skb);
 
-       /* set the last transmission start time
-        * linux doc says: Do not forget to update netdev->trans_start to
-        * jiffies after each new tx packet is given to the hardware.
-        */
-       netdev->trans_start = jiffies;
-
        /* update xmt stats */
        devdata->net_stats.tx_packets++;
        devdata->net_stats.tx_bytes += skb->len;
@@ -1086,18 +958,16 @@ visornic_xmit(struct sk_buff *skb, struct net_device *netdev)
        /* check to see if we have hit the high watermark for
         * netif_stop_queue()
         */
-       if (((devdata->chstat.sent_xmit >= devdata->chstat.got_xmit_done) &&
-            (devdata->chstat.sent_xmit - devdata->chstat.got_xmit_done >=
-             devdata->upper_threshold_net_xmits)) ||
-           ((devdata->chstat.sent_xmit < devdata->chstat.got_xmit_done) &&
-            (ULONG_MAX - devdata->chstat.got_xmit_done +
-             devdata->chstat.sent_xmit >=
-             devdata->upper_threshold_net_xmits))) {
+       if (vnic_hit_high_watermark(devdata,
+                                   devdata->upper_threshold_net_xmits)) {
                /* too many NET_XMITs queued over to IOVM - need to wait */
                netif_stop_queue(netdev); /* calling stop queue - call
                                           * netif_wake_queue() after lower
                                           * threshold
                                           */
+               dev_dbg(&netdev->dev,
+                       "%s busy - invoking iovm flow control\n",
+                       __func__);
                devdata->flow_control_upper_hits++;
        }
        spin_unlock_irqrestore(&devdata->priv_lock, flags);
@@ -1112,27 +982,12 @@ visornic_xmit(struct sk_buff *skb, struct net_device *netdev)
  *
  *     Returns the net_device_stats for the device
  */
-static struct net_device_stats *
-visornic_get_stats(struct net_device *netdev)
-{
-       struct visornic_devdata *devdata = netdev_priv(netdev);
-
-       return &devdata->net_stats;
-}
-
-/**
- *     visornic_ioctl - ioctl function for netdevice.
- *     @netdev: netdevice
- *     @ifr: ignored
- *     @cmd: ignored
- *
- *     Currently not supported.
- *     Returns EOPNOTSUPP
- */
-static int
-visornic_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
+static struct net_device_stats *
+visornic_get_stats(struct net_device *netdev)
 {
-       return -EOPNOTSUPP;
+       struct visornic_devdata *devdata = netdev_priv(netdev);
+
+       return &devdata->net_stats;
 }
 
 /**
@@ -1201,15 +1056,24 @@ visornic_xmit_timeout(struct net_device *netdev)
        unsigned long flags;
 
        spin_lock_irqsave(&devdata->priv_lock, flags);
+       if (devdata->going_away) {
+               spin_unlock_irqrestore(&devdata->priv_lock, flags);
+               dev_dbg(&devdata->dev->device,
+                       "%s aborting because device removal pending\n",
+                       __func__);
+               return;
+       }
+
        /* Ensure that a ServerDown message hasn't been received */
        if (!devdata->enabled ||
            (devdata->server_down && !devdata->server_change_state)) {
+               dev_dbg(&netdev->dev, "%s no processing\n",
+                       __func__);
                spin_unlock_irqrestore(&devdata->priv_lock, flags);
                return;
        }
-       spin_unlock_irqrestore(&devdata->priv_lock, flags);
-
        queue_work(visornic_timeout_reset_workqueue, &devdata->timeout_reset);
+       spin_unlock_irqrestore(&devdata->priv_lock, flags);
 }
 
 /**
@@ -1281,7 +1145,6 @@ repost_return(struct uiscmdrsp *cmdrsp, struct visornic_devdata *devdata,
                        devdata->bad_rcv_buf++;
                }
        }
-       atomic_dec(&devdata->usage);
        return status;
 }
 
@@ -1293,18 +1156,16 @@ repost_return(struct uiscmdrsp *cmdrsp, struct visornic_devdata *devdata,
  *     it up the stack.
  *     Returns void
  */
-static void
+static int
 visornic_rx(struct uiscmdrsp *cmdrsp)
 {
        struct visornic_devdata *devdata;
        struct sk_buff *skb, *prev, *curr;
        struct net_device *netdev;
-       int cc, currsize, off, status;
+       int cc, currsize, off;
        struct ethhdr *eth;
        unsigned long flags;
-#ifdef DEBUG
-       struct phys_info testfrags[MAX_PHYS_INFO];
-#endif
+       int rx_count = 0;
 
        /* post new rcv buf to the other end using the cmdrsp we have at hand
         * post it without holding lock - but we'll use the signal lock to
@@ -1314,18 +1175,6 @@ visornic_rx(struct uiscmdrsp *cmdrsp)
        skb = cmdrsp->net.buf;
        netdev = skb->dev;
 
-       if (!netdev) {
-               /* We must have previously downed this network device and
-                * this skb and device is no longer valid. This also means
-                * the skb reference was removed from devdata->rcvbuf so no
-                * need to search for it.
-                * All we can do is free the skb and return.
-                * Note: We crash if we try to log this here.
-                */
-               kfree_skb(skb);
-               return;
-       }
-
        devdata = netdev_priv(netdev);
 
        spin_lock_irqsave(&devdata->priv_lock, flags);
@@ -1335,10 +1184,6 @@ visornic_rx(struct uiscmdrsp *cmdrsp)
        devdata->net_stats.rx_packets++;
        devdata->net_stats.rx_bytes = skb->len;
 
-       atomic_inc(&devdata->usage);    /* don't want a close to happen before
-                                        *  we're done here
-                                        */
-
        /* set length to how much was ACTUALLY received -
         * NOTE: rcv_done_len includes actual length of data rcvd
         * including ethhdr
@@ -1352,7 +1197,7 @@ visornic_rx(struct uiscmdrsp *cmdrsp)
                 */
                spin_unlock_irqrestore(&devdata->priv_lock, flags);
                repost_return(cmdrsp, devdata, skb, netdev);
-               return;
+               return rx_count;
        }
 
        spin_unlock_irqrestore(&devdata->priv_lock, flags);
@@ -1371,7 +1216,7 @@ visornic_rx(struct uiscmdrsp *cmdrsp)
                        if (repost_return(cmdrsp, devdata, skb, netdev) < 0)
                                dev_err(&devdata->netdev->dev,
                                        "repost_return failed");
-                       return;
+                       return rx_count;
                }
                /* length rcvd is greater than firstfrag in this skb rcv buf  */
                skb->tail += RCVPOST_BUF_SIZE;  /* amount in skb->data */
@@ -1386,7 +1231,7 @@ visornic_rx(struct uiscmdrsp *cmdrsp)
                        if (repost_return(cmdrsp, devdata, skb, netdev) < 0)
                                dev_err(&devdata->netdev->dev,
                                        "repost_return failed");
-                       return;
+                       return rx_count;
                }
                skb->tail += skb->len;
                skb->data_len = 0;      /* nothing rcvd in frag_list */
@@ -1405,7 +1250,7 @@ visornic_rx(struct uiscmdrsp *cmdrsp)
        if (cmdrsp->net.rcv.rcvbuf[0] != skb) {
                if (repost_return(cmdrsp, devdata, skb, netdev) < 0)
                        dev_err(&devdata->netdev->dev, "repost_return failed");
-               return;
+               return rx_count;
        }
 
        if (cmdrsp->net.rcv.numrcvbufs > 1) {
@@ -1431,29 +1276,12 @@ visornic_rx(struct uiscmdrsp *cmdrsp)
                        curr->data_len = 0;
                        off += currsize;
                }
-#ifdef DEBUG
                /* assert skb->len == off */
                if (skb->len != off) {
-                       dev_err(&devdata->netdev->dev,
-                               "%s something wrong; skb->len:%d != off:%d\n",
-                               netdev->name, skb->len, off);
-               }
-               /* test code */
-               cc = util_copy_fragsinfo_from_skb("rcvchaintest", skb,
-                                                 RCVPOST_BUF_SIZE,
-                                                 MAX_PHYS_INFO, testfrags);
-               if (cc != cmdrsp->net.rcv.numrcvbufs) {
-                       dev_err(&devdata->netdev->dev,
-                               "**** %s Something wrong; rcvd chain length %d different from one we calculated %d\n",
-                               netdev->name, cmdrsp->net.rcv.numrcvbufs, cc);
+                       netdev_err(devdata->netdev,
+                                  "something wrong; skb->len:%d != off:%d\n",
+                                  skb->len, off);
                }
-               for (i = 0; i < cc; i++) {
-                       dev_inf(&devdata->netdev->dev,
-                               "test:RCVPOST_BUF_SIZE:%d[%d] pfn:%llu off:0x%x len:%d\n",
-                               RCVPOST_BUF_SIZE, i, testfrags[i].pi_pfn,
-                               testfrags[i].pi_off, testfrags[i].pi_len);
-               }
-#endif
        }
 
        /* set up packet's protocl type using ethernet header - this
@@ -1505,10 +1333,11 @@ visornic_rx(struct uiscmdrsp *cmdrsp)
                /* drop packet - don't forward it up to OS */
                devdata->n_rcv_packets_not_accepted++;
                repost_return(cmdrsp, devdata, skb, netdev);
-               return;
+               return rx_count;
        } while (0);
 
-       status = netif_rx(skb);
+       rx_count++;
+       netif_receive_skb(skb);
        /* netif_rx returns various values, but "in practice most drivers
         * ignore the return value
         */
@@ -1520,6 +1349,7 @@ visornic_rx(struct uiscmdrsp *cmdrsp)
         * new rcv buffer.
         */
        repost_return(cmdrsp, devdata, skb, netdev);
+       return rx_count;
 }
 
 /**
@@ -1545,14 +1375,11 @@ devdata_initialize(struct visornic_devdata *devdata, struct visor_device *dev)
        spin_unlock(&dev_num_pool_lock);
        if (devnum == MAXDEVICES)
                devnum = -1;
-       if (devnum < 0) {
-               kfree(devdata);
+       if (devnum < 0)
                return NULL;
-       }
        devdata->devnum = devnum;
        devdata->dev = dev;
        strncpy(devdata->name, dev_name(&dev->device), sizeof(devdata->name));
-       kref_init(&devdata->kref);
        spin_lock(&lock_all_devices);
        list_add_tail(&devdata->list_all, &list_all_devices);
        spin_unlock(&lock_all_devices);
@@ -1560,24 +1387,23 @@ devdata_initialize(struct visornic_devdata *devdata, struct visor_device *dev)
 }
 
 /**
- *     devdata_release - Frees up a devdata
- *     @mykref: kref to the devdata
+ *     devdata_release - Frees up references in devdata
+ *     @devdata: struct to clean up
  *
- *     Frees up a devdata.
+ *     Frees up references in devdata.
  *     Returns void
  */
-static void devdata_release(struct kref *mykref)
+static void devdata_release(struct visornic_devdata *devdata)
 {
-       struct visornic_devdata *devdata =
-               container_of(mykref, struct visornic_devdata, kref);
-
        spin_lock(&dev_num_pool_lock);
        clear_bit(devdata->devnum, dev_num_pool);
        spin_unlock(&dev_num_pool_lock);
        spin_lock(&lock_all_devices);
        list_del(&devdata->list_all);
        spin_unlock(&lock_all_devices);
-       kfree(devdata);
+       kfree(devdata->rcvbuf);
+       kfree(devdata->cmdrsp_rcv);
+       kfree(devdata->xmit_cmdrsp);
 }
 
 static const struct net_device_ops visornic_dev_ops = {
@@ -1585,12 +1411,163 @@ static const struct net_device_ops visornic_dev_ops = {
        .ndo_stop = visornic_close,
        .ndo_start_xmit = visornic_xmit,
        .ndo_get_stats = visornic_get_stats,
-       .ndo_do_ioctl = visornic_ioctl,
        .ndo_change_mtu = visornic_change_mtu,
        .ndo_tx_timeout = visornic_xmit_timeout,
        .ndo_set_rx_mode = visornic_set_multi,
 };
 
+/* DebugFS code */
+static ssize_t info_debugfs_read(struct file *file, char __user *buf,
+                                size_t len, loff_t *offset)
+{
+       ssize_t bytes_read = 0;
+       int str_pos = 0;
+       struct visornic_devdata *devdata;
+       struct net_device *dev;
+       char *vbuf;
+
+       if (len > MAX_BUF)
+               len = MAX_BUF;
+       vbuf = kzalloc(len, GFP_KERNEL);
+       if (!vbuf)
+               return -ENOMEM;
+
+       /* for each vnic channel
+        * dump out channel specific data
+        */
+       rcu_read_lock();
+       for_each_netdev_rcu(current->nsproxy->net_ns, dev) {
+               /*
+                * Only consider netdevs that are visornic, and are open
+                */
+               if ((dev->netdev_ops != &visornic_dev_ops) ||
+                   (!netif_queue_stopped(dev)))
+                       continue;
+
+               devdata = netdev_priv(dev);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    "netdev = %s (0x%p), MAC Addr %pM\n",
+                                    dev->name,
+                                    dev,
+                                    dev->dev_addr);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    "VisorNic Dev Info = 0x%p\n", devdata);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " num_rcv_bufs = %d\n",
+                                    devdata->num_rcv_bufs);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " max_oustanding_next_xmits = %lu\n",
+                                   devdata->max_outstanding_net_xmits);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " upper_threshold_net_xmits = %lu\n",
+                                    devdata->upper_threshold_net_xmits);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " lower_threshold_net_xmits = %lu\n",
+                                    devdata->lower_threshold_net_xmits);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " queuefullmsg_logged = %d\n",
+                                    devdata->queuefullmsg_logged);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " chstat.got_rcv = %lu\n",
+                                    devdata->chstat.got_rcv);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " chstat.got_enbdisack = %lu\n",
+                                    devdata->chstat.got_enbdisack);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " chstat.got_xmit_done = %lu\n",
+                                    devdata->chstat.got_xmit_done);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " chstat.xmit_fail = %lu\n",
+                                    devdata->chstat.xmit_fail);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " chstat.sent_enbdis = %lu\n",
+                                    devdata->chstat.sent_enbdis);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " chstat.sent_promisc = %lu\n",
+                                    devdata->chstat.sent_promisc);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " chstat.sent_post = %lu\n",
+                                    devdata->chstat.sent_post);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " chstat.sent_post_failed = %lu\n",
+                                    devdata->chstat.sent_post_failed);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " chstat.sent_xmit = %lu\n",
+                                    devdata->chstat.sent_xmit);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " chstat.reject_count = %lu\n",
+                                    devdata->chstat.reject_count);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " chstat.extra_rcvbufs_sent = %lu\n",
+                                    devdata->chstat.extra_rcvbufs_sent);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " n_rcv0 = %lu\n", devdata->n_rcv0);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " n_rcv1 = %lu\n", devdata->n_rcv1);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " n_rcv2 = %lu\n", devdata->n_rcv2);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " n_rcvx = %lu\n", devdata->n_rcvx);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " num_rcvbuf_in_iovm = %d\n",
+                                    atomic_read(&devdata->num_rcvbuf_in_iovm));
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " alloc_failed_in_if_needed_cnt = %lu\n",
+                                    devdata->alloc_failed_in_if_needed_cnt);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " alloc_failed_in_repost_rtn_cnt = %lu\n",
+                                    devdata->alloc_failed_in_repost_rtn_cnt);
+               /* str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                *                   " inner_loop_limit_reached_cnt = %lu\n",
+                *                   devdata->inner_loop_limit_reached_cnt);
+                */
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " found_repost_rcvbuf_cnt = %lu\n",
+                                    devdata->found_repost_rcvbuf_cnt);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " repost_found_skb_cnt = %lu\n",
+                                    devdata->repost_found_skb_cnt);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " n_repost_deficit = %lu\n",
+                                    devdata->n_repost_deficit);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " bad_rcv_buf = %lu\n",
+                                    devdata->bad_rcv_buf);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " n_rcv_packets_not_accepted = %lu\n",
+                                    devdata->n_rcv_packets_not_accepted);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " interrupts_rcvd = %llu\n",
+                                    devdata->interrupts_rcvd);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " interrupts_notme = %llu\n",
+                                    devdata->interrupts_notme);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " interrupts_disabled = %llu\n",
+                                    devdata->interrupts_disabled);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " busy_cnt = %llu\n",
+                                    devdata->busy_cnt);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " flow_control_upper_hits = %llu\n",
+                                    devdata->flow_control_upper_hits);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " flow_control_lower_hits = %llu\n",
+                                    devdata->flow_control_lower_hits);
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " netif_queue = %s\n",
+                                    netif_queue_stopped(devdata->netdev) ?
+                                    "stopped" : "running");
+               str_pos += scnprintf(vbuf + str_pos, len - str_pos,
+                                    " xmits_outstanding = %lu\n",
+                                    devdata_xmits_outstanding(devdata));
+       }
+       rcu_read_unlock();
+       bytes_read = simple_read_from_buffer(buf, len, offset, vbuf, str_pos);
+       kfree(vbuf);
+       return bytes_read;
+}
+
 /**
  *     send_rcv_posts_if_needed
  *     @devdata: visornic device
@@ -1644,15 +1621,15 @@ send_rcv_posts_if_needed(struct visornic_devdata *devdata)
  *     Returns when response queue is empty or when the threadd stops.
  */
 static void
-drain_queue(struct uiscmdrsp *cmdrsp, struct visornic_devdata *devdata)
+service_resp_queue(struct uiscmdrsp *cmdrsp, struct visornic_devdata *devdata,
+                  int *rx_work_done)
 {
        unsigned long flags;
        struct net_device *netdev;
 
-       /* drain queue */
-       while (1) {
-               /* TODO: CLIENT ACQUIRE -- Don't really need this at the
-                * moment */
+       /* TODO: CLIENT ACQUIRE -- Don't really need this at the
+        * moment */
+       for (;;) {
                if (!visorchannel_signalremove(devdata->dev->visorchannel,
                                               IOCHAN_FROM_IOPART,
                                               cmdrsp))
@@ -1662,7 +1639,7 @@ drain_queue(struct uiscmdrsp *cmdrsp, struct visornic_devdata *devdata)
                case NET_RCV:
                        devdata->chstat.got_rcv++;
                        /* process incoming packet */
-                       visornic_rx(cmdrsp);
+                       *rx_work_done += visornic_rx(cmdrsp);
                        break;
                case NET_XMIT_DONE:
                        spin_lock_irqsave(&devdata->priv_lock, flags);
@@ -1678,16 +1655,8 @@ drain_queue(struct uiscmdrsp *cmdrsp, struct visornic_devdata *devdata)
                                 * the lower watermark for
                                 * netif_wake_queue()
                                 */
-                               if (((devdata->chstat.sent_xmit >=
-                                   devdata->chstat.got_xmit_done) &&
-                                   (devdata->chstat.sent_xmit -
-                                   devdata->chstat.got_xmit_done <=
-                                   devdata->lower_threshold_net_xmits)) ||
-                                   ((devdata->chstat.sent_xmit <
-                                   devdata->chstat.got_xmit_done) &&
-                                   (ULONG_MAX - devdata->chstat.got_xmit_done
-                                   + devdata->chstat.sent_xmit <=
-                                   devdata->lower_threshold_net_xmits))) {
+                               if (vnic_hit_low_watermark(devdata,
+                                       devdata->lower_threshold_net_xmits)) {
                                        /* enough NET_XMITs completed
                                         * so can restart netif queue
                                         */
@@ -1738,50 +1707,51 @@ drain_queue(struct uiscmdrsp *cmdrsp, struct visornic_devdata *devdata)
                        break;
                }
                /* cmdrsp is now available for reuse  */
-
-               if (kthread_should_stop())
-                       break;
        }
 }
 
+static int visornic_poll(struct napi_struct *napi, int budget)
+{
+       struct visornic_devdata *devdata = container_of(napi,
+                                                       struct visornic_devdata,
+                                                       napi);
+       int rx_count = 0;
+
+       send_rcv_posts_if_needed(devdata);
+       service_resp_queue(devdata->cmdrsp, devdata, &rx_count);
+
+       /*
+        * If there aren't any more packets to receive
+        * stop the poll
+        */
+       if (rx_count < budget)
+               napi_complete(napi);
+
+       return rx_count;
+}
+
 /**
- *     process_incoming_rsps   - Checks the status of the response queue.
+ *     poll_for_irq    - Checks the status of the response queue.
  *     @v: void pointer to the visronic devdata
  *
  *     Main function of the vnic_incoming thread. Peridocially check the
  *     response queue and drain it if needed.
  *     Returns when thread has stopped.
  */
-static int
-process_incoming_rsps(void *v)
+static void
+poll_for_irq(unsigned long v)
 {
-       struct visornic_devdata *devdata = v;
-       struct uiscmdrsp *cmdrsp = NULL;
-       const int SZ = SIZEOF_CMDRSP;
+       struct visornic_devdata *devdata = (struct visornic_devdata *)v;
 
-       cmdrsp = kmalloc(SZ, GFP_ATOMIC);
-       if (!cmdrsp)
-               complete_and_exit(&devdata->threadinfo.has_stopped, 0);
+       if (!visorchannel_signalempty(
+                                  devdata->dev->visorchannel,
+                                  IOCHAN_FROM_IOPART))
+               napi_schedule(&devdata->napi);
 
-       while (1) {
-               wait_event_interruptible_timeout(
-                       devdata->rsp_queue, (atomic_read(
-                                            &devdata->interrupt_rcvd) == 1),
-                               msecs_to_jiffies(devdata->thread_wait_ms));
+       atomic_set(&devdata->interrupt_rcvd, 0);
 
-               /* periodically check to see if there are any rcf bufs which
-                * need to get sent to the IOSP. This can only happen if
-                * we run out of memory when trying to allocate skbs.
-                */
-               atomic_set(&devdata->interrupt_rcvd, 0);
-               send_rcv_posts_if_needed(devdata);
-               drain_queue(cmdrsp, devdata);
-               if (kthread_should_stop())
-                       break;
-       }
+       mod_timer(&devdata->irq_poll_timer, msecs_to_jiffies(2));
 
-       kfree(cmdrsp);
-       complete_and_exit(&devdata->threadinfo.has_stopped, 0);
 }
 
 /**
@@ -1801,12 +1771,15 @@ static int visornic_probe(struct visor_device *dev)
        u64 features;
 
        netdev = alloc_etherdev(sizeof(struct visornic_devdata));
-       if (!netdev)
+       if (!netdev) {
+               dev_err(&dev->device,
+                       "%s alloc_etherdev failed\n", __func__);
                return -ENOMEM;
+       }
 
        netdev->netdev_ops = &visornic_dev_ops;
        netdev->watchdog_timeo = (5 * HZ);
-       netdev->dev.parent = &dev->device;
+       SET_NETDEV_DEV(netdev, &dev->device);
 
        /* Get MAC adddress from channel and read it into the device. */
        netdev->addr_len = ETH_ALEN;
@@ -1814,16 +1787,23 @@ static int visornic_probe(struct visor_device *dev)
                                  vnic.macaddr);
        err = visorbus_read_channel(dev, channel_offset, netdev->dev_addr,
                                    ETH_ALEN);
-       if (err < 0)
+       if (err < 0) {
+               dev_err(&dev->device,
+                       "%s failed to get mac addr from chan (%d)\n",
+                       __func__, err);
                goto cleanup_netdev;
+       }
 
        devdata = devdata_initialize(netdev_priv(netdev), dev);
        if (!devdata) {
+               dev_err(&dev->device,
+                       "%s devdata_initialize failed\n", __func__);
                err = -ENOMEM;
                goto cleanup_netdev;
        }
 
        devdata->netdev = netdev;
+       dev_set_drvdata(&dev->device, devdata);
        init_waitqueue_head(&devdata->rsp_queue);
        spin_lock_init(&devdata->priv_lock);
        devdata->enabled = 0; /* not yet */
@@ -1834,10 +1814,14 @@ static int visornic_probe(struct visor_device *dev)
                                  vnic.num_rcv_bufs);
        err = visorbus_read_channel(dev, channel_offset,
                                    &devdata->num_rcv_bufs, 4);
-       if (err)
+       if (err) {
+               dev_err(&dev->device,
+                       "%s failed to get #rcv bufs from chan (%d)\n",
+                       __func__, err);
                goto cleanup_netdev;
+       }
 
-       devdata->rcvbuf = kmalloc(sizeof(struct sk_buff *) *
+       devdata->rcvbuf = kzalloc(sizeof(struct sk_buff *) *
                                  devdata->num_rcv_bufs, GFP_KERNEL);
        if (!devdata->rcvbuf) {
                err = -ENOMEM;
@@ -1846,12 +1830,15 @@ static int visornic_probe(struct visor_device *dev)
 
        /* set the net_xmit outstanding threshold */
        /* always leave two slots open but you should have 3 at a minimum */
+       /* note that max_outstanding_net_xmits must be > 0 */
        devdata->max_outstanding_net_xmits =
-               max(3, ((devdata->num_rcv_bufs / 3) - 2));
+               max_t(unsigned long, 3, ((devdata->num_rcv_bufs / 3) - 2));
        devdata->upper_threshold_net_xmits =
-               max(2, devdata->max_outstanding_net_xmits - 1);
+               max_t(unsigned long,
+                     2, (devdata->max_outstanding_net_xmits - 1));
        devdata->lower_threshold_net_xmits =
-               max(1, devdata->max_outstanding_net_xmits / 2);
+               max_t(unsigned long,
+                     1, (devdata->max_outstanding_net_xmits / 2));
 
        skb_queue_head_init(&devdata->xmitbufhead);
 
@@ -1866,8 +1853,6 @@ static int visornic_probe(struct visor_device *dev)
                err = -ENOMEM;
                goto cleanup_xmit_cmdrsp;
        }
-       INIT_WORK(&devdata->serverdown_completion,
-                 visornic_serverdown_complete);
        INIT_WORK(&devdata->timeout_reset, visornic_timeout_reset);
        devdata->server_down = false;
        devdata->server_change_state = false;
@@ -1876,42 +1861,70 @@ static int visornic_probe(struct visor_device *dev)
        channel_offset = offsetof(struct spar_io_channel_protocol,
                                  vnic.mtu);
        err = visorbus_read_channel(dev, channel_offset, &netdev->mtu, 4);
-       if (err)
+       if (err) {
+               dev_err(&dev->device,
+                       "%s failed to get mtu from chan (%d)\n",
+                       __func__, err);
                goto cleanup_xmit_cmdrsp;
+       }
 
        /* TODO: Setup Interrupt information */
        /* Let's start our threads to get responses */
+       netif_napi_add(netdev, &devdata->napi, visornic_poll, 64);
+
+       setup_timer(&devdata->irq_poll_timer, poll_for_irq,
+                   (unsigned long)devdata);
+       /*
+        * Note: This time has to start running before the while
+        * loop below because the napi routine is responsible for
+        * setting enab_dis_acked
+        */
+       mod_timer(&devdata->irq_poll_timer, msecs_to_jiffies(2));
+
        channel_offset = offsetof(struct spar_io_channel_protocol,
                                  channel_header.features);
        err = visorbus_read_channel(dev, channel_offset, &features, 8);
-       if (err)
-               goto cleanup_xmit_cmdrsp;
+       if (err) {
+               dev_err(&dev->device,
+                       "%s failed to get features from chan (%d)\n",
+                       __func__, err);
+               goto cleanup_napi_add;
+       }
 
        features |= ULTRA_IO_CHANNEL_IS_POLLING;
        err = visorbus_write_channel(dev, channel_offset, &features, 8);
-       if (err)
-               goto cleanup_xmit_cmdrsp;
-
-       devdata->thread_wait_ms = 2;
-       visor_thread_start(&devdata->threadinfo, process_incoming_rsps,
-                          devdata, "vnic_incoming");
+       if (err) {
+               dev_err(&dev->device,
+                       "%s failed to set features in chan (%d)\n",
+                       __func__, err);
+               goto cleanup_napi_add;
+       }
 
        err = register_netdev(netdev);
-       if (err)
-               goto cleanup_thread_stop;
+       if (err) {
+               dev_err(&dev->device,
+                       "%s register_netdev failed (%d)\n", __func__, err);
+               goto cleanup_napi_add;
+       }
 
        /* create debgug/sysfs directories */
        devdata->eth_debugfs_dir = debugfs_create_dir(netdev->name,
                                                      visornic_debugfs_dir);
        if (!devdata->eth_debugfs_dir) {
+               dev_err(&dev->device,
+                       "%s debugfs_create_dir %s failed\n",
+                       __func__, netdev->name);
                err = -ENOMEM;
-               goto cleanup_thread_stop;
+               goto cleanup_xmit_cmdrsp;
        }
 
+       dev_info(&dev->device, "%s success netdev=%s\n",
+                __func__, netdev->name);
        return 0;
 
-cleanup_thread_stop:
-       visor_thread_stop(&devdata->threadinfo);
+cleanup_napi_add:
+       del_timer_sync(&devdata->irq_poll_timer);
+       netif_napi_del(&devdata->napi);
 
 cleanup_xmit_cmdrsp:
        kfree(devdata->xmit_cmdrsp);
@@ -1954,12 +1967,41 @@ static void host_side_disappeared(struct visornic_devdata *devdata)
 static void visornic_remove(struct visor_device *dev)
 {
        struct visornic_devdata *devdata = dev_get_drvdata(&dev->device);
+       struct net_device *netdev;
+       unsigned long flags;
 
-       if (!devdata)
+       if (!devdata) {
+               dev_err(&dev->device, "%s no devdata\n", __func__);
+               return;
+       }
+       spin_lock_irqsave(&devdata->priv_lock, flags);
+       if (devdata->going_away) {
+               spin_unlock_irqrestore(&devdata->priv_lock, flags);
+               dev_err(&dev->device, "%s already being removed\n", __func__);
                return;
+       }
+       devdata->going_away = true;
+       spin_unlock_irqrestore(&devdata->priv_lock, flags);
+       netdev = devdata->netdev;
+       if (!netdev) {
+               dev_err(&dev->device, "%s not net device\n", __func__);
+               return;
+       }
+
+       /* going_away prevents new items being added to the workqueues */
+       flush_workqueue(visornic_timeout_reset_workqueue);
+
+       debugfs_remove_recursive(devdata->eth_debugfs_dir);
+
+       unregister_netdev(netdev);  /* this will call visornic_close() */
+
+       del_timer_sync(&devdata->irq_poll_timer);
+       netif_napi_del(&devdata->napi);
+
        dev_set_drvdata(&dev->device, NULL);
        host_side_disappeared(devdata);
-       kref_put(&devdata->kref, devdata_release);
+       devdata_release(devdata);
+       free_netdev(netdev);
 }
 
 /**
@@ -1980,8 +2022,7 @@ static int visornic_pause(struct visor_device *dev,
 {
        struct visornic_devdata *devdata = dev_get_drvdata(&dev->device);
 
-       visornic_serverdown(devdata);
-       complete_func(dev, 0);
+       visornic_serverdown(devdata, complete_func);
        return 0;
 }
 
@@ -2003,37 +2044,40 @@ static int visornic_resume(struct visor_device *dev,
        unsigned long flags;
 
        devdata = dev_get_drvdata(&dev->device);
-       if (!devdata)
+       if (!devdata) {
+               dev_err(&dev->device, "%s no devdata\n", __func__);
                return -EINVAL;
+       }
 
        netdev = devdata->netdev;
 
-       if (devdata->server_down && !devdata->server_change_state) {
-               devdata->server_change_state = true;
-               /* Must transition channel to ATTACHED state BEFORE
-                * we can start using the device again.
-                * TODO: State transitions
-                */
-               visor_thread_start(&devdata->threadinfo, process_incoming_rsps,
-                                  devdata, "vnic_incoming");
-               init_rcv_bufs(netdev, devdata);
-               spin_lock_irqsave(&devdata->priv_lock, flags);
-               devdata->enabled = 1;
-
-               /* Now we're ready, let's send an ENB to uisnic but until
-                * we get an ACK back from uisnic, we'll drop the packets
-                */
-               devdata->enab_dis_acked = 0;
+       spin_lock_irqsave(&devdata->priv_lock, flags);
+       if (devdata->server_change_state) {
                spin_unlock_irqrestore(&devdata->priv_lock, flags);
-
-               /* send enable and wait for ack - don't hold lock when
-                * sending enable because if the queue if sull, insert
-                * might sleep.
-                */
-               send_enbdis(netdev, 1, devdata);
-       } else if (devdata->server_change_state) {
-               return -EIO;
+               dev_err(&dev->device, "%s server already changing state\n",
+                       __func__);
+               return -EINVAL;
+       }
+       if (!devdata->server_down) {
+               spin_unlock_irqrestore(&devdata->priv_lock, flags);
+               dev_err(&dev->device, "%s server not down\n", __func__);
+               complete_func(dev, 0);
+               return 0;
        }
+       devdata->server_change_state = true;
+       spin_unlock_irqrestore(&devdata->priv_lock, flags);
+
+       /* Must transition channel to ATTACHED state BEFORE
+        * we can start using the device again.
+        * TODO: State transitions
+        */
+       mod_timer(&devdata->irq_poll_timer, msecs_to_jiffies(2));
+
+       init_rcv_bufs(netdev, devdata);
+
+       rtnl_lock();
+       dev_open(netdev);
+       rtnl_unlock();
 
        complete_func(dev, 0);
        return 0;
@@ -2051,18 +2095,6 @@ static int visornic_init(void)
        struct dentry *ret;
        int err = -ENOMEM;
 
-       /* create workqueue for serverdown completion */
-       visornic_serverdown_workqueue =
-               create_singlethread_workqueue("visornic_serverdown");
-       if (!visornic_serverdown_workqueue)
-               return -ENOMEM;
-
-       /* create workqueue for tx timeout reset */
-       visornic_timeout_reset_workqueue =
-               create_singlethread_workqueue("visornic_timeout_reset");
-       if (!visornic_timeout_reset_workqueue)
-               return -ENOMEM;
-
        visornic_debugfs_dir = debugfs_create_dir("visornic", NULL);
        if (!visornic_debugfs_dir)
                return err;
@@ -2076,12 +2108,6 @@ static int visornic_init(void)
        if (!ret)
                goto cleanup_debugfs;
 
-       /* create workqueue for serverdown completion */
-       visornic_serverdown_workqueue =
-               create_singlethread_workqueue("visornic_serverdown");
-       if (!visornic_serverdown_workqueue)
-               goto cleanup_debugfs;
-
        /* create workqueue for tx timeout reset */
        visornic_timeout_reset_workqueue =
                create_singlethread_workqueue("visornic_timeout_reset");
@@ -2097,8 +2123,6 @@ static int visornic_init(void)
        return 0;
 
 cleanup_workqueue:
-       flush_workqueue(visornic_serverdown_workqueue);
-       destroy_workqueue(visornic_serverdown_workqueue);
        if (visornic_timeout_reset_workqueue) {
                flush_workqueue(visornic_timeout_reset_workqueue);
                destroy_workqueue(visornic_timeout_reset_workqueue);
@@ -2116,17 +2140,14 @@ cleanup_debugfs:
  */
 static void visornic_cleanup(void)
 {
-       if (visornic_serverdown_workqueue) {
-               flush_workqueue(visornic_serverdown_workqueue);
-               destroy_workqueue(visornic_serverdown_workqueue);
-       }
+       visorbus_unregister_visor_driver(&visornic_driver);
+
        if (visornic_timeout_reset_workqueue) {
                flush_workqueue(visornic_timeout_reset_workqueue);
                destroy_workqueue(visornic_timeout_reset_workqueue);
        }
        debugfs_remove_recursive(visornic_debugfs_dir);
 
-       visorbus_unregister_visor_driver(&visornic_driver);
        kfree(dev_num_pool);
        dev_num_pool = NULL;
 }
index 9cca97af304449c10616751e87800ebd2713b862..8e61a3b3e7e4771d445a7bbd5be9d87b5152fd1e 100644 (file)
@@ -101,13 +101,13 @@ struct image_desc {
        struct vme_resource *resource;  /* VME resource */
        int mmap_count;         /* Number of current mmap's */
 };
+
 static struct image_desc image[VME_DEVS];
 
 static struct cdev *vme_user_cdev;             /* Character device */
 static struct class *vme_user_sysfs_class;     /* Sysfs class */
 static struct vme_dev *vme_user_bridge;                /* Pointer to user device */
 
-
 static const int type[VME_DEVS] = {    MASTER_MINOR,   MASTER_MINOR,
                                        MASTER_MINOR,   MASTER_MINOR,
                                        SLAVE_MINOR,    SLAVE_MINOR,
@@ -120,125 +120,68 @@ struct vme_user_vma_priv {
        atomic_t refcnt;
 };
 
-
-/*
- * We are going ot alloc a page during init per window for small transfers.
- * Small transfers will go VME -> buffer -> user space. Larger (more than a
- * page) transfers will lock the user space buffer into memory and then
- * transfer the data directly into the user space buffers.
- */
 static ssize_t resource_to_user(int minor, char __user *buf, size_t count,
-       loff_t *ppos)
+                               loff_t *ppos)
 {
-       ssize_t retval;
        ssize_t copied = 0;
 
-       if (count <= image[minor].size_buf) {
-               /* We copy to kernel buffer */
-               copied = vme_master_read(image[minor].resource,
-                       image[minor].kern_buf, count, *ppos);
-               if (copied < 0)
-                       return (int)copied;
-
-               retval = __copy_to_user(buf, image[minor].kern_buf,
-                       (unsigned long)copied);
-               if (retval != 0) {
-                       copied = (copied - retval);
-                       pr_info("User copy failed\n");
-                       return -EINVAL;
-               }
+       if (count > image[minor].size_buf)
+               count = image[minor].size_buf;
 
-       } else {
-               /* XXX Need to write this */
-               pr_info("Currently don't support large transfers\n");
-               /* Map in pages from userspace */
+       copied = vme_master_read(image[minor].resource, image[minor].kern_buf,
+                                count, *ppos);
+       if (copied < 0)
+               return (int)copied;
 
-               /* Call vme_master_read to do the transfer */
-               return -EINVAL;
-       }
+       if (__copy_to_user(buf, image[minor].kern_buf, (unsigned long)copied))
+               return -EFAULT;
 
        return copied;
 }
 
-/*
- * We are going to alloc a page during init per window for small transfers.
- * Small transfers will go user space -> buffer -> VME. Larger (more than a
- * page) transfers will lock the user space buffer into memory and then
- * transfer the data directly from the user space buffers out to VME.
- */
 static ssize_t resource_from_user(unsigned int minor, const char __user *buf,
-       size_t count, loff_t *ppos)
+                                 size_t count, loff_t *ppos)
 {
-       ssize_t retval;
-       ssize_t copied = 0;
+       if (count > image[minor].size_buf)
+               count = image[minor].size_buf;
 
-       if (count <= image[minor].size_buf) {
-               retval = __copy_from_user(image[minor].kern_buf, buf,
-                       (unsigned long)count);
-               if (retval != 0)
-                       copied = (copied - retval);
-               else
-                       copied = count;
-
-               copied = vme_master_write(image[minor].resource,
-                       image[minor].kern_buf, copied, *ppos);
-       } else {
-               /* XXX Need to write this */
-               pr_info("Currently don't support large transfers\n");
-               /* Map in pages from userspace */
-
-               /* Call vme_master_write to do the transfer */
-               return -EINVAL;
-       }
+       if (__copy_from_user(image[minor].kern_buf, buf, (unsigned long)count))
+               return -EFAULT;
 
-       return copied;
+       return vme_master_write(image[minor].resource, image[minor].kern_buf,
+                               count, *ppos);
 }
 
 static ssize_t buffer_to_user(unsigned int minor, char __user *buf,
-       size_t count, loff_t *ppos)
+                             size_t count, loff_t *ppos)
 {
        void *image_ptr;
-       ssize_t retval;
 
        image_ptr = image[minor].kern_buf + *ppos;
+       if (__copy_to_user(buf, image_ptr, (unsigned long)count))
+               return -EFAULT;
 
-       retval = __copy_to_user(buf, image_ptr, (unsigned long)count);
-       if (retval != 0) {
-               retval = (count - retval);
-               pr_warn("Partial copy to userspace\n");
-       } else
-               retval = count;
-
-       /* Return number of bytes successfully read */
-       return retval;
+       return count;
 }
 
 static ssize_t buffer_from_user(unsigned int minor, const char __user *buf,
-       size_t count, loff_t *ppos)
+                               size_t count, loff_t *ppos)
 {
        void *image_ptr;
-       size_t retval;
 
        image_ptr = image[minor].kern_buf + *ppos;
+       if (__copy_from_user(image_ptr, buf, (unsigned long)count))
+               return -EFAULT;
 
-       retval = __copy_from_user(image_ptr, buf, (unsigned long)count);
-       if (retval != 0) {
-               retval = (count - retval);
-               pr_warn("Partial copy to userspace\n");
-       } else
-               retval = count;
-
-       /* Return number of bytes successfully read */
-       return retval;
+       return count;
 }
 
 static ssize_t vme_user_read(struct file *file, char __user *buf, size_t count,
-                       loff_t *ppos)
+                            loff_t *ppos)
 {
        unsigned int minor = MINOR(file_inode(file)->i_rdev);
        ssize_t retval;
        size_t image_size;
-       size_t okcount;
 
        if (minor == CONTROL_MINOR)
                return 0;
@@ -256,16 +199,14 @@ static ssize_t vme_user_read(struct file *file, char __user *buf, size_t count,
 
        /* Ensure not reading past end of the image */
        if (*ppos + count > image_size)
-               okcount = image_size - *ppos;
-       else
-               okcount = count;
+               count = image_size - *ppos;
 
        switch (type[minor]) {
        case MASTER_MINOR:
-               retval = resource_to_user(minor, buf, okcount, ppos);
+               retval = resource_to_user(minor, buf, count, ppos);
                break;
        case SLAVE_MINOR:
-               retval = buffer_to_user(minor, buf, okcount, ppos);
+               retval = buffer_to_user(minor, buf, count, ppos);
                break;
        default:
                retval = -EINVAL;
@@ -279,12 +220,11 @@ static ssize_t vme_user_read(struct file *file, char __user *buf, size_t count,
 }
 
 static ssize_t vme_user_write(struct file *file, const char __user *buf,
-                       size_t count, loff_t *ppos)
+                             size_t count, loff_t *ppos)
 {
        unsigned int minor = MINOR(file_inode(file)->i_rdev);
        ssize_t retval;
        size_t image_size;
-       size_t okcount;
 
        if (minor == CONTROL_MINOR)
                return 0;
@@ -301,16 +241,14 @@ static ssize_t vme_user_write(struct file *file, const char __user *buf,
 
        /* Ensure not reading past end of the image */
        if (*ppos + count > image_size)
-               okcount = image_size - *ppos;
-       else
-               okcount = count;
+               count = image_size - *ppos;
 
        switch (type[minor]) {
        case MASTER_MINOR:
-               retval = resource_from_user(minor, buf, okcount, ppos);
+               retval = resource_from_user(minor, buf, count, ppos);
                break;
        case SLAVE_MINOR:
-               retval = buffer_from_user(minor, buf, okcount, ppos);
+               retval = buffer_from_user(minor, buf, count, ppos);
                break;
        default:
                retval = -EINVAL;
@@ -354,7 +292,7 @@ static loff_t vme_user_llseek(struct file *file, loff_t off, int whence)
  * already been defined.
  */
 static int vme_user_ioctl(struct inode *inode, struct file *file,
-       unsigned int cmd, unsigned long arg)
+                         unsigned int cmd, unsigned long arg)
 {
        struct vme_master master;
        struct vme_slave slave;
@@ -390,12 +328,13 @@ static int vme_user_ioctl(struct inode *inode, struct file *file,
                         *      to userspace as they are
                         */
                        retval = vme_master_get(image[minor].resource,
-                               &master.enable, &master.vme_addr,
-                               &master.size, &master.aspace,
-                               &master.cycle, &master.dwidth);
+                                               &master.enable,
+                                               &master.vme_addr,
+                                               &master.size, &master.aspace,
+                                               &master.cycle, &master.dwidth);
 
                        copied = copy_to_user(argp, &master,
-                               sizeof(struct vme_master));
+                                             sizeof(struct vme_master));
                        if (copied != 0) {
                                pr_warn("Partial copy to userspace\n");
                                return -EFAULT;
@@ -435,12 +374,12 @@ static int vme_user_ioctl(struct inode *inode, struct file *file,
                         *      to userspace as they are
                         */
                        retval = vme_slave_get(image[minor].resource,
-                               &slave.enable, &slave.vme_addr,
-                               &slave.size, &pci_addr, &slave.aspace,
-                               &slave.cycle);
+                                              &slave.enable, &slave.vme_addr,
+                                              &slave.size, &pci_addr,
+                                              &slave.aspace, &slave.cycle);
 
                        copied = copy_to_user(argp, &slave,
-                               sizeof(struct vme_slave));
+                                             sizeof(struct vme_slave));
                        if (copied != 0) {
                                pr_warn("Partial copy to userspace\n");
                                return -EFAULT;
@@ -526,8 +465,8 @@ static int vme_user_master_mmap(unsigned int minor, struct vm_area_struct *vma)
                return err;
        }
 
-       vma_priv = kmalloc(sizeof(struct vme_user_vma_priv), GFP_KERNEL);
-       if (vma_priv == NULL) {
+       vma_priv = kmalloc(sizeof(*vma_priv), GFP_KERNEL);
+       if (!vma_priv) {
                mutex_unlock(&image[minor].mutex);
                return -ENOMEM;
        }
@@ -588,7 +527,7 @@ static int vme_user_probe(struct vme_dev *vdev)
        char *name;
 
        /* Save pointer to the bridge device */
-       if (vme_user_bridge != NULL) {
+       if (vme_user_bridge) {
                dev_err(&vdev->dev, "Driver can only be loaded for 1 device\n");
                err = -EINVAL;
                goto err_dev;
@@ -606,7 +545,7 @@ static int vme_user_probe(struct vme_dev *vdev)
 
        /* Assign major and minor numbers for the driver */
        err = register_chrdev_region(MKDEV(VME_MAJOR, 0), VME_DEVS,
-               driver_name);
+                                    driver_name);
        if (err) {
                dev_warn(&vdev->dev, "Error getting Major Number %d for driver.\n",
                         VME_MAJOR);
@@ -622,10 +561,8 @@ static int vme_user_probe(struct vme_dev *vdev)
        vme_user_cdev->ops = &vme_user_fops;
        vme_user_cdev->owner = THIS_MODULE;
        err = cdev_add(vme_user_cdev, MKDEV(VME_MAJOR, 0), VME_DEVS);
-       if (err) {
-               dev_warn(&vdev->dev, "cdev_all failed\n");
+       if (err)
                goto err_char;
-       }
 
        /* Request slave resources and allocate buffers (128kB wide) */
        for (i = SLAVE_MINOR; i < (SLAVE_MAX + 1); i++) {
@@ -636,7 +573,7 @@ static int vme_user_probe(struct vme_dev *vdev)
                 */
                image[i].resource = vme_slave_request(vme_user_bridge,
                        VME_A24, VME_SCT);
-               if (image[i].resource == NULL) {
+               if (!image[i].resource) {
                        dev_warn(&vdev->dev,
                                 "Unable to allocate slave resource\n");
                        err = -ENOMEM;
@@ -645,7 +582,7 @@ static int vme_user_probe(struct vme_dev *vdev)
                image[i].size_buf = PCI_BUF_SIZE;
                image[i].kern_buf = vme_alloc_consistent(image[i].resource,
                        image[i].size_buf, &image[i].pci_buf);
-               if (image[i].kern_buf == NULL) {
+               if (!image[i].kern_buf) {
                        dev_warn(&vdev->dev,
                                 "Unable to allocate memory for buffer\n");
                        image[i].pci_buf = 0;
@@ -663,7 +600,7 @@ static int vme_user_probe(struct vme_dev *vdev)
                /* XXX Need to properly request attributes */
                image[i].resource = vme_master_request(vme_user_bridge,
                        VME_A32, VME_SCT, VME_D32);
-               if (image[i].resource == NULL) {
+               if (!image[i].resource) {
                        dev_warn(&vdev->dev,
                                 "Unable to allocate master resource\n");
                        err = -ENOMEM;
@@ -671,7 +608,7 @@ static int vme_user_probe(struct vme_dev *vdev)
                }
                image[i].size_buf = PCI_BUF_SIZE;
                image[i].kern_buf = kmalloc(image[i].size_buf, GFP_KERNEL);
-               if (image[i].kern_buf == NULL) {
+               if (!image[i].kern_buf) {
                        err = -ENOMEM;
                        vme_master_free(image[i].resource);
                        goto err_master;
@@ -835,7 +772,6 @@ static void __exit vme_user_exit(void)
        vme_unregister_driver(&vme_user_driver);
 }
 
-
 MODULE_PARM_DESC(bus, "Enumeration of VMEbus to which the driver is connected");
 module_param_array(bus, int, &bus_num, 0);
 
index b0ea38f1911c1bdca61a95b25208126d141645d7..9e61f2df3a00a283d8de53371ef91c3b23e3b4d1 100644 (file)
@@ -1728,10 +1728,8 @@ BBuGetFrameTime(
        unsigned int uRateIdx = (unsigned int) wRate;
        unsigned int uRate = 0;
 
-       if (uRateIdx > RATE_54M) {
-               ASSERT(0);
+       if (uRateIdx > RATE_54M)
                return 0;
-       }
 
        uRate = (unsigned int)awcFrameTime[uRateIdx];
 
@@ -1945,7 +1943,6 @@ bool BBbReadEmbedded(struct vnt_private *priv,
        VNSvInPortB(dwIoBase + MAC_REG_BBREGDATA, pbyData);
 
        if (ww == W_MAX_TIMEOUT) {
-               DBG_PORT80(0x30);
                pr_debug(" DBG_PORT80(0x30)\n");
                return false;
        }
@@ -1988,7 +1985,6 @@ bool BBbWriteEmbedded(struct vnt_private *priv,
        }
 
        if (ww == W_MAX_TIMEOUT) {
-               DBG_PORT80(0x31);
                pr_debug(" DBG_PORT80(0x31)\n");
                return false;
        }
index e00c0605d1541556492c8ab46d5d4db8156a30f6..ae8fd7f491a386c98a228675086ee41a8408f755 100644 (file)
@@ -573,17 +573,17 @@ CARDvSafeResetRx(
        /* init state, all RD is chip's */
        for (uu = 0; uu < pDevice->sOpts.nRxDescs0; uu++) {
                pDesc = &(pDevice->aRD0Ring[uu]);
-               pDesc->m_rd0RD0.wResCount = (unsigned short)(pDevice->rx_buf_sz);
+               pDesc->m_rd0RD0.wResCount = cpu_to_le16(pDevice->rx_buf_sz);
                pDesc->m_rd0RD0.f1Owner = OWNED_BY_NIC;
-               pDesc->m_rd1RD1.wReqCount = (unsigned short)(pDevice->rx_buf_sz);
+               pDesc->m_rd1RD1.wReqCount = cpu_to_le16(pDevice->rx_buf_sz);
        }
 
        /* init state, all RD is chip's */
        for (uu = 0; uu < pDevice->sOpts.nRxDescs1; uu++) {
                pDesc = &(pDevice->aRD1Ring[uu]);
-               pDesc->m_rd0RD0.wResCount = (unsigned short)(pDevice->rx_buf_sz);
+               pDesc->m_rd0RD0.wResCount = cpu_to_le16(pDevice->rx_buf_sz);
                pDesc->m_rd0RD0.f1Owner = OWNED_BY_NIC;
-               pDesc->m_rd1RD1.wReqCount = (unsigned short)(pDevice->rx_buf_sz);
+               pDesc->m_rd1RD1.wReqCount = cpu_to_le16(pDevice->rx_buf_sz);
        }
 
        /* set perPkt mode */
@@ -847,7 +847,6 @@ void CARDvSetLoopbackMode(struct vnt_private *priv, unsigned short wLoopbackMode
        case CARD_LB_PHY:
                break;
        default:
-               ASSERT(false);
                break;
        }
        /* set MAC loopback */
index 758eeb2afd512a5e2d0e2928fdcbe3acf3f37145..c9162149eb616f68c1e7fcaef08a3f8632f5f7eb 100644 (file)
 typedef struct tagDEVICE_RD_INFO {
        struct sk_buff *skb;
        dma_addr_t  skb_dma;
-       dma_addr_t  curr_desc;
 } DEVICE_RD_INFO,   *PDEVICE_RD_INFO;
 
 #ifdef __BIG_ENDIAN
 
 typedef struct tagRDES0 {
-       volatile unsigned short wResCount;
+       volatile __le16 wResCount;
        union {
                volatile u16    f15Reserved;
                struct {
@@ -191,7 +190,7 @@ SRDES0, *PSRDES0;
 #else
 
 typedef struct tagRDES0 {
-       unsigned short wResCount;
+       __le16         wResCount;
        unsigned short f15Reserved:15;
        unsigned short f1Owner:1;
 } __attribute__ ((__packed__))
@@ -200,7 +199,7 @@ SRDES0;
 #endif
 
 typedef struct tagRDES1 {
-       unsigned short wReqCount;
+       __le16         wReqCount;
        unsigned short wReserved;
 } __attribute__ ((__packed__))
 SRDES1;
@@ -209,8 +208,8 @@ SRDES1;
 typedef struct tagSRxDesc {
        volatile SRDES0 m_rd0RD0;
        volatile SRDES1 m_rd1RD1;
-       volatile u32    buff_addr;
-       volatile u32    next_desc;
+       volatile __le32 buff_addr;
+       volatile __le32 next_desc;
        struct tagSRxDesc *next __aligned(8);
        volatile PDEVICE_RD_INFO pRDInfo __aligned(8);
 } __attribute__ ((__packed__))
@@ -246,7 +245,7 @@ STDES0;
 #endif
 
 typedef struct tagTDES1 {
-       volatile    unsigned short wReqCount;
+       volatile    __le16        wReqCount;
        volatile    unsigned char byTCR;
        volatile    unsigned char byReserved;
 } __attribute__ ((__packed__))
@@ -256,9 +255,7 @@ typedef struct tagDEVICE_TD_INFO {
        void *mic_hdr;
        struct sk_buff *skb;
        unsigned char *buf;
-       dma_addr_t          skb_dma;
        dma_addr_t          buf_dma;
-       dma_addr_t          curr_desc;
        unsigned long dwReqCount;
        unsigned long dwHeaderLength;
        unsigned char byFlags;
@@ -268,35 +265,14 @@ typedef struct tagDEVICE_TD_INFO {
 typedef struct tagSTxDesc {
        volatile    STDES0  m_td0TD0;
        volatile    STDES1  m_td1TD1;
-       volatile    u32    buff_addr;
-       volatile    u32    next_desc;
+       volatile    __le32  buff_addr;
+       volatile    __le32  next_desc;
        struct tagSTxDesc *next __aligned(8);
        volatile    PDEVICE_TD_INFO pTDInfo __aligned(8);
 } __attribute__ ((__packed__))
 STxDesc, *PSTxDesc;
 typedef const STxDesc *PCSTxDesc;
 
-typedef struct tagSTxSyncDesc {
-       volatile    STDES0  m_td0TD0;
-       volatile    STDES1  m_td1TD1;
-       volatile    u32 buff_addr; /* pointer to logical buffer */
-       volatile    u32 next_desc; /* pointer to next logical descriptor */
-       volatile    unsigned short m_wFIFOCtl;
-       volatile    unsigned short m_wTimeStamp;
-       struct tagSTxSyncDesc *next __aligned(8);
-       volatile    PDEVICE_TD_INFO pTDInfo __aligned(8);
-} __attribute__ ((__packed__))
-STxSyncDesc, *PSTxSyncDesc;
-typedef const STxSyncDesc *PCSTxSyncDesc;
-
-/* RsvTime buffer header */
-typedef struct tagSRrvTime_atim {
-       unsigned short wCTSTxRrvTime_ba;
-       unsigned short wTxRrvTime_a;
-} __attribute__ ((__packed__))
-SRrvTime_atim, *PSRrvTime_atim;
-typedef const SRrvTime_atim *PCSRrvTime_atim;
-
 /* Length, Service, and Signal fields of Phy for Tx */
 struct vnt_phy_field {
        u8 signal;
@@ -310,42 +286,4 @@ union vnt_phy_field_swap {
        u32 field_write;
 };
 
-/* Tx FIFO header */
-typedef struct tagSTxBufHead {
-       u32 adwTxKey[4];
-       unsigned short wFIFOCtl;
-       unsigned short wTimeStamp;
-       unsigned short wFragCtl;
-       unsigned char byTxPower;
-       unsigned char wReserved;
-} __attribute__ ((__packed__))
-STxBufHead, *PSTxBufHead;
-typedef const STxBufHead *PCSTxBufHead;
-
-typedef struct tagSBEACONCtl {
-       u32 BufReady:1;
-       u32 TSF:15;
-       u32 BufLen:11;
-       u32 Reserved:5;
-} __attribute__ ((__packed__))
-SBEACONCtl;
-
-typedef struct tagSSecretKey {
-       u32 dwLowDword;
-       unsigned char byHighByte;
-} __attribute__ ((__packed__))
-SSecretKey;
-
-typedef struct tagSKeyEntry {
-       unsigned char abyAddrHi[2];
-       unsigned short wKCTL;
-       unsigned char abyAddrLo[4];
-       u32 dwKey0[4];
-       u32 dwKey1[4];
-       u32 dwKey2[4];
-       u32 dwKey3[4];
-       u32 dwKey4[4];
-} __attribute__ ((__packed__))
-SKeyEntry;
-
 #endif /* __DESC_H__ */
index 5cf1b337cba7e6beb5de410a99c9c658a2166ab8..6aebb495fa8dc6c10b9c8ceb4f0594cb5d9c7b9b 100644 (file)
@@ -403,6 +403,7 @@ struct vnt_private {
        unsigned char abyEEPROM[EEP_MAX_CONTEXT_SIZE]; /* unsigned long alignment */
 
        unsigned short wBeaconInterval;
+       u16 wake_up_count;
 
        struct work_struct interrupt_work;
 
index a4a8a8489e0befe93488c80130c53f92422ce98e..b4c9547d3138b49e7b5550b1a95410c7aa7f538a 100644 (file)
@@ -69,19 +69,4 @@ typedef enum  _chip_type {
        VT3253 = 1
 } CHIP_TYPE, *PCHIP_TYPE;
 
-#ifdef VIAWET_DEBUG
-#define ASSERT(x)                                                      \
-do {                                                                   \
-       if (!(x)) {                                                     \
-               pr_err("assertion %s failed: file %s line %d\n", \
-                      #x, __func__, __LINE__);                         \
-               *(int *)0 = 0;                                          \
-       }                                                               \
-} while (0)
-#define DBG_PORT80(value)                   outb(value, 0x80)
-#else
-#define ASSERT(x)
-#define DBG_PORT80(value)
-#endif
-
 #endif
index 69bdc8f29b59f4c1e1cbacabf7563a7ca1d66817..b74af8d89fe6d91e063904c51788f66f6ba6a215 100644 (file)
@@ -623,12 +623,11 @@ static void device_init_rd0_ring(struct vnt_private *pDevice)
        for (i = 0; i < pDevice->sOpts.nRxDescs0; i ++, curr += sizeof(SRxDesc)) {
                pDesc = &(pDevice->aRD0Ring[i]);
                pDesc->pRDInfo = alloc_rd_info();
-               ASSERT(pDesc->pRDInfo);
+
                if (!device_alloc_rx_buf(pDevice, pDesc))
                        dev_err(&pDevice->pcid->dev, "can not alloc rx bufs\n");
 
                pDesc->next = &(pDevice->aRD0Ring[(i+1) % pDevice->sOpts.nRxDescs0]);
-               pDesc->pRDInfo->curr_desc = cpu_to_le32(curr);
                pDesc->next_desc = cpu_to_le32(curr + sizeof(SRxDesc));
        }
 
@@ -647,12 +646,11 @@ static void device_init_rd1_ring(struct vnt_private *pDevice)
        for (i = 0; i < pDevice->sOpts.nRxDescs1; i ++, curr += sizeof(SRxDesc)) {
                pDesc = &(pDevice->aRD1Ring[i]);
                pDesc->pRDInfo = alloc_rd_info();
-               ASSERT(pDesc->pRDInfo);
+
                if (!device_alloc_rx_buf(pDevice, pDesc))
                        dev_err(&pDevice->pcid->dev, "can not alloc rx bufs\n");
 
                pDesc->next = &(pDevice->aRD1Ring[(i+1) % pDevice->sOpts.nRxDescs1]);
-               pDesc->pRDInfo->curr_desc = cpu_to_le32(curr);
                pDesc->next_desc = cpu_to_le32(curr + sizeof(SRxDesc));
        }
 
@@ -705,13 +703,12 @@ static void device_init_td0_ring(struct vnt_private *pDevice)
        for (i = 0; i < pDevice->sOpts.nTxDescs[0]; i++, curr += sizeof(STxDesc)) {
                pDesc = &(pDevice->apTD0Rings[i]);
                pDesc->pTDInfo = alloc_td_info();
-               ASSERT(pDesc->pTDInfo);
+
                if (pDevice->flags & DEVICE_FLAGS_TX_ALIGN) {
                        pDesc->pTDInfo->buf = pDevice->tx0_bufs + (i)*PKT_BUF_SZ;
                        pDesc->pTDInfo->buf_dma = pDevice->tx_bufs_dma0 + (i)*PKT_BUF_SZ;
                }
                pDesc->next = &(pDevice->apTD0Rings[(i+1) % pDevice->sOpts.nTxDescs[0]]);
-               pDesc->pTDInfo->curr_desc = cpu_to_le32(curr);
                pDesc->next_desc = cpu_to_le32(curr+sizeof(STxDesc));
        }
 
@@ -731,13 +728,12 @@ static void device_init_td1_ring(struct vnt_private *pDevice)
        for (i = 0; i < pDevice->sOpts.nTxDescs[1]; i++, curr += sizeof(STxDesc)) {
                pDesc = &(pDevice->apTD1Rings[i]);
                pDesc->pTDInfo = alloc_td_info();
-               ASSERT(pDesc->pTDInfo);
+
                if (pDevice->flags & DEVICE_FLAGS_TX_ALIGN) {
                        pDesc->pTDInfo->buf = pDevice->tx1_bufs + (i) * PKT_BUF_SZ;
                        pDesc->pTDInfo->buf_dma = pDevice->tx_bufs_dma1 + (i) * PKT_BUF_SZ;
                }
                pDesc->next = &(pDevice->apTD1Rings[(i + 1) % pDevice->sOpts.nTxDescs[1]]);
-               pDesc->pTDInfo->curr_desc = cpu_to_le32(curr);
                pDesc->next_desc = cpu_to_le32(curr+sizeof(STxDesc));
        }
 
@@ -754,13 +750,7 @@ static void device_free_td0_ring(struct vnt_private *pDevice)
                PSTxDesc        pDesc = &(pDevice->apTD0Rings[i]);
                PDEVICE_TD_INFO  pTDInfo = pDesc->pTDInfo;
 
-               if (pTDInfo->skb_dma && (pTDInfo->skb_dma != pTDInfo->buf_dma))
-                       dma_unmap_single(&pDevice->pcid->dev, pTDInfo->skb_dma,
-                                        pTDInfo->skb->len, DMA_TO_DEVICE);
-
-               if (pTDInfo->skb)
-                       dev_kfree_skb(pTDInfo->skb);
-
+               dev_kfree_skb(pTDInfo->skb);
                kfree(pDesc->pTDInfo);
        }
 }
@@ -773,13 +763,7 @@ static void device_free_td1_ring(struct vnt_private *pDevice)
                PSTxDesc        pDesc = &(pDevice->apTD1Rings[i]);
                PDEVICE_TD_INFO  pTDInfo = pDesc->pTDInfo;
 
-               if (pTDInfo->skb_dma && (pTDInfo->skb_dma != pTDInfo->buf_dma))
-                       dma_unmap_single(&pDevice->pcid->dev, pTDInfo->skb_dma,
-                                        pTDInfo->skb->len, DMA_TO_DEVICE);
-
-               if (pTDInfo->skb)
-                       dev_kfree_skb(pTDInfo->skb);
-
+               dev_kfree_skb(pTDInfo->skb);
                kfree(pDesc->pTDInfo);
        }
 }
@@ -822,7 +806,6 @@ static bool device_alloc_rx_buf(struct vnt_private *pDevice, PSRxDesc pRD)
        pRDInfo->skb = dev_alloc_skb((int)pDevice->rx_buf_sz);
        if (pRDInfo->skb == NULL)
                return false;
-       ASSERT(pRDInfo->skb);
 
        pRDInfo->skb_dma =
                dma_map_single(&pDevice->pcid->dev,
@@ -980,16 +963,9 @@ static void device_free_tx_buf(struct vnt_private *pDevice, PSTxDesc pDesc)
        PDEVICE_TD_INFO  pTDInfo = pDesc->pTDInfo;
        struct sk_buff *skb = pTDInfo->skb;
 
-       /* pre-allocated buf_dma can't be unmapped. */
-       if (pTDInfo->skb_dma && (pTDInfo->skb_dma != pTDInfo->buf_dma)) {
-               dma_unmap_single(&pDevice->pcid->dev, pTDInfo->skb_dma,
-                                skb->len, DMA_TO_DEVICE);
-       }
-
        if (skb)
                ieee80211_tx_status_irqsafe(pDevice->hw, skb);
 
-       pTDInfo->skb_dma = 0;
        pTDInfo->skb = NULL;
        pTDInfo->byFlags = 0;
 }
@@ -1211,9 +1187,6 @@ static int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb)
 
        vnt_generate_fifo_header(priv, dma_idx, head_td, skb);
 
-       if (MACbIsRegBitsOn(priv->PortOffset, MAC_REG_PSCTL, PSCTL_PS))
-               MACbPSWakeup(priv->PortOffset);
-
        spin_lock_irqsave(&priv->lock, flags);
 
        priv->bPWBitOn = false;
@@ -1223,7 +1196,7 @@ static int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb)
        head_td->m_td1TD1.wReqCount =
                        cpu_to_le16((u16)head_td->pTDInfo->dwReqCount);
 
-       head_td->buff_addr = cpu_to_le32(head_td->pTDInfo->skb_dma);
+       head_td->buff_addr = cpu_to_le32(head_td->pTDInfo->buf_dma);
 
        /* Poll Transmit the adapter */
        wmb();
@@ -1775,6 +1748,12 @@ vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent)
                return -ENODEV;
        }
 
+       if (dma_set_mask(&pcid->dev, DMA_BIT_MASK(32))) {
+               dev_err(&pcid->dev, ": Failed to set dma 32 bit mask\n");
+               device_free_info(priv);
+               return -ENODEV;
+       }
+
        INIT_WORK(&priv->interrupt_work, vnt_interrupt_work);
 
        /* do reset */
@@ -1812,6 +1791,7 @@ vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent)
        ieee80211_hw_set(priv->hw, SIGNAL_DBM);
        ieee80211_hw_set(priv->hw, RX_INCLUDES_FCS);
        ieee80211_hw_set(priv->hw, REPORTS_TX_ACK_STATUS);
+       ieee80211_hw_set(priv->hw, SUPPORTS_PS);
 
        priv->hw->max_signal = 100;
 
index b25ee962558d786776df34cedcbefe5ee9999b7a..e14eed160a191fd5405ea900ea720bcbbeda230e 100644 (file)
@@ -144,7 +144,7 @@ bool vnt_receive_frame(struct vnt_private *priv, PSRxDesc curr_rd)
                         priv->rx_buf_sz, DMA_FROM_DEVICE);
 
        frame_size = le16_to_cpu(curr_rd->m_rd1RD1.wReqCount)
-                       - cpu_to_le16(curr_rd->m_rd0RD0.wResCount);
+                       - le16_to_cpu(curr_rd->m_rd0RD0.wResCount);
 
        if ((frame_size > 2364) || (frame_size < 33)) {
                /* Frame Size error drop this packet.*/
index aed530f022b8cf817f3cf703dac8e4d61d21ddf5..3dfd333475c020718359f6fe832349ba9aeea70d 100644 (file)
@@ -186,7 +186,6 @@ void MACvSetLoopbackMode(void __iomem *dwIoBase, unsigned char byLoopbackMode)
 {
        unsigned char byOrgValue;
 
-       ASSERT(byLoopbackMode < 3);
        byLoopbackMode <<= 6;
        /* set TCR */
        VNSvInPortB(dwIoBase + MAC_REG_TEST, &byOrgValue);
@@ -374,7 +373,6 @@ bool MACbSafeRxOff(void __iomem *dwIoBase)
                        break;
        }
        if (ww == W_MAX_TIMEOUT) {
-               DBG_PORT80(0x10);
                pr_debug(" DBG_PORT80(0x10)\n");
                return false;
        }
@@ -384,7 +382,6 @@ bool MACbSafeRxOff(void __iomem *dwIoBase)
                        break;
        }
        if (ww == W_MAX_TIMEOUT) {
-               DBG_PORT80(0x11);
                pr_debug(" DBG_PORT80(0x11)\n");
                return false;
        }
@@ -398,7 +395,6 @@ bool MACbSafeRxOff(void __iomem *dwIoBase)
                        break;
        }
        if (ww == W_MAX_TIMEOUT) {
-               DBG_PORT80(0x12);
                pr_debug(" DBG_PORT80(0x12)\n");
                return false;
        }
@@ -436,7 +432,6 @@ bool MACbSafeTxOff(void __iomem *dwIoBase)
                        break;
        }
        if (ww == W_MAX_TIMEOUT) {
-               DBG_PORT80(0x20);
                pr_debug(" DBG_PORT80(0x20)\n");
                return false;
        }
@@ -446,7 +441,6 @@ bool MACbSafeTxOff(void __iomem *dwIoBase)
                        break;
        }
        if (ww == W_MAX_TIMEOUT) {
-               DBG_PORT80(0x21);
                pr_debug(" DBG_PORT80(0x21)\n");
                return false;
        }
@@ -461,7 +455,6 @@ bool MACbSafeTxOff(void __iomem *dwIoBase)
                        break;
        }
        if (ww == W_MAX_TIMEOUT) {
-               DBG_PORT80(0x24);
                pr_debug(" DBG_PORT80(0x24)\n");
                return false;
        }
@@ -486,13 +479,11 @@ bool MACbSafeStop(void __iomem *dwIoBase)
        MACvRegBitsOff(dwIoBase, MAC_REG_TCR, TCR_AUTOBCNTX);
 
        if (!MACbSafeRxOff(dwIoBase)) {
-               DBG_PORT80(0xA1);
                pr_debug(" MACbSafeRxOff == false)\n");
                MACbSafeSoftwareReset(dwIoBase);
                return false;
        }
        if (!MACbSafeTxOff(dwIoBase)) {
-               DBG_PORT80(0xA2);
                pr_debug(" MACbSafeTxOff == false)\n");
                MACbSafeSoftwareReset(dwIoBase);
                return false;
@@ -590,9 +581,6 @@ void MACvSetCurrRx0DescAddr(void __iomem *dwIoBase, unsigned long dwCurrDescAddr
                        break;
        }
 
-       if (ww == W_MAX_TIMEOUT)
-               DBG_PORT80(0x13);
-
        VNSvOutPortD(dwIoBase + MAC_REG_RXDMAPTR0, dwCurrDescAddr);
        if (byOrgDMACtl & DMACTL_RUN)
                VNSvOutPortB(dwIoBase + MAC_REG_RXDMACTL0, DMACTL_RUN);
@@ -627,8 +615,6 @@ void MACvSetCurrRx1DescAddr(void __iomem *dwIoBase, unsigned long dwCurrDescAddr
                if (!(byData & DMACTL_RUN))
                        break;
        }
-       if (ww == W_MAX_TIMEOUT)
-               DBG_PORT80(0x14);
 
        VNSvOutPortD(dwIoBase + MAC_REG_RXDMAPTR1, dwCurrDescAddr);
        if (byOrgDMACtl & DMACTL_RUN)
@@ -666,8 +652,6 @@ void MACvSetCurrTx0DescAddrEx(void __iomem *dwIoBase,
                if (!(byData & DMACTL_RUN))
                        break;
        }
-       if (ww == W_MAX_TIMEOUT)
-               DBG_PORT80(0x25);
 
        VNSvOutPortD(dwIoBase + MAC_REG_TXDMAPTR0, dwCurrDescAddr);
        if (byOrgDMACtl & DMACTL_RUN)
@@ -706,7 +690,6 @@ void MACvSetCurrAC0DescAddrEx(void __iomem *dwIoBase,
                        break;
        }
        if (ww == W_MAX_TIMEOUT) {
-               DBG_PORT80(0x26);
                pr_debug(" DBG_PORT80(0x26)\n");
        }
        VNSvOutPortD(dwIoBase + MAC_REG_AC0DMAPTR, dwCurrDescAddr);
@@ -807,7 +790,6 @@ bool MACbPSWakeup(void __iomem *dwIoBase)
                        break;
        }
        if (ww == W_MAX_TIMEOUT) {
-               DBG_PORT80(0x36);
                pr_debug(" DBG_PORT80(0x33)\n");
                return false;
        }
index be3c4e949b6a315dc7ac80880654eb413c089224..06e6b9d871c44a7f4806331fed92b611cc86f3ed 100644 (file)
@@ -157,10 +157,18 @@ PSbIsNextTBTTWakeUp(
        struct ieee80211_conf *conf = &hw->conf;
        bool bWakeUp = false;
 
-       if (conf->listen_interval == 1) {
-               /* Turn on wake up to listen next beacon */
-               MACvRegBitsOn(pDevice->PortOffset, MAC_REG_PSCTL, PSCTL_LNBCN);
-               bWakeUp = true;
+       if (conf->listen_interval > 1) {
+               if (!pDevice->wake_up_count)
+                       pDevice->wake_up_count = conf->listen_interval;
+
+               --pDevice->wake_up_count;
+
+               if (pDevice->wake_up_count == 1) {
+                       /* Turn on wake up to listen next beacon */
+                       MACvRegBitsOn(pDevice->PortOffset,
+                                     MAC_REG_PSCTL, PSCTL_LNBCN);
+                       bWakeUp = true;
+               }
        }
 
        return bWakeUp;
index 7626f635f160799f581b50d3e1e50bbcc7fd8da0..c537321444be1ba5dde589127b9e3450827af65b 100644 (file)
 #include "rf.h"
 #include "baseband.h"
 
-#define BY_AL2230_REG_LEN     23 //24bit
+#define BY_AL2230_REG_LEN     23 /* 24bit */
 #define CB_AL2230_INIT_SEQ    15
-#define SWITCH_CHANNEL_DELAY_AL2230 200 //us
+#define SWITCH_CHANNEL_DELAY_AL2230 200 /* us */
 #define AL2230_PWR_IDX_LEN    64
 
-#define BY_AL7230_REG_LEN     23 //24bit
+#define BY_AL7230_REG_LEN     23 /* 24bit */
 #define CB_AL7230_INIT_SEQ    16
-#define SWITCH_CHANNEL_DELAY_AL7230 200 //us
+#define SWITCH_CHANNEL_DELAY_AL7230 200 /* us */
 #define AL7230_PWR_IDX_LEN    64
 
 static const unsigned long dwAL2230InitTable[CB_AL2230_INIT_SEQ] = {
-       0x03F79000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
-       0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
-       0x01A00200+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
-       0x00FFF300+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
-       0x0005A400+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
-       0x0F4DC500+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
-       0x0805B600+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
-       0x0146C700+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
-       0x00068800+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
-       0x0403B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
-       0x00DBBA00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
-       0x00099B00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, //
+       0x03F79000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
+       0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
+       0x01A00200+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
+       0x00FFF300+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
+       0x0005A400+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
+       0x0F4DC500+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
+       0x0805B600+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
+       0x0146C700+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
+       0x00068800+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
+       0x0403B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
+       0x00DBBA00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
+       0x00099B00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
        0x0BDFFC00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
        0x00000D00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
        0x00580F00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW
 };
 
 static const unsigned long dwAL2230ChannelTable0[CB_MAX_CHANNEL] = {
-       0x03F79000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 1, Tf = 2412MHz
-       0x03F79000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 2, Tf = 2417MHz
-       0x03E79000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 3, Tf = 2422MHz
-       0x03E79000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 4, Tf = 2427MHz
-       0x03F7A000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 5, Tf = 2432MHz
-       0x03F7A000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 6, Tf = 2437MHz
-       0x03E7A000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 7, Tf = 2442MHz
-       0x03E7A000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 8, Tf = 2447MHz
-       0x03F7B000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 9, Tf = 2452MHz
-       0x03F7B000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 10, Tf = 2457MHz
-       0x03E7B000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 11, Tf = 2462MHz
-       0x03E7B000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 12, Tf = 2467MHz
-       0x03F7C000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 13, Tf = 2472MHz
-       0x03E7C000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW  // channel = 14, Tf = 2412M
+       0x03F79000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 1, Tf = 2412MHz */
+       0x03F79000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 2, Tf = 2417MHz */
+       0x03E79000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 3, Tf = 2422MHz */
+       0x03E79000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 4, Tf = 2427MHz */
+       0x03F7A000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 5, Tf = 2432MHz */
+       0x03F7A000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 6, Tf = 2437MHz */
+       0x03E7A000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 7, Tf = 2442MHz */
+       0x03E7A000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 8, Tf = 2447MHz */
+       0x03F7B000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 9, Tf = 2452MHz */
+       0x03F7B000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 10, Tf = 2457MHz */
+       0x03E7B000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 11, Tf = 2462MHz */
+       0x03E7B000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 12, Tf = 2467MHz */
+       0x03F7C000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 13, Tf = 2472MHz */
+       0x03E7C000+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW  /* channel = 14, Tf = 2412M */
 };
 
 static const unsigned long dwAL2230ChannelTable1[CB_MAX_CHANNEL] = {
-       0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 1, Tf = 2412MHz
-       0x0B333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 2, Tf = 2417MHz
-       0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 3, Tf = 2422MHz
-       0x0B333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 4, Tf = 2427MHz
-       0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 5, Tf = 2432MHz
-       0x0B333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 6, Tf = 2437MHz
-       0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 7, Tf = 2442MHz
-       0x0B333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 8, Tf = 2447MHz
-       0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 9, Tf = 2452MHz
-       0x0B333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 10, Tf = 2457MHz
-       0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 11, Tf = 2462MHz
-       0x0B333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 12, Tf = 2467MHz
-       0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 13, Tf = 2472MHz
-       0x06666100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW  // channel = 14, Tf = 2412M
+       0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 1, Tf = 2412MHz */
+       0x0B333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 2, Tf = 2417MHz */
+       0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 3, Tf = 2422MHz */
+       0x0B333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 4, Tf = 2427MHz */
+       0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 5, Tf = 2432MHz */
+       0x0B333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 6, Tf = 2437MHz */
+       0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 7, Tf = 2442MHz */
+       0x0B333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 8, Tf = 2447MHz */
+       0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 9, Tf = 2452MHz */
+       0x0B333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 10, Tf = 2457MHz */
+       0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 11, Tf = 2462MHz */
+       0x0B333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 12, Tf = 2467MHz */
+       0x03333100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 13, Tf = 2472MHz */
+       0x06666100+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW  /* channel = 14, Tf = 2412M */
 };
 
 static unsigned long dwAL2230PowerTable[AL2230_PWR_IDX_LEN] = {
@@ -168,240 +168,240 @@ static unsigned long dwAL2230PowerTable[AL2230_PWR_IDX_LEN] = {
        0x0407F900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW
 };
 
-// 40MHz reference frequency
-// Need to Pull PLLON(PE3) low when writing channel registers through 3-wire.
+/* 40MHz reference frequency
+ * 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
-       0x841FF200+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11a: 451FE2
-       0x3FDFA300+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11a: 5FDFA3
-       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // 11b/g    // Need modify for 11a
-       // RoberYu:20050113, Rev0.47 Regsiter Setting Guide
-       0x802B5500+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11a: 8D1B55
+       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 */
+       0x841FF200+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* Need modify for 11a: 451FE2 */
+       0x3FDFA300+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* Need modify for 11a: 5FDFA3 */
+       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* 11b/g    // Need modify for 11a */
+       /* RoberYu:20050113, Rev0.47 Regsiter Setting Guide */
+       0x802B5500+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* Need modify for 11a: 8D1B55 */
        0x56AF3600+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
-       0xCE020700+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11a: 860207
+       0xCE020700+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* Need modify for 11a: 860207 */
        0x6EBC0800+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
        0x221BB900+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
-       0xE0000A00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11a: E0600A
-       0x08031B00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // init 0x080B1B00 => 0x080F1B00 for 3 wire control TxGain(D10)
-       // RoberYu:20050113, Rev0.47 Regsiter Setting Guide
-       0x000A3C00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11a: 00143C
+       0xE0000A00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* Need modify for 11a: E0600A */
+       0x08031B00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* init 0x080B1B00 => 0x080F1B00 for 3 wire control TxGain(D10) */
+       /* RoberYu:20050113, Rev0.47 Regsiter Setting Guide */
+       0x000A3C00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* Need modify for 11a: 00143C */
        0xFFFFFD00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
        0x00000E00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
-       0x1ABA8F00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW  // Need modify for 11a: 12BACF
+       0x1ABA8F00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW  /* Need modify for 11a: 12BACF */
 };
 
 static const unsigned long dwAL7230InitTableAMode[CB_AL7230_INIT_SEQ] = {
-       0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Channel184 // Need modify for 11b/g
-       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Channel184 // Need modify for 11b/g
-       0x451FE200+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11b/g
-       0x5FDFA300+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11b/g
-       0x67F78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // 11a    // Need modify for 11b/g
-       0x853F5500+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11b/g, RoberYu:20050113
+       0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* Channel184 // Need modify for 11b/g */
+       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* Channel184 // Need modify for 11b/g */
+       0x451FE200+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* Need modify for 11b/g */
+       0x5FDFA300+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* Need modify for 11b/g */
+       0x67F78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* 11a    // Need modify for 11b/g */
+       0x853F5500+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* Need modify for 11b/g, RoberYu:20050113 */
        0x56AF3600+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
-       0xCE020700+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11b/g
+       0xCE020700+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* Need modify for 11b/g */
        0x6EBC0800+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
        0x221BB900+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
-       0xE0600A00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11b/g
-       0x08031B00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // init 0x080B1B00 => 0x080F1B00 for 3 wire control TxGain(D10)
-       0x00147C00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // Need modify for 11b/g
+       0xE0600A00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* Need modify for 11b/g */
+       0x08031B00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* init 0x080B1B00 => 0x080F1B00 for 3 wire control TxGain(D10) */
+       0x00147C00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* Need modify for 11b/g */
        0xFFFFFD00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
        0x00000E00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW,
-       0x12BACF00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW  // Need modify for 11b/g
+       0x12BACF00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW  /* Need modify for 11b/g */
 };
 
 static const unsigned long dwAL7230ChannelTable0[CB_MAX_CHANNEL] = {
-       0x00379000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  1, Tf = 2412MHz
-       0x00379000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  2, Tf = 2417MHz
-       0x00379000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  3, Tf = 2422MHz
-       0x00379000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  4, Tf = 2427MHz
-       0x0037A000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  5, Tf = 2432MHz
-       0x0037A000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  6, Tf = 2437MHz
-       0x0037A000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  7, Tf = 2442MHz
-       0x0037A000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  8, Tf = 2447MHz //RobertYu: 20050218, update for APNode 0.49
-       0x0037B000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  9, Tf = 2452MHz //RobertYu: 20050218, update for APNode 0.49
-       0x0037B000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 10, Tf = 2457MHz //RobertYu: 20050218, update for APNode 0.49
-       0x0037B000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 11, Tf = 2462MHz //RobertYu: 20050218, update for APNode 0.49
-       0x0037B000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 12, Tf = 2467MHz //RobertYu: 20050218, update for APNode 0.49
-       0x0037C000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 13, Tf = 2472MHz //RobertYu: 20050218, update for APNode 0.49
-       0x0037C000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 14, Tf = 2484MHz
-
-       // 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196  (Value:15 ~ 22)
-       0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 183, Tf = 4915MHz (15)
-       0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 184, Tf = 4920MHz (16)
-       0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 185, Tf = 4925MHz (17)
-       0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 187, Tf = 4935MHz (18)
-       0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 188, Tf = 4940MHz (19)
-       0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 189, Tf = 4945MHz (20)
-       0x0FF53000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 192, Tf = 4960MHz (21)
-       0x0FF53000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 196, Tf = 4980MHz (22)
-
-       // 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64,
-       // 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165  (Value 23 ~ 56)
-
-       0x0FF54000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =   7, Tf = 5035MHz (23)
-       0x0FF54000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =   8, Tf = 5040MHz (24)
-       0x0FF54000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =   9, Tf = 5045MHz (25)
-       0x0FF54000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  11, Tf = 5055MHz (26)
-       0x0FF54000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  12, Tf = 5060MHz (27)
-       0x0FF55000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  16, Tf = 5080MHz (28)
-       0x0FF56000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  34, Tf = 5170MHz (29)
-       0x0FF56000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  36, Tf = 5180MHz (30)
-       0x0FF57000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  38, Tf = 5190MHz (31) //RobertYu: 20050218, update for APNode 0.49
-       0x0FF57000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  40, Tf = 5200MHz (32)
-       0x0FF57000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  42, Tf = 5210MHz (33)
-       0x0FF57000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  44, Tf = 5220MHz (34)
-       0x0FF57000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  46, Tf = 5230MHz (35)
-       0x0FF57000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  48, Tf = 5240MHz (36)
-       0x0FF58000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  52, Tf = 5260MHz (37)
-       0x0FF58000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  56, Tf = 5280MHz (38)
-       0x0FF58000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  60, Tf = 5300MHz (39)
-       0x0FF59000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  64, Tf = 5320MHz (40)
-
-       0x0FF5C000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 100, Tf = 5500MHz (41)
-       0x0FF5C000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 104, Tf = 5520MHz (42)
-       0x0FF5C000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 108, Tf = 5540MHz (43)
-       0x0FF5D000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 112, Tf = 5560MHz (44)
-       0x0FF5D000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 116, Tf = 5580MHz (45)
-       0x0FF5D000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 120, Tf = 5600MHz (46)
-       0x0FF5E000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 124, Tf = 5620MHz (47)
-       0x0FF5E000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 128, Tf = 5640MHz (48)
-       0x0FF5E000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 132, Tf = 5660MHz (49)
-       0x0FF5F000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 136, Tf = 5680MHz (50)
-       0x0FF5F000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 140, Tf = 5700MHz (51)
-       0x0FF60000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 149, Tf = 5745MHz (52)
-       0x0FF60000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 153, Tf = 5765MHz (53)
-       0x0FF60000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 157, Tf = 5785MHz (54)
-       0x0FF61000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 161, Tf = 5805MHz (55)
-       0x0FF61000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW  // channel = 165, Tf = 5825MHz (56)
+       0x00379000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  1, Tf = 2412MHz */
+       0x00379000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  2, Tf = 2417MHz */
+       0x00379000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  3, Tf = 2422MHz */
+       0x00379000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  4, Tf = 2427MHz */
+       0x0037A000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  5, Tf = 2432MHz */
+       0x0037A000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  6, Tf = 2437MHz */
+       0x0037A000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  7, Tf = 2442MHz */
+       0x0037A000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  8, Tf = 2447MHz //RobertYu: 20050218, update for APNode 0.49 */
+       0x0037B000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  9, Tf = 2452MHz //RobertYu: 20050218, update for APNode 0.49 */
+       0x0037B000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 10, Tf = 2457MHz //RobertYu: 20050218, update for APNode 0.49 */
+       0x0037B000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 11, Tf = 2462MHz //RobertYu: 20050218, update for APNode 0.49 */
+       0x0037B000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 12, Tf = 2467MHz //RobertYu: 20050218, update for APNode 0.49 */
+       0x0037C000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 13, Tf = 2472MHz //RobertYu: 20050218, update for APNode 0.49 */
+       0x0037C000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 14, Tf = 2484MHz */
+
+       /* 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196  (Value:15 ~ 22) */
+       0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 183, Tf = 4915MHz (15) */
+       0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 184, Tf = 4920MHz (16) */
+       0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 185, Tf = 4925MHz (17) */
+       0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 187, Tf = 4935MHz (18) */
+       0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 188, Tf = 4940MHz (19) */
+       0x0FF52000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 189, Tf = 4945MHz (20) */
+       0x0FF53000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 192, Tf = 4960MHz (21) */
+       0x0FF53000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 196, Tf = 4980MHz (22) */
+
+       /* 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64,
+        * 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165  (Value 23 ~ 56) */
+
+       0x0FF54000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =   7, Tf = 5035MHz (23) */
+       0x0FF54000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =   8, Tf = 5040MHz (24) */
+       0x0FF54000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =   9, Tf = 5045MHz (25) */
+       0x0FF54000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  11, Tf = 5055MHz (26) */
+       0x0FF54000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  12, Tf = 5060MHz (27) */
+       0x0FF55000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  16, Tf = 5080MHz (28) */
+       0x0FF56000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  34, Tf = 5170MHz (29) */
+       0x0FF56000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  36, Tf = 5180MHz (30) */
+       0x0FF57000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  38, Tf = 5190MHz (31) //RobertYu: 20050218, update for APNode 0.49 */
+       0x0FF57000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  40, Tf = 5200MHz (32) */
+       0x0FF57000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  42, Tf = 5210MHz (33) */
+       0x0FF57000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  44, Tf = 5220MHz (34) */
+       0x0FF57000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  46, Tf = 5230MHz (35) */
+       0x0FF57000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  48, Tf = 5240MHz (36) */
+       0x0FF58000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  52, Tf = 5260MHz (37) */
+       0x0FF58000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  56, Tf = 5280MHz (38) */
+       0x0FF58000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  60, Tf = 5300MHz (39) */
+       0x0FF59000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  64, Tf = 5320MHz (40) */
+
+       0x0FF5C000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 100, Tf = 5500MHz (41) */
+       0x0FF5C000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 104, Tf = 5520MHz (42) */
+       0x0FF5C000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 108, Tf = 5540MHz (43) */
+       0x0FF5D000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 112, Tf = 5560MHz (44) */
+       0x0FF5D000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 116, Tf = 5580MHz (45) */
+       0x0FF5D000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 120, Tf = 5600MHz (46) */
+       0x0FF5E000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 124, Tf = 5620MHz (47) */
+       0x0FF5E000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 128, Tf = 5640MHz (48) */
+       0x0FF5E000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 132, Tf = 5660MHz (49) */
+       0x0FF5F000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 136, Tf = 5680MHz (50) */
+       0x0FF5F000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 140, Tf = 5700MHz (51) */
+       0x0FF60000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 149, Tf = 5745MHz (52) */
+       0x0FF60000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 153, Tf = 5765MHz (53) */
+       0x0FF60000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 157, Tf = 5785MHz (54) */
+       0x0FF61000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 161, Tf = 5805MHz (55) */
+       0x0FF61000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW  /* channel = 165, Tf = 5825MHz (56) */
 };
 
 static const unsigned long dwAL7230ChannelTable1[CB_MAX_CHANNEL] = {
-       0x13333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  1, Tf = 2412MHz
-       0x1B333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  2, Tf = 2417MHz
-       0x03333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  3, Tf = 2422MHz
-       0x0B333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  4, Tf = 2427MHz
-       0x13333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  5, Tf = 2432MHz
-       0x1B333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  6, Tf = 2437MHz
-       0x03333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  7, Tf = 2442MHz
-       0x0B333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  8, Tf = 2447MHz
-       0x13333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  9, Tf = 2452MHz
-       0x1B333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 10, Tf = 2457MHz
-       0x03333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 11, Tf = 2462MHz
-       0x0B333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 12, Tf = 2467MHz
-       0x13333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 13, Tf = 2472MHz
-       0x06666100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 14, Tf = 2484MHz
-
-       // 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196  (Value:15 ~ 22)
-       0x1D555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 183, Tf = 4915MHz (15)
-       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 184, Tf = 4920MHz (16)
-       0x02AAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 185, Tf = 4925MHz (17)
-       0x08000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 187, Tf = 4935MHz (18)
-       0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 188, Tf = 4940MHz (19)
-       0x0D555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 189, Tf = 4945MHz (20)
-       0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 192, Tf = 4960MHz (21)
-       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 196, Tf = 4980MHz (22)
-
-       // 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64,
-       // 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165  (Value 23 ~ 56)
-       0x1D555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =   7, Tf = 5035MHz (23)
-       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =   8, Tf = 5040MHz (24)
-       0x02AAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =   9, Tf = 5045MHz (25)
-       0x08000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  11, Tf = 5055MHz (26)
-       0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  12, Tf = 5060MHz (27)
-       0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  16, Tf = 5080MHz (28)
-       0x05555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  34, Tf = 5170MHz (29)
-       0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  36, Tf = 5180MHz (30)
-       0x10000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  38, Tf = 5190MHz (31)
-       0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  40, Tf = 5200MHz (32)
-       0x1AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  42, Tf = 5210MHz (33)
-       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  44, Tf = 5220MHz (34)
-       0x05555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  46, Tf = 5230MHz (35)
-       0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  48, Tf = 5240MHz (36)
-       0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  52, Tf = 5260MHz (37)
-       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  56, Tf = 5280MHz (38)
-       0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  60, Tf = 5300MHz (39)
-       0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  64, Tf = 5320MHz (40)
-       0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 100, Tf = 5500MHz (41)
-       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 104, Tf = 5520MHz (42)
-       0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 108, Tf = 5540MHz (43)
-       0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 112, Tf = 5560MHz (44)
-       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 116, Tf = 5580MHz (45)
-       0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 120, Tf = 5600MHz (46)
-       0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 124, Tf = 5620MHz (47)
-       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 128, Tf = 5640MHz (48)
-       0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 132, Tf = 5660MHz (49)
-       0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 136, Tf = 5680MHz (50)
-       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 140, Tf = 5700MHz (51)
-       0x18000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 149, Tf = 5745MHz (52)
-       0x02AAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 153, Tf = 5765MHz (53)
-       0x0D555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 157, Tf = 5785MHz (54)
-       0x18000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 161, Tf = 5805MHz (55)
-       0x02AAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW  // channel = 165, Tf = 5825MHz (56)
+       0x13333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  1, Tf = 2412MHz */
+       0x1B333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  2, Tf = 2417MHz */
+       0x03333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  3, Tf = 2422MHz */
+       0x0B333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  4, Tf = 2427MHz */
+       0x13333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  5, Tf = 2432MHz */
+       0x1B333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  6, Tf = 2437MHz */
+       0x03333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  7, Tf = 2442MHz */
+       0x0B333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  8, Tf = 2447MHz */
+       0x13333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  9, Tf = 2452MHz */
+       0x1B333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 10, Tf = 2457MHz */
+       0x03333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 11, Tf = 2462MHz */
+       0x0B333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 12, Tf = 2467MHz */
+       0x13333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 13, Tf = 2472MHz */
+       0x06666100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 14, Tf = 2484MHz */
+
+       /* 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196  (Value:15 ~ 22) */
+       0x1D555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 183, Tf = 4915MHz (15) */
+       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 184, Tf = 4920MHz (16) */
+       0x02AAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 185, Tf = 4925MHz (17) */
+       0x08000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 187, Tf = 4935MHz (18) */
+       0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 188, Tf = 4940MHz (19) */
+       0x0D555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 189, Tf = 4945MHz (20) */
+       0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 192, Tf = 4960MHz (21) */
+       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 196, Tf = 4980MHz (22) */
+
+       /* 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64,
+        * 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165  (Value 23 ~ 56) */
+       0x1D555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =   7, Tf = 5035MHz (23) */
+       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =   8, Tf = 5040MHz (24) */
+       0x02AAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =   9, Tf = 5045MHz (25) */
+       0x08000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  11, Tf = 5055MHz (26) */
+       0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  12, Tf = 5060MHz (27) */
+       0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  16, Tf = 5080MHz (28) */
+       0x05555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  34, Tf = 5170MHz (29) */
+       0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  36, Tf = 5180MHz (30) */
+       0x10000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  38, Tf = 5190MHz (31) */
+       0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  40, Tf = 5200MHz (32) */
+       0x1AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  42, Tf = 5210MHz (33) */
+       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  44, Tf = 5220MHz (34) */
+       0x05555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  46, Tf = 5230MHz (35) */
+       0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  48, Tf = 5240MHz (36) */
+       0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  52, Tf = 5260MHz (37) */
+       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  56, Tf = 5280MHz (38) */
+       0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  60, Tf = 5300MHz (39) */
+       0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  64, Tf = 5320MHz (40) */
+       0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 100, Tf = 5500MHz (41) */
+       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 104, Tf = 5520MHz (42) */
+       0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 108, Tf = 5540MHz (43) */
+       0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 112, Tf = 5560MHz (44) */
+       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 116, Tf = 5580MHz (45) */
+       0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 120, Tf = 5600MHz (46) */
+       0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 124, Tf = 5620MHz (47) */
+       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 128, Tf = 5640MHz (48) */
+       0x0AAAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 132, Tf = 5660MHz (49) */
+       0x15555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 136, Tf = 5680MHz (50) */
+       0x00000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 140, Tf = 5700MHz (51) */
+       0x18000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 149, Tf = 5745MHz (52) */
+       0x02AAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 153, Tf = 5765MHz (53) */
+       0x0D555100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 157, Tf = 5785MHz (54) */
+       0x18000100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 161, Tf = 5805MHz (55) */
+       0x02AAA100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW  /* channel = 165, Tf = 5825MHz (56) */
 };
 
 static const unsigned long dwAL7230ChannelTable2[CB_MAX_CHANNEL] = {
-       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  1, Tf = 2412MHz
-       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  2, Tf = 2417MHz
-       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  3, Tf = 2422MHz
-       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  4, Tf = 2427MHz
-       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  5, Tf = 2432MHz
-       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  6, Tf = 2437MHz
-       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  7, Tf = 2442MHz
-       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  8, Tf = 2447MHz
-       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  9, Tf = 2452MHz
-       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 10, Tf = 2457MHz
-       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 11, Tf = 2462MHz
-       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 12, Tf = 2467MHz
-       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 13, Tf = 2472MHz
-       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 14, Tf = 2484MHz
-
-       // 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196  (Value:15 ~ 22)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 183, Tf = 4915MHz (15)
-       0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 184, Tf = 4920MHz (16)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 185, Tf = 4925MHz (17)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 187, Tf = 4935MHz (18)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 188, Tf = 4940MHz (19)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 189, Tf = 4945MHz (20)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 192, Tf = 4960MHz (21)
-       0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 196, Tf = 4980MHz (22)
-
-       // 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64,
-       // 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165  (Value 23 ~ 56)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =   7, Tf = 5035MHz (23)
-       0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =   8, Tf = 5040MHz (24)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =   9, Tf = 5045MHz (25)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  11, Tf = 5055MHz (26)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  12, Tf = 5060MHz (27)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  16, Tf = 5080MHz (28)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  34, Tf = 5170MHz (29)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  36, Tf = 5180MHz (30)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  38, Tf = 5190MHz (31)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  40, Tf = 5200MHz (32)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  42, Tf = 5210MHz (33)
-       0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  44, Tf = 5220MHz (34)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  46, Tf = 5230MHz (35)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  48, Tf = 5240MHz (36)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  52, Tf = 5260MHz (37)
-       0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  56, Tf = 5280MHz (38)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  60, Tf = 5300MHz (39)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel =  64, Tf = 5320MHz (40)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 100, Tf = 5500MHz (41)
-       0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 104, Tf = 5520MHz (42)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 108, Tf = 5540MHz (43)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 112, Tf = 5560MHz (44)
-       0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 116, Tf = 5580MHz (45)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 120, Tf = 5600MHz (46)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 124, Tf = 5620MHz (47)
-       0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 128, Tf = 5640MHz (48)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 132, Tf = 5660MHz (49)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 136, Tf = 5680MHz (50)
-       0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 140, Tf = 5700MHz (51)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 149, Tf = 5745MHz (52)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 153, Tf = 5765MHz (53)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 157, Tf = 5785MHz (54)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, // channel = 161, Tf = 5805MHz (55)
-       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW  // channel = 165, Tf = 5825MHz (56)
+       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  1, Tf = 2412MHz */
+       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  2, Tf = 2417MHz */
+       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  3, Tf = 2422MHz */
+       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  4, Tf = 2427MHz */
+       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  5, Tf = 2432MHz */
+       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  6, Tf = 2437MHz */
+       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  7, Tf = 2442MHz */
+       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  8, Tf = 2447MHz */
+       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  9, Tf = 2452MHz */
+       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 10, Tf = 2457MHz */
+       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 11, Tf = 2462MHz */
+       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 12, Tf = 2467MHz */
+       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 13, Tf = 2472MHz */
+       0x7FD78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 14, Tf = 2484MHz */
+
+       /* 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196  (Value:15 ~ 22) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 183, Tf = 4915MHz (15) */
+       0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 184, Tf = 4920MHz (16) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 185, Tf = 4925MHz (17) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 187, Tf = 4935MHz (18) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 188, Tf = 4940MHz (19) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 189, Tf = 4945MHz (20) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 192, Tf = 4960MHz (21) */
+       0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 196, Tf = 4980MHz (22) */
+
+       /* 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64,
+        * 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165  (Value 23 ~ 56) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =   7, Tf = 5035MHz (23) */
+       0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =   8, Tf = 5040MHz (24) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =   9, Tf = 5045MHz (25) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  11, Tf = 5055MHz (26) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  12, Tf = 5060MHz (27) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  16, Tf = 5080MHz (28) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  34, Tf = 5170MHz (29) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  36, Tf = 5180MHz (30) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  38, Tf = 5190MHz (31) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  40, Tf = 5200MHz (32) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  42, Tf = 5210MHz (33) */
+       0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  44, Tf = 5220MHz (34) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  46, Tf = 5230MHz (35) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  48, Tf = 5240MHz (36) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  52, Tf = 5260MHz (37) */
+       0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  56, Tf = 5280MHz (38) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  60, Tf = 5300MHz (39) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel =  64, Tf = 5320MHz (40) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 100, Tf = 5500MHz (41) */
+       0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 104, Tf = 5520MHz (42) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 108, Tf = 5540MHz (43) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 112, Tf = 5560MHz (44) */
+       0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 116, Tf = 5580MHz (45) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 120, Tf = 5600MHz (46) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 124, Tf = 5620MHz (47) */
+       0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 128, Tf = 5640MHz (48) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 132, Tf = 5660MHz (49) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 136, Tf = 5680MHz (50) */
+       0x67D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 140, Tf = 5700MHz (51) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 149, Tf = 5745MHz (52) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 153, Tf = 5765MHz (53) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 157, Tf = 5785MHz (54) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* channel = 161, Tf = 5805MHz (55) */
+       0x77D78400+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW  /* channel = 165, Tf = 5825MHz (56) */
 };
 
 /*
@@ -438,13 +438,13 @@ static bool s_bAL7230Init(struct vnt_private *priv)
        MACvWordRegBitsOn(dwIoBase, MAC_REG_SOFTPWRCTL, SOFTPWRCTL_SWPE3);
 
        /* Calibration */
-       MACvTimer0MicroSDelay(dwIoBase, 150);//150us
+       MACvTimer0MicroSDelay(dwIoBase, 150);/* 150us */
        /* TXDCOC:active, RCK:disable */
        bResult &= IFRFbWriteEmbedded(priv, (0x9ABA8F00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW));
-       MACvTimer0MicroSDelay(dwIoBase, 30);//30us
+       MACvTimer0MicroSDelay(dwIoBase, 30);/* 30us */
        /* TXDCOC:disable, RCK:active */
        bResult &= IFRFbWriteEmbedded(priv, (0x3ABA8F00+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW));
-       MACvTimer0MicroSDelay(dwIoBase, 30);//30us
+       MACvTimer0MicroSDelay(dwIoBase, 30);/* 30us */
        /* TXDCOC:disable, RCK:disable */
        bResult &= IFRFbWriteEmbedded(priv, dwAL7230InitTable[CB_AL7230_INIT_SEQ-1]);
 
@@ -457,7 +457,7 @@ static bool s_bAL7230Init(struct vnt_private *priv)
 
        /* PE1: TX_ON, PE2: RX_ON, PE3: PLLON */
        /* 3-wire control for power saving mode */
-       VNSvOutPortB(dwIoBase + MAC_REG_PSPWRSIG, (PSSIG_WPE3 | PSSIG_WPE2)); //1100 0000
+       VNSvOutPortB(dwIoBase + MAC_REG_PSPWRSIG, (PSSIG_WPE3 | PSSIG_WPE2)); /* 1100 0000 */
 
        return bResult;
 }
@@ -557,16 +557,16 @@ static bool RFbAL2230Init(struct vnt_private *priv)
 
        for (ii = 0; ii < CB_AL2230_INIT_SEQ; ii++)
                bResult &= IFRFbWriteEmbedded(priv, dwAL2230InitTable[ii]);
-       MACvTimer0MicroSDelay(dwIoBase, 30); //delay 30 us
+       MACvTimer0MicroSDelay(dwIoBase, 30); /* delay 30 us */
 
        /* PLL On */
        MACvWordRegBitsOn(dwIoBase, MAC_REG_SOFTPWRCTL, SOFTPWRCTL_SWPE3);
 
-       MACvTimer0MicroSDelay(dwIoBase, 150);//150us
+       MACvTimer0MicroSDelay(dwIoBase, 150);/* 150us */
        bResult &= IFRFbWriteEmbedded(priv, (0x00d80f00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW));
-       MACvTimer0MicroSDelay(dwIoBase, 30);//30us
+       MACvTimer0MicroSDelay(dwIoBase, 30);/* 30us */
        bResult &= IFRFbWriteEmbedded(priv, (0x00780f00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW));
-       MACvTimer0MicroSDelay(dwIoBase, 30);//30us
+       MACvTimer0MicroSDelay(dwIoBase, 30);/* 30us */
        bResult &= IFRFbWriteEmbedded(priv, dwAL2230InitTable[CB_AL2230_INIT_SEQ-1]);
 
        MACvWordRegBitsOn(dwIoBase, MAC_REG_SOFTPWRCTL, (SOFTPWRCTL_SWPE3    |
@@ -575,7 +575,7 @@ static bool RFbAL2230Init(struct vnt_private *priv)
                                                         SOFTPWRCTL_TXPEINV));
 
        /* 3-wire control for power saving mode */
-       VNSvOutPortB(dwIoBase + MAC_REG_PSPWRSIG, (PSSIG_WPE3 | PSSIG_WPE2)); //1100 0000
+       VNSvOutPortB(dwIoBase + MAC_REG_PSPWRSIG, (PSSIG_WPE3 | PSSIG_WPE2)); /* 1100 0000 */
 
        return bResult;
 }
@@ -661,11 +661,11 @@ bool RFbSelectChannel(struct vnt_private *priv, unsigned char byRFType,
        case RF_AL2230S:
                bResult = RFbAL2230SelectChannel(priv, byChannel);
                break;
-               //{{ RobertYu: 20050104
+               /*{{ RobertYu: 20050104 */
        case RF_AIROHA7230:
                bResult = s_bAL7230SelectChannel(priv, byChannel);
                break;
-               //}} RobertYu
+               /*}} RobertYu */
        case RF_NOTHING:
                bResult = true;
                break;
index 2ea21e2b00f2ce93aff6123925f2f6e0a1c09936..b5fc3eed06fb71e7b7dd8f294f4b1c8c392d67e1 100644 (file)
 #include "device.h"
 
 /*---------------------  Export Definitions -------------------------*/
-//
-// Baseband RF pair definition in eeprom (Bits 6..0)
-//
+/*
+ * Baseband RF pair definition in eeprom (Bits 6..0)
+*/
 #define RF_RFMD2959             0x01
 #define RF_MAXIMAG              0x02
 #define RF_AIROHA               0x03
 
 #define RF_UW2451               0x05
 #define RF_MAXIMG               0x06
-#define RF_MAXIM2829            0x07 // RobertYu: 20041118
-#define RF_UW2452               0x08 // RobertYu: 20041210
-#define RF_AIROHA7230           0x0a // RobertYu: 20050104
+#define RF_MAXIM2829            0x07 /* RobertYu: 20041118 */
+#define RF_UW2452               0x08 /* RobertYu: 20041210 */
+#define RF_AIROHA7230           0x0a /* RobertYu: 20050104 */
 #define RF_UW2453               0x0b
 
 #define RF_VT3226               0x09
@@ -63,9 +63,9 @@
 #define ZONE_MKK                6
 #define ZONE_ISRAEL             7
 
-//[20050104] CB_MAXIM2829_CHANNEL_5G_HIGH, CB_UW2452_CHANNEL_5G_HIGH: 40==>41
-#define CB_MAXIM2829_CHANNEL_5G_HIGH    41 //Index41: channel = 100, Tf = 5500MHz, set the (A3:A0=0101) D6=1
-#define CB_UW2452_CHANNEL_5G_HIGH       41 //[20041210] Index41: channel = 100, Tf = 5500MHz, change VCO2->VCO3
+/* [20050104] CB_MAXIM2829_CHANNEL_5G_HIGH, CB_UW2452_CHANNEL_5G_HIGH: 40==>41 */
+#define CB_MAXIM2829_CHANNEL_5G_HIGH    41 /* Index41: channel = 100, Tf = 5500MHz, set the (A3:A0=0101) D6=1 */
+#define CB_UW2452_CHANNEL_5G_HIGH       41 /* [20041210] Index41: channel = 100, Tf = 5500MHz, change VCO2->VCO3 */
 
 /*---------------------  Export Classes  ----------------------------*/
 
@@ -93,8 +93,8 @@ RFvRSSITodBm(
        long    *pldBm
 );
 
-//{{ RobertYu: 20050104
+/* {{ RobertYu: 20050104 */
 bool RFbAL7230SelectChannelPostProcess(struct vnt_private *, u16, u16);
-//}} RobertYu
+/* }} RobertYu */
 
-#endif // __RF_H__
+#endif /* __RF_H__ */
index 534338c466197013a5b66a8b3f0e7fe74982e490..380b879c05db4b5d27911969a2060e748570ffab 100644 (file)
@@ -387,7 +387,6 @@ s_uGetDataDuration(
                break;
        }
 
-       ASSERT(false);
        return 0;
 }
 
@@ -1089,7 +1088,7 @@ s_cbFillTxBufHead(struct vnt_private *pDevice, unsigned char byPktType,
 
 
        /* Set RrvTime/RTS/CTS Buffer */
-       wTxBufSize = sizeof(STxBufHead);
+       wTxBufSize = sizeof(struct vnt_tx_fifo_head);
        if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {/* 802.11g packet */
 
                if (byFBOption == AUTO_FB_NONE) {
@@ -1203,7 +1202,6 @@ s_cbFillTxBufHead(struct vnt_private *pDevice, unsigned char byPktType,
 
        ptdCurr->pTDInfo->dwReqCount = cbReqCount;
        ptdCurr->pTDInfo->dwHeaderLength = cbHeaderLength;
-       ptdCurr->pTDInfo->skb_dma = ptdCurr->pTDInfo->buf_dma;
 
        return cbHeaderLength;
 }
index b9bd1639b13eab216ed013cd5995d5463d67581c..54694df14e4488c330c98fda27fa4fcf57bb5207 100644 (file)
@@ -197,4 +197,4 @@ int vnt_beacon_make(struct vnt_private *, struct ieee80211_vif *);
 int vnt_beacon_enable(struct vnt_private *, struct ieee80211_vif *,
                      struct ieee80211_bss_conf *);
 
-#endif // __RXTX_H__
+#endif /* __RXTX_H__ */
index cc63dc8d47f713a46e8dbb041991cc7b7f1a7f12..85fe0464cfb3a20a44dfab6cb3020d2d4b87f6da 100644 (file)
 /* For memory mapped IO */
 
 
-#define VNSvInPortB(dwIOAddress, pbyData)                              \
-do {                                                                   \
-       *(pbyData) = ioread8(dwIOAddress);                              \
-} while (0)
+#define VNSvInPortB(dwIOAddress, pbyData) \
+       (*(pbyData) = ioread8(dwIOAddress))
 
-#define VNSvInPortW(dwIOAddress, pwData)                               \
-do {                                                                   \
-       *(pwData) = ioread16(dwIOAddress);                              \
-} while (0)
+#define VNSvInPortW(dwIOAddress, pwData) \
+       (*(pwData) = ioread16(dwIOAddress))
 
-#define VNSvInPortD(dwIOAddress, pdwData)                              \
-do {                                                                   \
-       *(pdwData) = ioread32(dwIOAddress);                             \
-} while (0)
+#define VNSvInPortD(dwIOAddress, pdwData) \
+       (*(pdwData) = ioread32(dwIOAddress))
 
-#define VNSvOutPortB(dwIOAddress, byData)                              \
-do {                                                                   \
-       iowrite8((u8)byData, dwIOAddress);                              \
-} while (0)
+#define VNSvOutPortB(dwIOAddress, byData) \
+       iowrite8((u8)(byData), dwIOAddress)
 
-#define VNSvOutPortW(dwIOAddress, wData)                               \
-do {                                                                   \
-       iowrite16((u16)wData, dwIOAddress);                             \
-} while (0)
+#define VNSvOutPortW(dwIOAddress, wData) \
+       iowrite16((u16)(wData), dwIOAddress)
 
-#define VNSvOutPortD(dwIOAddress, dwData)                              \
-do {                                                                   \
-       iowrite32((u32)dwData, dwIOAddress);                            \
-} while (0)
+#define VNSvOutPortD(dwIOAddress, dwData) \
+       iowrite32((u32)(dwData), dwIOAddress)
 
 #define PCAvDelayByIO(uDelayUnit)                              \
 do {                                                           \
index 8116791f4f068e38a05986fb5a76c9e88fb8ff87..da075f4852989840568e9cca434a975822dc8efd 100644 (file)
 #include "usbpipe.h"
 
 static const u16 vnt_time_stampoff[2][MAX_RATE] = {
-       {384, 288, 226, 209, 54, 43, 37, 31, 28, 25, 24, 23},/* Long Preamble */
-       {384, 192, 130, 113, 54, 43, 37, 31, 28, 25, 24, 23},/* Short Preamble */
+       /* Long Preamble */
+       {384, 288, 226, 209, 54, 43, 37, 31, 28, 25, 24, 23},
+
+       /* Short Preamble */
+       {384, 192, 130, 113, 54, 43, 37, 31, 28, 25, 24, 23},
 };
 
 static const u16 vnt_fb_opt0[2][5] = {
index 062d9c5ca4bdc953e452e865672db190914fb7e4..51bbf468fe45aa17679f7401bf1e02c4be0d1b52 100644 (file)
@@ -37,17 +37,26 @@ choice
        bool "SDIO support"
        depends on MMC
        ---help---
-         This module adds support for the SDIO interface
-         of adapters using WILC chipset. Select this if
-         your platform is using the SDIO bus.
+         This module adds support for the SDIO interface of adapters using
+         WILC1000 chipset. The Atmel WILC1000 SDIO is a full speed interface.
+         It meets SDIO card specification version 2.0. The interface supports
+         the 1-bit/4-bit SD transfer mode at the clock range of 0-50 MHz.
+         The host can use this interface to read and write from any register
+         within the chip as well as configure the WILC1000 for data DMA.
+         To use this interface, pin9 (SDIO_SPI_CFG) must be grounded. Select
+         this if your platform is using the SDIO bus.
 
        config WILC1000_SPI
        depends on SPI
        bool "SPI support"
        ---help---
-         This module adds support for the SPI interface
-         of adapters using WILC chipset. Select this if
-         your platform is using the SPI bus.
+         This module adds support for the SPI interface of adapters using
+         WILC1000 chipset. The Atmel WILC1000 has a Serial Peripheral
+         Interface (SPI) that operates as a SPI slave. This SPI interface can
+         be used for control and for serial I/O of 802.11 data. The SPI is a
+         full-duplex slave synchronous serial interface that is available
+         immediately following reset when pin 9 (SDIO_SPI_CFG) is tied to
+         VDDIO. Select this if your platform is using the SPI bus.
 endchoice
 
 config WILC1000_HW_OOB_INTR
@@ -55,5 +64,8 @@ config WILC1000_HW_OOB_INTR
        depends on WILC1000 && WILC1000_SDIO
        default n
        ---help---
-         If your platform don't recognize SDIO IRQ, connect chipset external IRQ pin
-         and check this option. Or, Use this to get all interrupts including SDIO interrupts.
+         This option enables out-of-band interrupt support for the WILC1000
+         chipset. This OOB interrupt is intended to provide a faster interrupt
+         mechanism for SDIO host controllers that don't support SDIO interrupt.
+         Select this option If the SDIO host controller in your platform
+         doesn't support SDIO time devision interrupt.
index a78c4d529a58af7e741040bbffcd17ffa67bfa8e..5ca8fa253306158f98108a0a1183d2626aa1b764 100644 (file)
@@ -25,10 +25,10 @@ ccflags-$(CONFIG_WILC1000_PREALLOCATE_AT_LOADING_DRIVER) += -DMEMORY_STATIC \
 ccflags-$(CONFIG_WILC1000_DYNAMICALLY_ALLOCATE_MEMROY) += -DWILC_NORMAL_ALLOC
 
 
-wilc1000-objs := wilc_wfi_netdevice.o wilc_wfi_cfgoperations.o linux_wlan.o linux_mon.o \
+wilc1000-objs := wilc_wfi_cfgoperations.o linux_wlan.o linux_mon.o \
                        wilc_memory.o wilc_msgqueue.o wilc_sleep.o wilc_strutils.o \
                        wilc_timer.o coreconfigurator.o host_interface.o \
-                       fifo_buffer.o wilc_sdio.o wilc_spi.o wilc_wlan_cfg.o wilc_debugfs.o
+                       wilc_sdio.o wilc_spi.o wilc_wlan_cfg.o wilc_debugfs.o
 
 wilc1000-$(CONFIG_WILC1000_SDIO) += linux_wlan_sdio.o
 wilc1000-$(CONFIG_WILC1000_SPI) += linux_wlan_spi.o
diff --git a/drivers/staging/wilc1000/coreconfigsimulator.h b/drivers/staging/wilc1000/coreconfigsimulator.h
deleted file mode 100644 (file)
index 5e01f8e..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-/*!
- *  @file      coreconfigsimulator.h
- *  @brief
- *  @author
- *  @sa                coreconfigsimulator.c
- *  @date      1 Mar 2012
- *  @version   1.0
- */
-
-#ifndef CORECONFIGSIMULATOR_H
-#define CORECONFIGSIMULATOR_H
-
-extern s32 CoreConfigSimulatorInit(void);
-extern s32 CoreConfigSimulatorDeInit(void);
-
-#endif
index ed6ac45c0385714ac6208b26ca55991428eed431..72ff7d42377e22ad4c952942d84bd412acb60fcd 100644 (file)
@@ -605,7 +605,7 @@ INLINE u16 get_cap_info(u8 *data)
 {
        u16 cap_info = 0;
        u16 index    = MAC_HDR_LEN;
-       tenuFrmSubtype st = BEACON;
+       tenuFrmSubtype st;
 
        st = get_sub_type(data);
 
@@ -681,9 +681,9 @@ s32 CoreConfiguratorInit(void)
                goto _fail_;
        }
 
-       WILC_memset((void *)gps8ConfigPacket, 0, MAX_PACKET_BUFF_SIZE);
+       memset((void *)gps8ConfigPacket, 0, MAX_PACKET_BUFF_SIZE);
 
-       WILC_memset((void *)(&gstrConfigPktInfo), 0, sizeof(tstrConfigPktInfo));
+       memset((void *)(&gstrConfigPktInfo), 0, sizeof(tstrConfigPktInfo));
 _fail_:
        return s32Error;
 }
@@ -706,11 +706,10 @@ u8 *get_tim_elm(u8 *pu8msa, u16 u16RxLen, u16 u16TagParamOffset)
 
        /* Search for the TIM Element Field and return if the element is found */
        while (u16index < (u16RxLen - FCS_LEN)) {
-               if (pu8msa[u16index] == ITIM) {
+               if (pu8msa[u16index] == ITIM)
                        return &pu8msa[u16index];
-               } else {
+               else
                        u16index += (IE_HDR_LEN + pu8msa[u16index + 1]);
-               }
        }
 
        return 0;
@@ -812,7 +811,7 @@ s32 ParseNetworkInfo(u8 *pu8MsgBuffer, tstrNetworkInfo **ppstrNetworkInfo)
                u32 u32Tsf_Hi;
 
                pstrNetworkInfo = (tstrNetworkInfo *)WILC_MALLOC(sizeof(tstrNetworkInfo));
-               WILC_memset((void *)(pstrNetworkInfo), 0, sizeof(tstrNetworkInfo));
+               memset((void *)(pstrNetworkInfo), 0, sizeof(tstrNetworkInfo));
 
                pstrNetworkInfo->s8rssi = pu8WidVal[0];
 
@@ -855,15 +854,14 @@ s32 ParseNetworkInfo(u8 *pu8MsgBuffer, tstrNetworkInfo **ppstrNetworkInfo)
 
                /* Get DTIM Period */
                pu8TimElm = get_tim_elm(pu8msa, (u16RxLen + FCS_LEN), u8index);
-               if (pu8TimElm != 0) {
+               if (pu8TimElm != 0)
                        pstrNetworkInfo->u8DtimPeriod = pu8TimElm[3];
-               }
                pu8IEs = &pu8msa[MAC_HDR_LEN + TIME_STAMP_LEN + BEACON_INTERVAL_LEN + CAP_INFO_LEN];
                u16IEsLen = u16RxLen - (MAC_HDR_LEN + TIME_STAMP_LEN + BEACON_INTERVAL_LEN + CAP_INFO_LEN);
 
                if (u16IEsLen > 0) {
                        pstrNetworkInfo->pu8IEs = (u8 *)WILC_MALLOC(u16IEsLen);
-                       WILC_memset((void *)(pstrNetworkInfo->pu8IEs), 0, u16IEsLen);
+                       memset((void *)(pstrNetworkInfo->pu8IEs), 0, u16IEsLen);
 
                        WILC_memcpy(pstrNetworkInfo->pu8IEs, pu8IEs, u16IEsLen);
                }
@@ -930,7 +928,7 @@ s32 ParseAssocRespInfo(u8 *pu8Buffer, u32 u32BufferLen,
        u16 u16IEsLen = 0;
 
        pstrConnectRespInfo = (tstrConnectRespInfo *)WILC_MALLOC(sizeof(tstrConnectRespInfo));
-       WILC_memset((void *)(pstrConnectRespInfo), 0, sizeof(tstrConnectRespInfo));
+       memset((void *)(pstrConnectRespInfo), 0, sizeof(tstrConnectRespInfo));
 
        /* u16AssocRespLen = pu8Buffer[0]; */
        u16AssocRespLen = (u16)u32BufferLen;
@@ -950,7 +948,7 @@ s32 ParseAssocRespInfo(u8 *pu8Buffer, u32 u32BufferLen,
                u16IEsLen = u16AssocRespLen - (CAP_INFO_LEN + STATUS_CODE_LEN + AID_LEN);
 
                pstrConnectRespInfo->pu8RespIEs = (u8 *)WILC_MALLOC(u16IEsLen);
-               WILC_memset((void *)(pstrConnectRespInfo->pu8RespIEs), 0, u16IEsLen);
+               memset((void *)(pstrConnectRespInfo->pu8RespIEs), 0, u16IEsLen);
 
                WILC_memcpy(pstrConnectRespInfo->pu8RespIEs, pu8IEs, u16IEsLen);
                pstrConnectRespInfo->u16RespIEsLen = u16IEsLen;
@@ -1024,7 +1022,7 @@ s32 ParseSurveyResults(u8 ppu8RcvdSiteSurveyResults[][MAX_SURVEY_RESULT_FRAG_SIZ
                WILC_ERRORREPORT(s32Error, WILC_NO_MEM);
        }
 
-       WILC_memset((void *)(pstrSurveyResults), 0, u32SurveyResultsCount * sizeof(wid_site_survey_reslts_s));
+       memset((void *)(pstrSurveyResults), 0, u32SurveyResultsCount * sizeof(wid_site_survey_reslts_s));
 
        u32SurveyResultsCount = 0;
 
@@ -1528,11 +1526,10 @@ s32 further_process_response(u8 *resp,
        u8 cfg_str[256] = {0};
        tenuWIDtype enuWIDtype = WID_UNDEF;
 
-       if (process_wid_num) {
+       if (process_wid_num)
                enuWIDtype = get_wid_type(g_wid_num);
-       } else {
+       else
                enuWIDtype = gastrWIDs[cnt].enuWIDtype;
-       }
 
 
        switch (enuWIDtype) {
@@ -1568,14 +1565,6 @@ s32 further_process_response(u8 *resp,
        case WID_STR:
                WILC_memcpy(cfg_str, resp + idx, cfg_len);
                /* cfg_str[cfg_len] = '\0'; //mostafa: no need currently for NULL termination */
-               if (process_wid_num) {
-                       /*fprintf(out_file,"0x%4.4x = %s\n",g_wid_num,
-                        *                              cfg_str);*/
-               } else {
-                       /*fprintf(out_file,"%s = %s\n",gastrWIDs[cnt].cfg_switch,
-                        *                           cfg_str);*/
-               }
-
                if (pstrWIDresult->s32ValueSize >= cfg_len) {
                        WILC_memcpy(pstrWIDresult->ps8WidVal, cfg_str, cfg_len); /* mostafa: no need currently for the extra NULL byte */
                        pstrWIDresult->s32ValueSize = cfg_len;
@@ -1591,13 +1580,6 @@ s32 further_process_response(u8 *resp,
 
                WILC_strncpy(pstrWIDresult->ps8WidVal, cfg_str, WILC_strlen(cfg_str));
                pstrWIDresult->ps8WidVal[WILC_strlen(cfg_str)] = '\0';
-               if (process_wid_num) {
-                       /*fprintf(out_file,"0x%4.4x = %s\n",g_wid_num,
-                        *                              cfg_str);*/
-               } else {
-                       /*fprintf(out_file,"%s = %s\n",gastrWIDs[cnt].cfg_switch,
-                        *                           cfg_str);*/
-               }
                break;
 
        case WID_IP:
@@ -1606,13 +1588,6 @@ s32 further_process_response(u8 *resp,
                                MAKE_WORD16(resp[idx + 2], resp[idx + 3])
                                );
                conv_int_to_ip(cfg_str, cfg_int);
-               if (process_wid_num) {
-                       /*fprintf(out_file,"0x%4.4x = %s\n",g_wid_num,
-                        *                              cfg_str);*/
-               } else {
-                       /*fprintf(out_file,"%s = %s\n",gastrWIDs[cnt].cfg_switch,
-                        *                           cfg_str);*/
-               }
                break;
 
        case WID_BIN_DATA:
@@ -1739,7 +1714,6 @@ s32 ParseResponse(u8 *resp, tstrWID *pstrWIDcfgResult)
 s32 ParseWriteResponse(u8 *pu8RespBuffer)
 {
        s32 s32Error = WILC_FAIL;
-       u16 u16RespLen   = 0;
        u16 u16WIDtype = (u16)WID_NIL;
 
        /* Check whether the received frame is a valid response */
@@ -1748,9 +1722,6 @@ s32 ParseWriteResponse(u8 *pu8RespBuffer)
                return WILC_FAIL;
        }
 
-       /* Extract Response Length */
-       u16RespLen = MAKE_WORD16(pu8RespBuffer[2], pu8RespBuffer[3]);
-
        u16WIDtype = MAKE_WORD16(pu8RespBuffer[4], pu8RespBuffer[5]);
 
        /* Check for WID_STATUS ID and then check the length and status value */
@@ -1898,94 +1869,11 @@ s32 ConfigWaitResponse(char *pcRespBuffer, s32 s32MaxRespBuffLen, s32 *ps32Bytes
                *ps32BytesRead = gstrConfigPktInfo.s32BytesRead;
        }
 
-       WILC_memset((void *)(&gstrConfigPktInfo), 0, sizeof(tstrConfigPktInfo));
+       memset((void *)(&gstrConfigPktInfo), 0, sizeof(tstrConfigPktInfo));
 
        return s32Error;
 }
 
-/**
- *  @brief              sends certain Configuration Packet based on the input WIDs pstrWIDs
- *                      and retrieves the packet response pu8RxResp
- *  @details
- *  @param[in]  pstrWIDs WIDs to be sent in the configuration packet
- *  @param[in]  u32WIDsCount number of WIDs to be sent in the configuration packet
- *  @param[out]         pu8RxResp The received Packet Response
- *  @param[out]         ps32RxRespLen Length of the received Packet Response
- *  @return     Error code indicating success/failure
- *  @note
- *  @author    mabubakr
- *  @date              1 Mar 2012
- *  @version   1.0
- */
-#ifdef SIMULATION
-s32 SendConfigPkt(u8 u8Mode, tstrWID *pstrWIDs,
-                         u32 u32WIDsCount, bool bRespRequired, u32 drvHandler)
-{
-       s32 s32Error = WILC_SUCCESS;
-       s32 err = WILC_SUCCESS;
-       s32 s32ConfigPacketLen = 0;
-       s32 s32RcvdRespLen = 0;
-
-       down(&SemHandleSendPkt);
-
-       /*set the packet mode*/
-       g_oper_mode = u8Mode;
-
-       WILC_memset((void *)gps8ConfigPacket, 0, MAX_PACKET_BUFF_SIZE);
-
-       if (CreateConfigPacket(gps8ConfigPacket, &s32ConfigPacketLen, pstrWIDs, u32WIDsCount) != WILC_SUCCESS) {
-               s32Error = WILC_FAIL;
-               goto End_ConfigPkt;
-       }
-       /*bug 3878*/
-       gstrConfigPktInfo.pcRespBuffer = gps8ConfigPacket;
-       gstrConfigPktInfo.s32MaxRespBuffLen = MAX_PACKET_BUFF_SIZE;
-       PRINT_INFO(CORECONFIG_DBG, "GLOBAL =bRespRequired =%d\n", bRespRequired);
-       gstrConfigPktInfo.bRespRequired = bRespRequired;
-
-       s32Error = SendRawPacket(gps8ConfigPacket, s32ConfigPacketLen);
-       if (s32Error != WILC_SUCCESS) {
-               goto End_ConfigPkt;
-       }
-
-       WILC_memset((void *)gps8ConfigPacket, 0, MAX_PACKET_BUFF_SIZE);
-
-       ConfigWaitResponse(gps8ConfigPacket, MAX_PACKET_BUFF_SIZE, &s32RcvdRespLen, bRespRequired);
-
-
-       if (bRespRequired)      {
-               /* If the operating Mode is GET, then we expect a response frame from */
-               /* the driver. Hence start listening to the port for response         */
-               if (g_oper_mode == GET_CFG) {
-                       #if 1
-                       err = ParseResponse(gps8ConfigPacket, pstrWIDs);
-                       if (err != 0) {
-                               s32Error = WILC_FAIL;
-                               goto End_ConfigPkt;
-                       } else {
-                               s32Error = WILC_SUCCESS;
-                       }
-                       #endif
-               } else {
-                       err = ParseWriteResponse(gps8ConfigPacket);
-                       if (err != WRITE_RESP_SUCCESS) {
-                               s32Error = WILC_FAIL;
-                               goto End_ConfigPkt;
-                       } else {
-                               s32Error = WILC_SUCCESS;
-                       }
-               }
-
-
-       }
-
-
-End_ConfigPkt:
-       up(&SemHandleSendPkt);
-
-       return s32Error;
-}
-#endif
 s32 ConfigProvideResponse(char *pcRespBuffer, s32 s32RespLen)
 {
        s32 s32Error = WILC_SUCCESS;
@@ -2078,8 +1966,6 @@ s32 CoreConfiguratorDeInit(void)
        return s32Error;
 }
 
-
-#ifndef SIMULATION
 /*Using the global handle of the driver*/
 extern wilc_wlan_oup_t *gpstrWlanOps;
 /**
@@ -2153,4 +2039,3 @@ s32 SendConfigPkt(u8 u8Mode, tstrWID *pstrWIDs,
 
        return ret;
 }
-#endif
index 9059c8df7ce54d83a5854a2f09d702627de567ad..56ff2ba139ed0326e1db0988d83e59f112f7b9f8 100644 (file)
@@ -8,7 +8,6 @@
  *  @version   1.0
  */
 
-
 #ifndef CORECONFIGURATOR_H
 #define CORECONFIGURATOR_H
 
@@ -42,7 +41,6 @@ extern u16 g_num_total_switches;
 #define AID_LEN                 2
 #define IE_HDR_LEN              2
 
-
 /* Operating Mode: SET */
 #define SET_CFG              0
 /* Operating Mode: GET */
@@ -59,15 +57,12 @@ extern u16 g_num_total_switches;
 #define MAC_CONNECTED                1
 #define MAC_DISCONNECTED             0
 
-
-
 /*****************************************************************************/
 /* Function Macros                                                           */
 /*****************************************************************************/
 #define MAKE_WORD16(lsb, msb) ((((u16)(msb) << 8) & 0xFF00) | (lsb))
 #define MAKE_WORD32(lsw, msw) ((((u32)(msw) << 16) & 0xFFFF0000) | (lsw))
 
-
 /*****************************************************************************/
 /* Type Definitions                                                                                                                       */
 /*****************************************************************************/
@@ -140,7 +135,6 @@ typedef struct {
        u16 u16RespIEsLen;
 } tstrConnectRespInfo;
 
-
 typedef struct {
        u8 au8bssid[6];
        u8 *pu8ReqIEs;
@@ -150,8 +144,6 @@ typedef struct {
        u16 u16ConnectStatus;
 } tstrConnectInfo;
 
-
-
 typedef struct {
        u16 u16reason;
        u8 *ie;
@@ -175,17 +167,18 @@ extern s32 CoreConfiguratorInit(void);
 extern s32 CoreConfiguratorDeInit(void);
 
 extern s32 SendConfigPkt(u8 u8Mode, tstrWID *pstrWIDs,
-                                u32 u32WIDsCount, bool bRespRequired, u32 drvHandler);
+                        u32 u32WIDsCount, bool bRespRequired, u32 drvHandler);
 extern s32 ParseNetworkInfo(u8 *pu8MsgBuffer, tstrNetworkInfo **ppstrNetworkInfo);
 extern s32 DeallocateNetworkInfo(tstrNetworkInfo *pstrNetworkInfo);
 
 extern s32 ParseAssocRespInfo(u8 *pu8Buffer, u32 u32BufferLen,
-                                     tstrConnectRespInfo **ppstrConnectRespInfo);
+                             tstrConnectRespInfo **ppstrConnectRespInfo);
 extern s32 DeallocateAssocRespInfo(tstrConnectRespInfo *pstrConnectRespInfo);
 
 #ifndef CONNECT_DIRECT
 extern s32 ParseSurveyResults(u8 ppu8RcvdSiteSurveyResults[][MAX_SURVEY_RESULT_FRAG_SIZE],
-                                     wid_site_survey_reslts_s **ppstrSurveyResults, u32 *pu32SurveyResultsCount);
+                             wid_site_survey_reslts_s **ppstrSurveyResults,
+                             u32 *pu32SurveyResultsCount);
 extern s32 DeallocateSurveyResults(wid_site_survey_reslts_s *pstrSurveyResults);
 #endif
 
diff --git a/drivers/staging/wilc1000/fifo_buffer.c b/drivers/staging/wilc1000/fifo_buffer.c
deleted file mode 100644 (file)
index b6c07cf..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-#include "fifo_buffer.h"
-
-
-
-u32 FIFO_InitBuffer(tHANDLE *hBuffer, u32 u32BufferLength)
-{
-       u32 u32Error = 0;
-       tstrFifoHandler *pstrFifoHandler = WILC_MALLOC (sizeof (tstrFifoHandler));
-       if (pstrFifoHandler) {
-               WILC_memset (pstrFifoHandler, 0, sizeof (tstrFifoHandler));
-               pstrFifoHandler->pu8Buffer = WILC_MALLOC (u32BufferLength);
-               if (pstrFifoHandler->pu8Buffer) {
-                       pstrFifoHandler->u32BufferLength = u32BufferLength;
-                       WILC_memset (pstrFifoHandler->pu8Buffer, 0, u32BufferLength);
-                       /* create semaphore */
-                       sema_init(&pstrFifoHandler->SemBuffer, 1);
-                       *hBuffer = pstrFifoHandler;
-               } else {
-                       *hBuffer = NULL;
-                       u32Error = 1;
-               }
-       } else {
-               u32Error = 1;
-       }
-       return u32Error;
-}
-u32 FIFO_DeInit(tHANDLE hFifo)
-{
-       u32 u32Error = 0;
-       tstrFifoHandler *pstrFifoHandler = (tstrFifoHandler *) hFifo;
-       if (pstrFifoHandler) {
-               if (pstrFifoHandler->pu8Buffer) {
-                       WILC_FREE (pstrFifoHandler->pu8Buffer);
-               } else {
-                       u32Error = 1;
-               }
-
-               WILC_FREE (pstrFifoHandler);
-       } else {
-               u32Error = 1;
-       }
-       return u32Error;
-}
-
-u32 FIFO_ReadBytes(tHANDLE hFifo, u8 *pu8Buffer, u32 u32BytesToRead, u32 *pu32BytesRead)
-{
-       u32 u32Error = 0;
-       tstrFifoHandler *pstrFifoHandler = (tstrFifoHandler *) hFifo;
-       if (pstrFifoHandler && pu32BytesRead) {
-               if (pstrFifoHandler->u32TotalBytes) {
-                       down(&pstrFifoHandler->SemBuffer);
-
-                       if (u32BytesToRead > pstrFifoHandler->u32TotalBytes) {
-                               *pu32BytesRead = pstrFifoHandler->u32TotalBytes;
-                       } else {
-                               *pu32BytesRead = u32BytesToRead;
-                       }
-                       if ((pstrFifoHandler->u32ReadOffset + u32BytesToRead) <= pstrFifoHandler->u32BufferLength) {
-                               WILC_memcpy(pu8Buffer, pstrFifoHandler->pu8Buffer + pstrFifoHandler->u32ReadOffset,
-                                           *pu32BytesRead);
-                               /* update read offset and total bytes */
-                               pstrFifoHandler->u32ReadOffset += u32BytesToRead;
-                               pstrFifoHandler->u32TotalBytes -= u32BytesToRead;
-
-                       } else {
-                               u32 u32FirstPart =
-                                       pstrFifoHandler->u32BufferLength - pstrFifoHandler->u32ReadOffset;
-                               WILC_memcpy(pu8Buffer, pstrFifoHandler->pu8Buffer + pstrFifoHandler->u32ReadOffset,
-                                           u32FirstPart);
-                               WILC_memcpy(pu8Buffer + u32FirstPart, pstrFifoHandler->pu8Buffer,
-                                           u32BytesToRead - u32FirstPart);
-                               /* update read offset and total bytes */
-                               pstrFifoHandler->u32ReadOffset = u32BytesToRead - u32FirstPart;
-                               pstrFifoHandler->u32TotalBytes -= u32BytesToRead;
-                       }
-                       up(&pstrFifoHandler->SemBuffer);
-               } else {
-                       u32Error = 1;
-               }
-       } else {
-               u32Error = 1;
-       }
-       return u32Error;
-}
-
-u32 FIFO_WriteBytes(tHANDLE hFifo, u8 *pu8Buffer, u32 u32BytesToWrite, bool bForceOverWrite)
-{
-       u32 u32Error = 0;
-       tstrFifoHandler *pstrFifoHandler = (tstrFifoHandler *) hFifo;
-       if (pstrFifoHandler) {
-               if (u32BytesToWrite < pstrFifoHandler->u32BufferLength) {
-                       if ((pstrFifoHandler->u32TotalBytes + u32BytesToWrite) <= pstrFifoHandler->u32BufferLength ||
-                           bForceOverWrite) {
-                               down(&pstrFifoHandler->SemBuffer);
-                               if ((pstrFifoHandler->u32WriteOffset + u32BytesToWrite) <= pstrFifoHandler->u32BufferLength) {
-                                       WILC_memcpy(pstrFifoHandler->pu8Buffer + pstrFifoHandler->u32WriteOffset, pu8Buffer,
-                                                   u32BytesToWrite);
-                                       /* update read offset and total bytes */
-                                       pstrFifoHandler->u32WriteOffset += u32BytesToWrite;
-                                       pstrFifoHandler->u32TotalBytes  += u32BytesToWrite;
-
-                               } else {
-                                       u32 u32FirstPart =
-                                               pstrFifoHandler->u32BufferLength - pstrFifoHandler->u32WriteOffset;
-                                       WILC_memcpy(pstrFifoHandler->pu8Buffer + pstrFifoHandler->u32WriteOffset, pu8Buffer,
-                                                   u32FirstPart);
-                                       WILC_memcpy(pstrFifoHandler->pu8Buffer, pu8Buffer + u32FirstPart,
-                                                   u32BytesToWrite - u32FirstPart);
-                                       /* update read offset and total bytes */
-                                       pstrFifoHandler->u32WriteOffset = u32BytesToWrite - u32FirstPart;
-                                       pstrFifoHandler->u32TotalBytes += u32BytesToWrite;
-                               }
-                               /* if data overwriten */
-                               if (pstrFifoHandler->u32TotalBytes > pstrFifoHandler->u32BufferLength) {
-                                       /* adjust read offset to the oldest data available */
-                                       pstrFifoHandler->u32ReadOffset = pstrFifoHandler->u32WriteOffset;
-                                       /* data availabe is the buffer length */
-                                       pstrFifoHandler->u32TotalBytes = pstrFifoHandler->u32BufferLength;
-                               }
-                               up(&pstrFifoHandler->SemBuffer);
-                       } else {
-                               u32Error = 1;
-                       }
-               } else {
-                       u32Error = 1;
-               }
-       } else {
-               u32Error = 1;
-       }
-       return u32Error;
-}
diff --git a/drivers/staging/wilc1000/fifo_buffer.h b/drivers/staging/wilc1000/fifo_buffer.h
deleted file mode 100644 (file)
index 7b76998..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-
-#include <linux/types.h>
-#include <linux/semaphore.h>
-#include "wilc_memory.h"
-#include "wilc_strutils.h"
-
-
-#define tHANDLE        void *
-
-typedef struct {
-       u8              *pu8Buffer;
-       u32 u32BufferLength;
-       u32 u32WriteOffset;
-       u32 u32ReadOffset;
-       u32 u32TotalBytes;
-       struct semaphore SemBuffer;
-} tstrFifoHandler;
-
-
-extern u32 FIFO_InitBuffer(tHANDLE *hBuffer,
-                                                                  u32 u32BufferLength);
-extern u32 FIFO_DeInit(tHANDLE hFifo);
-extern u32 FIFO_ReadBytes(tHANDLE hFifo, u8 *pu8Buffer,
-                               u32 u32BytesToRead, u32 *pu32BytesRead);
-extern u32 FIFO_WriteBytes(tHANDLE hFifo, u8 *pu8Buffer,
-                               u32 u32BytesToWrite, bool bForceOverWrite);
index 6b10bbbe6ab26abfafa25950071b353960cce61e..cc549c2c5213fd1e2f5f63a50d09a138d35165d3 100644 (file)
@@ -9,7 +9,6 @@ extern u8 connecting;
 extern WILC_TimerHandle hDuringIpTimer;
 #endif
 
-extern bool bEnablePS;
 /*BugID_5137*/
 extern u8 g_wilc_initialized;
 /*****************************************************************************/
@@ -534,8 +533,8 @@ typedef enum {
 /*****************************************************************************/
 
 
-tstrWILC_WFIDrv *terminated_handle = NULL;
-tstrWILC_WFIDrv *gWFiDrvHandle = NULL;
+tstrWILC_WFIDrv *terminated_handle;
+tstrWILC_WFIDrv *gWFiDrvHandle;
 #ifdef DISABLE_PWRSAVE_AND_SCAN_DURING_IP
 bool g_obtainingIP = false;
 #endif
@@ -570,9 +569,7 @@ static u8 gs8GetIP[2][4];
 static u32 gu32InactiveTime;
 static u8 gu8DelBcn;
 #endif
-#ifndef SIMULATION
 static u32 gu32WidConnRstHack;
-#endif
 
 /*BugID_5137*/
 u8 *gu8FlushedJoinReq;
@@ -659,9 +656,8 @@ static s32 Handle_SetWfiDrvHandler(tstrHostIfSetDrvHandler *pstrHostIfSetDrvHand
        s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
 
 
-       if ((pstrHostIfSetDrvHandler->u32Address) == (u32)NULL) {
+       if ((pstrHostIfSetDrvHandler->u32Address) == (u32)NULL)
                up(&hSemDeinitDrvHandle);
-       }
 
 
        if (s32Error) {
@@ -700,14 +696,13 @@ static s32 Handle_SetOperationMode(void *drvHandler, tstrHostIfSetOperationMode
        strWID.s32ValueSize = sizeof(u32);
 
        /*Sending Cfg*/
-       PRINT_INFO(HOSTINF_DBG, "pstrWFIDrv= %p \n", pstrWFIDrv);
+       PRINT_INFO(HOSTINF_DBG, "pstrWFIDrv= %p\n", pstrWFIDrv);
 
        s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
 
 
-       if ((pstrHostIfSetOperationMode->u32Mode) == (u32)NULL) {
+       if ((pstrHostIfSetOperationMode->u32Mode) == (u32)NULL)
                up(&hSemDeinitDrvHandle);
-       }
 
 
        if (s32Error) {
@@ -742,7 +737,7 @@ s32 Handle_set_IPAddress(void *drvHandler, u8 *pu8IPAddr, u8 idx)
        if (pu8IPAddr[0] < 192)
                pu8IPAddr[0] = 0;
 
-       PRINT_INFO(HOSTINF_DBG, "Indx = %d, Handling set  IP = %d.%d.%d.%d \n", idx, pu8IPAddr[0], pu8IPAddr[1], pu8IPAddr[2], pu8IPAddr[3]);
+       PRINT_INFO(HOSTINF_DBG, "Indx = %d, Handling set  IP = %pI4\n", idx, pu8IPAddr);
 
        WILC_memcpy(gs8SetIP[idx], pu8IPAddr, IP_ALEN);
 
@@ -798,22 +793,22 @@ s32 Handle_get_IPAddress(void *drvHandler, u8 *pu8IPAddr, u8 idx)
 
        s32Error = SendConfigPkt(GET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
 
-       PRINT_INFO(HOSTINF_DBG, "%d.%d.%d.%d\n", (u8)(strWID.ps8WidVal[0]), (u8)(strWID.ps8WidVal[1]), (u8)(strWID.ps8WidVal[2]), (u8)(strWID.ps8WidVal[3]));
+       PRINT_INFO(HOSTINF_DBG, "%pI4\n", strWID.ps8WidVal);
 
        WILC_memcpy(gs8GetIP[idx], strWID.ps8WidVal, IP_ALEN);
 
        /*get the value by searching the local copy*/
        WILC_FREE(strWID.ps8WidVal);
 
-       if (WILC_memcmp(gs8GetIP[idx], gs8SetIP[idx], IP_ALEN) != 0)
+       if (memcmp(gs8GetIP[idx], gs8SetIP[idx], IP_ALEN) != 0)
                host_int_setup_ipaddress((WILC_WFIDrvHandle)pstrWFIDrv, gs8SetIP[idx], idx);
 
        if (s32Error != WILC_SUCCESS) {
                PRINT_ER("Failed to get IP address\n");
                WILC_ERRORREPORT(s32Error, WILC_INVALID_STATE);
        } else {
-               PRINT_INFO(HOSTINF_DBG, "IP address retrieved:: u8IfIdx = %d \n", idx);
-               PRINT_INFO(HOSTINF_DBG, "%d.%d.%d.%d\n", gs8GetIP[idx][0], gs8GetIP[idx][1], gs8GetIP[idx][2], gs8GetIP[idx][3]);
+               PRINT_INFO(HOSTINF_DBG, "IP address retrieved:: u8IfIdx = %d\n", idx);
+               PRINT_INFO(HOSTINF_DBG, "%pI4\n", gs8GetIP[idx]);
                PRINT_INFO(HOSTINF_DBG, "\n");
        }
 
@@ -843,6 +838,7 @@ static s32 Handle_SetMacAddress(void *drvHandler, tstrHostIfSetMacAddress *pstrH
        tstrWID strWID;
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)drvHandler;
        u8 *mac_buf = (u8 *)WILC_MALLOC(ETH_ALEN);
+
        if (mac_buf == NULL) {
                PRINT_ER("No buffer to send mac address\n");
                return WILC_FAIL;
@@ -1204,10 +1200,9 @@ static s32 Handle_CfgParam(void *drvHandler, tstrHostIFCfgParamAttr *strHostIFCf
        }
        s32Error = SendConfigPkt(SET_CFG, strWIDList, u8WidCnt, false, (u32)pstrWFIDrv);
 
-       if (s32Error) {
+       if (s32Error)
                PRINT_ER("Error in setting CFG params\n");
 
-       }
        WILC_CATCH(s32Error)
        {
        }
@@ -1228,6 +1223,7 @@ static s32 Handle_CfgParam(void *drvHandler, tstrHostIFCfgParamAttr *strHostIFCf
 static s32 Handle_wait_msg_q_empty(void)
 {
        s32 s32Error = WILC_SUCCESS;
+
        g_wilc_initialized = 0;
        up(&hWaitResponse);
        return s32Error;
@@ -1254,7 +1250,7 @@ static s32 Handle_Scan(void *drvHandler, tstrHostIFscanAttr *pstrHostIFscanAttr)
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *) drvHandler;
 
        PRINT_D(HOSTINF_DBG, "Setting SCAN params\n");
-       PRINT_D(HOSTINF_DBG, "Scanning: In [%d] state \n", pstrWFIDrv->enuHostIFstate);
+       PRINT_D(HOSTINF_DBG, "Scanning: In [%d] state\n", pstrWFIDrv->enuHostIFstate);
 
        pstrWFIDrv->strWILC_UsrScanReq.pfUserScanResult = pstrHostIFscanAttr->pfScanResult;
        pstrWFIDrv->strWILC_UsrScanReq.u32UserScanPvoid = pstrHostIFscanAttr->pvUserArg;
@@ -1284,9 +1280,8 @@ static s32 Handle_Scan(void *drvHandler, tstrHostIFscanAttr *pstrHostIFscanAttr)
        strWIDList[u32WidsCount].u16WIDid = (u16)WID_SSID_PROBE_REQ;
        strWIDList[u32WidsCount].enuWIDtype = WID_STR;
 
-       for (i = 0; i < pstrHostIFscanAttr->strHiddenNetwork.u8ssidnum; i++) {
+       for (i = 0; i < pstrHostIFscanAttr->strHiddenNetwork.u8ssidnum; i++)
                valuesize += ((pstrHostIFscanAttr->strHiddenNetwork.pstrHiddenNetworkInfo[i].u8ssidlen) + 1);
-       }
        pu8HdnNtwrksWidVal = WILC_MALLOC(valuesize + 1);
        strWIDList[u32WidsCount].ps8WidVal = pu8HdnNtwrksWidVal;
        if (strWIDList[u32WidsCount].ps8WidVal != NULL) {
@@ -1336,9 +1331,8 @@ static s32 Handle_Scan(void *drvHandler, tstrHostIFscanAttr *pstrHostIFscanAttr)
                int i;
 
                for (i = 0; i < pstrHostIFscanAttr->u8ChnlListLen; i++) {
-                       if (pstrHostIFscanAttr->pu8ChnlFreqList[i] > 0) {
+                       if (pstrHostIFscanAttr->pu8ChnlFreqList[i] > 0)
                                pstrHostIFscanAttr->pu8ChnlFreqList[i] = pstrHostIFscanAttr->pu8ChnlFreqList[i] - 1;
-                       }
                }
        }
 
@@ -1356,11 +1350,10 @@ static s32 Handle_Scan(void *drvHandler, tstrHostIFscanAttr *pstrHostIFscanAttr)
        /*keep the state as is , no need to change it*/
        /* gWFiDrvHandle->enuHostIFstate = HOST_IF_SCANNING; */
 
-       if (pstrWFIDrv->enuHostIFstate == HOST_IF_CONNECTED) {
+       if (pstrWFIDrv->enuHostIFstate == HOST_IF_CONNECTED)
                gbScanWhileConnected = true;
-       } else if (pstrWFIDrv->enuHostIFstate == HOST_IF_IDLE)    {
+       else if (pstrWFIDrv->enuHostIFstate == HOST_IF_IDLE)
                gbScanWhileConnected = false;
-       }
 
        s32Error = SendConfigPkt(SET_CFG, strWIDList, u32WidsCount, false, (u32)pstrWFIDrv);
 
@@ -1400,9 +1393,8 @@ static s32 Handle_Scan(void *drvHandler, tstrHostIFscanAttr *pstrHostIFscanAttr)
                pstrHostIFscanAttr->pu8ChnlFreqList = NULL;
        }
 
-       if (pu8HdnNtwrksWidVal != NULL) {
+       if (pu8HdnNtwrksWidVal != NULL)
                WILC_FREE(pu8HdnNtwrksWidVal);
-       }
 
        return s32Error;
 }
@@ -1500,8 +1492,8 @@ static s32 Handle_Connect(void *drvHandler, tstrHostIFconnectAttr *pstrHostIFcon
        PRINT_D(GENERIC_DBG, "Handling connect request\n");
 
        #ifndef CONNECT_DIRECT
-       WILC_memset(gapu8RcvdSurveyResults[0], 0, MAX_SURVEY_RESULT_FRAG_SIZE);
-       WILC_memset(gapu8RcvdSurveyResults[1], 0, MAX_SURVEY_RESULT_FRAG_SIZE);
+       memset(gapu8RcvdSurveyResults[0], 0, MAX_SURVEY_RESULT_FRAG_SIZE);
+       memset(gapu8RcvdSurveyResults[1], 0, MAX_SURVEY_RESULT_FRAG_SIZE);
 
 
        PRINT_D(HOSTINF_DBG, "Getting site survey results\n");
@@ -1528,12 +1520,12 @@ static s32 Handle_Connect(void *drvHandler, tstrHostIFconnectAttr *pstrHostIFcon
                DeallocateSurveyResults(pstrSurveyResults);
        } else {
                WILC_ERRORREPORT(s32Error, WILC_FAIL);
-               PRINT_ER("ParseSurveyResults() Error(%d) \n", s32Err);
+               PRINT_ER("ParseSurveyResults() Error(%d)\n", s32Err);
        }
 
 
        for (i = 0; i < pstrWFIDrv->u32SurveyResultsCount; i++) {
-               if (WILC_memcmp(pstrWFIDrv->astrSurveyResults[i].SSID,
+               if (memcmp(pstrWFIDrv->astrSurveyResults[i].SSID,
                                pstrHostIFconnectAttr->pu8ssid,
                                pstrHostIFconnectAttr->ssidLen) == 0) {
                        PRINT_INFO(HOSTINF_DBG, "Network with required SSID is found %s\n", pstrHostIFconnectAttr->pu8ssid);
@@ -1546,7 +1538,7 @@ static s32 Handle_Connect(void *drvHandler, tstrHostIFconnectAttr *pstrHostIFcon
                                /* BSSID is also passed from the user, so decision of matching
                                 * should consider also this passed BSSID */
 
-                               if (WILC_memcmp(pstrWFIDrv->astrSurveyResults[i].BSSID,
+                               if (memcmp(pstrWFIDrv->astrSurveyResults[i].BSSID,
                                                pstrHostIFconnectAttr->pu8bssid,
                                                6) == 0) {
                                        PRINT_INFO(HOSTINF_DBG, "BSSID is passed from the user and matched\n");
@@ -1559,7 +1551,7 @@ static s32 Handle_Connect(void *drvHandler, tstrHostIFconnectAttr *pstrHostIFcon
        if (i < pstrWFIDrv->u32SurveyResultsCount) {
                u8bssDscListIndex = i;
 
-               PRINT_INFO(HOSTINF_DBG, "Connecting to network of Bss Idx %d and SSID %s and channel %d \n",
+               PRINT_INFO(HOSTINF_DBG, "Connecting to network of Bss Idx%d and SSID %s and channel%d\n",
                           u8bssDscListIndex, pstrWFIDrv->astrSurveyResults[u8bssDscListIndex].SSID,
                           pstrWFIDrv->astrSurveyResults[u8bssDscListIndex].Channel);
 
@@ -1630,14 +1622,12 @@ static s32 Handle_Connect(void *drvHandler, tstrHostIFconnectAttr *pstrHostIFcon
                strWIDList[u32WidsCount].ps8WidVal = (s8 *)&u8bssDscListIndex;
                u32WidsCount++;
 
-               #ifndef SIMULATION
                /* A temporary workaround to avoid handling the misleading MAC_DISCONNECTED raised from the
                 *   firmware at chip reset when processing the WIDs of the Connect Request.
                 *   (This workaround should be removed in the future when the Chip reset of the Connect WIDs is disabled) */
                /* ////////////////////// */
                gu32WidConnRstHack = 0;
                /* ////////////////////// */
-               #endif
 
                s32Error = SendConfigPkt(SET_CFG, strWIDList, u32WidsCount, false, (u32)pstrWFIDrv);
                if (s32Error) {
@@ -1656,7 +1646,7 @@ static s32 Handle_Connect(void *drvHandler, tstrHostIFconnectAttr *pstrHostIFcon
 
        /* if we try to connect to an already connected AP then discard the request */
 
-       if (WILC_memcmp(pstrHostIFconnectAttr->pu8bssid, u8ConnectedSSID, ETH_ALEN) == 0) {
+       if (memcmp(pstrHostIFconnectAttr->pu8bssid, u8ConnectedSSID, ETH_ALEN) == 0) {
 
                s32Error = WILC_SUCCESS;
                PRINT_ER("Trying to connect to an already connected AP, Discard connect request\n");
@@ -1728,7 +1718,7 @@ static s32 Handle_Connect(void *drvHandler, tstrHostIFconnectAttr *pstrHostIFcon
                u32WidsCount++;
 
                /*BugID_5137*/
-               if (WILC_memcmp("DIRECT-", pstrHostIFconnectAttr->pu8ssid, 7)) {
+               if (memcmp("DIRECT-", pstrHostIFconnectAttr->pu8ssid, 7)) {
 
                        gu32FlushedInfoElemAsocSize = pstrWFIDrv->strWILC_UsrConnReq.ConnReqIEsLen;
                        gu8FlushedInfoElemAsoc =  WILC_MALLOC(gu32FlushedInfoElemAsocSize);
@@ -1743,7 +1733,7 @@ static s32 Handle_Connect(void *drvHandler, tstrHostIFconnectAttr *pstrHostIFcon
        u32WidsCount++;
 
        /*BugID_5137*/
-       if (WILC_memcmp("DIRECT-", pstrHostIFconnectAttr->pu8ssid, 7))
+       if (memcmp("DIRECT-", pstrHostIFconnectAttr->pu8ssid, 7))
                gu8Flushed11iMode = pstrWFIDrv->strWILC_UsrConnReq.u8security;
 
        PRINT_INFO(HOSTINF_DBG, "Encrypt Mode = %x\n", pstrWFIDrv->strWILC_UsrConnReq.u8security);
@@ -1756,7 +1746,7 @@ static s32 Handle_Connect(void *drvHandler, tstrHostIFconnectAttr *pstrHostIFcon
        u32WidsCount++;
 
        /*BugID_5137*/
-       if (WILC_memcmp("DIRECT-", pstrHostIFconnectAttr->pu8ssid, 7))
+       if (memcmp("DIRECT-", pstrHostIFconnectAttr->pu8ssid, 7))
                gu8FlushedAuthType = (u8)pstrWFIDrv->strWILC_UsrConnReq.tenuAuth_type;
 
        PRINT_INFO(HOSTINF_DBG, "Authentication Type = %x\n", pstrWFIDrv->strWILC_UsrConnReq.tenuAuth_type);
@@ -1778,9 +1768,8 @@ static s32 Handle_Connect(void *drvHandler, tstrHostIFconnectAttr *pstrHostIFcon
        strWIDList[u32WidsCount].s32ValueSize = MAX_SSID_LEN + 7;
        strWIDList[u32WidsCount].ps8WidVal = WILC_MALLOC(strWIDList[u32WidsCount].s32ValueSize);
 
-       if (strWIDList[u32WidsCount].ps8WidVal == NULL) {
+       if (strWIDList[u32WidsCount].ps8WidVal == NULL)
                WILC_ERRORREPORT(s32Error, WILC_NO_MEM);
-       }
 
        pu8CurrByte = strWIDList[u32WidsCount].ps8WidVal;
 
@@ -1795,9 +1784,8 @@ static s32 Handle_Connect(void *drvHandler, tstrHostIFconnectAttr *pstrHostIFcon
                PRINT_ER("Channel out of range\n");
                *(pu8CurrByte++) = 0xFF;
        }
-       if (pstrHostIFconnectAttr->pu8bssid != NULL) {
+       if (pstrHostIFconnectAttr->pu8bssid != NULL)
                WILC_memcpy(pu8CurrByte, pstrHostIFconnectAttr->pu8bssid, 6);
-       }
        pu8CurrByte += 6;
 
        /* keep the buffer at the start of the allocated pointer to use it with the free*/
@@ -1813,13 +1801,12 @@ static s32 Handle_Connect(void *drvHandler, tstrHostIFconnectAttr *pstrHostIFcon
        strWIDList[u32WidsCount].ps8WidVal = WILC_MALLOC(strWIDList[u32WidsCount].s32ValueSize);
 
        /*BugID_5137*/
-       if (WILC_memcmp("DIRECT-", pstrHostIFconnectAttr->pu8ssid, 7)) {
+       if (memcmp("DIRECT-", pstrHostIFconnectAttr->pu8ssid, 7)) {
                gu32FlushedJoinReqSize = strWIDList[u32WidsCount].s32ValueSize;
                gu8FlushedJoinReq = WILC_MALLOC(gu32FlushedJoinReqSize);
        }
-       if (strWIDList[u32WidsCount].ps8WidVal == NULL) {
+       if (strWIDList[u32WidsCount].ps8WidVal == NULL)
                WILC_ERRORREPORT(s32Error, WILC_NO_MEM);
-       }
 
        pu8CurrByte = strWIDList[u32WidsCount].ps8WidVal;
 
@@ -1845,15 +1832,13 @@ static s32 Handle_Connect(void *drvHandler, tstrHostIFconnectAttr *pstrHostIFcon
        PRINT_D(HOSTINF_DBG, "* Cap Info %0x*\n", (*(pu8CurrByte - 2) | ((*(pu8CurrByte - 1)) << 8)));
 
        /* sa*/
-       if (pstrHostIFconnectAttr->pu8bssid != NULL) {
+       if (pstrHostIFconnectAttr->pu8bssid != NULL)
                WILC_memcpy(pu8CurrByte, pstrHostIFconnectAttr->pu8bssid, 6);
-       }
        pu8CurrByte += 6;
 
        /* bssid*/
-       if (pstrHostIFconnectAttr->pu8bssid != NULL) {
+       if (pstrHostIFconnectAttr->pu8bssid != NULL)
                WILC_memcpy(pu8CurrByte, pstrHostIFconnectAttr->pu8bssid, 6);
-       }
        pu8CurrByte += 6;
 
        /* Beacon Period*/
@@ -1945,17 +1930,15 @@ static s32 Handle_Connect(void *drvHandler, tstrHostIFconnectAttr *pstrHostIFcon
        #endif /* #ifdef WILC_PARSE_SCAN_IN_HOST*/
        u32WidsCount++;
 
-       #ifndef SIMULATION
        /* A temporary workaround to avoid handling the misleading MAC_DISCONNECTED raised from the
         *   firmware at chip reset when processing the WIDs of the Connect Request.
         *   (This workaround should be removed in the future when the Chip reset of the Connect WIDs is disabled) */
        /* ////////////////////// */
        gu32WidConnRstHack = 0;
        /* ////////////////////// */
-       #endif
 
        /*BugID_5137*/
-       if (WILC_memcmp("DIRECT-", pstrHostIFconnectAttr->pu8ssid, 7)) {
+       if (memcmp("DIRECT-", pstrHostIFconnectAttr->pu8ssid, 7)) {
                memcpy(gu8FlushedJoinReq, pu8CurrByte, gu32FlushedJoinReqSize);
                gu8FlushedJoinReqDrvHandler = (u32)pstrWFIDrv;
        }
@@ -1987,12 +1970,11 @@ static s32 Handle_Connect(void *drvHandler, tstrHostIFconnectAttr *pstrHostIFcon
 
                PRINT_D(HOSTINF_DBG, "could not start connecting to the required network\n");
 
-               WILC_memset(&strConnectInfo, 0, sizeof(tstrConnectInfo));
+               memset(&strConnectInfo, 0, sizeof(tstrConnectInfo));
 
                if (pstrHostIFconnectAttr->pfConnectResult != NULL) {
-                       if (pstrHostIFconnectAttr->pu8bssid != NULL) {
+                       if (pstrHostIFconnectAttr->pu8bssid != NULL)
                                WILC_memcpy(strConnectInfo.au8bssid, pstrHostIFconnectAttr->pu8bssid, 6);
-                       }
 
                        if (pstrHostIFconnectAttr->pu8IEs != NULL) {
                                strConnectInfo.ReqIEsLen = pstrHostIFconnectAttr->IEsLen;
@@ -2016,7 +1998,7 @@ static s32 Handle_Connect(void *drvHandler, tstrHostIFconnectAttr *pstrHostIFcon
                        }
 
                } else {
-                       PRINT_ER("Connect callback function pointer is NULL \n");
+                       PRINT_ER("Connect callback function pointer is NULL\n");
                }
        }
 
@@ -2039,9 +2021,8 @@ static s32 Handle_Connect(void *drvHandler, tstrHostIFconnectAttr *pstrHostIFcon
                pstrHostIFconnectAttr->pu8IEs = NULL;
        }
 
-       if (pu8CurrByte != NULL) {
+       if (pu8CurrByte != NULL)
                WILC_FREE(pu8CurrByte);
-       }
        return s32Error;
 }
 
@@ -2141,7 +2122,7 @@ static s32 Handle_ConnectTimeout(void *drvHandler)
        gbScanWhileConnected = false;
 
 
-       WILC_memset(&strConnectInfo, 0, sizeof(tstrConnectInfo));
+       memset(&strConnectInfo, 0, sizeof(tstrConnectInfo));
 
 
        /* First, we will notify the upper layer with the Connection failure {through the Connect Callback function},
@@ -2173,7 +2154,7 @@ static s32 Handle_ConnectTimeout(void *drvHandler)
                        strConnectInfo.pu8ReqIEs = NULL;
                }
        } else {
-               PRINT_ER("Connect callback function pointer is NULL \n");
+               PRINT_ER("Connect callback function pointer is NULL\n");
        }
 
        /* Here we will notify our firmware also with the Connection failure {through sending to it Cfg packet carrying
@@ -2186,9 +2167,8 @@ static s32 Handle_ConnectTimeout(void *drvHandler)
        PRINT_D(HOSTINF_DBG, "Sending disconnect request\n");
 
        s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false, (u32)pstrWFIDrv);
-       if (s32Error) {
+       if (s32Error)
                PRINT_ER("Failed to send dissconect config packet\n");
-       }
 
        /* Deallocation of the Saved Connect Request in the global Handle */
        pstrWFIDrv->strWILC_UsrConnReq.ssidLen = 0;
@@ -2208,7 +2188,7 @@ static s32 Handle_ConnectTimeout(void *drvHandler)
                pstrWFIDrv->strWILC_UsrConnReq.pu8ConnReqIEs = NULL;
        }
 
-       WILC_memset(u8ConnectedSSID, 0, ETH_ALEN);
+       memset(u8ConnectedSSID, 0, ETH_ALEN);
        /*BugID_5213*/
        /*Freeing flushed join request params on connect timeout*/
        if (gu8FlushedJoinReq != NULL && gu8FlushedJoinReqDrvHandler == (u32)drvHandler) {
@@ -2264,7 +2244,7 @@ static s32 Handle_RcvdNtwrkInfo(void *drvHandler, tstrRcvdNetworkInfo *pstrRcvdN
 
                        if ((pstrWFIDrv->strWILC_UsrScanReq.astrFoundNetworkInfo[i].au8bssid != NULL) &&
                            (pstrNetworkInfo->au8bssid != NULL)) {
-                               if (WILC_memcmp(pstrWFIDrv->strWILC_UsrScanReq.astrFoundNetworkInfo[i].au8bssid,
+                               if (memcmp(pstrWFIDrv->strWILC_UsrScanReq.astrFoundNetworkInfo[i].au8bssid,
                                                pstrNetworkInfo->au8bssid, 6) == 0) {
                                        if (pstrNetworkInfo->s8rssi <= pstrWFIDrv->strWILC_UsrScanReq.astrFoundNetworkInfo[i].s8rssi) {
                                                /*we have already found this network with better rssi, so keep the old cached one and don't
@@ -2313,7 +2293,7 @@ static s32 Handle_RcvdNtwrkInfo(void *drvHandler, tstrRcvdNetworkInfo *pstrRcvdN
 
                                }
                        } else {
-                               PRINT_WRN(HOSTINF_DBG, "Discovered networks exceeded max. limit \n");
+                               PRINT_WRN(HOSTINF_DBG, "Discovered networks exceeded max. limit\n");
                        }
                } else {
                        pstrNetworkInfo->bNewNetwork = false;
@@ -2371,9 +2351,9 @@ static s32 Handle_RcvdGnrlAsyncInfo(void *drvHandler, tstrRcvdGnrlAsyncInfo *pst
        tstrDisconnectNotifInfo strDisconnectNotifInfo;
        s32 s32Err = WILC_SUCCESS;
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *) drvHandler;
-       if (pstrWFIDrv == NULL) {
+
+       if (pstrWFIDrv == NULL)
                PRINT_ER("Driver handler is NULL\n");
-       }
        PRINT_D(GENERIC_DBG, "Current State = %d,Received state = %d\n", pstrWFIDrv->enuHostIFstate,
                pstrRcvdGnrlAsyncInfo->pu8Buffer[7]);
 
@@ -2417,10 +2397,10 @@ static s32 Handle_RcvdGnrlAsyncInfo(void *drvHandler, tstrRcvdGnrlAsyncInfo *pst
 
                        PRINT_D(HOSTINF_DBG, "Recieved MAC status = %d with Reason = %d , Code = %d\n", u8MacStatus, u8MacStatusReasonCode, u8MacStatusAdditionalInfo);
 
-                       WILC_memset(&strConnectInfo, 0, sizeof(tstrConnectInfo));
+                       memset(&strConnectInfo, 0, sizeof(tstrConnectInfo));
 
                        if (u8MacStatus == MAC_CONNECTED) {
-                               WILC_memset(gapu8RcvdAssocResp, 0, MAX_ASSOC_RESP_FRAME_SIZE);
+                               memset(gapu8RcvdAssocResp, 0, MAX_ASSOC_RESP_FRAME_SIZE);
 
                                host_int_get_assoc_res_info((WILC_WFIDrvHandle)pstrWFIDrv,
                                                            gapu8RcvdAssocResp,
@@ -2435,7 +2415,7 @@ static s32 Handle_RcvdGnrlAsyncInfo(void *drvHandler, tstrRcvdGnrlAsyncInfo *pst
                                        s32Err = ParseAssocRespInfo(gapu8RcvdAssocResp, u32RcvdAssocRespInfoLen,
                                                                    &pstrConnectRespInfo);
                                        if (s32Err) {
-                                               PRINT_ER("ParseAssocRespInfo() returned error %d \n", s32Err);
+                                               PRINT_ER("ParseAssocRespInfo() returned error %d\n", s32Err);
                                        } else {
                                                /* use the necessary parsed Info from the Received Association Response */
                                                strConnectInfo.u16ConnectStatus = pstrConnectRespInfo->u16ConnectStatus;
@@ -2466,12 +2446,12 @@ static s32 Handle_RcvdGnrlAsyncInfo(void *drvHandler, tstrRcvdGnrlAsyncInfo *pst
                         *   So check first the matching between the received mac status and the received status code in Asoc Resp */
                        if ((u8MacStatus == MAC_CONNECTED) &&
                            (strConnectInfo.u16ConnectStatus != SUCCESSFUL_STATUSCODE)) {
-                               PRINT_ER("Received MAC status is MAC_CONNECTED while the received status code in Asoc Resp is not SUCCESSFUL_STATUSCODE \n");
-                               WILC_memset(u8ConnectedSSID, 0, ETH_ALEN);
+                               PRINT_ER("Received MAC status is MAC_CONNECTED while the received status code in Asoc Resp is not SUCCESSFUL_STATUSCODE\n");
+                               memset(u8ConnectedSSID, 0, ETH_ALEN);
 
                        } else if (u8MacStatus == MAC_DISCONNECTED)    {
                                PRINT_ER("Received MAC status is MAC_DISCONNECTED\n");
-                               WILC_memset(u8ConnectedSSID, 0, ETH_ALEN);
+                               memset(u8ConnectedSSID, 0, ETH_ALEN);
                        }
 
                        /* TODO: mostafa: correct BSSID should be retrieved from actual BSSID received from AP */
@@ -2572,10 +2552,10 @@ static s32 Handle_RcvdGnrlAsyncInfo(void *drvHandler, tstrRcvdGnrlAsyncInfo *pst
                        /* Disassociation or Deauthentication frame has been received */
                        PRINT_D(HOSTINF_DBG, "Received MAC_DISCONNECTED from the FW\n");
 
-                       WILC_memset(&strDisconnectNotifInfo, 0, sizeof(tstrDisconnectNotifInfo));
+                       memset(&strDisconnectNotifInfo, 0, sizeof(tstrDisconnectNotifInfo));
 
                        if (pstrWFIDrv->strWILC_UsrScanReq.pfUserScanResult) {
-                               PRINT_D(HOSTINF_DBG, "\n\n<< Abort the running OBSS Scan >> \n\n");
+                               PRINT_D(HOSTINF_DBG, "\n\n<< Abort the running OBSS Scan >>\n\n");
                                WILC_TimerStop(&(pstrWFIDrv->hScanTimer), NULL);
                                Handle_ScanDone((void *)pstrWFIDrv, SCAN_EVENT_ABORTED);
                        }
@@ -2598,10 +2578,10 @@ static s32 Handle_RcvdGnrlAsyncInfo(void *drvHandler, tstrRcvdGnrlAsyncInfo *pst
                                                                                   pstrWFIDrv->strWILC_UsrConnReq.u32UserConnectPvoid);
 
                        } else {
-                               PRINT_ER("Connect result callback function is NULL \n");
+                               PRINT_ER("Connect result callback function is NULL\n");
                        }
 
-                       WILC_memset(pstrWFIDrv->au8AssociatedBSSID, 0, ETH_ALEN);
+                       memset(pstrWFIDrv->au8AssociatedBSSID, 0, ETH_ALEN);
 
 
                        /* Deallocation */
@@ -2651,13 +2631,12 @@ static s32 Handle_RcvdGnrlAsyncInfo(void *drvHandler, tstrRcvdGnrlAsyncInfo *pst
                } else if ((u8MacStatus == MAC_DISCONNECTED) &&
                           (pstrWFIDrv->strWILC_UsrScanReq.pfUserScanResult != NULL)) {
                        PRINT_D(HOSTINF_DBG, "Received MAC_DISCONNECTED from the FW while scanning\n");
-                       PRINT_D(HOSTINF_DBG, "\n\n<< Abort the running Scan >> \n\n");
+                       PRINT_D(HOSTINF_DBG, "\n\n<< Abort the running Scan >>\n\n");
                        /*Abort the running scan*/
                        WILC_TimerStop(&(pstrWFIDrv->hScanTimer), NULL);
-                       if (pstrWFIDrv->strWILC_UsrScanReq.pfUserScanResult) {
+                       if (pstrWFIDrv->strWILC_UsrScanReq.pfUserScanResult)
                                Handle_ScanDone((void *)pstrWFIDrv, SCAN_EVENT_ABORTED);
 
-                       }
                }
 
        }
@@ -2810,7 +2789,7 @@ static int Handle_Key(void *drvHandler, tstrHostIFkeyAttr *pstrHostIFkeyAttr)
                                goto _WPARxGtk_end_case_;
                        }
 
-                       WILC_memset(pu8keybuf, 0, RX_MIC_KEY_MSG_LEN);
+                       memset(pu8keybuf, 0, RX_MIC_KEY_MSG_LEN);
 
 
                        /*|----------------------------------------------------------------------------|
@@ -2861,7 +2840,7 @@ static int Handle_Key(void *drvHandler, tstrHostIFkeyAttr *pstrHostIFkeyAttr)
                                goto _WPARxGtk_end_case_;
                        }
 
-                       WILC_memset(pu8keybuf, 0, RX_MIC_KEY_MSG_LEN);
+                       memset(pu8keybuf, 0, RX_MIC_KEY_MSG_LEN);
 
 
                        /*|----------------------------------------------------------------------------|
@@ -2869,11 +2848,10 @@ static int Handle_Key(void *drvHandler, tstrHostIFkeyAttr *pstrHostIFkeyAttr)
                         * |------------|---------|-------|------------|---------------|----------------|
                         |      6 bytes  | 8 byte  |1 byte |  1 byte    |   16 bytes    |         8 bytes        |*/
 
-                       if (pstrWFIDrv->enuHostIFstate == HOST_IF_CONNECTED) {
+                       if (pstrWFIDrv->enuHostIFstate == HOST_IF_CONNECTED)
                                WILC_memcpy(pu8keybuf, pstrWFIDrv->au8AssociatedBSSID, ETH_ALEN);
-                       } else {
-                               PRINT_ER("Couldn't handle WPARxGtk while enuHostIFstate is not HOST_IF_CONNECTED \n");
-                       }
+                       else
+                               PRINT_ER("Couldn't handle WPARxGtk while enuHostIFstate is not HOST_IF_CONNECTED\n");
 
                        WILC_memcpy(pu8keybuf + 6, pstrHostIFkeyAttr->uniHostIFkeyAttr.strHostIFwpaAttr.pu8seq, 8);
 
@@ -3072,7 +3050,7 @@ static void Handle_Disconnect(void *drvHandler)
        host_int_set_power_mgmt((WILC_WFIDrvHandle)pstrWFIDrv, 0, 0);
        #endif
 
-       WILC_memset(u8ConnectedSSID, 0, ETH_ALEN);
+       memset(u8ConnectedSSID, 0, ETH_ALEN);
 
        s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false, (u32)pstrWFIDrv);
 
@@ -3082,7 +3060,7 @@ static void Handle_Disconnect(void *drvHandler)
        } else {
                tstrDisconnectNotifInfo strDisconnectNotifInfo;
 
-               WILC_memset(&strDisconnectNotifInfo, 0, sizeof(tstrDisconnectNotifInfo));
+               memset(&strDisconnectNotifInfo, 0, sizeof(tstrDisconnectNotifInfo));
 
                strDisconnectNotifInfo.u16reason = 0;
                strDisconnectNotifInfo.ie = NULL;
@@ -3108,14 +3086,14 @@ static void Handle_Disconnect(void *drvHandler)
                        pstrWFIDrv->strWILC_UsrConnReq.pfUserConnectResult(CONN_DISCONN_EVENT_DISCONN_NOTIF, NULL,
                                                                           0, &strDisconnectNotifInfo, pstrWFIDrv->strWILC_UsrConnReq.u32UserConnectPvoid);
                } else {
-                       PRINT_ER("strWILC_UsrConnReq.pfUserConnectResult = NULL \n");
+                       PRINT_ER("strWILC_UsrConnReq.pfUserConnectResult = NULL\n");
                }
 
                gbScanWhileConnected = false;
 
                pstrWFIDrv->enuHostIFstate = HOST_IF_IDLE;
 
-               WILC_memset(pstrWFIDrv->au8AssociatedBSSID, 0, ETH_ALEN);
+               memset(pstrWFIDrv->au8AssociatedBSSID, 0, ETH_ALEN);
 
 
                /* Deallocation */
@@ -3194,7 +3172,7 @@ static s32 Switch_Log_Terminal(void *drvHandler)
                PRINT_D(HOSTINF_DBG, "Failed to switch log terminal\n");
                WILC_ERRORREPORT(s32Error, WILC_INVALID_STATE);
        } else {
-               PRINT_INFO(HOSTINF_DBG, "MAC address set :: \n");
+               PRINT_INFO(HOSTINF_DBG, "MAC address set ::\n");
 
 
        }
@@ -3224,6 +3202,7 @@ static s32 Handle_GetChnl(void *drvHandler)
        tstrWID strWID;
        /* tstrWILC_WFIDrv * pstrWFIDrv = (tstrWILC_WFIDrv *)hWFIDrv; */
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)drvHandler;
+
        strWID.u16WIDid = (u16)WID_CURRENT_CHANNEL;
        strWID.enuWIDtype = WID_CHAR;
        strWID.ps8WidVal = (s8 *)&gu8Chnl;
@@ -3457,15 +3436,15 @@ static void Handle_AddBeacon(void *drvHandler, tstrHostIFSetBeacon *pstrSetBeaco
        tstrWID strWID;
        u8 *pu8CurrByte;
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)drvHandler;
+
        PRINT_D(HOSTINF_DBG, "Adding BEACON\n");
 
        strWID.u16WIDid = (u16)WID_ADD_BEACON;
        strWID.enuWIDtype = WID_BIN;
        strWID.s32ValueSize = pstrSetBeaconParam->u32HeadLen + pstrSetBeaconParam->u32TailLen + 16;
        strWID.ps8WidVal = WILC_MALLOC(strWID.s32ValueSize);
-       if (strWID.ps8WidVal == NULL) {
+       if (strWID.ps8WidVal == NULL)
                WILC_ERRORREPORT(s32Error, WILC_NO_MEM);
-       }
 
        pu8CurrByte = strWID.ps8WidVal;
        *pu8CurrByte++ = (pstrSetBeaconParam->u32Interval & 0xFF);
@@ -3529,14 +3508,14 @@ static void Handle_DelBeacon(void *drvHandler, tstrHostIFDelBeacon *pstrDelBeaco
        tstrWID strWID;
        u8 *pu8CurrByte;
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)drvHandler;
+
        strWID.u16WIDid = (u16)WID_DEL_BEACON;
        strWID.enuWIDtype = WID_CHAR;
        strWID.s32ValueSize = sizeof(char);
        strWID.ps8WidVal = &gu8DelBcn;
 
-       if (strWID.ps8WidVal == NULL) {
+       if (strWID.ps8WidVal == NULL)
                WILC_ERRORREPORT(s32Error, WILC_NO_MEM);
-       }
 
        pu8CurrByte = strWID.ps8WidVal;
 
@@ -3580,9 +3559,8 @@ static u32 WILC_HostIf_PackStaParam(u8 *pu8Buffer, tstrWILC_AddStaParam *pstrSta
        *pu8CurrByte++ = (pstrStationParam->u16AssocID >> 8) & 0xFF;
 
        *pu8CurrByte++ = pstrStationParam->u8NumRates;
-       if (pstrStationParam->u8NumRates > 0) {
+       if (pstrStationParam->u8NumRates > 0)
                WILC_memcpy(pu8CurrByte, pstrStationParam->pu8Rates, pstrStationParam->u8NumRates);
-       }
        pu8CurrByte += pstrStationParam->u8NumRates;
 
        *pu8CurrByte++ = pstrStationParam->bIsHTSupported;
@@ -3627,15 +3605,15 @@ static void Handle_AddStation(void *drvHandler, tstrWILC_AddStaParam *pstrStatio
        tstrWID strWID;
        u8 *pu8CurrByte;
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)drvHandler;
+
        PRINT_D(HOSTINF_DBG, "Handling add station\n");
        strWID.u16WIDid = (u16)WID_ADD_STA;
        strWID.enuWIDtype = WID_BIN;
        strWID.s32ValueSize = WILC_ADD_STA_LENGTH + pstrStationParam->u8NumRates;
 
        strWID.ps8WidVal = WILC_MALLOC(strWID.s32ValueSize);
-       if (strWID.ps8WidVal == NULL) {
+       if (strWID.ps8WidVal == NULL)
                WILC_ERRORREPORT(s32Error, WILC_NO_MEM);
-       }
 
        pu8CurrByte = strWID.ps8WidVal;
        pu8CurrByte += WILC_HostIf_PackStaParam(pu8CurrByte, pstrStationParam);
@@ -3667,21 +3645,22 @@ static void Handle_AddStation(void *drvHandler, tstrWILC_AddStaParam *pstrStatio
 static void Handle_DelAllSta(void *drvHandler, tstrHostIFDelAllSta *pstrDelAllStaParam)
 {
        s32 s32Error = WILC_SUCCESS;
+
        tstrWID strWID;
        u8 *pu8CurrByte;
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)drvHandler;
        u8 i;
        u8 au8Zero_Buff[6] = {0};
+
        strWID.u16WIDid = (u16)WID_DEL_ALL_STA;
        strWID.enuWIDtype = WID_STR;
        strWID.s32ValueSize = (pstrDelAllStaParam->u8Num_AssocSta * ETH_ALEN) + 1;
 
-       PRINT_D(HOSTINF_DBG, "Handling delete station \n");
+       PRINT_D(HOSTINF_DBG, "Handling delete station\n");
 
        strWID.ps8WidVal = WILC_MALLOC((pstrDelAllStaParam->u8Num_AssocSta * ETH_ALEN) + 1);
-       if (strWID.ps8WidVal == NULL) {
+       if (strWID.ps8WidVal == NULL)
                WILC_ERRORREPORT(s32Error, WILC_NO_MEM);
-       }
 
        pu8CurrByte = strWID.ps8WidVal;
 
@@ -3700,7 +3679,7 @@ static void Handle_DelAllSta(void *drvHandler, tstrHostIFDelAllSta *pstrDelAllSt
        s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
        if (s32Error) {
 
-               PRINT_ER("Failed to send add station config packe\n");
+               PRINT_ER("Failed to send add station config packet\n");
                WILC_ERRORREPORT(s32Error, WILC_FAIL);
        }
 
@@ -3733,12 +3712,11 @@ static void Handle_DelStation(void *drvHandler, tstrHostIFDelSta *pstrDelStaPara
        strWID.enuWIDtype = WID_BIN;
        strWID.s32ValueSize = ETH_ALEN;
 
-       PRINT_D(HOSTINF_DBG, "Handling delete station \n");
+       PRINT_D(HOSTINF_DBG, "Handling delete station\n");
 
        strWID.ps8WidVal = WILC_MALLOC(strWID.s32ValueSize);
-       if (strWID.ps8WidVal == NULL) {
+       if (strWID.ps8WidVal == NULL)
                WILC_ERRORREPORT(s32Error, WILC_NO_MEM);
-       }
 
        pu8CurrByte = strWID.ps8WidVal;
 
@@ -3748,7 +3726,7 @@ static void Handle_DelStation(void *drvHandler, tstrHostIFDelSta *pstrDelStaPara
        s32Error = SendConfigPkt(SET_CFG, &strWID, 1, false, (u32)pstrWFIDrv);
        if (s32Error) {
 
-               PRINT_ER("Failed to send add station config packe\n");
+               PRINT_ER("Failed to send add station config packet\n");
                WILC_ERRORREPORT(s32Error, WILC_FAIL);
        }
 
@@ -3781,9 +3759,8 @@ static void Handle_EditStation(void *drvHandler, tstrWILC_AddStaParam *pstrStati
 
        PRINT_D(HOSTINF_DBG, "Handling edit station\n");
        strWID.ps8WidVal = WILC_MALLOC(strWID.s32ValueSize);
-       if (strWID.ps8WidVal == NULL) {
+       if (strWID.ps8WidVal == NULL)
                WILC_ERRORREPORT(s32Error, WILC_NO_MEM);
-       }
 
        pu8CurrByte = strWID.ps8WidVal;
        pu8CurrByte += WILC_HostIf_PackStaParam(pu8CurrByte, pstrStationParam);
@@ -3858,18 +3835,16 @@ static int Handle_RemainOnChan(void *drvHandler, tstrHostIfRemainOnChan *pstrHos
        strWID.s32ValueSize = 2;
        strWID.ps8WidVal = (s8 *)WILC_MALLOC(strWID.s32ValueSize);
 
-       if (strWID.ps8WidVal == NULL) {
+       if (strWID.ps8WidVal == NULL)
                WILC_ERRORREPORT(s32Error, WILC_NO_MEM);
-       }
 
        strWID.ps8WidVal[0] = u8remain_on_chan_flag;
        strWID.ps8WidVal[1] = (s8)pstrHostIfRemainOnChan->u16Channel;
 
        /*Sending Cfg*/
        s32Error = SendConfigPkt(SET_CFG, &strWID, 1, true, (u32)pstrWFIDrv);
-       if (s32Error != WILC_SUCCESS) {
+       if (s32Error != WILC_SUCCESS)
                PRINT_ER("Failed to set remain on channel\n");
-       }
 
        WILC_CATCH(-1)
        {
@@ -3877,9 +3852,8 @@ static int Handle_RemainOnChan(void *drvHandler, tstrHostIfRemainOnChan *pstrHos
                WILC_TimerStart(&(pstrWFIDrv->hRemainOnChannel), pstrHostIfRemainOnChan->u32duration, (void *)pstrWFIDrv, NULL);
 
                /*Calling CFG ready_on_channel*/
-               if (pstrWFIDrv->strHostIfRemainOnChan.pRemainOnChanReady) {
+               if (pstrWFIDrv->strHostIfRemainOnChan.pRemainOnChanReady)
                        pstrWFIDrv->strHostIfRemainOnChan.pRemainOnChanReady(pstrWFIDrv->strHostIfRemainOnChan.pVoid);
-               }
 
                if (pstrWFIDrv->u8RemainOnChan_pendingreq)
                        pstrWFIDrv->u8RemainOnChan_pendingreq = 0;
@@ -3909,9 +3883,8 @@ static int Handle_RegisterFrame(void *drvHandler, tstrHostIfRegisterFrame *pstrH
        strWID.u16WIDid = (u16)WID_REGISTER_FRAME;
        strWID.enuWIDtype = WID_STR;
        strWID.ps8WidVal = WILC_MALLOC(sizeof(u16) + 2);
-       if (strWID.ps8WidVal == NULL) {
+       if (strWID.ps8WidVal == NULL)
                WILC_ERRORREPORT(s32Error, WILC_NO_MEM);
-       }
 
        pu8CurrByte = strWID.ps8WidVal;
 
@@ -3968,9 +3941,8 @@ static u32 Handle_ListenStateExpired(void *drvHandler, tstrHostIfRemainOnChan *p
                strWID.s32ValueSize = 2;
                strWID.ps8WidVal = WILC_MALLOC(strWID.s32ValueSize);
 
-               if (strWID.ps8WidVal == NULL) {
+               if (strWID.ps8WidVal == NULL)
                        PRINT_ER("Failed to allocate memory\n");
-               }
 
                strWID.ps8WidVal[0] = u8remain_on_chan_flag;
                strWID.ps8WidVal[1] = FALSE_FRMWR_CHANNEL;
@@ -4015,16 +3987,15 @@ static void ListenTimerCB(void *pvArg)
        WILC_TimerStop(&(pstrWFIDrv->hRemainOnChannel), NULL);
 
        /* prepare the Timer Callback message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
        strHostIFmsg.u16MsgId = HOST_IF_MSG_LISTEN_TIMER_FIRED;
        strHostIFmsg.drvHandler = pstrWFIDrv;
        strHostIFmsg.uniHostIFmsgBody.strHostIfRemainOnChan.u32ListenSessionID = pstrWFIDrv->strHostIfRemainOnChan.u32ListenSessionID;
 
        /* send the message */
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
        WILC_CATCH(s32Error)
        {
 
@@ -4048,13 +4019,13 @@ static void Handle_PowerManagement(void *drvHandler, tstrHostIfPowerMgmtParam *s
        tstrWID strWID;
        s8 s8PowerMode;
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)drvHandler;
+
        strWID.u16WIDid = (u16)WID_POWER_MANAGEMENT;
 
-       if (strPowerMgmtParam->bIsEnabled == true)      {
+       if (strPowerMgmtParam->bIsEnabled == true)
                s8PowerMode = MIN_FAST_PS;
-       } else {
+       else
                s8PowerMode = NO_POWERSAVE;
-       }
        PRINT_D(HOSTINF_DBG, "Handling power mgmt to %d\n", s8PowerMode);
        strWID.ps8WidVal = &s8PowerMode;
        strWID.s32ValueSize = sizeof(char);
@@ -4095,9 +4066,8 @@ static void Handle_SetMulticastFilter(void *drvHandler, tstrHostIFSetMulti *strH
        strWID.enuWIDtype = WID_BIN;
        strWID.s32ValueSize = sizeof(tstrHostIFSetMulti) + ((strHostIfSetMulti->u32count) * ETH_ALEN);
        strWID.ps8WidVal = WILC_MALLOC(strWID.s32ValueSize);
-       if (strWID.ps8WidVal == NULL) {
+       if (strWID.ps8WidVal == NULL)
                WILC_ERRORREPORT(s32Error, WILC_NO_MEM);
-       }
 
        pu8CurrByte = strWID.ps8WidVal;
        *pu8CurrByte++ = (strHostIfSetMulti->bIsEnabled & 0xFF);
@@ -4146,7 +4116,7 @@ static s32 Handle_AddBASession(void *drvHandler, tstrHostIfBASessionInfo *strHos
        char *ptr = NULL;
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)drvHandler;
 
-       PRINT_D(HOSTINF_DBG, "Opening Block Ack session with\nBSSID = %.2x:%.2x:%.2x \nTID=%d \nBufferSize == %d \nSessionTimeOut = %d\n",
+       PRINT_D(HOSTINF_DBG, "Opening Block Ack session with\nBSSID = %.2x:%.2x:%.2x\nTID=%d\nBufferSize == %d\nSessionTimeOut = %d\n",
                strHostIfBASessionInfo->au8Bssid[0],
                strHostIfBASessionInfo->au8Bssid[1],
                strHostIfBASessionInfo->au8Bssid[2],
@@ -4233,7 +4203,7 @@ static s32 Handle_DelBASession(void *drvHandler, tstrHostIfBASessionInfo *strHos
        char *ptr = NULL;
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)drvHandler;
 
-       PRINT_D(GENERIC_DBG, "Delete Block Ack session with\nBSSID = %.2x:%.2x:%.2x \nTID=%d\n",
+       PRINT_D(GENERIC_DBG, "Delete Block Ack session with\nBSSID = %.2x:%.2x:%.2x\nTID=%d\n",
                strHostIfBASessionInfo->au8Bssid[0],
                strHostIfBASessionInfo->au8Bssid[1],
                strHostIfBASessionInfo->au8Bssid[2],
@@ -4303,7 +4273,7 @@ static s32 Handle_DelAllRxBASessions(void *drvHandler, tstrHostIfBASessionInfo *
        char *ptr = NULL;
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)drvHandler;
 
-       PRINT_D(GENERIC_DBG, "Delete Block Ack session with\nBSSID = %.2x:%.2x:%.2x \nTID=%d\n",
+       PRINT_D(GENERIC_DBG, "Delete Block Ack session with\nBSSID = %.2x:%.2x:%.2x\nTID=%d\n",
                strHostIfBASessionInfo->au8Bssid[0],
                strHostIfBASessionInfo->au8Bssid[1],
                strHostIfBASessionInfo->au8Bssid[2],
@@ -4355,7 +4325,7 @@ static int hostIFthread(void *pvArg)
        tstrHostIFmsg strHostIFmsg;
        tstrWILC_WFIDrv *pstrWFIDrv;
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        while (1) {
                WILC_MsgQueueRecv(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), &u32Ret, NULL);
@@ -4430,9 +4400,8 @@ static int hostIFthread(void *pvArg)
 
                        /*BugID_5213*/
                        /*Allow chip sleep, only if both interfaces are not connected*/
-                       if (!linux_wlan_get_num_conn_ifcs()) {
+                       if (!linux_wlan_get_num_conn_ifcs())
                                chip_sleep_manually(INFINITE_SLEEP_TIME);
-                       }
 
                        Handle_ScanDone(strHostIFmsg.drvHandler, SCAN_EVENT_DONE);
 
@@ -4492,7 +4461,7 @@ static int hostIFthread(void *pvArg)
                        break;
 
                case HOST_IF_MSG_CONNECT_TIMER_FIRED:
-                       PRINT_D(HOSTINF_DBG, "Connect Timeout \n");
+                       PRINT_D(HOSTINF_DBG, "Connect Timeout\n");
                        Handle_ConnectTimeout(strHostIFmsg.drvHandler);
                        break;
 
@@ -4563,7 +4532,7 @@ static int hostIFthread(void *pvArg)
                        break;
 
                default:
-                       PRINT_ER("[Host Interface] undefined Received Msg ID  \n");
+                       PRINT_ER("[Host Interface] undefined Received Msg ID\n");
                        break;
                }
        }
@@ -4578,7 +4547,7 @@ static void TimerCB_Scan(void *pvArg)
        tstrHostIFmsg strHostIFmsg;
 
        /* prepare the Timer Callback message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
        strHostIFmsg.drvHandler = pvArg;
        strHostIFmsg.u16MsgId = HOST_IF_MSG_SCAN_TIMER_FIRED;
 
@@ -4591,7 +4560,7 @@ static void TimerCB_Connect(void *pvArg)
        tstrHostIFmsg strHostIFmsg;
 
        /* prepare the Timer Callback message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
        strHostIFmsg.drvHandler = pvArg;
        strHostIFmsg.u16MsgId = HOST_IF_MSG_CONNECT_TIMER_FIRED;
 
@@ -4649,12 +4618,11 @@ s32 host_int_remove_wep_key(WILC_WFIDrvHandle hWFIDrv, u8 u8keyIdx)
        tstrHostIFmsg strHostIFmsg;
 
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
        /* prepare the Remove Wep Key Message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
 
        strHostIFmsg.u16MsgId = HOST_IF_MSG_KEY;
@@ -4670,7 +4638,7 @@ s32 host_int_remove_wep_key(WILC_WFIDrvHandle hWFIDrv, u8 u8keyIdx)
        /* send the message */
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
        if (s32Error)
-               PRINT_ER("Error in sending message queue : Request to remove WEP key \n");
+               PRINT_ER("Error in sending message queue : Request to remove WEP key\n");
        down(&(pstrWFIDrv->hSemTestKeyBlock));
 
        WILC_CATCH(s32Error)
@@ -4699,12 +4667,11 @@ s32 host_int_set_WEPDefaultKeyID(WILC_WFIDrvHandle hWFIDrv, u8 u8Index)
        tstrHostIFmsg strHostIFmsg;
 
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
        /* prepare the Key Message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
 
        strHostIFmsg.u16MsgId = HOST_IF_MSG_KEY;
@@ -4756,13 +4723,12 @@ s32 host_int_add_wep_key_bss_sta(WILC_WFIDrvHandle hWFIDrv, const u8 *pu8WepKey,
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)hWFIDrv;
        tstrHostIFmsg strHostIFmsg;
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
 
-       }
 
        /* prepare the Key Message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
 
        strHostIFmsg.u16MsgId = HOST_IF_MSG_KEY;
@@ -4823,13 +4789,12 @@ s32 host_int_add_wep_key_bss_ap(WILC_WFIDrvHandle hWFIDrv, const u8 *pu8WepKey,
        tstrHostIFmsg strHostIFmsg;
        u8 i;
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
 
-       }
 
        /* prepare the Key Message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        if (INFO) {
                for (i = 0; i < u8WepKeylen; i++)
@@ -4899,18 +4864,16 @@ s32 host_int_add_ptk(WILC_WFIDrvHandle hWFIDrv, const u8 *pu8Ptk, u8 u8PtkKeylen
        tstrHostIFmsg strHostIFmsg;
        u8 u8KeyLen = u8PtkKeylen;
        u32 i;
-       if (pstrWFIDrv == NULL) {
+
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
-       if (pu8RxMic != NULL) {
+       if (pu8RxMic != NULL)
                u8KeyLen += RX_MIC_KEY_LEN;
-       }
-       if (pu8TxMic != NULL) {
+       if (pu8TxMic != NULL)
                u8KeyLen += TX_MIC_KEY_LEN;
-       }
 
        /* prepare the Key Message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
 
        strHostIFmsg.u16MsgId = HOST_IF_MSG_KEY;
@@ -5002,19 +4965,16 @@ s32 host_int_add_rx_gtk(WILC_WFIDrvHandle hWFIDrv, const u8 *pu8RxGtk, u8 u8GtkK
        tstrHostIFmsg strHostIFmsg;
        u8 u8KeyLen = u8GtkKeylen;
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
        /* prepare the Key Message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
 
-       if (pu8RxMic != NULL) {
+       if (pu8RxMic != NULL)
                u8KeyLen += RX_MIC_KEY_LEN;
-       }
-       if (pu8TxMic != NULL) {
+       if (pu8TxMic != NULL)
                u8KeyLen += TX_MIC_KEY_LEN;
-       }
        if (KeyRSC != NULL) {
                strHostIFmsg.uniHostIFmsgBody.strHostIFkeyAttr.
                uniHostIFkeyAttr.strHostIFwpaAttr.pu8seq = (u8 *)WILC_MALLOC(u32KeyRSClen);
@@ -5111,12 +5071,11 @@ s32 host_int_set_pmkid_info(WILC_WFIDrvHandle hWFIDrv, tstrHostIFpmkidAttr *pu8P
        u32 i;
 
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
        /* prepare the Key Message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        strHostIFmsg.u16MsgId = HOST_IF_MSG_KEY;
        strHostIFmsg.uniHostIFmsgBody.strHostIFkeyAttr.enuKeyType = PMKSA;
@@ -5231,7 +5190,7 @@ s32 host_int_get_MacAddress(WILC_WFIDrvHandle hWFIDrv, u8 *pu8MacAddress)
 
 
        /* prepare the Message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        strHostIFmsg.u16MsgId = HOST_IF_MSG_GET_MAC_ADDRESS;
        strHostIFmsg.uniHostIFmsgBody.strHostIfGetMacAddress.u8MacAddress = pu8MacAddress;
@@ -5266,7 +5225,7 @@ s32 host_int_set_MacAddress(WILC_WFIDrvHandle hWFIDrv, u8 *pu8MacAddress)
        PRINT_D(GENERIC_DBG, "mac addr = %x:%x:%x\n", pu8MacAddress[0], pu8MacAddress[1], pu8MacAddress[2]);
 
        /* prepare setting mac address message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
        strHostIFmsg.u16MsgId = HOST_IF_MSG_SET_MAC_ADDRESS;
        WILC_memcpy(strHostIFmsg.uniHostIFmsgBody.strHostIfSetMacAddress.u8MacAddress, pu8MacAddress, ETH_ALEN);
        strHostIFmsg.drvHandler = hWFIDrv;
@@ -5464,9 +5423,8 @@ s32 host_int_set_join_req(WILC_WFIDrvHandle hWFIDrv, u8 *pu8bssid,
        tstrHostIFmsg strHostIFmsg;
        tenuScanConnTimer enuScanConnTimer;
 
-       if (pstrWFIDrv == NULL || pfConnectResult == NULL) {
+       if (pstrWFIDrv == NULL || pfConnectResult == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
        if (hWFIDrv == NULL) {
                PRINT_ER("Driver not initialized: gWFiDrvHandle = NULL\n");
@@ -5486,7 +5444,7 @@ s32 host_int_set_join_req(WILC_WFIDrvHandle hWFIDrv, u8 *pu8bssid,
  *      }
  */
        /* prepare the Connect Message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        strHostIFmsg.u16MsgId = HOST_IF_MSG_CONNECT;
 
@@ -5518,9 +5476,9 @@ s32 host_int_set_join_req(WILC_WFIDrvHandle hWFIDrv, u8 *pu8bssid,
                WILC_memcpy(strHostIFmsg.uniHostIFmsgBody.strHostIFconnectAttr.pu8IEs,
                            pu8IEs, IEsLen);
        }
-       if (pstrWFIDrv->enuHostIFstate < HOST_IF_CONNECTING) {
+       if (pstrWFIDrv->enuHostIFstate < HOST_IF_CONNECTING)
                pstrWFIDrv->enuHostIFstate = HOST_IF_CONNECTING;
-       else
+       else
                PRINT_D(GENERIC_DBG, "Don't set state to 'connecting' as state is %d\n", pstrWFIDrv->enuHostIFstate);
 
        /* send the message */
@@ -5564,9 +5522,8 @@ s32 host_int_flush_join_req(WILC_WFIDrvHandle hWFIDrv)
        }
 
 
-       if (hWFIDrv  == NULL) {
+       if (hWFIDrv  == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
 
        strHostIFmsg.u16MsgId = HOST_IF_MSG_FLUSH_CONNECT;
@@ -5604,7 +5561,7 @@ s32 host_int_disconnect(WILC_WFIDrvHandle hWFIDrv, u16 u16ReasonCode)
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)hWFIDrv;
 
        if (pstrWFIDrv == NULL) {
-               PRINT_ER("Driver not initialized: pstrWFIDrv = NULL \n");
+               PRINT_ER("Driver not initialized: pstrWFIDrv = NULL\n");
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
        }
 
@@ -5614,7 +5571,7 @@ s32 host_int_disconnect(WILC_WFIDrvHandle hWFIDrv, u16 u16ReasonCode)
        }
 
        /* prepare the Disconnect Message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        strHostIFmsg.u16MsgId = HOST_IF_MSG_DISCONNECT;
        strHostIFmsg.drvHandler = hWFIDrv;
@@ -5721,7 +5678,7 @@ s32 host_int_get_assoc_res_info(WILC_WFIDrvHandle hWFIDrv, u8 *pu8AssocRespInfo,
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)hWFIDrv;
 
        if (pstrWFIDrv == NULL) {
-               PRINT_ER("Driver not initialized: pstrWFIDrv = NULL \n");
+               PRINT_ER("Driver not initialized: pstrWFIDrv = NULL\n");
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
        }
 
@@ -5800,20 +5757,18 @@ s32 host_int_set_mac_chnl_num(WILC_WFIDrvHandle hWFIDrv, u8 u8ChNum)
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)hWFIDrv;
        tstrHostIFmsg strHostIFmsg;
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
        /* prepare the set channel message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
        strHostIFmsg.u16MsgId = HOST_IF_MSG_SET_CHANNEL;
        strHostIFmsg.uniHostIFmsgBody.strHostIFSetChan.u8SetChan = u8ChNum;
        strHostIFmsg.drvHandler = hWFIDrv;
 
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
        WILC_CATCH(s32Error)
        {
 
@@ -5831,12 +5786,11 @@ s32 host_int_wait_msg_queue_idle(void)
 
        /* prepare the set driver handler message */
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
        strHostIFmsg.u16MsgId = HOST_IF_MSG_Q_IDLE;
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
        WILC_CATCH(s32Error)
        {
 
@@ -5858,15 +5812,14 @@ s32 host_int_set_wfi_drv_handler(u32 u32address)
 
        /* prepare the set driver handler message */
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
        strHostIFmsg.u16MsgId = HOST_IF_MSG_SET_WFIDRV_HANDLER;
        strHostIFmsg.uniHostIFmsgBody.strHostIfSetDrvHandler.u32Address = u32address;
        /* strHostIFmsg.drvHandler=hWFIDrv; */
 
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
        WILC_CATCH(s32Error)
        {
 
@@ -5886,15 +5839,14 @@ s32 host_int_set_operation_mode(WILC_WFIDrvHandle hWFIDrv, u32 u32mode)
 
        /* prepare the set driver handler message */
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
        strHostIFmsg.u16MsgId = HOST_IF_MSG_SET_OPERATION_MODE;
        strHostIFmsg.uniHostIFmsgBody.strHostIfSetOperationMode.u32Mode = u32mode;
        strHostIFmsg.drvHandler = hWFIDrv;
 
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
        WILC_CATCH(s32Error)
        {
 
@@ -5925,12 +5877,12 @@ s32 host_int_get_host_chnl_num(WILC_WFIDrvHandle hWFIDrv, u8 *pu8ChNo)
        tstrHostIFmsg strHostIFmsg;
 
        if (pstrWFIDrv == NULL) {
-               PRINT_ER("Driver not initialized: pstrWFIDrv = NULL \n");
+               PRINT_ER("Driver not initialized: pstrWFIDrv = NULL\n");
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
        }
 
        /* prepare the Get Channel Message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        strHostIFmsg.u16MsgId = HOST_IF_MSG_GET_CHNL;
        strHostIFmsg.drvHandler = hWFIDrv;
@@ -5972,7 +5924,7 @@ s32 host_int_test_set_int_wid(WILC_WFIDrvHandle hWFIDrv, u32 u32TestMemAddr)
 
 
        if (pstrWFIDrv == NULL) {
-               PRINT_ER("Driver not initialized: pstrWFIDrv = NULL \n");
+               PRINT_ER("Driver not initialized: pstrWFIDrv = NULL\n");
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
        }
 
@@ -6018,11 +5970,11 @@ s32 host_int_get_inactive_time(WILC_WFIDrvHandle hWFIDrv, const u8 *mac, u32 *pu
        tstrHostIFmsg strHostIFmsg;
 
        if (pstrWFIDrv == NULL) {
-               PRINT_ER("Driver not initialized: pstrWFIDrv = NULL \n");
+               PRINT_ER("Driver not initialized: pstrWFIDrv = NULL\n");
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
        }
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
 
        WILC_memcpy(strHostIFmsg.uniHostIFmsgBody.strHostIfStaInactiveT.mac,
@@ -6066,7 +6018,7 @@ s32 host_int_test_get_int_wid(WILC_WFIDrvHandle hWFIDrv, u32 *pu32TestMemAddr)
 
 
        if (pstrWFIDrv == NULL) {
-               PRINT_ER("Driver not initialized: pstrWFIDrv = NULL \n");
+               PRINT_ER("Driver not initialized: pstrWFIDrv = NULL\n");
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
        }
 
@@ -6114,7 +6066,7 @@ s32 host_int_get_rssi(WILC_WFIDrvHandle hWFIDrv, s8 *ps8Rssi)
 
 
        /* prepare the Get RSSI Message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        strHostIFmsg.u16MsgId = HOST_IF_MSG_GET_RSSI;
        strHostIFmsg.drvHandler = hWFIDrv;
@@ -6151,7 +6103,7 @@ s32 host_int_get_link_speed(WILC_WFIDrvHandle hWFIDrv, s8 *ps8lnkspd)
 
 
        /* prepare the Get LINKSPEED Message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        strHostIFmsg.u16MsgId = HOST_IF_MSG_GET_LINKSPEED;
        strHostIFmsg.drvHandler = hWFIDrv;
@@ -6185,7 +6137,7 @@ s32 host_int_get_statistics(WILC_WFIDrvHandle hWFIDrv, tstrStatistics *pstrStati
 
 
        /* prepare the Get RSSI Message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        strHostIFmsg.u16MsgId = HOST_IF_MSG_GET_STATISTICS;
        strHostIFmsg.uniHostIFmsgBody.pUserData = (char *)pstrStatistics;
@@ -6229,13 +6181,12 @@ s32 host_int_scan(WILC_WFIDrvHandle hWFIDrv, u8 u8ScanSource,
        tstrHostIFmsg strHostIFmsg;
        tenuScanConnTimer enuScanConnTimer;
 
-       if (pstrWFIDrv == NULL || ScanResult == NULL)   {
+       if (pstrWFIDrv == NULL || ScanResult == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
 
        /* prepare the Scan Message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        strHostIFmsg.u16MsgId = HOST_IF_MSG_SCAN;
 
@@ -6301,11 +6252,10 @@ s32 hif_set_cfg(WILC_WFIDrvHandle hWFIDrv, tstrCfgParamVal *pstrCfgParamVal)
        tstrHostIFmsg strHostIFmsg;
 
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
        /* prepare the WiphyParams Message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
        strHostIFmsg.u16MsgId = HOST_IF_MSG_CFG_PARAMS;
        strHostIFmsg.uniHostIFmsgBody.strHostIFCfgParamAttr.pstrCfgParamVal = *pstrCfgParamVal;
        strHostIFmsg.drvHandler = hWFIDrv;
@@ -6342,7 +6292,7 @@ s32 hif_get_cfg(WILC_WFIDrvHandle hWFIDrv, u16 u16WID, u16 *pu16WID_Value)
        down(&(pstrWFIDrv->gtOsCfgValuesSem));
 
        if (pstrWFIDrv == NULL) {
-               PRINT_ER("Driver not initialized: pstrWFIDrv = NULL \n");
+               PRINT_ER("Driver not initialized: pstrWFIDrv = NULL\n");
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
        }
        PRINT_D(HOSTINF_DBG, "Getting configuration parameters\n");
@@ -6472,6 +6422,7 @@ void host_int_send_join_leave_info_to_host
 void GetPeriodicRSSI(void *pvArg)
 {
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)pvArg;
+
        if (pstrWFIDrv == NULL) {
                PRINT_ER("Driver handler is NULL\n");
                return;
@@ -6482,7 +6433,7 @@ void GetPeriodicRSSI(void *pvArg)
                tstrHostIFmsg strHostIFmsg;
 
                /* prepare the Get RSSI Message */
-               WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+               memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
                strHostIFmsg.u16MsgId = HOST_IF_MSG_GET_RSSI;
                strHostIFmsg.drvHandler = pstrWFIDrv;
@@ -6542,7 +6493,7 @@ s32 host_int_init(WILC_WFIDrvHandle *phWFIDrv)
                PRINT_ER("Failed to allocate memory\n");
                goto _fail_timer_2;
        }
-       WILC_memset(pstrWFIDrv, 0, sizeof(tstrWILC_WFIDrv));
+       memset(pstrWFIDrv, 0, sizeof(tstrWILC_WFIDrv));
        /*return driver handle to user*/
        *phWFIDrv = (WILC_WFIDrvHandle)pstrWFIDrv;
        /*save into globl handle*/
@@ -6625,12 +6576,6 @@ s32 host_int_init(WILC_WFIDrvHandle *phWFIDrv)
        sema_init(&(pstrWFIDrv->gtOsCfgValuesSem), 1);
        down(&(pstrWFIDrv->gtOsCfgValuesSem));
 
-
-
-#ifdef SIMULATION
-       TransportInit();
-#endif
-
        pstrWFIDrv->enuHostIFstate = HOST_IF_IDLE;
        /* gWFiDrvHandle->bPendingConnRequest = false; */
 
@@ -6666,11 +6611,6 @@ s32 host_int_init(WILC_WFIDrvHandle *phWFIDrv)
                goto _fail_mem_;
        }
 
-#ifdef SIMULATION
-       /*Initialize Simulaor*/
-       CoreConfigSimulatorInit();
-#endif
-
        u32Intialized = 1;
        clients_count++; /* increase number of created entities */
 
@@ -6738,18 +6678,18 @@ s32 host_int_deinit(WILC_WFIDrvHandle hWFIDrv)
        /*Destroy all timers before acquiring hSemDeinitDrvHandle*/
        /*to guarantee handling all messages befor proceeding*/
        if (WILC_TimerDestroy(&(pstrWFIDrv->hScanTimer), NULL)) {
-               PRINT_D(HOSTINF_DBG, ">> Scan timer is active \n");
+               PRINT_D(HOSTINF_DBG, ">> Scan timer is active\n");
                /* msleep(HOST_IF_SCAN_TIMEOUT+1000); */
        }
 
        if (WILC_TimerDestroy(&(pstrWFIDrv->hConnectTimer), NULL)) {
-               PRINT_D(HOSTINF_DBG, ">> Connect timer is active \n");
+               PRINT_D(HOSTINF_DBG, ">> Connect timer is active\n");
                /* msleep(HOST_IF_CONNECT_TIMEOUT+1000); */
        }
 
 
        if (WILC_TimerDestroy(&(g_hPeriodicRSSI), NULL)) {
-               PRINT_D(HOSTINF_DBG, ">> Connect timer is active \n");
+               PRINT_D(HOSTINF_DBG, ">> Connect timer is active\n");
                /* msleep(HOST_IF_CONNECT_TIMEOUT+1000); */
        }
 
@@ -6770,23 +6710,17 @@ s32 host_int_deinit(WILC_WFIDrvHandle hWFIDrv)
                pstrWFIDrv->strWILC_UsrScanReq.pfUserScanResult = NULL;
        }
        /*deinit configurator and simulator*/
-#ifdef SIMULATION
-       CoreConfigSimulatorDeInit();
-#endif
        CoreConfiguratorDeInit();
-#ifdef SIMULATION
-       TransportDeInit();
-#endif
 
        pstrWFIDrv->enuHostIFstate = HOST_IF_IDLE;
 
        gbScanWhileConnected = false;
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        if (clients_count == 1) {
                if (WILC_TimerDestroy(&g_hPeriodicRSSI, NULL)) {
-                       PRINT_D(HOSTINF_DBG, ">> Connect timer is active \n");
+                       PRINT_D(HOSTINF_DBG, ">> Connect timer is active\n");
                        /* msleep(HOST_IF_CONNECT_TIMEOUT+1000); */
                }
                strHostIFmsg.u16MsgId = HOST_IF_MSG_EXIT;
@@ -6794,9 +6728,8 @@ s32 host_int_deinit(WILC_WFIDrvHandle hWFIDrv)
 
 
                s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-               if (s32Error != WILC_SUCCESS) {
+               if (s32Error != WILC_SUCCESS)
                        PRINT_ER("Error in sending deinit's message queue message function: Error(%d)\n", s32Error);
-               }
 
                down(&hSemHostIFthrdEnd);
 
@@ -6854,7 +6787,7 @@ void NetworkInfoReceived(u8 *pu8Buffer, u32 u32Length)
        }
 
        /* prepare the Asynchronous Network Info message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        strHostIFmsg.u16MsgId = HOST_IF_MSG_RCVD_NTWRK_INFO;
        strHostIFmsg.drvHandler = pstrWFIDrv;
@@ -6866,9 +6799,8 @@ void NetworkInfoReceived(u8 *pu8Buffer, u32 u32Length)
 
        /* send the message */
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                PRINT_ER("Error in sending network info message queue message parameters: Error(%d)\n", s32Error);
-       }
 
 
        return;
@@ -6897,7 +6829,7 @@ void GnrlAsyncInfoReceived(u8 *pu8Buffer, u32 u32Length)
 
        drvHandler = ((pu8Buffer[u32Length - 4]) | (pu8Buffer[u32Length - 3] << 8) | (pu8Buffer[u32Length - 2] << 16) | (pu8Buffer[u32Length - 1] << 24));
        pstrWFIDrv = (tstrWILC_WFIDrv *)drvHandler;
-       PRINT_D(HOSTINF_DBG, "General asynchronous info packet received \n");
+       PRINT_D(HOSTINF_DBG, "General asynchronous info packet received\n");
 
 
        if (pstrWFIDrv == NULL || pstrWFIDrv == terminated_handle) {
@@ -6916,7 +6848,7 @@ void GnrlAsyncInfoReceived(u8 *pu8Buffer, u32 u32Length)
        }
 
        /* prepare the General Asynchronous Info message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
 
        strHostIFmsg.u16MsgId = HOST_IF_MSG_RCVD_GNRL_ASYNC_INFO;
@@ -6930,9 +6862,8 @@ void GnrlAsyncInfoReceived(u8 *pu8Buffer, u32 u32Length)
 
        /* send the message */
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                PRINT_ER("Error in sending message queue asynchronous message info: Error(%d)\n", s32Error);
-       }
 
        /*BugID_5348*/
        up(&hSemHostIntDeinit);
@@ -6954,20 +6885,20 @@ void host_int_ScanCompleteReceived(u8 *pu8Buffer, u32 u32Length)
        tstrHostIFmsg strHostIFmsg;
        u32 drvHandler;
        tstrWILC_WFIDrv *pstrWFIDrv = NULL;
+
        drvHandler = ((pu8Buffer[u32Length - 4]) | (pu8Buffer[u32Length - 3] << 8) | (pu8Buffer[u32Length - 2] << 16) | (pu8Buffer[u32Length - 1] << 24));
        pstrWFIDrv = (tstrWILC_WFIDrv *)drvHandler;
 
 
        PRINT_D(GENERIC_DBG, "Scan notification received %p\n", pstrWFIDrv);
 
-       if (pstrWFIDrv == NULL || pstrWFIDrv == terminated_handle) {
+       if (pstrWFIDrv == NULL || pstrWFIDrv == terminated_handle)
                return;
-       }
 
        /*if there is an ongoing scan request*/
        if (pstrWFIDrv->strWILC_UsrScanReq.pfUserScanResult) {
                /* prepare theScan Done message */
-               WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+               memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
                strHostIFmsg.u16MsgId = HOST_IF_MSG_RCVD_SCAN_COMPLETE;
                strHostIFmsg.drvHandler = pstrWFIDrv;
@@ -6983,9 +6914,8 @@ void host_int_ScanCompleteReceived(u8 *pu8Buffer, u32 u32Length)
 
                /* send the message */
                s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-               if (s32Error) {
+               if (s32Error)
                        PRINT_ER("Error in sending message queue scan complete parameters: Error(%d)\n", s32Error);
-               }
        }
 
 
@@ -7014,12 +6944,11 @@ s32 host_int_remain_on_channel(WILC_WFIDrvHandle hWFIDrv, u32 u32SessionID, u32
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)hWFIDrv;
        tstrHostIFmsg strHostIFmsg;
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
        /* prepare the remainonchan Message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        /* prepare the WiphyParams Message */
        strHostIFmsg.u16MsgId = HOST_IF_MSG_REMAIN_ON_CHAN;
@@ -7032,9 +6961,8 @@ s32 host_int_remain_on_channel(WILC_WFIDrvHandle hWFIDrv, u32 u32SessionID, u32
        strHostIFmsg.drvHandler = hWFIDrv;
 
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
        WILC_CATCH(s32Error)
        {
 
@@ -7063,23 +6991,21 @@ s32 host_int_ListenStateExpired(WILC_WFIDrvHandle hWFIDrv, u32 u32SessionID)
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)hWFIDrv;
        tstrHostIFmsg strHostIFmsg;
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
        /*Stopping remain-on-channel timer*/
        WILC_TimerStop(&(pstrWFIDrv->hRemainOnChannel), NULL);
 
        /* prepare the timer fire Message */
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
        strHostIFmsg.u16MsgId = HOST_IF_MSG_LISTEN_TIMER_FIRED;
        strHostIFmsg.drvHandler = hWFIDrv;
        strHostIFmsg.uniHostIFmsgBody.strHostIfRemainOnChan.u32ListenSessionID = u32SessionID;
 
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
        WILC_CATCH(s32Error)
        {
 
@@ -7101,11 +7027,10 @@ s32 host_int_frame_register(WILC_WFIDrvHandle hWFIDrv, u16 u16FrameType, bool bR
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)hWFIDrv;
        tstrHostIFmsg strHostIFmsg;
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        /* prepare the WiphyParams Message */
        strHostIFmsg.u16MsgId = HOST_IF_MSG_REGISTER_FRAME;
@@ -7129,9 +7054,8 @@ s32 host_int_frame_register(WILC_WFIDrvHandle hWFIDrv, u16 u16FrameType, bool bR
        strHostIFmsg.drvHandler = hWFIDrv;
 
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
        WILC_CATCH(s32Error)
        {
 
@@ -7165,11 +7089,10 @@ s32 host_int_add_beacon(WILC_WFIDrvHandle hWFIDrv, u32 u32Interval,
        tstrHostIFmsg strHostIFmsg;
        tstrHostIFSetBeacon *pstrSetBeaconParam = &strHostIFmsg.uniHostIFmsgBody.strHostIFSetBeacon;
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        PRINT_D(HOSTINF_DBG, "Setting adding beacon message queue params\n");
 
@@ -7181,37 +7104,32 @@ s32 host_int_add_beacon(WILC_WFIDrvHandle hWFIDrv, u32 u32Interval,
        pstrSetBeaconParam->u32DTIMPeriod = u32DTIMPeriod;
        pstrSetBeaconParam->u32HeadLen = u32HeadLen;
        pstrSetBeaconParam->pu8Head = (u8 *)WILC_MALLOC(u32HeadLen);
-       if (pstrSetBeaconParam->pu8Head == NULL) {
+       if (pstrSetBeaconParam->pu8Head == NULL)
                WILC_ERRORREPORT(s32Error, WILC_NO_MEM);
-       }
        WILC_memcpy(pstrSetBeaconParam->pu8Head, pu8Head, u32HeadLen);
        pstrSetBeaconParam->u32TailLen = u32TailLen;
 
        /* Bug 4599 : if tail length = 0 skip allocating & copying */
        if (u32TailLen > 0) {
                pstrSetBeaconParam->pu8Tail = (u8 *)WILC_MALLOC(u32TailLen);
-               if (pstrSetBeaconParam->pu8Tail == NULL) {
+               if (pstrSetBeaconParam->pu8Tail == NULL)
                        WILC_ERRORREPORT(s32Error, WILC_NO_MEM);
-               }
                WILC_memcpy(pstrSetBeaconParam->pu8Tail, pu8Tail, u32TailLen);
        } else {
                pstrSetBeaconParam->pu8Tail = NULL;
        }
 
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
 
        WILC_CATCH(s32Error)
        {
-               if (pstrSetBeaconParam->pu8Head != NULL) {
+               if (pstrSetBeaconParam->pu8Head != NULL)
                        WILC_FREE(pstrSetBeaconParam->pu8Head);
-               }
 
-               if (pstrSetBeaconParam->pu8Tail != NULL) {
+               if (pstrSetBeaconParam->pu8Tail != NULL)
                        WILC_FREE(pstrSetBeaconParam->pu8Tail);
-               }
        }
 
        return s32Error;
@@ -7234,9 +7152,8 @@ s32 host_int_del_beacon(WILC_WFIDrvHandle hWFIDrv)
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)hWFIDrv;
        tstrHostIFmsg strHostIFmsg;
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
        /* prepare the WiphyParams Message */
        strHostIFmsg.u16MsgId = HOST_IF_MSG_DEL_BEACON;
@@ -7270,11 +7187,10 @@ s32 host_int_add_station(WILC_WFIDrvHandle hWFIDrv, tstrWILC_AddStaParam *pstrSt
        tstrWILC_AddStaParam *pstrAddStationMsg = &strHostIFmsg.uniHostIFmsgBody.strAddStaParam;
 
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        PRINT_D(HOSTINF_DBG, "Setting adding station message queue params\n");
 
@@ -7286,6 +7202,7 @@ s32 host_int_add_station(WILC_WFIDrvHandle hWFIDrv, tstrWILC_AddStaParam *pstrSt
        WILC_memcpy(pstrAddStationMsg, pstrStaParams, sizeof(tstrWILC_AddStaParam));
        if (pstrAddStationMsg->u8NumRates > 0) {
                u8 *rates = WILC_MALLOC(pstrAddStationMsg->u8NumRates);
+
                WILC_NULLCHECK(s32Error, rates);
 
                WILC_memcpy(rates, pstrStaParams->pu8Rates, pstrAddStationMsg->u8NumRates);
@@ -7294,9 +7211,8 @@ s32 host_int_add_station(WILC_WFIDrvHandle hWFIDrv, tstrWILC_AddStaParam *pstrSt
 
 
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
 
        WILC_CATCH(s32Error)
        {
@@ -7320,11 +7236,10 @@ s32 host_int_del_station(WILC_WFIDrvHandle hWFIDrv, const u8 *pu8MacAddr)
        tstrHostIFmsg strHostIFmsg;
        tstrHostIFDelSta *pstrDelStationMsg = &strHostIFmsg.uniHostIFmsgBody.strDelStaParam;
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        PRINT_D(HOSTINF_DBG, "Setting deleting station message queue params\n");
 
@@ -7336,14 +7251,13 @@ s32 host_int_del_station(WILC_WFIDrvHandle hWFIDrv, const u8 *pu8MacAddr)
 
        /*BugID_4795: Handling situation of deleting all stations*/
        if (pu8MacAddr == NULL)
-               WILC_memset(pstrDelStationMsg->au8MacAddr, 255, ETH_ALEN);
+               memset(pstrDelStationMsg->au8MacAddr, 255, ETH_ALEN);
        else
                WILC_memcpy(pstrDelStationMsg->au8MacAddr, pu8MacAddr, ETH_ALEN);
 
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
 
        WILC_CATCH(s32Error)
        {
@@ -7370,11 +7284,10 @@ s32 host_int_del_allstation(WILC_WFIDrvHandle hWFIDrv, u8 pu8MacAddr[][ETH_ALEN]
        u8 u8AssocNumb = 0;
 
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        PRINT_D(HOSTINF_DBG, "Setting deauthenticating station message queue params\n");
 
@@ -7400,10 +7313,9 @@ s32 host_int_del_allstation(WILC_WFIDrvHandle hWFIDrv, u8 pu8MacAddr[][ETH_ALEN]
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
 
 
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
 
-       }
        WILC_CATCH(s32Error)
        {
 
@@ -7430,13 +7342,12 @@ s32 host_int_edit_station(WILC_WFIDrvHandle hWFIDrv, tstrWILC_AddStaParam *pstrS
        tstrHostIFmsg strHostIFmsg;
        tstrWILC_AddStaParam *pstrAddStationMsg = &strHostIFmsg.uniHostIFmsgBody.strAddStaParam;
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
        PRINT_D(HOSTINF_DBG, "Setting editing station message queue params\n");
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
 
        /* prepare the WiphyParams Message */
@@ -7446,15 +7357,15 @@ s32 host_int_edit_station(WILC_WFIDrvHandle hWFIDrv, tstrWILC_AddStaParam *pstrS
        WILC_memcpy(pstrAddStationMsg, pstrStaParams, sizeof(tstrWILC_AddStaParam));
        if (pstrAddStationMsg->u8NumRates > 0) {
                u8 *rates = WILC_MALLOC(pstrAddStationMsg->u8NumRates);
+
                WILC_NULLCHECK(s32Error, rates);
                WILC_memcpy(rates, pstrStaParams->pu8Rates, pstrAddStationMsg->u8NumRates);
                pstrAddStationMsg->pu8Rates = rates;
        }
 
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
        WILC_CATCH(s32Error)
        {
        }
@@ -7470,15 +7381,14 @@ s32 host_int_set_power_mgmt(WILC_WFIDrvHandle hWFIDrv, bool bIsEnabled, u32 u32T
        tstrHostIFmsg strHostIFmsg;
        tstrHostIfPowerMgmtParam *pstrPowerMgmtParam = &strHostIFmsg.uniHostIFmsgBody.strPowerMgmtparam;
 
-       PRINT_INFO(HOSTINF_DBG, "\n\n>> Setting PS to %d << \n\n", bIsEnabled);
+       PRINT_INFO(HOSTINF_DBG, "\n\n>> Setting PS to %d <<\n\n", bIsEnabled);
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
        PRINT_D(HOSTINF_DBG, "Setting Power management message queue params\n");
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
 
        /* prepare the WiphyParams Message */
@@ -7490,9 +7400,8 @@ s32 host_int_set_power_mgmt(WILC_WFIDrvHandle hWFIDrv, bool bIsEnabled, u32 u32T
 
 
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
        WILC_CATCH(s32Error)
        {
        }
@@ -7508,13 +7417,12 @@ s32 host_int_setup_multicast_filter(WILC_WFIDrvHandle hWFIDrv, bool bIsEnabled,
        tstrHostIFSetMulti *pstrMulticastFilterParam = &strHostIFmsg.uniHostIFmsgBody.strHostIfSetMulti;
 
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
        PRINT_D(HOSTINF_DBG, "Setting Multicast Filter params\n");
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
 
        /* prepare the WiphyParams Message */
@@ -7525,9 +7433,8 @@ s32 host_int_setup_multicast_filter(WILC_WFIDrvHandle hWFIDrv, bool bIsEnabled,
        pstrMulticastFilterParam->u32count = u32count;
 
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
        WILC_CATCH(s32Error)
        {
        }
@@ -7568,7 +7475,7 @@ static void *host_int_ParseJoinBssParam(tstrNetworkInfo *ptstrNetworkInfo)
 
        pNewJoinBssParam = WILC_MALLOC(sizeof(tstrJoinBssParam));
        if (pNewJoinBssParam != NULL) {
-               WILC_memset(pNewJoinBssParam, 0, sizeof(tstrJoinBssParam));
+               memset(pNewJoinBssParam, 0, sizeof(tstrJoinBssParam));
                pNewJoinBssParam->dtim_period = ptstrNetworkInfo->u8DtimPeriod;
                pNewJoinBssParam->beacon_period = ptstrNetworkInfo->u16BeaconPeriod;
                pNewJoinBssParam->cap_info = ptstrNetworkInfo->u16CapInfo;
@@ -7577,8 +7484,8 @@ static void *host_int_ParseJoinBssParam(tstrNetworkInfo *ptstrNetworkInfo)
                 *      PRINT_D(HOSTINF_DBG,"%c",pNewJoinBssParam->au8bssid[i]);*/
                WILC_memcpy((u8 *)pNewJoinBssParam->ssid, ptstrNetworkInfo->au8ssid, ptstrNetworkInfo->u8SsidLen + 1);
                pNewJoinBssParam->ssidLen = ptstrNetworkInfo->u8SsidLen;
-               WILC_memset(pNewJoinBssParam->rsn_pcip_policy, 0xFF, 3);
-               WILC_memset(pNewJoinBssParam->rsn_auth_policy, 0xFF, 3);
+               memset(pNewJoinBssParam->rsn_pcip_policy, 0xFF, 3);
+               memset(pNewJoinBssParam->rsn_auth_policy, 0xFF, 3);
                /*for(i=0; i<pNewJoinBssParam->ssidLen;i++)
                 *      PRINT_D(HOSTINF_DBG,"%c",pNewJoinBssParam->ssid[i]);*/
 
@@ -7633,9 +7540,8 @@ static void *host_int_ParseJoinBssParam(tstrNetworkInfo *ptstrNetworkInfo)
                                pNewJoinBssParam->wmm_cap = true;
 
                                /* Check if Bit 7 is set indicating U-APSD capability */
-                               if (pu8IEs[index + 8] & (1 << 7)) {
+                               if (pu8IEs[index + 8] & (1 << 7))
                                        pNewJoinBssParam->uapsd_cap = true;
-                               }
                                index += pu8IEs[index + 1] + 2;
                                continue;
                        }
@@ -7645,6 +7551,7 @@ static void *host_int_ParseJoinBssParam(tstrNetworkInfo *ptstrNetworkInfo)
                                 (pu8IEs[index + 4] == 0x9a) && /* OUI */
                                 (pu8IEs[index + 5] == 0x09) && (pu8IEs[index + 6] == 0x0c)) { /* OUI Type     */
                                u16 u16P2P_count;
+
                                pNewJoinBssParam->tsf = ptstrNetworkInfo->u32Tsf;
                                pNewJoinBssParam->u8NoaEnbaled = 1;
                                pNewJoinBssParam->u8Index = pu8IEs[index + 9];
@@ -7656,9 +7563,9 @@ static void *host_int_ParseJoinBssParam(tstrNetworkInfo *ptstrNetworkInfo)
                                } else
                                        pNewJoinBssParam->u8OppEnable = 0;
                                /* HOSTINF_DBG */
-                               PRINT_D(GENERIC_DBG, "P2P Dump \n");
+                               PRINT_D(GENERIC_DBG, "P2P Dump\n");
                                for (i = 0; i < pu8IEs[index + 7]; i++)
-                                       PRINT_D(GENERIC_DBG, " %x \n", pu8IEs[index + 9 + i]);
+                                       PRINT_D(GENERIC_DBG, " %x\n", pu8IEs[index + 9 + i]);
 
                                pNewJoinBssParam->u8Count = pu8IEs[index + 11];
                                u16P2P_count = index + 12;
@@ -7698,7 +7605,7 @@ static void *host_int_ParseJoinBssParam(tstrNetworkInfo *ptstrNetworkInfo)
                                rsnIndex += 7; /* skipping id, length, version(2B) and first 3 bytes of gcipher */
                                pNewJoinBssParam->rsn_grp_policy = pu8IEs[rsnIndex];
                                rsnIndex++;
-                               /* PRINT_D(HOSTINF_DBG,"Group Policy: %0x \n",pNewJoinBssParam->rsn_grp_policy); */
+                               /* PRINT_D(HOSTINF_DBG,"Group Policy: %0x\n",pNewJoinBssParam->rsn_grp_policy); */
                                /* initialize policies with invalid values */
 
                                jumpOffset = pu8IEs[rsnIndex] * 4; /* total no.of bytes of pcipher field (count*4) */
@@ -7709,7 +7616,7 @@ static void *host_int_ParseJoinBssParam(tstrNetworkInfo *ptstrNetworkInfo)
                                pcipherCount = (pu8IEs[rsnIndex] > 3) ? 3 : pu8IEs[rsnIndex];
                                rsnIndex += 2; /* jump 2 bytes of pcipher count */
 
-                               /* PRINT_D(HOSTINF_DBG,"\npcipher:%d \n",pcipherCount); */
+                               /* PRINT_D(HOSTINF_DBG,"\npcipher:%d\n",pcipherCount); */
                                for (i = pcipherTotalCount, j = 0; i < pcipherCount + pcipherTotalCount && i < 3; i++, j++) {
                                        /* each count corresponds to 4 bytes, only last byte is saved */
                                        pNewJoinBssParam->rsn_pcip_policy[i] = pu8IEs[rsnIndex + ((j + 1) * 4) - 1];
@@ -7779,11 +7686,10 @@ static int host_int_addBASession(WILC_WFIDrvHandle hWFIDrv, char *pBSSID, char T
        tstrHostIFmsg strHostIFmsg;
        tstrHostIfBASessionInfo *pBASessionInfo = &strHostIFmsg.uniHostIFmsgBody.strHostIfBASessionInfo;
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        /* prepare the WiphyParams Message */
        strHostIFmsg.u16MsgId = HOST_IF_MSG_ADD_BA_SESSION;
@@ -7795,9 +7701,8 @@ static int host_int_addBASession(WILC_WFIDrvHandle hWFIDrv, char *pBSSID, char T
        strHostIFmsg.drvHandler = hWFIDrv;
 
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
        WILC_CATCH(s32Error)
        {
 
@@ -7814,11 +7719,10 @@ s32 host_int_delBASession(WILC_WFIDrvHandle hWFIDrv, char *pBSSID, char TID)
        tstrHostIFmsg strHostIFmsg;
        tstrHostIfBASessionInfo *pBASessionInfo = &strHostIFmsg.uniHostIFmsgBody.strHostIfBASessionInfo;
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        /* prepare the WiphyParams Message */
        strHostIFmsg.u16MsgId = HOST_IF_MSG_DEL_BA_SESSION;
@@ -7828,9 +7732,8 @@ s32 host_int_delBASession(WILC_WFIDrvHandle hWFIDrv, char *pBSSID, char TID)
        strHostIFmsg.drvHandler = hWFIDrv;
 
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
        WILC_CATCH(s32Error)
        {
 
@@ -7849,11 +7752,10 @@ s32 host_int_del_All_Rx_BASession(WILC_WFIDrvHandle hWFIDrv, char *pBSSID, char
        tstrHostIFmsg strHostIFmsg;
        tstrHostIfBASessionInfo *pBASessionInfo = &strHostIFmsg.uniHostIFmsgBody.strHostIfBASessionInfo;
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        /* prepare the WiphyParams Message */
        strHostIFmsg.u16MsgId = HOST_IF_MSG_DEL_ALL_RX_BA_SESSIONS;
@@ -7863,9 +7765,8 @@ s32 host_int_del_All_Rx_BASession(WILC_WFIDrvHandle hWFIDrv, char *pBSSID, char
        strHostIFmsg.drvHandler = hWFIDrv;
 
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
        WILC_CATCH(s32Error)
        {
 
@@ -7894,11 +7795,10 @@ s32 host_int_setup_ipaddress(WILC_WFIDrvHandle hWFIDrv, u8 *u16ipadd, u8 idx)
        /* TODO: Enable This feature on softap firmware */
        return 0;
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        /* prepare the WiphyParams Message */
        strHostIFmsg.u16MsgId = HOST_IF_MSG_SET_IPADDRESS;
@@ -7908,9 +7808,8 @@ s32 host_int_setup_ipaddress(WILC_WFIDrvHandle hWFIDrv, u8 *u16ipadd, u8 idx)
        strHostIFmsg.uniHostIFmsgBody.strHostIfSetIP.idx = idx;
 
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
        WILC_CATCH(s32Error)
        {
 
@@ -7935,23 +7834,21 @@ s32 host_int_get_ipaddress(WILC_WFIDrvHandle hWFIDrv, u8 *u16ipadd, u8 idx)
        tstrWILC_WFIDrv *pstrWFIDrv = (tstrWILC_WFIDrv *)hWFIDrv;
        tstrHostIFmsg strHostIFmsg;
 
-       if (pstrWFIDrv == NULL) {
+       if (pstrWFIDrv == NULL)
                WILC_ERRORREPORT(s32Error, WILC_INVALID_ARGUMENT);
-       }
 
-       WILC_memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
+       memset(&strHostIFmsg, 0, sizeof(tstrHostIFmsg));
 
        /* prepare the WiphyParams Message */
        strHostIFmsg.u16MsgId = HOST_IF_MSG_GET_IPADDRESS;
 
        strHostIFmsg.uniHostIFmsgBody.strHostIfSetIP.au8IPAddr = u16ipadd;
-       strHostIFmsg.drvHandler=hWFIDrv;
-       strHostIFmsg.uniHostIFmsgBody.strHostIfSetIP.idx= idx;
+       strHostIFmsg.drvHandler = hWFIDrv;
+       strHostIFmsg.uniHostIFmsgBody.strHostIfSetIP.idx = idx;
 
        s32Error = WILC_MsgQueueSend(&gMsgQHostIF, &strHostIFmsg, sizeof(tstrHostIFmsg), NULL);
-       if (s32Error) {
+       if (s32Error)
                WILC_ERRORREPORT(s32Error, s32Error);
-       }
        WILC_CATCH(s32Error)
        {
 
index 38db740745cd2e9bb7445926cbbe63e22eba66f2..cdfb43a2b144f008370176daec55706d0214fd09 100644 (file)
@@ -11,7 +11,6 @@
 #define HOST_INT_H
 
 #include "coreconfigurator.h"
-#include "coreconfigsimulator.h"
 /*****************************************************************************/
 /*                                                             Macros                                       */
 /*****************************************************************************/
index f5296f53a3d24186e235db3972b6eac75c3a6cdc..123468a9582fc0019ed7ab1ed77c6f104100f68f 100644 (file)
@@ -6,20 +6,15 @@
  *  @date      01 MAR 2012
  *  @version   1.0
  */
-
-#ifndef SIMULATION
 #include "wilc_wfi_cfgoperations.h"
 #include "linux_wlan_common.h"
 #include "wilc_wlan_if.h"
 #include "wilc_wlan.h"
-#endif
+
 #ifdef WILC_FULLY_HOSTING_AP
 #include "wilc_host_ap.h"
 #endif
 #ifdef WILC_AP_EXTERNAL_MLME
-#ifdef SIMULATION
-#include "wilc_wfi_cfgoperations.h"
-#endif
 
 struct wilc_wfi_radiotap_hdr {
        struct ieee80211_radiotap_header hdr;
@@ -39,9 +34,7 @@ extern linux_wlan_t *g_linux_wlan;
 
 static struct net_device *wilc_wfi_mon; /* global monitor netdev */
 
-#ifdef SIMULATION
-extern int WILC_WFI_Tx(struct sk_buff *skb, struct net_device *dev);
-#elif USE_WIRELESS
+#if USE_WIRELESS
 extern int  mac_xmit(struct sk_buff *skb, struct net_device *dev);
 #endif
 
@@ -237,14 +230,12 @@ static void mgmt_tx_complete(void *priv, int status)
 }
 static int mon_mgmt_tx(struct net_device *dev, const u8 *buf, size_t len)
 {
-       linux_wlan_t *nic;
        struct tx_complete_mon_data *mgmt_tx = NULL;
 
        if (dev == NULL) {
                PRINT_D(HOSTAPD_DBG, "ERROR: dev == NULL\n");
                return WILC_FAIL;
        }
-       nic = netdev_priv(dev);
 
        netif_stop_queue(dev);
        mgmt_tx = kmalloc(sizeof(struct tx_complete_mon_data), GFP_ATOMIC);
@@ -298,7 +289,6 @@ static int mon_mgmt_tx(struct net_device *dev, const u8 *buf, size_t len)
 static netdev_tx_t WILC_WFI_mon_xmit(struct sk_buff *skb,
                                     struct net_device *dev)
 {
-       struct ieee80211_radiotap_header *rtap_hdr;
        u32 rtap_len, i, ret = 0;
        struct WILC_WFI_mon_priv  *mon_priv;
 
@@ -318,7 +308,6 @@ static netdev_tx_t WILC_WFI_mon_xmit(struct sk_buff *skb,
                return WILC_FAIL;
        }
 
-       rtap_hdr = (struct ieee80211_radiotap_header *)skb->data;
 
        rtap_len = ieee80211_get_radiotap_len(skb->data);
        if (skb->len < rtap_len) {
@@ -378,9 +367,7 @@ static netdev_tx_t WILC_WFI_mon_xmit(struct sk_buff *skb,
        PRINT_INFO(HOSTAPD_DBG, "SKB netdevice name = %s\n", skb->dev->name);
        PRINT_INFO(HOSTAPD_DBG, "MONITOR real dev name = %s\n", mon_priv->real_ndev->name);
 
-       #ifdef SIMULATION
-       ret = WILC_WFI_Tx(skb, mon_priv->real_ndev);
-       #elif USE_WIRELESS
+       #if USE_WIRELESS
        /* Identify if Ethernet or MAC header (data or mgmt) */
        memcpy(srcAdd, &skb->data[10], 6);
        memcpy(bssid, &skb->data[16], 6);
@@ -495,7 +482,7 @@ static void WILC_WFI_mon_setup(struct net_device *dev)
        ether_setup(dev);
        dev->tx_queue_len = 0;
        dev->type = ARPHRD_IEEE80211_RADIOTAP;
-       memset(dev->dev_addr, 0, ETH_ALEN);
+       eth_zero_addr(dev->dev_addr);
 
        #ifdef USE_WIRELESS
        {
@@ -571,7 +558,7 @@ struct net_device *WILC_WFI_init_mon_interface(const char *name, struct net_devi
  *  @date      12 JUL 2012
  *  @version   1.0
  */
-int WILC_WFI_deinit_mon_interface()
+int WILC_WFI_deinit_mon_interface(void)
 {
        bool rollback_lock = false;
 
index b352c504a77d273d23712addeaca6ae79013451a..1384846a5d01740e607ad1f6d205eae09453335f 100644 (file)
@@ -1,4 +1,3 @@
-#ifndef SIMULATION
 #include "wilc_wfi_cfgoperations.h"
 #include "linux_wlan_common.h"
 #include "wilc_wlan_if.h"
@@ -103,7 +102,6 @@ static int linux_wlan_device_detection(int on_off)
        return 0;
 }
 
-
 #ifdef DISABLE_PWRSAVE_AND_SCAN_DURING_IP
 static int dev_state_ev_handler(struct notifier_block *this, unsigned long event, void *ptr);
 
@@ -116,7 +114,6 @@ static struct notifier_block g_dev_notifier = {
                if (g_linux_wlan->oup.wlan_cleanup != NULL) \
                        g_linux_wlan->oup.wlan_cleanup(); }
 
-
 #ifndef STA_FIRMWARE
 #define STA_FIRMWARE   "wifi_firmware.bin"
 #endif
@@ -129,15 +126,12 @@ static struct notifier_block g_dev_notifier = {
 #define P2P_CONCURRENCY_FIRMWARE       "wifi_firmware_p2p_concurrency.bin"
 #endif
 
-
-
 typedef struct android_wifi_priv_cmd {
        char *buf;
        int used_len;
        int total_len;
 } android_wifi_priv_cmd;
 
-
 #define IRQ_WAIT       1
 #define IRQ_NO_WAIT    0
 /*
@@ -158,7 +152,6 @@ void linux_wlan_unlock(void *vp);
 extern void WILC_WFI_monitor_rx(uint8_t *buff, uint32_t size);
 extern void WILC_WFI_p2p_rx(struct net_device *dev, uint8_t *buff, uint32_t size);
 
-
 static void *internal_alloc(uint32_t size, uint32_t flag);
 static void linux_wlan_tx_complete(void *priv, int status);
 void frmw_to_linux(uint8_t *buff, uint32_t size, uint32_t pkt_offset);
@@ -170,8 +163,6 @@ static struct net_device_stats *mac_stats(struct net_device *dev);
 static int  mac_ioctl(struct net_device *ndev, struct ifreq *req, int cmd);
 static void wilc_set_multicast_list(struct net_device *dev);
 
-
-
 /*
  * for now - in frmw_to_linux there should be private data to be passed to it
  * and this data should be pointer to net device
@@ -200,22 +191,18 @@ volatile int WatchDogdebuggerCounter;
 char DebugBuffer[DEGUG_BUFFER_LENGTH + 20] = {0};
 static char *ps8current = DebugBuffer;
 
-
-
 void printk_later(const char *format, ...)
 {
        va_list args;
-       va_start (args, format);
-       ps8current += vsprintf (ps8current, format, args);
-       va_end (args);
-       if ((ps8current - DebugBuffer) > DEGUG_BUFFER_LENGTH) {
+       va_start(args, format);
+       ps8current += vsprintf(ps8current, format, args);
+       va_end(args);
+       if ((ps8current - DebugBuffer) > DEGUG_BUFFER_LENGTH)
                ps8current = DebugBuffer;
-       }
 
 }
 
-
-void dump_logs()
+void dump_logs(void)
 {
        if (DebugBuffer[0]) {
                DebugBuffer[DEGUG_BUFFER_LENGTH] = 0;
@@ -229,7 +216,7 @@ void dump_logs()
        }
 }
 
-void Reset_WatchDogdebugger()
+void Reset_WatchDogdebugger(void)
 {
        WatchDogdebuggerCounter = 0;
 }
@@ -246,11 +233,8 @@ static int DebuggingThreadTask(void *vp)
                WatchDogdebuggerCounter = 0;
        }
 }
-
-
 #endif
 
-
 #ifdef DISABLE_PWRSAVE_AND_SCAN_DURING_IP
 static int dev_state_ev_handler(struct notifier_block *this, unsigned long event, void *ptr)
 {
@@ -298,7 +282,6 @@ static int dev_state_ev_handler(struct notifier_block *this, unsigned long event
 
                PRINT_INFO(GENERIC_DBG, "\n ============== IP Address Obtained ===============\n\n");
 
-
                /*If we are in station mode or client mode*/
                if (nic->iftype == STATION_MODE || nic->iftype == CLIENT_MODE) {
                        pstrWFIDrv->IFC_UP = 1;
@@ -307,15 +290,13 @@ static int dev_state_ev_handler(struct notifier_block *this, unsigned long event
                        PRINT_D(GENERIC_DBG, "IP obtained , enable scan\n");
                }
 
-
-
                if (bEnablePS)
                        host_int_set_power_mgmt((WILC_WFIDrvHandle)pstrWFIDrv, 1, 0);
 
                PRINT_D(GENERIC_DBG, "[%s] Up IP\n", dev_iface->ifa_label);
 
                pIP_Add_buff = (char *) (&(dev_iface->ifa_address));
-               PRINT_D(GENERIC_DBG, "IP add=%d:%d:%d:%d \n", pIP_Add_buff[0], pIP_Add_buff[1], pIP_Add_buff[2], pIP_Add_buff[3]);
+               PRINT_D(GENERIC_DBG, "IP add=%d:%d:%d:%d\n", pIP_Add_buff[0], pIP_Add_buff[1], pIP_Add_buff[2], pIP_Add_buff[3]);
                host_int_setup_ipaddress((WILC_WFIDrvHandle)pstrWFIDrv, pIP_Add_buff, nic->u8IfIdx);
 
                break;
@@ -334,11 +315,10 @@ static int dev_state_ev_handler(struct notifier_block *this, unsigned long event
 
                resolve_disconnect_aberration(pstrWFIDrv);
 
-
                PRINT_D(GENERIC_DBG, "[%s] Down IP\n", dev_iface->ifa_label);
 
                pIP_Add_buff = null_ip;
-               PRINT_D(GENERIC_DBG, "IP add=%d:%d:%d:%d \n", pIP_Add_buff[0], pIP_Add_buff[1], pIP_Add_buff[2], pIP_Add_buff[3]);
+               PRINT_D(GENERIC_DBG, "IP add=%d:%d:%d:%d\n", pIP_Add_buff[0], pIP_Add_buff[1], pIP_Add_buff[2], pIP_Add_buff[3]);
 
                host_int_setup_ipaddress((WILC_WFIDrvHandle)pstrWFIDrv, pIP_Add_buff, nic->u8IfIdx);
 
@@ -387,8 +367,6 @@ void linux_wlan_disable_irq(int wait)
 #if (defined WILC_SPI) || (defined WILC_SDIO_IRQ_GPIO)
 static irqreturn_t isr_uh_routine(int irq, void *user_data)
 {
-
-
        int_rcvdU++;
 #if (RX_BH_TYPE != RX_BH_THREADED_IRQ)
        linux_wlan_disable_irq(IRQ_NO_WAIT);
@@ -440,19 +418,14 @@ static void isr_bh_routine(struct work_struct *work)
        #else
                return;
        #endif
-
-
-
        }
 
        int_rcvdB++;
        PRINT_D(INT_DBG, "Interrupt received BH\n");
-       if (g_linux_wlan->oup.wlan_handle_rx_isr != 0) {
+       if (g_linux_wlan->oup.wlan_handle_rx_isr != 0)
                g_linux_wlan->oup.wlan_handle_rx_isr();
-       } else {
+       else
                PRINT_ER("wlan_handle_rx_isr() hasn't been initialized\n");
-       }
-
 
 #if (RX_BH_TYPE == RX_BH_THREADED_IRQ)
        return IRQ_HANDLED;
@@ -476,18 +449,16 @@ static int isr_bh_routine(void *vp)
                }
                int_rcvdB++;
                PRINT_D(INT_DBG, "Interrupt received BH\n");
-               if (g_linux_wlan->oup.wlan_handle_rx_isr != 0) {
+               if (g_linux_wlan->oup.wlan_handle_rx_isr != 0)
                        g_linux_wlan->oup.wlan_handle_rx_isr();
-               } else {
+               else
                        PRINT_ER("wlan_handle_rx_isr() hasn't been initialized\n");
-               }
        }
 
        return 0;
 }
 #endif
 
-
 #if (defined WILC_SPI) || (defined WILC_SDIO_IRQ_GPIO)
 static int init_irq(linux_wlan_t *p_nic)
 {
@@ -504,9 +475,9 @@ static int init_irq(linux_wlan_t *p_nic)
  *
  * ex) nic->dev_irq_num = gpio_to_irq(GPIO_NUM);
  */
-#elif defined (NM73131_0_BOARD)
+#elif defined(NM73131_0_BOARD)
                nic->dev_irq_num = IRQ_WILC1000;
-#elif defined (PANDA_BOARD)
+#elif defined(PANDA_BOARD)
                gpio_export(GPIO_NUM, 1);
                nic->dev_irq_num = OMAP_GPIO_IRQ(GPIO_NUM);
                irq_set_irq_type(nic->dev_irq_num, IRQ_TYPE_LEVEL_LOW);
@@ -518,7 +489,6 @@ static int init_irq(linux_wlan_t *p_nic)
                PRINT_ER("could not obtain gpio for WILC_INTR\n");
        }
 
-
 #if (RX_BH_TYPE == RX_BH_THREADED_IRQ)
        if ((ret != -1) && (request_threaded_irq(nic->dev_irq_num, isr_uh_routine, isr_bh_routine,
                                                  IRQF_TRIGGER_LOW | IRQF_ONESHOT,               /*Without IRQF_ONESHOT the uh will remain kicked in and dont gave a chance to bh*/
@@ -554,7 +524,6 @@ static void deinit_irq(linux_wlan_t *nic)
 #endif
 }
 
-
 /*
  *      OS functions
  */
@@ -601,7 +570,6 @@ void linux_wlan_free(void *vp)
        }
 }
 
-
 static void *internal_alloc(uint32_t size, uint32_t flag)
 {
        char *pntr = NULL;
@@ -610,7 +578,6 @@ static void *internal_alloc(uint32_t size, uint32_t flag)
        return (void *)pntr;
 }
 
-
 static void linux_wlan_init_lock(char *lockName, void *plock, int count)
 {
        sema_init((struct semaphore *)plock, count);
@@ -638,25 +605,22 @@ static int linux_wlan_lock_timeout(void *vp, u32 timeout)
 {
        int error = -1;
        PRINT_D(LOCK_DBG, "Locking %p\n", vp);
-       if (vp != NULL) {
+       if (vp != NULL)
                error = down_timeout((struct semaphore *)vp, msecs_to_jiffies(timeout));
-       } else {
+       else
                PRINT_ER("Failed, mutex is NULL\n");
-       }
        return error;
 }
 
 void linux_wlan_unlock(void *vp)
 {
        PRINT_D(LOCK_DBG, "Unlocking %p\n", vp);
-       if (vp != NULL) {
+       if (vp != NULL)
                up((struct semaphore *)vp);
-       } else {
+       else
                PRINT_ER("Failed, mutex is NULL\n");
-       }
 }
 
-
 static void linux_wlan_init_mutex(char *lockName, void *plock, int count)
 {
        mutex_init((struct mutex *)plock);
@@ -702,7 +666,6 @@ static void linux_wlan_unlock_mutex(void *vp)
        }
 }
 
-
 /*Added by Amr - BugID_4720*/
 static void linux_wlan_init_spin_lock(char *lockName, void *plock, int count)
 {
@@ -780,9 +743,8 @@ struct net_device *GetIfHandler(uint8_t *pMacHeader)
                }
        }
        PRINT_INFO(INIT_DBG, "Invalide handle\n");
-       for (i = 0; i < 25; i++) {
+       for (i = 0; i < 25; i++)
                PRINT_D(INIT_DBG, "%02x ", pMacHeader[i]);
-       }
        Bssid  = pMacHeader + 18;
        Bssid1 = pMacHeader + 12;
        for (i = 0; i < g_linux_wlan->u8NoIfcs; i++) {
@@ -822,9 +784,8 @@ int linux_wlan_get_num_conn_ifcs(void)
        uint8_t ret_val = 0;
 
        for (i = 0; i < g_linux_wlan->u8NoIfcs; i++) {
-               if (memcmp(g_linux_wlan->strInterfaceInfo[i].aBSSID, null_bssid, 6)) {
+               if (memcmp(g_linux_wlan->strInterfaceInfo[i].aBSSID, null_bssid, 6))
                        ret_val++;
-               }
        }
        return ret_val;
 }
@@ -868,7 +829,6 @@ static int linux_wlan_txq_task(void *vp)
 #define TX_BACKOFF_WEIGHT_MIN (0)
 #define TX_BACKOFF_WEIGHT_UNIT_MS (10)
        int backoff_weight = TX_BACKOFF_WEIGHT_MIN;
-       signed long timeout;
 #endif
 
        /* inform wilc1000_wlan_init that TXQ task is started. */
@@ -906,7 +866,6 @@ static int linux_wlan_txq_task(void *vp)
                        }
 
                        if (ret == WILC_TX_ERR_NO_BUF) { /* failed to allocate buffers in chip. */
-                               timeout = msecs_to_jiffies(TX_BACKOFF_WEIGHT_UNIT_MS << backoff_weight);
                                do {
                                        /* Back off from sending packets for some time. */
                                        /* schedule_timeout will allow RX task to run and free buffers.*/
@@ -915,15 +874,13 @@ static int linux_wlan_txq_task(void *vp)
                                        msleep(TX_BACKOFF_WEIGHT_UNIT_MS << backoff_weight);
                                } while (/*timeout*/ 0);
                                backoff_weight += TX_BACKOFF_WEIGHT_INCR_STEP;
-                               if (backoff_weight > TX_BACKOFF_WEIGHT_MAX) {
+                               if (backoff_weight > TX_BACKOFF_WEIGHT_MAX)
                                        backoff_weight = TX_BACKOFF_WEIGHT_MAX;
-                               }
                        } else {
                                if (backoff_weight > TX_BACKOFF_WEIGHT_MIN) {
                                        backoff_weight -= TX_BACKOFF_WEIGHT_DECR_STEP;
-                                       if (backoff_weight < TX_BACKOFF_WEIGHT_MIN) {
+                                       if (backoff_weight < TX_BACKOFF_WEIGHT_MIN)
                                                backoff_weight = TX_BACKOFF_WEIGHT_MIN;
-                                       }
                                }
                        }
                        /*TODO: drop packets after a certain time/number of retry count. */
@@ -946,7 +903,6 @@ int linux_wlan_get_firmware(perInterface_wlan_t *p_nic)
        const struct firmware *wilc_firmware;
        char *firmware;
 
-
        if (nic->iftype == AP_MODE)
                firmware = AP_FIRMWARE;
        else if (nic->iftype == STATION_MODE)
@@ -958,8 +914,6 @@ int linux_wlan_get_firmware(perInterface_wlan_t *p_nic)
                firmware = P2P_CONCURRENCY_FIRMWARE;
        }
 
-
-
        if (nic == NULL) {
                PRINT_ER("NIC is NULL\n");
                goto _fail_;
@@ -970,7 +924,6 @@ int linux_wlan_get_firmware(perInterface_wlan_t *p_nic)
                goto _fail_;
        }
 
-
        /*      the firmare should be located in /lib/firmware in
         *      root file system with the name specified above */
 
@@ -1054,9 +1007,8 @@ static int linux_wlan_firmware_download(linux_wlan_t *p_nic)
         **/
        PRINT_D(INIT_DBG, "Downloading Firmware ...\n");
        ret = g_linux_wlan->oup.wlan_firmware_download(g_linux_wlan->wilc_firmware->data, g_linux_wlan->wilc_firmware->size);
-       if (ret < 0) {
+       if (ret < 0)
                goto _FAIL_;
-       }
 
        /* Freeing FW buffer */
        PRINT_D(INIT_DBG, "Freeing FW buffer ...\n");
@@ -1064,13 +1016,12 @@ static int linux_wlan_firmware_download(linux_wlan_t *p_nic)
        release_firmware(g_linux_wlan->wilc_firmware);
        g_linux_wlan->wilc_firmware = NULL;
 
-       PRINT_D(INIT_DBG, "Download Succeeded \n");
+       PRINT_D(INIT_DBG, "Download Succeeded\n");
 
 _FAIL_:
        return ret;
 }
 
-
 /* startup configuration - could be changed later using iconfig*/
 static int linux_wlan_init_test_config(struct net_device *dev, linux_wlan_t *p_nic)
 {
@@ -1096,7 +1047,6 @@ static int linux_wlan_init_test_config(struct net_device *dev, linux_wlan_t *p_n
        PRINT_D(INIT_DBG, "MAC address is : %02x-%02x-%02x-%02x-%02x-%02x\n", mac_add[0], mac_add[1], mac_add[2], mac_add[3], mac_add[4], mac_add[5]);
        wilc_get_chipid(0);
 
-
        if (g_linux_wlan->oup.wlan_cfg_set == NULL) {
                PRINT_D(INIT_DBG, "Null p[ointer\n");
                goto _fail_;
@@ -1116,7 +1066,6 @@ static int linux_wlan_init_test_config(struct net_device *dev, linux_wlan_t *p_n
        if (!g_linux_wlan->oup.wlan_cfg_set(0, WID_BSS_TYPE, c_val, 1, 0, 0))
                goto _fail_;
 
-
        /* c_val[0] = RATE_AUTO; / * bug 4275: Enable autorate and limit it to 24Mbps * / */
        c_val[0] = RATE_AUTO;
        if (!g_linux_wlan->oup.wlan_cfg_set(0, WID_CURRENT_TX_RATE, c_val, 1, 0, 0))
@@ -1351,7 +1300,6 @@ _fail_:
        return -1;
 }
 
-
 /**************************/
 void wilc1000_wlan_deinit(linux_wlan_t *nic)
 {
@@ -1385,16 +1333,12 @@ void wilc1000_wlan_deinit(linux_wlan_t *nic)
                  #endif
                #endif
 
-
                /* not sure if the following unlocks are needed or not*/
-               if (&g_linux_wlan->rxq_event != NULL) {
+               if (&g_linux_wlan->rxq_event != NULL)
                        linux_wlan_unlock(&g_linux_wlan->rxq_event);
-               }
 
-               if (&g_linux_wlan->txq_event != NULL) {
+               if (&g_linux_wlan->txq_event != NULL)
                        linux_wlan_unlock(&g_linux_wlan->txq_event);
-               }
-
 
        #if (RX_BH_TYPE == RX_BH_WORK_QUEUE)
                /*Removing the work struct from the linux kernel workqueue*/
@@ -1412,7 +1356,6 @@ void wilc1000_wlan_deinit(linux_wlan_t *nic)
                PRINT_D(INIT_DBG, "Deinitializing IRQ\n");
                deinit_irq(g_linux_wlan);
 
-
                if (&g_linux_wlan->oup != NULL) {
                        if (g_linux_wlan->oup.wlan_stop != NULL)
                                g_linux_wlan->oup.wlan_stop();
@@ -1536,7 +1479,7 @@ void linux_to_wlan(wilc_wlan_inp_t *nwi, linux_wlan_t *nic)
 
        nwi->os_context.txq_wait_event = (void *)&g_linux_wlan->txq_event;
 
-#if defined (MEMORY_STATIC)
+#if defined(MEMORY_STATIC)
        nwi->os_context.rx_buffer_size = LINUX_RX_SIZE;
 #endif
        nwi->os_context.rxq_critical_section = (void *)&g_linux_wlan->rxq_cs;
@@ -1673,17 +1616,14 @@ static void wlan_deinitialize_threads(linux_wlan_t *nic)
        if (&g_linux_wlan->rxq_event != NULL)
                linux_wlan_unlock(&g_linux_wlan->rxq_event);
 
-
        if (g_linux_wlan->rxq_thread != NULL) {
                kthread_stop(g_linux_wlan->rxq_thread);
                g_linux_wlan->rxq_thread = NULL;
        }
 
-
        if (&g_linux_wlan->txq_event != NULL)
                linux_wlan_unlock(&g_linux_wlan->txq_event);
 
-
        if (g_linux_wlan->txq_thread != NULL) {
                kthread_stop(g_linux_wlan->txq_thread);
                g_linux_wlan->txq_thread = NULL;
@@ -1747,14 +1687,12 @@ static int linux_wlan_read_mac_addr(void *vp)
                }
        }
 
-       if (index == array_size) {
+       if (index == array_size)
                PRINT_ER("random MAC\n");
-       }
 
 exit:
-       if (fp && !IS_ERR(fp)) {
+       if (fp && !IS_ERR(fp))
                filp_close(fp, NULL);
-       }
 
        set_fs(old_fs);
 
@@ -1786,9 +1724,8 @@ uint8_t wilc1000_prepare_11b_core(wilc_wlan_inp_t *nwi,   wilc_wlan_oup_t *nwo, li
 
                sdio_register_driver(&wilc_bus);
 
-               while (!probe) {
+               while (!probe)
                        msleep(100);
-               }
                probe = 0;
                g_linux_wlan->wilc_sdio_func = local_sdio_func;
                linux_to_wlan(nwi, nic);
@@ -1820,9 +1757,8 @@ int repeat_power_cycle(perInterface_wlan_t *nic)
        sdio_register_driver(&wilc_bus);
 
        /* msleep(1000); */
-       while (!probe) {
+       while (!probe)
                msleep(100);
-       }
        probe = 0;
        g_linux_wlan->wilc_sdio_func = local_sdio_func;
        linux_to_wlan(&nwi, g_linux_wlan);
@@ -1834,7 +1770,7 @@ int repeat_power_cycle(perInterface_wlan_t *nic)
        #endif
 
        if (linux_wlan_get_firmware(nic)) {
-               PRINT_ER("Can't get firmware \n");
+               PRINT_ER("Can't get firmware\n");
                ret = -1;
                goto __fail__;
        }
@@ -1847,9 +1783,8 @@ int repeat_power_cycle(perInterface_wlan_t *nic)
        }
        /* Start firmware*/
        ret = linux_wlan_start_firmware(nic);
-       if (ret < 0) {
+       if (ret < 0)
                PRINT_ER("Failed to start firmware\n");
-       }
 __fail__:
        return ret;
 }
@@ -1871,9 +1806,8 @@ int wilc1000_wlan_init(struct net_device *dev, perInterface_wlan_t *p_nic)
 
 #ifdef STATIC_MACADDRESS
                wilc_mac_thread = kthread_run(linux_wlan_read_mac_addr, NULL, "wilc_mac_thread");
-               if (wilc_mac_thread < 0) {
+               if (wilc_mac_thread < 0)
                        PRINT_ER("couldn't create Mac addr thread\n");
-               }
 #endif
 
                linux_to_wlan(&nwi, g_linux_wlan);
@@ -1889,7 +1823,6 @@ int wilc1000_wlan_init(struct net_device *dev, perInterface_wlan_t *p_nic)
                /*Save the oup structre into global pointer*/
                gpstrWlanOps = &g_linux_wlan->oup;
 
-
                ret = wlan_initialize_threads(nic);
                if (ret < 0) {
                        PRINT_ER("Initializing Threads FAILED\n");
@@ -1922,12 +1855,11 @@ int wilc1000_wlan_init(struct net_device *dev, perInterface_wlan_t *p_nic)
 #endif
 
                if (linux_wlan_get_firmware(nic)) {
-                       PRINT_ER("Can't get firmware \n");
+                       PRINT_ER("Can't get firmware\n");
                        ret = -EIO;
                        goto _fail_irq_enable_;
                }
 
-
                /*Download firmware*/
                ret = linux_wlan_firmware_download(g_linux_wlan);
                if (ret < 0) {
@@ -1967,7 +1899,6 @@ int wilc1000_wlan_init(struct net_device *dev, perInterface_wlan_t *p_nic)
                g_linux_wlan->wilc1000_initialized = 1;
                return 0; /*success*/
 
-
 _fail_fw_start_:
                if (&g_linux_wlan->oup != NULL) {
                        if (g_linux_wlan->oup.wlan_stop != NULL)
@@ -1996,12 +1927,11 @@ _fail_locks_:
        return ret;
 }
 
-
 /*
  *      - this function will be called automatically by OS when module inserted.
  */
 
-#if !defined (NM73131_0_BOARD)
+#if !defined(NM73131_0_BOARD)
 int mac_init_fn(struct net_device *ndev)
 {
 
@@ -2028,12 +1958,11 @@ int mac_init_fn(struct net_device *ndev)
 }
 #endif
 
-
 void    WILC_WFI_frame_register(struct wiphy *wiphy, struct net_device *dev,
                                u16 frame_type, bool reg);
 
 /* This fn is called, when this device is setup using ifconfig */
-#if !defined (NM73131_0_BOARD)
+#if !defined(NM73131_0_BOARD)
 int mac_open(struct net_device *ndev)
 {
        perInterface_wlan_t *nic;
@@ -2092,7 +2021,6 @@ int mac_open(struct net_device *ndev)
                goto _err_;
        }
 
-
        WILC_WFI_frame_register(nic->wilc_netdev->ieee80211_ptr->wiphy, nic->wilc_netdev,
                                nic->g_struct_frame_reg[0].frame_type, nic->g_struct_frame_reg[0].reg);
        WILC_WFI_frame_register(nic->wilc_netdev->ieee80211_ptr->wiphy, nic->wilc_netdev,
@@ -2131,7 +2059,6 @@ struct net_device_stats *mac_stats(struct net_device *dev)
 {
        perInterface_wlan_t *nic = netdev_priv(dev);
 
-
        return &nic->netstats;
 }
 
@@ -2146,17 +2073,16 @@ static void wilc_set_multicast_list(struct net_device *dev)
        priv = wiphy_priv(dev->ieee80211_ptr->wiphy);
        pstrWFIDrv = (tstrWILC_WFIDrv *)priv->hWILCWFIDrv;
 
-
        if (!dev)
                return;
 
-       PRINT_D(INIT_DBG, "Setting Multicast List with count = %d. \n", dev->mc.count);
+       PRINT_D(INIT_DBG, "Setting Multicast List with count = %d.\n", dev->mc.count);
 
        if (dev->flags & IFF_PROMISC) {
                /* Normally, we should configure the chip to retrive all packets
                 * but we don't wanna support this right now */
                /* TODO: add promiscuous mode support */
-               PRINT_D(INIT_DBG, "Set promiscuous mode ON, retrive all packets \n");
+               PRINT_D(INIT_DBG, "Set promiscuous mode ON, retrive all packets\n");
                return;
        }
 
@@ -2195,11 +2121,10 @@ static void linux_wlan_tx_complete(void *priv, int status)
 {
 
        struct tx_complete_data *pv_data = (struct tx_complete_data *)priv;
-       if (status == 1) {
+       if (status == 1)
                PRINT_D(TX_DBG, "Packet sent successfully - Size = %d - Address = %p - SKB = %p\n", pv_data->size, pv_data->buff, pv_data->skb);
-       } else {
+       else
                PRINT_D(TX_DBG, "Couldn't send packet - Size = %d - Address = %p - SKB = %p\n", pv_data->size, pv_data->buff, pv_data->skb);
-       }
        /* Free the SK Buffer, its work is done */
        dev_kfree_skb(pv_data->skb);
        linux_wlan_free(pv_data);
@@ -2215,7 +2140,7 @@ int mac_xmit(struct sk_buff *skb, struct net_device *ndev)
        struct ethhdr *eth_h;
        nic = netdev_priv(ndev);
 
-       PRINT_D(INT_DBG, "\n========\n IntUH: %d - IntBH: %d - IntCld: %d \n========\n", int_rcvdU, int_rcvdB, int_clrd);
+       PRINT_D(INT_DBG, "\n========\n IntUH: %d - IntBH: %d - IntCld: %d\n========\n", int_rcvdU, int_rcvdB, int_clrd);
        PRINT_D(TX_DBG, "Sending packet just received from TCP/IP\n");
 
        /* Stop the network interface queue */
@@ -2237,18 +2162,16 @@ int mac_xmit(struct sk_buff *skb, struct net_device *ndev)
        tx_data->skb  = skb;
 
        eth_h = (struct ethhdr *)(skb->data);
-       if (eth_h->h_proto == 0x8e88) {
+       if (eth_h->h_proto == 0x8e88)
                PRINT_D(INIT_DBG, "EAPOL transmitted\n");
-       }
 
        /*get source and dest ip addresses*/
        ih = (struct iphdr *)(skb->data + sizeof(struct ethhdr));
 
        pu8UdpBuffer = (char *)ih + sizeof(struct iphdr);
-       if ((pu8UdpBuffer[1] == 68 && pu8UdpBuffer[3] == 67) || (pu8UdpBuffer[1] == 67 && pu8UdpBuffer[3] == 68)) {
+       if ((pu8UdpBuffer[1] == 68 && pu8UdpBuffer[3] == 67) || (pu8UdpBuffer[1] == 67 && pu8UdpBuffer[3] == 68))
                PRINT_D(GENERIC_DBG, "DHCP Message transmitted, type:%x %x %x\n", pu8UdpBuffer[248], pu8UdpBuffer[249], pu8UdpBuffer[250]);
 
-       }
        PRINT_D(TX_DBG, "Sending packet - Size = %d - Address = %p - SKB = %p\n", tx_data->size, tx_data->buff, tx_data->skb);
 
        /* Send packet to MAC HW - for now the tx_complete function will be just status
@@ -2269,7 +2192,6 @@ int mac_xmit(struct sk_buff *skb, struct net_device *ndev)
        QueueCount = WILC_Xmit_data((void *)tx_data, HOST_TO_WLAN);
        #endif /* WILC_FULLY_HOSTING_AP */
 
-
        if (QueueCount > FLOW_CONTROL_UPPER_THRESHOLD) {
                netif_stop_queue(g_linux_wlan->strInterfaceInfo[0].wilc_netdev);
                netif_stop_queue(g_linux_wlan->strInterfaceInfo[1].wilc_netdev);
@@ -2278,7 +2200,6 @@ int mac_xmit(struct sk_buff *skb, struct net_device *ndev)
        return 0;
 }
 
-
 int mac_close(struct net_device *ndev)
 {
        struct WILC_WFI_priv *priv;
@@ -2301,8 +2222,6 @@ int mac_close(struct net_device *ndev)
 
        pstrWFIDrv = (tstrWILC_WFIDrv *)priv->hWILCWFIDrv;
 
-
-
        PRINT_D(GENERIC_DBG, "Mac close\n");
 
        if (g_linux_wlan == NULL) {
@@ -2348,7 +2267,6 @@ int mac_close(struct net_device *ndev)
        return 0;
 }
 
-
 int mac_ioctl(struct net_device *ndev, struct ifreq *req, int cmd)
 {
 
@@ -2359,8 +2277,6 @@ int mac_ioctl(struct net_device *ndev, struct ifreq *req, int cmd)
        struct WILC_WFI_priv *priv;
        s32 s32Error = WILC_SUCCESS;
 
-
-
        /* struct iwreq *wrq = (struct iwreq *) req;    // tony moved to case SIOCSIWPRIV */
        #ifdef USE_WIRELESS
        nic = netdev_priv(ndev);
@@ -2422,9 +2338,8 @@ int mac_ioctl(struct net_device *ndev, struct ifreq *req, int cmd)
 
 done:
 
-       if (buff != NULL) {
+       if (buff != NULL)
                kfree(buff);
-       }
 
        return s32Error;
 }
@@ -2455,7 +2370,6 @@ void frmw_to_linux(uint8_t *buff, uint32_t size, uint32_t pkt_offset)
                frame_len = size;
                buff_to_send = buff;
 
-
                /* Need to send the packet up to the host, allocate a skb buffer */
                skb = dev_alloc_skb(frame_len);
                if (skb == NULL) {
@@ -2465,14 +2379,12 @@ void frmw_to_linux(uint8_t *buff, uint32_t size, uint32_t pkt_offset)
 
                skb_reserve(skb, (unsigned int)skb->data & 0x3);
 
-               if (g_linux_wlan == NULL || wilc_netdev == NULL) {
+               if (g_linux_wlan == NULL || wilc_netdev == NULL)
                        PRINT_ER("wilc_netdev in g_linux_wlan is NULL");
-               }
                skb->dev = wilc_netdev;
 
-               if (skb->dev == NULL) {
+               if (skb->dev == NULL)
                        PRINT_ER("skb->dev is NULL\n");
-               }
 
                /*
                 * for(i=0;i<40;i++)
@@ -2502,9 +2414,8 @@ void frmw_to_linux(uint8_t *buff, uint32_t size, uint32_t pkt_offset)
                ih = (struct iphdr *)(skb->data + sizeof(struct ethhdr));
 
                pu8UdpBuffer = (char *)ih + sizeof(struct iphdr);
-               if (buff_to_send[35] == 67 && buff_to_send[37] == 68) {
+               if (buff_to_send[35] == 67 && buff_to_send[37] == 68)
                        PRINT_D(RX_DBG, "DHCP Message received\n");
-               }
                if (buff_to_send[12] == 0x88 && buff_to_send[13] == 0x8e)
                        PRINT_D(GENERIC_DBG, "eapol received\n");
                        #endif
@@ -2516,9 +2427,8 @@ void frmw_to_linux(uint8_t *buff, uint32_t size, uint32_t pkt_offset)
                PRINT_D(RX_DBG, "netif_rx ret value is: %d\n", stats);
        }
                #ifndef TCP_ENHANCEMENTS
-       else {
+       else
                PRINT_ER("Discard sending packet with len = %d\n", size);
-       }
                #endif
 }
 
@@ -2541,9 +2451,8 @@ void WILC_WFI_mgmt_rx(uint8_t *buff, uint32_t size)
        #ifdef WILC_P2P
        nic = netdev_priv(g_linux_wlan->strInterfaceInfo[1].wilc_netdev); /* p2p0 */
        if ((buff[0] == nic->g_struct_frame_reg[0].frame_type && nic->g_struct_frame_reg[0].reg) ||
-           (buff[0] == nic->g_struct_frame_reg[1].frame_type && nic->g_struct_frame_reg[1].reg)) {
+           (buff[0] == nic->g_struct_frame_reg[1].frame_type && nic->g_struct_frame_reg[1].reg))
                WILC_WFI_p2p_rx(g_linux_wlan->strInterfaceInfo[1].wilc_netdev, buff, size);
-       }
        #endif
 }
 
@@ -2625,7 +2534,6 @@ int wilc_netdev_init(void)
                }
                #endif
 
-
                if (register_netdev(ndev)) {
                        PRINT_ER("Device couldn't be registered - %s\n", ndev->name);
                        return -1; /* ERROR */
@@ -2638,7 +2546,7 @@ int wilc_netdev_init(void)
 
        #ifndef WILC_SDIO
        if (!linux_spi_init(&g_linux_wlan->wilc_spidev)) {
-               PRINT_ER("Can't initialize SPI \n");
+               PRINT_ER("Can't initialize SPI\n");
                return -1; /* ERROR */
        }
        g_linux_wlan->wilc_spidev = wilc_spi_dev;
@@ -2649,13 +2557,10 @@ int wilc_netdev_init(void)
        return 0;
 }
 
-
 /*The 1st function called after module inserted*/
 static int __init init_wilc_driver(void)
 {
-
-
-#if defined (WILC_DEBUGFS)
+#if defined(WILC_DEBUGFS)
        if (wilc_debugfs_init() < 0) {
                PRINT_D(GENERIC_DBG, "fail to create debugfs for wilc driver\n");
                return -1;
@@ -2674,17 +2579,15 @@ static int __init init_wilc_driver(void)
                int ret;
 
                ret = sdio_register_driver(&wilc_bus);
-               if (ret < 0) {
+               if (ret < 0)
                        PRINT_D(INIT_DBG, "init_wilc_driver: Failed register sdio driver\n");
-               }
 
                return ret;
        }
 #else
        PRINT_D(INIT_DBG, "Initializing netdev\n");
-       if (wilc_netdev_init()) {
+       if (wilc_netdev_init())
                PRINT_ER("Couldn't initialize netdev\n");
-       }
        return 0;
 #endif
 }
@@ -2702,18 +2605,15 @@ static void __exit exit_wilc_driver(void)
                unregister_inetaddr_notifier(&g_dev_notifier);
        #endif
 
-               for (i = 0; i < NUM_CONCURRENT_IFC; i++) {
+               for (i = 0; i < NUM_CONCURRENT_IFC; i++)
                        nic[i] = netdev_priv(g_linux_wlan->strInterfaceInfo[i].wilc_netdev);
-               }
        }
 
-
        if ((g_linux_wlan != NULL) && g_linux_wlan->wilc_firmware != NULL) {
                release_firmware(g_linux_wlan->wilc_firmware);
                g_linux_wlan->wilc_firmware = NULL;
        }
 
-
        if ((g_linux_wlan != NULL) && (((g_linux_wlan->strInterfaceInfo[0].wilc_netdev) != NULL)
                                       || ((g_linux_wlan->strInterfaceInfo[1].wilc_netdev) != NULL))) {
                PRINT_D(INIT_DBG, "Waiting for mac_close ....\n");
@@ -2723,17 +2623,15 @@ static void __exit exit_wilc_driver(void)
                else
                        PRINT_D(INIT_DBG, "mac_closed\n");
 
-
                for (i = 0; i < NUM_CONCURRENT_IFC; i++) {
                        /* close all opened interfaces */
                        if (g_linux_wlan->strInterfaceInfo[i].wilc_netdev != NULL) {
-                               if (nic[i]->mac_opened) {
+                               if (nic[i]->mac_opened)
                                        mac_close(g_linux_wlan->strInterfaceInfo[i].wilc_netdev);
-                               }
                        }
                }
                for (i = 0; i < NUM_CONCURRENT_IFC; i++) {
-                       PRINT_D(INIT_DBG, "Unregistering netdev %p \n", g_linux_wlan->strInterfaceInfo[i].wilc_netdev);
+                       PRINT_D(INIT_DBG, "Unregistering netdev %p\n", g_linux_wlan->strInterfaceInfo[i].wilc_netdev);
                        unregister_netdev(g_linux_wlan->strInterfaceInfo[i].wilc_netdev);
                        #ifdef USE_WIRELESS
                        PRINT_D(INIT_DBG, "Freeing Wiphy...\n");
@@ -2744,7 +2642,6 @@ static void __exit exit_wilc_driver(void)
                }
        }
 
-
 #ifdef USE_WIRELESS
 #ifdef WILC_AP_EXTERNAL_MLME
        /* Bug 4600 : WILC_WFI_deinit_mon_interface was already called at mac_close */
@@ -2769,7 +2666,7 @@ static void __exit exit_wilc_driver(void)
                }
                printk("Module_exit Done.\n");
 
-#if defined (WILC_DEBUGFS)
+#if defined(WILC_DEBUGFS)
                wilc_debugfs_remove();
 #endif
 
@@ -2780,4 +2677,3 @@ static void __exit exit_wilc_driver(void)
 module_exit(exit_wilc_driver);
 
 MODULE_LICENSE("GPL");
-#endif
index 858e3a191bce8baee64568adace64ac1525976d2..37f31f4558b5cb3b4325f0d1a9405d124c5a367c 100644 (file)
@@ -31,7 +31,6 @@
 struct sdio_func *local_sdio_func;
 extern linux_wlan_t *g_linux_wlan;
 extern int wilc_netdev_init(void);
-extern int sdio_clear_int(void);
 extern void wilc_handle_isr(void);
 
 static unsigned int sdio_default_speed;
index c328208cda29040c8ea8cc4ac8d0ca7a508bcdb6..be2e901b448d485aaf5824f00a47cbd929a21cec 100644 (file)
@@ -62,11 +62,10 @@ static ssize_t wilc_debug_level_write(struct file *filp, const char *buf, size_t
 
        flag = buffer[0] - '0';
 
-       if (flag > 0) {
+       if (flag > 0)
                flag = DEBUG | ERR;
-       } else if (flag < 0) {
+       else if (flag < 0)
                flag = 100;
-       }
 
        if (flag > DBG_LEVEL_ALL) {
                printk("%s, value (0x%08x) is out of range, stay previous flag (0x%08x)\n", __func__, flag, atomic_read(&DEBUG_LEVEL));
@@ -75,11 +74,10 @@ static ssize_t wilc_debug_level_write(struct file *filp, const char *buf, size_t
 
        atomic_set(&DEBUG_LEVEL, (int)flag);
 
-       if (flag == 0) {
+       if (flag == 0)
                printk("Debug-level disabled\n");
-       } else {
+       else
                printk("Debug-level enabled\n");
-       }
        return count;
 }
 
index c70707fefb660eef29858583d54dcff944040ee9..34ef13e8e24329ea369b05c6371dfa65437ed27e 100644 (file)
@@ -9,11 +9,10 @@
 void *WILC_MemoryAlloc(u32 u32Size, tstrWILC_MemoryAttrs *strAttrs,
                       char *pcFileName, u32 u32LineNo)
 {
-       if (u32Size > 0) {
+       if (u32Size > 0)
                return kmalloc(u32Size, GFP_ATOMIC);
-       } else {
+       else
                return NULL;
-       }
 }
 
 /*!
index d03532cc3af21d09dd6242601dfb43b8679733c8..ccceaae212a5881c3bd49ecb3fd82b134a94af5d 100644 (file)
@@ -1,5 +1,5 @@
-#ifndef __WILC_platfrom_H__
-#define __WILC_platfrom_H__
+#ifndef __WILC_platform_H__
+#define __WILC_platform_H__
 
 #include <linux/kthread.h>
 #include <linux/semaphore.h>
index 897e47e317ff769cc066a42a23f4905326465d7d..5a18148a593e3f2b6416138b6fee4a95bc6b78cc 100644 (file)
 #include "wilc_wlan_if.h"
 #include "wilc_wlan.h"
 
-
-#ifdef WILC1000_SINGLE_TRANSFER
-#define WILC_SDIO_BLOCK_SIZE 256
-#else
- #if defined(PLAT_AML8726_M3) /* johnny */
-       #define WILC_SDIO_BLOCK_SIZE 512
-       #define MAX_SEG_SIZE (1 << 12) /* 4096 */
- #else
-       #define WILC_SDIO_BLOCK_SIZE 512
- #endif
-#endif
+#define WILC_SDIO_BLOCK_SIZE 512
 
 typedef struct {
        void *os_context;
@@ -90,7 +80,6 @@ static int sdio_set_func0_csa_address_byte0(uint32_t adr)
 {
        sdio_cmd52_t cmd;
 
-
        /**
         *      Review: BIG ENDIAN
         **/
@@ -108,6 +97,7 @@ static int sdio_set_func0_csa_address_byte0(uint32_t adr)
 _fail_:
        return 0;
 }
+
 static int sdio_set_func0_block_size(uint32_t block_size)
 {
        sdio_cmd52_t cmd;
@@ -170,6 +160,7 @@ static int sdio_clear_int(void)
 #ifndef WILC_SDIO_IRQ_GPIO
        /* uint32_t sts; */
        sdio_cmd52_t cmd;
+
        cmd.read_write = 0;
        cmd.function = 1;
        cmd.raw = 0;
@@ -181,6 +172,7 @@ static int sdio_clear_int(void)
        return cmd.data;
 #else
        uint32_t reg;
+
        if (!sdio_read_reg(WILC_HOST_RX_CTRL_0, &reg)) {
                g_sdio.dPrint(N_ERR, "[wilc spi]: Failed read reg (%08x)...\n", WILC_HOST_RX_CTRL_0);
                return 0;
@@ -197,6 +189,7 @@ uint32_t sdio_xfer_cnt(void)
 {
        uint32_t cnt = 0;
        sdio_cmd52_t cmd;
+
        cmd.read_write = 0;
        cmd.function = 1;
        cmd.raw = 0;
@@ -222,8 +215,6 @@ uint32_t sdio_xfer_cnt(void)
        cnt |= (cmd.data << 16);
 
        return cnt;
-
-
 }
 
 /********************************************
@@ -263,6 +254,7 @@ static int sdio_write_reg(uint32_t addr, uint32_t data)
 
        if ((addr >= 0xf0) && (addr <= 0xff)) {
                sdio_cmd52_t cmd;
+
                cmd.read_write = 1;
                cmd.function = 0;
                cmd.raw = 0;
@@ -325,16 +317,6 @@ static int sdio_write(uint32_t addr, uint8_t *buf, uint32_t size)
                cmd.function = 0;
                cmd.address = 0x10f;
        } else {
-#ifdef WILC1000_SINGLE_TRANSFER
-               /**
-                *      has to be block aligned...
-                **/
-               nleft = size % block_size;
-               if (nleft > 0) {
-                       size += block_size;
-                       size &= ~(block_size - 1);
-               }
-#else
                /**
                 *      has to be word aligned...
                 **/
@@ -342,7 +324,6 @@ static int sdio_write(uint32_t addr, uint8_t *buf, uint32_t size)
                        size += 4;
                        size &= ~0x3;
                }
-#endif
 
                /**
                 *      func 1 access
@@ -355,89 +336,6 @@ static int sdio_write(uint32_t addr, uint8_t *buf, uint32_t size)
        nleft = size % block_size;
 
        if (nblk > 0) {
-
-#if defined(PLAT_AML8726_M3_BACKUP) /* johnny */
-               int i;
-
-               for (i = 0; i < nblk; i++) {
-                       cmd.block_mode = 0; /* 1; */
-                       cmd.increment = 1;
-                       cmd.count = block_size; /* nblk; */
-                       cmd.buffer = buf;
-                       cmd.block_size = block_size;
-                       if (addr > 0) {
-                               if (!sdio_set_func0_csa_address(addr))
-                                       goto _fail_;
-                       }
-                       if (!g_sdio.sdio_cmd53(&cmd)) {
-                               g_sdio.dPrint(N_ERR, "[wilc sdio]: Failed cmd53 [%x], block send...\n", addr);
-                               goto _fail_;
-                       }
-
-                       if (addr > 0)
-                               addr += block_size;     /* addr += nblk*block_size; */
-
-                       buf += block_size;              /* buf += nblk*block_size; */
-               }
-
-#elif defined(PLAT_AML8726_M3) /* johnny */
-
-               int i;
-               int rest;
-               int seg_cnt;
-
-               seg_cnt = (nblk * block_size) / MAX_SEG_SIZE;
-               rest = (nblk * block_size) & (MAX_SEG_SIZE - 1);
-
-               for (i = 0; i < seg_cnt; i++) {
-                       cmd.block_mode = 1;
-                       cmd.increment = 1;
-                       cmd.count = MAX_SEG_SIZE / block_size;
-                       cmd.buffer = buf;
-                       cmd.block_size = block_size;
-
-                       if (addr > 0) {
-                               if (!sdio_set_func0_csa_address(addr))
-                                       goto _fail_;
-                       }
-                       if (!g_sdio.sdio_cmd53(&cmd)) {
-                               g_sdio.dPrint(N_ERR, "[wilc sdio]: Failed cmd53 [%x], block send...\n", addr);
-                               goto _fail_;
-                       }
-
-                       if (addr > 0)
-                               addr += MAX_SEG_SIZE;
-
-                       buf += MAX_SEG_SIZE;
-
-               }
-
-
-               if (rest > 0) {
-                       cmd.block_mode = 1;
-                       cmd.increment = 1;
-                       cmd.count = rest / block_size;
-                       cmd.buffer = buf;
-                       cmd.block_size = block_size; /* johnny : prevent it from setting unexpected value */
-
-                       if (addr > 0) {
-                               if (!sdio_set_func0_csa_address(addr))
-                                       goto _fail_;
-                       }
-                       if (!g_sdio.sdio_cmd53(&cmd)) {
-                               g_sdio.dPrint(N_ERR, "[wilc sdio]: Failed cmd53 [%x], bytes send...\n", addr);
-                               goto _fail_;
-                       }
-
-                       if (addr > 0)
-                               addr += rest;
-
-                       buf += rest;
-
-               }
-
-#else
-
                cmd.block_mode = 1;
                cmd.increment = 1;
                cmd.count = nblk;
@@ -454,11 +352,8 @@ static int sdio_write(uint32_t addr, uint8_t *buf, uint32_t size)
                if (addr > 0)
                        addr += nblk * block_size;
                buf += nblk * block_size;
-
-#endif /* platform */
        }
 
-
        if (nleft > 0) {
                cmd.block_mode = 0;
                cmd.increment = 1;
@@ -488,6 +383,7 @@ static int sdio_read_reg(uint32_t addr, uint32_t *data)
 {
        if ((addr >= 0xf0) && (addr <= 0xff)) {
                sdio_cmd52_t cmd;
+
                cmd.read_write = 0;
                cmd.function = 0;
                cmd.raw = 0;
@@ -552,16 +448,6 @@ static int sdio_read(uint32_t addr, uint8_t *buf, uint32_t size)
                cmd.function = 0;
                cmd.address = 0x10f;
        } else {
-#ifdef WILC1000_SINGLE_TRANSFER
-               /**
-                *      has to be block aligned...
-                **/
-               nleft = size % block_size;
-               if (nleft > 0) {
-                       size += block_size;
-                       size &= ~(block_size - 1);
-               }
-#else
                /**
                 *      has to be word aligned...
                 **/
@@ -569,7 +455,6 @@ static int sdio_read(uint32_t addr, uint8_t *buf, uint32_t size)
                        size += 4;
                        size &= ~0x3;
                }
-#endif
 
                /**
                 *      func 1 access
@@ -582,89 +467,6 @@ static int sdio_read(uint32_t addr, uint8_t *buf, uint32_t size)
        nleft = size % block_size;
 
        if (nblk > 0) {
-
-#if defined(PLAT_AML8726_M3_BACKUP) /* johnny */
-
-               int i;
-
-               for (i = 0; i < nblk; i++) {
-                       cmd.block_mode = 0; /* 1; */
-                       cmd.increment = 1;
-                       cmd.count = block_size; /* nblk; */
-                       cmd.buffer = buf;
-                       cmd.block_size = block_size;
-                       if (addr > 0) {
-                               if (!sdio_set_func0_csa_address(addr))
-                                       goto _fail_;
-                       }
-                       if (!g_sdio.sdio_cmd53(&cmd)) {
-                               g_sdio.dPrint(N_ERR, "[wilc sdio]: Failed cmd53 [%x], block read...\n", addr);
-                               goto _fail_;
-                       }
-                       if (addr > 0)
-                               addr += block_size;             /* addr += nblk*block_size; */
-                       buf += block_size;              /* buf += nblk*block_size; */
-               }
-
-#elif defined(PLAT_AML8726_M3) /* johnny */
-
-               int i;
-               int rest;
-               int seg_cnt;
-
-               seg_cnt = (nblk * block_size) / MAX_SEG_SIZE;
-               rest = (nblk * block_size) & (MAX_SEG_SIZE - 1);
-
-               for (i = 0; i < seg_cnt; i++) {
-                       cmd.block_mode = 1;
-                       cmd.increment = 1;
-                       cmd.count = MAX_SEG_SIZE / block_size;
-                       cmd.buffer = buf;
-                       cmd.block_size = block_size;
-
-
-                       if (addr > 0) {
-                               if (!sdio_set_func0_csa_address(addr))
-                                       goto _fail_;
-                       }
-                       if (!g_sdio.sdio_cmd53(&cmd)) {
-                               g_sdio.dPrint(N_ERR, "[wilc sdio]: Failed cmd53 [%x], block read...\n", addr);
-                               goto _fail_;
-                       }
-
-                       if (addr > 0)
-                               addr += MAX_SEG_SIZE;
-
-                       buf += MAX_SEG_SIZE;
-
-               }
-
-
-               if (rest > 0) {
-                       cmd.block_mode = 1;
-                       cmd.increment = 1;
-                       cmd.count = rest / block_size;
-                       cmd.buffer = buf;
-                       cmd.block_size = block_size; /* johnny : prevent it from setting unexpected value */
-
-                       if (addr > 0) {
-                               if (!sdio_set_func0_csa_address(addr))
-                                       goto _fail_;
-                       }
-                       if (!g_sdio.sdio_cmd53(&cmd)) {
-                               g_sdio.dPrint(N_ERR, "[wilc sdio]: Failed cmd53 [%x], block read...\n", addr);
-                               goto _fail_;
-                       }
-
-                       if (addr > 0)
-                               addr += rest;
-
-                       buf += rest;
-
-               }
-
-#else
-
                cmd.block_mode = 1;
                cmd.increment = 1;
                cmd.count = nblk;
@@ -681,8 +483,6 @@ static int sdio_read(uint32_t addr, uint8_t *buf, uint32_t size)
                if (addr > 0)
                        addr += nblk * block_size;
                buf += nblk * block_size;
-
-#endif /* platform */
        }       /* if (nblk > 0) */
 
        if (nleft > 0) {
@@ -784,6 +584,7 @@ static int sdio_init(wilc_wlan_inp_t *inp, wilc_debug_func func)
        sdio_cmd52_t cmd;
        int loop;
        uint32_t chipid;
+
        memset(&g_sdio, 0, sizeof(wilc_sdio_t));
 
        g_sdio.dPrint = func;
@@ -891,14 +692,12 @@ static int sdio_init(wilc_wlan_inp_t *inp, wilc_debug_func func)
                goto _fail_;
        }
        g_sdio.dPrint(N_ERR, "[wilc sdio]: chipid (%08x)\n", chipid);
-       if ((chipid & 0xfff) > 0x2a0) {
+       if ((chipid & 0xfff) > 0x2a0)
                g_sdio.has_thrpt_enh3 = 1;
-       } else {
+       else
                g_sdio.has_thrpt_enh3 = 0;
-       }
        g_sdio.dPrint(N_ERR, "[wilc sdio]: has_thrpt_enh3 = %d...\n", g_sdio.has_thrpt_enh3);
 
-
        return 1;
 
 _fail_:
@@ -925,23 +724,21 @@ static int sdio_read_size(uint32_t *size)
        /**
         *      Read DMA count in words
         **/
-       {
-               cmd.read_write = 0;
-               cmd.function = 0;
-               cmd.raw = 0;
-               cmd.address = 0xf2;
-               cmd.data = 0;
-               g_sdio.sdio_cmd52(&cmd);
-               tmp = cmd.data;
+       cmd.read_write = 0;
+       cmd.function = 0;
+       cmd.raw = 0;
+       cmd.address = 0xf2;
+       cmd.data = 0;
+       g_sdio.sdio_cmd52(&cmd);
+       tmp = cmd.data;
 
-               /* cmd.read_write = 0; */
-               /* cmd.function = 0; */
-               /* cmd.raw = 0; */
-               cmd.address = 0xf3;
-               cmd.data = 0;
-               g_sdio.sdio_cmd52(&cmd);
-               tmp |= (cmd.data << 8);
-       }
+       /* cmd.read_write = 0; */
+       /* cmd.function = 0; */
+       /* cmd.raw = 0; */
+       cmd.address = 0xf3;
+       cmd.data = 0;
+       g_sdio.sdio_cmd52(&cmd);
+       tmp |= (cmd.data << 8);
 
        *size = tmp;
        return 1;
@@ -966,26 +763,21 @@ static int sdio_read_int(uint32_t *int_status)
        cmd.data = 0;
        g_sdio.sdio_cmd52(&cmd);
 
-       if (cmd.data & (1 << 0)) {
+       if (cmd.data & (1 << 0))
                tmp |= INT_0;
-       }
-       if (cmd.data & (1 << 2)) {
+       if (cmd.data & (1 << 2))
                tmp |= INT_1;
-       }
-       if (cmd.data & (1 << 3)) {
+       if (cmd.data & (1 << 3))
                tmp |= INT_2;
-       }
-       if (cmd.data & (1 << 4)) {
+       if (cmd.data & (1 << 4))
                tmp |= INT_3;
-       }
-       if (cmd.data & (1 << 5)) {
+       if (cmd.data & (1 << 5))
                tmp |= INT_4;
-       }
-       if (cmd.data & (1 << 6)) {
+       if (cmd.data & (1 << 6))
                tmp |= INT_5;
-       }
        {
                int i;
+
                for (i = g_sdio.nint; i < MAX_NUM_INT; i++) {
                        if ((tmp >> (IRG_FLAGS_OFFSET + i)) & 0x1) {
                                g_sdio.dPrint(N_ERR, "[wilc sdio]: Unexpected interrupt (1) : tmp=%x, data=%x\n", tmp, cmd.data);
@@ -1024,6 +816,7 @@ static int sdio_clear_int_ext(uint32_t val)
 #ifdef WILC_SDIO_IRQ_GPIO
                {
                        uint32_t flags;
+
                        flags = val & ((1 << MAX_NUN_INT_THRPT_ENH2) - 1);
                        reg = flags;
                }
@@ -1041,6 +834,7 @@ static int sdio_clear_int_ext(uint32_t val)
                        reg |= (1 << 7);
                if (reg) {
                        sdio_cmd52_t cmd;
+
                        cmd.read_write = 1;
                        cmd.function = 0;
                        cmd.raw = 0;
@@ -1060,6 +854,7 @@ static int sdio_clear_int_ext(uint32_t val)
                        /* see below. has_thrpt_enh2 uses register 0xf8 to clear interrupts. */
                        /* Cannot clear multiple interrupts. Must clear each interrupt individually */
                        uint32_t flags;
+
                        flags = val & ((1 << MAX_NUM_INT) - 1);
                        if (flags) {
                                int i;
@@ -1068,6 +863,7 @@ static int sdio_clear_int_ext(uint32_t val)
                                for (i = 0; i < g_sdio.nint; i++) {
                                        if (flags & 1) {
                                                sdio_cmd52_t cmd;
+
                                                cmd.read_write = 1;
                                                cmd.function = 0;
                                                cmd.raw = 0;
@@ -1085,9 +881,8 @@ static int sdio_clear_int_ext(uint32_t val)
                                                break;
                                        flags >>= 1;
                                }
-                               if (!ret) {
+                               if (!ret)
                                        goto _fail_;
-                               }
                                for (i = g_sdio.nint; i < MAX_NUM_INT; i++) {
                                        if (flags & 1)
                                                g_sdio.dPrint(N_ERR, "[wilc sdio]: Unexpected interrupt cleared %d...\n", i);
@@ -1097,7 +892,6 @@ static int sdio_clear_int_ext(uint32_t val)
                }
 #endif /* WILC_SDIO_IRQ_GPIO */
 
-
                {
                        uint32_t vmm_ctl;
 
@@ -1138,7 +932,6 @@ static int sdio_sync_ext(int nint /*  how mant interrupts to enable. */)
 {
        uint32_t reg;
 
-
        if (nint > MAX_NUM_INT) {
                g_sdio.dPrint(N_ERR, "[wilc sdio]: Too many interupts (%d)...\n", nint);
                return 0;
@@ -1148,7 +941,6 @@ static int sdio_sync_ext(int nint /*  how mant interrupts to enable. */)
                return 0;
        }
 
-
        g_sdio.nint = nint;
 
        /**
@@ -1170,7 +962,6 @@ static int sdio_sync_ext(int nint /*  how mant interrupts to enable. */)
                uint32_t reg;
                int ret, i;
 
-
                /**
                 *      interrupt pin mux select
                 **/
@@ -1195,9 +986,8 @@ static int sdio_sync_ext(int nint /*  how mant interrupts to enable. */)
                        return 0;
                }
 
-               for (i = 0; (i < 5) && (nint > 0); i++, nint--) {
+               for (i = 0; (i < 5) && (nint > 0); i++, nint--)
                        reg |= (1 << (27 + i));
-               }
                ret = sdio_write_reg(WILC_INTR_ENABLE, reg);
                if (!ret) {
                        g_sdio.dPrint(N_ERR, "[wilc sdio]: Failed write reg (%08x)...\n", WILC_INTR_ENABLE);
@@ -1210,9 +1000,8 @@ static int sdio_sync_ext(int nint /*  how mant interrupts to enable. */)
                                return 0;
                        }
 
-                       for (i = 0; (i < 3) && (nint > 0); i++, nint--) {
+                       for (i = 0; (i < 3) && (nint > 0); i++, nint--)
                                reg |= (1 << i);
-                       }
 
                        ret = sdio_read_reg(WILC_INTR2_ENABLE, &reg);
                        if (!ret) {
@@ -1225,7 +1014,6 @@ static int sdio_sync_ext(int nint /*  how mant interrupts to enable. */)
        return 1;
 }
 
-
 /********************************************
  *
  *      Global sdio HIF function table
index abea5df656d78ce9ddada4c14755b8b8bae7094c..1bf7d314ae342ed3cbe6237b75b1686e604be1be 100644 (file)
@@ -374,11 +374,10 @@ static int spi_cmd_complete(uint8_t cmd, uint32_t adr, uint8_t *b, uint32_t sz,
                return result;
        }
 
-       if (!g_spi.crc_off) {
+       if (!g_spi.crc_off)
                wb[len - 1] = (crc7(0x7f, (const uint8_t *)&wb[0], len - 1)) << 1;
-       } else {
+       else
                len -= 1;
-       }
 
 #define NUM_SKIP_BYTES (1)
 #define NUM_RSP_BYTES (2)
@@ -522,11 +521,10 @@ static int spi_cmd_complete(uint8_t cmd, uint32_t adr, uint8_t *b, uint32_t sz,
                        if (sz > 0) {
                                int nbytes;
 
-                               if (sz <= (DATA_PKT_SZ - ix)) {
+                               if (sz <= (DATA_PKT_SZ - ix))
                                        nbytes = sz;
-                               } else {
+                               else
                                        nbytes = DATA_PKT_SZ - ix;
-                               }
 
                                /**
                                 * Read bytes
@@ -557,11 +555,10 @@ static int spi_cmd_complete(uint8_t cmd, uint32_t adr, uint8_t *b, uint32_t sz,
                        while (sz > 0) {
                                int nbytes;
 
-                               if (sz <= DATA_PKT_SZ) {
+                               if (sz <= DATA_PKT_SZ)
                                        nbytes = sz;
-                               } else {
+                               else
                                        nbytes = DATA_PKT_SZ;
-                               }
 
                                /**
                                 * read data response only on the next DMA cycles not
index e0145953ceef279f981b9101919ec679f3c80123..a32b9c13e872c8792c9e63f463b8394a0b594cc2 100644 (file)
@@ -4,15 +4,6 @@
 #include "wilc_strutils.h"
 
 
-/*!
- *  @author    syounan
- *  @date      18 Aug 2010
- *  @version   1.0
- */
-s32 WILC_memcmp(const void *pvArg1, const void *pvArg2, u32 u32Count)
-{
-       return memcmp(pvArg1, pvArg2, u32Count);
-}
 
 
 /*!
@@ -25,15 +16,6 @@ void WILC_memcpy_INTERNAL(void *pvTarget, const void *pvSource, u32 u32Count)
        memcpy(pvTarget, pvSource, u32Count);
 }
 
-/*!
- *  @author    syounan
- *  @date      18 Aug 2010
- *  @version   1.0
- */
-void *WILC_memset(void *pvTarget, u8 u8SetValue, u32 u32Count)
-{
-       return memset(pvTarget, u8SetValue, u32Count);
-}
 
 /*!
  *  @author    syounan
@@ -59,11 +41,10 @@ s32 WILC_strncmp(const char *pcStr1, const char *pcStr2,
                s32Result = 1;
        } else {
                s32Result = strncmp(pcStr1, pcStr2, u32Count);
-               if (s32Result < 0) {
+               if (s32Result < 0)
                        s32Result = -1;
-               } else if (s32Result > 0)    {
+               else if (s32Result > 0)
                        s32Result = 1;
-               }
        }
 
        return s32Result;
index d1445575a25e1008d0f378d4899eafa49a1e5e00..9e3c5d9c5001a0a179b438bbacbcf74baaca1d9f 100644 (file)
 #include <linux/string.h>
 #include "wilc_errorsupport.h"
 
-/*!
- *  @brief     Compares two memory buffers
- *  @param[in] pvArg1 pointer to the first memory location
- *  @param[in] pvArg2 pointer to the second memory location
- *  @param[in] u32Count the size of the memory buffers
- *  @return    0 if the 2 buffers are equal, 1 if pvArg1 is bigger than pvArg2,
- *              -1 if pvArg1 smaller than pvArg2
- *  @note      this function repeats the functionality of standard memcmp
- *  @author    syounan
- *  @date      18 Aug 2010
- *  @version   1.0
- */
-s32 WILC_memcmp(const void *pvArg1, const void *pvArg2, u32 u32Count);
 
 /*!
  *  @brief     Internal implementation for memory copy
@@ -71,18 +58,6 @@ static WILC_ErrNo WILC_memcpy(void *pvTarget, const void *pvSource, u32 u32Count
        }
 }
 
-/*!
- *  @brief     Sets the contents of a memory buffer with the given value
- *  @param[in] pvTarget the target buffer which contsnts will be set
- *  @param[in] u8SetValue the value to be used
- *  @param[in] u32Count the size of the memory buffer
- *  @return    value of pvTarget
- *  @note      this function repeats the functionality of standard memset
- *  @author    syounan
- *  @date      18 Aug 2010
- *  @version   1.0
- */
-void *WILC_memset(void *pvTarget, u8 u8SetValue, u32 u32Count);
 
 /*!
  *  @brief     copies the contents of source string into the target string
index 92064db9eb05589a37127e97c5bd0a715087bf9c..5c459679aa5a135f77f14ec1b24e98a27c0a6f3a 100644 (file)
@@ -22,7 +22,6 @@
 #define IS_MGMT_STATUS_SUCCES                  0x040
 #define GET_PKT_OFFSET(a) (((a) >> 22) & 0x1ff)
 
-extern void linux_wlan_free(void *vp);
 extern int linux_wlan_get_firmware(perInterface_wlan_t *p_nic);
 extern void linux_wlan_unlock(void *vp);
 extern u16 Set_machw_change_vir_if(bool bValue);
@@ -112,7 +111,7 @@ u8 u8P2P_oui[] = {0x50, 0x6f, 0x9A, 0x09};
 u8 u8P2Plocalrandom = 0x01;
 u8 u8P2Precvrandom = 0x00;
 u8 u8P2P_vendorspec[] = {0xdd, 0x05, 0x00, 0x08, 0x40, 0x03};
-bool bWilc_ie = false;
+bool bWilc_ie;
 #endif
 
 static struct ieee80211_supported_band WILC_WFI_band_2ghz = {
@@ -135,18 +134,16 @@ struct add_key_params g_add_ptk_key_params;
 struct wilc_wfi_key g_key_ptk_params;
 struct wilc_wfi_wep_key g_key_wep_params;
 u8 g_flushing_in_progress;
-bool g_ptk_keys_saved = false;
-bool g_gtk_keys_saved = false;
-bool g_wep_keys_saved = false;
+bool g_ptk_keys_saved;
+bool g_gtk_keys_saved;
+bool g_wep_keys_saved;
 
 #define AGING_TIME     (9 * 1000)
 #define duringIP_TIME 15000
 
 void clear_shadow_scan(void *pUserVoid)
 {
-       struct WILC_WFI_priv *priv;
        int i;
-       priv = (struct WILC_WFI_priv *)pUserVoid;
        if (op_ifcs == 0) {
                WILC_TimerDestroy(&hAgingTimer, NULL);
                PRINT_INFO(CORECONFIG_DBG, "destroy aging timer\n");
@@ -204,7 +201,7 @@ void refresh_scan(void *pUserVoid, uint8_t all, bool bDirectScan)
                                channel = ieee80211_get_channel(wiphy, s32Freq);
 
                                rssi = get_rssi_avg(pstrNetworkInfo);
-                               if (WILC_memcmp("DIRECT-", pstrNetworkInfo->au8ssid, 7) || bDirectScan) {
+                               if (memcmp("DIRECT-", pstrNetworkInfo->au8ssid, 7) || bDirectScan)      {
                                        bss = cfg80211_inform_bss(wiphy, channel, CFG80211_BSS_FTYPE_UNKNOWN, pstrNetworkInfo->au8bssid, pstrNetworkInfo->u64Tsf, pstrNetworkInfo->u16CapInfo,
                                                                  pstrNetworkInfo->u16BeaconPeriod, (const u8 *)pstrNetworkInfo->pu8IEs,
                                                                  (size_t)pstrNetworkInfo->u16IEsLen, (((s32)rssi) * 100), GFP_KERNEL);
@@ -219,9 +216,7 @@ void refresh_scan(void *pUserVoid, uint8_t all, bool bDirectScan)
 
 void reset_shadow_found(void *pUserVoid)
 {
-       struct WILC_WFI_priv *priv;
        int i;
-       priv = (struct WILC_WFI_priv *)pUserVoid;
        for (i = 0; i < u32LastScannedNtwrksCountShadow; i++) {
                astrLastScannedNtwrksShadow[i].u8Found = 0;
 
@@ -230,9 +225,7 @@ void reset_shadow_found(void *pUserVoid)
 
 void update_scan_time(void *pUserVoid)
 {
-       struct WILC_WFI_priv *priv;
        int i;
-       priv = (struct WILC_WFI_priv *)pUserVoid;
        for (i = 0; i < u32LastScannedNtwrksCountShadow; i++) {
                astrLastScannedNtwrksShadow[i].u32TimeRcvdInScan = jiffies;
        }
@@ -240,15 +233,13 @@ void update_scan_time(void *pUserVoid)
 
 void remove_network_from_shadow(void *pUserVoid)
 {
-       struct WILC_WFI_priv *priv;
        unsigned long now = jiffies;
        int i, j;
 
-       priv = (struct WILC_WFI_priv *)pUserVoid;
 
        for (i = 0; i < u32LastScannedNtwrksCountShadow; i++) {
                if (time_after(now, astrLastScannedNtwrksShadow[i].u32TimeRcvdInScan + (unsigned long)(SCAN_RESULT_EXPIRE))) {
-                       PRINT_D(CFG80211_DBG, "Network expired in ScanShadow: %s \n", astrLastScannedNtwrksShadow[i].au8ssid);
+                       PRINT_D(CFG80211_DBG, "Network expired in ScanShadow: %s\n", astrLastScannedNtwrksShadow[i].au8ssid);
 
                        if (astrLastScannedNtwrksShadow[i].pu8IEs != NULL) {
                                WILC_FREE(astrLastScannedNtwrksShadow[i].pu8IEs);
@@ -281,11 +272,9 @@ void clear_duringIP(void *pUserVoid)
 
 int8_t is_network_in_shadow(tstrNetworkInfo *pstrNetworkInfo, void *pUserVoid)
 {
-       struct WILC_WFI_priv *priv;
        int8_t state = -1;
        int i;
 
-       priv = (struct WILC_WFI_priv *)pUserVoid;
        if (u32LastScannedNtwrksCountShadow == 0) {
                PRINT_D(CFG80211_DBG, "Starting Aging timer\n");
                WILC_TimerStart(&(hAgingTimer), AGING_TIME, pUserVoid, NULL);
@@ -293,7 +282,7 @@ int8_t is_network_in_shadow(tstrNetworkInfo *pstrNetworkInfo, void *pUserVoid)
        } else {
                /* Linear search for now */
                for (i = 0; i < u32LastScannedNtwrksCountShadow; i++) {
-                       if (WILC_memcmp(astrLastScannedNtwrksShadow[i].au8bssid,
+                       if (memcmp(astrLastScannedNtwrksShadow[i].au8bssid,
                                        pstrNetworkInfo->au8bssid, 6) == 0) {
                                state = i;
                                break;
@@ -305,11 +294,9 @@ int8_t is_network_in_shadow(tstrNetworkInfo *pstrNetworkInfo, void *pUserVoid)
 
 void add_network_to_shadow(tstrNetworkInfo *pstrNetworkInfo, void *pUserVoid, void *pJoinParams)
 {
-       struct WILC_WFI_priv *priv;
        int8_t ap_found = is_network_in_shadow(pstrNetworkInfo, pUserVoid);
        uint32_t ap_index = 0;
        uint8_t rssi_index = 0;
-       priv = (struct WILC_WFI_priv *)pUserVoid;
 
        if (u32LastScannedNtwrksCountShadow >= MAX_NUM_SCANNED_NETWORKS_SHADOW) {
                PRINT_D(CFG80211_DBG, "Shadow network reached its maximum limit\n");
@@ -406,7 +393,7 @@ static void CfgScanResult(tenuScanEvent enuScanEvent, tstrNetworkInfo *pstrNetwo
                                WILC_NULLCHECK(s32Error, channel);
 
                                PRINT_INFO(CFG80211_DBG, "Network Info:: CHANNEL Frequency: %d, RSSI: %d, CapabilityInfo: %d,"
-                                          "BeaconPeriod: %d \n", channel->center_freq, (((s32)pstrNetworkInfo->s8rssi) * 100),
+                                          "BeaconPeriod: %d\n", channel->center_freq, (((s32)pstrNetworkInfo->s8rssi) * 100),
                                           pstrNetworkInfo->u16CapInfo, pstrNetworkInfo->u16BeaconPeriod);
 
                                if (pstrNetworkInfo->bNewNetwork == true) {
@@ -426,7 +413,7 @@ static void CfgScanResult(tenuScanEvent enuScanEvent, tstrNetworkInfo *pstrNetwo
 
                                                /*P2P peers are sent to WPA supplicant and added to shadow table*/
 
-                                               if (!(WILC_memcmp("DIRECT-", pstrNetworkInfo->au8ssid, 7))) {
+                                               if (!(memcmp("DIRECT-", pstrNetworkInfo->au8ssid, 7))) {
                                                        bss = cfg80211_inform_bss(wiphy, channel, CFG80211_BSS_FTYPE_UNKNOWN,  pstrNetworkInfo->au8bssid, pstrNetworkInfo->u64Tsf, pstrNetworkInfo->u16CapInfo,
                                                                                  pstrNetworkInfo->u16BeaconPeriod, (const u8 *)pstrNetworkInfo->pu8IEs,
                                                                                  (size_t)pstrNetworkInfo->u16IEsLen, (((s32)pstrNetworkInfo->s8rssi) * 100), GFP_KERNEL);
@@ -441,8 +428,8 @@ static void CfgScanResult(tenuScanEvent enuScanEvent, tstrNetworkInfo *pstrNetwo
                                        u32 i;
                                        /* So this network is discovered before, we'll just update its RSSI */
                                        for (i = 0; i < priv->u32RcvdChCount; i++) {
-                                               if (WILC_memcmp(astrLastScannedNtwrksShadow[i].au8bssid, pstrNetworkInfo->au8bssid, 6) == 0) {
-                                                       PRINT_D(CFG80211_DBG, "Update RSSI of %s \n", astrLastScannedNtwrksShadow[i].au8ssid);
+                                               if (memcmp(astrLastScannedNtwrksShadow[i].au8bssid, pstrNetworkInfo->au8bssid, 6) == 0) {
+                                                       PRINT_D(CFG80211_DBG, "Update RSSI of %s\n", astrLastScannedNtwrksShadow[i].au8ssid);
 
                                                        astrLastScannedNtwrksShadow[i].s8rssi = pstrNetworkInfo->s8rssi;
                                                        astrLastScannedNtwrksShadow[i].u32TimeRcvdInScan = jiffies;
@@ -452,15 +439,14 @@ static void CfgScanResult(tenuScanEvent enuScanEvent, tstrNetworkInfo *pstrNetwo
                                }
                        }
                } else if (enuScanEvent == SCAN_EVENT_DONE)    {
-                       PRINT_D(CFG80211_DBG, "Scan Done[%p] \n", priv->dev);
-                       PRINT_D(CFG80211_DBG, "Refreshing Scan ... \n");
+                       PRINT_D(CFG80211_DBG, "Scan Done[%p]\n", priv->dev);
+                       PRINT_D(CFG80211_DBG, "Refreshing Scan ...\n");
                        refresh_scan(priv, 1, false);
 
-                       if (priv->u32RcvdChCount > 0) {
-                               PRINT_D(CFG80211_DBG, "%d Network(s) found \n", priv->u32RcvdChCount);
-                       } else {
-                               PRINT_D(CFG80211_DBG, "No networks found \n");
-                       }
+                       if (priv->u32RcvdChCount > 0)
+                               PRINT_D(CFG80211_DBG, "%d Network(s) found\n", priv->u32RcvdChCount);
+                       else
+                               PRINT_D(CFG80211_DBG, "No networks found\n");
 
                        down(&(priv->hSemScanReq));
 
@@ -477,7 +463,7 @@ static void CfgScanResult(tenuScanEvent enuScanEvent, tstrNetworkInfo *pstrNetwo
                else if (enuScanEvent == SCAN_EVENT_ABORTED) {
                        down(&(priv->hSemScanReq));
 
-                       PRINT_D(CFG80211_DBG, "Scan Aborted \n");
+                       PRINT_D(CFG80211_DBG, "Scan Aborted\n");
                        if (priv->pstrScanReq != NULL) {
 
                                update_scan_time(priv);
@@ -515,7 +501,7 @@ int WILC_WFI_Set_PMKSA(u8 *bssid, struct WILC_WFI_priv *priv)
 
        for (i = 0; i < priv->pmkid_list.numpmkid; i++) {
 
-               if (!WILC_memcmp(bssid, priv->pmkid_list.pmkidlist[i].bssid,
+               if (!memcmp(bssid, priv->pmkid_list.pmkidlist[i].bssid,
                                 ETH_ALEN)) {
                        PRINT_D(CFG80211_DBG, "PMKID successful comparison");
 
@@ -586,7 +572,7 @@ static void CfgConnectResult(tenuConnDisconnEvent enuConnDisconnEvent,
                         *  = SUCCESSFUL_STATUSCODE, while mac status is MAC_DISCONNECTED (which means something wrong happened) */
                        u16ConnectStatus = WLAN_STATUS_UNSPECIFIED_FAILURE;
                        linux_wlan_set_bssid(priv->dev, NullBssid);
-                       WILC_memset(u8ConnectedSSID, 0, ETH_ALEN);
+                       memset(u8ConnectedSSID, 0, ETH_ALEN);
 
                        /*BugID_5457*/
                        /*Invalidate u8WLANChannel value on wlan0 disconnect*/
@@ -595,7 +581,7 @@ static void CfgConnectResult(tenuConnDisconnEvent enuConnDisconnEvent,
                                u8WLANChannel = INVALID_CHANNEL;
                        #endif
 
-                       PRINT_ER("Unspecified failure: Connection status %d : MAC status = %d \n", u16ConnectStatus, u8MacStatus);
+                       PRINT_ER("Unspecified failure: Connection status %d : MAC status = %d\n", u16ConnectStatus, u8MacStatus);
                }
 
                if (u16ConnectStatus == WLAN_STATUS_SUCCESS) {
@@ -611,7 +597,7 @@ static void CfgConnectResult(tenuConnDisconnEvent enuConnDisconnEvent,
                         *  Linux kernel warning generated at the nl80211 layer */
 
                        for (i = 0; i < u32LastScannedNtwrksCountShadow; i++) {
-                               if (WILC_memcmp(astrLastScannedNtwrksShadow[i].au8bssid,
+                               if (memcmp(astrLastScannedNtwrksShadow[i].au8bssid,
                                                pstrConnectInfo->au8bssid, ETH_ALEN) == 0) {
                                        unsigned long now = jiffies;
 
@@ -652,9 +638,9 @@ static void CfgConnectResult(tenuConnDisconnEvent enuConnDisconnEvent,
                u8P2Plocalrandom = 0x01;
                u8P2Precvrandom = 0x00;
                bWilc_ie = false;
-               WILC_memset(priv->au8AssociatedBss, 0, ETH_ALEN);
+               memset(priv->au8AssociatedBss, 0, ETH_ALEN);
                linux_wlan_set_bssid(priv->dev, NullBssid);
-               WILC_memset(u8ConnectedSSID, 0, ETH_ALEN);
+               memset(u8ConnectedSSID, 0, ETH_ALEN);
 
                /*BugID_5457*/
                /*Invalidate u8WLANChannel value on wlan0 disconnect*/
@@ -675,7 +661,8 @@ static void CfgConnectResult(tenuConnDisconnEvent enuConnDisconnEvent,
                        pstrDisconnectNotifInfo->u16reason = 1;
                }
                cfg80211_disconnected(dev, pstrDisconnectNotifInfo->u16reason, pstrDisconnectNotifInfo->ie,
-                                     pstrDisconnectNotifInfo->ie_len, GFP_KERNEL);
+                                     pstrDisconnectNotifInfo->ie_len, false,
+                                     GFP_KERNEL);
 
        }
 
@@ -780,17 +767,17 @@ static int WILC_WFI_CfgScan(struct wiphy *wiphy, struct cfg80211_scan_request *r
                                        WILC_memcpy(strHiddenNetwork.pstrHiddenNetworkInfo[i].pu8ssid, request->ssids[i].ssid, request->ssids[i].ssid_len);
                                        strHiddenNetwork.pstrHiddenNetworkInfo[i].u8ssidlen = request->ssids[i].ssid_len;
                                } else {
-                                       PRINT_D(CFG80211_DBG, "Received one NULL SSID \n");
+                                       PRINT_D(CFG80211_DBG, "Received one NULL SSID\n");
                                        strHiddenNetwork.u8ssidnum -= 1;
                                }
                        }
-                       PRINT_D(CFG80211_DBG, "Trigger Scan Request \n");
+                       PRINT_D(CFG80211_DBG, "Trigger Scan Request\n");
                        s32Error = host_int_scan(priv->hWILCWFIDrv, USER_SCAN, ACTIVE_SCAN,
                                                 au8ScanChanList, request->n_channels,
                                                 (const u8 *)request->ie, request->ie_len,
                                                 CfgScanResult, (void *)priv, &strHiddenNetwork);
                } else {
-                       PRINT_D(CFG80211_DBG, "Trigger Scan Request \n");
+                       PRINT_D(CFG80211_DBG, "Trigger Scan Request\n");
                        s32Error = host_int_scan(priv->hWILCWFIDrv, USER_SCAN, ACTIVE_SCAN,
                                                 au8ScanChanList, request->n_channels,
                                                 (const u8 *)request->ie, request->ie_len,
@@ -799,7 +786,7 @@ static int WILC_WFI_CfgScan(struct wiphy *wiphy, struct cfg80211_scan_request *r
 
        } else {
                PRINT_ER("Requested num of scanned channels is greater than the max, supported"
-                        " channels \n");
+                        " channels\n");
        }
 
        if (s32Error != WILC_SUCCESS) {
@@ -852,11 +839,11 @@ static int WILC_WFI_CfgConnect(struct wiphy *wiphy, struct net_device *dev,
        } else
                pstrWFIDrv->u8P2PConnect = 0;
        #endif
-       PRINT_INFO(CFG80211_DBG, "Required SSID = %s\n , AuthType = %d \n", sme->ssid, sme->auth_type);
+       PRINT_INFO(CFG80211_DBG, "Required SSID = %s\n , AuthType = %d\n", sme->ssid, sme->auth_type);
 
        for (i = 0; i < u32LastScannedNtwrksCountShadow; i++) {
                if ((sme->ssid_len == astrLastScannedNtwrksShadow[i].u8SsidLen) &&
-                   WILC_memcmp(astrLastScannedNtwrksShadow[i].au8ssid,
+                   memcmp(astrLastScannedNtwrksShadow[i].au8ssid,
                                sme->ssid,
                                sme->ssid_len) == 0) {
                        PRINT_INFO(CFG80211_DBG, "Network with required SSID is found %s\n", sme->ssid);
@@ -868,7 +855,7 @@ static int WILC_WFI_CfgConnect(struct wiphy *wiphy, struct net_device *dev,
                        } else {
                                /* BSSID is also passed from the user, so decision of matching
                                 * should consider also this passed BSSID */
-                               if (WILC_memcmp(astrLastScannedNtwrksShadow[i].au8bssid,
+                               if (memcmp(astrLastScannedNtwrksShadow[i].au8bssid,
                                                sme->bssid,
                                                ETH_ALEN) == 0) {
                                        PRINT_INFO(CFG80211_DBG, "BSSID is passed from the user and matched\n");
@@ -898,8 +885,8 @@ static int WILC_WFI_CfgConnect(struct wiphy *wiphy, struct net_device *dev,
        }
 
        priv->WILC_WFI_wep_default = 0;
-       WILC_memset(priv->WILC_WFI_wep_key, 0, sizeof(priv->WILC_WFI_wep_key));
-       WILC_memset(priv->WILC_WFI_wep_key_len, 0, sizeof(priv->WILC_WFI_wep_key_len));
+       memset(priv->WILC_WFI_wep_key, 0, sizeof(priv->WILC_WFI_wep_key));
+       memset(priv->WILC_WFI_wep_key_len, 0, sizeof(priv->WILC_WFI_wep_key_len));
 
        PRINT_INFO(CFG80211_DBG, "sme->crypto.wpa_versions=%x\n", sme->crypto.wpa_versions);
        PRINT_INFO(CFG80211_DBG, "sme->crypto.cipher_group=%x\n", sme->crypto.cipher_group);
@@ -1057,7 +1044,7 @@ static int WILC_WFI_CfgConnect(struct wiphy *wiphy, struct net_device *dev,
                                         tenuAuth_type, pstrNetworkInfo->u8channel,
                                         pstrNetworkInfo->pJoinParams);
        if (s32Error != WILC_SUCCESS) {
-               PRINT_ER("host_int_set_join_req(): Error(%d) \n", s32Error);
+               PRINT_ER("host_int_set_join_req(): Error(%d)\n", s32Error);
                s32Error = -ENOENT;
                goto done;
        }
@@ -1181,7 +1168,7 @@ static int WILC_WFI_add_key(struct wiphy *wiphy, struct net_device *netdev, u8 k
                        break;
                }
                                #endif
-               if (WILC_memcmp(params->key, priv->WILC_WFI_wep_key[key_index], params->key_len)) {
+               if (memcmp(params->key, priv->WILC_WFI_wep_key[key_index], params->key_len)) {
                        priv->WILC_WFI_wep_default = key_index;
                        priv->WILC_WFI_wep_key_len[key_index] = params->key_len;
                        WILC_memcpy(priv->WILC_WFI_wep_key[key_index], params->key, params->key_len);
@@ -1216,8 +1203,7 @@ static int WILC_WFI_add_key(struct wiphy *wiphy, struct net_device *netdev, u8 k
 
 
 
-                       if (!pairwise)
-                       {
+                       if (!pairwise) {
                                if (params->cipher == WLAN_CIPHER_SUITE_TKIP)
                                        u8gmode = ENCRYPT_ENABLED | WPA | TKIP;
                                else
@@ -1315,8 +1301,7 @@ static int WILC_WFI_add_key(struct wiphy *wiphy, struct net_device *netdev, u8 k
 
                {
                        u8mode = 0;
-                       if (!pairwise)
-                       {
+                       if (!pairwise) {
                                if (params->key_len > 16 && params->cipher == WLAN_CIPHER_SUITE_TKIP) {
                                        /* swap the tx mic by rx mic */
                                        pu8RxMic = params->key + 24;
@@ -1503,7 +1488,7 @@ static int WILC_WFI_del_key(struct wiphy *wiphy, struct net_device *netdev,
        }
 
        if (key_index >= 0 && key_index <= 3) {
-               WILC_memset(priv->WILC_WFI_wep_key[key_index], 0, priv->WILC_WFI_wep_key_len[key_index]);
+               memset(priv->WILC_WFI_wep_key[key_index], 0, priv->WILC_WFI_wep_key_len[key_index]);
                priv->WILC_WFI_wep_key_len[key_index] = 0;
 
                PRINT_D(CFG80211_DBG, "Removing WEP key with index = %d\n", key_index);
@@ -1588,7 +1573,7 @@ static int WILC_WFI_set_default_key(struct wiphy *wiphy, struct net_device *netd
 
        priv = wiphy_priv(wiphy);
 
-       PRINT_D(CFG80211_DBG, "Setting default key with idx = %d \n", key_index);
+       PRINT_D(CFG80211_DBG, "Setting default key with idx = %d\n", key_index);
 
        if (key_index != priv->WILC_WFI_wep_default) {
 
@@ -1633,7 +1618,6 @@ static int WILC_WFI_dump_survey(struct wiphy *wiphy, struct net_device *netdev,
  *  @version   1.0
  */
 
-extern uint32_t Statisitcs_totalAcks, Statisitcs_DroppedAcks;
 static int WILC_WFI_get_station(struct wiphy *wiphy, struct net_device *dev,
                                const u8 *mac, struct station_info *sinfo)
 {
@@ -1689,7 +1673,7 @@ static int WILC_WFI_get_station(struct wiphy *wiphy, struct net_device *dev,
                 * kernel version 3.0.0
                 */
                sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL) |
-                                               BIT( NL80211_STA_INFO_RX_PACKETS) |
+                                               BIT(NL80211_STA_INFO_RX_PACKETS) |
                                                BIT(NL80211_STA_INFO_TX_PACKETS) |
                                                BIT(NL80211_STA_INFO_TX_FAILED) |
                                                BIT(NL80211_STA_INFO_TX_BITRATE);
@@ -1701,11 +1685,10 @@ static int WILC_WFI_get_station(struct wiphy *wiphy, struct net_device *dev,
                sinfo->txrate.legacy = strStatistics.u8LinkSpeed * 10;
 
 #ifdef TCP_ENHANCEMENTS
-               if ((strStatistics.u8LinkSpeed > TCP_ACK_FILTER_LINK_SPEED_THRESH) && (strStatistics.u8LinkSpeed != DEFAULT_LINK_SPEED)) {
+               if ((strStatistics.u8LinkSpeed > TCP_ACK_FILTER_LINK_SPEED_THRESH) && (strStatistics.u8LinkSpeed != DEFAULT_LINK_SPEED))
                        Enable_TCP_ACK_Filter(true);
-               } else if (strStatistics.u8LinkSpeed != DEFAULT_LINK_SPEED)   {
+               else if (strStatistics.u8LinkSpeed != DEFAULT_LINK_SPEED)
                        Enable_TCP_ACK_Filter(false);
-               }
 #endif
 
                PRINT_D(CORECONFIG_DBG, "*** stats[%d][%d][%d][%d][%d]\n", sinfo->signal, sinfo->rx_packets, sinfo->tx_packets,
@@ -1826,7 +1809,7 @@ static int WILC_WFI_set_wiphy_params(struct wiphy *wiphy, u32 changed)
        priv = wiphy_priv(wiphy);
 
        pstrCfgParamVal.u32SetCfgFlag = 0;
-       PRINT_D(CFG80211_DBG, "Setting Wiphy params \n");
+       PRINT_D(CFG80211_DBG, "Setting Wiphy params\n");
 
        if (changed & WIPHY_PARAM_RETRY_SHORT) {
                PRINT_D(CFG80211_DBG, "Setting WIPHY_PARAM_RETRY_SHORT %d\n",
@@ -1909,7 +1892,7 @@ static int WILC_WFI_set_pmksa(struct wiphy *wiphy, struct net_device *netdev,
 
 
        for (i = 0; i < priv->pmkid_list.numpmkid; i++) {
-               if (!WILC_memcmp(pmksa->bssid, priv->pmkid_list.pmkidlist[i].bssid,
+               if (!memcmp(pmksa->bssid, priv->pmkid_list.pmkidlist[i].bssid,
                                 ETH_ALEN)) {
                        /*If bssid already exists and pmkid value needs to reset*/
                        flag = PMKID_FOUND;
@@ -1959,11 +1942,11 @@ static int WILC_WFI_del_pmksa(struct wiphy *wiphy, struct net_device *netdev,
        PRINT_D(CFG80211_DBG, "Deleting PMKSA keys\n");
 
        for (i = 0; i < priv->pmkid_list.numpmkid; i++) {
-               if (!WILC_memcmp(pmksa->bssid, priv->pmkid_list.pmkidlist[i].bssid,
+               if (!memcmp(pmksa->bssid, priv->pmkid_list.pmkidlist[i].bssid,
                                 ETH_ALEN)) {
                        /*If bssid is found, reset the values*/
                        PRINT_D(CFG80211_DBG, "Reseting PMKID values\n");
-                       WILC_memset(&priv->pmkid_list.pmkidlist[i], 0, sizeof(tstrHostIFpmkid));
+                       memset(&priv->pmkid_list.pmkidlist[i], 0, sizeof(tstrHostIFpmkid));
                        flag = PMKID_FOUND;
                        break;
                }
@@ -2002,7 +1985,7 @@ static int  WILC_WFI_flush_pmksa(struct wiphy *wiphy, struct net_device *netdev)
        PRINT_D(CFG80211_DBG,  "Flushing  PMKID key values\n");
 
        /*Get cashed Pmkids and set all with zeros*/
-       WILC_memset(&priv->pmkid_list, 0, sizeof(tstrHostIFpmkidAttr));
+       memset(&priv->pmkid_list, 0, sizeof(tstrHostIFpmkidAttr));
 
        return 0;
 }
@@ -2074,11 +2057,10 @@ void WILC_WFI_CfgParseRxAction(u8 *buf, u32 len)
                }
                #endif  /* USE_SUPPLICANT_GO_INTENT */
 
-               if (buf[index] ==  CHANLIST_ATTR_ID) {
+               if (buf[index] ==  CHANLIST_ATTR_ID)
                        channel_list_attr_index = index;
-               } else if (buf[index] ==  OPERCHAN_ATTR_ID)   {
+               else if (buf[index] ==  OPERCHAN_ATTR_ID)
                        op_channel_attr_index = index;
-               }
                index += buf[index + 1] + 3; /* ID,Length byte */
        }
 
@@ -2160,11 +2142,10 @@ void WILC_WFI_CfgParseTxAction(u8 *buf, u32 len, bool bOperChan, u8 iftype)
                }
                #endif
 
-               if (buf[index] ==  CHANLIST_ATTR_ID) {
+               if (buf[index] ==  CHANLIST_ATTR_ID)
                        channel_list_attr_index = index;
-               } else if (buf[index] ==  OPERCHAN_ATTR_ID)   {
+               else if (buf[index] ==  OPERCHAN_ATTR_ID)
                        op_channel_attr_index = index;
-               }
                index += buf[index + 1] + 3; /* ID,Length byte */
        }
 
@@ -2270,11 +2251,11 @@ void WILC_WFI_p2p_rx (struct net_device *dev, uint8_t *buff, uint32_t size)
                                case PUBLIC_ACT_VENDORSPEC:
                                        /*Now we have a public action vendor specific action frame, check if its a p2p public action frame
                                         * based on the standard its should have the p2p_oui attribute with the following values 50 6f 9A 09*/
-                                       if (!WILC_memcmp(u8P2P_oui, &buff[ACTION_SUBTYPE_ID + 1], 4)) {
+                                       if (!memcmp(u8P2P_oui, &buff[ACTION_SUBTYPE_ID + 1], 4)) {
                                                if ((buff[P2P_PUB_ACTION_SUBTYPE] == GO_NEG_REQ || buff[P2P_PUB_ACTION_SUBTYPE] == GO_NEG_RSP)) {
                                                        if (!bWilc_ie) {
                                                                for (i = P2P_PUB_ACTION_SUBTYPE; i < size; i++) {
-                                                                       if (!WILC_memcmp(u8P2P_vendorspec, &buff[i], 6)) {
+                                                                       if (!memcmp(u8P2P_vendorspec, &buff[i], 6)) {
                                                                                u8P2Precvrandom = buff[i + 6];
                                                                                bWilc_ie = true;
                                                                                PRINT_D(GENERIC_DBG, "WILC Vendor specific IE:%02x\n", u8P2Precvrandom);
@@ -2287,7 +2268,7 @@ void WILC_WFI_p2p_rx (struct net_device *dev, uint8_t *buff, uint32_t size)
                                                        if ((buff[P2P_PUB_ACTION_SUBTYPE] == GO_NEG_REQ || buff[P2P_PUB_ACTION_SUBTYPE] == GO_NEG_RSP
                                                              || buff[P2P_PUB_ACTION_SUBTYPE] == P2P_INV_REQ || buff[P2P_PUB_ACTION_SUBTYPE] == P2P_INV_RSP)) {
                                                                for (i = P2P_PUB_ACTION_SUBTYPE + 2; i < size; i++) {
-                                                                       if (buff[i] == P2PELEM_ATTR_ID && !(WILC_memcmp(u8P2P_oui, &buff[i + 2], 4))) {
+                                                                       if (buff[i] == P2PELEM_ATTR_ID && !(memcmp(u8P2P_oui, &buff[i + 2], 4))) {
                                                                                WILC_WFI_CfgParseRxAction(&buff[i + 6], size - (i + 6));
                                                                                break;
                                                                        }
@@ -2351,7 +2332,7 @@ static void WILC_WFI_RemainOnChannelReady(void *pUserVoid)
        struct WILC_WFI_priv *priv;
        priv = (struct WILC_WFI_priv *)pUserVoid;
 
-       PRINT_D(HOSTINF_DBG, "Remain on channel ready \n");
+       PRINT_D(HOSTINF_DBG, "Remain on channel ready\n");
 
        priv->bInP2PlistenState = true;
 
@@ -2379,7 +2360,7 @@ static void WILC_WFI_RemainOnChannelExpired(void *pUserVoid, u32 u32SessionID)
 
        /*BugID_5477*/
        if (u32SessionID == priv->strRemainOnChanParams.u32ListenSessionID) {
-               PRINT_D(GENERIC_DBG, "Remain on channel expired \n");
+               PRINT_D(GENERIC_DBG, "Remain on channel expired\n");
 
                priv->bInP2PlistenState = false;
 
@@ -2583,7 +2564,7 @@ int WILC_WFI_mgmt_tx(struct wiphy *wiphy,
                                {
                                        /*Now we have a public action vendor specific action frame, check if its a p2p public action frame
                                         * based on the standard its should have the p2p_oui attribute with the following values 50 6f 9A 09*/
-                                       if (!WILC_memcmp(u8P2P_oui, &buf[ACTION_SUBTYPE_ID + 1], 4)) {
+                                       if (!memcmp(u8P2P_oui, &buf[ACTION_SUBTYPE_ID + 1], 4)) {
                                                /*For the connection of two WILC's connection generate a rand number to determine who will be a GO*/
                                                if ((buf[P2P_PUB_ACTION_SUBTYPE] == GO_NEG_REQ || buf[P2P_PUB_ACTION_SUBTYPE] == GO_NEG_RSP)) {
                                                        if (u8P2Plocalrandom == 1 && u8P2Precvrandom < u8P2Plocalrandom) {
@@ -2600,7 +2581,7 @@ int WILC_WFI_mgmt_tx(struct wiphy *wiphy,
 
                                                                /*Search for the p2p information information element , after the Public action subtype theres a byte for teh dialog token, skip that*/
                                                                for (i = P2P_PUB_ACTION_SUBTYPE + 2; i < len; i++) {
-                                                                       if (buf[i] == P2PELEM_ATTR_ID && !(WILC_memcmp(u8P2P_oui, &buf[i + 2], 4))) {
+                                                                       if (buf[i] == P2PELEM_ATTR_ID && !(memcmp(u8P2P_oui, &buf[i + 2], 4))) {
                                                                                if (buf[P2P_PUB_ACTION_SUBTYPE] == P2P_INV_REQ || buf[P2P_PUB_ACTION_SUBTYPE] == P2P_INV_RSP)
                                                                                        WILC_WFI_CfgParseTxAction(&mgmt_tx->buff[i + 6], len - (i + 6), true, nic->iftype);
 
@@ -2886,7 +2867,6 @@ static int WILC_WFI_change_virt_intf(struct wiphy *wiphy, struct net_device *dev
 
                /*Remove the enteries of the previously connected clients*/
                memset(priv->assoc_stainfo.au8Sta_AssociatedBss, 0, MAX_NUM_STA * ETH_ALEN);
-               #ifndef SIMULATION
                #ifdef WILC_P2P
                interface_type = nic->iftype;
                nic->iftype = STATION_MODE;
@@ -2964,7 +2944,6 @@ static int WILC_WFI_change_virt_intf(struct wiphy *wiphy, struct net_device *dev
                        host_int_set_power_mgmt(priv->hWILCWFIDrv, 1, 0);
                }
                #endif
-               #endif
                break;
 
        case NL80211_IFTYPE_P2P_CLIENT:
@@ -2979,7 +2958,6 @@ static int WILC_WFI_change_virt_intf(struct wiphy *wiphy, struct net_device *dev
                priv->wdev->iftype = type;
                nic->monitor_flag = 0;
 
-               #ifndef SIMULATION
                #ifdef WILC_P2P
 
                PRINT_D(HOSTAPD_DBG, "Downloading P2P_CONCURRENCY_FIRMWARE\n");
@@ -3053,7 +3031,6 @@ static int WILC_WFI_change_virt_intf(struct wiphy *wiphy, struct net_device *dev
                        }
                }
                #endif
-               #endif
                break;
 
        case NL80211_IFTYPE_AP:
@@ -3064,7 +3041,6 @@ static int WILC_WFI_change_virt_intf(struct wiphy *wiphy, struct net_device *dev
                nic->iftype = AP_MODE;
                PRINT_D(CORECONFIG_DBG, "priv->hWILCWFIDrv[%p]\n", priv->hWILCWFIDrv);
 
-               #ifndef SIMULATION
                PRINT_D(HOSTAPD_DBG, "Downloading AP firmware\n");
                linux_wlan_get_firmware(nic);
                #ifdef WILC_P2P
@@ -3086,7 +3062,6 @@ static int WILC_WFI_change_virt_intf(struct wiphy *wiphy, struct net_device *dev
                        }
                }
                #endif
-               #endif
                break;
 
        case NL80211_IFTYPE_P2P_GO:
@@ -3110,7 +3085,6 @@ static int WILC_WFI_change_virt_intf(struct wiphy *wiphy, struct net_device *dev
 
                PRINT_D(CORECONFIG_DBG, "priv->hWILCWFIDrv[%p]\n", priv->hWILCWFIDrv);
 
-               #ifndef SIMULATION
                #ifdef WILC_P2P
                PRINT_D(HOSTAPD_DBG, "Downloading P2P_CONCURRENCY_FIRMWARE\n");
 
@@ -3185,7 +3159,6 @@ static int WILC_WFI_change_virt_intf(struct wiphy *wiphy, struct net_device *dev
                        }
                }
                #endif
-               #endif
                break;
 
        default:
@@ -3234,7 +3207,7 @@ static int WILC_WFI_start_ap(struct wiphy *wiphy, struct net_device *dev,
        priv = wiphy_priv(wiphy);
        PRINT_D(HOSTAPD_DBG, "Starting ap\n");
 
-       PRINT_D(HOSTAPD_DBG, "Interval = %d \n DTIM period = %d\n Head length = %zu Tail length = %zu\n",
+       PRINT_D(HOSTAPD_DBG, "Interval = %d\n DTIM period = %d\n Head length = %zu Tail length = %zu\n",
                settings->beacon_interval, settings->dtim_period, beacon->head_len, beacon->tail_len);
 
        s32Error = WILC_WFI_CfgSetChannel(wiphy, &settings->chandef);
@@ -3353,7 +3326,7 @@ static int  WILC_WFI_add_station(struct wiphy *wiphy, struct net_device *dev,
 {
        s32 s32Error = WILC_SUCCESS;
        struct WILC_WFI_priv *priv;
-       tstrWILC_AddStaParam strStaParams = {{0}};
+       tstrWILC_AddStaParam strStaParams = { {0} };
        perInterface_wlan_t *nic;
 
 
@@ -3450,7 +3423,7 @@ static int WILC_WFI_del_station(struct wiphy *wiphy, struct net_device *dev,
 
 
                if (mac == NULL) {
-                       PRINT_D(HOSTAPD_DBG, "All associated stations \n");
+                       PRINT_D(HOSTAPD_DBG, "All associated stations\n");
                        s32Error = host_int_del_allstation(priv->hWILCWFIDrv, priv->assoc_stainfo.au8Sta_AssociatedBss);
                } else {
                        PRINT_D(HOSTAPD_DBG, "With mac address: %x%x%x%x%x%x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
@@ -3484,7 +3457,7 @@ static int WILC_WFI_change_station(struct wiphy *wiphy, struct net_device *dev,
 {
        s32 s32Error = WILC_SUCCESS;
        struct WILC_WFI_priv *priv;
-       tstrWILC_AddStaParam strStaParams = {{0}};
+       tstrWILC_AddStaParam strStaParams = { {0} };
        perInterface_wlan_t *nic;
 
 
@@ -3581,13 +3554,8 @@ struct wireless_dev *WILC_WFI_add_virt_intf(struct wiphy *wiphy, const char *nam
                new_ifc = WILC_WFI_init_mon_interface(name, nic->wilc_netdev);
                if (new_ifc != NULL) {
                        PRINT_D(HOSTAPD_DBG, "Setting monitor flag in private structure\n");
-                       #ifdef SIMULATION
-                       priv = netdev_priv(priv->wdev->netdev);
-                       priv->monitor_flag = 1;
-                       #else
                        nic = netdev_priv(priv->wdev->netdev);
                        nic->monitor_flag = 1;
-                       #endif
                } else
                        PRINT_ER("Error in initializing monitor interface\n ");
        }
diff --git a/drivers/staging/wilc1000/wilc_wfi_netdevice.c b/drivers/staging/wilc1000/wilc_wfi_netdevice.c
deleted file mode 100644 (file)
index ab66ce4..0000000
+++ /dev/null
@@ -1,951 +0,0 @@
-/*!
- *  @file      wilc_wfi_netdevice.c
- *  @brief     File Operations OS wrapper functionality
- *  @author    mdaftedar
- *  @sa                wilc_wfi_netdevice.h
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-
-#ifdef SIMULATION
-
-#include "wilc_wfi_cfgoperations.h"
-#include "host_interface.h"
-
-
-MODULE_AUTHOR("Mai Daftedar");
-MODULE_LICENSE("Dual BSD/GPL");
-
-
-struct net_device *WILC_WFI_devs[2];
-
-/*
- * Transmitter lockup simulation, normally disabled.
- */
-static int lockup;
-module_param(lockup, int, 0);
-
-static int timeout = WILC_WFI_TIMEOUT;
-module_param(timeout, int, 0);
-
-/*
- * Do we run in NAPI mode?
- */
-static int use_napi ;
-module_param(use_napi, int, 0);
-
-
-/*
- * A structure representing an in-flight packet.
- */
-struct WILC_WFI_packet {
-       struct WILC_WFI_packet *next;
-       struct net_device *dev;
-       int datalen;
-       u8 data[ETH_DATA_LEN];
-};
-
-
-
-int pool_size = 8;
-module_param(pool_size, int, 0);
-
-
-static void WILC_WFI_TxTimeout(struct net_device *dev);
-static void (*WILC_WFI_Interrupt)(int, void *, struct pt_regs *);
-
-/**
- *  @brief      WILC_WFI_SetupPool
- *  @details    Set up a device's packet pool.
- *  @param[in]  struct net_device *dev : Network Device Pointer
- *  @return     NONE
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-void WILC_WFI_SetupPool(struct net_device *dev)
-{
-       struct WILC_WFI_priv *priv = netdev_priv(dev);
-       int i;
-       struct WILC_WFI_packet *pkt;
-
-       priv->ppool = NULL;
-       for (i = 0; i < pool_size; i++) {
-               pkt = kmalloc (sizeof (struct WILC_WFI_packet), GFP_KERNEL);
-               if (pkt == NULL) {
-                       PRINT_D(RX_DBG, "Ran out of memory allocating packet pool\n");
-                       return;
-               }
-               pkt->dev = dev;
-               pkt->next = priv->ppool;
-               priv->ppool = pkt;
-       }
-}
-
-/**
- *  @brief      WILC_WFI_TearDownPool
- *  @details    Internal cleanup function that's called after the network device
- *              driver is unregistered
- *  @param[in]  struct net_device *dev : Network Device Driver
- *  @return     NONE
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-void WILC_WFI_TearDownPool(struct net_device *dev)
-{
-       struct WILC_WFI_priv *priv = netdev_priv(dev);
-       struct WILC_WFI_packet *pkt;
-
-       while ((pkt = priv->ppool)) {
-               priv->ppool = pkt->next;
-               kfree (pkt);
-               /* FIXME - in-flight packets ? */
-       }
-}
-
-/**
- *  @brief      WILC_WFI_GetTxBuffer
- *  @details    Buffer/pool management
- *  @param[in]  net_device *dev : Network Device Driver Structure
- *  @return     struct WILC_WFI_packet
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-struct WILC_WFI_packet *WILC_WFI_GetTxBuffer(struct net_device *dev)
-{
-       struct WILC_WFI_priv *priv = netdev_priv(dev);
-       unsigned long flags;
-       struct WILC_WFI_packet *pkt;
-
-       spin_lock_irqsave(&priv->lock, flags);
-       pkt = priv->ppool;
-       priv->ppool = pkt->next;
-       if (priv->ppool == NULL) {
-               PRINT_INFO(RX_DBG, "Pool empty\n");
-               netif_stop_queue(dev);
-       }
-       spin_unlock_irqrestore(&priv->lock, flags);
-       return pkt;
-}
-/**
- *  @brief      WILC_WFI_ReleaseBuffer
- *  @details    Buffer/pool management
- *  @param[in]  WILC_WFI_packet *pkt : Structure holding in-flight packet
- *  @return     NONE
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-void WILC_WFI_ReleaseBuffer(struct WILC_WFI_packet *pkt)
-{
-       unsigned long flags;
-       struct WILC_WFI_priv *priv = netdev_priv(pkt->dev);
-
-       spin_lock_irqsave(&priv->lock, flags);
-       pkt->next = priv->ppool;
-       priv->ppool = pkt;
-       spin_unlock_irqrestore(&priv->lock, flags);
-       if (netif_queue_stopped(pkt->dev) && pkt->next == NULL)
-               netif_wake_queue(pkt->dev);
-}
-
-/**
- *  @brief      WILC_WFI_EnqueueBuf
- *  @details    Enqueuing packets in an RX buffer queue
- *  @param[in]  WILC_WFI_packet *pkt : Structure holding in-flight packet
- *  @param[in]   net_device *dev : Network Device Driver Structure
- *  @return     NONE
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-void WILC_WFI_EnqueueBuf(struct net_device *dev, struct WILC_WFI_packet *pkt)
-{
-       unsigned long flags;
-       struct WILC_WFI_priv *priv = netdev_priv(dev);
-
-       spin_lock_irqsave(&priv->lock, flags);
-       pkt->next = priv->rx_queue;   /* FIXME - misorders packets */
-       priv->rx_queue = pkt;
-       spin_unlock_irqrestore(&priv->lock, flags);
-}
-
-/**
- *  @brief      WILC_WFI_DequeueBuf
- *  @details    Dequeuing packets from the RX buffer queue
- *  @param[in]   net_device *dev : Network Device Driver Structure
- *  @return     WILC_WFI_packet *pkt : Structure holding in-flight pac
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-struct WILC_WFI_packet *WILC_WFI_DequeueBuf(struct net_device *dev)
-{
-       struct WILC_WFI_priv *priv = netdev_priv(dev);
-       struct WILC_WFI_packet *pkt;
-       unsigned long flags;
-
-       spin_lock_irqsave(&priv->lock, flags);
-       pkt = priv->rx_queue;
-       if (pkt != NULL)
-               priv->rx_queue = pkt->next;
-       spin_unlock_irqrestore(&priv->lock, flags);
-       return pkt;
-}
-/**
- *  @brief      WILC_WFI_RxInts
- *  @details    Enable and disable receive interrupts.
- *  @param[in]   net_device *dev : Network Device Driver Structure
- *  @param[in] enable : Enable/Disable flag
- *  @return     NONE
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-static void WILC_WFI_RxInts(struct net_device *dev, int enable)
-{
-       struct WILC_WFI_priv *priv = netdev_priv(dev);
-       priv->rx_int_enabled = enable;
-}
-
-/**
- *  @brief      WILC_WFI_Open
- *  @details    Open Network Device Driver, called when the network
- *              interface is opened. It starts the interface's transmit queue.
- *  @param[in]   net_device *dev : Network Device Driver Structure
- *  @param[in] enable : Enable/Disable flag
- *  @return     int : Returns 0 upon success.
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-int WILC_WFI_Open(struct net_device *dev)
-{
-       /* request_region(), request_irq(), ....  (like fops->open) */
-       /*
-        * Assign the hardware address of the board: use "\0SNULx", where
-        * x is 0 or 1. The first byte is '\0' to avoid being a multicast
-        * address (the first byte of multicast addrs is odd).
-        */
-       memcpy(dev->dev_addr, "\0WLAN0", ETH_ALEN);
-       if (dev == WILC_WFI_devs[1])
-               dev->dev_addr[ETH_ALEN - 1]++;  /* \0SNUL1 */
-
-       WILC_WFI_InitHostInt(dev);
-       netif_start_queue(dev);
-       return 0;
-}
-/**
- *  @brief      WILC_WFI_Release
- *  @details    Release Network Device Driver, called when the network
- *              interface is stopped or brought down. This function marks
- *              the network driver as not being able to transmit
- *  @param[in]   net_device *dev : Network Device Driver Structure
- *  @return     int : Return 0 on Success.
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-int WILC_WFI_Release(struct net_device *dev)
-{
-       /* release ports, irq and such -- like fops->close */
-
-       netif_stop_queue(dev); /* can't transmit any more */
-
-       return 0;
-}
-/**
- *  @brief      WILC_WFI_Config
- *  @details    Configuration changes (passed on by ifconfig)
- *  @param[in]   net_device *dev : Network Device Driver Structure
- *  @param[in] struct ifmap *map : Contains the ioctl implementation for the
- *              network driver.
- *  @return     int : Return 0 on Success.
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-int WILC_WFI_Config(struct net_device *dev, struct ifmap *map)
-{
-       if (dev->flags & IFF_UP) /* can't act on a running interface */
-               return -EBUSY;
-
-       /* Don't allow changing the I/O address */
-       if (map->base_addr != dev->base_addr) {
-               PRINT_D(RX_DBG, KERN_WARNING "WILC_WFI: Can't change I/O address\n");
-               return -EOPNOTSUPP;
-       }
-
-       /* Allow changing the IRQ */
-       if (map->irq != dev->irq) {
-               dev->irq = map->irq;
-               /* request_irq() is delayed to open-time */
-       }
-
-       /* ignore other fields */
-       return 0;
-}
-/**
- *  @brief      WILC_WFI_Rx
- *  @details    Receive a packet: retrieve, encapsulate and pass over to upper
- *              levels
- *  @param[in]   net_device *dev : Network Device Driver Structure
- *  @param[in] WILC_WFI_packet :
- *  @return     NONE
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-void WILC_WFI_Rx(struct net_device *dev, struct WILC_WFI_packet *pkt)
-{
-       int i;
-       struct sk_buff *skb;
-       struct WILC_WFI_priv *priv = netdev_priv(dev);
-       s8 rssi;
-       /*
-        * The packet has been retrieved from the transmission
-        * medium. Build an skb around it, so upper layers can handle it
-        */
-
-
-       skb = dev_alloc_skb(pkt->datalen + 2);
-       if (!skb) {
-               if (printk_ratelimit())
-                       PRINT_D(RX_DBG, "WILC_WFI rx: low on mem - packet dropped\n");
-               priv->stats.rx_dropped++;
-               goto out;
-       }
-       skb_reserve(skb, 2);  /* align IP on 16B boundary */
-       memcpy(skb_put(skb, pkt->datalen), pkt->data, pkt->datalen);
-
-       if (priv->monitor_flag) {
-               PRINT_INFO(RX_DBG, "In monitor device name %s\n", dev->name);
-               priv = wiphy_priv(priv->dev->ieee80211_ptr->wiphy);
-               PRINT_D(RX_DBG, "VALUE PASSED IN OF HRWD %p\n", priv->hWILCWFIDrv);
-               /* host_int_get_rssi(priv->hWILCWFIDrv, &(rssi)); */
-               if (INFO) {
-                       for (i = 14; i < skb->len; i++)
-                               PRINT_INFO(RX_DBG, "RXdata[%d] %02x\n", i, skb->data[i]);
-               }
-               WILC_WFI_monitor_rx(dev, skb);
-               return;
-       }
-out:
-       return;
-}
-
-/**
- *  @brief      WILC_WFI_Poll
- *  @details    The poll implementation
- *  @param[in]   struct napi_struct *napi :
- *  @param[in] int budget :
- *  @return     int : Return 0 on Success.
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-static int WILC_WFI_Poll(struct napi_struct *napi, int budget)
-{
-       int npackets = 0;
-       struct sk_buff *skb;
-       struct WILC_WFI_priv  *priv = container_of(napi, struct WILC_WFI_priv, napi);
-       struct net_device  *dev =  priv->dev;
-       struct WILC_WFI_packet *pkt;
-
-       while (npackets < budget && priv->rx_queue) {
-               pkt = WILC_WFI_DequeueBuf(dev);
-               skb = dev_alloc_skb(pkt->datalen + 2);
-               if (!skb) {
-                       if (printk_ratelimit())
-                               PRINT_D(RX_DBG, "WILC_WFI: packet dropped\n");
-                       priv->stats.rx_dropped++;
-                       WILC_WFI_ReleaseBuffer(pkt);
-                       continue;
-               }
-               skb_reserve(skb, 2);  /* align IP on 16B boundary */
-               memcpy(skb_put(skb, pkt->datalen), pkt->data, pkt->datalen);
-               skb->dev = dev;
-               skb->protocol = eth_type_trans(skb, dev);
-               skb->ip_summed = CHECKSUM_UNNECESSARY;  /* don't check it */
-               netif_receive_skb(skb);
-               /* Maintain stats */
-               npackets++;
-               WILC_WFI_update_stats(priv->dev->ieee80211_ptr->wiphy, pkt->datalen, WILC_WFI_RX_PKT);
-               WILC_WFI_ReleaseBuffer(pkt);
-       }
-       /* If we processed all packets, we're done; tell the kernel and re-enable ints */
-       if (npackets < budget) {
-               napi_complete(napi);
-               WILC_WFI_RxInts(dev, 1);
-       }
-       return npackets;
-}
-
-/**
- *  @brief      WILC_WFI_Poll
- *  @details    The typical interrupt entry point
- *  @param[in]   struct napi_struct *napi :
- *  @param[in] int budget :
- *  @return     int : Return 0 on Success.
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-static void WILC_WFI_RegularInterrupt(int irq, void *dev_id, struct pt_regs *regs)
-{
-       int statusword;
-       struct WILC_WFI_priv *priv;
-       struct WILC_WFI_packet *pkt = NULL;
-       /*
-        * As usual, check the "device" pointer to be sure it is
-        * really interrupting.
-        * Then assign "struct device *dev"
-        */
-       struct net_device *dev = (struct net_device *)dev_id;
-       /* ... and check with hw if it's really ours */
-
-       /* paranoid */
-       if (!dev)
-               return;
-
-       /* Lock the device */
-       priv = netdev_priv(dev);
-       spin_lock(&priv->lock);
-
-       /* retrieve statusword: real netdevices use I/O instructions */
-       statusword = priv->status;
-       priv->status = 0;
-       if (statusword & WILC_WFI_RX_INTR) {
-               /* send it to WILC_WFI_rx for handling */
-               pkt = priv->rx_queue;
-               if (pkt) {
-                       priv->rx_queue = pkt->next;
-                       WILC_WFI_Rx(dev, pkt);
-               }
-       }
-       if (statusword & WILC_WFI_TX_INTR) {
-               /* a transmission is over: free the skb */
-               WILC_WFI_update_stats(priv->dev->ieee80211_ptr->wiphy, priv->tx_packetlen, WILC_WFI_TX_PKT);
-               dev_kfree_skb(priv->skb);
-       }
-
-       /* Unlock the device and we are done */
-       spin_unlock(&priv->lock);
-       if (pkt)
-               WILC_WFI_ReleaseBuffer(pkt);  /* Do this outside the lock! */
-       return;
-}
-/**
- *  @brief      WILC_WFI_NapiInterrupt
- *  @details    A NAPI interrupt handler
- *  @param[in]   irq:
- *  @param[in] dev_id:
- *  @param[in] pt_regs:
- *  @return     NONE
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-static void WILC_WFI_NapiInterrupt(int irq, void *dev_id, struct pt_regs *regs)
-{
-       int statusword;
-       struct WILC_WFI_priv *priv;
-
-       /*
-        * As usual, check the "device" pointer for shared handlers.
-        * Then assign "struct device *dev"
-        */
-       struct net_device *dev = (struct net_device *)dev_id;
-       /* ... and check with hw if it's really ours */
-
-       /* paranoid */
-       if (!dev)
-               return;
-
-       /* Lock the device */
-       priv = netdev_priv(dev);
-       spin_lock(&priv->lock);
-
-       /* retrieve statusword: real netdevices use I/O instructions */
-       statusword = priv->status;
-       priv->status = 0;
-       if (statusword & WILC_WFI_RX_INTR) {
-               WILC_WFI_RxInts(dev, 0);   /* Disable further interrupts */
-               napi_schedule(&priv->napi);
-       }
-       if (statusword & WILC_WFI_TX_INTR) {
-               /* a transmission is over: free the skb */
-
-               WILC_WFI_update_stats(priv->dev->ieee80211_ptr->wiphy, priv->tx_packetlen, WILC_WFI_TX_PKT);
-               dev_kfree_skb(priv->skb);
-       }
-
-       /* Unlock the device and we are done */
-       spin_unlock(&priv->lock);
-       return;
-}
-
-/**
- *  @brief      MI_WFI_HwTx
- *  @details    Transmit a packet (low level interface)
- *  @param[in]   buf:
- *  @param[in] len:
- *  @param[in] net_device *dev:
- *  @return     NONE
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-void WILC_WFI_HwTx(char *buf, int len, struct net_device *dev)
-{
-       /*
-        * This function deals with hw details. This interface loops
-        * back the packet to the other WILC_WFI interface (if any).
-        * In other words, this function implements the WILC_WFI behaviour,
-        * while all other procedures are rather device-independent
-        */
-       struct iphdr *ih;
-       struct net_device *dest;
-       struct WILC_WFI_priv *priv;
-       u32 *saddr, *daddr;
-       struct WILC_WFI_packet *tx_buffer;
-
-
-       /* I am paranoid. Ain't I? */
-       if (len < sizeof(struct ethhdr) + sizeof(struct iphdr)) {
-               PRINT_D(RX_DBG, "WILC_WFI: Hmm... packet too short (%i octets)\n",
-                       len);
-               return;
-       }
-
-       if (0) {  /* enable this conditional to look at the data */
-               int i;
-               PRINT_D(RX_DBG, "len is %i", len);
-               for (i = 14; i < len; i++)
-                       PRINT_D(RX_DBG, "TXdata[%d] %02x\n", i, buf[i] & 0xff);
-               /*   PRINT_D(RX_DBG, "\n"); */
-       }
-       /*
-        * Ethhdr is 14 bytes, but the kernel arranges for iphdr
-        * to be aligned (i.e., ethhdr is unaligned)
-        */
-       ih = (struct iphdr *)(buf + sizeof(struct ethhdr));
-       saddr = &ih->saddr;
-       daddr = &ih->daddr;
-
-       ((u8 *)saddr)[2] ^= 1;  /* change the third octet (class C) */
-       ((u8 *)daddr)[2] ^= 1;
-
-       ih->check = 0;          /* and rebuild the checksum (ip needs it) */
-       ih->check = ip_fast_csum((unsigned char *)ih, ih->ihl);
-
-
-       if (dev == WILC_WFI_devs[0])
-               PRINT_D(RX_DBG, "%08x:%05i --> %08x:%05i\n",
-                       ntohl(ih->saddr), ntohs(((struct tcphdr *)(ih + 1))->source),
-                       ntohl(ih->daddr), ntohs(((struct tcphdr *)(ih + 1))->dest));
-       else
-               PRINT_D(RX_DBG, "%08x:%05i <-- %08x:%05i\n",
-                       ntohl(ih->daddr), ntohs(((struct tcphdr *)(ih + 1))->dest),
-                       ntohl(ih->saddr), ntohs(((struct tcphdr *)(ih + 1))->source));
-
-       /*
-        * Ok, now the packet is ready for transmission: first simulate a
-        * receive interrupt on the twin device, then  a
-        * transmission-done on the transmitting device
-        */
-       dest = WILC_WFI_devs[dev == WILC_WFI_devs[0] ? 1 : 0];
-       priv = netdev_priv(dest);
-
-       tx_buffer = WILC_WFI_GetTxBuffer(dev);
-       tx_buffer->datalen = len;
-       memcpy(tx_buffer->data, buf, len);
-       WILC_WFI_EnqueueBuf(dest, tx_buffer);
-       if (priv->rx_int_enabled) {
-               priv->status |= WILC_WFI_RX_INTR;
-               WILC_WFI_Interrupt(0, dest, NULL);
-       }
-
-       priv = netdev_priv(dev);
-       priv->tx_packetlen = len;
-       priv->tx_packetdata = buf;
-       priv->status |= WILC_WFI_TX_INTR;
-       if (lockup && ((priv->stats.tx_packets + 1) % lockup) == 0) {
-               /* Simulate a dropped transmit interrupt */
-               netif_stop_queue(dev);
-               PRINT_D(RX_DBG, "Simulate lockup at %ld, txp %ld\n", jiffies,
-                       (unsigned long) priv->stats.tx_packets);
-       } else
-               WILC_WFI_Interrupt(0, dev, NULL);
-
-}
-
-/**
- *  @brief      WILC_WFI_Tx
- *  @details    Transmit a packet (called by the kernel)
- *  @param[in]   sk_buff *skb:
- *  @param[in] net_device *dev:
- *  @return     NONE
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-int WILC_WFI_Tx(struct sk_buff *skb, struct net_device *dev)
-{
-       int len;
-       char *data, shortpkt[ETH_ZLEN];
-       struct WILC_WFI_priv *priv = netdev_priv(dev);
-
-       /* priv = wiphy_priv(priv->dev->ieee80211_ptr->wiphy); */
-
-       /*  if(priv->monitor_flag) */
-       /*       mac80211_hwsim_monitor_rx(skb); */
-
-
-       data = skb->data;
-       len = skb->len;
-
-       if (len < ETH_ZLEN) {
-               memset(shortpkt, 0, ETH_ZLEN);
-               memcpy(shortpkt, skb->data, skb->len);
-               len = ETH_ZLEN;
-               data = shortpkt;
-       }
-       dev->trans_start = jiffies;  /* save the timestamp */
-
-       /* Remember the skb, so we can free it at interrupt time */
-       priv->skb = skb;
-
-       /* actual deliver of data is device-specific, and not shown here */
-       WILC_WFI_HwTx(data, len, dev);
-
-       return 0;  /* Our simple device can not fail */
-}
-
-/**
- *  @brief      WILC_WFI_TxTimeout
- *  @details    Deal with a transmit timeout.
- *  @param[in] net_device *dev:
- *  @return     NONE
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-void WILC_WFI_TxTimeout(struct net_device *dev)
-{
-       struct WILC_WFI_priv *priv = netdev_priv(dev);
-
-       PRINT_D(RX_DBG, "Transmit timeout at %ld, latency %ld\n", jiffies,
-               jiffies - dev->trans_start);
-       /* Simulate a transmission interrupt to get things moving */
-       priv->status = WILC_WFI_TX_INTR;
-       WILC_WFI_Interrupt(0, dev, NULL);
-       priv->stats.tx_errors++;
-       netif_wake_queue(dev);
-       return;
-}
-
-/**
- *  @brief      WILC_WFI_Ioctl
- *  @details    Ioctl commands
- *  @param[in] net_device *dev:
- *  @param[in] ifreq *rq
- *  @param[in] cmd:
- *  @return     int : Return 0 on Success
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-int WILC_WFI_Ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
-{
-       PRINT_D(RX_DBG, "ioctl\n");
-       return 0;
-}
-
-/**
- *  @brief      WILC_WFI_Stat
- *  @details    Return statistics to the caller
- *  @param[in] net_device *dev:
- *  @return     WILC_WFI_Stats : Return net_device_stats stucture with the
- *              network device driver private data contents.
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-struct net_device_stats *WILC_WFI_Stats(struct net_device *dev)
-{
-       struct WILC_WFI_priv *priv = netdev_priv(dev);
-       return &priv->stats;
-}
-
-/**
- *  @brief      WILC_WFI_RebuildHeader
- *  @details    This function is called to fill up an eth header, since arp is not
- *              available on the interface
- *  @param[in] sk_buff *skb:
- *  @return     int : Return 0 on Success
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-int WILC_WFI_RebuildHeader(struct sk_buff *skb)
-{
-       struct ethhdr *eth = (struct ethhdr *) skb->data;
-       struct net_device *dev = skb->dev;
-
-       memcpy(eth->h_source, dev->dev_addr, dev->addr_len);
-       memcpy(eth->h_dest, dev->dev_addr, dev->addr_len);
-       eth->h_dest[ETH_ALEN - 1]   ^= 0x01;  /* dest is us xor 1 */
-       return 0;
-}
-/**
- *  @brief      WILC_WFI_RebuildHeader
- *  @details    This function is called to fill up an eth header, since arp is not
- *              available on the interface
- *  @param[in] sk_buff *skb:
- *  @param[in] struct net_device *dev:
- *  @param[in]   unsigned short type:
- *  @param[in]   const void *saddr,
- *  @param[in]   const void *daddr:
- *  @param[in]          unsigned int len
- *  @return     int : Return 0 on Success
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-int WILC_WFI_Header(struct sk_buff *skb, struct net_device *dev,
-                   unsigned short type, const void *daddr, const void *saddr,
-                   unsigned int len)
-{
-       struct ethhdr *eth = (struct ethhdr *)skb_push(skb, ETH_HLEN);
-
-       eth->h_proto = htons(type);
-       memcpy(eth->h_source, saddr ? saddr : dev->dev_addr, dev->addr_len);
-       memcpy(eth->h_dest,   daddr ? daddr : dev->dev_addr, dev->addr_len);
-       eth->h_dest[ETH_ALEN - 1]   ^= 0x01;  /* dest is us xor 1 */
-       return dev->hard_header_len;
-}
-
-/**
- *  @brief      WILC_WFI_ChangeMtu
- *  @details    The "change_mtu" method is usually not needed.
- *              If you need it, it must be like this.
- *  @param[in] net_device *dev : Network Device Driver Structure
- *  @param[in] new_mtu :
- *  @return     int : Returns 0 on Success.
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-int WILC_WFI_ChangeMtu(struct net_device *dev, int new_mtu)
-{
-       unsigned long flags;
-       struct WILC_WFI_priv *priv = netdev_priv(dev);
-       spinlock_t *lock = &priv->lock;
-
-       /* check ranges */
-       if ((new_mtu < 68) || (new_mtu > 1500))
-               return -EINVAL;
-       /*
-        * Do anything you need, and the accept the value
-        */
-       spin_lock_irqsave(lock, flags);
-       dev->mtu = new_mtu;
-       spin_unlock_irqrestore(lock, flags);
-       return 0;  /* success */
-}
-
-static const struct header_ops WILC_WFI_header_ops = {
-       .create  = WILC_WFI_Header,
-       .rebuild = WILC_WFI_RebuildHeader,
-       .cache   = NULL,   /* disable caching */
-};
-
-
-static const struct net_device_ops WILC_WFI_netdev_ops = {
-       .ndo_open = WILC_WFI_Open,
-       .ndo_stop = WILC_WFI_Release,
-       .ndo_set_config = WILC_WFI_Config,
-       .ndo_start_xmit = WILC_WFI_Tx,
-       .ndo_do_ioctl = WILC_WFI_Ioctl,
-       .ndo_get_stats = WILC_WFI_Stats,
-       .ndo_change_mtu = WILC_WFI_ChangeMtu,
-       .ndo_tx_timeout = WILC_WFI_TxTimeout,
-};
-
-/**
- *  @brief      WILC_WFI_Init
- *  @details    The init function (sometimes called probe).
- *              It is invoked by register_netdev()
- *  @param[in] net_device *dev:
- *  @return     NONE
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-void WILC_WFI_Init(struct net_device *dev)
-{
-       struct WILC_WFI_priv *priv;
-
-
-       /*
-        * Then, assign other fields in dev, using ether_setup() and some
-        * hand assignments
-        */
-       ether_setup(dev);  /* assign some of the fields */
-       /* 1- Allocate space */
-
-       dev->netdev_ops      = &WILC_WFI_netdev_ops;
-       dev->header_ops      = &WILC_WFI_header_ops;
-       dev->watchdog_timeo = timeout;
-       /* keep the default flags, just add NOARP */
-       dev->flags           |= IFF_NOARP;
-       dev->features        |= NETIF_F_NO_CSUM;
-       /*
-        * Then, initialize the priv field. This encloses the statistics
-        * and a few private fields.
-        */
-       priv = netdev_priv(dev);
-       memset(priv, 0, sizeof(struct WILC_WFI_priv));
-       priv->dev = dev;
-       netif_napi_add(dev, &priv->napi, WILC_WFI_Poll, 2);
-       /* The last parameter above is the NAPI "weight". */
-       spin_lock_init(&priv->lock);
-       WILC_WFI_RxInts(dev, 1);           /* enable receive interrupts */
-       WILC_WFI_SetupPool(dev);
-}
-
-/**
- *  @brief      WILC_WFI_Stat
- *  @details    Return statistics to the caller
- *  @param[in] net_device *dev:
- *  @return     WILC_WFI_Stats : Return net_device_stats stucture with the
- *              network device driver private data contents.
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-
-void WILC_WFI_Cleanup(void)
-{
-       int i;
-       struct WILC_WFI_priv *priv[2];
-
-       /*if(hwsim_mon!=NULL)
-        * {
-        *      PRINT_D(RX_DBG, "Freeing monitor interface\n");
-        *      unregister_netdev(hwsim_mon);
-        *      free_netdev(hwsim_mon);
-        * }*/
-       for (i = 0; i < 2; i++) {
-               priv[i] = netdev_priv(WILC_WFI_devs[i]);
-
-               if (WILC_WFI_devs[i]) {
-                       PRINT_D(RX_DBG, "Unregistering\n");
-                       unregister_netdev(WILC_WFI_devs[i]);
-                       WILC_WFI_TearDownPool(WILC_WFI_devs[i]);
-                       free_netdev(WILC_WFI_devs[i]);
-                       PRINT_D(RX_DBG, "[NETDEV]Stopping interface\n");
-                       WILC_WFI_DeInitHostInt(WILC_WFI_devs[i]);
-                       WILC_WFI_WiphyFree(WILC_WFI_devs[i]);
-               }
-
-       }
-       /* unregister_netdev(hwsim_mon); */
-       WILC_WFI_deinit_mon_interface();
-       return;
-}
-
-
-void StartConfigSim(void);
-
-
-
-
-
-
-
-/**
- *  @brief      WILC_WFI_Stat
- *  @details    Return statistics to the caller
- *  @param[in] net_device *dev:
- *  @return     WILC_WFI_Stats : Return net_device_stats stucture with the
- *              network device driver private data contents.
- *  @author    mdaftedar
- *  @date      01 MAR 2012
- *  @version   1.0
- */
-int WILC_WFI_InitModule(void)
-{
-
-       int result, i, ret = -ENOMEM;
-       struct WILC_WFI_priv *priv[2], *netpriv;
-       struct wireless_dev *wdev;
-       WILC_WFI_Interrupt = use_napi ? WILC_WFI_NapiInterrupt : WILC_WFI_RegularInterrupt;
-       char buf[IFNAMSIZ];
-
-       for (i = 0; i < 2; i++) {
-
-               /* Allocate the net devices */
-               WILC_WFI_devs[i] = alloc_netdev(sizeof(struct WILC_WFI_priv), "wlan%d",
-                                               WILC_WFI_Init);
-               if (WILC_WFI_devs[i] == NULL)
-                       goto out;
-               /* priv[i] = netdev_priv(WILC_WFI_devs[i]); */
-
-               wdev = WILC_WFI_WiphyRegister(WILC_WFI_devs[i]);
-               WILC_WFI_devs[i]->ieee80211_ptr = wdev;
-               netpriv = netdev_priv(WILC_WFI_devs[i]);
-               netpriv->dev->ieee80211_ptr = wdev;
-               netpriv->dev->ml_priv = netpriv;
-               wdev->netdev = netpriv->dev;
-
-               /*Registering the net device*/
-               result = register_netdev(WILC_WFI_devs[i]);
-               if (result)
-                       PRINT_D(RX_DBG, "WILC_WFI: error %i registering device \"%s\"\n",
-                               result, WILC_WFI_devs[i]->name);
-               else
-                       ret = 0;
-       }
-
-
-       /*init atmel driver */
-       priv[0] = netdev_priv(WILC_WFI_devs[0]);
-       priv[1] = netdev_priv(WILC_WFI_devs[1]);
-
-       if (priv[1]->dev->ieee80211_ptr->wiphy->interface_modes && BIT(NL80211_IFTYPE_MONITOR)) {
-               /* snprintf(buf, IFNAMSIZ, "mon.%s",  priv[1]->dev->name); */
-               /*      WILC_WFI_init_mon_interface(); */
-               /*      priv[1]->monitor_flag = 1; */
-
-       }
-       priv[0]->bCfgScanning = false;
-       priv[0]->u32RcvdChCount = 0;
-
-       WILC_memset(priv[0]->au8AssociatedBss, 0xFF, ETH_ALEN);
-
-
-       /* ret = host_int_init(&priv[0]->hWILCWFIDrv); */
-       /*copy handle to the other driver*/
-       /* priv[1]->hWILCWFIDrv = priv[0]->hWILCWFIDrv; */
-       if (ret) {
-               PRINT_ER("Error Init Driver\n");
-       }
-
-
-out:
-       if (ret)
-               WILC_WFI_Cleanup();
-       return ret;
-
-
-}
-
-
-module_init(WILC_WFI_InitModule);
-module_exit(WILC_WFI_Cleanup);
-
-#endif
index d413fa3861c0187adaf704121f092cfb706d9129..0dfe108e7cf80759aead77cb844cbb273c7cd55f 100644 (file)
@@ -77,12 +77,12 @@ struct WILC_WFI_stats {
 #define num_reg_frame 2
 /*
  * If you use RX_BH_WORK_QUEUE on LPC3131: You may lose the first interrupt on
- * LPC3131 which is important to get the MAC start status when you are blocked inside
- * linux_wlan_firmware_download() which blocks mac_open().
+ * LPC3131 which is important to get the MAC start status when you are blocked
+ * inside linux_wlan_firmware_download() which blocks mac_open().
  */
-#if defined (NM73131_0_BOARD)
+#if defined(NM73131_0_BOARD)
  #define RX_BH_TYPE  RX_BH_KTHREAD
-#elif defined (PANDA_BOARD)
+#elif defined(PANDA_BOARD)
  #define RX_BH_TYPE  RX_BH_THREADED_IRQ
 #else
  #define RX_BH_TYPE  RX_BH_KTHREAD
@@ -95,6 +95,7 @@ struct wilc_wfi_key {
        int seq_len;
        u32 cipher;
 };
+
 struct wilc_wfi_wep_key {
        u8 *key;
        u8 key_len;
@@ -150,7 +151,8 @@ struct WILC_WFI_priv {
        u8 WILC_WFI_wep_default;
        u8 WILC_WFI_wep_key[4][WLAN_KEY_LEN_WEP104];
        u8 WILC_WFI_wep_key_len[4];
-       struct net_device *real_ndev;   /* The real interface that the monitor is on */
+       /* The real interface that the monitor is on */
+       struct net_device *real_ndev;
        struct wilc_wfi_key *wilc_gtk[MAX_NUM_STA];
        struct wilc_wfi_key *wilc_ptk[MAX_NUM_STA];
        u8 wilc_groupkey;
index 3af91f770485d67f18cb6df2b590d3515192aafa..192f36cde59e61838b0d16ea9f2a9b454b18f4df 100644 (file)
@@ -16,7 +16,6 @@
  *      Global
  *
  ********************************************/
-extern unsigned int int_clrd;
 extern wilc_hif_func_t hif_sdio;
 extern wilc_hif_func_t hif_spi;
 extern wilc_cfg_func_t mac_cfg;
@@ -24,8 +23,6 @@ extern wilc_cfg_func_t mac_cfg;
 extern u8 g_wilc_initialized; /* AMR : 0422 RK3026 Crash issue */
 #endif
 extern void WILC_WFI_mgmt_rx(uint8_t *buff, uint32_t size);
-extern void frmw_to_linux(uint8_t *buff, uint32_t size);
-int sdio_xfer_cnt(void);
 uint32_t wilc_get_chipid(uint8_t update);
 u16 Set_machw_change_vir_if(bool bValue);
 
@@ -118,11 +115,10 @@ static void wilc_debug(uint32_t flag, char *fmt, ...)
 {
        char buf[256];
        va_list args;
-       int len;
 
        if (flag & dbgflag) {
                va_start(args, fmt);
-               len = vsprintf(buf, fmt, args);
+               vsprintf(buf, fmt, args);
                va_end(args);
 
                if (g_wlan.os_func.os_debug)
@@ -292,13 +288,13 @@ uint32_t Statisitcs_totalAcks = 0, Statisitcs_DroppedAcks = 0;
 
 #ifdef TCP_ACK_FILTER
 struct Ack_session_info;
-typedef struct Ack_session_info {
+struct Ack_session_info {
        uint32_t Ack_seq_num;
        uint32_t Bigger_Ack_num;
        uint16_t src_port;
        uint16_t dst_port;
        uint16_t status;
-} Ack_session_info_t;
+};
 
 typedef struct {
        uint32_t ack_num;
@@ -319,7 +315,7 @@ struct Ack_session_info *Alloc_head;
 
 #define MAX_TCP_SESSION                25
 #define MAX_PENDING_ACKS               256
-Ack_session_info_t Acks_keep_track_info[2 * MAX_TCP_SESSION];
+struct Ack_session_info Acks_keep_track_info[2 * MAX_TCP_SESSION];
 Pending_Acks_info_t Pending_Acks_info[MAX_PENDING_ACKS];
 
 uint32_t PendingAcks_arrBase;
@@ -451,7 +447,7 @@ static int wilc_wlan_txq_filter_dup_tcp_ack(void)
        for (i = PendingAcks_arrBase; i < (PendingAcks_arrBase + Pending_Acks); i++) {
                if (Pending_Acks_info[i].ack_num < Acks_keep_track_info[Pending_Acks_info[i].Session_index].Bigger_Ack_num) {
                        struct txq_entry_t *tqe;
-                       PRINT_D(TCP_ENH, "DROP ACK: %u \n", Pending_Acks_info[i].ack_num);
+                       PRINT_D(TCP_ENH, "DROP ACK: %u\n", Pending_Acks_info[i].ack_num);
                        tqe = Pending_Acks_info[i].txqe;
                        if (tqe) {
                                wilc_wlan_txq_remove(tqe);
@@ -467,11 +463,10 @@ static int wilc_wlan_txq_filter_dup_tcp_ack(void)
        Pending_Acks = 0;
        Opened_TCP_session = 0;
 
-       if (PendingAcks_arrBase == 0) {
+       if (PendingAcks_arrBase == 0)
                PendingAcks_arrBase = MAX_TCP_SESSION;
-       } else {
+       else
                PendingAcks_arrBase = 0;
-       }
 
 
        p->os_func.os_spin_unlock(p->txq_spinlock, &p->txq_spinlock_flags);
@@ -996,7 +991,7 @@ static int wilc_wlan_handle_txq(uint32_t *pu32TxqCount)
                                /**
                                 *      wait for vmm table is ready
                                 **/
-                               PRINT_WRN(GENERIC_DBG, "[wilc txq]: warn, vmm table not clear yet, wait... \n");
+                               PRINT_WRN(GENERIC_DBG, "[wilc txq]: warn, vmm table not clear yet, wait...\n");
                                release_bus(RELEASE_ALLOW_SLEEP);
                                p->os_func.os_sleep(3); /* wait 3 ms */
                                acquire_bus(ACQUIRE_AND_WAKEUP);
@@ -1063,7 +1058,7 @@ static int wilc_wlan_handle_txq(uint32_t *pu32TxqCount)
                        }
 
                        if (entries == 0) {
-                               PRINT_WRN(GENERIC_DBG, "[wilc txq]: no more buffer in the chip (reg: %08x), retry later [[ %d, %x ]] \n", reg, i, vmm_table[i - 1]);
+                               PRINT_WRN(GENERIC_DBG, "[wilc txq]: no more buffer in the chip (reg: %08x), retry later [[ %d, %x ]]\n", reg, i, vmm_table[i - 1]);
 
                                /* undo the transaction. */
                                ret = p->hif_func.hif_read_reg(WILC_HOST_TX_CTRL, &reg);
@@ -1114,11 +1109,10 @@ static int wilc_wlan_handle_txq(uint32_t *pu32TxqCount)
                                /*Bug3959: transmitting mgmt frames received from host*/
                                /*setting bit 30 in the host header to indicate mgmt frame*/
 #ifdef WILC_AP_EXTERNAL_MLME
-                               if (tqe->type == WILC_MGMT_PKT) {
+                               if (tqe->type == WILC_MGMT_PKT)
                                        header |= (1 << 30);
-                               } else {
+                               else
                                        header &= ~(1 << 30);
-                               }
 #endif
 
 #ifdef BIG_ENDIAN
@@ -1213,7 +1207,7 @@ static void wilc_wlan_handle_rxq(void)
 
        do {
                if (p->quit) {
-                       PRINT_D(RX_DBG, "exit 1st do-while due to Clean_UP function \n");
+                       PRINT_D(RX_DBG, "exit 1st do-while due to Clean_UP function\n");
                        p->os_func.os_signal(p->cfg_wait);
                        break;
                }
@@ -1330,7 +1324,7 @@ static void wilc_wlan_handle_rxq(void)
        } while (1);
 
        p->rxq_exit = 1;
-       PRINT_D(RX_DBG, "THREAD: Exiting RX thread \n");
+       PRINT_D(RX_DBG, "THREAD: Exiting RX thread\n");
        return;
 }
 
@@ -1545,11 +1539,10 @@ static int wilc_wlan_firmware_download(const uint8_t *buffer, uint32_t buffer_si
                acquire_bus(ACQUIRE_ONLY);
                offset += 8;
                while (((int)size) && (offset < buffer_size)) {
-                       if (size <= blksz) {
+                       if (size <= blksz)
                                size2 = size;
-                       } else {
+                       else
                                size2 = blksz;
-                       }
                        /* Copy firmware into a DMA coherent buffer */
                        memcpy(dma_buffer, &buffer[offset], size2);
                        ret = p->hif_func.hif_block_tx(addr, dma_buffer, size2);
@@ -1782,7 +1775,7 @@ static int wilc_wlan_stop(void)
 /******************************************************************************/
        reg = ((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 8) | (1 << 9) | (1 << 26) | (1 << 29) | (1 << 30) | (1 << 31)); /**/
        /**/
-       ret = p->hif_func.hif_write_reg(WILC_GLB_RESET_0, reg);                                 /**/
+       p->hif_func.hif_write_reg(WILC_GLB_RESET_0, reg);                                 /**/
        reg = ~(1 << 10);                                                                                               /**/
        /**/
        ret = p->hif_func.hif_write_reg(WILC_GLB_RESET_0, reg);                                 /**/
@@ -2306,11 +2299,10 @@ u16 Set_machw_change_vir_if(bool bValue)
                PRINT_ER("Error while Reading reg WILC_CHANGING_VIR_IF\n");
        }
 
-       if (bValue) {
+       if (bValue)
                reg |= (BIT31);
-       } else {
+       else
                reg &= ~(BIT31);
-       }
 
        ret = (&g_wlan)->hif_func.hif_write_reg(WILC_CHANGING_VIR_IF, reg);
 
index 3cffe55b3a93915c02e84540ba5eec3af769f822..c10dffe4633ea1a15bae95993e7ce8662af103d2 100644 (file)
@@ -513,7 +513,6 @@ static int wilc_wlan_cfg_indicate_rx(uint8_t *frame, int size, wilc_cfg_rsp_t *r
        int ret = 1;
        uint8_t msg_type;
        uint8_t msg_id;
-       uint16_t msg_len;
        #ifdef WILC_FULLY_HOSTING_AP
        u32 *ptru32Frame;
        bool bStatus = frame[2];
@@ -528,11 +527,6 @@ static int wilc_wlan_cfg_indicate_rx(uint8_t *frame, int size, wilc_cfg_rsp_t *r
 
        msg_type = frame[0];
        msg_id = frame[1];      /* seq no */
-#ifdef BIG_ENDIAN
-       msg_len = (frame[2] << 8) | frame[3];
-#else
-       msg_len = (frame[3] << 8) | frame[2];
-#endif
        frame += 4;
        size -= 4;
 
@@ -557,7 +551,7 @@ static int wilc_wlan_cfg_indicate_rx(uint8_t *frame, int size, wilc_cfg_rsp_t *r
 
        case 'L':
 #ifndef SWITCH_LOG_TERMINAL
-               PRINT_ER("Unexpected firmware log message received \n");
+               PRINT_ER("Unexpected firmware log message received\n");
 #else
                PRINT_D(FIRM_DBG, "\nFIRMWARE LOGS :\n<<\n%s\n>>\n", frame);
                break;
@@ -572,18 +566,18 @@ static int wilc_wlan_cfg_indicate_rx(uint8_t *frame, int size, wilc_cfg_rsp_t *r
 #endif
 /*bug3819:*/
        case 'S':
-               PRINT_INFO(RX_DBG, "Scan Notification Received \n");
+               PRINT_INFO(RX_DBG, "Scan Notification Received\n");
                host_int_ScanCompleteReceived(frame - 4, size + 4);
                break;
 
 #ifdef WILC_FULLY_HOSTING_AP
        case 'T':
-               PRINT_INFO(RX_DBG, "TBTT Notification Received \n");
+               PRINT_INFO(RX_DBG, "TBTT Notification Received\n");
                process_tbtt_isr();
                break;
 
        case 'A':
-               PRINT_INFO(RX_DBG, "HOSTAPD ACK Notification Received \n");
+               PRINT_INFO(RX_DBG, "HOSTAPD ACK Notification Received\n");
                WILC_mgm_HOSTAPD_ACK(ptru32Frame, bStatus);
                break;
 #endif
index 8ed51e3851187d4b206c4e9c321a70de88b3d50d..8735a6a64d89f2f53803eb9753ee17eda59c2e4a 100644 (file)
@@ -43,8 +43,8 @@
  ********************************************/
 
 #define HIF_SDIO           (0)
-#define HIF_SPI            (1 << 0)
-#define HIF_SDIO_GPIO_IRQ  (1 << 2)
+#define HIF_SPI            BIT(0)
+#define HIF_SDIO_GPIO_IRQ  BIT(2)
 
 
 /********************************************
index 55e5199053468f013d2113e574d41044dd3f96ae..964a843c4521b4253cc920be41e279c80bc5be73 100644 (file)
@@ -1,4 +1,4 @@
 obj-$(CONFIG_FB_XGI)  += xgifb.o
 
-xgifb-y := XGI_main_26.o vb_init.o vb_setmode.o vb_util.o
+xgifb-y := XGI_main_26.o vb_init.o vb_setmode.o
 
index 943d463cf1931c5519fd4b403cb840e864c02020..5a6251a4511246756d2c6105fd9a382df51c1b42 100644 (file)
@@ -18,8 +18,8 @@
 #define Index_CR_GPIO_Reg1 0x48
 #define Index_CR_GPIO_Reg3 0x4a
 
-#define GPIOG_EN    (1<<6)
-#define GPIOG_READ  (1<<1)
+#define GPIOG_EN    BIT(6)
+#define GPIOG_READ  BIT(1)
 
 static char *forcecrt2type;
 static char *mode;
@@ -29,7 +29,7 @@ static unsigned int refresh_rate;
 /* -------------------- Macro definitions ---------------------------- */
 
 #ifdef DEBUG
-static void dumpVGAReg(void)
+static void dumpVGAReg(struct xgifb_video_info *xgifb_info)
 {
        u8 i, reg;
 
@@ -48,7 +48,7 @@ static void dumpVGAReg(void)
        }
 }
 #else
-static inline void dumpVGAReg(void)
+static inline void dumpVGAReg(struct xgifb_video_info *xgifb_info)
 {
 }
 #endif
@@ -1073,7 +1073,7 @@ static int XGIfb_do_set_var(struct fb_var_screeninfo *var, int isactive,
        }
        XGIfb_bpp_to_var(xgifb_info, var); /*update ARGB info*/
 
-       dumpVGAReg();
+       dumpVGAReg(xgifb_info);
        return 0;
 }
 
@@ -2019,7 +2019,7 @@ static int xgifb_probe(struct pci_dev *pdev,
                goto error_mtrr;
        }
 
-       dumpVGAReg();
+       dumpVGAReg(xgifb_info);
 
        return 0;
 
diff --git a/drivers/staging/xgifb/vb_util.c b/drivers/staging/xgifb/vb_util.c
deleted file mode 100644 (file)
index be3437c..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-#include "vgatypes.h"
-#include "vb_util.h"
-
-void xgifb_reg_set(unsigned long port, u8 index, u8 data)
-{
-       outb(index, port);
-       outb(data, port + 1);
-}
-
-u8 xgifb_reg_get(unsigned long port, u8 index)
-{
-       outb(index, port);
-       return inb(port + 1);
-}
-
-void xgifb_reg_and_or(unsigned long port, u8 index,
-               unsigned data_and, unsigned data_or)
-{
-       u8 temp;
-
-       temp = xgifb_reg_get(port, index); /* XGINew_Part1Port index 02 */
-       temp = (temp & data_and) | data_or;
-       xgifb_reg_set(port, index, temp);
-}
-
-void xgifb_reg_and(unsigned long port, u8 index, unsigned data_and)
-{
-       u8 temp;
-
-       temp = xgifb_reg_get(port, index); /* XGINew_Part1Port index 02 */
-       temp &= data_and;
-       xgifb_reg_set(port, index, temp);
-}
-
-void xgifb_reg_or(unsigned long port, u8 index, unsigned data_or)
-{
-       u8 temp;
-
-       temp = xgifb_reg_get(port, index); /* XGINew_Part1Port index 02 */
-       temp |= data_or;
-       xgifb_reg_set(port, index, temp);
-}
index 9161de1d37ddbde59629cd35687c5c3526fc34f7..7bd395fb31b2816137332f6899bf5a9ec31e1a1b 100644 (file)
@@ -1,9 +1,43 @@
 #ifndef _VBUTIL_
 #define _VBUTIL_
-extern void xgifb_reg_set(unsigned long, u8, u8);
-extern u8 xgifb_reg_get(unsigned long, u8);
-extern void xgifb_reg_or(unsigned long, u8, unsigned);
-extern void xgifb_reg_and(unsigned long, u8, unsigned);
-extern void xgifb_reg_and_or(unsigned long, u8, unsigned, unsigned);
+static inline void xgifb_reg_set(unsigned long port, u8 index, u8 data)
+{
+       outb(index, port);
+       outb(data, port + 1);
+}
+
+static inline u8 xgifb_reg_get(unsigned long port, u8 index)
+{
+       outb(index, port);
+       return inb(port + 1);
+}
+
+static inline void xgifb_reg_and_or(unsigned long port, u8 index,
+                                   unsigned data_and, unsigned data_or)
+{
+       u8 temp;
+
+       temp = xgifb_reg_get(port, index);
+       temp = (temp & data_and) | data_or;
+       xgifb_reg_set(port, index, temp);
+}
+
+static inline void xgifb_reg_and(unsigned long port, u8 index, unsigned data_and)
+{
+       u8 temp;
+
+       temp = xgifb_reg_get(port, index);
+       temp &= data_and;
+       xgifb_reg_set(port, index, temp);
+}
+
+static inline void xgifb_reg_or(unsigned long port, u8 index, unsigned data_or)
+{
+       u8 temp;
+
+       temp = xgifb_reg_get(port, index);
+       temp |= data_or;
+       xgifb_reg_set(port, index, temp);
+}
 #endif
 
index 2d98de535e0f7374804474c58de752ffb2848aa4..230790984088fbd58e4f22de808c2184f1672bbc 100644 (file)
@@ -2475,3 +2475,17 @@ config FB_SSD1307
        help
          This driver implements support for the Solomon SSD1307
          OLED controller over I2C.
+
+config FB_SM712
+       tristate "Silicon Motion SM712 framebuffer support"
+       depends on FB && PCI
+       select FB_CFB_FILLRECT
+       select FB_CFB_COPYAREA
+       select FB_CFB_IMAGEBLIT
+       help
+         Frame buffer driver for the Silicon Motion SM710, SM712, SM721
+         and SM722 chips.
+
+         This driver is also available as a module. The module will be
+         called sm712fb. If you want to compile it as a module, say M
+         here and read <file:Documentation/kbuild/modules.txt>.
index cecea5063a802afbf3d211dce5e831d3d31e8cd5..50ed1b4fc2bf33b3d82b10d211616765839bc818 100644 (file)
@@ -131,6 +131,7 @@ obj-$(CONFIG_FB_JZ4740)               += jz4740_fb.o
 obj-$(CONFIG_FB_PUV3_UNIGFX)      += fb-puv3.o
 obj-$(CONFIG_FB_HYPERV)                  += hyperv_fb.o
 obj-$(CONFIG_FB_OPENCORES)       += ocfb.o
+obj-$(CONFIG_FB_SM712)           += sm712fb.o
 
 # Platform or fallback drivers go here
 obj-$(CONFIG_FB_UVESA)            += uvesafb.o
diff --git a/drivers/video/fbdev/sm712.h b/drivers/video/fbdev/sm712.h
new file mode 100644 (file)
index 0000000..aad1cc4
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * Silicon Motion SM712 frame buffer device
+ *
+ * Copyright (C) 2006 Silicon Motion Technology Corp.
+ * Authors:    Ge Wang, gewang@siliconmotion.com
+ *             Boyod boyod.yang@siliconmotion.com.cn
+ *
+ * Copyright (C) 2009 Lemote, Inc.
+ * Author: Wu Zhangjin, wuzhangjin@gmail.com
+ *
+ *  This file is subject to the terms and conditions of the GNU General Public
+ *  License. See the file COPYING in the main directory of this archive for
+ *  more details.
+ */
+
+#define FB_ACCEL_SMI_LYNX 88
+
+#define SCREEN_X_RES      1024
+#define SCREEN_Y_RES      600
+#define SCREEN_BPP        16
+
+/*Assume SM712 graphics chip has 4MB VRAM */
+#define SM712_VIDEOMEMORYSIZE    0x00400000
+/*Assume SM722 graphics chip has 8MB VRAM */
+#define SM722_VIDEOMEMORYSIZE    0x00800000
+
+#define dac_reg        (0x3c8)
+#define dac_val        (0x3c9)
+
+extern void __iomem *smtc_regbaseaddress;
+#define smtc_mmiowb(dat, reg)  writeb(dat, smtc_regbaseaddress + reg)
+
+#define smtc_mmiorb(reg)       readb(smtc_regbaseaddress + reg)
+
+#define SIZE_SR00_SR04      (0x04 - 0x00 + 1)
+#define SIZE_SR10_SR24      (0x24 - 0x10 + 1)
+#define SIZE_SR30_SR75      (0x75 - 0x30 + 1)
+#define SIZE_SR80_SR93      (0x93 - 0x80 + 1)
+#define SIZE_SRA0_SRAF      (0xAF - 0xA0 + 1)
+#define SIZE_GR00_GR08      (0x08 - 0x00 + 1)
+#define SIZE_AR00_AR14      (0x14 - 0x00 + 1)
+#define SIZE_CR00_CR18      (0x18 - 0x00 + 1)
+#define SIZE_CR30_CR4D      (0x4D - 0x30 + 1)
+#define SIZE_CR90_CRA7      (0xA7 - 0x90 + 1)
+
+static inline void smtc_crtcw(int reg, int val)
+{
+       smtc_mmiowb(reg, 0x3d4);
+       smtc_mmiowb(val, 0x3d5);
+}
+
+static inline void smtc_grphw(int reg, int val)
+{
+       smtc_mmiowb(reg, 0x3ce);
+       smtc_mmiowb(val, 0x3cf);
+}
+
+static inline void smtc_attrw(int reg, int val)
+{
+       smtc_mmiorb(0x3da);
+       smtc_mmiowb(reg, 0x3c0);
+       smtc_mmiorb(0x3c1);
+       smtc_mmiowb(val, 0x3c0);
+}
+
+static inline void smtc_seqw(int reg, int val)
+{
+       smtc_mmiowb(reg, 0x3c4);
+       smtc_mmiowb(val, 0x3c5);
+}
+
+static inline unsigned int smtc_seqr(int reg)
+{
+       smtc_mmiowb(reg, 0x3c4);
+       return smtc_mmiorb(0x3c5);
+}
+
+/* The next structure holds all information relevant for a specific video mode.
+ */
+
+struct modeinit {
+       int mmsizex;
+       int mmsizey;
+       int bpp;
+       int hz;
+       unsigned char init_misc;
+       unsigned char init_sr00_sr04[SIZE_SR00_SR04];
+       unsigned char init_sr10_sr24[SIZE_SR10_SR24];
+       unsigned char init_sr30_sr75[SIZE_SR30_SR75];
+       unsigned char init_sr80_sr93[SIZE_SR80_SR93];
+       unsigned char init_sra0_sraf[SIZE_SRA0_SRAF];
+       unsigned char init_gr00_gr08[SIZE_GR00_GR08];
+       unsigned char init_ar00_ar14[SIZE_AR00_AR14];
+       unsigned char init_cr00_cr18[SIZE_CR00_CR18];
+       unsigned char init_cr30_cr4d[SIZE_CR30_CR4D];
+       unsigned char init_cr90_cra7[SIZE_CR90_CRA7];
+};
+
+#ifdef __BIG_ENDIAN
+#define pal_rgb(r, g, b, val)  (((r & 0xf800) >> 8) | \
+                               ((g & 0xe000) >> 13) | \
+                               ((g & 0x1c00) << 3) | \
+                               ((b & 0xf800) >> 3))
+#define big_addr               0x800000
+#define mmio_addr              0x00800000
+#define seqw17()               smtc_seqw(0x17, 0x30)
+#define big_pixel_depth(p, d)  {if (p == 24) {p = 32; d = 32; } }
+#define big_swap(p)            ((p & 0xff00ff00 >> 8) | (p & 0x00ff00ff << 8))
+#else
+#define pal_rgb(r, g, b, val)  val
+#define big_addr               0
+#define mmio_addr              0x00c00000
+#define seqw17()               do { } while (0)
+#define big_pixel_depth(p, d)  do { } while (0)
+#define big_swap(p)            p
+#endif
diff --git a/drivers/video/fbdev/sm712fb.c b/drivers/video/fbdev/sm712fb.c
new file mode 100644 (file)
index 0000000..629bfa2
--- /dev/null
@@ -0,0 +1,1653 @@
+/*
+ * Silicon Motion SM7XX frame buffer device
+ *
+ * Copyright (C) 2006 Silicon Motion Technology Corp.
+ * Authors:  Ge Wang, gewang@siliconmotion.com
+ *          Boyod boyod.yang@siliconmotion.com.cn
+ *
+ * Copyright (C) 2009 Lemote, Inc.
+ * Author:   Wu Zhangjin, wuzhangjin@gmail.com
+ *
+ * Copyright (C) 2011 Igalia, S.L.
+ * Author:   Javier M. Mellid <jmunhoz@igalia.com>
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file COPYING in the main directory of this archive for
+ * more details.
+ *
+ * Framebuffer driver for Silicon Motion SM710, SM712, SM721 and SM722 chips
+ */
+
+#include <linux/io.h>
+#include <linux/fb.h>
+#include <linux/pci.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <linux/uaccess.h>
+#include <linux/module.h>
+#include <linux/console.h>
+#include <linux/screen_info.h>
+
+#ifdef CONFIG_PM
+#include <linux/pm.h>
+#endif
+
+#include "sm712.h"
+
+/*
+* Private structure
+*/
+struct smtcfb_info {
+       struct pci_dev *pdev;
+       struct fb_info *fb;
+       u16 chip_id;
+       u8  chip_rev_id;
+
+       void __iomem *lfb;      /* linear frame buffer */
+       void __iomem *dp_regs;  /* drawing processor control regs */
+       void __iomem *vp_regs;  /* video processor control regs */
+       void __iomem *cp_regs;  /* capture processor control regs */
+       void __iomem *mmio;     /* memory map IO port */
+
+       u_int width;
+       u_int height;
+       u_int hz;
+
+       u32 colreg[17];
+};
+
+void __iomem *smtc_regbaseaddress;     /* Memory Map IO starting address */
+
+static struct fb_var_screeninfo smtcfb_var = {
+       .xres           = 1024,
+       .yres           = 600,
+       .xres_virtual   = 1024,
+       .yres_virtual   = 600,
+       .bits_per_pixel = 16,
+       .red            = {16, 8, 0},
+       .green          = {8, 8, 0},
+       .blue           = {0, 8, 0},
+       .activate       = FB_ACTIVATE_NOW,
+       .height         = -1,
+       .width          = -1,
+       .vmode          = FB_VMODE_NONINTERLACED,
+       .nonstd         = 0,
+       .accel_flags    = FB_ACCELF_TEXT,
+};
+
+static struct fb_fix_screeninfo smtcfb_fix = {
+       .id             = "smXXXfb",
+       .type           = FB_TYPE_PACKED_PIXELS,
+       .visual         = FB_VISUAL_TRUECOLOR,
+       .line_length    = 800 * 3,
+       .accel          = FB_ACCEL_SMI_LYNX,
+       .type_aux       = 0,
+       .xpanstep       = 0,
+       .ypanstep       = 0,
+       .ywrapstep      = 0,
+};
+
+struct vesa_mode {
+       char index[6];
+       u16  lfb_width;
+       u16  lfb_height;
+       u16  lfb_depth;
+};
+
+static const struct vesa_mode vesa_mode_table[] = {
+       {"0x301", 640,  480,  8},
+       {"0x303", 800,  600,  8},
+       {"0x305", 1024, 768,  8},
+       {"0x307", 1280, 1024, 8},
+
+       {"0x311", 640,  480,  16},
+       {"0x314", 800,  600,  16},
+       {"0x317", 1024, 768,  16},
+       {"0x31A", 1280, 1024, 16},
+
+       {"0x312", 640,  480,  24},
+       {"0x315", 800,  600,  24},
+       {"0x318", 1024, 768,  24},
+       {"0x31B", 1280, 1024, 24},
+};
+
+/**********************************************************************
+                        SM712 Mode table.
+ **********************************************************************/
+static const struct modeinit vgamode[] = {
+       {
+               /*  mode#0: 640 x 480  16Bpp  60Hz */
+               640, 480, 16, 60,
+               /*  Init_MISC */
+               0xE3,
+               {       /*  Init_SR0_SR4 */
+                       0x03, 0x01, 0x0F, 0x00, 0x0E,
+               },
+               {       /*  Init_SR10_SR24 */
+                       0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
+                       0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0xC4, 0x30, 0x02, 0x01, 0x01,
+               },
+               {       /*  Init_SR30_SR75 */
+                       0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,
+                       0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,
+                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
+                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,
+                       0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,
+                       0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,
+                       0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+                       0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,
+                       0x00, 0x45, 0x30, 0x30, 0x40, 0x30,
+               },
+               {       /*  Init_SR80_SR93 */
+                       0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,
+                       0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,
+                       0x00, 0x00, 0x00, 0x00,
+               },
+               {       /*  Init_SRA0_SRAF */
+                       0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
+                       0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,
+               },
+               {       /*  Init_GR00_GR08 */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
+                       0xFF,
+               },
+               {       /*  Init_AR00_AR14 */
+                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+                       0x41, 0x00, 0x0F, 0x00, 0x00,
+               },
+               {       /*  Init_CR00_CR18 */
+                       0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,
+                       0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,
+                       0xFF,
+               },
+               {       /*  Init_CR30_CR4D */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,
+                       0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,
+                       0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,
+                       0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,
+               },
+               {       /*  Init_CR90_CRA7 */
+                       0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,
+                       0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,
+                       0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
+               },
+       },
+       {
+               /*  mode#1: 640 x 480  24Bpp  60Hz */
+               640, 480, 24, 60,
+               /*  Init_MISC */
+               0xE3,
+               {       /*  Init_SR0_SR4 */
+                       0x03, 0x01, 0x0F, 0x00, 0x0E,
+               },
+               {       /*  Init_SR10_SR24 */
+                       0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
+                       0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0xC4, 0x30, 0x02, 0x01, 0x01,
+               },
+               {       /*  Init_SR30_SR75 */
+                       0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,
+                       0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,
+                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
+                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,
+                       0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,
+                       0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,
+                       0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+                       0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,
+                       0x00, 0x45, 0x30, 0x30, 0x40, 0x30,
+               },
+               {       /*  Init_SR80_SR93 */
+                       0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,
+                       0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,
+                       0x00, 0x00, 0x00, 0x00,
+               },
+               {       /*  Init_SRA0_SRAF */
+                       0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
+                       0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,
+               },
+               {       /*  Init_GR00_GR08 */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
+                       0xFF,
+               },
+               {       /*  Init_AR00_AR14 */
+                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+                       0x41, 0x00, 0x0F, 0x00, 0x00,
+               },
+               {       /*  Init_CR00_CR18 */
+                       0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,
+                       0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,
+                       0xFF,
+               },
+               {       /*  Init_CR30_CR4D */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,
+                       0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,
+                       0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,
+                       0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,
+               },
+               {       /*  Init_CR90_CRA7 */
+                       0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,
+                       0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,
+                       0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
+               },
+       },
+       {
+               /*  mode#0: 640 x 480  32Bpp  60Hz */
+               640, 480, 32, 60,
+               /*  Init_MISC */
+               0xE3,
+               {       /*  Init_SR0_SR4 */
+                       0x03, 0x01, 0x0F, 0x00, 0x0E,
+               },
+               {       /*  Init_SR10_SR24 */
+                       0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
+                       0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0xC4, 0x30, 0x02, 0x01, 0x01,
+               },
+               {       /*  Init_SR30_SR75 */
+                       0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,
+                       0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,
+                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
+                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,
+                       0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,
+                       0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,
+                       0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+                       0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,
+                       0x00, 0x45, 0x30, 0x30, 0x40, 0x30,
+               },
+               {       /*  Init_SR80_SR93 */
+                       0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,
+                       0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,
+                       0x00, 0x00, 0x00, 0x00,
+               },
+               {       /*  Init_SRA0_SRAF */
+                       0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
+                       0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,
+               },
+               {       /*  Init_GR00_GR08 */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
+                       0xFF,
+               },
+               {       /*  Init_AR00_AR14 */
+                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+                       0x41, 0x00, 0x0F, 0x00, 0x00,
+               },
+               {       /*  Init_CR00_CR18 */
+                       0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,
+                       0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,
+                       0xFF,
+               },
+               {       /*  Init_CR30_CR4D */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,
+                       0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,
+                       0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,
+                       0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,
+               },
+               {       /*  Init_CR90_CRA7 */
+                       0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,
+                       0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,
+                       0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
+               },
+       },
+
+       {       /*  mode#2: 800 x 600  16Bpp  60Hz */
+               800, 600, 16, 60,
+               /*  Init_MISC */
+               0x2B,
+               {       /*  Init_SR0_SR4 */
+                       0x03, 0x01, 0x0F, 0x03, 0x0E,
+               },
+               {       /*  Init_SR10_SR24 */
+                       0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
+                       0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0xC4, 0x30, 0x02, 0x01, 0x01,
+               },
+               {       /*  Init_SR30_SR75 */
+                       0x34, 0x03, 0x20, 0x09, 0xC0, 0x24, 0x24, 0x24,
+                       0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x03, 0xFF,
+                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x38, 0x00, 0xFC,
+                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x24, 0x24, 0x24,
+                       0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,
+                       0x04, 0x55, 0x59, 0x24, 0x24, 0x00, 0x00, 0x24,
+                       0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+                       0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,
+                       0x02, 0x45, 0x30, 0x35, 0x40, 0x20,
+               },
+               {       /*  Init_SR80_SR93 */
+                       0x00, 0x00, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x24,
+                       0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x24, 0x24,
+                       0x00, 0x00, 0x00, 0x00,
+               },
+               {       /*  Init_SRA0_SRAF */
+                       0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
+                       0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,
+               },
+               {       /*  Init_GR00_GR08 */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
+                       0xFF,
+               },
+               {       /*  Init_AR00_AR14 */
+                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+                       0x41, 0x00, 0x0F, 0x00, 0x00,
+               },
+               {       /*  Init_CR00_CR18 */
+                       0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,
+                       0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,
+                       0xFF,
+               },
+               {       /*  Init_CR30_CR4D */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,
+                       0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,
+                       0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,
+                       0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,
+               },
+               {       /*  Init_CR90_CRA7 */
+                       0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,
+                       0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,
+                       0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,
+               },
+       },
+       {       /*  mode#3: 800 x 600  24Bpp  60Hz */
+               800, 600, 24, 60,
+               0x2B,
+               {       /*  Init_SR0_SR4 */
+                       0x03, 0x01, 0x0F, 0x03, 0x0E,
+               },
+               {       /*  Init_SR10_SR24 */
+                       0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
+                       0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0xC4, 0x30, 0x02, 0x01, 0x01,
+               },
+               {       /*  Init_SR30_SR75 */
+                       0x36, 0x03, 0x20, 0x09, 0xC0, 0x36, 0x36, 0x36,
+                       0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x03, 0xFF,
+                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
+                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x36, 0x36, 0x36,
+                       0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,
+                       0x04, 0x55, 0x59, 0x36, 0x36, 0x00, 0x00, 0x36,
+                       0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+                       0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,
+                       0x02, 0x45, 0x30, 0x30, 0x40, 0x20,
+               },
+               {       /*  Init_SR80_SR93 */
+                       0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x36,
+                       0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x36, 0x36,
+                       0x00, 0x00, 0x00, 0x00,
+               },
+               {       /*  Init_SRA0_SRAF */
+                       0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
+                       0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,
+               },
+               {       /*  Init_GR00_GR08 */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
+                       0xFF,
+               },
+               {       /*  Init_AR00_AR14 */
+                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+                       0x41, 0x00, 0x0F, 0x00, 0x00,
+               },
+               {       /*  Init_CR00_CR18 */
+                       0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,
+                       0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,
+                       0xFF,
+               },
+               {       /*  Init_CR30_CR4D */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,
+                       0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,
+                       0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,
+                       0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,
+               },
+               {       /*  Init_CR90_CRA7 */
+                       0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,
+                       0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,
+                       0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,
+               },
+       },
+       {       /*  mode#7: 800 x 600  32Bpp  60Hz */
+               800, 600, 32, 60,
+               /*  Init_MISC */
+               0x2B,
+               {       /*  Init_SR0_SR4 */
+                       0x03, 0x01, 0x0F, 0x03, 0x0E,
+               },
+               {       /*  Init_SR10_SR24 */
+                       0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
+                       0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0xC4, 0x30, 0x02, 0x01, 0x01,
+               },
+               {       /*  Init_SR30_SR75 */
+                       0x34, 0x03, 0x20, 0x09, 0xC0, 0x24, 0x24, 0x24,
+                       0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x03, 0xFF,
+                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x38, 0x00, 0xFC,
+                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x24, 0x24, 0x24,
+                       0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,
+                       0x04, 0x55, 0x59, 0x24, 0x24, 0x00, 0x00, 0x24,
+                       0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+                       0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,
+                       0x02, 0x45, 0x30, 0x35, 0x40, 0x20,
+               },
+               {       /*  Init_SR80_SR93 */
+                       0x00, 0x00, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x24,
+                       0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x24, 0x24,
+                       0x00, 0x00, 0x00, 0x00,
+               },
+               {       /*  Init_SRA0_SRAF */
+                       0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
+                       0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,
+               },
+               {       /*  Init_GR00_GR08 */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
+                       0xFF,
+               },
+               {       /*  Init_AR00_AR14 */
+                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+                       0x41, 0x00, 0x0F, 0x00, 0x00,
+               },
+               {       /*  Init_CR00_CR18 */
+                       0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,
+                       0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,
+                       0xFF,
+               },
+               {       /*  Init_CR30_CR4D */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,
+                       0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,
+                       0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,
+                       0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,
+               },
+               {       /*  Init_CR90_CRA7 */
+                       0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,
+                       0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,
+                       0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,
+               },
+       },
+       /* We use 1024x768 table to light 1024x600 panel for lemote */
+       {       /*  mode#4: 1024 x 600  16Bpp  60Hz  */
+               1024, 600, 16, 60,
+               /*  Init_MISC */
+               0xEB,
+               {       /*  Init_SR0_SR4 */
+                       0x03, 0x01, 0x0F, 0x00, 0x0E,
+               },
+               {       /*  Init_SR10_SR24 */
+                       0xC8, 0x40, 0x14, 0x60, 0x00, 0x0A, 0x17, 0x20,
+                       0x51, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0xC4, 0x30, 0x02, 0x00, 0x01,
+               },
+               {       /*  Init_SR30_SR75 */
+                       0x22, 0x03, 0x24, 0x09, 0xC0, 0x22, 0x22, 0x22,
+                       0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x03, 0xFF,
+                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
+                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x22, 0x22, 0x22,
+                       0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
+                       0x00, 0x60, 0x59, 0x22, 0x22, 0x00, 0x00, 0x22,
+                       0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+                       0x50, 0x03, 0x16, 0x02, 0x0D, 0x82, 0x09, 0x02,
+                       0x04, 0x45, 0x3F, 0x30, 0x40, 0x20,
+               },
+               {       /*  Init_SR80_SR93 */
+                       0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
+                       0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
+                       0x00, 0x00, 0x00, 0x00,
+               },
+               {       /*  Init_SRA0_SRAF */
+                       0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
+                       0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
+               },
+               {       /*  Init_GR00_GR08 */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
+                       0xFF,
+               },
+               {       /*  Init_AR00_AR14 */
+                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+                       0x41, 0x00, 0x0F, 0x00, 0x00,
+               },
+               {       /*  Init_CR00_CR18 */
+                       0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
+                       0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
+                       0xFF,
+               },
+               {       /*  Init_CR30_CR4D */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
+                       0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
+                       0xA3, 0x7F, 0x00, 0x82, 0x0b, 0x6f, 0x57, 0x00,
+                       0x5c, 0x0f, 0xE0, 0xe0, 0x7F, 0x57,
+               },
+               {       /*  Init_CR90_CRA7 */
+                       0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
+                       0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
+                       0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
+               },
+       },
+       {       /*  mode#5: 1024 x 768  24Bpp  60Hz */
+               1024, 768, 24, 60,
+               /*  Init_MISC */
+               0xEB,
+               {       /*  Init_SR0_SR4 */
+                       0x03, 0x01, 0x0F, 0x03, 0x0E,
+               },
+               {       /*  Init_SR10_SR24 */
+                       0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
+                       0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0xC4, 0x30, 0x02, 0x01, 0x01,
+               },
+               {       /*  Init_SR30_SR75 */
+                       0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
+                       0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
+                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
+                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
+                       0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
+                       0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
+                       0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+                       0x50, 0x03, 0x74, 0x14, 0x3B, 0x0D, 0x09, 0x02,
+                       0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
+               },
+               {       /*  Init_SR80_SR93 */
+                       0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
+                       0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
+                       0x00, 0x00, 0x00, 0x00,
+               },
+               {       /*  Init_SRA0_SRAF */
+                       0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
+                       0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
+               },
+               {       /*  Init_GR00_GR08 */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
+                       0xFF,
+               },
+               {       /*  Init_AR00_AR14 */
+                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+                       0x41, 0x00, 0x0F, 0x00, 0x00,
+               },
+               {       /*  Init_CR00_CR18 */
+                       0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
+                       0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
+                       0xFF,
+               },
+               {       /*  Init_CR30_CR4D */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
+                       0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
+                       0xA3, 0x7F, 0x00, 0x86, 0x15, 0x24, 0xFF, 0x00,
+                       0x01, 0x07, 0xE5, 0x20, 0x7F, 0xFF,
+               },
+               {       /*  Init_CR90_CRA7 */
+                       0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
+                       0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
+                       0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
+               },
+       },
+       {       /*  mode#4: 1024 x 768  32Bpp  60Hz */
+               1024, 768, 32, 60,
+               /*  Init_MISC */
+               0xEB,
+               {       /*  Init_SR0_SR4 */
+                       0x03, 0x01, 0x0F, 0x03, 0x0E,
+               },
+               {       /*  Init_SR10_SR24 */
+                       0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
+                       0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0xC4, 0x32, 0x02, 0x01, 0x01,
+               },
+               {       /*  Init_SR30_SR75 */
+                       0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
+                       0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
+                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
+                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
+                       0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
+                       0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
+                       0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+                       0x50, 0x03, 0x74, 0x14, 0x3B, 0x0D, 0x09, 0x02,
+                       0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
+               },
+               {       /*  Init_SR80_SR93 */
+                       0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
+                       0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
+                       0x00, 0x00, 0x00, 0x00,
+               },
+               {       /*  Init_SRA0_SRAF */
+                       0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
+                       0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
+               },
+               {       /*  Init_GR00_GR08 */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
+                       0xFF,
+               },
+               {       /*  Init_AR00_AR14 */
+                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+                       0x41, 0x00, 0x0F, 0x00, 0x00,
+               },
+               {       /*  Init_CR00_CR18 */
+                       0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
+                       0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
+                       0xFF,
+               },
+               {       /*  Init_CR30_CR4D */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
+                       0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
+                       0xA3, 0x7F, 0x00, 0x86, 0x15, 0x24, 0xFF, 0x00,
+                       0x01, 0x07, 0xE5, 0x20, 0x7F, 0xFF,
+               },
+               {       /*  Init_CR90_CRA7 */
+                       0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
+                       0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
+                       0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
+               },
+       },
+       {       /*  mode#6: 320 x 240  16Bpp  60Hz */
+               320, 240, 16, 60,
+               /*  Init_MISC */
+               0xEB,
+               {       /*  Init_SR0_SR4 */
+                       0x03, 0x01, 0x0F, 0x03, 0x0E,
+               },
+               {       /*  Init_SR10_SR24 */
+                       0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
+                       0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0xC4, 0x32, 0x02, 0x01, 0x01,
+               },
+               {       /*  Init_SR30_SR75 */
+                       0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
+                       0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
+                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
+                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
+                       0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
+                       0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
+                       0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+                       0x50, 0x03, 0x74, 0x14, 0x08, 0x43, 0x08, 0x43,
+                       0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
+               },
+               {       /*  Init_SR80_SR93 */
+                       0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
+                       0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
+                       0x00, 0x00, 0x00, 0x00,
+               },
+               {       /*  Init_SRA0_SRAF */
+                       0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
+                       0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
+               },
+               {       /*  Init_GR00_GR08 */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
+                       0xFF,
+               },
+               {       /*  Init_AR00_AR14 */
+                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+                       0x41, 0x00, 0x0F, 0x00, 0x00,
+               },
+               {       /*  Init_CR00_CR18 */
+                       0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
+                       0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
+                       0xFF,
+               },
+               {       /*  Init_CR30_CR4D */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
+                       0x00, 0x00, 0x30, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
+                       0x2E, 0x27, 0x00, 0x2b, 0x0c, 0x0F, 0xEF, 0x00,
+                       0xFe, 0x0f, 0x01, 0xC0, 0x27, 0xEF,
+               },
+               {       /*  Init_CR90_CRA7 */
+                       0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
+                       0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
+                       0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
+               },
+       },
+
+       {       /*  mode#8: 320 x 240  32Bpp  60Hz */
+               320, 240, 32, 60,
+               /*  Init_MISC */
+               0xEB,
+               {       /*  Init_SR0_SR4 */
+                       0x03, 0x01, 0x0F, 0x03, 0x0E,
+               },
+               {       /*  Init_SR10_SR24 */
+                       0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
+                       0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0xC4, 0x32, 0x02, 0x01, 0x01,
+               },
+               {       /*  Init_SR30_SR75 */
+                       0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
+                       0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
+                       0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
+                       0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
+                       0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
+                       0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
+                       0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+                       0x50, 0x03, 0x74, 0x14, 0x08, 0x43, 0x08, 0x43,
+                       0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
+               },
+               {       /*  Init_SR80_SR93 */
+                       0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
+                       0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
+                       0x00, 0x00, 0x00, 0x00,
+               },
+               {       /*  Init_SRA0_SRAF */
+                       0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
+                       0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
+               },
+               {       /*  Init_GR00_GR08 */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
+                       0xFF,
+               },
+               {       /*  Init_AR00_AR14 */
+                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+                       0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+                       0x41, 0x00, 0x0F, 0x00, 0x00,
+               },
+               {       /*  Init_CR00_CR18 */
+                       0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
+                       0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
+                       0xFF,
+               },
+               {       /*  Init_CR30_CR4D */
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
+                       0x00, 0x00, 0x30, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
+                       0x2E, 0x27, 0x00, 0x2b, 0x0c, 0x0F, 0xEF, 0x00,
+                       0xFe, 0x0f, 0x01, 0xC0, 0x27, 0xEF,
+               },
+               {       /*  Init_CR90_CRA7 */
+                       0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
+                       0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
+                       0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
+               },
+       },
+};
+
+static struct screen_info smtc_scr_info;
+
+static char *mode_option;
+
+/* process command line options, get vga parameter */
+static void __init sm7xx_vga_setup(char *options)
+{
+       int i;
+
+       if (!options || !*options)
+               return;
+
+       smtc_scr_info.lfb_width = 0;
+       smtc_scr_info.lfb_height = 0;
+       smtc_scr_info.lfb_depth = 0;
+
+       pr_debug("sm7xx_vga_setup = %s\n", options);
+
+       for (i = 0; i < ARRAY_SIZE(vesa_mode_table); i++) {
+               if (strstr(options, vesa_mode_table[i].index)) {
+                       smtc_scr_info.lfb_width  = vesa_mode_table[i].lfb_width;
+                       smtc_scr_info.lfb_height =
+                                               vesa_mode_table[i].lfb_height;
+                       smtc_scr_info.lfb_depth  = vesa_mode_table[i].lfb_depth;
+                       return;
+               }
+       }
+}
+
+static void sm712_setpalette(int regno, unsigned red, unsigned green,
+                            unsigned blue, struct fb_info *info)
+{
+       /* set bit 5:4 = 01 (write LCD RAM only) */
+       smtc_seqw(0x66, (smtc_seqr(0x66) & 0xC3) | 0x10);
+
+       smtc_mmiowb(regno, dac_reg);
+       smtc_mmiowb(red >> 10, dac_val);
+       smtc_mmiowb(green >> 10, dac_val);
+       smtc_mmiowb(blue >> 10, dac_val);
+}
+
+/* chan_to_field
+ *
+ * convert a colour value into a field position
+ *
+ * from pxafb.c
+ */
+
+static inline unsigned int chan_to_field(unsigned int chan,
+                                        struct fb_bitfield *bf)
+{
+       chan &= 0xffff;
+       chan >>= 16 - bf->length;
+       return chan << bf->offset;
+}
+
+static int smtc_blank(int blank_mode, struct fb_info *info)
+{
+       /* clear DPMS setting */
+       switch (blank_mode) {
+       case FB_BLANK_UNBLANK:
+               /* Screen On: HSync: On, VSync : On */
+               smtc_seqw(0x01, (smtc_seqr(0x01) & (~0x20)));
+               smtc_seqw(0x6a, 0x16);
+               smtc_seqw(0x6b, 0x02);
+               smtc_seqw(0x21, (smtc_seqr(0x21) & 0x77));
+               smtc_seqw(0x22, (smtc_seqr(0x22) & (~0x30)));
+               smtc_seqw(0x23, (smtc_seqr(0x23) & (~0xc0)));
+               smtc_seqw(0x24, (smtc_seqr(0x24) | 0x01));
+               smtc_seqw(0x31, (smtc_seqr(0x31) | 0x03));
+               break;
+       case FB_BLANK_NORMAL:
+               /* Screen Off: HSync: On, VSync : On   Soft blank */
+               smtc_seqw(0x01, (smtc_seqr(0x01) & (~0x20)));
+               smtc_seqw(0x6a, 0x16);
+               smtc_seqw(0x6b, 0x02);
+               smtc_seqw(0x22, (smtc_seqr(0x22) & (~0x30)));
+               smtc_seqw(0x23, (smtc_seqr(0x23) & (~0xc0)));
+               smtc_seqw(0x24, (smtc_seqr(0x24) | 0x01));
+               smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00));
+               break;
+       case FB_BLANK_VSYNC_SUSPEND:
+               /* Screen On: HSync: On, VSync : Off */
+               smtc_seqw(0x01, (smtc_seqr(0x01) | 0x20));
+               smtc_seqw(0x20, (smtc_seqr(0x20) & (~0xB0)));
+               smtc_seqw(0x6a, 0x0c);
+               smtc_seqw(0x6b, 0x02);
+               smtc_seqw(0x21, (smtc_seqr(0x21) | 0x88));
+               smtc_seqw(0x22, ((smtc_seqr(0x22) & (~0x30)) | 0x20));
+               smtc_seqw(0x23, ((smtc_seqr(0x23) & (~0xc0)) | 0x20));
+               smtc_seqw(0x24, (smtc_seqr(0x24) & (~0x01)));
+               smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00));
+               smtc_seqw(0x34, (smtc_seqr(0x34) | 0x80));
+               break;
+       case FB_BLANK_HSYNC_SUSPEND:
+               /* Screen On: HSync: Off, VSync : On */
+               smtc_seqw(0x01, (smtc_seqr(0x01) | 0x20));
+               smtc_seqw(0x20, (smtc_seqr(0x20) & (~0xB0)));
+               smtc_seqw(0x6a, 0x0c);
+               smtc_seqw(0x6b, 0x02);
+               smtc_seqw(0x21, (smtc_seqr(0x21) | 0x88));
+               smtc_seqw(0x22, ((smtc_seqr(0x22) & (~0x30)) | 0x10));
+               smtc_seqw(0x23, ((smtc_seqr(0x23) & (~0xc0)) | 0xD8));
+               smtc_seqw(0x24, (smtc_seqr(0x24) & (~0x01)));
+               smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00));
+               smtc_seqw(0x34, (smtc_seqr(0x34) | 0x80));
+               break;
+       case FB_BLANK_POWERDOWN:
+               /* Screen On: HSync: Off, VSync : Off */
+               smtc_seqw(0x01, (smtc_seqr(0x01) | 0x20));
+               smtc_seqw(0x20, (smtc_seqr(0x20) & (~0xB0)));
+               smtc_seqw(0x6a, 0x0c);
+               smtc_seqw(0x6b, 0x02);
+               smtc_seqw(0x21, (smtc_seqr(0x21) | 0x88));
+               smtc_seqw(0x22, ((smtc_seqr(0x22) & (~0x30)) | 0x30));
+               smtc_seqw(0x23, ((smtc_seqr(0x23) & (~0xc0)) | 0xD8));
+               smtc_seqw(0x24, (smtc_seqr(0x24) & (~0x01)));
+               smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00));
+               smtc_seqw(0x34, (smtc_seqr(0x34) | 0x80));
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int smtc_setcolreg(unsigned regno, unsigned red, unsigned green,
+                         unsigned blue, unsigned trans, struct fb_info *info)
+{
+       struct smtcfb_info *sfb;
+       u32 val;
+
+       sfb = info->par;
+
+       if (regno > 255)
+               return 1;
+
+       switch (sfb->fb->fix.visual) {
+       case FB_VISUAL_DIRECTCOLOR:
+       case FB_VISUAL_TRUECOLOR:
+               /*
+                * 16/32 bit true-colour, use pseudo-palette for 16 base color
+                */
+               if (regno >= 16)
+                       break;
+               if (sfb->fb->var.bits_per_pixel == 16) {
+                       u32 *pal = sfb->fb->pseudo_palette;
+
+                       val = chan_to_field(red, &sfb->fb->var.red);
+                       val |= chan_to_field(green, &sfb->fb->var.green);
+                       val |= chan_to_field(blue, &sfb->fb->var.blue);
+                       pal[regno] = pal_rgb(red, green, blue, val);
+               } else {
+                       u32 *pal = sfb->fb->pseudo_palette;
+
+                       val = chan_to_field(red, &sfb->fb->var.red);
+                       val |= chan_to_field(green, &sfb->fb->var.green);
+                       val |= chan_to_field(blue, &sfb->fb->var.blue);
+                       pal[regno] = big_swap(val);
+               }
+               break;
+
+       case FB_VISUAL_PSEUDOCOLOR:
+               /* color depth 8 bit */
+               sm712_setpalette(regno, red, green, blue, info);
+               break;
+
+       default:
+               return 1;       /* unknown type */
+       }
+
+       return 0;
+}
+
+static ssize_t smtcfb_read(struct fb_info *info, char __user *buf,
+                          size_t count, loff_t *ppos)
+{
+       unsigned long p = *ppos;
+
+       u32 *buffer, *dst;
+       u32 __iomem *src;
+       int c, i, cnt = 0, err = 0;
+       unsigned long total_size;
+
+       if (!info || !info->screen_base)
+               return -ENODEV;
+
+       if (info->state != FBINFO_STATE_RUNNING)
+               return -EPERM;
+
+       total_size = info->screen_size;
+
+       if (total_size == 0)
+               total_size = info->fix.smem_len;
+
+       if (p >= total_size)
+               return 0;
+
+       if (count >= total_size)
+               count = total_size;
+
+       if (count + p > total_size)
+               count = total_size - p;
+
+       buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
+       if (!buffer)
+               return -ENOMEM;
+
+       src = (u32 __iomem *)(info->screen_base + p);
+
+       if (info->fbops->fb_sync)
+               info->fbops->fb_sync(info);
+
+       while (count) {
+               c = (count > PAGE_SIZE) ? PAGE_SIZE : count;
+               dst = buffer;
+               for (i = c >> 2; i--;) {
+                       *dst = fb_readl(src++);
+                       *dst = big_swap(*dst);
+                       dst++;
+               }
+               if (c & 3) {
+                       u8 *dst8 = (u8 *)dst;
+                       u8 __iomem *src8 = (u8 __iomem *)src;
+
+                       for (i = c & 3; i--;) {
+                               if (i & 1) {
+                                       *dst8++ = fb_readb(++src8);
+                               } else {
+                                       *dst8++ = fb_readb(--src8);
+                                       src8 += 2;
+                               }
+                       }
+                       src = (u32 __iomem *)src8;
+               }
+
+               if (copy_to_user(buf, buffer, c)) {
+                       err = -EFAULT;
+                       break;
+               }
+               *ppos += c;
+               buf += c;
+               cnt += c;
+               count -= c;
+       }
+
+       kfree(buffer);
+
+       return (err) ? err : cnt;
+}
+
+static ssize_t smtcfb_write(struct fb_info *info, const char __user *buf,
+                           size_t count, loff_t *ppos)
+{
+       unsigned long p = *ppos;
+
+       u32 *buffer, *src;
+       u32 __iomem *dst;
+       int c, i, cnt = 0, err = 0;
+       unsigned long total_size;
+
+       if (!info || !info->screen_base)
+               return -ENODEV;
+
+       if (info->state != FBINFO_STATE_RUNNING)
+               return -EPERM;
+
+       total_size = info->screen_size;
+
+       if (total_size == 0)
+               total_size = info->fix.smem_len;
+
+       if (p > total_size)
+               return -EFBIG;
+
+       if (count > total_size) {
+               err = -EFBIG;
+               count = total_size;
+       }
+
+       if (count + p > total_size) {
+               if (!err)
+                       err = -ENOSPC;
+
+               count = total_size - p;
+       }
+
+       buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
+       if (!buffer)
+               return -ENOMEM;
+
+       dst = (u32 __iomem *)(info->screen_base + p);
+
+       if (info->fbops->fb_sync)
+               info->fbops->fb_sync(info);
+
+       while (count) {
+               c = (count > PAGE_SIZE) ? PAGE_SIZE : count;
+               src = buffer;
+
+               if (copy_from_user(src, buf, c)) {
+                       err = -EFAULT;
+                       break;
+               }
+
+               for (i = c >> 2; i--;) {
+                       fb_writel(big_swap(*src), dst++);
+                       src++;
+               }
+               if (c & 3) {
+                       u8 *src8 = (u8 *)src;
+                       u8 __iomem *dst8 = (u8 __iomem *)dst;
+
+                       for (i = c & 3; i--;) {
+                               if (i & 1) {
+                                       fb_writeb(*src8++, ++dst8);
+                               } else {
+                                       fb_writeb(*src8++, --dst8);
+                                       dst8 += 2;
+                               }
+                       }
+                       dst = (u32 __iomem *)dst8;
+               }
+
+               *ppos += c;
+               buf += c;
+               cnt += c;
+               count -= c;
+       }
+
+       kfree(buffer);
+
+       return (cnt) ? cnt : err;
+}
+
+static void sm7xx_set_timing(struct smtcfb_info *sfb)
+{
+       int i = 0, j = 0;
+       u32 m_nscreenstride;
+
+       dev_dbg(&sfb->pdev->dev,
+               "sfb->width=%d sfb->height=%d sfb->fb->var.bits_per_pixel=%d sfb->hz=%d\n",
+               sfb->width, sfb->height, sfb->fb->var.bits_per_pixel, sfb->hz);
+
+       for (j = 0; j < ARRAY_SIZE(vgamode); j++) {
+               if (vgamode[j].mmsizex != sfb->width ||
+                   vgamode[j].mmsizey != sfb->height ||
+                   vgamode[j].bpp != sfb->fb->var.bits_per_pixel ||
+                   vgamode[j].hz != sfb->hz)
+                       continue;
+
+               dev_dbg(&sfb->pdev->dev,
+                       "vgamode[j].mmsizex=%d vgamode[j].mmSizeY=%d vgamode[j].bpp=%d vgamode[j].hz=%d\n",
+                       vgamode[j].mmsizex, vgamode[j].mmsizey,
+                       vgamode[j].bpp, vgamode[j].hz);
+
+               dev_dbg(&sfb->pdev->dev, "vgamode index=%d\n", j);
+
+               smtc_mmiowb(0x0, 0x3c6);
+
+               smtc_seqw(0, 0x1);
+
+               smtc_mmiowb(vgamode[j].init_misc, 0x3c2);
+
+               /* init SEQ register SR00 - SR04 */
+               for (i = 0; i < SIZE_SR00_SR04; i++)
+                       smtc_seqw(i, vgamode[j].init_sr00_sr04[i]);
+
+               /* init SEQ register SR10 - SR24 */
+               for (i = 0; i < SIZE_SR10_SR24; i++)
+                       smtc_seqw(i + 0x10, vgamode[j].init_sr10_sr24[i]);
+
+               /* init SEQ register SR30 - SR75 */
+               for (i = 0; i < SIZE_SR30_SR75; i++)
+                       if ((i + 0x30) != 0x62 && (i + 0x30) != 0x6a &&
+                           (i + 0x30) != 0x6b)
+                               smtc_seqw(i + 0x30,
+                                         vgamode[j].init_sr30_sr75[i]);
+
+               /* init SEQ register SR80 - SR93 */
+               for (i = 0; i < SIZE_SR80_SR93; i++)
+                       smtc_seqw(i + 0x80, vgamode[j].init_sr80_sr93[i]);
+
+               /* init SEQ register SRA0 - SRAF */
+               for (i = 0; i < SIZE_SRA0_SRAF; i++)
+                       smtc_seqw(i + 0xa0, vgamode[j].init_sra0_sraf[i]);
+
+               /* init Graphic register GR00 - GR08 */
+               for (i = 0; i < SIZE_GR00_GR08; i++)
+                       smtc_grphw(i, vgamode[j].init_gr00_gr08[i]);
+
+               /* init Attribute register AR00 - AR14 */
+               for (i = 0; i < SIZE_AR00_AR14; i++)
+                       smtc_attrw(i, vgamode[j].init_ar00_ar14[i]);
+
+               /* init CRTC register CR00 - CR18 */
+               for (i = 0; i < SIZE_CR00_CR18; i++)
+                       smtc_crtcw(i, vgamode[j].init_cr00_cr18[i]);
+
+               /* init CRTC register CR30 - CR4D */
+               for (i = 0; i < SIZE_CR30_CR4D; i++)
+                       smtc_crtcw(i + 0x30, vgamode[j].init_cr30_cr4d[i]);
+
+               /* init CRTC register CR90 - CRA7 */
+               for (i = 0; i < SIZE_CR90_CRA7; i++)
+                       smtc_crtcw(i + 0x90, vgamode[j].init_cr90_cra7[i]);
+       }
+       smtc_mmiowb(0x67, 0x3c2);
+
+       /* set VPR registers */
+       writel(0x0, sfb->vp_regs + 0x0C);
+       writel(0x0, sfb->vp_regs + 0x40);
+
+       /* set data width */
+       m_nscreenstride = (sfb->width * sfb->fb->var.bits_per_pixel) / 64;
+       switch (sfb->fb->var.bits_per_pixel) {
+       case 8:
+               writel(0x0, sfb->vp_regs + 0x0);
+               break;
+       case 16:
+               writel(0x00020000, sfb->vp_regs + 0x0);
+               break;
+       case 24:
+               writel(0x00040000, sfb->vp_regs + 0x0);
+               break;
+       case 32:
+               writel(0x00030000, sfb->vp_regs + 0x0);
+               break;
+       }
+       writel((u32)(((m_nscreenstride + 2) << 16) | m_nscreenstride),
+              sfb->vp_regs + 0x10);
+}
+
+static void smtc_set_timing(struct smtcfb_info *sfb)
+{
+       switch (sfb->chip_id) {
+       case 0x710:
+       case 0x712:
+       case 0x720:
+               sm7xx_set_timing(sfb);
+               break;
+       }
+}
+
+static void smtcfb_setmode(struct smtcfb_info *sfb)
+{
+       switch (sfb->fb->var.bits_per_pixel) {
+       case 32:
+               sfb->fb->fix.visual       = FB_VISUAL_TRUECOLOR;
+               sfb->fb->fix.line_length  = sfb->fb->var.xres * 4;
+               sfb->fb->var.red.length   = 8;
+               sfb->fb->var.green.length = 8;
+               sfb->fb->var.blue.length  = 8;
+               sfb->fb->var.red.offset   = 16;
+               sfb->fb->var.green.offset = 8;
+               sfb->fb->var.blue.offset  = 0;
+               break;
+       case 24:
+               sfb->fb->fix.visual       = FB_VISUAL_TRUECOLOR;
+               sfb->fb->fix.line_length  = sfb->fb->var.xres * 3;
+               sfb->fb->var.red.length   = 8;
+               sfb->fb->var.green.length = 8;
+               sfb->fb->var.blue.length  = 8;
+               sfb->fb->var.red.offset   = 16;
+               sfb->fb->var.green.offset = 8;
+               sfb->fb->var.blue.offset  = 0;
+               break;
+       case 8:
+               sfb->fb->fix.visual       = FB_VISUAL_PSEUDOCOLOR;
+               sfb->fb->fix.line_length  = sfb->fb->var.xres;
+               sfb->fb->var.red.length   = 3;
+               sfb->fb->var.green.length = 3;
+               sfb->fb->var.blue.length  = 2;
+               sfb->fb->var.red.offset   = 5;
+               sfb->fb->var.green.offset = 2;
+               sfb->fb->var.blue.offset  = 0;
+               break;
+       case 16:
+       default:
+               sfb->fb->fix.visual       = FB_VISUAL_TRUECOLOR;
+               sfb->fb->fix.line_length  = sfb->fb->var.xres * 2;
+               sfb->fb->var.red.length   = 5;
+               sfb->fb->var.green.length = 6;
+               sfb->fb->var.blue.length  = 5;
+               sfb->fb->var.red.offset   = 11;
+               sfb->fb->var.green.offset = 5;
+               sfb->fb->var.blue.offset  = 0;
+               break;
+       }
+
+       sfb->width  = sfb->fb->var.xres;
+       sfb->height = sfb->fb->var.yres;
+       sfb->hz = 60;
+       smtc_set_timing(sfb);
+}
+
+static int smtc_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
+{
+       /* sanity checks */
+       if (var->xres_virtual < var->xres)
+               var->xres_virtual = var->xres;
+
+       if (var->yres_virtual < var->yres)
+               var->yres_virtual = var->yres;
+
+       /* set valid default bpp */
+       if ((var->bits_per_pixel != 8)  && (var->bits_per_pixel != 16) &&
+           (var->bits_per_pixel != 24) && (var->bits_per_pixel != 32))
+               var->bits_per_pixel = 16;
+
+       return 0;
+}
+
+static int smtc_set_par(struct fb_info *info)
+{
+       smtcfb_setmode(info->par);
+
+       return 0;
+}
+
+static struct fb_ops smtcfb_ops = {
+       .owner        = THIS_MODULE,
+       .fb_check_var = smtc_check_var,
+       .fb_set_par   = smtc_set_par,
+       .fb_setcolreg = smtc_setcolreg,
+       .fb_blank     = smtc_blank,
+       .fb_fillrect  = cfb_fillrect,
+       .fb_imageblit = cfb_imageblit,
+       .fb_copyarea  = cfb_copyarea,
+       .fb_read      = smtcfb_read,
+       .fb_write     = smtcfb_write,
+};
+
+/*
+ * Unmap in the memory mapped IO registers
+ */
+
+static void smtc_unmap_mmio(struct smtcfb_info *sfb)
+{
+       if (sfb && smtc_regbaseaddress)
+               smtc_regbaseaddress = NULL;
+}
+
+/*
+ * Map in the screen memory
+ */
+
+static int smtc_map_smem(struct smtcfb_info *sfb,
+                        struct pci_dev *pdev, u_long smem_len)
+{
+       sfb->fb->fix.smem_start = pci_resource_start(pdev, 0);
+
+       if (sfb->fb->var.bits_per_pixel == 32)
+               sfb->fb->fix.smem_start += big_addr;
+
+       sfb->fb->fix.smem_len = smem_len;
+
+       sfb->fb->screen_base = sfb->lfb;
+
+       if (!sfb->fb->screen_base) {
+               dev_err(&pdev->dev,
+                       "%s: unable to map screen memory\n", sfb->fb->fix.id);
+               return -ENOMEM;
+       }
+
+       return 0;
+}
+
+/*
+ * Unmap in the screen memory
+ *
+ */
+static void smtc_unmap_smem(struct smtcfb_info *sfb)
+{
+       if (sfb && sfb->fb->screen_base) {
+               iounmap(sfb->fb->screen_base);
+               sfb->fb->screen_base = NULL;
+       }
+}
+
+/*
+ * We need to wake up the device and make sure its in linear memory mode.
+ */
+static inline void sm7xx_init_hw(void)
+{
+       outb_p(0x18, 0x3c4);
+       outb_p(0x11, 0x3c5);
+}
+
+static int smtcfb_pci_probe(struct pci_dev *pdev,
+                           const struct pci_device_id *ent)
+{
+       struct smtcfb_info *sfb;
+       struct fb_info *info;
+       u_long smem_size = 0x00800000;  /* default 8MB */
+       int err;
+       unsigned long mmio_base;
+
+       dev_info(&pdev->dev, "Silicon Motion display driver.\n");
+
+       err = pci_enable_device(pdev);  /* enable SMTC chip */
+       if (err)
+               return err;
+
+       err = pci_request_region(pdev, 0, "sm7xxfb");
+       if (err < 0) {
+               dev_err(&pdev->dev, "cannot reserve framebuffer region\n");
+               goto failed_regions;
+       }
+
+       sprintf(smtcfb_fix.id, "sm%Xfb", ent->device);
+
+       info = framebuffer_alloc(sizeof(*sfb), &pdev->dev);
+       if (!info) {
+               dev_err(&pdev->dev, "framebuffer_alloc failed\n");
+               err = -ENOMEM;
+               goto failed_free;
+       }
+
+       sfb = info->par;
+       sfb->fb = info;
+       sfb->chip_id = ent->device;
+       sfb->pdev = pdev;
+       info->flags = FBINFO_FLAG_DEFAULT;
+       info->fbops = &smtcfb_ops;
+       info->fix = smtcfb_fix;
+       info->var = smtcfb_var;
+       info->pseudo_palette = sfb->colreg;
+       info->par = sfb;
+
+       pci_set_drvdata(pdev, sfb);
+
+       sm7xx_init_hw();
+
+       /* get mode parameter from smtc_scr_info */
+       if (smtc_scr_info.lfb_width != 0) {
+               sfb->fb->var.xres = smtc_scr_info.lfb_width;
+               sfb->fb->var.yres = smtc_scr_info.lfb_height;
+               sfb->fb->var.bits_per_pixel = smtc_scr_info.lfb_depth;
+       } else {
+               /* default resolution 1024x600 16bit mode */
+               sfb->fb->var.xres = SCREEN_X_RES;
+               sfb->fb->var.yres = SCREEN_Y_RES;
+               sfb->fb->var.bits_per_pixel = SCREEN_BPP;
+       }
+
+       big_pixel_depth(sfb->fb->var.bits_per_pixel, smtc_scr_info.lfb_depth);
+       /* Map address and memory detection */
+       mmio_base = pci_resource_start(pdev, 0);
+       pci_read_config_byte(pdev, PCI_REVISION_ID, &sfb->chip_rev_id);
+
+       switch (sfb->chip_id) {
+       case 0x710:
+       case 0x712:
+               sfb->fb->fix.mmio_start = mmio_base + 0x00400000;
+               sfb->fb->fix.mmio_len = 0x00400000;
+               smem_size = SM712_VIDEOMEMORYSIZE;
+               sfb->lfb = ioremap(mmio_base, mmio_addr);
+               if (!sfb->lfb) {
+                       dev_err(&pdev->dev,
+                               "%s: unable to map memory mapped IO!\n",
+                               sfb->fb->fix.id);
+                       err = -ENOMEM;
+                       goto failed_fb;
+               }
+
+               sfb->mmio = (smtc_regbaseaddress =
+                   sfb->lfb + 0x00700000);
+               sfb->dp_regs = sfb->lfb + 0x00408000;
+               sfb->vp_regs = sfb->lfb + 0x0040c000;
+               if (sfb->fb->var.bits_per_pixel == 32) {
+                       sfb->lfb += big_addr;
+                       dev_info(&pdev->dev, "sfb->lfb=%p\n", sfb->lfb);
+               }
+
+               /* set MCLK = 14.31818 * (0x16 / 0x2) */
+               smtc_seqw(0x6a, 0x16);
+               smtc_seqw(0x6b, 0x02);
+               smtc_seqw(0x62, 0x3e);
+               /* enable PCI burst */
+               smtc_seqw(0x17, 0x20);
+               /* enable word swap */
+               if (sfb->fb->var.bits_per_pixel == 32)
+                       seqw17();
+               break;
+       case 0x720:
+               sfb->fb->fix.mmio_start = mmio_base;
+               sfb->fb->fix.mmio_len = 0x00200000;
+               smem_size = SM722_VIDEOMEMORYSIZE;
+               sfb->dp_regs = ioremap(mmio_base, 0x00a00000);
+               sfb->lfb = sfb->dp_regs + 0x00200000;
+               sfb->mmio = (smtc_regbaseaddress =
+                   sfb->dp_regs + 0x000c0000);
+               sfb->vp_regs = sfb->dp_regs + 0x800;
+
+               smtc_seqw(0x62, 0xff);
+               smtc_seqw(0x6a, 0x0d);
+               smtc_seqw(0x6b, 0x02);
+               break;
+       default:
+               dev_err(&pdev->dev,
+                       "No valid Silicon Motion display chip was detected!\n");
+
+               goto failed_fb;
+       }
+
+       /* can support 32 bpp */
+       if (15 == sfb->fb->var.bits_per_pixel)
+               sfb->fb->var.bits_per_pixel = 16;
+
+       sfb->fb->var.xres_virtual = sfb->fb->var.xres;
+       sfb->fb->var.yres_virtual = sfb->fb->var.yres;
+       err = smtc_map_smem(sfb, pdev, smem_size);
+       if (err)
+               goto failed;
+
+       smtcfb_setmode(sfb);
+
+       err = register_framebuffer(info);
+       if (err < 0)
+               goto failed;
+
+       dev_info(&pdev->dev,
+                "Silicon Motion SM%X Rev%X primary display mode %dx%d-%d Init Complete.\n",
+                sfb->chip_id, sfb->chip_rev_id, sfb->fb->var.xres,
+                sfb->fb->var.yres, sfb->fb->var.bits_per_pixel);
+
+       return 0;
+
+failed:
+       dev_err(&pdev->dev, "Silicon Motion, Inc. primary display init fail.\n");
+
+       smtc_unmap_smem(sfb);
+       smtc_unmap_mmio(sfb);
+failed_fb:
+       framebuffer_release(info);
+
+failed_free:
+       pci_release_region(pdev, 0);
+
+failed_regions:
+       pci_disable_device(pdev);
+
+       return err;
+}
+
+/*
+ * 0x710 (LynxEM)
+ * 0x712 (LynxEM+)
+ * 0x720 (Lynx3DM, Lynx3DM+)
+ */
+static const struct pci_device_id smtcfb_pci_table[] = {
+       { PCI_DEVICE(0x126f, 0x710), },
+       { PCI_DEVICE(0x126f, 0x712), },
+       { PCI_DEVICE(0x126f, 0x720), },
+       {0,}
+};
+
+MODULE_DEVICE_TABLE(pci, smtcfb_pci_table);
+
+static void smtcfb_pci_remove(struct pci_dev *pdev)
+{
+       struct smtcfb_info *sfb;
+
+       sfb = pci_get_drvdata(pdev);
+       smtc_unmap_smem(sfb);
+       smtc_unmap_mmio(sfb);
+       unregister_framebuffer(sfb->fb);
+       framebuffer_release(sfb->fb);
+       pci_release_region(pdev, 0);
+       pci_disable_device(pdev);
+}
+
+#ifdef CONFIG_PM
+static int smtcfb_pci_suspend(struct device *device)
+{
+       struct pci_dev *pdev = to_pci_dev(device);
+       struct smtcfb_info *sfb;
+
+       sfb = pci_get_drvdata(pdev);
+
+       /* set the hw in sleep mode use external clock and self memory refresh
+        * so that we can turn off internal PLLs later on
+        */
+       smtc_seqw(0x20, (smtc_seqr(0x20) | 0xc0));
+       smtc_seqw(0x69, (smtc_seqr(0x69) & 0xf7));
+
+       console_lock();
+       fb_set_suspend(sfb->fb, 1);
+       console_unlock();
+
+       /* additionally turn off all function blocks including internal PLLs */
+       smtc_seqw(0x21, 0xff);
+
+       return 0;
+}
+
+static int smtcfb_pci_resume(struct device *device)
+{
+       struct pci_dev *pdev = to_pci_dev(device);
+       struct smtcfb_info *sfb;
+
+       sfb = pci_get_drvdata(pdev);
+
+       /* reinit hardware */
+       sm7xx_init_hw();
+       switch (sfb->chip_id) {
+       case 0x710:
+       case 0x712:
+               /* set MCLK = 14.31818 *  (0x16 / 0x2) */
+               smtc_seqw(0x6a, 0x16);
+               smtc_seqw(0x6b, 0x02);
+               smtc_seqw(0x62, 0x3e);
+               /* enable PCI burst */
+               smtc_seqw(0x17, 0x20);
+               if (sfb->fb->var.bits_per_pixel == 32)
+                       seqw17();
+               break;
+       case 0x720:
+               smtc_seqw(0x62, 0xff);
+               smtc_seqw(0x6a, 0x0d);
+               smtc_seqw(0x6b, 0x02);
+               break;
+       }
+
+       smtc_seqw(0x34, (smtc_seqr(0x34) | 0xc0));
+       smtc_seqw(0x33, ((smtc_seqr(0x33) | 0x08) & 0xfb));
+
+       smtcfb_setmode(sfb);
+
+       console_lock();
+       fb_set_suspend(sfb->fb, 0);
+       console_unlock();
+
+       return 0;
+}
+
+static SIMPLE_DEV_PM_OPS(sm7xx_pm_ops, smtcfb_pci_suspend, smtcfb_pci_resume);
+#define SM7XX_PM_OPS (&sm7xx_pm_ops)
+
+#else  /* !CONFIG_PM */
+
+#define SM7XX_PM_OPS NULL
+
+#endif /* !CONFIG_PM */
+
+static struct pci_driver smtcfb_driver = {
+       .name = "smtcfb",
+       .id_table = smtcfb_pci_table,
+       .probe = smtcfb_pci_probe,
+       .remove = smtcfb_pci_remove,
+       .driver.pm  = SM7XX_PM_OPS,
+};
+
+static int __init sm712fb_init(void)
+{
+       char *option = NULL;
+
+       if (fb_get_options("sm712fb", &option))
+               return -ENODEV;
+       if (option && *option)
+               mode_option = option;
+       sm7xx_vga_setup(mode_option);
+
+       return pci_register_driver(&smtcfb_driver);
+}
+
+module_init(sm712fb_init);
+
+static void __exit sm712fb_exit(void)
+{
+       pci_unregister_driver(&smtcfb_driver);
+}
+
+module_exit(sm712fb_exit);
+
+MODULE_AUTHOR("Siliconmotion ");
+MODULE_DESCRIPTION("Framebuffer driver for SMI Graphic Cards");
+MODULE_LICENSE("GPL");
index c378ebec605ec617c101078b953799f49f9b8ebe..f72f70d5a97b2ae58b7ed769d0bb6984021d5d06 100644 (file)
@@ -7,8 +7,8 @@ struct iio_dev;
 struct iio_buffer_setup_ops;
 
 int iio_triggered_buffer_setup(struct iio_dev *indio_dev,
-       irqreturn_t (*pollfunc_bh)(int irq, void *p),
-       irqreturn_t (*pollfunc_th)(int irq, void *p),
+       irqreturn_t (*h)(int irq, void *p),
+       irqreturn_t (*thread)(int irq, void *p),
        const struct iio_buffer_setup_ops *setup_ops);
 void iio_triggered_buffer_cleanup(struct iio_dev *indio_dev);
 
index 4eebb6616e5ca33aca62a036db63c4a38a5fad61..0e737238ca74a473be64d74352821c489d88354f 100644 (file)
@@ -51,14 +51,33 @@ int size_from_channelarray(struct iio_channel_info *channels, int num_channels)
                if (bytes % channels[i].bytes == 0)
                        channels[i].location = bytes;
                else
-                       channels[i].location = bytes - bytes%channels[i].bytes
-                               + channels[i].bytes;
+                       channels[i].location = bytes - bytes % channels[i].bytes
+                                              + channels[i].bytes;
+
                bytes = channels[i].location + channels[i].bytes;
                i++;
        }
+
        return bytes;
 }
 
+void print1byte(uint8_t input, struct iio_channel_info *info)
+{
+       /*
+        * Shift before conversion to avoid sign extension
+        * of left aligned data
+        */
+       input >>= info->shift;
+       input &= info->mask;
+       if (info->is_signed) {
+               int8_t val = (int8_t)(input << (8 - info->bits_used)) >>
+                            (8 - info->bits_used);
+               printf("%05f ", ((float)val + info->offset) * info->scale);
+       } else {
+               printf("%05f ", ((float)input + info->offset) * info->scale);
+       }
+}
+
 void print2byte(uint16_t input, struct iio_channel_info *info)
 {
        /* First swap if incorrect endian */
@@ -136,9 +155,9 @@ void print8byte(uint64_t input, struct iio_channel_info *info)
 /**
  * process_scan() - print out the values in SI units
  * @data:              pointer to the start of the scan
- * @channels:          information about the channels. Note
- *  size_from_channelarray must have been called first to fill the
- *  location offsets.
+ * @channels:          information about the channels.
+ *                     Note: size_from_channelarray must have been called first
+ *                           to fill the location offsets.
  * @num_channels:      number of channels
  **/
 void process_scan(char *data,
@@ -150,6 +169,10 @@ void process_scan(char *data,
        for (k = 0; k < num_channels; k++)
                switch (channels[k].bytes) {
                        /* only a few cases implemented so far */
+               case 1:
+                       print1byte(*(uint8_t *)(data + channels[k].location),
+                                  &channels[k]);
+                       break;
                case 2:
                        print2byte(*(uint16_t *)(data + channels[k].location),
                                   &channels[k]);
@@ -213,6 +236,7 @@ int main(int argc, char **argv)
                        num_loops = strtoul(optarg, &dummy, 10);
                        if (errno)
                                return -errno;
+
                        break;
                case 'e':
                        noevents = 1;
@@ -225,6 +249,7 @@ int main(int argc, char **argv)
                        buf_len = strtoul(optarg, &dummy, 10);
                        if (errno)
                                return -errno;
+
                        break;
                case 'n':
                        device_name = optarg;
@@ -257,6 +282,7 @@ int main(int argc, char **argv)
                printf("Failed to find the %s\n", device_name);
                return dev_num;
        }
+
        printf("iio device number being used is %d\n", dev_num);
 
        ret = asprintf(&dev_dir_name, "%siio:device%d", iio_dir, dev_num);
@@ -285,9 +311,11 @@ int main(int argc, char **argv)
                        ret = trig_num;
                        goto error_free_triggername;
                }
+
                printf("iio trigger number being used is %d\n", trig_num);
-       } else
+       } else {
                printf("trigger-less mode selected\n");
+       }
 
        /*
         * Parse the files in scan_elements to identify what channels are
@@ -314,8 +342,10 @@ int main(int argc, char **argv)
 
        if (!notrigger) {
                printf("%s %s\n", dev_dir_name, trigger_name);
-               /* Set the device trigger to be the data ready trigger found
-                * above */
+               /*
+                * Set the device trigger to be the data ready trigger found
+                * above
+                */
                ret = write_sysfs_string_and_verify("trigger/current_trigger",
                                                    dev_dir_name,
                                                    trigger_name);
@@ -334,8 +364,9 @@ int main(int argc, char **argv)
        ret = write_sysfs_int("enable", buf_dir_name, 1);
        if (ret < 0)
                goto error_free_buf_dir_name;
+
        scan_size = size_from_channelarray(channels, num_channels);
-       data = malloc(scan_size*buf_len);
+       data = malloc(scan_size * buf_len);
        if (!data) {
                ret = -ENOMEM;
                goto error_free_buf_dir_name;
@@ -349,13 +380,12 @@ int main(int argc, char **argv)
 
        /* Attempt to open non blocking the access dev */
        fp = open(buffer_access, O_RDONLY | O_NONBLOCK);
-       if (fp == -1) { /* If it isn't there make the node */
+       if (fp == -1) { /* TODO: If it isn't there make the node */
                ret = -errno;
                printf("Failed to open %s\n", buffer_access);
                goto error_free_buffer_access;
        }
 
-       /* Wait for events 10 times */
        for (j = 0; j < num_loops; j++) {
                if (!noevents) {
                        struct pollfd pfd = {
@@ -372,25 +402,22 @@ int main(int argc, char **argv)
                        }
 
                        toread = buf_len;
-
                } else {
                        usleep(timedelay);
                        toread = 64;
                }
 
-               read_size = read(fp,
-                                data,
-                                toread*scan_size);
+               read_size = read(fp, data, toread * scan_size);
                if (read_size < 0) {
                        if (errno == EAGAIN) {
                                printf("nothing available\n");
                                continue;
-                       } else
+                       } else {
                                break;
+                       }
                }
-               for (i = 0; i < read_size/scan_size; i++)
-                       process_scan(data + scan_size*i,
-                                    channels,
+               for (i = 0; i < read_size / scan_size; i++)
+                       process_scan(data + scan_size * i, channels,
                                     num_channels);
        }
 
@@ -409,6 +436,7 @@ int main(int argc, char **argv)
 error_close_buffer_access:
        if (close(fp) == -1)
                perror("Failed to close buffer");
+
 error_free_buffer_access:
        free(buffer_access);
 error_free_data:
@@ -424,6 +452,7 @@ error_free_channels:
 error_free_triggername:
        if (datardytrigger)
                free(trigger_name);
+
 error_free_dev_dir_name:
        free(dev_dir_name);
 
index 016760e769c0baf0f8eefee80f8a9f94ad42b586..703f4cb0e8e9b149f6a9d2f6b3d7e3896d33740d 100644 (file)
@@ -13,7 +13,6 @@
  *
  * Usage:
  *     iio_event_monitor <device_name>
- *
  */
 
 #include <unistd.h>
@@ -51,6 +50,9 @@ static const char * const iio_chan_type_name_spec[] = {
        [IIO_HUMIDITYRELATIVE] = "humidityrelative",
        [IIO_ACTIVITY] = "activity",
        [IIO_STEPS] = "steps",
+       [IIO_ENERGY] = "energy",
+       [IIO_DISTANCE] = "distance",
+       [IIO_VELOCITY] = "velocity",
 };
 
 static const char * const iio_ev_type_text[] = {
@@ -99,6 +101,7 @@ static const char * const iio_modifier_names[] = {
        [IIO_MOD_JOGGING] = "jogging",
        [IIO_MOD_WALKING] = "walking",
        [IIO_MOD_STILL] = "still",
+       [IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z] = "sqrt(x^2+y^2+z^2)",
 };
 
 static bool event_is_known(struct iio_event_data *event)
@@ -130,6 +133,9 @@ static bool event_is_known(struct iio_event_data *event)
        case IIO_HUMIDITYRELATIVE:
        case IIO_ACTIVITY:
        case IIO_STEPS:
+       case IIO_ENERGY:
+       case IIO_DISTANCE:
+       case IIO_VELOCITY:
                break;
        default:
                return false;
@@ -167,6 +173,7 @@ static bool event_is_known(struct iio_event_data *event)
        case IIO_MOD_JOGGING:
        case IIO_MOD_WALKING:
        case IIO_MOD_STILL:
+       case IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z:
                break;
        default:
                return false;
@@ -209,7 +216,8 @@ static void print_event(struct iio_event_data *event)
 
        if (!event_is_known(event)) {
                printf("Unknown event: time: %lld, id: %llx\n",
-                               event->timestamp, event->id);
+                      event->timestamp, event->id);
+
                return;
        }
 
@@ -229,6 +237,7 @@ static void print_event(struct iio_event_data *event)
 
        if (dir != IIO_EV_DIR_NONE)
                printf(", direction: %s", iio_ev_dir_text[dir]);
+
        printf("\n");
 }
 
@@ -251,14 +260,16 @@ int main(int argc, char **argv)
        dev_num = find_type_by_name(device_name, "iio:device");
        if (dev_num >= 0) {
                printf("Found IIO device with name %s with device number %d\n",
-                       device_name, dev_num);
+                      device_name, dev_num);
                ret = asprintf(&chrdev_name, "/dev/iio:device%d", dev_num);
                if (ret < 0) {
                        return -ENOMEM;
                }
        } else {
-               /* If we can't find a IIO device by name assume device_name is a
-                  IIO chrdev */
+               /*
+                * If we can't find an IIO device by name assume device_name is
+                * an IIO chrdev
+                */
                chrdev_name = strdup(device_name);
                if (!chrdev_name)
                        return -ENOMEM;
@@ -299,6 +310,12 @@ int main(int argc, char **argv)
                        }
                }
 
+               if (ret != sizeof(event)) {
+                       printf("Reading event failed!\n");
+                       ret = -EIO;
+                       break;
+               }
+
                print_event(&event);
        }
 
index ec9ab7f9ae4c50e5ac77bedbdff5e6a144eafe78..8fb3214c70f255ec21b76c71ce96b15fa4a3f67e 100644 (file)
@@ -32,8 +32,7 @@ static char * const iio_direction[] = {
  *
  * Returns 0 on success, or a negative error code if string extraction failed.
  **/
-int iioutils_break_up_name(const char *full_name,
-                                 char **generic_name)
+int iioutils_break_up_name(const char *full_name, char **generic_name)
 {
        char *current;
        char *w, *r;
@@ -65,6 +64,7 @@ int iioutils_break_up_name(const char *full_name,
                        *w = *r;
                        w++;
                }
+
                r++;
        }
        *w = '\0';
@@ -88,15 +88,10 @@ int iioutils_break_up_name(const char *full_name,
  *
  * Returns a value >= 0 on success, otherwise a negative error code.
  **/
-int iioutils_get_type(unsigned *is_signed,
-                            unsigned *bytes,
-                            unsigned *bits_used,
-                            unsigned *shift,
-                            uint64_t *mask,
-                            unsigned *be,
-                            const char *device_dir,
-                            const char *name,
-                            const char *generic_name)
+int iioutils_get_type(unsigned *is_signed, unsigned *bytes, unsigned *bits_used,
+                     unsigned *shift, uint64_t *mask, unsigned *be,
+                     const char *device_dir, const char *name,
+                     const char *generic_name)
 {
        FILE *sysfsfp;
        int ret;
@@ -126,6 +121,7 @@ int iioutils_get_type(unsigned *is_signed,
                ret = -errno;
                goto error_free_builtname_generic;
        }
+
        ret = -ENOENT;
        while (ent = readdir(dp), ent != NULL)
                /*
@@ -140,6 +136,7 @@ int iioutils_get_type(unsigned *is_signed,
                                ret = -ENOMEM;
                                goto error_closedir;
                        }
+
                        sysfsfp = fopen(filename, "r");
                        if (sysfsfp == NULL) {
                                ret = -errno;
@@ -162,12 +159,14 @@ int iioutils_get_type(unsigned *is_signed,
                                printf("scan type description didn't match\n");
                                goto error_close_sysfsfp;
                        }
+
                        *be = (endianchar == 'b');
                        *bytes = padint / 8;
                        if (*bits_used == 64)
                                *mask = ~0;
                        else
                                *mask = (1 << *bits_used) - 1;
+
                        *is_signed = (signchar == 's');
                        if (fclose(sysfsfp)) {
                                ret = -errno;
@@ -177,9 +176,9 @@ int iioutils_get_type(unsigned *is_signed,
 
                        sysfsfp = 0;
                        free(filename);
-
                        filename = 0;
                }
+
 error_close_sysfsfp:
        if (sysfsfp)
                if (fclose(sysfsfp))
@@ -188,6 +187,7 @@ error_close_sysfsfp:
 error_free_filename:
        if (filename)
                free(filename);
+
 error_closedir:
        if (closedir(dp) == -1)
                perror("iioutils_get_type(): Failed to close directory");
@@ -212,11 +212,9 @@ error_free_scan_el_dir:
  *
  * Returns a value >= 0 on success, otherwise a negative error code.
  **/
-int iioutils_get_param_float(float *output,
-                                   const char *param_name,
-                                   const char *device_dir,
-                                   const char *name,
-                                   const char *generic_name)
+int iioutils_get_param_float(float *output, const char *param_name,
+                            const char *device_dir, const char *name,
+                            const char *generic_name)
 {
        FILE *sysfsfp;
        int ret;
@@ -235,11 +233,13 @@ int iioutils_get_param_float(float *output,
                ret = -ENOMEM;
                goto error_free_builtname;
        }
+
        dp = opendir(device_dir);
        if (dp == NULL) {
                ret = -errno;
                goto error_free_builtname_generic;
        }
+
        ret = -ENOENT;
        while (ent = readdir(dp), ent != NULL)
                if ((strcmp(builtname, ent->d_name) == 0) ||
@@ -250,11 +250,13 @@ int iioutils_get_param_float(float *output,
                                ret = -ENOMEM;
                                goto error_closedir;
                        }
+
                        sysfsfp = fopen(filename, "r");
                        if (!sysfsfp) {
                                ret = -errno;
                                goto error_free_filename;
                        }
+
                        errno = 0;
                        if (fscanf(sysfsfp, "%f", output) != 1)
                                ret = errno ? -errno : -ENODATA;
@@ -264,6 +266,7 @@ int iioutils_get_param_float(float *output,
 error_free_filename:
        if (filename)
                free(filename);
+
 error_closedir:
        if (closedir(dp) == -1)
                perror("iioutils_get_param_float(): Failed to close directory");
@@ -282,16 +285,14 @@ error_free_builtname:
  * @cnt: the amount of array elements
  **/
 
-void bsort_channel_array_by_index(struct iio_channel_info **ci_array,
-                                        int cnt)
+void bsort_channel_array_by_index(struct iio_channel_info **ci_array, int cnt)
 {
-
        struct iio_channel_info temp;
        int x, y;
 
        for (x = 0; x < cnt; x++)
                for (y = 0; y < (cnt - 1); y++)
-                       if ((*ci_array)[y].index > (*ci_array)[y+1].index) {
+                       if ((*ci_array)[y].index > (*ci_array)[y + 1].index) {
                                temp = (*ci_array)[y + 1];
                                (*ci_array)[y + 1] = (*ci_array)[y];
                                (*ci_array)[y] = temp;
@@ -307,8 +308,7 @@ void bsort_channel_array_by_index(struct iio_channel_info **ci_array,
  * Returns 0 on success, otherwise a negative error code.
  **/
 int build_channel_array(const char *device_dir,
-                             struct iio_channel_info **ci_array,
-                             int *counter)
+                       struct iio_channel_info **ci_array, int *counter)
 {
        DIR *dp;
        FILE *sysfsfp;
@@ -329,6 +329,7 @@ int build_channel_array(const char *device_dir,
                ret = -errno;
                goto error_free_name;
        }
+
        while (ent = readdir(dp), ent != NULL)
                if (strcmp(ent->d_name + strlen(ent->d_name) - strlen("_en"),
                           "_en") == 0) {
@@ -338,12 +339,14 @@ int build_channel_array(const char *device_dir,
                                ret = -ENOMEM;
                                goto error_close_dir;
                        }
+
                        sysfsfp = fopen(filename, "r");
                        if (sysfsfp == NULL) {
                                ret = -errno;
                                free(filename);
                                goto error_close_dir;
                        }
+
                        errno = 0;
                        if (fscanf(sysfsfp, "%i", &ret) != 1) {
                                ret = errno ? -errno : -ENODATA;
@@ -353,9 +356,9 @@ int build_channel_array(const char *device_dir,
                                free(filename);
                                goto error_close_dir;
                        }
-
                        if (ret == 1)
                                (*counter)++;
+
                        if (fclose(sysfsfp)) {
                                ret = -errno;
                                free(filename);
@@ -364,11 +367,13 @@ int build_channel_array(const char *device_dir,
 
                        free(filename);
                }
+
        *ci_array = malloc(sizeof(**ci_array) * (*counter));
        if (*ci_array == NULL) {
                ret = -ENOMEM;
                goto error_close_dir;
        }
+
        seekdir(dp, 0);
        while (ent = readdir(dp), ent != NULL) {
                if (strcmp(ent->d_name + strlen(ent->d_name) - strlen("_en"),
@@ -384,6 +389,7 @@ int build_channel_array(const char *device_dir,
                                count--;
                                goto error_cleanup_array;
                        }
+
                        sysfsfp = fopen(filename, "r");
                        if (sysfsfp == NULL) {
                                ret = -errno;
@@ -391,6 +397,7 @@ int build_channel_array(const char *device_dir,
                                count--;
                                goto error_cleanup_array;
                        }
+
                        errno = 0;
                        if (fscanf(sysfsfp, "%i", &current_enabled) != 1) {
                                ret = errno ? -errno : -ENODATA;
@@ -423,6 +430,7 @@ int build_channel_array(const char *device_dir,
                                count--;
                                goto error_cleanup_array;
                        }
+
                        /* Get the generic and specific name elements */
                        ret = iioutils_break_up_name(current->name,
                                                     &current->generic_name);
@@ -432,6 +440,7 @@ int build_channel_array(const char *device_dir,
                                count--;
                                goto error_cleanup_array;
                        }
+
                        ret = asprintf(&filename,
                                       "%s/%s_index",
                                       scan_el_dir,
@@ -441,6 +450,7 @@ int build_channel_array(const char *device_dir,
                                ret = -ENOMEM;
                                goto error_cleanup_array;
                        }
+
                        sysfsfp = fopen(filename, "r");
                        if (sysfsfp == NULL) {
                                ret = -errno;
@@ -474,6 +484,7 @@ int build_channel_array(const char *device_dir,
                                                       current->generic_name);
                        if (ret < 0)
                                goto error_cleanup_array;
+
                        ret = iioutils_get_param_float(&current->offset,
                                                       "offset",
                                                       device_dir,
@@ -481,6 +492,7 @@ int build_channel_array(const char *device_dir,
                                                       current->generic_name);
                        if (ret < 0)
                                goto error_cleanup_array;
+
                        ret = iioutils_get_type(&current->is_signed,
                                                &current->bytes,
                                                &current->bits_used,
@@ -549,7 +561,7 @@ int find_type_by_name(const char *name, const char *type)
        const struct dirent *ent;
        int number, numstrlen, ret;
 
-       FILE *nameFile;
+       FILE *namefp;
        DIR *dp;
        char thisname[IIO_MAX_NAME_LENGTH];
        char *filename;
@@ -562,9 +574,9 @@ int find_type_by_name(const char *name, const char *type)
 
        while (ent = readdir(dp), ent != NULL) {
                if (strcmp(ent->d_name, ".") != 0 &&
-                       strcmp(ent->d_name, "..") != 0 &&
-                       strlen(ent->d_name) > strlen(type) &&
-                       strncmp(ent->d_name, type, strlen(type)) == 0) {
+                   strcmp(ent->d_name, "..") != 0 &&
+                   strlen(ent->d_name) > strlen(type) &&
+                   strncmp(ent->d_name, type, strlen(type)) == 0) {
                        errno = 0;
                        ret = sscanf(ent->d_name + strlen(type), "%d", &number);
                        if (ret < 0) {
@@ -580,12 +592,9 @@ int find_type_by_name(const char *name, const char *type)
                        numstrlen = calc_digits(number);
                        /* verify the next character is not a colon */
                        if (strncmp(ent->d_name + strlen(type) + numstrlen,
-                                       ":",
-                                       1) != 0) {
-                               filename = malloc(strlen(iio_dir)
-                                               + strlen(type)
-                                               + numstrlen
-                                               + 6);
+                           ":", 1) != 0) {
+                               filename = malloc(strlen(iio_dir) + strlen(type)
+                                                 + numstrlen + 6);
                                if (filename == NULL) {
                                        ret = -ENOMEM;
                                        goto error_close_dir;
@@ -598,19 +607,20 @@ int find_type_by_name(const char *name, const char *type)
                                        goto error_close_dir;
                                }
 
-                               nameFile = fopen(filename, "r");
-                               if (!nameFile) {
+                               namefp = fopen(filename, "r");
+                               if (!namefp) {
                                        free(filename);
                                        continue;
                                }
+
                                free(filename);
                                errno = 0;
-                               if (fscanf(nameFile, "%s", thisname) != 1) {
+                               if (fscanf(namefp, "%s", thisname) != 1) {
                                        ret = errno ? -errno : -ENODATA;
                                        goto error_close_dir;
                                }
 
-                               if (fclose(nameFile)) {
+                               if (fclose(namefp)) {
                                        ret = -errno;
                                        goto error_close_dir;
                                }
@@ -618,6 +628,7 @@ int find_type_by_name(const char *name, const char *type)
                                if (strcmp(name, thisname) == 0) {
                                        if (closedir(dp) == -1)
                                                return -errno;
+
                                        return number;
                                }
                        }
@@ -631,6 +642,7 @@ int find_type_by_name(const char *name, const char *type)
 error_close_dir:
        if (closedir(dp) == -1)
                perror("find_type_by_name(): Failed to close directory");
+
        return ret;
 }
 
@@ -644,6 +656,7 @@ static int _write_sysfs_int(const char *filename, const char *basedir, int val,
 
        if (temp == NULL)
                return -ENOMEM;
+
        ret = sprintf(temp, "%s/%s", basedir, filename);
        if (ret < 0)
                goto error_free;
@@ -654,6 +667,7 @@ static int _write_sysfs_int(const char *filename, const char *basedir, int val,
                printf("failed to open %s\n", temp);
                goto error_free;
        }
+
        ret = fprintf(sysfsfp, "%d", val);
        if (ret < 0) {
                if (fclose(sysfsfp))
@@ -674,6 +688,7 @@ static int _write_sysfs_int(const char *filename, const char *basedir, int val,
                        printf("failed to open %s\n", temp);
                        goto error_free;
                }
+
                if (fscanf(sysfsfp, "%d", &test) != 1) {
                        ret = errno ? -errno : -ENODATA;
                        if (fclose(sysfsfp))
@@ -688,13 +703,12 @@ static int _write_sysfs_int(const char *filename, const char *basedir, int val,
                }
 
                if (test != val) {
-                       printf("Possible failure in int write %d to %s%s\n",
-                               val,
-                               basedir,
-                               filename);
+                       printf("Possible failure in int write %d to %s/%s\n",
+                              val, basedir, filename);
                        ret = -1;
                }
        }
+
 error_free:
        free(temp);
        return ret;
@@ -739,6 +753,7 @@ static int _write_sysfs_string(const char *filename, const char *basedir,
                printf("Memory allocation failed\n");
                return -ENOMEM;
        }
+
        ret = sprintf(temp, "%s/%s", basedir, filename);
        if (ret < 0)
                goto error_free;
@@ -749,6 +764,7 @@ static int _write_sysfs_string(const char *filename, const char *basedir,
                printf("Could not open %s\n", temp);
                goto error_free;
        }
+
        ret = fprintf(sysfsfp, "%s", val);
        if (ret < 0) {
                if (fclose(sysfsfp))
@@ -766,9 +782,10 @@ static int _write_sysfs_string(const char *filename, const char *basedir,
                sysfsfp = fopen(temp, "r");
                if (sysfsfp == NULL) {
                        ret = -errno;
-                       printf("could not open file to verify\n");
+                       printf("Could not open file to verify\n");
                        goto error_free;
                }
+
                if (fscanf(sysfsfp, "%s", temp) != 1) {
                        ret = errno ? -errno : -ENODATA;
                        if (fclose(sysfsfp))
@@ -784,15 +801,12 @@ static int _write_sysfs_string(const char *filename, const char *basedir,
 
                if (strcmp(temp, val) != 0) {
                        printf("Possible failure in string write of %s "
-                               "Should be %s "
-                               "written to %s\%s\n",
-                               temp,
-                               val,
-                               basedir,
-                               filename);
+                              "Should be %s written to %s/%s\n", temp, val,
+                              basedir, filename);
                        ret = -1;
                }
        }
+
 error_free:
        free(temp);
 
@@ -845,6 +859,7 @@ int read_sysfs_posint(const char *filename, const char *basedir)
                printf("Memory allocation failed");
                return -ENOMEM;
        }
+
        ret = sprintf(temp, "%s/%s", basedir, filename);
        if (ret < 0)
                goto error_free;
@@ -854,6 +869,7 @@ int read_sysfs_posint(const char *filename, const char *basedir)
                ret = -errno;
                goto error_free;
        }
+
        errno = 0;
        if (fscanf(sysfsfp, "%d\n", &ret) != 1) {
                ret = errno ? -errno : -ENODATA;
@@ -868,6 +884,7 @@ int read_sysfs_posint(const char *filename, const char *basedir)
 
 error_free:
        free(temp);
+
        return ret;
 }
 
@@ -889,6 +906,7 @@ int read_sysfs_float(const char *filename, const char *basedir, float *val)
                printf("Memory allocation failed");
                return -ENOMEM;
        }
+
        ret = sprintf(temp, "%s/%s", basedir, filename);
        if (ret < 0)
                goto error_free;
@@ -898,6 +916,7 @@ int read_sysfs_float(const char *filename, const char *basedir, float *val)
                ret = -errno;
                goto error_free;
        }
+
        errno = 0;
        if (fscanf(sysfsfp, "%f\n", val) != 1) {
                ret = errno ? -errno : -ENODATA;
@@ -912,6 +931,7 @@ int read_sysfs_float(const char *filename, const char *basedir, float *val)
 
 error_free:
        free(temp);
+
        return ret;
 }
 
@@ -933,6 +953,7 @@ int read_sysfs_string(const char *filename, const char *basedir, char *str)
                printf("Memory allocation failed");
                return -ENOMEM;
        }
+
        ret = sprintf(temp, "%s/%s", basedir, filename);
        if (ret < 0)
                goto error_free;
@@ -942,6 +963,7 @@ int read_sysfs_string(const char *filename, const char *basedir, char *str)
                ret = -errno;
                goto error_free;
        }
+
        errno = 0;
        if (fscanf(sysfsfp, "%s\n", str) != 1) {
                ret = errno ? -errno : -ENODATA;
@@ -956,6 +978,7 @@ int read_sysfs_string(const char *filename, const char *basedir, char *str)
 
 error_free:
        free(temp);
+
        return ret;
 }
 
index 379eed9deaea242025fc53e081bc350b3d931097..086610139ade32b6ec8b0dfe8572e2bcd14d9b34 100644 (file)
@@ -51,17 +51,16 @@ struct iio_channel_info {
 };
 
 int iioutils_break_up_name(const char *full_name, char **generic_name);
-int iioutils_get_type(unsigned *is_signed, unsigned *bytes,
-                                         unsigned *bits_used, unsigned *shift,
-                                         uint64_t *mask, unsigned *be,
-                                         const char *device_dir, const char *name,
-                                         const char *generic_name);
+int iioutils_get_type(unsigned *is_signed, unsigned *bytes, unsigned *bits_used,
+                     unsigned *shift, uint64_t *mask, unsigned *be,
+                     const char *device_dir, const char *name,
+                     const char *generic_name);
 int iioutils_get_param_float(float *output, const char *param_name,
-                                                        const char *device_dir, const char *name,
-                                                        const char *generic_name);
+                            const char *device_dir, const char *name,
+                            const char *generic_name);
 void bsort_channel_array_by_index(struct iio_channel_info **ci_array, int cnt);
 int build_channel_array(const char *device_dir,
-                                               struct iio_channel_info **ci_array, int *counter);
+                       struct iio_channel_info **ci_array, int *counter);
 int find_type_by_name(const char *name, const char *type);
 int write_sysfs_int(const char *filename, const char *basedir, int val);
 int write_sysfs_int_and_verify(const char *filename, const char *basedir,
index b59ee1733924025c240fd7e6dbcef4f29ce2802a..7f432a55a6c4d133095e251dafa6a8c6c346da38 100644 (file)
@@ -20,7 +20,6 @@
 #include <sys/dir.h>
 #include "iio_utils.h"
 
-
 static enum verbosity {
        VERBLEVEL_DEFAULT,      /* 0 gives lspci behaviour */
        VERBLEVEL_SENSORS,      /* 1 lists sensors */
@@ -29,17 +28,16 @@ static enum verbosity {
 const char *type_device = "iio:device";
 const char *type_trigger = "trigger";
 
-
 static inline int check_prefix(const char *str, const char *prefix)
 {
        return strlen(str) > strlen(prefix) &&
-               strncmp(str, prefix, strlen(prefix)) == 0;
+              strncmp(str, prefix, strlen(prefix)) == 0;
 }
 
 static inline int check_postfix(const char *str, const char *postfix)
 {
        return strlen(str) > strlen(postfix) &&
-               strcmp(str + strlen(str) - strlen(postfix), postfix) == 0;
+              strcmp(str + strlen(str) - strlen(postfix), postfix) == 0;
 }
 
 static int dump_channels(const char *dev_dir_name)
@@ -50,11 +48,11 @@ static int dump_channels(const char *dev_dir_name)
        dp = opendir(dev_dir_name);
        if (dp == NULL)
                return -errno;
+
        while (ent = readdir(dp), ent != NULL)
                if (check_prefix(ent->d_name, "in_") &&
-                   check_postfix(ent->d_name, "_raw")) {
+                   check_postfix(ent->d_name, "_raw"))
                        printf("   %-10s\n", ent->d_name);
-               }
 
        return (closedir(dp) == -1) ? -errno : 0;
 }
@@ -63,20 +61,22 @@ static int dump_one_device(const char *dev_dir_name)
 {
        char name[IIO_MAX_NAME_LENGTH];
        int dev_idx;
-       int retval;
+       int ret;
 
-       retval = sscanf(dev_dir_name + strlen(iio_dir) + strlen(type_device),
-                       "%i", &dev_idx);
-       if (retval != 1)
+       ret = sscanf(dev_dir_name + strlen(iio_dir) + strlen(type_device), "%i",
+                    &dev_idx);
+       if (ret != 1)
                return -EINVAL;
-       retval = read_sysfs_string("name", dev_dir_name, name);
-       if (retval)
-               return retval;
+
+       ret = read_sysfs_string("name", dev_dir_name, name);
+       if (ret)
+               return ret;
 
        printf("Device %03d: %s\n", dev_idx, name);
 
        if (verblevel >= VERBLEVEL_SENSORS)
                return dump_channels(dev_dir_name);
+
        return 0;
 }
 
@@ -84,17 +84,19 @@ static int dump_one_trigger(const char *dev_dir_name)
 {
        char name[IIO_MAX_NAME_LENGTH];
        int dev_idx;
-       int retval;
+       int ret;
 
-       retval = sscanf(dev_dir_name + strlen(iio_dir) + strlen(type_trigger),
-                       "%i", &dev_idx);
-       if (retval != 1)
+       ret = sscanf(dev_dir_name + strlen(iio_dir) + strlen(type_trigger),
+                    "%i", &dev_idx);
+       if (ret != 1)
                return -EINVAL;
-       retval = read_sysfs_string("name", dev_dir_name, name);
-       if (retval)
-               return retval;
+
+       ret = read_sysfs_string("name", dev_dir_name, name);
+       if (ret)
+               return ret;
 
        printf("Trigger %03d: %s\n", dev_idx, name);
+
        return 0;
 }
 
@@ -151,6 +153,7 @@ static int dump_devices(void)
                        free(dev_dir_name);
                }
        }
+
        return (closedir(dp) == -1) ? -errno : 0;
 
 error_close_dir: