mac80211: move broadcom packaging code to broadcom.mk
authorFelix Fietkau <nbd@nbd.name>
Sat, 29 Sep 2018 18:02:28 +0000 (20:02 +0200)
committerFelix Fietkau <nbd@nbd.name>
Sat, 6 Oct 2018 11:02:29 +0000 (13:02 +0200)
Signed-off-by: Felix Fietkau <nbd@nbd.name>
package/kernel/mac80211/Makefile
package/kernel/mac80211/broadcom.mk [new file with mode: 0644]

index a9cadda..cdcaf14 100644 (file)
@@ -24,7 +24,6 @@ PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
 PKG_DRIVERS = \
        adm8211 \
        airo \
-       b43 b43legacy brcmsmac brcmfmac brcmutil \
        hermes hermes-pci hermes-pcmcia hermes-plx\
        iwl-legacy iwl3945 iwl4965 iwlwifi \
        lib80211 \
@@ -47,16 +46,6 @@ PKG_CONFIG_DEPENDS:= \
        CONFIG_PACKAGE_MAC80211_DEBUGFS \
        CONFIG_PACKAGE_MAC80211_MESH \
        CONFIG_PACKAGE_MAC80211_TRACING \
-       CONFIG_PACKAGE_B43_DEBUG \
-       CONFIG_PACKAGE_B43_PIO \
-       CONFIG_PACKAGE_B43_PHY_G \
-       CONFIG_PACKAGE_B43_PHY_N \
-       CONFIG_PACKAGE_B43_PHY_LP \
-       CONFIG_PACKAGE_B43_PHY_HT \
-       CONFIG_PACKAGE_B43_BUSES_BCMA_AND_SSB \
-       CONFIG_PACKAGE_B43_BUSES_BCMA \
-       CONFIG_PACKAGE_B43_BUSES_SSB \
-       CONFIG_PACKAGE_BRCM80211_DEBUG \
        CONFIG_PACKAGE_IWLWIFI_DEBUG \
        CONFIG_PACKAGE_IWLWIFI_DEBUGFS \
        CONFIG_PACKAGE_RTLWIFI_DEBUG \
@@ -104,6 +93,7 @@ config-$(call config_package,mac80211) += MAC80211
 config-$(CONFIG_PACKAGE_MAC80211_MESH) += MAC80211_MESH
 
 include ath.mk
+include broadcom.mk
 include ralink.mk
 
 PKG_CONFIG_DEPENDS += \
@@ -184,448 +174,6 @@ define KernelPackage/airo/description
  Kernel support for Cisco Aironet cards
 endef
 
