#
# Copyright (C) 2012-2014 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:=misdn-extern
#This is tagged version 2.0.35 in git. Newer versions don't go along with kernel 3.10.x:
PKG_VERSION:=20140903
PKG_RELEASE:=1


PKG_SOURCE_URL:=git://git.misdn.eu/mISDN.git
#PKG_SOURCE_VERSION:=HEAD
PKG_SOURCE_VERSION:=b77c4645bc5acb0a2640a209197fe654606cdf2f
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)


#?? PKG_BUILD_PARALLEL:=1
PKG_FIXUP:=autoreconf


include $(INCLUDE_DIR)/package.mk

include $(INCLUDE_DIR)/kernel-defaults.mk

# Diabled, as boot code (modprobe) does not like a module filename prefix
#MISDN-EXTERN_PREFIX:=ext-
MISDN-EXTERN_TMPDIR:=$(PKG_BUILD_DIR)/tmp

#
#
#

define KernelPackage/misdn-extern/Default
  SUBMENU:=Network Support
  URL:=https://www.misdn.eu/wiki/Main_Page/
  MAINTAINER:=Arnold Schulz <theosch@gmx.net>
endef



define KernelPackage/misdn-extern
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=Out of tree misdn modules
  MENU:=1
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)mISDN_core.ko
# PROVIDES:= kmod-misdn
  AUTOLOAD:=$(call AutoLoad,30,$(MISDN-EXTERN_PREFIX)mISDN_core)
endef


define KernelPackage/misdn-extern/description
  Out of tree misdn kernel modules
endef


#
#
#

define KernelPackage/misdn-extern-l1oip
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=ISDN over IP tunnel
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)l1oip.ko
  DEPENDS:=kmod-misdn-extern
  AUTOLOAD:=$(call AutoLoad,31,$(MISDN-EXTERN_PREFIX)l1oip)
endef

define KernelPackage/misdn-extern-l1oip/Description
  Enable support for ISDN over IP tunnel.

  It features:
	- dynamic IP exchange, if one or both peers have dynamic IPs
	- BRI (S0) and PRI (S2M) interface
	- layer 1 control via network keepalive frames
	- direct tunneling of physical interface via IP

  NOTE: This protocol is called 'Layer 1 over IP' and is not compatible
  with ISDNoIP (Agfeo) or TDMoIP. Protocol description is provided in
  the source code.
endef



define KernelPackage/misdn-extern-dsp
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=Digital Audio Processing of transparent data
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)mISDN_dsp.ko
  DEPENDS:=kmod-misdn-extern
  AUTOLOAD:=$(call AutoLoad,31,$(MISDN-EXTERN_PREFIX)mISDN_dsp)
endef

define KernelPackage/misdn-extern-dsp/Description
  Enable support for digital audio processing capability.

  This module may be used for special applications that require
  cross connecting of bchannels, conferencing, dtmf decoding,
  echo cancellation, tone generation, and Blowfish encryption and
  decryption. It may use hardware features if available.

  E.g. it is required for the Linux-Call-Router (LCR).
endef



define KernelPackage/misdn-extern-dsp-kb1ec
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=kb1ec software echo canceller
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)mISDN_dsp_kb1ec.ko
  DEPENDS:=kmod-misdn-extern +kmod-misdn-extern-dsp
  AUTOLOAD:=$(call AutoLoad,32,$(MISDN-EXTERN_PREFIX)mISDN_dsp_kb1ec)
endef



define KernelPackage/misdn-extern-dsp-mec2
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=mec2 software echo canceller
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)mISDN_dsp_mec2.ko
  DEPENDS:=kmod-misdn-extern +kmod-misdn-extern-dsp
  AUTOLOAD:=$(call AutoLoad,32,$(MISDN-EXTERN_PREFIX)mISDN_dsp_mec2)
endef



define KernelPackage/misdn-extern-dsp-mg2ec
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=mg2ec software echo canceller
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)mISDN_dsp_mg2ec.ko
  DEPENDS:=kmod-misdn-extern +kmod-misdn-extern-dsp
  AUTOLOAD:=$(call AutoLoad,32,$(MISDN-EXTERN_PREFIX)mISDN_dsp_mg2ec)
endef



define KernelPackage/misdn-extern-dsp-octwareec
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=octware software echo canceller
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)mISDN_dsp_octwareec.ko
  DEPENDS:=kmod-misdn-extern +kmod-misdn-extern-dsp +kmod-misdn-extern-octvqe
  AUTOLOAD:=$(call AutoLoad,32,$(MISDN-EXTERN_PREFIX)mISDN_dsp_octwareec)
