# Makefile.x86: Makefile for Linux PC
# You can build specific .ko name by assiging the WLAN_CHIP_ID parameter
# Default=wlan_mt6632_usb.ko:
# 	make -f Makefile.x86
# wlan_mt7668_usb.ko:
# 	make -f Makefile.x86 WLAN_CHIP_ID=mt7668

LINUX_SRC=/lib/modules/$(shell uname -r)/build
WLAN_CHIP_ID := MT6632

export CONFIG_MTK_COMBO_PLATFORM=x86

PWD=$(shell pwd)
DRIVER_DIR=$(PWD)

export CONFIG_MTK_WIFI_ONLY=m
export CONFIG_MTK_COMBO=m
export CONFIG_MTK_COMBO_WIFI=m
export CONFIG_MTK_COMBO_COMM=m
export CONFIG_MTK_COMBO_COMM_UART=m
export CONFIG_MTK_COMBO_COMM_SDIO=m
export CONFIG_MT_WIFI_CHRDEV=m
#export CFG_CFG80211_VERSION ?= $(BACKPORTED_KERNEL_VERSION)

# pcie | sdio | usb
ifeq ($(hif),)
    hif=usb
endif

MODULES_NAME := wlan_$(shell echo $(WLAN_CHIP_ID) | tr A-Z a-z)

export CONFIG_MTK_COMBO_WIFI_HIF=$(hif)

export CONFIG_MTK_COMBO_PLAT_PATH=x86

##############################################################
# Compile options
##############################################################
#/***** Common part ******/

CFG_USB_REQ_TX_DATA_CNT=4

CFG_USB_REQ_RX_DATA_CNT=2

#CFG_SUPPORT_DFS_MASTER=1

#CFG_SUPPORT_SINGLE_SKU_LOCAL_DB=0

# Support to change sta, p2p, ap interface names
# y: enable, n: disable
# eg. insmod wlan_mt76x8_usb.ko sta=wlan p2p=p2p ap=ap
CFG_DRIVER_INF_NAME_CHANGE=n


#/***** Manage configs into compile options ******/

ifneq ($(CFG_USB_REQ_TX_DATA_CNT),)
PLATFORM_FLAGS += -DCFG_USB_REQ_TX_DATA_CNT=$(CFG_USB_REQ_TX_DATA_CNT)
endif

ifneq ($(CFG_USB_REQ_RX_DATA_CNT),)
PLATFORM_FLAGS += -DCFG_USB_REQ_RX_DATA_CNT=$(CFG_USB_REQ_RX_DATA_CNT)
endif

ifneq ($(CFG_SUPPORT_DFS_MASTER),)
PLATFORM_FLAGS += -DCFG_SUPPORT_DFS_MASTER=$(CFG_SUPPORT_DFS_MASTER)
endif

ifneq ($(CFG_SUPPORT_SINGLE_SKU_LOCAL_DB),)
PLATFORM_FLAGS += -DCFG_SUPPORT_SINGLE_SKU_LOCAL_DB=$(CFG_SUPPORT_SINGLE_SKU_LOCAL_DB)
endif

ifeq ($(CFG_DRIVER_INF_NAME_CHANGE), y)
PLATFORM_FLAGS += -DCFG_DRIVER_INF_NAME_CHANGE
endif


all: driver

driver:
	+cd $(DRIVER_DIR) && make -C $(LINUX_SRC) M=$(DRIVER_DIR) PLATFORM_FLAGS="$(PLATFORM_FLAGS)" WLAN_CHIP_ID=$(WLAN_CHIP_ID) modules
	@cd $(DRIVER_DIR) && cp $(MODULES_NAME)_$(hif).ko $(MODULES_NAME).ko

clean: driver_clean

driver_clean:
	cd $(DRIVER_DIR) && make -C $(LINUX_SRC) M=$(DRIVER_DIR) WLAN_CHIP_ID=$(WLAN_CHIP_ID) clean

.PHONY: all clean driver driver_clean