-#Broadcom firmware
-ifneq ($(CONFIG_B43_FW_6_30),)
-  PKG_B43_FWV4_NAME:=broadcom-wl
-  PKG_B43_FWV4_VERSION:=6.30.163.46
-  PKG_B43_FWV4_OBJECT:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION).wl_apsta.o
-  PKG_B43_FWV4_SOURCE:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION).tar.bz2
-  PKG_B43_FWV4_SOURCE_URL:=http://www.lwfinger.com/b43-firmware/
-  PKG_B43_FWV4_HASH:=a07c3b6b277833c7dbe61daa511f908cd66c5e2763eb7a0859abc36cd9335c2d
-else
-ifneq ($(CONFIG_B43_FW_5_10),)
-  PKG_B43_FWV4_NAME:=broadcom-wl
-  PKG_B43_FWV4_VERSION:=5.10.56.27.3
-  PKG_B43_FWV4_OBJECT:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION)/driver/wl_apsta/wl_prebuilt.o
-  PKG_B43_FWV4_SOURCE:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION)_mipsel.tar.bz2
-  PKG_B43_FWV4_SOURCE_URL:=http://mirror2.openwrt.org/sources/
-  PKG_B43_FWV4_HASH:=26a8c370f48fc129d0731cfd751c36cae1419b0bc8ca35781126744e60eae009
-else
-ifneq ($(CONFIG_B43_FW_4_178),)
-  PKG_B43_FWV4_NAME:=broadcom-wl
-  PKG_B43_FWV4_VERSION:=4.178.10.4
-  PKG_B43_FWV4_OBJECT:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION)/linux/wl_apsta.o
-  PKG_B43_FWV4_SOURCE:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION).tar.bz2
-  PKG_B43_FWV4_SOURCE_URL:=http://mirror2.openwrt.org/sources/
-  PKG_B43_FWV4_HASH:=32f6ad98facbb9045646fdc8b54bb03086d204153253f9c65d0234a5d90ae53f
-else
-ifneq ($(CONFIG_B43_FW_5_100_138),)
-  PKG_B43_FWV4_NAME:=broadcom-wl
-  PKG_B43_FWV4_VERSION:=5.100.138
-  PKG_B43_FWV4_OBJECT:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION)/linux/wl_apsta.o
-  PKG_B43_FWV4_SOURCE:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION).tar.bz2
-  PKG_B43_FWV4_SOURCE_URL:=http://www.lwfinger.com/b43-firmware/
-  PKG_B43_FWV4_HASH:=f1e7067aac5b62b67b8b6e4c517990277804339ac16065eb13c731ff909ae46f
-else
-  PKG_B43_FWV4_NAME:=broadcom-wl
-  PKG_B43_FWV4_VERSION:=4.150.10.5
-  PKG_B43_FWV4_OBJECT:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION)/driver/wl_apsta_mimo.o
-  PKG_B43_FWV4_SOURCE:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION).tar.bz2
-  PKG_B43_FWV4_SOURCE_URL:=http://mirror2.openwrt.org/sources/
-  PKG_B43_FWV4_HASH:=a9f4e276a4d8d3a1cd0f2eb87080ae89b77f0a7140f06d4e9e2135fc44fdd533
-endif
-endif
-endif
-endif
-ifneq ($(CONFIG_B43_OPENFIRMWARE),)
-  PKG_B43_FWV4_NAME:=broadcom-wl
-  PKG_B43_FWV4_VERSION:=5.2
-  PKG_B43_FWV4_OBJECT:=openfwwf-$(PKG_B43_FWV4_VERSION)
-  PKG_B43_FWV4_SOURCE:=openfwwf-$(PKG_B43_FWV4_VERSION).tar.gz
-  PKG_B43_FWV4_SOURCE_URL:=http://netweb.ing.unibs.it/~openfwwf/firmware
-  PKG_B43_FWV4_HASH:=9de03320083201080b2e94b81637ac07a159cf4e6f3481383e1a217e627bc0dc
-endif
-
-
-define Download/b43
-  FILE:=$(PKG_B43_FWV4_SOURCE)
-  URL:=$(PKG_B43_FWV4_SOURCE_URL)
-  HASH:=$(PKG_B43_FWV4_HASH)
-endef
-$(eval $(call Download,b43))
-
-define KernelPackage/b43
-  $(call KernelPackage/mac80211/Default)
-  TITLE:=Broadcom 43xx wireless support
-  URL:=https://wireless.wiki.kernel.org/en/users/drivers/b43
-  KCONFIG:= \
-       CONFIG_HW_RANDOM=y
-  # Depend on PCI_SUPPORT to make sure we can select kmod-bcma or kmod-ssb
-  DEPENDS += \
-       @PCI_SUPPORT +kmod-mac80211 \
-       $(if $(CONFIG_PACKAGE_B43_USE_SSB),+kmod-ssb) \
-       $(if $(CONFIG_PACKAGE_B43_USE_BCMA),+kmod-bcma)
-  FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/broadcom/b43/b43.ko
-  AUTOLOAD:=$(call AutoProbe,b43)
-  MENU:=1
-endef
-
-define KernelPackage/b43/config
-
-config PACKAGE_B43_USE_SSB
-       select PACKAGE_kmod-ssb
-       tristate
-       depends on !TARGET_brcm47xx && !TARGET_brcm63xx
-       default PACKAGE_kmod-b43 if PACKAGE_B43_BUSES_BCMA_AND_SSB
-       default PACKAGE_kmod-b43 if PACKAGE_B43_BUSES_SSB
-
-config PACKAGE_B43_USE_BCMA
-       select PACKAGE_kmod-bcma
-       tristate
-       depends on !TARGET_brcm47xx && !TARGET_bcm53xx
-       default PACKAGE_kmod-b43 if PACKAGE_B43_BUSES_BCMA_AND_SSB
-       default PACKAGE_kmod-b43 if PACKAGE_B43_BUSES_BCMA
-
-  if PACKAGE_kmod-b43
-
-       choice
-               prompt "b43 firmware version"
-               default B43_FW_5_100_138
-               help
-                 This option allows you to select the version of the b43 firmware.
-
-       config B43_FW_4_150
-               bool "Firmware 410.2160 from driver 4.150.10.5 (old stable)"
-               help
-                 Old stable firmware for BCM43xx devices.
-
-                 If unsure, select this.
-
-       config B43_FW_4_178
-               bool "Firmware 478.104 from driver 4.178.10.4"
-               help
-                 Older firmware for BCM43xx devices.
-
-                 If unsure, select the "stable" firmware.
-
-       config B43_FW_5_10
-               bool "Firmware 508.1084 from driver 5.10.56.27"
-               help
-                 Older firmware for BCM43xx devices.
-
-                 If unsure, select the "stable" firmware.
-
-       config B43_FW_5_100_138
-               bool "Firmware 666.2 from driver 5.100.138 (stable)"
-               help
-                 The currently default firmware for BCM43xx devices.
-
-                 This firmware currently gets most of the testing and is needed for some N-PHY devices.
-
-                 If unsure, select the this firmware.
-
-       config B43_FW_6_30
-               bool "Firmware 784.2 from driver 6.30.163.46 (experimental)"
-               help
-                 Newer experimental firmware for BCM43xx devices.
-
-                 This firmware is mostly untested.
-
-                 If unsure, select the "stable" firmware.
-
-       config B43_OPENFIRMWARE
-               bool "Open FirmWare for WiFi networks"
-               help
-                 Opensource firmware for BCM43xx devices.
-
-                 Do _not_ select this, unless you know what you are doing.
-                 The Opensource firmware is not suitable for embedded devices, yet.
-                 It does not support QoS, which is bad for AccessPoints.
-                 It does not support hardware crypto acceleration, which is a showstopper
-                 for embedded devices with low CPU resources.
-
-                 If unsure, select the "stable" firmware.
-
-       endchoice
-
-       config B43_FW_SQUASH
-               bool "Remove unnecessary firmware files"
-               depends on !B43_OPENFIRMWARE
-               default y
-               help
-                 This options allows you to remove unnecessary b43 firmware files
-                 from the final rootfs image. This can reduce the rootfs size by
-                 up to 200k.
-
-                 If unsure, say Y.
-
-       config B43_FW_SQUASH_COREREVS
-               string "Core revisions to include"
-               depends on B43_FW_SQUASH
-               default "5,6,7,8,9,10,11,13,15" if TARGET_brcm47xx_legacy
-               default "16,28,29,30" if TARGET_brcm47xx_mips74k
-               default "5,6,7,8,9,10,11,13,15,16,28,29,30"
-               help
-                 This is a comma seperated list of core revision numbers.
-
-                 Example (keep files for rev5 only):
-                   5
-
-                 Example (keep files for rev5 and rev11):
-                   5,11
-
-       config B43_FW_SQUASH_PHYTYPES
-               string "PHY types to include"
-               depends on B43_FW_SQUASH
-               default "G,N,LP" if TARGET_brcm47xx_legacy
-               default "N,HT" if TARGET_brcm47xx_mips74k
-               default "G,N,LP,HT"
-               help
-                 This is a comma seperated list of PHY types:
-                   A  => A-PHY
-                   AG => Dual A-PHY G-PHY
-                   G  => G-PHY
-                   LP => LP-PHY
-                   N  => N-PHY
-                   HT  => HT-PHY
-                   LCN  => LCN-PHY
-                   LCN40  => LCN40-PHY
-                   AC  => AC-PHY
-
-                 Example (keep files for G-PHY only):
-                   G
-
-                 Example (keep files for G-PHY and N-PHY):
-                   G,N
-
-       choice
-               prompt "Supported buses"
-               default PACKAGE_B43_BUSES_BCMA_AND_SSB
-               help
-                 This allows choosing buses that b43 should support.
-
-       config PACKAGE_B43_BUSES_BCMA_AND_SSB
-               depends on !TARGET_brcm47xx_legacy && !TARGET_brcm47xx_mips74k && !TARGET_bcm53xx
-               bool "BCMA and SSB"
-
-       config PACKAGE_B43_BUSES_BCMA
-               depends on !TARGET_brcm47xx_legacy
-               bool "BCMA only"
-
-       config PACKAGE_B43_BUSES_SSB
-               depends on !TARGET_brcm47xx_mips74k && !TARGET_bcm53xx
-               bool "SSB only"
-
-       endchoice
-
-       config PACKAGE_B43_DEBUG
-               bool "Enable debug output and debugfs for b43"
-               default n
-               help
-                 Enable additional debug output and runtime sanity checks for b43
-                 and enables the debugfs interface.
-
-                 If unsure, say N.
-
-       config PACKAGE_B43_PIO
-               bool "Enable support for PIO transfer mode"
-               default n
-               help
-                 Enable support for using PIO instead of DMA. Unless you have DMA
-                 transfer problems you don't need this.
-
-                 If unsure, say N.
-
-       config PACKAGE_B43_PHY_G
-               bool "Enable support for G-PHYs"
-               default n if TARGET_brcm47xx_mips74k
-               default y
-               help
-                 Enable support for G-PHY. This includes support for the following devices:
-                 PCI: BCM4306, BCM4311, BCM4318
-                 SoC: BCM5352E, BCM4712
-
-                 If unsure, say Y.
-
-       config PACKAGE_B43_PHY_N
-               bool "Enable support for N-PHYs"
-               default y
-               help
-                 Enable support for N-PHY. This includes support for the following devices:
-                 PCI: BCM4321, BCM4322, BCM43222, BCM43224, BCM43225
-                 SoC: BCM4716, BCM4717, BCM4718
-
-                 Currently only 11g speed is available.
-
-                 If unsure, say Y.
-
-       config PACKAGE_B43_PHY_LP
-               bool "Enable support for LP-PHYs"
-               default n if TARGET_brcm47xx_mips74k
-               default y
-               help
-                 Enable support for LP-PHY. This includes support for the following devices:
-                 PCI: BCM4312
-                 SoC: BCM5354
-
-                 If unsure, say Y.
-
-       config PACKAGE_B43_PHY_HT
-               bool "Enable support for HT-PHYs"
-               default n if TARGET_brcm47xx_legacy
-               default y
-               help
-                 Enable support for HT-PHY. This includes support for the following devices:
-                 PCI: BCM4331
-
-                 Currently only 11g speed is available.
-
-                 If unsure, say Y.
-
-       config PACKAGE_B43_PHY_LCN
-               bool "Enable support for LCN-PHYs"
-               depends on BROKEN
-               default n
-               help
-                 Currently broken.
-
-                 If unsure, say N.
-
-  endif
-endef
-
-define KernelPackage/b43/description
-Kernel module for Broadcom 43xx wireless support (mac80211 stack) new
-endef
-
-define KernelPackage/b43legacy
-  $(call KernelPackage/mac80211/Default)
-  TITLE:=Broadcom 43xx-legacy wireless support
-  URL:=https://wireless.wiki.kernel.org/en/users/drivers/b43
-  KCONFIG:= \
-       CONFIG_HW_RANDOM=y
-  DEPENDS+= +kmod-mac80211 +!(TARGET_brcm47xx||TARGET_brcm63xx):kmod-ssb +b43legacy-firmware
-  FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/broadcom/b43legacy/b43legacy.ko
-  AUTOLOAD:=$(call AutoProbe,b43legacy)
-  MENU:=1
-endef
-
-define KernelPackage/b43legacy/description
-Kernel module for Broadcom 43xx-legacy wireless support (mac80211 stack) new
-endef
-
-
-define KernelPackage/brcmutil
-  $(call KernelPackage/mac80211/Default)
-  TITLE:=Broadcom IEEE802.11n common driver parts
-  URL:=https://wireless.wiki.kernel.org/en/users/drivers/brcm80211
-  DEPENDS+=@PCI_SUPPORT||USB_SUPPORT
-  FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil.ko
-  AUTOLOAD:=$(call AutoProbe,brcmutil)
-  MENU:=1
-endef
-
-define KernelPackage/brcmutil/description
- This module contains some common parts needed by Broadcom Wireless drivers brcmsmac and brcmfmac.
-endef
-
-define KernelPackage/brcmutil/config
-  if PACKAGE_kmod-brcmutil
-
-       config PACKAGE_BRCM80211_DEBUG
-               bool "Broadcom wireless driver debugging"
-               help
-                 Say Y, if you want to debug brcmsmac and brcmfmac wireless driver.
-
-  endif
-endef
-
-PKG_BRCMSMAC_FW_NAME:=broadcom-wl
-PKG_BRCMSMAC_FW_VERSION:=5.100.138
-PKG_BRCMSMAC_FW_OBJECT:=$(PKG_BRCMSMAC_FW_NAME)-$(PKG_BRCMSMAC_FW_VERSION)/linux/wl_apsta.o
-PKG_BRCMSMAC_FW_SOURCE:=$(PKG_BRCMSMAC_FW_NAME)-$(PKG_BRCMSMAC_FW_VERSION).tar.bz2
-PKG_BRCMSMAC_FW_SOURCE_URL:=http://www.lwfinger.com/b43-firmware/
-PKG_BRCMSMAC_FW_HASH:=f1e7067aac5b62b67b8b6e4c517990277804339ac16065eb13c731ff909ae46f
-
-define Download/brcmsmac
-  FILE:=$(PKG_BRCMSMAC_FW_SOURCE)
-  URL:=$(PKG_BRCMSMAC_FW_SOURCE_URL)
-  HASH:=$(PKG_BRCMSMAC_FW_HASH)
-endef
-$(eval $(call Download,brcmsmac))
-
-define KernelPackage/brcmsmac
-  $(call KernelPackage/mac80211/Default)
-  TITLE:=Broadcom IEEE802.11n PCIe SoftMAC WLAN driver
-  URL:=https://wireless.wiki.kernel.org/en/users/drivers/brcm80211
-  DEPENDS+= +kmod-mac80211 +@DRIVER_11N_SUPPORT +!TARGET_brcm47xx:kmod-bcma +kmod-lib-cordic +kmod-lib-crc8 +kmod-brcmutil +!BRCMSMAC_USE_FW_FROM_WL:brcmsmac-firmware
-  FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/broadcom/brcm80211/brcmsmac/brcmsmac.ko
-  AUTOLOAD:=$(call AutoProbe,brcmsmac)
-  MENU:=1
-endef
-
-define KernelPackage/brcmsmac/description
- Kernel module for Broadcom IEEE802.11n PCIe Wireless cards
-endef
-
-define KernelPackage/brcmsmac/config
-  if PACKAGE_kmod-brcmsmac
-
-       config BRCMSMAC_USE_FW_FROM_WL
-               bool "Use firmware extracted from broadcom proprietary driver"
-               default y
-               help
-                 Instead of using the official brcmsmac firmware a firmware
-                 version 666.2 extracted from the proprietary Broadcom driver
-                 is used. This is needed to get core rev 17 used in bcm4716
-                 to work.
-
-                 If unsure, say Y.
-
-  endif
-endef
-
-
-define KernelPackage/brcmfmac
-  $(call KernelPackage/mac80211/Default)
-  TITLE:=Broadcom IEEE802.11n USB FullMAC WLAN driver
-  URL:=https://wireless.wiki.kernel.org/en/users/drivers/brcm80211
-  DEPENDS+= @USB_SUPPORT +kmod-cfg80211 +@DRIVER_11N_SUPPORT +@DRIVER_11AC_SUPPORT +kmod-brcmutil \
-       +BRCMFMAC_SDIO:kmod-mmc @!TARGET_uml \
-       +BRCMFMAC_USB:kmod-usb-core +BRCMFMAC_USB:brcmfmac-firmware-usb
-  FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
-  AUTOLOAD:=$(call AutoProbe,brcmfmac)
-endef
-
-define KernelPackage/brcmfmac/description
- Kernel module for Broadcom IEEE802.11n USB Wireless cards
-endef
-
-define KernelPackage/brcmfmac/config
-  if PACKAGE_kmod-brcmfmac
-
-       config BRCMFMAC_SDIO
-               bool "Enable SDIO bus interface support"
-               default y if TARGET_brcm2708
-               default y if TARGET_sunxi
-               default n
-               help
-                 Enable support for cards attached to an SDIO bus.
-                 Select this option only if you are sure that your
-                 board has a Broadcom wireless chip atacched to
-                 that bus.
-
-       config BRCMFMAC_USB
-               bool "Enable USB bus interface support"
-               depends on USB_SUPPORT
-               default y
-               help
-                 Supported USB connected chipsets:
-                 BCM43235, BCM43236, BCM43238 (all in revision 3 only)
-                 BCM43143, BCM43242, BCM43566, BCM43569
-
-       config BRCMFMAC_PCIE
-               bool "Enable PCIE bus interface support"
-               depends on PCI_SUPPORT
-               default y
-               help
-                 Supported PCIe connected chipsets:
-                 BCM4354, BCM4356, BCM43567, BCM43570, BCM43602
-
-  endif
-endef
-
-
 define KernelPackage/hermes
   $(call KernelPackage/mac80211/Default)
   TITLE:=Hermes 802.11b chipset support
