# 
# Copyright (C) 2006 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk

PKG_NAME:=atherosmb81
PKG_ATHEROS_VERSION:=7.3.1.39
PKG_MSPD_VERSION:=1.02
PKG_RELEASE:=1
PKG_VERSION:=$(PKG_ATHEROS_VERSION)-$(PKG_MSPD_VERSION).$(PKG_RELEASE)

PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install

PKG_SOURCE_FILE:=$(TOPDIR)/dl/$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_BUILD_FROM_SOURCE:=$(shell if [ -e $(PKG_SOURCE_FILE) ]; then echo y; fi)
ifeq ($(CONFIG_DEV_ATHEROSMB81), y)
  PKG_BUILD_FROM_SOURCE:=y
endif 
ifeq ($(CONFIG_ASIC_SQV),y)
  PROFILE1:=$(PROFILE)-sqv
else
  PROFILE1:=$(PROFILE)
endif
ifeq ($(CONFIG_BOOT_NAND),y)
  BIN_PROFILE:=$(PROFILE1)-nand
else
  BIN_PROFILE:=$(PROFILE1)
endif
ifeq ($(word 1,$(subst ., ,$(GCC_VERSION))),4)
  BIN_PROFILE_BUILD:=$(BIN_PROFILE)-gcc-4.1_glibc_eabi
else
  BIN_PROFILE_BUILD:=$(BIN_PROFILE)
endif

include $(INCLUDE_DIR)/package.mk

#export KERNELPATH=$(PKG_BUILD_DIR)/../linux-2.6.21.1
export ENDIAN=AH_LITTLE_ENDIAN

export AH_SUPPORT_AR5210=0
export AH_SUPPORT_AR5211=0
export AH_SUPPORT_AR5212=1
export AH_SUPPORT_AR5416=1
export AH_SUPPORT_5111=1
export AH_SUPPORT_5112=1
export AH_SUPPORT_2413=1
export AH_SUPPORT_5413=1
export AH_SUPPORT_2316=1
export AH_SUPPORT_2317=1
export AH_SUPPORT_2425=1
export AH_SUPPORT_2133=1
export AH_SUPPORT_HOWL=0
export AH_SUPPORT_OWL=1

# Set Phy Err Diagnostics (Radar detection) to be enabled for AP builds
export ATH_CAP_PHYERR_DIAG=1
export AR5416_G_MODE=1
export AH_DEBUG=1
export REMOVE_PKT_LOG=1
export AR5416_INT_MITIGATION=1
export ATH_SUPPORT_DFS=1
export ATH_SUPPORT_IQUE=1	
export IEEE_MCAST_ENHANCEMENT=1
export BUILD_WPA2=y
export NO_SIMPLE_CONFIG=1
export ATH_CAP_AMSDU=0
	
ifeq ($(BUILD_WPA2),y)
	export ATH_WPS_IE=1
	export MADWIFIPATH=$(TOPDIR)/wlan/linux
	export MADWIFIINC=$(TOPDIR)/wlan
else
	export ATH_WPS_IE=0
endif

export AH_WAR_52640=0

ifeq ($(ARCH),mips)
  HAL_TARGET:=mips-be-elf
endif
ifeq ($(ARCH),mipsel)
  HAL_TARGET:=mips-le-elf
endif
ifeq ($(ARCH),i386)
  HAL_TARGET:=i386-elf
endif
ifeq ($(ARCH),armeb)
  HAL_TARGET:=xscale-be-elf
endif
ifeq ($(ARCH),arm)
  ifeq ($(word 1,$(subst ., ,$(GCC_VERSION))),4)
    HAL_TARGET:=armv6-le-elf
  else
    HAL_TARGET:=armv4-le-elf
  endif
endif
ifeq ($(ARCH),powerpc)
  HAL_TARGET:=powerpc-be-elf
endif

ATHEROS_AUTOLOAD:= \
	wlan \
	wlan_scan_ap \
	wlan_scan_sta \
	ath_hal \
	ath_dfs \
	ath_rate_atheros \
	ath_dev \
	ath_pci \
	wlan_acl \
	wlan_me \
	wlan_ccmp \
	wlan_tkip \
	wlan_wep \
	wlan_xauth

