# 
# 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:=rt2880
PKG_RALINK_VERSION:=1.1.7.3
PKG_MSPD_VERSION:=0.00
PKG_RELEASE:=2
PKG_VERSION:=$(PKG_RALINK_VERSION)-$(PKG_MSPD_VERSION).$(PKG_RELEASE)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install
PKG_MODULE_NAME:=$(PKG_NAME)-$(PKG_VERSION)

PKG_SOURCE_FILE:=$(TOPDIR)/dl/$(PKG_SOURCE)
PKG_BUILD_FROM_SOURCE:=$(shell if [ -e $(PKG_SOURCE_FILE) ]; then echo y; fi)
ifeq ($(CONFIG_DEV_RT2880), 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

################ OpenWRT definition ########################
define KernelPackage/rt2880
  CATEGORY:=Mindspeed Packages
  DEFAULT:=n
  TITLE:=Ralink 802.11n Wifi card
  DESCRIPTION:= This package contains a driver for Ralink RT2880 iNIC cards.
  URL:=http://www.ralink.com/
  MAINTAINER:=Mindspeed Technologies
  FILES:= $(PKG_BUILD_DIR)/rt2880_iNIC_revb.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/rt2880_iNIC_revc.$(LINUX_KMOD_SUFFIX)
  AUTOLOAD:=$(call AutoLoad,50,rt2880_iNIC.$(LINUX_KMOD_SUFFIX))
endef

ifeq ($(PKG_BUILD_FROM_SOURCE), y)
ifeq ($(CONFIG_DEV_RT2880), y)
ifeq ($(CONFIG_DEV_RT2880_CVSBRANCH), "")

define Build/Prepare
	pushd "$(KERNEL_BUILD_DIR)" &&\
	cvs -z9 -d:pserver:$(CONFIG_ACTIVEDEV_CVSUSERNAME)@$(CONFIG_ACTIVEDEV_CVSROOTPATH):/prj/msacvs/enterprise checkout -Pd $(PKG_NAME)-$(PKG_VERSION) $(CONFIG_DEV_RT2880_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-rx_dma_burst_size.patch
endef

else # ($(CONFIG_DEV_RT2880_CVSBRANCH) != "")

define Build/Prepare
	pushd "$(KERNEL_BUILD_DIR)" &&\
	cvs -z9 -d:pserver:$(CONFIG_ACTIVEDEV_CVSUSERNAME)@$(CONFIG_ACTIVEDEV_CVSROOTPATH):/prj/msacvs/enterprise checkout -Pd $(PKG_NAME)-$(PKG_VERSION) -r $(CONFIG_DEV_RT2880_CVSBRANCH) $(CONFIG_DEV_RT2880_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-rx_dma_burst_size.patch
endef
endif
else # ($(CONFIG_DEV_RT2880) != y)
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-rx_dma_burst_size.patch
endef
endif

define Build/Compile

	$(MAKE) -C $(PKG_BUILD_DIR)/module ARCH="$(LINUX_KARCH)" LINUX_SRC="$(LINUX_DIR)" CROSS_COMPILE="$(TARGET_CROSS)" RT_SRC_DIR="$(PKG_BUILD_DIR)/module"
	$(CP) $(PKG_BUILD_DIR)/module/rt2880_iNIC.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/rt2880_iNIC_revb.$(LINUX_KMOD_SUFFIX)

	$(MAKE) -C $(PKG_BUILD_DIR)_revc/module ARCH="$(LINUX_KARCH)" LINUX_SRC="$(LINUX_DIR)" CROSS_COMPILE="$(TARGET_CROSS)" RT_SRC_DIR="$(PKG_BUILD_DIR)_revc/module"
	$(CP) $(PKG_BUILD_DIR)_revc/module/rt2880_iNIC.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/rt2880_iNIC_revc.$(LINUX_KMOD_SUFFIX)

endef

else # ifeq ($(CONFIG_DEV_RT2880), y)

define Build/Prepare
	echo BUILD PREPARE
endef

define Build/Compile
	$(CP) ./files/$(BIN_PROFILE_BUILD)/$(PKG_MODULE_NAME)_revb.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/rt2880_iNIC_revb.$(LINUX_KMOD_SUFFIX)
	$(CP) ./files/$(BIN_PROFILE_BUILD)/$(PKG_MODULE_NAME)_revc.$(LINUX_KMOD_SUFFIX) $(PKG_BUILD_DIR)/rt2880_iNIC_revc.$(LINUX_KMOD_SUFFIX)

	mkdir -p $(PKG_BUILD_DIR)/module/firmware
	$(CP) ./files/iNIC_ap.bin $(PKG_BUILD_DIR)/module/firmware/
	$(CP) ./files/iNIC_ap.dat $(PKG_BUILD_DIR)/module/firmware/
endef
endif

define Build/InstallDev
endef

define Build/UninstallDev
endef

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

	$(INSTALL_DIR) $(1)/etc/Wireless/RT2880
	$(INSTALL_DATA) $(PKG_BUILD_DIR)/module/firmware/iNIC_ap.bin $(1)/etc/Wireless/RT2880
	$(INSTALL_DATA) $(PKG_BUILD_DIR)/module/firmware/iNIC_ap.dat $(1)/etc/Wireless/RT2880
endef

$(eval $(call KernelPackage,rt2880))