endef



define KernelPackage/misdn-extern-dsp-oslec
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=oslec software echo canceller
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)mISDN_dsp_oslec.ko
  DEPENDS:=kmod-misdn-extern +kmod-misdn-extern-dsp
  AUTOLOAD:=$(call AutoLoad,32,$(MISDN-EXTERN_PREFIX)mISDN_dsp_oslec)
endef



define KernelPackage/misdn-extern-octvqe
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=OCTVQE software echo canceller (outside dsp)
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)octvqe.ko
  DEPENDS:=kmod-misdn-extern
  AUTOLOAD:=$(call AutoLoad,31,$(MISDN-EXTERN_PREFIX)octvqe)
endef


#
#  Hardware device and virtual device drivers
#

define KernelPackage/misdn-extern-ipac
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=IPAC common code used by other drivers
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)mISDNipac.ko
  DEPENDS:=kmod-misdn-extern
  AUTOLOAD:=$(call AutoLoad,31,$(MISDN-EXTERN_PREFIX)mISDNipac)
endef



define KernelPackage/misdn-extern-isar
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=ISAR common code used by other drivers
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)mISDNisar.ko
  DEPENDS:=kmod-misdn-extern
  AUTOLOAD:=$(call AutoLoad,31,$(MISDN-EXTERN_PREFIX)mISDNisar)
endef



define KernelPackage/misdn-extern-l1loop
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=Virtual mISDN layer1 driver
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)mISDN_l1loop.ko
  DEPENDS:=kmod-misdn-extern
  AUTOLOAD:=$(call AutoLoad,32,$(MISDN-EXTERN_PREFIX)mISDN_l1loop)
endef


define KernelPackage/misdn-extern-avmfritz
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=Driver for AVM FRITZ!CARD PCI card
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)avmfritz.ko
  DEPENDS:=kmod-misdn-extern +kmod-misdn-extern-ipac
  AUTOLOAD:=$(call AutoLoad,32,$(MISDN-EXTERN_PREFIX)avmfritz)
endef


define KernelPackage/misdn-extern-hfcmulti
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=Driver for hfc-4s/hfc-8s/hfc-e1 cards
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)hfcmulti.ko
  DEPENDS:=kmod-misdn-extern
  AUTOLOAD:=$(call AutoLoad,32,$(MISDN-EXTERN_PREFIX)hfcmulti)
endef


define KernelPackage/misdn-extern-hfcpci
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=Driver for Colognechip hfc-pci card
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)hfcpci.ko
  DEPENDS:=kmod-misdn-extern
  AUTOLOAD:=$(call AutoLoad,32,$(MISDN-EXTERN_PREFIX)hfcpci)
endef


define KernelPackage/misdn-extern-hfcsusb
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=Driver for Colognechip HFC-S USB chip
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)hfcsusb.ko
  DEPENDS:=kmod-misdn-extern +kmod-usb-core
  AUTOLOAD:=$(call AutoLoad,32,$(MISDN-EXTERN_PREFIX)hfcusb)
endef


define KernelPackage/misdn-extern-infineon
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=Driver for Infineon ISDN chipsets
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)mISDNinfineon.ko
  DEPENDS:=kmod-misdn-extern +kmod-misdn-extern-ipac
  AUTOLOAD:=$(call AutoLoad,32,$(MISDN-EXTERN_PREFIX)mISDNinfineon)
endef


define KernelPackage/misdn-extern-infineon/Description
  Support for cards based on following Infineon ISDN chipsets
	- ISAC + HSCX
	- IPAC and IPAC-X
	- ISAC-SX + HSCX

  Supported cards:
	- Dialogic Diva 2.0
	- Dialogic Diva 2.0U
	- Dialogic Diva 2.01
	- Dialogic Diva 2.02
	- Sedlbauer Speedwin
	- HST Saphir3
	- Develo (former ELSA) Microlink PCI (Quickstep 1000)
	- Develo (former ELSA) Quickstep 3000
	- Berkom Scitel BRIX Quadro
	- Dr.Neuhaus (Sagem) Niccy
endef


#  This requires isdnhdlc from i4l in vanilla kernel
#  Note that the netjet driver is already in vanilla kernel,
#  but is currently not supported by mainline OpenWrt
#
define KernelPackage/misdn-extern-netjet
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=Driver for NETJet cards
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)netjet.ko
  DEPENDS:=kmod-misdn-extern +kmod-misdn-extern-ipac
  AUTOLOAD:=$(call AutoLoad,32,$(MISDN-EXTERN_PREFIX)netjet)
