# SPDX-License-Identifier: GPL-2.0
# cywdhd
#################
# Usage and porting guide for this Makefile
#################
# 1 Default to the module external build, that is, no need to copy the driver into the kernel source tree
#  Build with:
#       make KDIR=/path/to/your/kernel
# 2 Default to x86 build: Build the x86 driver without any modification outside of kernel
# 3 Just change the 'DHD_PLATFORM=imx' and the IMx OOB version can work!
# 4 Copy DHD_PLATFORM=imx as the start point and create your own name

#####################
# SDIO Basic feature
#####################

DHDCFLAGS += -Wall -Wstrict-prototypes -Dlinux -DLINUX -DBCMDRIVER            \
	-DBCMDONGLEHOST -DUNRELEASEDCHIP -DBCMDMA32 -DBCMFILEIMAGE            \
	-DSHOW_EVENTS -DBCMDBG -DWLP2P                                        \
	-DWIFI_ACT_FRAME -DARP_OFFLOAD_SUPPORT                                \
	-DKEEP_ALIVE -DCSCAN -DPKT_FILTER_SUPPORT                             \
	-DEMBEDDED_PLATFORM -DPNO_SUPPORT                                     \
	-DDHD_DONOT_FORWARD_BCMEVENT_AS_NETWORK_PKT                           \
	-DCUSTOMER_HW2 -DSDTEST -DENABLE_INSMOD_NO_FW_LOAD

#################
# Common feature
#################
DHDCFLAGS += -DWL_CFG80211
# Print out kernel panic point of file and line info when assertion happened
DHDCFLAGS += -DBCMASSERT_LOG

# keepalive
DHDCFLAGS += -DCUSTOM_KEEP_ALIVE_SETTING=28000

DHDCFLAGS += -DVSDB

# Fix __DATE__ & __TIME__ error on gcc version 4.9 or later
GCCVERSION = $(shell $(CC) -dumpversion | cut -f1-2 -d.)
ifeq ($(shell expr $(GCCVERSION) \>= 4.9),1)
  DHDCFLAGS += -Wno-error=date-time
endif

# For p2p connection issue
DHDCFLAGS += -DWL_SCB_TIMEOUT=10

# TDLS enable
DHDCFLAGS += -DWLTDLS
# For TDLS tear down inactive time 40 sec
DHDCFLAGS += -DCUSTOM_TDLS_IDLE_MODE_SETTING=40000
# for TDLS RSSI HIGH for establishing TDLS link
DHDCFLAGS += -DCUSTOM_TDLS_RSSI_THRESHOLD_HIGH=-60
# for TDLS RSSI HIGH for tearing down TDLS link
DHDCFLAGS += -DCUSTOM_TDLS_RSSI_THRESHOLD_LOW=-70

# Roaming/
DHDCFLAGS += -DROAM_AP_ENV_DETECTION
DHDCFLAGS += -DROAM_ENABLE -DROAM_CHANNEL_CACHE -DROAM_API
DHDCFLAGS += -DENABLE_FW_ROAM_SUSPEND
# Roaming trigger
DHDCFLAGS += -DCUSTOM_ROAM_TRIGGER_SETTING=-75
DHDCFLAGS += -DCUSTOM_ROAM_DELTA_SETTING=10
# Voice Enterprise
DHDCFLAGS += -DWLFBT
# Set PM 2 always regardless suspend/resume
DHDCFLAGS += -DSUPPORT_PM2_ONLY

# For special PNO Event keep wake lock for 10sec
DHDCFLAGS += -DCUSTOM_PNO_EVENT_LOCK_xTIME=10
DHDCFLAGS += -DMIRACAST_AMPDU_SIZE=8
#Vendor Extension
DHDCFLAGS += -DWL_VENDOR_EXT_SUPPORT
#Gscan
# DHDCFLAGS += -DGSCAN_SUPPORT
#RTT
DHDCFLAGS += -DRTT_SUPPORT -DRTT_DEBUG


#Link Statistics
DHDCFLAGS += -DLINKSTAT_SUPPORT

# Early suspend
DHDCFLAGS += -DDHD_USE_EARLYSUSPEND

# For Scan result patch
DHDCFLAGS += -DESCAN_RESULT_PATCH

