AML_VERS_NUM=6.10.0.0
# KERNELDIR ?= /usr/lib/modules/$(shell uname -r)/build
PWD=$(shell pwd)
ifeq ($(ARCH),)
ARCH ?= arm64
CROSS_COMPILE ?= aarch64-linux-gnu-
else ifeq ($(ARCH),arm)
SYSTEM_TYPE = SYSTEM32
CROSS_COMPILE ?= arm-linux-gnueabihf-
EXTRA_CFLAGS += -DSYSTEM32
else ifeq ($(ARCH),arm64)
SYSTEM_TYPE = SYSTEM64
CROSS_COMPILE ?= aarch64-linux-gnu-
EXTRA_CFLAGS += -DSYSTEM64
endif
ifeq ($(ROKU_PROJECT), y)
CUSTOM_LOG_PREFIX = wlan
-include $(BACKPORTS_VERSIONS)
ifneq ($(BACKPORTED_KERNEL_VERSION),)
export CFG_CFG80211_VERSION ?= $(BACKPORTED_KERNEL_VERSION)
endif

ifeq ($(ROKU_TV_PROJECT), y)
SDIO_MODE_ON = n
endif

ifneq ($(BACKPORTS_VERSIONS),)
LINUXINCLUDE := $(BACKPORTS_INCLUDE_DIR) $(LINUXINCLUDE)
include $(BACKPORTS_VERSIONS)
subdir-ccflags-y += -D__rcu=
subdir-ccflags-y += -DCOMPAT_KERNEL_RELEASE=1
subdir-ccflags-y += '-include' 'backport/backport.h'
subdir-ccflags-y += -DCPTCFG_VERSION=\"$(BACKPORTS_VERSION)\"
subdir-ccflags-y += -DCPTCFG_KERNEL_VERSION=\"$(BACKPORTED_KERNEL_VERSION)\"
subdir-ccflags-y += -DCPTCFG_KERNEL_NAME=\"$(BACKPORTED_KERNEL_NAME)\"
subdir-ccflags-y += -DBACKPORTED_KERNEL_NAME=\"$(BACKPORTED_KERNEL_NAME)\"
subdir-ccflags-y += -DBACKPORTS_VERSION=\"$(BACKPORTS_VERSION)\"
subdir-ccflags-y += -DBACKPORTED_KERNEL_VERSION=\"$(BACKPORTED_KERNEL_VERSION)\"
subdir-ccflags-y += -Wno-error=missing-attributes
subdir-ccflags-y += -Wno-error=stringop-truncation
subdir-ccflags-y += -Wno-error=unused-variable
endif
subdir-ccflags-y += -DCONFIG_ROKU
ifeq ($(BACKPORTS_3), y)
subdir-ccflags-y += -DCOMPAT_KERNEL_RELEASE_3_14=1
$(info set COMPAT_KERNEL_RELEASE_3_14)
else
# Assume all non_backport_3 is using backport_4_19
subdir-ccflags-y += -DCOMPAT_KERNEL_RELEASE_4_19=1
$(info set COMPAT_KERNEL_RELEASE_4_19)
endif
endif

