KDIR  := /lib/modules/$(shell uname -r)/build
PWD   := $(shell pwd)

RWNX_VERS_NUM=6.4.3.0

CONFIG_PLATFORM_NANOPI_M4 ?= n
CONFIG_PLATFORM_ALLWINNER ?= n
CONFIG_PLATFORM_INGENIC_T20 ?= n
CONFIG_PLATFORM_UBUNTU ?= n

FAST_FROM_DRIVER = y
HANDLE_TX_THREAD_ZTE = y
HANDLE_RX_THREAD_ZTE = y

CONFIG_ANDROID_PLATFORM ?= n
ifeq ($(CONFIG_PLATFORM_NANOPI_M4), y)
CONFIG_ANDROID_PLATFORM = y
endif
ifeq ($(CONFIG_PLATFORM_ALLWINNER), y)
CONFIG_ANDROID_PLATFORM = y
endif
# Support of bootrom start
CONFIG_START_FROM_BOOTROM = y

# Support of pmic setting, new version bootrom avaliable
CONFIG_PMIC_SETTING ?=y

# Select DCDC_VRF, check your board
CONFIG_VRF_DCDC_MODE = y

# ROM patch enabled option
CONFIG_ROM_PATCH_EN ?=y

# FPGA verification
CONFIG_FPGA_VERIFICATION ?=n

CONFIG_VHT_FOR_OLD_KERNEL ?= y
# Support HE on old version kernel
CONFIG_HE_FOR_OLD_KERNEL ?= y
ifeq ($(CONFIG_PLATFORM_ALLWINNER), y)
CONFIG_HE_FOR_OLD_KERNEL = y
endif

# Support chip with mcu
CONFIG_MCU_INTEGRATED ?= n
CONFIG_MCU_MESSAGE ?= n
ifeq ($(CONFIG_MCU_INTEGRATED), y)
CONFIG_PMIC_SETTING = n
else
CONFIG_MCU_MESSAGE ?= n
endif

# Support coex with bt
CONFIG_COEX ?= y

#
# WAITING FOR KCONFIG {
#
CONFIG_RWNX_FULLMAC ?= y
CONFIG_RWNX_FHOST ?= n

#
# DEBUG OPTIONS
CONFIG_RWNX_UM_HELPER_DFLT ?= "/dini/dini_bin/rwnx_umh.sh"
CONFIG_AIC_FW_PATH = "/vendor/etc/firmware"
export CONFIG_AIC_FW_PATH

#
# FW ARCH:
CONFIG_RWNX_SDM ?= n
CONFIG_RWNX_TL4 ?= n

# IPC version
CONFIG_RWNX_OLD_IPC ?= n

# Support of P2P DebugFS for enabling/disabling NoA and OppPS
CONFIG_RWNX_P2P_DEBUGFS ?= n
ccflags-y := -DCONFIG_RWNX_FULLMAC
# FW path
ifeq ($(CONFIG_PLATFORM_NANOPI_M4), y) # NANOPI_M4
CONFIG_VENDOR_SPECIFIED_FW_PATH ?= "/vendor/firmware"
else # NANOPI_M4
ifeq ($(CONFIG_PLATFORM_ALLWINNER), y) # ALLWINNER
CONFIG_VENDOR_SPECIFIED_FW_PATH ?= "/vendor/etc/firmware"
else # ALLWINNER
ifeq ($(CONFIG_PLATFORM_INGENIC_T20), y) # INGENTIC_T20
CONFIG_VENDOR_SPECIFIED_FW_PATH ?= "/lib/firmware"
else # INGENTIC_T20
ifeq ($(CONFIG_PLATFORM_UBUNTU), y) # PC
CONFIG_VENDOR_SPECIFIED_FW_PATH ?= "/lib/firmware"
CONFIG_VENDOR_SUBDIR_NAME ?= "aic8818"
endif # PC
endif # INGENTIC_T20
endif # ALLWINNER
endif # NANOPI_M4
CONFIG_VENDOR_SPECIFIED_FW_PATH ?= "/etc/firmware"
ifneq ($(CONFIG_VENDOR_SPECIFIED_FW_PATH),)
subdir-ccflags-y += -DCONFIG_VENDOR_SPECIFIED_FW_PATH=\"$(CONFIG_VENDOR_SPECIFIED_FW_PATH)\"
endif
ifneq ($(CONFIG_VENDOR_SUBDIR_NAME),)
subdir-ccflags-y += -DCONFIG_VENDOR_SUBDIR_NAME=\"$(CONFIG_VENDOR_SUBDIR_NAME)\"
endif