# For Static Buffer
ifeq ($(CONFIG_DHD_USE_STATIC_BUF),y)
  DHDCFLAGS += -DENHANCED_STATIC_BUF
  DHDCFLAGS += -DSTATIC_WL_PRIV_STRUCT
endif
ifneq ($(CONFIG_DHD_USE_SCHED_SCAN),)
DHDCFLAGS += -DWL_SCHED_SCAN
endif

# Ioctl timeout 5000ms
DHDCFLAGS += -DIOCTL_RESP_TIMEOUT=5000

# Prevent rx thread monopolize
DHDCFLAGS += -DWAIT_DEQUEUE

# idle count
DHDCFLAGS += -DDHD_USE_IDLECOUNT

# SKB TAILPAD to avoid out of boundary memory access
#DHDCFLAGS += -DDHDENABLE_TAILPAD

# Wi-Fi Direct
DHDCFLAGS += -DWL_CFG80211_VSDB_PRIORITIZE_SCAN_REQUEST
DHDCFLAGS += -DWL_CFG80211_STA_EVENT
DHDCFLAGS += -DWL_IFACE_COMB_NUM_CHANNELS
DHDCFLAGS += -DWL_ENABLE_P2P_IF
#SCAN time
DHDCFLAGS += -DCUSTOM_SET_SHORT_DWELL_TIME
DHDCFLAGS += -DCUSTOM_FORCE_NODFS_FLAG


# SoftAP
DHDCFLAGS += -DSET_RANDOM_MAC_SOFTAP
DHDCFLAGS += -DWL_CFG80211_ACL

##########################
# driver type
# m: module type driver
# y: built-in type driver
##########################
DRIVER_TYPE ?= $(CONFIG_CYW_BCMDHD)

#########################
# Chip dependent feature
#########################

DHDCFLAGS += -DUSE_WL_TXBF
# DHDCFLAGS += -DUSE_WL_FRAMEBURST
DHDCFLAGS += -DCUSTOM_DPC_CPUCORE=0
DHDCFLAGS += -DPROP_TXSTATUS_VSDB
DHDCFLAGS += -DCUSTOM_PSPRETEND_THR=30
# New Features
DHDCFLAGS += -DWL11U
DHDCFLAGS += -DMFP
# The LPC would have the Tx 5G tput drop around 10Mbps but saving powers
# DHDCFLAGS += -DDHD_ENABLE_LPC
DHDCFLAGS += -DCUSTOM_COUNTRY_CODE

### Platform dependent START
DHD_PLATFORM ?= rockchip

ifeq ($(DHD_PLATFORM), rockchip)
  CONFIG_BCMDHD_SDIO = y
  CONFIG_BCMDHD_OOB = y
  DHDCFLAGS += -DANDROID_SDIO_RESET
  ## We only add here for the flags in our rockchip code
  DHDCFLAGS += -DCUSTOM_SDIO_F2_BLKSIZE=256
  DHDCFLAGS += -DDHD_OF_SUPPORT 
  DHDCFLAGS += -DCONFIG_PLAT_ROCKCHIP
ifeq ($(CONFIG_BCMDHD_OOB),y)
DHDCFLAGS += -DOOB_INTR_ONLY -DCUSTOMER_OOB -DHW_OOB
ifeq ($(CONFIG_BCMDHD_DISABLE_WOWLAN),y)
DHDCFLAGS += -DDISABLE_WOWLAN
endif
else
DHDCFLAGS += -DSDIO_ISR_THREAD
endif
endif

ifeq ($(DHD_PLATFORM), ingenic)
  CONFIG_BCMDHD_SDIO = y
  ## We only add here for the flags in our generic code
  DHDCFLAGS += -DOOB_INTR_ONLY -DHW_OOB
  DHDCFLAGS += -DCUSTOM_SDIO_F2_BLKSIZE=128
  DHDCFLAGS += -DDHD_OF_SUPPORT -DCUSTOMER_OOB
  DHDCFLAGS += -DLOAD_DHD_WITH_FW_ALIVE
  FW_ALIVE = 1
endif


ifeq ($(DHD_PLATFORM), imx_android)
  CONFIG_BCMDHD_SDIO = y