################ OpenWRT definition ########################
define KernelPackage/atherosmb81
  CATEGORY:=Mindspeed Packages
  DEFAULT:=n
  TITLE:=Atheros-MB81  802.11b/g/n Wifi cards
  DEPENDS:=+wireless-tools
  DESCRIPTION:= This package contains a driver for Atheros cards.
  URL:=http://www.atheros.com/
  MAINTAINER:=Mindspeed Technologies
  FILES:= $(PKG_BUILD_DIR)/ath_hal_revb.$(LINUX_KMOD_SUFFIX) \
	$(PKG_BUILD_DIR)/ath_pci.$(LINUX_KMOD_SUFFIX) \
	$(PKG_BUILD_DIR)/ath_dev.$(LINUX_KMOD_SUFFIX) \
	$(PKG_BUILD_DIR)/wlan.$(LINUX_KMOD_SUFFIX) \
	$(PKG_BUILD_DIR)/wlan_acl.$(LINUX_KMOD_SUFFIX) \
	$(PKG_BUILD_DIR)/wlan_ccmp.$(LINUX_KMOD_SUFFIX) \
	$(PKG_BUILD_DIR)/wlan_scan_ap.$(LINUX_KMOD_SUFFIX) \
	$(PKG_BUILD_DIR)/wlan_scan_sta.$(LINUX_KMOD_SUFFIX) \
	$(PKG_BUILD_DIR)/wlan_tkip.$(LINUX_KMOD_SUFFIX) \
	$(PKG_BUILD_DIR)/wlan_wep.$(LINUX_KMOD_SUFFIX) \
	$(PKG_BUILD_DIR)/wlan_xauth.$(LINUX_KMOD_SUFFIX) \
	$(PKG_BUILD_DIR)/ath_rate_atheros.$(LINUX_KMOD_SUFFIX) \
	$(PKG_BUILD_DIR)/ath_dfs.$(LINUX_KMOD_SUFFIX) \
	$(PKG_BUILD_DIR)/ath_hal_revc.$(LINUX_KMOD_SUFFIX)

  AUTOLOAD:=$(call AutoLoad, 50,$(ATHEROS_AUTOLOAD))
endef

ifeq ($(PKG_BUILD_FROM_SOURCE), y)
ifeq ($(CONFIG_DEV_ATHEROSMB81), y)
ifeq ($(CONFIG_DEV_ATHEROSMB81_CVSBRANCH), "")
define Build/Prepare
	pushd "$(KERNEL_BUILD_DIR)" &&\
	cvs -z9 -d:pserver:$(CONFIG_ACTIVEDEV_CVSUSERNAME)@$(CONFIG_ACTIVEDEV_CVSROOTPATH):/prj/msacvs/enterprise checkout -d $(PKG_NAME)-$(PKG_VERSION) $(CONFIG_DEV_ATHEROSMB81_MODULENAME) &&\
	popd

	@if [ -d ./patches -a "$$$$(ls ./patches | wc -l)" -gt 0 ]; then \
		$(PATCH) $(PKG_BUILD_DIR) ./patches; \
	fi

	rm -fr $(PKG_BUILD_DIR)_revc
	cp -a $(PKG_BUILD_DIR) $(PKG_BUILD_DIR)_revc
	patch -p1 -R -d $(PKG_BUILD_DIR)_revc < ./patches/010-pci_rx_dma_burst.patch