#
# } // WAITING FOR KCONFIG
#

# Enable A-MSDU support (need FW support)
## Select this if FW is compiled with AMSDU support
CONFIG_RWNX_SPLIT_TX_BUF ?= n
## Select this TO send AMSDU
CONFIG_RWNX_AMSDUS_TX ?= n

# Enable BFMER support (need FW support)
CONFIG_RWNX_BFMER ?= n

CONFIG_SDIO_SUPPORT =y
CONFIG_USB_SUPPORT =n
CONFIG_RX_REORDER ?=y
CONFIG_ARP_OFFLOAD =y
CONFIG_USE_5G =n
CONFIG_RADAR_OR_IR_DETECT =n
CONFIG_DOWNLOAD_FW =n
CONFIG_LOAD_USERCONFIG ?=y
CONFIG_CHIP_REBOOT ?=n
CONFIG_BT_SUPPORT ?=n
CONFIG_RFTEST=y
CONFIG_RFTEST_USB_BT=n
CONFIG_RFTEST_UART_BT=y
CONFIG_USB_BT =y
CONFIG_MAC_RANDOM_IF_NO_MAC_IN_EFUSE ?= y
CONFIG_SDIO_PWRCTRL ?= n
CONFIG_WPA3_FOR_OLD_KERNEL ?= y
CONFIG_USB_MSG_OUT_EP =y
CONFIG_USB_MSG_IN_EP =y
CONFIG_USB_TX_AGGR=n
ifeq ($(CONFIG_AIC8800_SDIO_TX_AGGR), y)
CONFIG_SDIO_AGGR=y
else
CONFIG_SDIO_AGGR=n
endif
CONFIG_SET_VENDOR_EXTENSION_IE = n
ifeq ($(CONFIG_AIC8800_SDIO_RX_AGGR), y)
CONFIG_LESS_SKB = y
else
CONFIG_LESS_SKB = n
endif
CONFIG_CREATE_TRACE_POINTS = n
CONFIG_TX_NETIF_FLOWCTRL = y
CONFIG_AGGRESSIVE_TX = n
CONFIG_ONE_TXQ = y
CONFIG_TXRX_THREAD_PRIO = y

# Support of MU-MIMO transmission (need FW support)
ifeq ($(CONFIG_RWNX_BFMER), y)
CONFIG_RWNX_MUMIMO_TX ?= n
else
CONFIG_RWNX_MUMIMO_TX = n
endif

# Enable handling of radar event
CONFIG_RWNX_RADAR ?= n

# Enable HW queue for Broadcast/Multicast traffic (need FW support)
CONFIG_RWNX_BCMC ?= y

# Enable Monitor+Data interface support (need FW support)
CONFIG_RWNX_MON_DATA =y
CONFIG_RWNX_MON_XMIT ?= n

# extra DEBUG config
CONFIG_RWNX_SW_PROFILING ?= n
CONFIG_RWNX_DBG ?= y
CONFIG_DEBUG_FS_AIC = n

obj-y += aic8818_fdrv.o
aic8818_fdrv-y := rwnx_msg_tx.o       \
               rwnx_msg_rx.o          \
               rwnx_utils.o           \
               rwnx_cmds.o            \
               rwnx_irqs.o            \
               rwnx_cfgfile.o         \
               rwnx_strs.o            \
               rwnx_rx.o              \
               rwnx_tx.o              \
               rwnx_txq.o             \
               rwnx_main.o            \
               rwnx_mod_params.o      \
               rwnx_mesh.o            \
               rwnx_platform.o	      \
               rwnx_pci.o             \
               rwnx_dini.o            \
               rwnx_v7.o              \
               ipc_host.o             \
               rwnx_tdls.o            \
               regdb.o				\
               wifi_dev_aic88.o		\
               aic88-generic-wlan.o    \
	       aicwf_mem_prealloc.o

aic8818_fdrv-$(CONFIG_RWNX_RADAR)       += rwnx_radar.o
aic8818_fdrv-$(CONFIG_DEBUG_FS_AIC)         += rwnx_debugfs.o
aic8818_fdrv-$(CONFIG_DEBUG_FS_AIC)         += rwnx_fw_trace.o
aic8818_fdrv-$(CONFIG_NL80211_TESTMODE) += rwnx_testmode.o
aic8818_fdrv-$(CONFIG_RWNX_BFMER)       += rwnx_bfmer.o
aic8818_fdrv-$(CONFIG_RWNX_MUMIMO_TX)   += rwnx_mu_group.o
aic8818_fdrv-$(CONFIG_SDIO_SUPPORT)     += sdio_host.o
aic8818_fdrv-$(CONFIG_SDIO_SUPPORT)     += aicwf_txrxif.o
aic8818_fdrv-$(CONFIG_SDIO_SUPPORT)     += aicwf_sdio.o