# Config DTS support
  DHDCFLAGS += -DCONFIG_DTS
# for iMX platform
  DHDCFLAGS += -DCUSTOMER_IMX
  DHDCFLAGS += -DOOB_INTR_ONLY -DHW_OOB
  DHDCFLAGS += -DANDROID_SDIO_RESET
# The flags only worked for supported host
# Remove it if you found the dhdsdio_rxglom erros
  DHDCFLAGS += -DCUSTOM_RXCHAIN=1
endif

ifeq ($(DHD_PLATFORM), imx)
  CONFIG_BCMDHD_SDIO = y
# Config DTS support
  DHDCFLAGS += -DCONFIG_DTS
# for iMX platform
  DHDCFLAGS += -DCUSTOMER_IMX
  DHDCFLAGS += -DOOB_INTR_ONLY -DHW_OOB
# The flags only worked for supported host
# Remove it if you found the dhdsdio_rxglom erros
  DHDCFLAGS += -DCUSTOM_RXCHAIN=1
endif

ifeq ($(CONFIG_BCMDHD_PCIE), y)
  CONFIG_BCMDHD_PCIE = y
else
ifeq ($(CONFIG_BCMDHD_USB), y)
  CONFIG_BCMDHD_USB = y
else
  CONFIG_BCMDHD_SDIO = y
endif
endif

### Platform dependent END

ifneq ($(CONFIG_BCMDHD_SDIO),)
  DHDCFLAGS += -DBDC -DTOE -DDHD_BCMEVENTS -DMMC_SDIO_ABORT
  DHDCFLAGS += -DBCMSDIO -DBCMLXSDMMC -DUSE_SDIOFIFO_IOVAR
  DHDCFLAGS += -DPROP_TXSTATUS
  DHDCFLAGS += -DCUSTOM_AMPDU_MPDU=16
  DHDCFLAGS += -DCUSTOM_AMPDU_BA_WSIZE=64
# tput enhancement
  DHDCFLAGS += -DCUSTOM_GLOM_SETTING=8
  DHDCFLAGS += -DBCMSDIOH_TXGLOM -DCUSTOM_TXGLOM=1
  DHDCFLAGS += -DDHDTCPACK_SUPPRESS
  DHDCFLAGS += -DRXFRAME_THREAD
  DHDCFLAGS += -DCUSTOM_MAX_TXGLOM_SIZE=31
  DHDCFLAGS += -DMAX_HDR_READ=128
  DHDCFLAGS += -DDHD_FIRSTREAD=128
  # bcn_timeout
  DHDCFLAGS += -DCUSTOM_BCN_TIMEOUT=5
 endif

ifneq ($(CONFIG_BCMDHD_PCIE),)
  DHDCFLAGS += -DPCIE_FULL_DONGLE -DBCMPCIE -DCUSTOM_DPC_PRIO_SETTING=-1
# tput enhancement
  DHDCFLAGS += -DCUSTOM_AMPDU_BA_WSIZE=64
  DHDCFLAGS += -DCUSTOM_AMPDU_MPDU=32
  DHDCFLAGS += -DCUSTOM_AMPDU_RELEASE=16
  DHDCFLAGS += -DPROP_TXSTATUS_VSDB
# Disable watchdog thread
  DHDCFLAGS += -DCUSTOM_DHD_WATCHDOG_MS=0
  DHDCFLAGS += -DMAX_CNTL_TX_TIMEOUT=1
  DHDCFLAGS += -DSUPPORT_LINKDOWN_RECOVERY
endif

ifneq ($(CONFIG_BCMDHD_USB),)
  DHDCFLAGS += -DBDC -DTOE
  DHDCFLAGS += -DDHD_BCMEVENTS -DSHOW_EVENTS -DSHOW_LOGTRACE
  DHDCFLAGS += -DBCMDHDUSB -DBCMDBUS -DBCMTRXV2 -DDBUS_USB_LOOPBACK
  DHDCFLAGS += -DPROP_TXSTATUS
  DHDCFLAGS += -DLIMIT_BORROW
endif

ifeq ($(CONFIG_DHD_USE_STATIC_BUF),y)
  DHDCFLAGS += -DDHD_USE_STATIC_IOCTLBUF