endef
else
define Build/Prepare
	pushd "$(KERNEL_BUILD_DIR)" &&\
	cvs -z9 -d:pserver:$(CONFIG_ACTIVEDEV_CVSUSERNAME)@$(CONFIG_ACTIVEDEV_CVSROOTPATH):/prj/msacvs/enterprise checkout -d $(PKG_NAME)-$(PKG_VERSION) -r $(CONFIG_DEV_ATHEROSMB81_CVSBRANCH) $(CONFIG_DEV_ATHEROSMB81_MODULENAME) &&\
	popd
	
	@if [ -d ./patches -a "$$$$(ls ./patches | wc -l)" -gt 0 ]; then \
		$(PATCH) $(PKG_BUILD_DIR) ./patches; \
	fi

	rm -fr $(PKG_BUILD_DIR)_revc
	cp -a $(PKG_BUILD_DIR) $(PKG_BUILD_DIR)_revc
	patch -p1 -R -d $(PKG_BUILD_DIR)_revc < ./patches/010-pci_rx_dma_burst.patch
endef
endif
else
define Build/Prepare
	$(TAR) xfz $(PKG_SOURCE_FILE) -C $(KERNEL_BUILD_DIR)

	@if [ -d ./patches -a "$$$$(ls ./patches | wc -l)" -gt 0 ]; then \
		$(PATCH) $(PKG_BUILD_DIR) ./patches; \
	fi

	rm -fr $(PKG_BUILD_DIR)_revc
	cp -a $(PKG_BUILD_DIR) $(PKG_BUILD_DIR)_revc
	patch -p1 -R -d $(PKG_BUILD_DIR)_revc < ./patches/010-pci_rx_dma_burst.patch
endef
endif

ATHEROS_HAL_MAKEOPTS= TARGET="$(HAL_TARGET)" \
			TOOLPREFIX="$(TARGET_CROSS)"

ATHEROS_MAKEOPTS= DESTDIR="$(STAGING_DIR)" \
		ARCH="$(LINUX_KARCH)" \
		CROSS_COMPILE="$(TARGET_CROSS)" \
		TARGET="$(HAL_TARGET)" \
		TOOLPREFIX="$(KERNEL_CROSS)" \
		TOOLPATH="$(KERNEL_CROSS)" \
		KERNELPATH="$(LINUX_DIR)"