@@ -1260,28 +808,6 @@ config-$(call config_package,lib80211) += LIB80211 LIB80211_CRYPT_WEP LIB80211_C
 
 config-$(call config_package,airo) += AIRO
 
-config-$(call config_package,b43) += B43
-config-$(CONFIG_PACKAGE_B43_BUSES_BCMA_AND_SSB) += B43_BUSES_BCMA_AND_SSB
-config-$(CONFIG_PACKAGE_B43_BUSES_BCMA) += B43_BUSES_BCMA
-config-$(CONFIG_PACKAGE_B43_BUSES_SSB) += B43_BUSES_SSB
-config-$(CONFIG_PACKAGE_B43_PHY_G) += B43_PHY_G
-config-$(CONFIG_PACKAGE_B43_PHY_N) += B43_PHY_N
-config-$(CONFIG_PACKAGE_B43_PHY_LP) += B43_PHY_LP
-config-$(CONFIG_PACKAGE_B43_PHY_HT) += B43_PHY_HT
-config-$(CONFIG_PACKAGE_B43_PIO) += B43_PIO
-config-$(CONFIG_PACKAGE_B43_DEBUG) += B43_DEBUG
-
-config-$(call config_package,b43legacy) += B43LEGACY
-config-y += B43LEGACY_DMA_MODE
-
-config-$(call config_package,brcmutil) += BRCMUTIL
-config-$(call config_package,brcmsmac) += BRCMSMAC
-config-$(call config_package,brcmfmac) += BRCMFMAC
-config-$(CONFIG_BRCMFMAC_SDIO) += BRCMFMAC_SDIO
-config-$(CONFIG_BRCMFMAC_USB) += BRCMFMAC_USB
-config-$(CONFIG_BRCMFMAC_PCIE) += BRCMFMAC_PCIE
-config-$(CONFIG_PACKAGE_BRCM80211_DEBUG) += BRCMDBG
-
 config-$(call config_package,mac80211-hwsim) += MAC80211_HWSIM
 config-$(call config_package,mt7601u) += MT7601U
 config-y += WL_MEDIATEK