aic8818_fdrv-$(CONFIG_USB_SUPPORT)      += usb_host.o
aic8818_fdrv-$(CONFIG_USB_SUPPORT)      += aicwf_txrxif.o
aic8818_fdrv-$(CONFIG_USB_SUPPORT)      += aicwf_usb.o

ccflags-$(CONFIG_DEBUG_FS_AIC) += -DCONFIG_RWNX_DEBUGFS
ccflags-$(CONFIG_DEBUG_FS_AIC) += -DCONFIG_RWNX_UM_HELPER_DFLT=\"$(CONFIG_RWNX_UM_HELPER_DFLT)\"
ccflags-$(CONFIG_RWNX_P2P_DEBUGFS) += -DCONFIG_RWNX_P2P_DEBUGFS

# FW VARS
subdir-ccflags-y += -DNX_VIRT_DEV_MAX=4
subdir-ccflags-y += -DNX_REMOTE_STA_MAX=32    #U01: 8   U02: 32
subdir-ccflags-y += -DNX_MU_GROUP_MAX=62
subdir-ccflags-y += -DNX_TXDESC_CNT=64
subdir-ccflags-y += -DNX_TX_MAX_RATES=4
subdir-ccflags-y += -DNX_CHAN_CTXT_CNT=3

# FW ARCH:
ccflags-$(CONFIG_RWNX_SDM) += -DCONFIG_RWNX_SDM
ccflags-$(CONFIG_RWNX_TL4) += -DCONFIG_RWNX_TL4
ccflags-$(CONFIG_RWNX_OLD_IPC) += -DCONFIG_RWNX_OLD_IPC
ccflags-$(CONFIG_PLATFORM_NANOPI_M4) += -DCONFIG_NANOPI_M4
ccflags-$(CONFIG_PLATFORM_INGENIC_T20) += -DCONFIG_INGENIC_T20
ccflags-$(CONFIG_PLATFORM_ALLWINNER) += -DCONFIG_PLATFORM_ALLWINNER
subdir-ccflags-$(CONFIG_ANDROID_PLATFORM) += -DCONFIG_ANDROID_PLATFORM
ccflags-$(CONFIG_START_FROM_BOOTROM) += -DCONFIG_START_FROM_BOOTROM
ccflags-$(CONFIG_PMIC_SETTING) += -DCONFIG_PMIC_SETTING
ccflags-$(CONFIG_VRF_DCDC_MODE) += -DCONFIG_VRF_DCDC_MODE
ccflags-$(CONFIG_ROM_PATCH_EN) += -DCONFIG_ROM_PATCH_EN
ccflags-$(CONFIG_FPGA_VERIFICATION) += -DCONFIG_FPGA_VERIFICATION
ccflags-$(CONFIG_VHT_FOR_OLD_KERNEL) += -DCONFIG_VHT_FOR_OLD_KERNEL
ccflags-$(CONFIG_PLATFORM_ALLWINNER) += -DCONFIG_HE_FOR_OLD_KERNEL
ccflags-$(CONFIG_HE_FOR_OLD_KERNEL) += -DCONFIG_HE_FOR_OLD_KERNEL

ccflags-y += -I$(src)/.
ccflags-$(CONFIG_RWNX_RADAR) += -DCONFIG_RWNX_RADAR
ccflags-$(CONFIG_RWNX_MON_DATA) += -DCONFIG_RWNX_MON_DATA
ccflags-$(CONFIG_RWNX_MON_XMIT) += -DCONFIG_RWNX_MON_XMIT
ccflags-$(CONFIG_RWNX_BFMER) += -DCONFIG_RWNX_BFMER
ccflags-$(CONFIG_RWNX_SPLIT_TX_BUF) += -DCONFIG_RWNX_SPLIT_TX_BUF
ifeq ($(CONFIG_RWNX_SPLIT_TX_BUF), y)
ccflags-$(CONFIG_RWNX_AMSDUS_TX) += -DCONFIG_RWNX_AMSDUS_TX
endif
ccflags-$(CONFIG_RWNX_DBG) += -DCONFIG_RWNX_DBG
ccflags-$(CONFIG_RWNX_SW_PROFILING) += -DCONFIG_RWNX_SW_PROFILING
ccflags-$(CONFIG_RWNX_MUMIMO_TX) += -DCONFIG_RWNX_MUMIMO_TX
ccflags-$(CONFIG_CREATE_TRACE_POINTS) += -DCREATE_TRACE_POINTS
ccflags-$(CONFIG_RFTEST) += -DCONFIG_RFTEST
ccflags-$(CONFIG_RFTEST_USB_BT) += -DCONFIG_RFTEST_USB_BT
ccflags-$(CONFIG_RFTEST_UART_BT) += -DCONFIG_RFTEST_UART_BT
ccflags-$(CONFIG_WPA3_FOR_OLD_KERNEL) += -DCONFIG_WPA3_FOR_OLD_KERNEL
ccflags-$(CONFIG_SET_VENDOR_EXTENSION_IE) += -DCONFIG_SET_VENDOR_EXTENSION_IE
ccflags-$(CONFIG_TX_NETIF_FLOWCTRL) += -DCONFIG_TX_NETIF_FLOWCTRL
ccflags-$(CONFIG_AGGRESSIVE_TX)  += -DCONFIG_AGGRESSIVE_TX
ccflags-$(CONFIG_ONE_TXQ)  += -DCONFIG_ONE_TXQ
ccflags-$(CONFIG_TXRX_THREAD_PRIO) += -DCONFIG_TXRX_THREAD_PRIO