define Build/Compile/pci
	$(MAKE) -C $(PKG_BUILD_DIR)/wlan/linux $(ATHEROS_MAKEOPTS) V=1 BUS="PCI"
	$(MAKE) -C $(PKG_BUILD_DIR)/wlan/linux/tools $(ATHEROS_MAKEOPTS) clean
	cd $(PKG_BUILD_DIR)/wlan/linux/tools && $(MAKE)  CROSS_COMPILE="$(TARGET_CROSS)" KERNELPATH="$(LINUX_DIR)" \
                TOOLPREFIX="$(KERNEL_CROSS)"  ath_tools
	cd $(PKG_BUILD_DIR)/wlan/linux/tools && $(MAKE)  CROSS_COMPILE="$(TARGET_CROSS)" KERNELPATH="$(LINUX_DIR)" \
                TOOLPREFIX="$(KERNEL_CROSS)"  wlanconfig

	mkdir -p $(STAGING_DIR)/usr/include/atheros
	$(CP) $(PKG_BUILD_DIR)/wlan/include $(STAGING_DIR)/usr/include/atheros/
	mkdir -p $(STAGING_DIR)/usr/include/atheros/net80211
	$(CP) $(PKG_BUILD_DIR)/wlan/linux/net80211/*.h $(STAGING_DIR)/usr/include/atheros/net80211/

	ln -fs $(PKG_BUILD_DIR)/include $(PKG_BUILD_DIR)/wlan/linux/include
	cd $(PKG_BUILD_DIR)/apps/wpa2 && $(MAKE)      \
		CC=$(KERNEL_CROSS)gcc AR=$(KERNEL_CROSS)ar LD=$(KERNEL_CROSS)ld \
		OPTFLAGS="$(TARGET_CFLAGS)" \
		CPPFLAGS="$(TARGET_CPPFLAGS) -I$(STAGING_DIR)/usr/include/atheros" \
		LDFLAGS="$(TARGET_LDFLAGS)"
		

	$(CP) $(PKG_BUILD_DIR)/wlan/linux/ath_hal/ath_hal.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/ath_hal_revb.$(LINUX_KMOD_SUFFIX)
	$(CP) $(PKG_BUILD_DIR)/wlan/linux/ath/ath_pci.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/wlan/linux/net80211/wlan.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/wlan/linux/net80211/wlan_acl.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/wlan/linux/net80211/wlan_ccmp.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/wlan/linux/net80211/wlan_scan_ap.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/wlan/linux/net80211/wlan_scan_sta.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/wlan/linux/net80211/wlan_tkip.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/wlan/linux/net80211/wlan_wep.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/wlan/linux/net80211/wlan_xauth.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/wlan/linux/net80211/wlan_me.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/wlan/common/lmac/dfs/ath_dfs.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/wlan/common/lmac/ath_dev/ath_dev.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/wlan/common/lmac/ratectrl/ath_rate_atheros.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)

	$(MAKE) -C $(PKG_BUILD_DIR)_revc/wlan/linux $(ATHEROS_MAKEOPTS) V=1 BUS="PCI"
	$(CP) $(PKG_BUILD_DIR)_revc/wlan/linux/ath_hal/ath_hal.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/ath_hal_revc.$(LINUX_KMOD_SUFFIX)
endef


define Build/Compile
	$(MAKE) -C $(PKG_BUILD_DIR)/wlan/common/lmac/hal/linux $(ATHEROS_HAL_MAKEOPTS)
	$(MAKE) -C $(PKG_BUILD_DIR)/wlan/common/lmac/hal/linux $(ATHEROS_HAL_MAKEOPTS) release

# Build HAL for M821xx revc
	$(MAKE) -C $(PKG_BUILD_DIR)_revc/wlan/common/lmac/hal/linux $(ATHEROS_HAL_MAKEOPTS)
	$(MAKE) -C $(PKG_BUILD_DIR)_revc/wlan/common/lmac/hal/linux $(ATHEROS_HAL_MAKEOPTS) release

	$(call Build/Compile/pci)
endef

else
define Build/Prepare
	echo BUILD PREPARE
endef
define Build/Compile
	$(CP) ./files/$(BIN_PROFILE_BUILD)/ath_hal-$(PKG_VERSION)_revb.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/ath_hal_revb.$(LINUX_KMOD_SUFFIX)
	$(CP) ./files/$(BIN_PROFILE_BUILD)/ath_pci-$(PKG_VERSION).$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/ath_pci.$(LINUX_KMOD_SUFFIX)
	$(CP) ./files/$(BIN_PROFILE_BUILD)/ath_dev-$(PKG_VERSION).$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/ath_dev.$(LINUX_KMOD_SUFFIX)
	$(CP) ./files/$(BIN_PROFILE_BUILD)/wlan-$(PKG_VERSION).$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/wlan.$(LINUX_KMOD_SUFFIX)
	$(CP) ./files/$(BIN_PROFILE_BUILD)/wlan_acl-$(PKG_VERSION).$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/wlan_acl.$(LINUX_KMOD_SUFFIX)
	$(CP) ./files/$(BIN_PROFILE_BUILD)/wlan_me-$(PKG_VERSION).$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/wlan_me.$(LINUX_KMOD_SUFFIX)
	$(CP) ./files/$(BIN_PROFILE_BUILD)/wlan_ccmp-$(PKG_VERSION).$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/wlan_ccmp.$(LINUX_KMOD_SUFFIX)
	$(CP) ./files/$(BIN_PROFILE_BUILD)/wlan_scan_ap-$(PKG_VERSION).$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/wlan_scan_ap.$(LINUX_KMOD_SUFFIX)
	$(CP) ./files/$(BIN_PROFILE_BUILD)/wlan_scan_sta-$(PKG_VERSION).$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/wlan_scan_sta.$(LINUX_KMOD_SUFFIX)
	$(CP) ./files/$(BIN_PROFILE_BUILD)/wlan_tkip-$(PKG_VERSION).$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/wlan_tkip.$(LINUX_KMOD_SUFFIX)
	$(CP) ./files/$(BIN_PROFILE_BUILD)/wlan_wep-$(PKG_VERSION).$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/wlan_wep.$(LINUX_KMOD_SUFFIX)
	$(CP) ./files/$(BIN_PROFILE_BUILD)/wlan_xauth-$(PKG_VERSION).$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/wlan_xauth.$(LINUX_KMOD_SUFFIX)
	$(CP) ./files/$(BIN_PROFILE_BUILD)/ath_dfs-$(PKG_VERSION).$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/ath_dfs.$(LINUX_KMOD_SUFFIX)
	$(CP) ./files/$(BIN_PROFILE_BUILD)/ath_rate_atheros-$(PKG_VERSION).$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/ath_rate_atheros.$(LINUX_KMOD_SUFFIX)
	$(CP) ./files/$(BIN_PROFILE_BUILD)/ath_hal-$(PKG_VERSION)_revc.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/ath_hal_revc.$(LINUX_KMOD_SUFFIX)

	mkdir -p $(PKG_BUILD_DIR)/wlan/linux/tools
	$(CP) -p ./files/$(BIN_PROFILE_BUILD)/80211stats $(PKG_BUILD_DIR)/wlan/linux/tools/
	$(CP) -p ./files/$(BIN_PROFILE_BUILD)/athstats $(PKG_BUILD_DIR)/wlan/linux/tools/
	$(CP) -p ./files/$(BIN_PROFILE_BUILD)/wlanconfig $(PKG_BUILD_DIR)/wlan/linux/tools/

	mkdir -p $(PKG_BUILD_DIR)/apps/wpa2/hostapd
	$(CP) -p ./files/$(BIN_PROFILE_BUILD)/hostapd $(PKG_BUILD_DIR)/apps/wpa2/hostapd/
	
	mkdir -p $(PKG_BUILD_DIR)/apps/wpa2/wpatalk
	$(CP) -p ./files/$(BIN_PROFILE_BUILD)/wpatalk $(PKG_BUILD_DIR)/apps/wpa2/wpatalk/
	
	mkdir -p $(PKG_BUILD_DIR)/apps/wpa2/common
	$(CP) -p ./files/$(BIN_PROFILE_BUILD)/*.so $(PKG_BUILD_DIR)/apps/wpa2/common/

	mkdir -p $(PKG_BUILD_DIR)/wlan
	$(CP) -r ./files/wlan/* $(PKG_BUILD_DIR)/wlan/
endef
endif

define Build/InstallDev
	mkdir -p $(STAGING_DIR)/usr/include/atheros
	$(CP) $(PKG_BUILD_DIR)/wlan/include $(STAGING_DIR)/usr/include/atheros/
	mkdir -p $(STAGING_DIR)/usr/include/atheros/net80211
	$(CP) $(PKG_BUILD_DIR)/wlan/linux/net80211/*.h $(STAGING_DIR)/usr/include/atheros/net80211/
endef

define Build/UninstallDev
	rm -rf	$(STAGING_DIR)/usr/include/atheros
endef

define KernelPackage/atherosmb81/install
	$(INSTALL_DIR) $(1)/lib/wifi
	$(INSTALL_DATA) ./files/lib/wifi/atherosmb81.sh $(1)/lib/wifi
	$(INSTALL_DATA) ./files/lib/wifi/hostapd.sh $(1)/lib/wifi

	$(INSTALL_DIR) $(1)/usr/sbin
	$(CP) $(PKG_BUILD_DIR)/wlan/linux/tools/{80211stats,athstats,wlanconfig} $(1)/usr/sbin/
# 
# Install Hostapd
# 	
	$(CP) $(PKG_BUILD_DIR)/apps/wpa2/hostapd/hostapd $(1)/usr/sbin/
	$(CP) $(PKG_BUILD_DIR)/apps/wpa2/wpatalk/wpatalk $(1)/usr/sbin/
	$(INSTALL_DIR) $(1)/etc/wpa2/
	$(CP) ./files/lib/wifi/security.conf $(1)/etc/wpa2/
	$(CP) $(PKG_BUILD_DIR)/apps/wpa2/common/*.so $(1)/lib/
	

endef

$(eval $(call KernelPackage,atherosmb81))