endef


define KernelPackage/misdn-extern-speedfax
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=Driver for Sedlbauer Speedfax+ cards
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)speedfax.ko
  DEPENDS:=kmod-misdn-extern +kmod-misdn-extern-ipac +kmod-misdn-extern-isar
  AUTOLOAD:=$(call AutoLoad,32,$(MISDN-EXTERN_PREFIX)speedfax)
endef


define KernelPackage/misdn-extern-w6692
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=Driver for Winbond w6692 based cards
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)w6692.ko
  DEPENDS:=kmod-misdn-extern
  AUTOLOAD:=$(call AutoLoad,32,$(MISDN-EXTERN_PREFIX)w6692)
endef


define KernelPackage/misdn-extern-xhfc
  $(call KernelPackage/misdn-extern/Default)
  TITLE:=Driver for Colognechip XHFC cards
  FILES:=$(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)xhfc.ko
  DEPENDS:=kmod-misdn-extern
  AUTOLOAD:=$(call AutoLoad,32,$(MISDN-EXTERN_PREFIX)xhfc)
endef


#
#  Building
#

define Build/Configure
	$(call Build/Configure/Default,--with-kerneldir=$(LINUX_DIR))
	( cd $(PKG_BUILD_DIR); $(CP) mISDN.cfg.default standalone/mISDN.cfg )
endef


MISDN-EXTERN_MODULES:= mISDN_core l1oip mISDN_dsp mISDN_dsp_kb1ec mISDN_dsp_mec2 mISDN_dsp_mg2ec mISDN_dsp_octwareec mISDN_dsp_oslec octvqe
MISDN-EXTERN_MODULES+= mISDNipac mISDNisar mISDN_l1loop avmfritz hfcmulti hfcpci hfcsusb mISDNinfineon netjet speedfax w6692 xhfc		

define Build/Compile
	( cd $(PKG_BUILD_DIR); $(MAKE) $(PKG_JOBS) modules \
		ARCH="$(LINUX_KARCH)" \
		CROSS_COMPILE="$(TARGET_CROSS)" \
		CC="$(TARGET_CC)" \
		CPP="$(TARGET_CC)" \
		LD="$(TARGET_CROSS)ld" \
		LINUX_SOURCE="$(LINUX_DIR)" \
		KR="$(LINUX_DIR)" )

	mkdir -p $(MISDN-EXTERN_TMPDIR)
	find $(PKG_BUILD_DIR) -name '*.ko' -exec cp -v {} $(MISDN-EXTERN_TMPDIR)/ \;
	$(if $(MISDN-EXTERN_PREFIX), \
		$(foreach m,$(MISDN-EXTERN_MODULES),mv -v $(MISDN-EXTERN_TMPDIR)/$(m).ko $(MISDN-EXTERN_TMPDIR)/$(MISDN-EXTERN_PREFIX)$(m).ko; ))
endef


$(eval $(call KernelPackage,misdn-extern))
$(eval $(call KernelPackage,misdn-extern-l1oip))
$(eval $(call KernelPackage,misdn-extern-dsp))
$(eval $(call KernelPackage,misdn-extern-dsp-kb1ec))
$(eval $(call KernelPackage,misdn-extern-dsp-mec2))
$(eval $(call KernelPackage,misdn-extern-dsp-mg2ec))
$(eval $(call KernelPackage,misdn-extern-dsp-octwareec))
$(eval $(call KernelPackage,misdn-extern-dsp-oslec))
$(eval $(call KernelPackage,misdn-extern-octvqe))
$(eval $(call KernelPackage,misdn-extern-ipac))
$(eval $(call KernelPackage,misdn-extern-isar))
$(eval $(call KernelPackage,misdn-extern-l1loop))
$(eval $(call KernelPackage,misdn-extern-avmfritz))
$(eval $(call KernelPackage,misdn-extern-hfcmulti))
$(eval $(call KernelPackage,misdn-extern-hfcpci))
$(eval $(call KernelPackage,misdn-extern-hfcsusb))
$(eval $(call KernelPackage,misdn-extern-infineon))
$(eval $(call KernelPackage,misdn-extern-netjet))
$(eval $(call KernelPackage,misdn-extern-speedfax))
$(eval $(call KernelPackage,misdn-extern-w6692))
$(eval $(call KernelPackage,misdn-extern-xhfc))