ifneq ($(CFG_CFG80211_VERSION),)
VERSION_STR = $(subst $\",,$(subst ., , $(subst -, ,$(subst v,,$(CFG_CFG80211_VERSION)))))
$(info VERSION_STR=$(VERSION_STR))
X = $(firstword $(VERSION_STR))
Y = $(word 2 ,$(VERSION_STR))
Z = $(word 3 ,$(VERSION_STR))
VERSION := $(shell echo "$$(( $(X) * 65536 + $(Y) * 256 + $(Z)))" )
subdir-ccflags-y += -DCFG_CFG80211_VERSION=$(VERSION)
$(info DCFG_CFG80211_VERSION=$(VERSION))
endif

ifeq ($(PROJ_NAME),p-amlogic)
SRCTOP ?= /proj/vlsi.wifi/p-amlogic
KERNELDIR ?= $(SRCTOP)/out/target/product/newton/obj/KERNEL_OBJ
EXTRA_CFLAGS += -DSYSTEM64
else ifeq ($(PROJ_NAME),yeke)
SRCTOP ?= /proj/vlsi.wifi/yeke_64bit
KERNELDIR ?= $(SRCTOP)/out/target/product/p281/obj/KERNEL_OBJ
EXTRA_CFLAGS += -DSYSTEM64
else ifeq ($(PROJ_NAME),9-xiaomi)
SRCTOP ?= /proj/vlsi.wifi/9-xiaomi
KERNELDIR ?= $(SRCTOP)/out/target/product/aquaman/obj/KERNEL_OBJ
EXTRA_CFLAGS += -DSYSTEM64
else ifeq ($(PROJ_NAME),gva)
SRCTOP ?= /proj/vlsi.wifi/gva
KERNELDIR ?= $(SRCTOP)/kernel-4.9/common
EXTRA_CFLAGS += -DSYSTEM64
else
ifeq ($(SYSTEM_TYPE),)
ARCH = arm
CROSS_COMPILE = arm-linux-gnueabihf-
EXTRA_CFLAGS += -DSYSTEM32
endif
SRCTOP ?= /proj/vlsi.wifi/p212_32bit
KERNELDIR ?= $(SRCTOP)/out/target/product/ampere/obj/KERNEL_OBJ
endif

CC        ?= $(CROSS_COMPILE)gcc
STRIP     ?= $(CROSS_COMPILE)strip

M ?= $(shell pwd)
ifneq ($(KERNEL_SRC),)
CUR_DIR  := $(KERNEL_SRC)/$(M)
else
CUR_DIR  := $(M)
endif
EXT_INCS := $(CUR_DIR)/../common
INCS     := -I$(CUR_DIR) -I$(EXT_INCS)
KERNEL_SRC ?= $(KERNELDIR)
TARGET = vlsicomm

#
# WAITING FOR KCONFIG {
#
CONFIG_AML_SOFTMAC ?= n
CONFIG_AML_FULLMAC ?= m
CONFIG_AML_FHOST ?= n

#
# DEBUG OPTIONS
CONFIG_AML_UM_HELPER_DFLT ?= "/usr/bin/aml_umh.sh"

#
# FW ARCH:
CONFIG_AML_SDM ?= n
CONFIG_AML_TL4 ?= n

# IPC version
CONFIG_AML_OLD_IPC ?= n

# Support of P2P DebugFS for enabling/disabling NoA and OppPS
CONFIG_AML_P2P_DEBUGFS ?= y

# Need open it when use FPGA pcie version
CONFIG_AML_FPGA_PCIE ?= n

# Product test mode
CONFIG_PT_MODE ?= n

# Amlogic specified android(/w Kernel) platform depends
CONFIG_AML_PLATFORM_ANDROID ?= y

CONFIG_AML_SDIO_IRQ_VIA_GPIO ?= y

# Use platform random mac
CONFIG_AML_PLATFORM_RANDOM_MAC ?= n

# Support to use preallocing static buffer for wlan driver reloadable
CONFIG_AML_PREALLOC_BUF_STATIC ?= y

# Support to use preallocing buffer for debug SKB alloc failed
CONFIG_AML_PREALLOC_BUF_SKB ?= n

# Config to enable WFA certification mode
CONFIG_AML_WFA_CERT_MODE ?= n

# Config to enable Power_Save mode
CONFIG_AML_POWER_SAVE_MODE ?= n

# Config to enable GOOGLE_CAST wake host
CONFIG_AML_WOW_GOOGLE_CAST_EN ?= n

# Config to enable MAGIC_PKT wake host
CONFIG_AML_WOW_MAGIC_PACKET_EN ?= n

# Support to use tasks to process IRQ Handlers
CONFIG_AML_USE_TASK ?= y

# Support recovery function
CONFIG_AML_RECOVERY ?= y
# } // WAITING FOR KCONFIG
#

# Support rx minisize function
CONFIG_AML_RX_MINISIZE ?= y

# Support RX BIGSIZE function
CONFIG_AML_RX_BIGSIZE ?= n

# Support ND_RANDOM_MAC_ADDR
CONFIG_ND_RANDOM_MAC_ADDR ?= n

#support NAPI
CONFIG_AML_NAPI ?= y

# support MDNS_OFFLOAD feature
CONFIG_MDNS_OFFLOAD_FEATURE ?= y

# support rf low power feature
CONFIG_RF_POWER_OPTI ?= n

# support rf 1T2R feature
CONFIG_RF_TNUM_CFG ?= n

# Support 4.9 ax
ifeq ($(CONFIG_AML_KERNEL_4_9),y)
CONFIG_KERNEL_AX_PATCH ?= y
endif
# } // NEED 4.9 PATCH

# compile sdio in driver
SDIO_MODE_ON ?= y
export SDIO_MODE_ON
CUSTOM_LOG_PREFIX ?= n
export CUSTOM_LOG_PREFIX
#CONFIG_SDIO_TX_ENH ?= y

ifeq ($(CONFIG_GOOGLE_CAST_EN),y)
CONFIG_AML_WOW_GOOGLE_CAST_EN = y
endif

ifeq ($(CONFIG_MAGIC_PACKET_EN),y)
CONFIG_AML_WOW_MAGIC_PACKET_EN = y
endif

# Support sdio rx atuo interrupt function
#CONFIG_SDIO_RX_AUTO_INT ?= y

CONFIG_CUSTOMER_11D_FORBIDDEN ?= y

# optimize the debug mem if driver donot need it
CONFIG_LIGHT_WEIGHT_MEM ?=y

# active powersave mode on
CONFIG_AML_ACTIVE_PS ?=y

subdir-ccflags-$(CONFIG_PT_MODE) += -DCONFIG_PT_MODE
subdir-ccflags-$(CONFIG_AML_PLATFORM_ANDROID) += -DCONFIG_AML_PLATFORM_ANDROID
subdir-ccflags-$(CONFIG_DEBUG_FS) += -DCONFIG_AML_DEBUGFS
subdir-ccflags-$(CONFIG_DEBUG_FS) += -DCONFIG_AML_UM_HELPER_DFLT=\"$(CONFIG_AML_UM_HELPER_DFLT)\"
subdir-ccflags-$(CONFIG_AML_P2P_DEBUGFS) += -DCONFIG_AML_P2P_DEBUGFS
subdir-ccflags-$(CONFIG_AML_FPGA_PCIE) += -DCONFIG_AML_FPGA_PCIE
subdir-ccflags-$(CONFIG_AML_PREALLOC_BUF_STATIC) += -DCONFIG_AML_PREALLOC_BUF_STATIC
subdir-ccflags-$(CONFIG_AML_PREALLOC_BUF_SKB) += -DCONFIG_AML_PREALLOC_BUF_SKB
subdir-ccflags-$(CONFIG_AML_WFA_CERT_MODE) += -DCONFIG_AML_WFA_CERT_MODE
subdir-ccflags-$(CONFIG_AML_POWER_SAVE_MODE) += -DCONFIG_AML_POWER_SAVE_MODE
subdir-ccflags-$(CONFIG_AML_USE_TASK) += -DCONFIG_AML_USE_TASK
subdir-ccflags-$(CONFIG_AML_RECOVERY) += -DCONFIG_AML_RECOVERY
subdir-ccflags-$(CONFIG_AML_RX_MINISIZE) += -DCONFIG_AML_W2L_RX_MINISIZE
subdir-ccflags-$(CONFIG_AML_RX_BIGSIZE) += -DCONFIG_AML_W2_RX_MINISIZE
subdir-ccflags-$(CONFIG_AML_NAPI) += -DCONFIG_AML_NAPI
subdir-ccflags-$(CONFIG_KERNEL_AX_PATCH) += -DCONFIG_KERNEL_AX_PATCH
subdir-ccflags-$(CONFIG_SDIO_RX_AUTO_INT) += -DCONFIG_SDIO_RX_AUTO_INT
#subdir-ccflags-$(CONFIG_SDIO_TX_ENH) += -DCONFIG_SDIO_TX_ENH
subdir-ccflags-$(CONFIG_MDNS_OFFLOAD_FEATURE) += -DMDNS_OFFLOAD_FEATURE
subdir-ccflags-$(CONFIG_RF_POWER_OPTI) += -DRF_POWER_OPTI
subdir-ccflags-$(ROKU_TV_PROJECT) += -DROKU_TV_PROJECT
subdir-ccflags-$(SDIO_MODE_ON) += -DSDIO_MODE_ON
subdir-ccflags-$(CONFIG_AML_WOW_GOOGLE_CAST_EN) += -DAML_WOW_GOOGLE_CAST_EN
subdir-ccflags-$(CONFIG_AML_WOW_MAGIC_PACKET_EN) += -DAML_WOW_MAGIC_PACKET_EN
subdir-ccflags-$(LINUX_UPSTREAM) += -DCONFIG_LINUX_UPSTREAM
subdir-ccflags-$(CONFIG_LIGHT_WEIGHT_MEM) += -DLIGHT_WEIGHT_MEM
subdir-ccflags-$(CONFIG_AML_ACTIVE_PS) += -DCONFIG_ACTIVE_PS
subdir-ccflags-$(CONFIG_ND_RANDOM_MAC_ADDR) += -DCONFIG_ND_RANDOM_MAC_ADDR
subdir-ccflags-$(CONFIG_RF_TNUM_CFG) += -DRF_TNUM_1T2R

# FW VARS
subdir-ccflags-y += -DNX_VIRT_DEV_MAX=4
subdir-ccflags-y += -DNX_REMOTE_STA_MAX=16
subdir-ccflags-y += -DNX_MU_GROUP_MAX=62
subdir-ccflags-y += -DNX_TX_MAX_RATES=4
subdir-ccflags-y += -DNX_CHAN_CTXT_CNT=3

# FW ARCH:
subdir-ccflags-$(CONFIG_AML_SDM) += -DCONFIG_AML_SDM
subdir-ccflags-$(CONFIG_AML_TL4) += -DCONFIG_AML_TL4
subdir-ccflags-$(CONFIG_AML_OLD_IPC) += -DCONFIG_AML_OLD_IPC

ifeq ($(CONFIG_AML_PLATFORM_ANDROID),y)
subdir-ccflags-$(CONFIG_AML_SDIO_IRQ_VIA_GPIO) += -DCONFIG_AML_SDIO_IRQ_VIA_GPIO
subdir-ccflags-$(CONFIG_ANDROID_GKI) += -DCONFIG_ANDROID_GKI

ifneq ($(CONFIG_AML_ANDROID),)
subdir-ccflags-y += -DCONFIG_AML_ANDROID=$(CONFIG_AML_ANDROID)
endif
endif

ifeq ($(CONFIG_CUSTOMER_11D_FORBIDDEN),y)
subdir-ccflags-y += -DCONFIG_CUSTOMER_11D_FORBIDDEN
endif

obj-$(CONFIG_AML_FULLMAC) += fullmac/

all: modules

modules clean:
	@$(PWD)/mklink.sh
	$(MAKE) CUR_DIR=$(CUR_DIR) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KERNEL_SRC) M=$(M) $@
	@$(PWD)/mklink.sh clean
#ifneq (${OUT_DIR},)
#	$(CROSS_COMPILE)strip --strip-unneeded ${OUT_DIR}/$(M)/$(TARGET).ko
#else
#	$(STRIP) -S $(TARGET).ko
#endif

modules_install:
	@$(MAKE) INSTALL_MOD_STRIP=1 M=$(M) -C $(KERNEL_SRC) modules_install
	mkdir -p ${OUT_DIR}/../vendor_lib/modules
	cd ${OUT_DIR}/$(M)/; find -name "*.ko" -exec cp {} ${OUT_DIR}/../vendor_lib/modules/ \;

clean-files := aml_version_gen.h

