Re: [PATCH v2 1/2] staging: wilc1000: Add SDIO/SPI 802.11 driver
From: Nicolas Ferre <hidden>
Date: 2015-05-04 09:14:48
Le 29/04/2015 14:50, Johnny Kim a écrit :
This driver is for the wilc1000 which is a single chip IEEE 802.11 b/g/n device. The driver works together with cfg80211, which is the kernel side of configuration management for wireless devices because the wilc1000 chipset is fullmac where the MLME is managed in hardware. The driver worked from kernel version 2.6.38 and being now ported to several others since then. A TODO file is included as well in this commit. Signed-off-by: Johnny Kim <redacted> Signed-off-by: Rachel Kim <redacted> Signed-off-by: Dean Lee <redacted> Signed-off-by: Chris Park <redacted>
Acked-by: Nicolas Ferre <redacted>
--- Changes in v2: - fix the permissions - fix the folder tree
Nitpicking: This ^^^ should go there vvv, just after the "---".
quoted hunk
--- drivers/staging/Kconfig | 2 + drivers/staging/Makefile | 1 + drivers/staging/wilc1000/Kconfig | 55 + drivers/staging/wilc1000/Makefile | 41 + drivers/staging/wilc1000/TODO | 8 + drivers/staging/wilc1000/coreconfigsimulator.h | 20 + drivers/staging/wilc1000/coreconfigurator.c | 2201 ++++++ drivers/staging/wilc1000/coreconfigurator.h | 498 ++ drivers/staging/wilc1000/fifo_buffer.c | 142 + drivers/staging/wilc1000/fifo_buffer.h | 23 + drivers/staging/wilc1000/host_interface.c | 8074 +++++++++++++++++++++ drivers/staging/wilc1000/host_interface.h | 1344 ++++ drivers/staging/wilc1000/itypes.h | 60 + drivers/staging/wilc1000/linux_mon.c | 643 ++ drivers/staging/wilc1000/linux_wlan.c | 2953 ++++++++ drivers/staging/wilc1000/linux_wlan_common.h | 170 + drivers/staging/wilc1000/linux_wlan_sdio.c | 249 + drivers/staging/wilc1000/linux_wlan_sdio.h | 14 + drivers/staging/wilc1000/linux_wlan_spi.c | 510 ++ drivers/staging/wilc1000/linux_wlan_spi.h | 14 + drivers/staging/wilc1000/wilc_debugfs.c | 185 + drivers/staging/wilc1000/wilc_errorsupport.h | 84 + drivers/staging/wilc1000/wilc_event.h | 123 + drivers/staging/wilc1000/wilc_exported_buf.c | 76 + drivers/staging/wilc1000/wilc_log.h | 47 + drivers/staging/wilc1000/wilc_memory.c | 63 + drivers/staging/wilc1000/wilc_memory.h | 330 + drivers/staging/wilc1000/wilc_msgqueue.c | 211 + drivers/staging/wilc1000/wilc_msgqueue.h | 133 + drivers/staging/wilc1000/wilc_osconfig.h | 55 + drivers/staging/wilc1000/wilc_oswrapper.h | 133 + drivers/staging/wilc1000/wilc_platform.h | 181 + drivers/staging/wilc1000/wilc_sdio.c | 1298 ++++ drivers/staging/wilc1000/wilc_semaphore.c | 70 + drivers/staging/wilc1000/wilc_semaphore.h | 115 + drivers/staging/wilc1000/wilc_sleep.c | 36 + drivers/staging/wilc1000/wilc_sleep.h | 45 + drivers/staging/wilc1000/wilc_spi.c | 1475 ++++ drivers/staging/wilc1000/wilc_strutils.c | 431 ++ drivers/staging/wilc1000/wilc_strutils.h | 412 ++ drivers/staging/wilc1000/wilc_thread.c | 35 + drivers/staging/wilc1000/wilc_thread.h | 153 + drivers/staging/wilc1000/wilc_time.c | 163 + drivers/staging/wilc1000/wilc_time.h | 205 + drivers/staging/wilc1000/wilc_timer.c | 51 + drivers/staging/wilc1000/wilc_timer.h | 153 + drivers/staging/wilc1000/wilc_type.h | 34 + drivers/staging/wilc1000/wilc_wfi_cfgoperations.c | 4592 ++++++++++++ drivers/staging/wilc1000/wilc_wfi_cfgoperations.h | 134 + drivers/staging/wilc1000/wilc_wfi_netdevice.c | 960 +++ drivers/staging/wilc1000/wilc_wfi_netdevice.h | 277 + drivers/staging/wilc1000/wilc_wlan.c | 2434 +++++++ drivers/staging/wilc1000/wilc_wlan.h | 321 + drivers/staging/wilc1000/wilc_wlan_cfg.c | 643 ++ drivers/staging/wilc1000/wilc_wlan_cfg.h | 33 + drivers/staging/wilc1000/wilc_wlan_if.h | 991 +++ 56 files changed, 33704 insertions(+) create mode 100644 drivers/staging/wilc1000/Kconfig create mode 100644 drivers/staging/wilc1000/Makefile create mode 100644 drivers/staging/wilc1000/TODO create mode 100644 drivers/staging/wilc1000/coreconfigsimulator.h create mode 100644 drivers/staging/wilc1000/coreconfigurator.c create mode 100644 drivers/staging/wilc1000/coreconfigurator.h create mode 100644 drivers/staging/wilc1000/fifo_buffer.c create mode 100644 drivers/staging/wilc1000/fifo_buffer.h create mode 100644 drivers/staging/wilc1000/host_interface.c create mode 100644 drivers/staging/wilc1000/host_interface.h create mode 100644 drivers/staging/wilc1000/itypes.h create mode 100644 drivers/staging/wilc1000/linux_mon.c create mode 100644 drivers/staging/wilc1000/linux_wlan.c create mode 100644 drivers/staging/wilc1000/linux_wlan_common.h create mode 100644 drivers/staging/wilc1000/linux_wlan_sdio.c create mode 100644 drivers/staging/wilc1000/linux_wlan_sdio.h create mode 100644 drivers/staging/wilc1000/linux_wlan_spi.c create mode 100644 drivers/staging/wilc1000/linux_wlan_spi.h create mode 100644 drivers/staging/wilc1000/wilc_debugfs.c create mode 100644 drivers/staging/wilc1000/wilc_errorsupport.h create mode 100644 drivers/staging/wilc1000/wilc_event.h create mode 100644 drivers/staging/wilc1000/wilc_exported_buf.c create mode 100644 drivers/staging/wilc1000/wilc_log.h create mode 100644 drivers/staging/wilc1000/wilc_memory.c create mode 100644 drivers/staging/wilc1000/wilc_memory.h create mode 100644 drivers/staging/wilc1000/wilc_msgqueue.c create mode 100644 drivers/staging/wilc1000/wilc_msgqueue.h create mode 100644 drivers/staging/wilc1000/wilc_osconfig.h create mode 100644 drivers/staging/wilc1000/wilc_oswrapper.h create mode 100644 drivers/staging/wilc1000/wilc_platform.h create mode 100644 drivers/staging/wilc1000/wilc_sdio.c create mode 100644 drivers/staging/wilc1000/wilc_semaphore.c create mode 100644 drivers/staging/wilc1000/wilc_semaphore.h create mode 100644 drivers/staging/wilc1000/wilc_sleep.c create mode 100644 drivers/staging/wilc1000/wilc_sleep.h create mode 100644 drivers/staging/wilc1000/wilc_spi.c create mode 100644 drivers/staging/wilc1000/wilc_strutils.c create mode 100644 drivers/staging/wilc1000/wilc_strutils.h create mode 100644 drivers/staging/wilc1000/wilc_thread.c create mode 100644 drivers/staging/wilc1000/wilc_thread.h create mode 100644 drivers/staging/wilc1000/wilc_time.c create mode 100644 drivers/staging/wilc1000/wilc_time.h create mode 100644 drivers/staging/wilc1000/wilc_timer.c create mode 100644 drivers/staging/wilc1000/wilc_timer.h create mode 100644 drivers/staging/wilc1000/wilc_type.h create mode 100644 drivers/staging/wilc1000/wilc_wfi_cfgoperations.c create mode 100644 drivers/staging/wilc1000/wilc_wfi_cfgoperations.h create mode 100644 drivers/staging/wilc1000/wilc_wfi_netdevice.c create mode 100644 drivers/staging/wilc1000/wilc_wfi_netdevice.h create mode 100644 drivers/staging/wilc1000/wilc_wlan.c create mode 100644 drivers/staging/wilc1000/wilc_wlan.h create mode 100644 drivers/staging/wilc1000/wilc_wlan_cfg.c create mode 100644 drivers/staging/wilc1000/wilc_wlan_cfg.h create mode 100644 drivers/staging/wilc1000/wilc_wlan_if.hdiff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index bfacf69..da35af6 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig@@ -112,4 +112,6 @@ source "drivers/staging/i2o/Kconfig" source "drivers/staging/fsl-mc/Kconfig" +source "drivers/staging/wilc1000/Kconfig" + endif # STAGINGdiff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 2bbd1bf..edbe5ff 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile@@ -48,3 +48,4 @@ obj-$(CONFIG_COMMON_CLK_XLNX_CLKWZRD) += clocking-wizard/ obj-$(CONFIG_FB_TFT) += fbtft/ obj-$(CONFIG_I2O) += i2o/ obj-$(CONFIG_FSL_MC_BUS) += fsl-mc/ +obj-$(CONFIG_WILC1000) += wilc1000/diff --git a/drivers/staging/wilc1000/Kconfig b/drivers/staging/wilc1000/Kconfig new file mode 100644 index 0000000..101f908 --- /dev/null +++ b/drivers/staging/wilc1000/Kconfig@@ -0,0 +1,55 @@ +config WILC1000 + tristate "WILC1000 support (WiFi only)" + ---help--- + This module only support IEEE 802.11n WiFi. + +choice + prompt "Memory Allocation" + depends on WILC1000 + default WILC1000_PREALLOCATE_AT_LOADING_DRIVER + + config WILC1000_PREALLOCATE_AT_LOADING_DRIVER + bool "Preallocate memory at loading driver" + ---help--- + This choice supports static allocation of the memory + for the receive buffer. The driver will allocate the RX buffer + during initial time. The driver will also free the buffer + by calling network device stop. + + config WILC1000_DYNAMICALLY_ALLOCATE_MEMROY + bool "Dynamically allocate memory in real time" + ---help--- + This choice supports dynamic allocation of the memory + for the receive buffer. The driver will allocate the RX buffer + when it is required. +endchoice + + +choice + prompt "Bus Type" + depends on WILC1000 + default WILC1000_SDIO + + config WILC1000_SDIO + 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. + + config WILC1000_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. +endchoice + + +config WILC1000_HW_OOB_INTR + bool "Use out of band interrupt" + 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. +diff --git a/drivers/staging/wilc1000/Makefile b/drivers/staging/wilc1000/Makefile new file mode 100644 index 0000000..84bd975 --- /dev/null +++ b/drivers/staging/wilc1000/Makefile@@ -0,0 +1,41 @@ +obj-$(CONFIG_WILC1000) += wilc1000.o +obj-$(CONFIG_WILC1000_PREALLOCATE_DURING_SYSTEM_BOOT) += wilc_exported_buf.o + + +ccflags-$(CONFIG_WILC1000_SDIO) += -DWILC_SDIO -DCOMPLEMENT_BOOT +ccflags-$(CONFIG_WILC1000_HW_OOB_INTR) += -DWILC_SDIO_IRQ_GPIO +ccflags-$(CONFIG_WILC1000_SPI) += -DWILC_SPI + +ccflags-y += -DSTA_FIRMWARE=\"atmel/wilc1000_fw.bin\" \ + -DAP_FIRMWARE=\"atmel/wilc1000_ap_fw.bin\" \ + -DP2P_CONCURRENCY_FIRMWARE=\"atmel/wilc1000_p2p_fw.bin\" + +ccflags-y += -I$(src)/ -DEXPORT_SYMTAB -D__CHECK_ENDIAN__ -DWILC_ASIC_A0 \ + -DPLL_WORKAROUND -DCONNECT_DIRECT -DAGING_ALG \ + -DWILC_PARSE_SCAN_IN_HOST -DDISABLE_PWRSAVE_AND_SCAN_DURING_IP \ + -DWILC_PLATFORM=WILC_LINUXKERNEL -Wno-unused-function -DUSE_WIRELESS \ + -DWILC_DEBUGFS +#ccflags-y += -DTCP_ACK_FILTER + +ccflags-$(CONFIG_WILC1000_PREALLOCATE_DURING_SYSTEM_BOOT) += -DMEMORY_STATIC \ + -DWILC_PREALLOC_AT_BOOT + +ccflags-$(CONFIG_WILC1000_PREALLOCATE_AT_LOADING_DRIVER) += -DMEMORY_STATIC \ + -DWILC_PREALLOC_AT_INSMOD + +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 \ + wilc_memory.o wilc_msgqueue.o wilc_semaphore.o wilc_sleep.o wilc_strutils.o \ + wilc_thread.o wilc_time.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 + +wilc1000-$(CONFIG_WILC1000_SDIO) += linux_wlan_sdio.o +wilc1000-$(CONFIG_WILC1000_SPI) += linux_wlan_spi.o + +WILC1000_SRC_VERSION = 10.0 +PATCHLEVEL = 2 +WILC1000_FW_VERSION = 0 + +ccflags-y += -D__DRIVER_VERSION__=\"$(WILC1000_SRC_VERSION).$(PATCHLEVEL)\"diff --git a/drivers/staging/wilc1000/TODO b/drivers/staging/wilc1000/TODO new file mode 100644 index 0000000..4dc807b --- /dev/null +++ b/drivers/staging/wilc1000/TODO@@ -0,0 +1,8 @@ +TODO: +- remove the dependencies of kernel versions +- remove OS wrapper functions +- remove custom debug and tracing functions +- rework comments and function headers(also coding style) +- remove build warnings +- support soft-ap and p2p mode +- support resume/suspend functiondiff --git a/drivers/staging/wilc1000/coreconfigsimulator.h b/drivers/staging/wilc1000/coreconfigsimulator.h new file mode 100644 index 0000000..6c3f431 --- /dev/null +++ b/drivers/staging/wilc1000/coreconfigsimulator.h
[..] -- Nicolas Ferre