# 
# 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:=atheros
PKG_ATHEROS_VERSION:=1.3.1.146
PKG_MSPD_VERSION:=0.00
PKG_RELEASE:=3
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

include $(INCLUDE_DIR)/package.mk

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)
  HAL_TARGET:=armv4-le-elf
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_pci \
	wlan_acl \
	wlan_ccmp \
	wlan_tkip \
	wlan_wep \
	wlan_xauth

################ OpenWRT definition ########################
define KernelPackage/atheros
  CATEGORY:=Mindspeed Packages
  DEFAULT:=n
  TITLE:=Atheros 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)/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 ($(CONFIG_DEV_ATHEROS), y)
ifeq ($(CONFIG_DEV_ATHEROS_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_ATHEROS_MODULENAME)/wlan &&\
	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_ATHEROS_CVSBRANCH) $(CONFIG_DEV_ATHEROS_MODULENAME)/wlan &&\
	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

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

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) $(ATHEROS_MAKEOPTS) V=1 BUS="PCI"
	$(CP) $(PKG_BUILD_DIR)/core/ath_hal/ath_hal.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/ath_hal_revb.$(LINUX_KMOD_SUFFIX)
	$(CP) $(PKG_BUILD_DIR)/core/ath/ath_pci.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/core/net80211/wlan.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/core/net80211/wlan_acl.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/core/net80211/wlan_ccmp.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/core/net80211/wlan_scan_ap.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/core/net80211/wlan_scan_sta.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/core/net80211/wlan_tkip.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/core/net80211/wlan_wep.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/core/net80211/wlan_xauth.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/dfs/ath_dfs.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)
	$(CP) $(PKG_BUILD_DIR)/ratectrl11n/ath_rate_atheros.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)

	$(MAKE) -C $(PKG_BUILD_DIR)_revc $(ATHEROS_MAKEOPTS) V=1 BUS="PCI"
	$(CP) $(PKG_BUILD_DIR)_revc/core/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)/core/hal/linux $(ATHEROS_HAL_MAKEOPTS)
	$(MAKE) -C $(PKG_BUILD_DIR)/core/hal/linux $(ATHEROS_HAL_MAKEOPTS) release

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

	$(call Build/Compile/pci)
endef

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

	$(CP) ./files/ath_hal-$(PKG_VERSION)-$(PROFILE)_revc.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/ath_hal_revc.$(LINUX_KMOD_SUFFIX)
endef
endif

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

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

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

	$(INSTALL_DIR) $(1)/usr/sbin
	$(CP) $(PKG_BUILD_DIR)/tools/{80211stats,athchans,athctrl,athkey,athstats,wlanconfig} $(1)/usr/sbin/
endef

$(eval $(call KernelPackage,atheros))