@@ -1341,7 +867,7 @@ config-$(CONFIG_PACKAGE_RTLWIFI_DEBUG) += RTLWIFI_DEBUG
 config-$(call config_package,rtl8xxxu) += RTL8XXXU
 config-y += RTL8XXXU_UNTESTED
 
-config-$(CONFIG_LEDS_TRIGGERS) += MAC80211_LEDS B43_LEDS B43LEGACY_LEDS
+config-$(CONFIG_LEDS_TRIGGERS) += MAC80211_LEDS
 
 MAKE_OPTS:= -C "$(PKG_BUILD_DIR)" \
        $(KERNEL_MAKE_FLAGS) \
@@ -1467,14 +993,6 @@ ifneq ($(CONFIG_B43_FW_SQUASH),)
 endif
 endef
 
-define KernelPackage/brcmsmac/install
-       $(INSTALL_DIR) $(1)/lib/firmware/brcm
-ifeq ($(CONFIG_BRCMSMAC_USE_FW_FROM_WL),y)
-       tar xjf "$(DL_DIR)/$(PKG_BRCMSMAC_FW_SOURCE)" -C "$(PKG_BUILD_DIR)"
-       b43-fwcutter --brcmsmac -w $(1)/lib/firmware/ $(PKG_BUILD_DIR)/$(PKG_BRCMSMAC_FW_OBJECT)
-endif
-endef
-
 define KernelPackage/cfg80211/install
        $(INSTALL_DIR) $(1)/lib/wifi $(1)/lib/netifd/wireless
        $(INSTALL_DATA) ./files/lib/wifi/mac80211.sh $(1)/lib/wifi