endif
# Print 802.1X packets
DHDCFLAGS += -DDHD_8021X_DUMP
# Print DHCP packets
DHDCFLAGS += -DDHD_DHCP_DUMP


EXTRA_LDFLAGS += --strip-debug

ifeq ($(DRIVER_TYPE),y)
  DHDCFLAGS += -DUSE_LATE_INITCALL_SYNC
endif

## Attend to fix the suspend/resume -16 error issue, refer to SWDHD-409
DHDCFLAGS += -DSUSPEND16


## Flags merged from Linux build
DHDCFLAGS += -DCUSTOMER_IPCAM -DWL11ULB -DWL_NAN -DWL_SUPPORT_AUTO_CHANNEL -DWL_VIRTUAL_APSTA

## Flags that may depends on Linux kernel versions
DHDCFLAGS += -DTSQ_MULTIPLIER=10

## Flags maybe useful but disable it

# The WLFC AC queue credit borrow
# DHDCFLAGS += -DLIMIT_BORROW

# Advanced IBSS features
# DHDCFLAGS += -DWLAIBSS -DWLAIBSS_PS

# p2P service discovery offload
# DHDCFLAGS += -DWL_SDO

EXTRA_CFLAGS += $(DHDCFLAGS) -DDHD_DEBUG
EXTRA_CFLAGS += -DSRCBASE=\"$(src)\"
EXTRA_CFLAGS += -I$(src)/include/ -I$(src)/
KBUILD_CFLAGS += -I$(LINUXDIR)/include -I$(shell pwd)

DHDOFILES := dhd_pno.o dhd_common.o dhd_ip.o dhd_custom_gpio.o \
	dhd_linux.o dhd_linux_sched.o dhd_cfg80211.o dhd_linux_wq.o aiutils.o bcmevent.o \
	bcmutils.o bcmwifi_channels.o hndpmu.o linux_osl.o sbutils.o siutils.o \
	wl_android.o wl_cfg80211.o wl_cfgp2p.o wl_cfg_btcoex.o wldev_common.o wl_linux_mon.o  \
	dhd_linux_platdev.o dhd_pno.o dhd_rtt.o dhd_linux_wq.o wl_cfg_btcoex.o \
        hnd_pktq.o hnd_pktpool.o wl_cfgvendor.o dhd_debug_linux.o bcmxtlv.o dhd_debug.o bcm_app_utils.o \
	wl_cfgnan.o

ifeq ($(FW_ALIVE), 1)
  DHDCFLAGS += -DLOAD_DHD_WITH_FW_ALIVE
  DHDOFILES += dhd_chip_info.o
endif


ifneq ($(CONFIG_BCMDHD_SDIO),)
  DHDOFILES += bcmsdh.o bcmsdh_linux.o bcmsdh_sdmmc.o bcmsdh_sdmmc_linux.o
  DHDOFILES += dhd_cdc.o dhd_wlfc.o dhd_sdio.o
endif

ifneq ($(CONFIG_BCMDHD_PCIE),)
  DHDOFILES += dhd_pcie.o dhd_pcie_linux.o dhd_msgbuf.o dhd_flowring.o
  DHDOFILES += pcie_core.o
endif

ifneq ($(CONFIG_BCMDHD_USB),)
  DHDOFILES += dbus.o dbus_usb.o dbus_usb_linux.o
  DHDOFILES += dhd_cdc.o dhd_wlfc.o
endif

ifeq ($(DHD_PLATFORM), rockchip)
DHDOFILES += dhd_gpio.o
DHDOFILES += rkversion.o
endif

cywdhd-objs := $(DHDOFILES)
obj-$(DRIVER_TYPE)   += cywdhd.o

all:
	@echo "$(MAKE) --no-print-directory -C $(KDIR) SUBDIRS=$(CURDIR) modules"
	@$(MAKE) --no-print-directory -C $(KDIR) SUBDIRS=$(CURDIR) modules

clean:
	rm -rf *.o *.ko *.mod.c *~ .*.cmd *.o.cmd .*.o.cmd \
	Module.symvers modules.order .tmp_versions modules.builtin

install:
	@$(MAKE) --no-print-directory -C $(KDIR) \
		SUBDIRS=$(CURDIR) modules_install