1# Android makefile for the WLAN Module 2 3# set WLAN_BUILD_DEBUG=y in your environment to enable debug logging 4define wlog 5$(if $(WLAN_BUILD_DEBUG),$(info $(1))) 6endef 7 8define target_is_dual_wlan 9$(strip \ 10 $(if $(TARGET_SUPPORT_DUAL_WLAN), \ 11 $(if $(findstring cnss2,$(1)),true,), \ 12 ) \ 13) 14endef 15 16LOCAL_MODULE_DDK_BUILD := false 17LOCAL_MODULE_DDK_ALLOW_UNSAFE_HEADERS := false 18 19ifeq ($(TARGET_BOARD_PLATFORM), sun) 20LOCAL_MODULE_DDK_BUILD := true 21LOCAL_MODULE_DDK_ALLOW_UNSAFE_HEADERS := true 22endif 23ifeq ($(TARGET_BOARD_PLATFORM), pineapple) 24LOCAL_MODULE_DDK_BUILD := true 25LOCAL_MODULE_DDK_ALLOW_UNSAFE_HEADERS := true 26endif 27 28ifeq ($(TARGET_BOARD_PLATFORM), niobe) 29LOCAL_MODULE_DDK_BUILD := true 30LOCAL_MODULE_DDK_ALLOW_UNSAFE_HEADERS := true 31endif 32 33LOCAL_PATH := $(call my-dir) 34$(call wlog,LOCAL_PATH=$(LOCAL_PATH)) 35BOARD_OPENSOURCE_DIR ?= vendor/qcom/opensource 36 37ENABLE_QCACLD := true 38ifeq ($(TARGET_USES_QMAA), true) 39ifneq ($(TARGET_USES_QMAA_OVERRIDE_WLAN), true) 40ENABLE_QCACLD := false 41else 42ENABLE_QCACLD := true 43endif 44endif 45 46ifeq ($(BOARD_COMMON_DIR),) 47 BOARD_COMMON_DIR := device/qcom/common 48endif 49 50ifeq ($(ENABLE_QCACLD), true) 51 52# Assume no targets will be supported 53WLAN_CHIPSET := 54 55ifeq ($(BOARD_HAS_QCOM_WLAN), true) 56 57# Check if this driver needs be built for current target 58ifneq ($(findstring qca_cld3,$(WIFI_DRIVER_BUILT)),) 59 WLAN_CHIPSET := qca_cld3 60 WLAN_SELECT := CONFIG_QCA_CLD_WLAN=m 61endif 62 63# Build/Package only in case of supported target 64ifneq ($(WLAN_CHIPSET),) 65 66# This makefile is only for DLKM 67ifneq ($(findstring vendor,$(LOCAL_PATH)),) 68 69ifneq ($(findstring opensource,$(LOCAL_PATH)),) 70 WLAN_BLD_DIR := $(BOARD_OPENSOURCE_DIR)/wlan 71endif # opensource 72 73# Multi-ko check 74LOCAL_DEV_NAME := $(patsubst .%,%,\ 75 $(lastword $(strip $(subst /, ,$(LOCAL_PATH))))) 76 77$(call wlog,LOCAL_DEV_NAME=$(LOCAL_DEV_NAME)) 78$(call wlog,TARGET_WLAN_CHIP=$(TARGET_WLAN_CHIP)) 79 80TARGET_WLAN_CHIP ?= wlan 81LOCAL_MULTI_KO := false 82ifneq ($(TARGET_WLAN_CHIP), wlan) 83ifeq ($(LOCAL_DEV_NAME), qcacld-3.0) 84LOCAL_MULTI_KO := true 85endif 86endif 87 88ifeq ($(LOCAL_MULTI_KO), true) 89LOCAL_ANDROID_ROOT := $(shell pwd) 90LOCAL_WLAN_BLD_DIR := $(LOCAL_ANDROID_ROOT)/$(WLAN_BLD_DIR) 91$(shell `find $(LOCAL_WLAN_BLD_DIR)/qcacld-3.0/ -maxdepth 1 -name '.*' ! -name '.git' -delete`) 92 93ifeq ($(LOCAL_MODULE_DDK_BUILD), true) 94ifeq ($(CHIPSET),) 95$(foreach chip, $(TARGET_WLAN_CHIP),\ 96 $(eval CHIPSET := $(chip))\ 97 $(eval include $(LOCAL_PATH)/Android.mk)) 98else 99# DLKM_DIR was moved for JELLY_BEAN (PLATFORM_SDK 16) 100BAZEL_CHIPSET_NAME := $(subst _,-,$(CHIPSET)) 101ifeq ($(call is-platform-sdk-version-at-least,16),true) 102 DLKM_DIR := $(TOP)/$(BOARD_COMMON_DIR)/dlkm 103else 104 DLKM_DIR := build/dlkm 105endif # platform-sdk-version 106 107include $(CLEAR_VARS) 108LOCAL_MOD_NAME := wlan 109LOCAL_MODULE := qca_cld3_$(CHIPSET).ko 110LOCAL_MODULE_KBUILD_NAME := qca_cld3_$(CHIPSET).ko 111LOCAL_MODULE_DEBUG_ENABLE := true 112LOCAL_MODULE_DDK_SUBTARGET_REGEX := "all.*" 113ifeq ($(PRODUCT_VENDOR_MOVE_ENABLED),true) 114 ifeq ($(WIFI_DRIVER_INSTALL_TO_KERNEL_OUT),true) 115 LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT) 116 else 117 LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib/modules/$(WLAN_CHIPSET) 118 endif 119else 120 LOCAL_MODULE_PATH := $(TARGET_OUT)/lib/modules/$(WLAN_CHIPSET) 121endif 122 123 124LOCAL_DEV_NAME := $(CHIPSET) 125LOCAL_CHIP_NAME := $(LOCAL_DEV_NAME) 126TARGET_MAC_BIN_PATH := /mnt/vendor/persist/$(LOCAL_CHIP_NAME) 127TARGET_FW_DIR := firmware/wlan/qca_cld/$(LOCAL_CHIP_NAME) 128TARGET_CFG_PATH := /vendor/etc/wifi/$(LOCAL_CHIP_NAME) 129TARGET_MAC_BIN_PATH := /mnt/vendor/persist/$(LOCAL_CHIP_NAME) 130 131ifeq ($(PRODUCT_VENDOR_MOVE_ENABLED),true) 132TARGET_FW_PATH := $(TARGET_OUT_VENDOR)/$(TARGET_FW_DIR) 133else 134TARGET_FW_PATH := $(TARGET_OUT_ETC)/$(TARGET_FW_DIR) 135endif 136 137# Create wlan_mac.bin symbolic link as part of the module 138$(call symlink-file,,$(TARGET_MAC_BIN_PATH)/wlan_mac.bin,$(TARGET_FW_PATH)/wlan_mac.bin) 139LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_FW_PATH)/wlan_mac.bin 140 141# Conditionally create module symbolic link 142ifneq ($(findstring $(WLAN_CHIPSET),$(WIFI_DRIVER_DEFAULT)),) 143ifeq ($(PRODUCT_VENDOR_MOVE_ENABLED),true) 144ifneq ($(WIFI_DRIVER_INSTALL_TO_KERNEL_OUT),true) 145$(call symlink-file,,$(TARGET_COPY_OUT_VENDOR)/lib/modules/$(WLAN_CHIPSET)/$(LOCAL_MODULE),$(TARGET_OUT_VENDOR)/lib/modules/$(LOCAL_MODULE)) 146LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_VENDOR)/lib/modules/$(LOCAL_MODULE) 147endif 148else 149$(call symlink-file,,/system/lib/modules/$(WLAN_CHIPSET)/$(LOCAL_MODULE),$(TARGET_OUT)/lib/modules/$(LOCAL_MODULE)) 150LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT)/lib/modules/$(LOCAL_MODULE) 151endif 152endif 153 154# Conditionally create ini symbolic link 155ifeq ($(TARGET_BOARD_AUTO),true) 156$(call symlink-file,,$(TARGET_CFG_PATH)/WCNSS_qcom_cfg.ini,$(TARGET_FW_PATH)/WCNSS_qcom_cfg.ini) 157LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_FW_PATH)/WCNSS_qcom_cfg.ini 158$(call wlog,"generate soft link because TARGET_BOARD_AUTO true") 159else 160ifneq ($(GENERIC_ODM_IMAGE),true) 161$(call symlink-file,,$(TARGET_CFG_PATH)/WCNSS_qcom_cfg.ini,$(TARGET_FW_PATH)/WCNSS_qcom_cfg.ini) 162LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_FW_PATH)/WCNSS_qcom_cfg.ini 163$(call wlog,"generate soft link because GENERIC_ODM_IMAGE not true") 164endif 165endif 166 167# Set dependencies so that CNSS family drivers can be compiled ahead. 168ifneq ($(WLAN_PLATFORM_KBUILD_OPTIONS),) 169LOCAL_REQUIRED_MODULES := wlan-platform-module-symvers 170LOCAL_ADDITIONAL_DEPENDENCIES += $(call intermediates-dir-for,DLKM,wlan-platform-module-symvers)/Module.symvers 171endif 172 173$(call wlog,TARGET_USES_KERNEL_PLATFORM=$(TARGET_USES_KERNEL_PLATFORM)) 174ifeq ($(TARGET_USES_KERNEL_PLATFORM),true) 175 include $(DLKM_DIR)/Build_external_kernelmodule.mk 176else 177 include $(DLKM_DIR)/AndroidKernelModule.mk 178endif 179endif 180else 181$(foreach chip, $(TARGET_WLAN_CHIP), \ 182 $(shell ln -sf . $(LOCAL_WLAN_BLD_DIR)/qcacld-3.0/.$(chip))) 183include $(foreach chip, $(TARGET_WLAN_CHIP), $(LOCAL_PATH)/.$(chip)/Android.mk) 184endif 185 186else # Multi-ok check 187 188# When dual wlan enabled, secondary dev name would be $(chip)_cnss2. 189# Use LOCAL_CHIP_NAME instead of LOCAL_DEV_NAME for secondary one. 190LOCAL_CHIP_NAME := $(LOCAL_DEV_NAME) 191TARGET_SECONDARY_WLAN := $(call target_is_dual_wlan,$(LOCAL_DEV_NAME)) 192ifeq ($(TARGET_SECONDARY_WLAN), true) 193LOCAL_CHIP_NAME := $(patsubst %_cnss2,%,$(strip $(LOCAL_DEV_NAME))) 194endif 195 196ifeq ($(WLAN_PROFILE),) 197WLAN_PROFILE := default 198endif 199 200ifeq ($(LOCAL_DEV_NAME), qcacld-3.0) 201 202LOCAL_DEV_NAME := wlan 203LOCAL_MOD_NAME := wlan 204LOCAL_SRC_DIR := 205TARGET_FW_DIR := firmware/wlan/qca_cld 206TARGET_CFG_PATH := /vendor/etc/wifi 207TARGET_MAC_BIN_PATH := /mnt/vendor/persist 208 209else 210 211LOCAL_SRC_DIR := .$(LOCAL_DEV_NAME) 212# Use default profile if WLAN_CFG_USE_DEFAULT defined. 213ifeq ($(WLAN_CFG_USE_DEFAULT),) 214WLAN_PROFILE := $(LOCAL_CHIP_NAME) 215endif 216TARGET_FW_DIR := firmware/wlan/qca_cld/$(LOCAL_CHIP_NAME) 217TARGET_CFG_PATH := /vendor/etc/wifi/$(LOCAL_CHIP_NAME) 218TARGET_MAC_BIN_PATH := /mnt/vendor/persist/$(LOCAL_CHIP_NAME) 219 220ifneq ($(TARGET_MULTI_WLAN), true) 221LOCAL_MOD_NAME := wlan 222DYNAMIC_SINGLE_CHIP := $(LOCAL_DEV_NAME) 223else 224LOCAL_MOD_NAME := $(LOCAL_DEV_NAME) 225endif 226 227ifeq ($(TARGET_SECONDARY_WLAN), true) 228TARGET_SECONDARY_WLAN_NUMBER := 2 229LOCAL_MOD_NAME := $(LOCAL_CHIP_NAME)_$(TARGET_SECONDARY_WLAN_NUMBER) 230DYNAMIC_SINGLE_CHIP := $(LOCAL_CHIP_NAME) 231endif 232 233endif 234 235# DLKM_DIR was moved for JELLY_BEAN (PLATFORM_SDK 16) 236ifeq ($(call is-platform-sdk-version-at-least,16),true) 237 DLKM_DIR := $(TOP)/$(BOARD_COMMON_DIR)/dlkm 238else 239 DLKM_DIR := build/dlkm 240endif # platform-sdk-version 241 242# Build wlan.ko as $(WLAN_CHIPSET)_wlan.ko 243########################################################### 244# This is set once per LOCAL_PATH, not per (kernel) module 245KBUILD_OPTIONS := WLAN_ROOT=$(WLAN_BLD_DIR)/qcacld-3.0/$(LOCAL_SRC_DIR) 246KBUILD_OPTIONS += WLAN_COMMON_ROOT=cmn 247KBUILD_OPTIONS += WLAN_COMMON_INC=$(WLAN_BLD_DIR)/qcacld-3.0/cmn 248KBUILD_OPTIONS += WLAN_FW_API=$(WLAN_BLD_DIR)/fw-api 249KBUILD_OPTIONS += WLAN_PROFILE=$(WLAN_PROFILE) 250KBUILD_OPTIONS += DYNAMIC_SINGLE_CHIP=$(DYNAMIC_SINGLE_CHIP) 251 252# We are actually building wlan.ko here, as per the 253# requirement we are specifying <chipset>_wlan.ko as LOCAL_MODULE. 254# This means we need to rename the module to <chipset>_wlan.ko 255# after wlan.ko is built. 256KBUILD_OPTIONS += MODNAME=$(LOCAL_MOD_NAME) 257KBUILD_OPTIONS += DEVNAME=$(LOCAL_DEV_NAME) 258KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM) 259KBUILD_OPTIONS += $(WLAN_SELECT) 260 261KBUILD_REQUIRED_KOS := ipam.ko 262 263ifneq ($(WLAN_CFG_OVERRIDE_$(LOCAL_DEV_NAME)),) 264KBUILD_OPTIONS += WLAN_CFG_OVERRIDE="$(WLAN_CFG_OVERRIDE_$(LOCAL_DEV_NAME))" 265endif 266 267# driver expects "/dev/<name>" for wifi driver state ctrl parameter. 268# i.e. WIFI_DRIVER_STATE_CTRL_PARAM="/dev/wlan" is defined for single wlan. 269# WIFI_DRIVER_STATE_CTRL_PARAM_SECONDARY="/dev/wlan2" is defined for 2nd wlan. 270ifeq ($(TARGET_SECONDARY_WLAN), true) 271$(call wlog,STATE_CTRL_PARAM_SECONDARY=$(WIFI_DRIVER_STATE_CTRL_PARAM_SECONDARY)) 272PARAM_SECONDARY := $(patsubst "%",%,$(WIFI_DRIVER_STATE_CTRL_PARAM_SECONDARY)) 273$(call wlog,PARAM_SECONDARY=$(PARAM_SECONDARY)) 274ifeq ($(dir $(PARAM_SECONDARY)),/dev/) 275KBUILD_OPTIONS += WLAN_CTRL_NAME=$(notdir $(PARAM_SECONDARY)) 276endif 277else 278$(call wlog,WIFI_DRIVER_STATE_CTRL_PARAM=$(WIFI_DRIVER_STATE_CTRL_PARAM)) 279PARAM := $(patsubst "%",%,$(WIFI_DRIVER_STATE_CTRL_PARAM)) 280$(call wlog,PARAM=$(PARAM)) 281ifeq ($(dir $(PARAM)),/dev/) 282KBUILD_OPTIONS += WLAN_CTRL_NAME=$(notdir $(PARAM)) 283endif 284endif 285 286# Pass build options per chip to Kbuild. This will be injected from upper layer 287# makefile. 288# 289# e.g. 290# WLAN_KBUILD_OPTIONS_qca6390 := CONFIG_CNSS_QCA6390=y 291ifneq ($(WLAN_KBUILD_OPTIONS_$(LOCAL_DEV_NAME)),) 292KBUILD_OPTIONS += "$(WLAN_KBUILD_OPTIONS_$(LOCAL_DEV_NAME))" 293endif 294 295ifeq ($(PRODUCT_VENDOR_MOVE_ENABLED),true) 296TARGET_FW_PATH := $(TARGET_OUT_VENDOR)/$(TARGET_FW_DIR) 297else 298TARGET_FW_PATH := $(TARGET_OUT_ETC)/$(TARGET_FW_DIR) 299endif 300 301# WLAN_PLATFORM_KBUILD_OPTIONS should be passed from upper level Makefiles 302# like wlan.mk. It indicates sources of CNSS family drivers (cnss2, cnss_nl, 303# cnss_prealloc and cnss_utils etc.) are built out of kernel tree and it 304# should also include all necessary config flags (e.g. CONFIG_CNSS2) which 305# are originally defined from kernel Kconfig/defconfig. KBUILD_EXTRA_SYMBOLS 306# is also needed to indicate all the symbols from these drivers. 307ifneq ($(WLAN_PLATFORM_KBUILD_OPTIONS),) 308KBUILD_OPTIONS += $(foreach wlan_platform_kbuild_option, \ 309 $(WLAN_PLATFORM_KBUILD_OPTIONS), \ 310 $(wlan_platform_kbuild_option)) 311 312KBUILD_OPTIONS += KBUILD_EXTRA_SYMBOLS+=$(shell pwd)/$(call intermediates-dir-for,DLKM,wlan-platform-module-symvers)/Module.symvers 313endif 314 315include $(CLEAR_VARS) 316 317# Create the module 318LOCAL_MODULE := $(WLAN_CHIPSET)_$(LOCAL_DEV_NAME).ko 319LOCAL_MODULE_KBUILD_NAME := $(LOCAL_MOD_NAME).ko 320LOCAL_MODULE_DEBUG_ENABLE := true 321ifeq ($(PRODUCT_VENDOR_MOVE_ENABLED),true) 322 ifeq ($(WIFI_DRIVER_INSTALL_TO_KERNEL_OUT),true) 323 LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT) 324 else 325 LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib/modules/$(WLAN_CHIPSET) 326 endif 327else 328 LOCAL_MODULE_PATH := $(TARGET_OUT)/lib/modules/$(WLAN_CHIPSET) 329endif 330 331# Create wlan_mac.bin symbolic link as part of the module 332$(call symlink-file,,$(TARGET_MAC_BIN_PATH)/wlan_mac.bin,$(TARGET_FW_PATH)/wlan_mac.bin) 333LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_FW_PATH)/wlan_mac.bin 334 335# Conditionally create module symbolic link 336ifneq ($(findstring $(WLAN_CHIPSET),$(WIFI_DRIVER_DEFAULT)),) 337ifeq ($(PRODUCT_VENDOR_MOVE_ENABLED),true) 338ifneq ($(WIFI_DRIVER_INSTALL_TO_KERNEL_OUT),true) 339$(call symlink-file,,$(TARGET_COPY_OUT_VENDOR)/lib/modules/$(WLAN_CHIPSET)/$(LOCAL_MODULE),$(TARGET_OUT_VENDOR)/lib/modules/$(LOCAL_MODULE)) 340LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_VENDOR)/lib/modules/$(LOCAL_MODULE) 341endif 342else 343$(call symlink-file,,/system/lib/modules/$(WLAN_CHIPSET)/$(LOCAL_MODULE),$(TARGET_OUT)/lib/modules/$(LOCAL_MODULE)) 344LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT)/lib/modules/$(LOCAL_MODULE) 345endif 346endif 347 348# Conditionally create ini symbolic link 349ifeq ($(TARGET_BOARD_AUTO),true) 350$(call symlink-file,,$(TARGET_CFG_PATH)/WCNSS_qcom_cfg.ini,$(TARGET_FW_PATH)/WCNSS_qcom_cfg.ini) 351LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_FW_PATH)/WCNSS_qcom_cfg.ini 352$(call wlog,"generate soft link because TARGET_BOARD_AUTO true") 353else 354ifneq ($(GENERIC_ODM_IMAGE),true) 355$(call symlink-file,,$(TARGET_CFG_PATH)/WCNSS_qcom_cfg.ini,$(TARGET_FW_PATH)/WCNSS_qcom_cfg.ini) 356LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_FW_PATH)/WCNSS_qcom_cfg.ini 357$(call wlog,"generate soft link because GENERIC_ODM_IMAGE not true") 358endif 359endif 360 361# Set dependencies so that CNSS family drivers can be compiled ahead. 362ifneq ($(WLAN_PLATFORM_KBUILD_OPTIONS),) 363LOCAL_REQUIRED_MODULES := wlan-platform-module-symvers 364LOCAL_ADDITIONAL_DEPENDENCIES += $(call intermediates-dir-for,DLKM,wlan-platform-module-symvers)/Module.symvers 365endif 366 367$(call wlog,TARGET_USES_KERNEL_PLATFORM=$(TARGET_USES_KERNEL_PLATFORM)) 368ifeq ($(TARGET_USES_KERNEL_PLATFORM),true) 369 include $(DLKM_DIR)/Build_external_kernelmodule.mk 370else 371 include $(DLKM_DIR)/AndroidKernelModule.mk 372endif 373 374endif # Multi-ko check 375endif # DLKM check 376endif # supported target check 377endif # WLAN enabled check 378endif # ENABLE_QCACLD 379