ifeq ($(CONFIG_LESS_SKB), y)
ccflags-y += -DLESS_SKB
# KBUILD_EXTRA_SYMBOLS += $(PWD)/../prealloc/Module.symvers
endif

ifeq ($(CONFIG_SDIO_SUPPORT), y)
ccflags-y += -DAICWF_SDIO_SUPPORT
ccflags-$(CONFIG_SDIO_PWRCTRL) += -DCONFIG_SDIO_PWRCTRL
ccflags-$(CONFIG_SDIO_AGGR) += -DCONFIG_SDIO_AGGR
endif

ifeq ($(CONFIG_USB_SUPPORT), y)
ccflags-y += -DAICWF_USB_SUPPORT
ccflags-$(CONFIG_USB_MSG_OUT_EP) += -DCONFIG_USB_MSG_OUT_EP
ccflags-$(CONFIG_USB_MSG_IN_EP) += -DCONFIG_USB_MSG_IN_EP
ccflags-$(CONFIG_USB_TX_AGGR) += -DCONFIG_USB_TX_AGGR
endif

ifeq ($(CONFIG_RWNX_MUMIMO_TX), y)
ccflags-y += -DCONFIG_USER_MAX=2
else
ccflags-y += -DCONFIG_USER_MAX=1
endif

ifeq ($(CONFIG_RWNX_BCMC), y)
ccflags-y += -DNX_TXQ_CNT=5
else
ccflags-y += -DNX_TXQ_CNT=4
endif

# For old kernel (<=3.19)
ifeq ($(shell test $(VERSION) -lt 4 -a "$(CONFIG_VENDOR_RWNX)" = y ; echo $$?),0)
subdir-ccflags-y += -DCONFIG_VENDOR_RWNX_VHT_NO80
endif

ccflags-$(CONFIG_RX_REORDER) += -DAICWF_RX_REORDER
ccflags-$(CONFIG_ARP_OFFLOAD) += -DAICWF_ARP_OFFLOAD
ccflags-$(CONFIG_USE_5G) += -DUSE_5G
ccflags-$(CONFIG_RADAR_DETECT) += -DRADAR_OR_IR_DETECT
ccflags-$(CONFIG_DOWNLOAD_FW)  += -DCONFIG_DOWNLOAD_FW
ccflags-$(CONFIG_LOAD_USERCONFIG) += -DCONFIG_LOAD_USERCONFIG
ccflags-$(HANDLE_TX_THREAD_ZTE)  += -DHANDLE_TX_THREAD_ZTE
ccflags-$(HANDLE_RX_THREAD_ZTE)  += -DHANDLE_RX_THREAD_ZTE
ccflags-$(FAST_FROM_DRIVER)  += -DFAST_FROM_DRIVER
ccflags-$(CONFIG_CHIP_REBOOT) += -DCONFIG_CHIP_REBOOT
ccflags-$(CONFIG_BT_SUPPORT) += -DCONFIG_BT_SUPPORT
ccflags-$(CONFIG_USB_BT)  += -DCONFIG_USB_BT
ccflags-$(CONFIG_MAC_RANDOM_IF_NO_MAC_IN_EFUSE) += -DCONFIG_MAC_RANDOM_IF_NO_MAC_IN_EFUSE

#ldflags-y += --strip-debug

all: modules
modules:
	make -C $(KDIR) M=$(PWD) modules
clean:
	$(MAKE) -C $(KDIR) M=$(PWD) clean