diff --git a/package/kernel/mac80211/broadcom.mk b/package/kernel/mac80211/broadcom.mk
new file mode 100644 (file)
index 0000000..ae9b5a6
--- /dev/null
@@ -0,0 +1,487 @@
+PKG_DRIVERS += \
+       b43 b43legacy brcmsmac brcmfmac brcmutil
+
+PKG_CONFIG_DEPENDS += \
+       CONFIG_PACKAGE_B43_DEBUG \
+       CONFIG_PACKAGE_B43_PIO \
+       CONFIG_PACKAGE_B43_PHY_G \
+       CONFIG_PACKAGE_B43_PHY_N \
+       CONFIG_PACKAGE_B43_PHY_LP \
+       CONFIG_PACKAGE_B43_PHY_HT \
+       CONFIG_PACKAGE_B43_BUSES_BCMA_AND_SSB \
+       CONFIG_PACKAGE_B43_BUSES_BCMA \
+       CONFIG_PACKAGE_B43_BUSES_SSB \
+       CONFIG_PACKAGE_BRCM80211_DEBUG
+
+config-$(call config_package,b43) += B43
+config-$(CONFIG_PACKAGE_B43_BUSES_BCMA_AND_SSB) += B43_BUSES_BCMA_AND_SSB
+config-$(CONFIG_PACKAGE_B43_BUSES_BCMA) += B43_BUSES_BCMA
+config-$(CONFIG_PACKAGE_B43_BUSES_SSB) += B43_BUSES_SSB
+config-$(CONFIG_PACKAGE_B43_PHY_G) += B43_PHY_G
+config-$(CONFIG_PACKAGE_B43_PHY_N) += B43_PHY_N
+config-$(CONFIG_PACKAGE_B43_PHY_LP) += B43_PHY_LP
+config-$(CONFIG_PACKAGE_B43_PHY_HT) += B43_PHY_HT
+config-$(CONFIG_PACKAGE_B43_PIO) += B43_PIO
+config-$(CONFIG_PACKAGE_B43_DEBUG) += B43_DEBUG
+
+config-$(call config_package,b43legacy) += B43LEGACY
+config-y += B43LEGACY_DMA_MODE
+
+config-$(call config_package,brcmutil) += BRCMUTIL
+config-$(call config_package,brcmsmac) += BRCMSMAC
+config-$(call config_package,brcmfmac) += BRCMFMAC
+config-$(CONFIG_BRCMFMAC_SDIO) += BRCMFMAC_SDIO
+config-$(CONFIG_BRCMFMAC_USB) += BRCMFMAC_USB
+config-$(CONFIG_BRCMFMAC_PCIE) += BRCMFMAC_PCIE
+config-$(CONFIG_PACKAGE_BRCM80211_DEBUG) += BRCMDBG
+
+config-$(CONFIG_LEDS_TRIGGERS) += B43_LEDS B43LEGACY_LEDS
+
+#Broadcom firmware
+ifneq ($(CONFIG_B43_FW_6_30),)
+  PKG_B43_FWV4_NAME:=broadcom-wl
+  PKG_B43_FWV4_VERSION:=6.30.163.46
+  PKG_B43_FWV4_OBJECT:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION).wl_apsta.o
+  PKG_B43_FWV4_SOURCE:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION).tar.bz2
+  PKG_B43_FWV4_SOURCE_URL:=http://www.lwfinger.com/b43-firmware/
+  PKG_B43_FWV4_HASH:=a07c3b6b277833c7dbe61daa511f908cd66c5e2763eb7a0859abc36cd9335c2d
+else
+ifneq ($(CONFIG_B43_FW_5_10),)
+  PKG_B43_FWV4_NAME:=broadcom-wl
+  PKG_B43_FWV4_VERSION:=5.10.56.27.3
+  PKG_B43_FWV4_OBJECT:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION)/driver/wl_apsta/wl_prebuilt.o
+  PKG_B43_FWV4_SOURCE:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION)_mipsel.tar.bz2
+  PKG_B43_FWV4_SOURCE_URL:=http://mirror2.openwrt.org/sources/
+  PKG_B43_FWV4_HASH:=26a8c370f48fc129d0731cfd751c36cae1419b0bc8ca35781126744e60eae009
+else
+ifneq ($(CONFIG_B43_FW_4_178),)
+  PKG_B43_FWV4_NAME:=broadcom-wl
+  PKG_B43_FWV4_VERSION:=4.178.10.4
+  PKG_B43_FWV4_OBJECT:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION)/linux/wl_apsta.o
+  PKG_B43_FWV4_SOURCE:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION).tar.bz2
+  PKG_B43_FWV4_SOURCE_URL:=http://mirror2.openwrt.org/sources/
+  PKG_B43_FWV4_HASH:=32f6ad98facbb9045646fdc8b54bb03086d204153253f9c65d0234a5d90ae53f
+else
+ifneq ($(CONFIG_B43_FW_5_100_138),)
+  PKG_B43_FWV4_NAME:=broadcom-wl
+  PKG_B43_FWV4_VERSION:=5.100.138
+  PKG_B43_FWV4_OBJECT:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION)/linux/wl_apsta.o
+  PKG_B43_FWV4_SOURCE:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION).tar.bz2
+  PKG_B43_FWV4_SOURCE_URL:=http://www.lwfinger.com/b43-firmware/
+  PKG_B43_FWV4_HASH:=f1e7067aac5b62b67b8b6e4c517990277804339ac16065eb13c731ff909ae46f
+else
+  PKG_B43_FWV4_NAME:=broadcom-wl
+  PKG_B43_FWV4_VERSION:=4.150.10.5
+  PKG_B43_FWV4_OBJECT:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION)/driver/wl_apsta_mimo.o
+  PKG_B43_FWV4_SOURCE:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION).tar.bz2
+  PKG_B43_FWV4_SOURCE_URL:=http://mirror2.openwrt.org/sources/
+  PKG_B43_FWV4_HASH:=a9f4e276a4d8d3a1cd0f2eb87080ae89b77f0a7140f06d4e9e2135fc44fdd533
+endif
+endif
+endif
+endif
+ifneq ($(CONFIG_B43_OPENFIRMWARE),)
+  PKG_B43_FWV4_NAME:=broadcom-wl
+  PKG_B43_FWV4_VERSION:=5.2
+  PKG_B43_FWV4_OBJECT:=openfwwf-$(PKG_B43_FWV4_VERSION)
+  PKG_B43_FWV4_SOURCE:=openfwwf-$(PKG_B43_FWV4_VERSION).tar.gz
+  PKG_B43_FWV4_SOURCE_URL:=http://netweb.ing.unibs.it/~openfwwf/firmware
+  PKG_B43_FWV4_HASH:=9de03320083201080b2e94b81637ac07a159cf4e6f3481383e1a217e627bc0dc
+endif
+
+
+define Download/b43
+  FILE:=$(PKG_B43_FWV4_SOURCE)
+  URL:=$(PKG_B43_FWV4_SOURCE_URL)
+  HASH:=$(PKG_B43_FWV4_HASH)
+endef
+$(eval $(call Download,b43))
+
+define KernelPackage/b43
+  $(call KernelPackage/mac80211/Default)
+  TITLE:=Broadcom 43xx wireless support
+  URL:=https://wireless.wiki.kernel.org/en/users/drivers/b43
+  KCONFIG:= \
+       CONFIG_HW_RANDOM=y
+  # Depend on PCI_SUPPORT to make sure we can select kmod-bcma or kmod-ssb
+  DEPENDS += \
+       @PCI_SUPPORT +kmod-mac80211 \
+       $(if $(CONFIG_PACKAGE_B43_USE_SSB),+kmod-ssb) \
+       $(if $(CONFIG_PACKAGE_B43_USE_BCMA),+kmod-bcma)
+  FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/broadcom/b43/b43.ko
+  AUTOLOAD:=$(call AutoProbe,b43)
+  MENU:=1
+endef
+
+define KernelPackage/b43/config
+
+config PACKAGE_B43_USE_SSB
+       select PACKAGE_kmod-ssb
+       tristate
+       depends on !TARGET_brcm47xx && !TARGET_brcm63xx
+       default PACKAGE_kmod-b43 if PACKAGE_B43_BUSES_BCMA_AND_SSB
+       default PACKAGE_kmod-b43 if PACKAGE_B43_BUSES_SSB
+
+config PACKAGE_B43_USE_BCMA
+       select PACKAGE_kmod-bcma
+       tristate
+       depends on !TARGET_brcm47xx && !TARGET_bcm53xx
+       default PACKAGE_kmod-b43 if PACKAGE_B43_BUSES_BCMA_AND_SSB
+       default PACKAGE_kmod-b43 if PACKAGE_B43_BUSES_BCMA
+
+  if PACKAGE_kmod-b43
+
+       choice
+               prompt "b43 firmware version"
+               default B43_FW_5_100_138
+               help
+                 This option allows you to select the version of the b43 firmware.
+
+       config B43_FW_4_150
+               bool "Firmware 410.2160 from driver 4.150.10.5 (old stable)"
+               help
+                 Old stable firmware for BCM43xx devices.
+
+                 If unsure, select this.
+
+       config B43_FW_4_178
+               bool "Firmware 478.104 from driver 4.178.10.4"
+               help
+                 Older firmware for BCM43xx devices.
+
+                 If unsure, select the "stable" firmware.
+
+       config B43_FW_5_10
+               bool "Firmware 508.1084 from driver 5.10.56.27"
+               help
+                 Older firmware for BCM43xx devices.
+
+                 If unsure, select the "stable" firmware.
+
+       config B43_FW_5_100_138
+               bool "Firmware 666.2 from driver 5.100.138 (stable)"
+               help
+                 The currently default firmware for BCM43xx devices.
+
+                 This firmware currently gets most of the testing and is needed for some N-PHY devices.
+
+                 If unsure, select the this firmware.
+
+       config B43_FW_6_30
+               bool "Firmware 784.2 from driver 6.30.163.46 (experimental)"
+               help
+                 Newer experimental firmware for BCM43xx devices.
+
+                 This firmware is mostly untested.
+
+                 If unsure, select the "stable" firmware.
+
+       config B43_OPENFIRMWARE
+               bool "Open FirmWare for WiFi networks"
+               help
+                 Opensource firmware for BCM43xx devices.
+
+                 Do _not_ select this, unless you know what you are doing.
+                 The Opensource firmware is not suitable for embedded devices, yet.
+                 It does not support QoS, which is bad for AccessPoints.
+                 It does not support hardware crypto acceleration, which is a showstopper
+                 for embedded devices with low CPU resources.
+
+                 If unsure, select the "stable" firmware.
+
+       endchoice
+
+       config B43_FW_SQUASH
+               bool "Remove unnecessary firmware files"
+               depends on !B43_OPENFIRMWARE
+               default y
+               help
+                 This options allows you to remove unnecessary b43 firmware files
+                 from the final rootfs image. This can reduce the rootfs size by
+                 up to 200k.
+
+                 If unsure, say Y.
+
+       config B43_FW_SQUASH_COREREVS
+               string "Core revisions to include"
+               depends on B43_FW_SQUASH
+               default "5,6,7,8,9,10,11,13,15" if TARGET_brcm47xx_legacy
+               default "16,28,29,30" if TARGET_brcm47xx_mips74k
+               default "5,6,7,8,9,10,11,13,15,16,28,29,30"
+               help
+                 This is a comma seperated list of core revision numbers.
+
+                 Example (keep files for rev5 only):
+                   5
+
+                 Example (keep files for rev5 and rev11):
+                   5,11
+
+       config B43_FW_SQUASH_PHYTYPES
+               string "PHY types to include"
+               depends on B43_FW_SQUASH
+               default "G,N,LP" if TARGET_brcm47xx_legacy
+               default "N,HT" if TARGET_brcm47xx_mips74k
+               default "G,N,LP,HT"
+               help
+                 This is a comma seperated list of PHY types:
+                   A  => A-PHY
+                   AG => Dual A-PHY G-PHY
+                   G  => G-PHY
+                   LP => LP-PHY
+                   N  => N-PHY
+                   HT  => HT-PHY
+                   LCN  => LCN-PHY
+                   LCN40  => LCN40-PHY
+                   AC  => AC-PHY
+
+                 Example (keep files for G-PHY only):
+                   G
+
+                 Example (keep files for G-PHY and N-PHY):
+                   G,N
+
+       choice
+               prompt "Supported buses"
+               default PACKAGE_B43_BUSES_BCMA_AND_SSB
+               help
+                 This allows choosing buses that b43 should support.
+
+       config PACKAGE_B43_BUSES_BCMA_AND_SSB
+               depends on !TARGET_brcm47xx_legacy && !TARGET_brcm47xx_mips74k && !TARGET_bcm53xx
+               bool "BCMA and SSB"
+
+       config PACKAGE_B43_BUSES_BCMA
+               depends on !TARGET_brcm47xx_legacy
+               bool "BCMA only"
+
+       config PACKAGE_B43_BUSES_SSB
+               depends on !TARGET_brcm47xx_mips74k && !TARGET_bcm53xx
+               bool "SSB only"
+
+       endchoice
+
+       config PACKAGE_B43_DEBUG
+               bool "Enable debug output and debugfs for b43"
+               default n
+               help
+                 Enable additional debug output and runtime sanity checks for b43
+                 and enables the debugfs interface.
+
+                 If unsure, say N.
+
+       config PACKAGE_B43_PIO
+               bool "Enable support for PIO transfer mode"
+               default n
+               help
+                 Enable support for using PIO instead of DMA. Unless you have DMA
+                 transfer problems you don't need this.
+
+                 If unsure, say N.
+
+       config PACKAGE_B43_PHY_G
+               bool "Enable support for G-PHYs"
+               default n if TARGET_brcm47xx_mips74k
+               default y
+               help
+                 Enable support for G-PHY. This includes support for the following devices:
+                 PCI: BCM4306, BCM4311, BCM4318
+                 SoC: BCM5352E, BCM4712
+
+                 If unsure, say Y.
+
+       config PACKAGE_B43_PHY_N
+               bool "Enable support for N-PHYs"
+               default y
+               help
+                 Enable support for N-PHY. This includes support for the following devices:
+                 PCI: BCM4321, BCM4322, BCM43222, BCM43224, BCM43225
+                 SoC: BCM4716, BCM4717, BCM4718
+
+                 Currently only 11g speed is available.
+
+                 If unsure, say Y.
+
+       config PACKAGE_B43_PHY_LP
+               bool "Enable support for LP-PHYs"
+               default n if TARGET_brcm47xx_mips74k
+               default y
+               help
+                 Enable support for LP-PHY. This includes support for the following devices:
+                 PCI: BCM4312
+                 SoC: BCM5354
+
+                 If unsure, say Y.
+
+       config PACKAGE_B43_PHY_HT
+               bool "Enable support for HT-PHYs"
+               default n if TARGET_brcm47xx_legacy
+               default y
+               help
+                 Enable support for HT-PHY. This includes support for the following devices:
+                 PCI: BCM4331
+
+                 Currently only 11g speed is available.
+
+                 If unsure, say Y.
+
+       config PACKAGE_B43_PHY_LCN
+               bool "Enable support for LCN-PHYs"
+               depends on BROKEN
+               default n
+               help
+                 Currently broken.
+
+                 If unsure, say N.
+
+  endif
+endef
+
+define KernelPackage/b43/description
+Kernel module for Broadcom 43xx wireless support (mac80211 stack) new
+endef
+
+define KernelPackage/b43legacy
+  $(call KernelPackage/mac80211/Default)
+  TITLE:=Broadcom 43xx-legacy wireless support
+  URL:=https://wireless.wiki.kernel.org/en/users/drivers/b43
+  KCONFIG:= \
+       CONFIG_HW_RANDOM=y
+  DEPENDS+= +kmod-mac80211 +!(TARGET_brcm47xx||TARGET_brcm63xx):kmod-ssb +b43legacy-firmware
+  FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/broadcom/b43legacy/b43legacy.ko
+  AUTOLOAD:=$(call AutoProbe,b43legacy)
+  MENU:=1
+endef
+
+define KernelPackage/b43legacy/description
+Kernel module for Broadcom 43xx-legacy wireless support (mac80211 stack) new
+endef
+
+
+define KernelPackage/brcmutil
+  $(call KernelPackage/mac80211/Default)
+  TITLE:=Broadcom IEEE802.11n common driver parts
+  URL:=https://wireless.wiki.kernel.org/en/users/drivers/brcm80211
+  DEPENDS+=@PCI_SUPPORT||USB_SUPPORT
+  FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil.ko
+  AUTOLOAD:=$(call AutoProbe,brcmutil)
+  MENU:=1
+endef
+
+define KernelPackage/brcmutil/description
+ This module contains some common parts needed by Broadcom Wireless drivers brcmsmac and brcmfmac.
+endef
+
+define KernelPackage/brcmutil/config
+  if PACKAGE_kmod-brcmutil
+
+       config PACKAGE_BRCM80211_DEBUG
+               bool "Broadcom wireless driver debugging"
+               help
+                 Say Y, if you want to debug brcmsmac and brcmfmac wireless driver.
+
+  endif
+endef
+
+PKG_BRCMSMAC_FW_NAME:=broadcom-wl
+PKG_BRCMSMAC_FW_VERSION:=5.100.138
+PKG_BRCMSMAC_FW_OBJECT:=$(PKG_BRCMSMAC_FW_NAME)-$(PKG_BRCMSMAC_FW_VERSION)/linux/wl_apsta.o
+PKG_BRCMSMAC_FW_SOURCE:=$(PKG_BRCMSMAC_FW_NAME)-$(PKG_BRCMSMAC_FW_VERSION).tar.bz2
+PKG_BRCMSMAC_FW_SOURCE_URL:=http://www.lwfinger.com/b43-firmware/
+PKG_BRCMSMAC_FW_HASH:=f1e7067aac5b62b67b8b6e4c517990277804339ac16065eb13c731ff909ae46f
+
+define Download/brcmsmac
+  FILE:=$(PKG_BRCMSMAC_FW_SOURCE)
+  URL:=$(PKG_BRCMSMAC_FW_SOURCE_URL)
+  HASH:=$(PKG_BRCMSMAC_FW_HASH)
+endef
+$(eval $(call Download,brcmsmac))
+
+define KernelPackage/brcmsmac
+  $(call KernelPackage/mac80211/Default)
+  TITLE:=Broadcom IEEE802.11n PCIe SoftMAC WLAN driver
+  URL:=https://wireless.wiki.kernel.org/en/users/drivers/brcm80211
+  DEPENDS+= +kmod-mac80211 +@DRIVER_11N_SUPPORT +!TARGET_brcm47xx:kmod-bcma +kmod-lib-cordic +kmod-lib-crc8 +kmod-brcmutil +!BRCMSMAC_USE_FW_FROM_WL:brcmsmac-firmware
+  FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/broadcom/brcm80211/brcmsmac/brcmsmac.ko
+  AUTOLOAD:=$(call AutoProbe,brcmsmac)
+  MENU:=1
+endef
+
+define KernelPackage/brcmsmac/description
+ Kernel module for Broadcom IEEE802.11n PCIe Wireless cards
+endef
+
+define KernelPackage/brcmsmac/config
+  if PACKAGE_kmod-brcmsmac
+
+       config BRCMSMAC_USE_FW_FROM_WL
+               bool "Use firmware extracted from broadcom proprietary driver"
+               default y
+               help
+                 Instead of using the official brcmsmac firmware a firmware
+                 version 666.2 extracted from the proprietary Broadcom driver
+                 is used. This is needed to get core rev 17 used in bcm4716
+                 to work.
+
+                 If unsure, say Y.
+
+  endif
+endef
+
+
+define KernelPackage/brcmfmac
+  $(call KernelPackage/mac80211/Default)
+  TITLE:=Broadcom IEEE802.11n USB FullMAC WLAN driver
+  URL:=https://wireless.wiki.kernel.org/en/users/drivers/brcm80211
+  DEPENDS+= @USB_SUPPORT +kmod-cfg80211 +@DRIVER_11N_SUPPORT +@DRIVER_11AC_SUPPORT +kmod-brcmutil \
+       +BRCMFMAC_SDIO:kmod-mmc @!TARGET_uml \
+       +BRCMFMAC_USB:kmod-usb-core +BRCMFMAC_USB:brcmfmac-firmware-usb
+  FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
+  AUTOLOAD:=$(call AutoProbe,brcmfmac)
+endef
+
+define KernelPackage/brcmfmac/description
+ Kernel module for Broadcom IEEE802.11n USB Wireless cards
+endef
+
+define KernelPackage/brcmfmac/config
+  if PACKAGE_kmod-brcmfmac
+
+       config BRCMFMAC_SDIO
+               bool "Enable SDIO bus interface support"
+               default y if TARGET_brcm2708
+               default y if TARGET_sunxi
+               default n
+               help
+                 Enable support for cards attached to an SDIO bus.
+                 Select this option only if you are sure that your
+                 board has a Broadcom wireless chip atacched to
+                 that bus.
+
+       config BRCMFMAC_USB
+               bool "Enable USB bus interface support"
+               depends on USB_SUPPORT
+               default y
+               help
+                 Supported USB connected chipsets:
+                 BCM43235, BCM43236, BCM43238 (all in revision 3 only)
+                 BCM43143, BCM43242, BCM43566, BCM43569
+
+       config BRCMFMAC_PCIE
+               bool "Enable PCIE bus interface support"
+               depends on PCI_SUPPORT
+               default y
+               help
+                 Supported PCIe connected chipsets:
+                 BCM4354, BCM4356, BCM43567, BCM43570, BCM43602
+
+  endif
+endef
+
+define KernelPackage/brcmsmac/install
+       $(INSTALL_DIR) $(1)/lib/firmware/brcm
+ifeq ($(CONFIG_BRCMSMAC_USE_FW_FROM_WL),y)
+       tar xjf "$(DL_DIR)/$(PKG_BRCMSMAC_FW_SOURCE)" -C "$(PKG_BUILD_DIR)"
+       b43-fwcutter --brcmsmac -w $(1)/lib/firmware/ $(PKG_BUILD_DIR)/$(PKG_BRCMSMAC_FW_OBJECT)
+endif
+endef