Use LEDE as base for Gluon
This commit is contained in:
parent
04818c170b
commit
78b2775eec
5
.gitignore
vendored
5
.gitignore
vendored
@ -1,7 +1,6 @@
|
||||
*~
|
||||
/build
|
||||
/lede
|
||||
/output
|
||||
/site
|
||||
/openwrt
|
||||
/tmp
|
||||
/packages
|
||||
/modules.local
|
||||
|
10
LICENSE
10
LICENSE
@ -1,7 +1,7 @@
|
||||
The code of Project Gluon may be distributed under the following terms, unless
|
||||
noted otherwise in individual files or subtrees.
|
||||
|
||||
Copyright (c) 2013, Project Gluon
|
||||
Copyright (c) 2013-2017, Project Gluon
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
@ -25,10 +25,10 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
OpenWrt is licensed under the terms of the GNU General Public License Version 2,
|
||||
which can be found under openwrt/LICENSE after the openwrt submodule has been
|
||||
obtained. This applies to the following submodules:
|
||||
* openwrt
|
||||
LEDE and OpenWrt are licensed under the terms of the GNU General Public License
|
||||
Version 2, which can be found at lede/LICENSE after the lede repository has been
|
||||
obtained. This applies to the following repositories:
|
||||
* lede
|
||||
* packages/openwrt
|
||||
* packages/routing
|
||||
* packages/luci
|
||||
|
572
Makefile
572
Makefile
@ -4,503 +4,153 @@ LC_ALL:=C
|
||||
LANG:=C
|
||||
export LC_ALL LANG
|
||||
|
||||
export SHELL:=/usr/bin/env bash
|
||||
|
||||
GLUONPATH ?= $(PATH)
|
||||
export GLUONPATH := $(GLUONPATH)
|
||||
GLUON_SITEDIR ?= $(CURDIR)/site
|
||||
GLUON_TMPDIR ?= $(CURDIR)/tmp
|
||||
|
||||
empty:=
|
||||
space:= $(empty) $(empty)
|
||||
GLUON_OUTPUTDIR ?= $(CURDIR)/output
|
||||
GLUON_IMAGEDIR ?= $(GLUON_OUTPUTDIR)/images
|
||||
GLUON_PACKAGEDIR ?= $(GLUON_OUTPUTDIR)/packages
|
||||
|
||||
GLUONMAKE_EARLY = PATH=$(GLUONPATH) $(SUBMAKE) -C $(GLUON_ORIGOPENWRTDIR) -f $(GLUONDIR)/Makefile GLUON_TOOLS=0 QUILT=
|
||||
GLUONMAKE = PATH=$(GLUONPATH) $(SUBMAKE) -C $(GLUON_OPENWRTDIR) -f $(GLUONDIR)/Makefile
|
||||
export GLUON_TMPDIR GLUON_IMAGEDIR GLUON_PACKAGEDIR DEVICES
|
||||
|
||||
ifneq ($(OPENWRT_BUILD),1)
|
||||
|
||||
GLUONDIR:=${CURDIR}
|
||||
$(GLUON_SITEDIR)/site.mk:
|
||||
$(error No site configuration was found. Please check out a site configuration to $(GLUON_SITEDIR))
|
||||
|
||||
include $(GLUONDIR)/include/gluon.mk
|
||||
-include $(GLUON_SITEDIR)/site.mk
|
||||
|
||||
TOPDIR:=$(GLUON_ORIGOPENWRTDIR)
|
||||
export TOPDIR
|
||||
ifeq ($(GLUON_RELEASE),)
|
||||
$(error GLUON_RELEASE not set. GLUON_RELEASE can be set in site.mk or on the command line.)
|
||||
endif
|
||||
|
||||
GLUON_LANGS ?= en
|
||||
|
||||
export GLUON_RELEASE GLUON_ATH10K_MESH GLUON_REGION
|
||||
|
||||
|
||||
update: FORCE
|
||||
$(GLUONDIR)/scripts/update.sh
|
||||
$(GLUONDIR)/scripts/patch.sh
|
||||
@scripts/update.sh
|
||||
@scripts/patch.sh
|
||||
@scripts/feeds.sh
|
||||
|
||||
update-patches: FORCE
|
||||
$(GLUONDIR)/scripts/update.sh
|
||||
$(GLUONDIR)/scripts/update-patches.sh
|
||||
$(GLUONDIR)/scripts/patch.sh
|
||||
@scripts/update.sh
|
||||
@scripts/update-patches.sh
|
||||
@scripts/patch.sh
|
||||
|
||||
-include $(TOPDIR)/include/host.mk
|
||||
|
||||
_SINGLE=export MAKEFLAGS=$(space);
|
||||
|
||||
override OPENWRT_BUILD=1
|
||||
override GLUON_TOOLS=1
|
||||
GREP_OPTIONS=
|
||||
export OPENWRT_BUILD GLUON_TOOLS GREP_OPTIONS
|
||||
|
||||
-include $(TOPDIR)/include/debug.mk
|
||||
-include $(TOPDIR)/include/depends.mk
|
||||
include $(GLUONDIR)/include/toplevel.mk
|
||||
update-feeds: FORCE
|
||||
@scripts/feeds.sh
|
||||
|
||||
|
||||
include $(GLUONDIR)/targets/targets.mk
|
||||
GLUON_TARGETS :=
|
||||
|
||||
define GluonTarget
|
||||
gluon_target := $(1)$$(if $(2),-$(2))
|
||||
GLUON_TARGETS += $$(gluon_target)
|
||||
GLUON_TARGET_$$(gluon_target)_BOARD := $(1)
|
||||
GLUON_TARGET_$$(gluon_target)_SUBTARGET := $(if $(3),$(3),$(2))
|
||||
endef
|
||||
|
||||
include targets/targets.mk
|
||||
|
||||
|
||||
CheckTarget := [ -n '$(GLUON_TARGET)' -a -n '$(GLUON_TARGET_$(GLUON_TARGET)_BOARD)' ] \
|
||||
|| (echo -e 'Please set GLUON_TARGET to a valid target. Gluon supports the following targets:$(subst $(space),\n * ,$(GLUON_TARGETS))'; false)
|
||||
LEDEMAKE = $(MAKE) -C lede
|
||||
|
||||
BOARD := $(GLUON_TARGET_$(GLUON_TARGET)_BOARD)
|
||||
SUBTARGET := $(GLUON_TARGET_$(GLUON_TARGET)_SUBTARGET)
|
||||
LEDE_TARGET := $(BOARD)$(if $(SUBTARGET),-$(SUBTARGET))
|
||||
|
||||
export LEDE_TARGET
|
||||
|
||||
|
||||
CheckExternal := test -d $(GLUON_ORIGOPENWRTDIR) || (echo 'You don'"'"'t seem to have obtained the external repositories needed by Gluon; please call `make update` first!'; false)
|
||||
CheckTarget := [ '$(LEDE_TARGET)' ] \
|
||||
|| (echo 'Please set GLUON_TARGET to a valid target. Gluon supports the following targets:'; $(foreach target,$(GLUON_TARGETS),echo ' * $(target)';) false)
|
||||
|
||||
CheckExternal := test -d lede || (echo 'You don'"'"'t seem to have obtained the external repositories needed by Gluon; please call `make update` first!'; false)
|
||||
|
||||
|
||||
create-key: FORCE
|
||||
@$(CheckExternal)
|
||||
+@$(GLUONMAKE_EARLY) create-key
|
||||
GLUON_DEFAULT_PACKAGES := -odhcpd -ppp -ppp-mod-pppoe -wpad-mini gluon-core ip6tables hostapd-mini
|
||||
|
||||
prepare-target: FORCE
|
||||
GLUON_PACKAGES :=
|
||||
define merge_packages
|
||||
$(foreach pkg,$(1),
|
||||
GLUON_PACKAGES := $$(strip $$(filter-out -$$(patsubst -%,%,$(pkg)) $$(patsubst -%,%,$(pkg)),$$(GLUON_PACKAGES)) $(pkg))
|
||||
)
|
||||
endef
|
||||
$(eval $(call merge_packages,$(GLUON_DEFAULT_PACKAGES) $(GLUON_SITE_PACKAGES)))
|
||||
|
||||
GLUON_PACKAGES_YES := $(filter-out -%,$(GLUON_PACKAGES))
|
||||
GLUON_PACKAGES_NO := $(patsubst -%,%,$(filter -%,$(GLUON_PACKAGES)))
|
||||
|
||||
|
||||
config: FORCE
|
||||
@$(CheckExternal)
|
||||
@$(CheckTarget)
|
||||
+@$(GLUONMAKE_EARLY) prepare-target
|
||||
|
||||
@( \
|
||||
echo 'CONFIG_TARGET_$(BOARD)=y' \
|
||||
$(if $(SUBTARGET),&& echo 'CONFIG_TARGET_$(BOARD)_$(SUBTARGET)=y') \
|
||||
$(foreach pkg,$(GLUON_PACKAGES_NO),&& echo '# CONFIG_PACKAGE_$(pkg) is not set') \
|
||||
&& scripts/target_config.sh generic \
|
||||
&& GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/target_config.sh '$(GLUON_TARGET)' \
|
||||
$(foreach pkg,$(GLUON_PACKAGES_YES),&& echo 'CONFIG_PACKAGE_$(pkg)=y') \
|
||||
$(foreach lang,$(GLUON_LANGS),&& echo 'CONFIG_LUCI_LANG_$(lang)=y') \
|
||||
&& echo 'CONFIG_GLUON_RELEASE="$(GLUON_RELEASE)"' \
|
||||
&& echo 'CONFIG_GLUON_SITEDIR="$(GLUON_SITEDIR)"' \
|
||||
&& echo 'CONFIG_GLUON_BRANCH="$(GLUON_BRANCH)"' \
|
||||
) > lede/.config
|
||||
+@$(LEDEMAKE) defconfig
|
||||
|
||||
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/target_config_check.sh '$(GLUON_TARGET)' '$(GLUON_PACKAGES_YES)'
|
||||
|
||||
|
||||
LUA := lede/staging_dir/hostpkg/bin/lua
|
||||
|
||||
$(LUA):
|
||||
@$(CheckExternal)
|
||||
|
||||
+@[ -e lede/.config ] || $(LEDEMAKE) defconfig
|
||||
+@$(LEDEMAKE) tools/install
|
||||
+@$(LEDEMAKE) package/lua/host/install
|
||||
|
||||
prepare-target: config $(LUA) ;
|
||||
|
||||
all: prepare-target
|
||||
+@$(GLUONMAKE) build-key
|
||||
+@$(GLUONMAKE) prepare
|
||||
+@$(GLUONMAKE) images
|
||||
+@$(GLUONMAKE) modules
|
||||
@GLUON_SITEDIR='$(GLUON_SITEDIR)' $(LUA) scripts/site_config.lua \
|
||||
|| (echo 'Your site configuration did not pass validation.'; false)
|
||||
|
||||
prepare: prepare-target
|
||||
+@$(GLUONMAKE) build-key
|
||||
+@$(GLUONMAKE) $@
|
||||
@scripts/clean_output.sh
|
||||
+@$(LEDEMAKE)
|
||||
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/copy_output.sh '$(GLUON_TARGET)'
|
||||
|
||||
clean download images modules: FORCE
|
||||
@$(CheckExternal)
|
||||
@$(CheckTarget)
|
||||
+@$(GLUONMAKE_EARLY) maybe-prepare-target
|
||||
+@$(GLUONMAKE) build-key
|
||||
+@$(GLUONMAKE) $@
|
||||
clean download: config
|
||||
+@$(LEDEMAKE) $@
|
||||
|
||||
toolchain/% package/% target/% image/%: FORCE
|
||||
@$(CheckExternal)
|
||||
@$(CheckTarget)
|
||||
+@$(GLUONMAKE_EARLY) maybe-prepare-target
|
||||
+@$(GLUONMAKE) build-key
|
||||
+@$(GLUONMAKE) $@
|
||||
dirclean: FORCE
|
||||
+@[ -e lede/.config ] || $(LEDEMAKE) defconfig
|
||||
+@$(LEDEMAKE) dirclean
|
||||
@rm -rf $(GLUON_TMPDIR) $(GLUON_OUTPUTDIR)
|
||||
|
||||
manifest: FORCE
|
||||
@[ -n '$(GLUON_BRANCH)' ] || (echo 'Please set GLUON_BRANCH to create a manifest.'; false)
|
||||
manifest: $(LUA) FORCE
|
||||
@[ '$(GLUON_BRANCH)' ] || (echo 'Please set GLUON_BRANCH to create a manifest.'; false)
|
||||
@echo '$(GLUON_PRIORITY)' | grep -qE '^([0-9]*\.)?[0-9]+$$' || (echo 'Please specify a numeric value for GLUON_PRIORITY to create a manifest.'; false)
|
||||
@$(CheckExternal)
|
||||
|
||||
( \
|
||||
@( \
|
||||
echo 'BRANCH=$(GLUON_BRANCH)' && \
|
||||
echo 'DATE=$(shell $(GLUON_ORIGOPENWRTDIR)/staging_dir/host/bin/lua $(GLUONDIR)/scripts/rfc3339date.lua)' && \
|
||||
echo "DATE=$$($(LUA) scripts/rfc3339date.lua)" && \
|
||||
echo 'PRIORITY=$(GLUON_PRIORITY)' && \
|
||||
echo \
|
||||
) > $(GLUON_BUILDDIR)/$(GLUON_BRANCH).manifest.tmp
|
||||
|
||||
+($(foreach GLUON_TARGET,$(GLUON_TARGETS), \
|
||||
( [ ! -e $(BOARD_BUILDDIR)/prepared ] || ( $(GLUONMAKE) manifest GLUON_TARGET='$(GLUON_TARGET)' V=s$(OPENWRT_VERBOSE) ) ) && \
|
||||
) :)
|
||||
|
||||
mkdir -p $(GLUON_IMAGEDIR)/sysupgrade
|
||||
mv $(GLUON_BUILDDIR)/$(GLUON_BRANCH).manifest.tmp $(GLUON_IMAGEDIR)/sysupgrade/$(GLUON_BRANCH).manifest
|
||||
|
||||
dirclean : FORCE
|
||||
for dir in build_dir dl staging_dir tmp; do \
|
||||
rm -rf $(GLUON_ORIGOPENWRTDIR)/$$dir; \
|
||||
done
|
||||
rm -rf $(GLUON_BUILDDIR) $(GLUON_OUTPUTDIR)
|
||||
|
||||
else
|
||||
|
||||
TOPDIR=${CURDIR}
|
||||
export TOPDIR
|
||||
|
||||
include rules.mk
|
||||
|
||||
include $(GLUONDIR)/include/gluon.mk
|
||||
|
||||
include $(INCLUDE_DIR)/host.mk
|
||||
include $(INCLUDE_DIR)/depends.mk
|
||||
include $(INCLUDE_DIR)/subdir.mk
|
||||
|
||||
include package/Makefile
|
||||
include tools/Makefile
|
||||
include toolchain/Makefile
|
||||
include target/Makefile
|
||||
|
||||
|
||||
PROFILES :=
|
||||
PROFILE_PACKAGES :=
|
||||
|
||||
define Profile
|
||||
$(eval $(call Profile/Default))
|
||||
$(eval $(call Profile/$(1)))
|
||||
endef
|
||||
|
||||
define GluonProfile
|
||||
PROFILES += $(1)
|
||||
PROFILE_PACKAGES += $(filter-out -%,$(2) $(GLUON_$(1)_SITE_PACKAGES))
|
||||
GLUON_$(1)_PROFILE := $(if $(3),$(3),$(1))
|
||||
GLUON_$(1)_DEFAULT_PACKAGES := $(2)
|
||||
GLUON_$(1)_FACTORY_SUFFIX := -squashfs-factory
|
||||
GLUON_$(1)_SYSUPGRADE_SUFFIX := -squashfs-sysupgrade
|
||||
GLUON_$(1)_FACTORY_EXT := .bin
|
||||
GLUON_$(1)_SYSUPGRADE_EXT := .bin
|
||||
GLUON_$(1)_FACTORY_EXTRA :=
|
||||
GLUON_$(1)_SYSUPGRADE_EXTRA :=
|
||||
GLUON_$(1)_MODELS :=
|
||||
endef
|
||||
|
||||
define GluonProfileFactorySuffix
|
||||
GLUON_$(1)_FACTORY_SUFFIX := $(2)
|
||||
GLUON_$(1)_FACTORY_EXT := $(3)
|
||||
GLUON_$(1)_FACTORY_EXTRA := $(4)
|
||||
endef
|
||||
|
||||
define GluonProfileSysupgradeSuffix
|
||||
GLUON_$(1)_SYSUPGRADE_SUFFIX := $(2)
|
||||
GLUON_$(1)_SYSUPGRADE_EXT := $(3)
|
||||
GLUON_$(1)_SYSUPGRADE_EXTRA := $(4)
|
||||
endef
|
||||
|
||||
define GluonModel
|
||||
GLUON_$(1)_MODELS += $(3)
|
||||
GLUON_$(1)_MODEL_$(3) := $(2)
|
||||
GLUON_$(1)_MODEL_$(3)_ALIASES :=
|
||||
endef
|
||||
|
||||
define GluonModelAlias
|
||||
GLUON_$(1)_MODEL_$(2)_ALIASES += $(3)
|
||||
endef
|
||||
|
||||
|
||||
export SHA512SUM := $(GLUONDIR)/scripts/sha512sum.sh
|
||||
|
||||
|
||||
prereq: FORCE
|
||||
+$(NO_TRACE_MAKE) prereq
|
||||
|
||||
prepare-tmpinfo: FORCE
|
||||
@+$(MAKE) -r -s staging_dir/host/.prereq-build OPENWRT_BUILD= QUIET=0
|
||||
mkdir -p tmp/info
|
||||
$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f include/scan.mk SCAN_TARGET="packageinfo" SCAN_DIR="package" SCAN_NAME="package" SCAN_DEPS="$(TOPDIR)/include/package*.mk $(TOPDIR)/overlay/*/*.mk" SCAN_EXTRA=""
|
||||
$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f include/scan.mk SCAN_TARGET="targetinfo" SCAN_DIR="target/linux" SCAN_NAME="target" SCAN_DEPS="profiles/*.mk $(TOPDIR)/include/kernel*.mk $(TOPDIR)/include/target.mk" SCAN_DEPTH=2 SCAN_EXTRA="" SCAN_MAKEOPTS="TARGET_BUILD=1"
|
||||
for type in package target; do \
|
||||
f=tmp/.$${type}info; t=tmp/.config-$${type}.in; \
|
||||
[ "$$t" -nt "$$f" ] || ./scripts/metadata.pl $${type}_config "$$f" > "$$t" || { rm -f "$$t"; echo "Failed to build $$t"; false; break; }; \
|
||||
done
|
||||
[ tmp/.config-feeds.in -nt tmp/.packagefeeds ] || ./scripts/feeds feed_config > tmp/.config-feeds.in
|
||||
./scripts/metadata.pl package_mk tmp/.packageinfo > tmp/.packagedeps || { rm -f tmp/.packagedeps; false; }
|
||||
./scripts/metadata.pl package_feeds tmp/.packageinfo > tmp/.packagefeeds || { rm -f tmp/.packagefeeds; false; }
|
||||
touch $(TOPDIR)/tmp/.build
|
||||
|
||||
feeds: FORCE
|
||||
rm -rf $(TOPDIR)/package/feeds
|
||||
mkdir $(TOPDIR)/package/feeds
|
||||
[ ! -f $(GLUON_SITEDIR)/modules ] || . $(GLUON_SITEDIR)/modules && for feed in $$GLUON_SITE_FEEDS; do ln -s ../../../packages/$$feed $(TOPDIR)/package/feeds/$$feed; done
|
||||
ln -s ../../../package $(TOPDIR)/package/feeds/gluon
|
||||
. $(GLUONDIR)/modules && for feed in $$GLUON_FEEDS; do ln -s ../../../packages/$$feed $(TOPDIR)/package/feeds/module_$$feed; done
|
||||
+$(GLUONMAKE_EARLY) prepare-tmpinfo
|
||||
|
||||
gluon-tools: FORCE
|
||||
+$(GLUONMAKE_EARLY) tools/patch/install
|
||||
+$(GLUONMAKE_EARLY) tools/sed/install
|
||||
+$(GLUONMAKE_EARLY) tools/cmake/install
|
||||
+$(GLUONMAKE_EARLY) package/lua/host/install package/usign/host/install
|
||||
|
||||
|
||||
|
||||
early_prepared_stamp := $(GLUON_BUILDDIR)/prepared_$(shell \
|
||||
( \
|
||||
$(SHA512SUM) $(GLUONDIR)/modules; \
|
||||
[ ! -r $(GLUON_SITEDIR)/modules ] || $(SHA512SUM) $(GLUON_SITEDIR)/modules \
|
||||
) | $(SHA512SUM) )
|
||||
|
||||
prepare-early: FORCE
|
||||
for dir in build_dir dl staging_dir; do \
|
||||
mkdir -p $(GLUON_ORIGOPENWRTDIR)/$$dir; \
|
||||
done
|
||||
|
||||
+$(GLUONMAKE_EARLY) feeds
|
||||
+$(GLUONMAKE_EARLY) gluon-tools
|
||||
|
||||
mkdir -p $$(dirname $(early_prepared_stamp))
|
||||
touch $(early_prepared_stamp)
|
||||
|
||||
$(early_prepared_stamp):
|
||||
rm -f $(GLUON_BUILDDIR)/prepared_*
|
||||
+$(GLUONMAKE_EARLY) prepare-early
|
||||
|
||||
$(GLUON_OPKG_KEY): $(early_prepared_stamp) FORCE
|
||||
[ -s $(GLUON_OPKG_KEY) -a -s $(GLUON_OPKG_KEY).pub ] || \
|
||||
( mkdir -p $$(dirname $(GLUON_OPKG_KEY)) && $(STAGING_DIR_HOST)/bin/usign -G -s $(GLUON_OPKG_KEY) -p $(GLUON_OPKG_KEY).pub -c "Gluon opkg key" )
|
||||
|
||||
$(GLUON_OPKG_KEY).pub: $(GLUON_OPKG_KEY)
|
||||
|
||||
create-key: $(GLUON_OPKG_KEY).pub
|
||||
|
||||
include $(GLUONDIR)/targets/targets.mk
|
||||
|
||||
ifneq ($(GLUON_TARGET),)
|
||||
|
||||
include $(GLUONDIR)/targets/$(GLUON_TARGET)/profiles.mk
|
||||
|
||||
BOARD := $(GLUON_TARGET_$(GLUON_TARGET)_BOARD)
|
||||
override SUBTARGET := $(GLUON_TARGET_$(GLUON_TARGET)_SUBTARGET)
|
||||
|
||||
target_prepared_stamp := $(BOARD_BUILDDIR)/target-prepared
|
||||
gluon_prepared_stamp := $(BOARD_BUILDDIR)/prepared
|
||||
|
||||
PREPARED_RELEASE = $$(cat $(gluon_prepared_stamp))
|
||||
IMAGE_PREFIX = gluon-$(GLUON_SITE_CODE)-$(PREPARED_RELEASE)
|
||||
MODULE_PREFIX = gluon-$(GLUON_SITE_CODE)-$(PREPARED_RELEASE)
|
||||
|
||||
|
||||
include $(INCLUDE_DIR)/target.mk
|
||||
|
||||
build-key: FORCE
|
||||
rm -f $(BUILD_KEY) $(BUILD_KEY).pub
|
||||
cp $(GLUON_OPKG_KEY) $(BUILD_KEY)
|
||||
cp $(GLUON_OPKG_KEY).pub $(BUILD_KEY).pub
|
||||
|
||||
config: FORCE
|
||||
+$(NO_TRACE_MAKE) scripts/config/conf OPENWRT_BUILD= QUIET=0
|
||||
+$(GLUONMAKE) prepare-tmpinfo
|
||||
( \
|
||||
cat $(GLUONDIR)/include/config; \
|
||||
echo 'CONFIG_TARGET_$(GLUON_TARGET_$(GLUON_TARGET)_BOARD)=y'; \
|
||||
$(if $(GLUON_TARGET_$(GLUON_TARGET)_SUBTARGET), \
|
||||
echo 'CONFIG_TARGET_$(GLUON_TARGET_$(GLUON_TARGET)_BOARD)_$(GLUON_TARGET_$(GLUON_TARGET)_SUBTARGET)=y'; \
|
||||
) \
|
||||
cat $(GLUONDIR)/targets/$(GLUON_TARGET)/config 2>/dev/null; \
|
||||
echo 'CONFIG_BUILD_SUFFIX="gluon-$(GLUON_TARGET)"'; \
|
||||
echo '$(patsubst %,CONFIG_PACKAGE_%=m,$(sort $(filter-out -%,$(DEFAULT_PACKAGES) $(GLUON_DEFAULT_PACKAGES) $(GLUON_SITE_PACKAGES) $(PROFILE_PACKAGES))))' \
|
||||
| sed -e 's/ /\n/g'; \
|
||||
echo '$(patsubst %,CONFIG_LUCI_LANG_%=y,$(GLUON_LANGS))' \
|
||||
| sed -e 's/ /\n/g'; \
|
||||
) > $(BOARD_BUILDDIR)/config.tmp
|
||||
scripts/config/conf --defconfig=$(BOARD_BUILDDIR)/config.tmp Config.in
|
||||
+$(SUBMAKE) tools/install
|
||||
|
||||
prepare-target: $(GLUON_OPKG_KEY).pub
|
||||
rm $(GLUON_OPENWRTDIR)/tmp || true
|
||||
mkdir -p $(GLUON_OPENWRTDIR)/tmp
|
||||
|
||||
for link in build_dir config Config.in dl include Makefile package rules.mk scripts staging_dir target toolchain tools; do \
|
||||
ln -sf $(GLUON_ORIGOPENWRTDIR)/$$link $(GLUON_OPENWRTDIR); \
|
||||
done
|
||||
|
||||
+$(GLUONMAKE) config
|
||||
touch $(target_prepared_stamp)
|
||||
|
||||
$(target_prepared_stamp):
|
||||
+$(GLUONMAKE_EARLY) prepare-target
|
||||
|
||||
maybe-prepare-target: $(target_prepared_stamp)
|
||||
+$(GLUONMAKE_EARLY) $(GLUON_OPKG_KEY).pub
|
||||
|
||||
$(BUILD_DIR)/.prepared: Makefile
|
||||
@mkdir -p $$(dirname $@)
|
||||
@touch $@
|
||||
|
||||
$(toolchain/stamp-install): $(tools/stamp-install)
|
||||
$(package/stamp-compile): $(package/stamp-cleanup)
|
||||
|
||||
|
||||
clean: FORCE
|
||||
+$(SUBMAKE) clean
|
||||
rm -f $(gluon_prepared_stamp)
|
||||
|
||||
|
||||
download: FORCE
|
||||
+$(SUBMAKE) tools/download
|
||||
+$(SUBMAKE) toolchain/download
|
||||
+$(SUBMAKE) package/download
|
||||
+$(SUBMAKE) target/download
|
||||
|
||||
toolchain: $(toolchain/stamp-install) $(tools/stamp-install)
|
||||
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
kernel: FORCE
|
||||
+$(NO_TRACE_MAKE) -C $(TOPDIR)/target/linux/$(BOARD) $(LINUX_DIR)/.image TARGET_BUILD=1
|
||||
+$(NO_TRACE_MAKE) -C $(TOPDIR)/target/linux/$(BOARD) $(LINUX_DIR)/.modules TARGET_BUILD=1
|
||||
|
||||
packages: $(package/stamp-compile)
|
||||
$(_SINGLE)$(SUBMAKE) -r package/index
|
||||
|
||||
prepare-image: FORCE
|
||||
rm -rf $(BOARD_KDIR)
|
||||
mkdir -p $(BOARD_KDIR)
|
||||
-cp $(KERNEL_BUILD_DIR)/* $(BOARD_KDIR)/
|
||||
+$(SUBMAKE) -C $(TOPDIR)/target/linux/$(BOARD)/image image_prepare KDIR="$(BOARD_KDIR)"
|
||||
|
||||
prepare: FORCE
|
||||
@$(STAGING_DIR_HOST)/bin/lua $(GLUONDIR)/scripts/site_config.lua \
|
||||
|| (echo 'Your site configuration did not pass validation.'; false)
|
||||
|
||||
mkdir -p $(GLUON_IMAGEDIR) $(BOARD_BUILDDIR)
|
||||
echo 'src packages file:../openwrt/bin/$(BOARD)/packages' > $(BOARD_BUILDDIR)/opkg.conf
|
||||
|
||||
+$(GLUONMAKE) toolchain
|
||||
+$(GLUONMAKE) kernel
|
||||
+$(GLUONMAKE) packages
|
||||
+$(GLUONMAKE) prepare-image
|
||||
|
||||
echo "$(GLUON_RELEASE)" > $(gluon_prepared_stamp)
|
||||
|
||||
$(gluon_prepared_stamp):
|
||||
+$(GLUONMAKE) prepare
|
||||
|
||||
modules: FORCE $(gluon_prepared_stamp)
|
||||
-rm -f $(GLUON_MODULEDIR)/*/$(BOARD)/$(if $(SUBTARGET),$(SUBTARGET),generic)/*
|
||||
-rmdir -p $(GLUON_MODULEDIR)/*/$(BOARD)/$(if $(SUBTARGET),$(SUBTARGET),generic)
|
||||
mkdir -p $(GLUON_MODULEDIR)/$(MODULE_PREFIX)/$(BOARD)/$(if $(SUBTARGET),$(SUBTARGET),generic)
|
||||
cp $(PACKAGE_DIR)/kmod-*.ipk $(GLUON_MODULEDIR)/$(MODULE_PREFIX)/$(BOARD)/$(if $(SUBTARGET),$(SUBTARGET),generic)
|
||||
|
||||
$(_SINGLE)$(SUBMAKE) -r package/index PACKAGE_DIR=$(GLUON_MODULEDIR)/$(MODULE_PREFIX)/$(BOARD)/$(if $(SUBTARGET),$(SUBTARGET),generic)
|
||||
|
||||
|
||||
include $(INCLUDE_DIR)/package-ipkg.mk
|
||||
|
||||
# override variables from rules.mk
|
||||
PACKAGE_DIR = $(GLUON_OPENWRTDIR)/bin/$(BOARD)/packages
|
||||
|
||||
PROFILE_BUILDDIR = $(BOARD_BUILDDIR)/profiles/$(PROFILE)
|
||||
PROFILE_KDIR = $(PROFILE_BUILDDIR)/kernel
|
||||
BIN_DIR = $(PROFILE_BUILDDIR)/images
|
||||
|
||||
TARGET_DIR = $(PROFILE_BUILDDIR)/root
|
||||
|
||||
OPKG:= \
|
||||
TMPDIR="$(TMP_DIR)" \
|
||||
IPKG_INSTROOT="$(TARGET_DIR)" \
|
||||
IPKG_CONF_DIR="$(TMP_DIR)" \
|
||||
IPKG_OFFLINE_ROOT="$(TARGET_DIR)" \
|
||||
$(STAGING_DIR_HOST)/bin/opkg \
|
||||
-f $(BOARD_BUILDDIR)/opkg.conf \
|
||||
--cache $(TMP_DIR)/dl \
|
||||
--offline-root $(TARGET_DIR) \
|
||||
--force-postinstall \
|
||||
--add-dest root:/ \
|
||||
--add-arch all:100 \
|
||||
--add-arch $(ARCH_PACKAGES):200
|
||||
|
||||
EnableInitscript = ! grep -q '\#!/bin/sh /etc/rc.common' $(1) || bash ./etc/rc.common $(1) enable
|
||||
|
||||
|
||||
enable_initscripts: FORCE
|
||||
cd $(TARGET_DIR) && ( export IPKG_INSTROOT=$(TARGET_DIR); \
|
||||
$(foreach script,$(wildcard $(TARGET_DIR)/etc/init.d/*), \
|
||||
$(call EnableInitscript,$(script)); \
|
||||
echo && \
|
||||
$(foreach GLUON_TARGET,$(GLUON_TARGETS), \
|
||||
GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/generate_manifest.sh '$(GLUON_TARGET)' && \
|
||||
) : \
|
||||
)
|
||||
) > 'tmp/$(GLUON_BRANCH).manifest.tmp'
|
||||
|
||||
@mkdir -p '$(GLUON_IMAGEDIR)/sysupgrade'
|
||||
@mv 'tmp/$(GLUON_BRANCH).manifest.tmp' '$(GLUON_IMAGEDIR)/sysupgrade/$(GLUON_BRANCH).manifest'
|
||||
|
||||
# Generate package list
|
||||
$(eval $(call merge-lists,INSTALL_PACKAGES,DEFAULT_PACKAGES GLUON_DEFAULT_PACKAGES GLUON_SITE_PACKAGES GLUON_$(PROFILE)_DEFAULT_PACKAGES GLUON_$(PROFILE)_SITE_PACKAGES))
|
||||
FORCE: ;
|
||||
|
||||
package_install: FORCE
|
||||
$(OPKG) update
|
||||
$(OPKG) install $(PACKAGE_DIR)/base-files_*.ipk $(PACKAGE_DIR)/libc_*.ipk
|
||||
$(OPKG) install $(PACKAGE_DIR)/kernel_*.ipk
|
||||
|
||||
$(OPKG) install $(INSTALL_PACKAGES)
|
||||
+$(GLUONMAKE) enable_initscripts
|
||||
|
||||
rm -f $(TARGET_DIR)/usr/lib/opkg/lists/* $(TARGET_DIR)/tmp/opkg.lock
|
||||
rm -f $(TARGET_DIR)/usr/lib/opkg/info/*.postinst*
|
||||
|
||||
# Remove opkg database when opkg is not intalled
|
||||
if [ ! -x $(TARGET_DIR)/bin/opkg ]; then rm -rf $(TARGET_DIR)/usr/lib/opkg; fi
|
||||
|
||||
|
||||
include $(INCLUDE_DIR)/version.mk
|
||||
|
||||
opkg_config: FORCE
|
||||
for d in base packages luci routing telephony management; do \
|
||||
echo "src/gz %n_$$d %U/$$d"; \
|
||||
done > $(TARGET_DIR)/etc/opkg/distfeeds.conf
|
||||
$(VERSION_SED) $(TARGET_DIR)/etc/opkg/distfeeds.conf
|
||||
|
||||
|
||||
image: FORCE
|
||||
rm -rf $(TARGET_DIR) $(BIN_DIR) $(PROFILE_KDIR)
|
||||
mkdir -p $(TARGET_DIR) $(BIN_DIR) $(TARGET_DIR)/tmp $(GLUON_IMAGEDIR)/factory $(GLUON_IMAGEDIR)/sysupgrade
|
||||
cp -r $(BOARD_KDIR) $(PROFILE_KDIR)
|
||||
|
||||
+$(GLUONMAKE) package_install
|
||||
+$(GLUONMAKE) opkg_config
|
||||
|
||||
$(call Image/mkfs/prepare)
|
||||
$(_SINGLE)$(NO_TRACE_MAKE) -C $(TOPDIR)/target/linux/$(BOARD)/image install TARGET_BUILD=1 IMG_PREFIX=gluon \
|
||||
PROFILE="$(GLUON_$(PROFILE)_PROFILE)" KDIR="$(PROFILE_KDIR)" TARGET_DIR="$(TARGET_DIR)" BIN_DIR="$(BIN_DIR)" TMP_DIR="$(TMP_DIR)"
|
||||
|
||||
$(foreach model,$(GLUON_$(PROFILE)_MODELS), \
|
||||
$(if $(GLUON_$(PROFILE)_SYSUPGRADE_EXT), \
|
||||
rm -f $(GLUON_IMAGEDIR)/sysupgrade/gluon-*-$(model)-sysupgrade$(GLUON_$(PROFILE)_SYSUPGRADE_EXT) && \
|
||||
cp $(BIN_DIR)/gluon-$(GLUON_$(PROFILE)_MODEL_$(model))$(GLUON_$(PROFILE)_SYSUPGRADE_SUFFIX)$(GLUON_$(PROFILE)_SYSUPGRADE_EXT) $(GLUON_IMAGEDIR)/sysupgrade/$(IMAGE_PREFIX)-$(model)-sysupgrade$(GLUON_$(PROFILE)_SYSUPGRADE_EXT) && \
|
||||
) \
|
||||
$(if $(GLUON_$(PROFILE)_FACTORY_EXT), \
|
||||
rm -f $(GLUON_IMAGEDIR)/factory/gluon-*-$(model)$(GLUON_$(PROFILE)_FACTORY_EXT) && \
|
||||
cp $(BIN_DIR)/gluon-$(GLUON_$(PROFILE)_MODEL_$(model))$(GLUON_$(PROFILE)_FACTORY_SUFFIX)$(GLUON_$(PROFILE)_FACTORY_EXT) $(GLUON_IMAGEDIR)/factory/$(IMAGE_PREFIX)-$(model)$(GLUON_$(PROFILE)_FACTORY_EXT) && \
|
||||
) \
|
||||
\
|
||||
$(if $(GLUON_$(PROFILE)_SYSUPGRADE_EXTRA), \
|
||||
rm -f $(GLUON_IMAGEDIR)/sysupgrade/gluon-*-$(model)-sysupgrade$(GLUON_$(PROFILE)_SYSUPGRADE_EXTRA) && \
|
||||
cp $(BIN_DIR)/gluon$(GLUON_$(PROFILE)_SYSUPGRADE_EXTRA) $(GLUON_IMAGEDIR)/sysupgrade/$(IMAGE_PREFIX)-$(model)-sysupgrade$(GLUON_$(PROFILE)_SYSUPGRADE_EXTRA) && \
|
||||
) \
|
||||
$(if $(GLUON_$(PROFILE)_FACTORY_EXTRA), \
|
||||
rm -f $(GLUON_IMAGEDIR)/factory/gluon-*-$(model)$(GLUON_$(PROFILE)_FACTORY_EXTRA) && \
|
||||
cp $(BIN_DIR)/gluon$(GLUON_$(PROFILE)_FACTORY_EXTRA) $(GLUON_IMAGEDIR)/factory/$(IMAGE_PREFIX)-$(model)$(GLUON_$(PROFILE)_FACTORY_EXTRA) && \
|
||||
) \
|
||||
\
|
||||
$(foreach alias,$(GLUON_$(PROFILE)_MODEL_$(model)_ALIASES), \
|
||||
$(if $(GLUON_$(PROFILE)_SYSUPGRADE_EXT), \
|
||||
rm -f $(GLUON_IMAGEDIR)/sysupgrade/gluon-*-$(alias)-sysupgrade$(GLUON_$(PROFILE)_SYSUPGRADE_EXT) && \
|
||||
ln -s $(IMAGE_PREFIX)-$(model)-sysupgrade$(GLUON_$(PROFILE)_SYSUPGRADE_EXT) $(GLUON_IMAGEDIR)/sysupgrade/$(IMAGE_PREFIX)-$(alias)-sysupgrade$(GLUON_$(PROFILE)_SYSUPGRADE_EXT) && \
|
||||
) \
|
||||
$(if $(GLUON_$(PROFILE)_FACTORY_EXT), \
|
||||
rm -f $(GLUON_IMAGEDIR)/factory/gluon-*-$(alias)$(GLUON_$(PROFILE)_FACTORY_EXT) && \
|
||||
ln -s $(IMAGE_PREFIX)-$(model)$(GLUON_$(PROFILE)_FACTORY_EXT) $(GLUON_IMAGEDIR)/factory/$(IMAGE_PREFIX)-$(alias)$(GLUON_$(PROFILE)_FACTORY_EXT) && \
|
||||
) \
|
||||
) \
|
||||
) :
|
||||
|
||||
|
||||
image/%: $(gluon_prepared_stamp)
|
||||
+$(GLUONMAKE) image PROFILE="$(patsubst image/%,%,$@)" V=s$(OPENWRT_VERBOSE)
|
||||
|
||||
call_image/%: FORCE
|
||||
+$(GLUONMAKE) $(patsubst call_image/%,image/%,$@)
|
||||
|
||||
images: $(patsubst %,call_image/%,$(PROFILES)) ;
|
||||
|
||||
manifest: FORCE
|
||||
( \
|
||||
cd $(GLUON_IMAGEDIR)/sysupgrade; \
|
||||
$(foreach profile,$(PROFILES), \
|
||||
$(if $(GLUON_$(profile)_SYSUPGRADE_EXT), \
|
||||
$(foreach model,$(GLUON_$(profile)_MODELS), \
|
||||
file="$(IMAGE_PREFIX)-$(model)-sysupgrade$(GLUON_$(profile)_SYSUPGRADE_EXT)"; \
|
||||
[ -e "$$file" ] && echo '$(model)' "$(PREPARED_RELEASE)" "$$($(SHA512SUM) "$$file")" "$$file"; \
|
||||
\
|
||||
$(foreach alias,$(GLUON_$(profile)_MODEL_$(model)_ALIASES), \
|
||||
file="$(IMAGE_PREFIX)-$(alias)-sysupgrade$(GLUON_$(profile)_SYSUPGRADE_EXT)"; \
|
||||
[ -e "$$file" ] && echo '$(alias)' "$(PREPARED_RELEASE)" "$$($(SHA512SUM) "$$file")" "$$file"; \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
) : \
|
||||
) >> $(GLUON_BUILDDIR)/$(GLUON_BRANCH).manifest.tmp
|
||||
|
||||
.PHONY: all create-key prepare images modules clean gluon-tools manifest
|
||||
|
||||
endif
|
||||
endif
|
||||
.PHONY: FORCE
|
||||
.NOTPARALLEL:
|
||||
|
@ -11,57 +11,114 @@ is a requirement. At the moment, Gluon's scripts can't handle devices
|
||||
without WLAN adapters (although such environments may also be interesting,
|
||||
e.g. for automated testing in virtual machines).
|
||||
|
||||
|
||||
.. _hardware-adding-profiles:
|
||||
|
||||
Adding profiles
|
||||
---------------
|
||||
The vast majority of devices with ath9k WLAN uses the ar71xx target of OpenWrt.
|
||||
The vast majority of devices with ath9k WLAN uses the ar71xx target of LEDE.
|
||||
If the hardware you want to add support for is also ar71xx, adding a new profile
|
||||
is enough.
|
||||
|
||||
Profiles are defined in ``targets/<target>-<subtarget>/profiles.mk``. There are two macros
|
||||
used to define which images are generated: ``GluonProfile`` and ``GluonModel``. The following examples
|
||||
are taken from ``profiles.mk`` of the ``ar71xx-generic`` target::
|
||||
Profiles are defined in ``targets/*`` in a shell-based DSL (so common shell
|
||||
commands syntax like ``if`` can be used.
|
||||
|
||||
$(eval $(call GluonProfile,TLWR1043))
|
||||
$(eval $(call GluonModel,TLWR1043,tl-wr1043nd-v1-squashfs,tp-link-tl-wr1043n-nd-v1))
|
||||
$(eval $(call GluonModel,TLWR1043,tl-wr1043nd-v2-squashfs,tp-link-tl-wr1043n-nd-v2))
|
||||
The ``device`` command is used to define an image build for a device. It takes
|
||||
two or three parameters.
|
||||
|
||||
The ``GluonProfile`` macro takes at least one parameter, the profile name as it is
|
||||
defined in the Makefiles of OpenWrt (``openwrt/target/linux/<target>/<subtarget>/profiles/*``
|
||||
and ``openwrt/target/linux/<target>/image/Makefile``). If the target you are on doesn't define
|
||||
profiles (e.g. on x86), just add a single profile called ``Generic`` or similar.
|
||||
|
||||
It may optionally take a second parameter which defines additional packages to include for the profile
|
||||
(e.g. ath10k). The additional packages defined in ``openwrt/target/linux/<target>/<subtarget>/profiles/*``
|
||||
aren't used.
|
||||
|
||||
The ``GluonModel`` macro takes three parameters: The profile name, the suffix of the image file
|
||||
generated by OpenWrt (without the file extension), and the final image name of the Gluon image.
|
||||
The final image name must be the same that is returned by the following command.
|
||||
|
||||
::
|
||||
The first parameter defines the Gluon profile name, which is used to refer to the
|
||||
device and is part of the generated image name. The profile name must be same as
|
||||
the output of the following command (on the target device), so the autoupdater
|
||||
can work::
|
||||
|
||||
lua -e 'print(require("platform_info").get_image_name())'
|
||||
|
||||
The second parameter defines the name of the image files generated by LEDE. Usually,
|
||||
it is also the LEDE profile name; for devices that still use the old image build
|
||||
code, a third parameter with the LEDE profile name can be passed. The profile names
|
||||
can be found in the image Makefiles in ``lede/target/linux/<target>/image/Makefile``.
|
||||
|
||||
This is just so the autoupdater can work. The command has to be executed _on_ the target (eg. the hardware router with a flashed image). So you'll first have to build an image with a guessed name, and afterwards build a new, correctly named image. On targets which aren't supported by the autoupdater,
|
||||
``require("platform_info").get_image_name()`` will just return ``nil`` and the final image name
|
||||
may be defined arbitrarily.
|
||||
Examples::
|
||||
|
||||
device tp-link-tl-wr1043n-nd-v1 tl-wr1043nd-v1
|
||||
device alfa-network-hornet-ub hornet-ub HORNETUB
|
||||
|
||||
Suffixes and extensions
|
||||
'''''''''''''''''''''''
|
||||
|
||||
By default, image files are expected to have the extension ``.bin``. In addition,
|
||||
the images generated by LEDE have a suffix before the extension that defaults to
|
||||
``-squashfs-factory`` and ``-squashfs-sysupgrade``.
|
||||
|
||||
This can be changed using the ``factory`` and ``sysupgrade`` commands, either at
|
||||
the top of the file to set the defaults for all images, or for a single image. There
|
||||
are three forms with 0 to 2 arguments (all work with ``sysupgrade`` as well)::
|
||||
|
||||
factory SUFFIX .EXT
|
||||
factory .EXT
|
||||
factory
|
||||
|
||||
When only an extension is given, the default suffix is retained. When no arguments
|
||||
are given, this signals that no factory (or sysupgrade) image exists.
|
||||
|
||||
Aliases
|
||||
'''''''
|
||||
|
||||
Sometimes multiple models use the same LEDE images. In this case, the ``alias``
|
||||
command can be used to create symlinks and additional entries in the autoupdater
|
||||
manifest for the alternative models.
|
||||
|
||||
Standalone images
|
||||
'''''''''''''''''
|
||||
|
||||
On targets without *per-device rootfs* support in LEDE, the commands described above
|
||||
can't be used. Instead, ``factory_image`` and ``sysupgrade_image`` are used::
|
||||
|
||||
factory_image PROFILE IMAGE .EXT
|
||||
sysupgrade_image PROFILE IMAGE .EXT
|
||||
|
||||
Again, the profile name must match the value printed by the aforementioned Lua
|
||||
command. The image name must match the part between the target name and the extension
|
||||
as generated by LEDE and is to be omitted when no such part exists.
|
||||
|
||||
Packages
|
||||
''''''''
|
||||
|
||||
The ``packages`` command takes an arbitrary number of arguments. Each argument
|
||||
defines an additional package to include in the images in addition to the default
|
||||
package sets defined by LEDE. When a package name is prefixed by a minus sign, the
|
||||
packages are excluded instead.
|
||||
|
||||
The ``packages`` command may be used at the top of a target definition to modify
|
||||
the default package list for all images, or just for a single device (when the
|
||||
target supports *per-default rootfs*).
|
||||
|
||||
|
||||
Configuration
|
||||
'''''''''''''
|
||||
|
||||
The ``config`` command allows to add arbitary target-specific LEDE configuration
|
||||
to be emitted to ``.config``.
|
||||
|
||||
Notes
|
||||
'''''
|
||||
|
||||
On devices with multiple WLAN adapters, care must also be taken that the primary MAC address is
|
||||
configured correctly. ``/lib/gluon/core/sysconfig/primary_mac`` should contain the MAC address which
|
||||
can be found on a label on most hardware; if it does not, ``/lib/gluon/upgrade/010-primary-mac``
|
||||
in ``gluon-core`` might need a fix. (There have also been cases in which the address was incorrect
|
||||
even on devices with only one WLAN adapter, in these cases an OpenWrt bug was the cause).
|
||||
even on devices with only one WLAN adapter, in these cases a LEDE bug was the cause).
|
||||
|
||||
|
||||
Adding support for new hardware targets
|
||||
---------------------------------------
|
||||
|
||||
Adding a new target is much more complex than adding a new profile. There are two basic steps
|
||||
required for adding a new target:
|
||||
|
||||
Adjust packages
|
||||
'''''''''''''''
|
||||
Package adjustments
|
||||
'''''''''''''''''''
|
||||
|
||||
One package that definitely needs adjustments for every new target added is ``libplatforminfo`` (to be found in
|
||||
`packages/gluon/libs/libplatforminfo <https://github.com/freifunk-gluon/packages/tree/master/libs/libplatforminfo>`_).
|
||||
Start with a copy of an existing platform info source file and adjust it for the new target (or just add a symlink if
|
||||
@ -71,15 +128,14 @@ On many targets, Gluon's network setup scripts (mainly in the packages ``gluon-c
|
||||
won't run correctly without some adjustments, so better double check that everything is fine there (and the files
|
||||
``primary_mac``, ``lan_ifname`` and ``wan_ifname`` in ``/lib/gluon/core/sysconfig/`` contain sensible values).
|
||||
|
||||
Add support to the build system
|
||||
'''''''''''''''''''''''''''''''
|
||||
A directory for the new target must be created under ``targets``, and it must be added
|
||||
to ``targets/targets.mk``. In the new target directory, the following files must be created:
|
||||
Build system support
|
||||
''''''''''''''''''''
|
||||
|
||||
* profiles.mk
|
||||
* config (optional)
|
||||
|
||||
For ``profiles.mk``, see :ref:`hardware-adding-profiles`.
|
||||
The file ``config`` can be used to add additional, target-specific options to the OpenWrt config.
|
||||
A definition for the new target must be created under ``targets``, and it must be added
|
||||
to ``targets/targets.mk``. The ``GluonTarget`` macro takes one to three arguments:
|
||||
the target name, the Gluon subtarget name (if the target has subtargets), and the
|
||||
LEDE subtarget name (if it differs from the Gluon subtarget). The third argument
|
||||
can be used to define multiple Gluon targets with different configuration for the
|
||||
same LEDE target, like it is done for the ``ar71xx-tiny`` target.
|
||||
|
||||
After this, is should be sufficient to call ``make GLUON_TARGET=<target>`` to build the images for the new target.
|
||||
|
@ -1,11 +1,9 @@
|
||||
## gluon site.mk makefile example
|
||||
|
||||
## GLUON_SITE_PACKAGES
|
||||
# specify gluon/openwrt packages to include here
|
||||
# The gluon-mesh-batman-adv-* package must come first because of the dependency resolution
|
||||
# specify Gluon/LEDE packages to include here
|
||||
|
||||
GLUON_SITE_PACKAGES := \
|
||||
gluon-mesh-batman-adv-15 \
|
||||
gluon-alfred \
|
||||
gluon-respondd \
|
||||
gluon-autoupdater \
|
||||
@ -21,6 +19,7 @@ GLUON_SITE_PACKAGES := \
|
||||
gluon-luci-autoupdater \
|
||||
gluon-luci-portconfig \
|
||||
gluon-luci-wifi-config \
|
||||
gluon-mesh-batman-adv-15 \
|
||||
gluon-mesh-vpn-fastd \
|
||||
gluon-radvd \
|
||||
gluon-setup-mode \
|
||||
|
@ -85,7 +85,6 @@ Next go back to the top-level Gluon directory and build Gluon::
|
||||
make update # Get other repositories used by Gluon
|
||||
make GLUON_TARGET=ar71xx-generic # Build Gluon
|
||||
|
||||
When calling make, the OpenWrt build environment is prepared/updated.
|
||||
In case of errors read the messages carefully and try to fix the stated issues (e.g. install tools not available yet).
|
||||
|
||||
``ar71xx-generic`` is the most common target and will generate images for most of the supported hardware.
|
||||
@ -95,7 +94,7 @@ You should reserve about 10GB of disk space for each `GLUON_TARGET`.
|
||||
|
||||
The built images can be found in the directory `output/images`. Of these, the `factory`
|
||||
images are to be used when flashing from the original firmware a device came with,
|
||||
and `sysupgrade` is to upgrade from other versions of Gluon or any other OpenWrt-based
|
||||
and `sysupgrade` is to upgrade from other versions of Gluon or any other OpenWrt/LEDE-based
|
||||
system.
|
||||
|
||||
**Note:** The images for some models are identical; to save disk space, symlinks are generated instead
|
||||
@ -111,39 +110,25 @@ There are two levels of `make clean`::
|
||||
|
||||
make clean GLUON_TARGET=ar71xx-generic
|
||||
|
||||
will ensure all packages are rebuilt for a single target; this is what you normally want to do after an update.
|
||||
will ensure all packages are rebuilt for a single target. This normally not
|
||||
necessary, but may fix certain kinds of build failures.
|
||||
|
||||
::
|
||||
|
||||
make dirclean
|
||||
|
||||
will clean the entire tree, so the toolchain will be rebuilt as well, which is
|
||||
not necessary in most cases, and will take a while.
|
||||
|
||||
So in summary, to update and rebuild a Gluon build tree, the following commands should be used (repeat the
|
||||
``make clean`` and ``make`` for all targets you want to build):
|
||||
|
||||
::
|
||||
|
||||
git pull
|
||||
(cd site && git pull)
|
||||
make update
|
||||
make clean GLUON_TARGET=ar71xx-generic
|
||||
make GLUON_TARGET=ar71xx-generic
|
||||
|
||||
will clean the entire tree, so the toolchain will be rebuilt as well, which will take a while.
|
||||
|
||||
opkg repositories
|
||||
-----------------
|
||||
|
||||
Gluon is mostly compatible with OpenWrt, so the normal OpenWrt package repositories
|
||||
can be used for Gluon as well. It is advisable to setup a mirror or reverse proxy
|
||||
reachable over IPv6 and add it to ``site.conf`` as http://downloads.openwrt.org/ does
|
||||
not support IPv6.
|
||||
Gluon is mostly compatible with LEDE, so the normal LEDE package repositories
|
||||
can be used for Gluon as well.
|
||||
|
||||
This is not true for kernel modules; the Gluon kernel is incompatible with the
|
||||
kernel of the default OpenWrt images. Therefore, Gluon will not only generate images,
|
||||
but also an opkg repository containing all kernel modules provided by OpenWrt/Gluon
|
||||
for the kernel of the generated images.
|
||||
kernel of the default LEDE images. Therefore, Gluon will not only generate images,
|
||||
but also an opkg repository containing all core packages provided by LEDE,
|
||||
including modules for the kernel of the generated images.
|
||||
|
||||
Signing keys
|
||||
............
|
||||
@ -151,18 +136,14 @@ Signing keys
|
||||
Gluon does not support HTTPS for downloading packages; fortunately, opkg deploys
|
||||
public-key cryptography to ensure package integrity.
|
||||
|
||||
The Gluon images will contain two public keys: the official OpenWrt signing key
|
||||
The Gluon images will contain public keys from two sources: the official LEDE keyring
|
||||
(to allow installing userspace packages) and a Gluon-specific key (which is used
|
||||
to sign the generated module repository).
|
||||
to sign the generated package repository).
|
||||
|
||||
By default, Gluon will handle the generation and handling of the keys itself.
|
||||
LEDE will handle the generation and handling of the keys itself.
|
||||
When making firmware releases based on Gluon, it might make sense to store
|
||||
the keypair, so updating the module repository later is possible.
|
||||
|
||||
The location the keys are stored at and read from can be changed
|
||||
(see :ref:`getting-started-make-variables`). To only generate the keypair
|
||||
at the configured location without doing a full build, use ``make create-key``.
|
||||
|
||||
.. _getting-started-make-variables:
|
||||
|
||||
Make variables
|
||||
@ -217,13 +198,8 @@ GLUON_BUILDDIR
|
||||
GLUON_IMAGEDIR
|
||||
Path where images will be stored. Defaults to ``$(GLUON_OUTPUTDIR)/images``.
|
||||
|
||||
GLUON_MODULEDIR
|
||||
Path where the kernel module opkg repository will be stored. Defaults to ``$(GLUON_OUTPUTDIR)/modules``.
|
||||
|
||||
GLUON_OPKG_KEY
|
||||
Path key file used to sign the module opkg repository. Defaults to ``$(GLUON_BULDDIR)/gluon-opkg-key``.
|
||||
|
||||
The private key will be stored as ``$(GLUON_OPKG_KEY)``, the public key as ``$(GLUON_OPKG_KEY).pub``.
|
||||
GLUON_PACKAGEDIR
|
||||
Path where the opkg package repository will be stored. Defaults to ``$(GLUON_OUTPUTDIR)/packages``.
|
||||
|
||||
GLUON_OUTPUTDIR
|
||||
Path where output files will be stored. Defaults to ``output``.
|
||||
|
@ -56,23 +56,27 @@ opkg \: optional
|
||||
|
||||
There are two optional fields in the ``opkg`` section:
|
||||
|
||||
- ``openwrt`` overrides the default OpenWrt repository URL
|
||||
- ``lede`` overrides the default LEDE repository URL. The default URL would
|
||||
correspond to ``http://downloads.lede-project.org/snapshots/packages/%A``
|
||||
and usually doesn't need to be changed when nodes are expected to have IPv6
|
||||
internet connectivity.
|
||||
- ``extra`` specifies a table of additional repositories (with arbitrary keys)
|
||||
|
||||
::
|
||||
|
||||
opkg = {
|
||||
openwrt = 'http://opkg.services.ffac/openwrt/%n/%v/%S/packages',
|
||||
lede = 'http://opkg.services.ffac/lede/snapshots/packages/%A',
|
||||
extra = {
|
||||
modules = 'http://opkg.services.ffac/modules/gluon-%GS-%GR/%S',
|
||||
gluon = 'http://opkg.services.ffac/modules/gluon-%GS-%GR/%S',
|
||||
},
|
||||
}
|
||||
|
||||
There are various patterns which can be used in the URLs:
|
||||
|
||||
- ``%n`` is replaced by the OpenWrt version codename (e.g. "chaos_calmer")
|
||||
- ``%v`` is replaced by the OpenWrt version number (e.g. "15.05")
|
||||
- ``%S`` is replaced by the target architecture (e.g. "ar71xx/generic")
|
||||
- ``%n`` is replaced by the LEDE version codename
|
||||
- ``%v`` is replaced by the LEDE version number (e.g. "17.01")
|
||||
- ``%S`` is replaced by the target board (e.g. "ar71xx/generic")
|
||||
- ``%A`` is replaced by the target architecture (e.g. "mips_24kc")
|
||||
- ``%GS`` is replaced by the Gluon site code (as specified in ``site.conf``)
|
||||
- ``%GV`` is replaced by the Gluon version
|
||||
- ``%GR`` is replaced by the Gluon release (as specified in ``site.mk``)
|
||||
|
@ -1,22 +0,0 @@
|
||||
CONFIG_IMAGEOPT=y
|
||||
# CONFIG_PER_FEED_REPO is not set
|
||||
# CONFIG_TARGET_ROOTFS_INITRAMFS is not set
|
||||
CONFIG_DEVEL=y
|
||||
CONFIG_ALL_KMODS=y
|
||||
|
||||
CONFIG_BUSYBOX_CUSTOM=y
|
||||
CONFIG_BUSYBOX_CONFIG_SHA512SUM=y
|
||||
# CONFIG_BUSYBOX_CONFIG_FEATURE_PREFER_IPV4_ADDRESS is not set
|
||||
CONFIG_BUSYBOX_CONFIG_IP=y
|
||||
CONFIG_BUSYBOX_CONFIG_FEATURE_IP_ADDRESS=y
|
||||
CONFIG_BUSYBOX_CONFIG_FEATURE_IP_LINK=y
|
||||
CONFIG_BUSYBOX_CONFIG_FEATURE_IP_ROUTE=y
|
||||
CONFIG_BUSYBOX_CONFIG_FEATURE_IP_TUNNEL=y
|
||||
CONFIG_BUSYBOX_CONFIG_FEATURE_IP_RULE=y
|
||||
CONFIG_BUSYBOX_CONFIG_FEATURE_IP_SHORT_FORMS=y
|
||||
CONFIG_BUSYBOX_CONFIG_FEATURE_WGET_TIMEOUT=y
|
||||
|
||||
CONFIG_ATH_USER_REGD=y
|
||||
CONFIG_PACKAGE_ATH_DEBUG=y
|
||||
|
||||
CONFIG_LUCI_SRCDIET=y
|
@ -1,85 +0,0 @@
|
||||
ifneq ($(__gluon_inc),1)
|
||||
__gluon_inc=1
|
||||
|
||||
GLUON_SITEDIR ?= $(GLUONDIR)/site
|
||||
GLUON_BUILDDIR ?= $(GLUONDIR)/build
|
||||
|
||||
GLUON_ORIGOPENWRTDIR := $(GLUONDIR)/openwrt
|
||||
GLUON_SITE_CONFIG := $(GLUON_SITEDIR)/site.conf
|
||||
|
||||
GLUON_OUTPUTDIR ?= $(GLUONDIR)/output
|
||||
GLUON_IMAGEDIR ?= $(GLUON_OUTPUTDIR)/images
|
||||
GLUON_MODULEDIR ?= $(GLUON_OUTPUTDIR)/modules
|
||||
|
||||
GLUON_OPKG_KEY ?= $(GLUON_BUILDDIR)/gluon-opkg-key
|
||||
|
||||
export GLUONDIR GLUON_SITEDIR GLUON_BUILDDIR GLUON_SITE_CONFIG GLUON_OUTPUTDIR GLUON_IMAGEDIR GLUON_MODULEDIR
|
||||
|
||||
|
||||
BOARD_BUILDDIR = $(GLUON_BUILDDIR)/$(GLUON_TARGET)
|
||||
BOARD_KDIR = $(BOARD_BUILDDIR)/kernel
|
||||
|
||||
export BOARD_BUILDDIR
|
||||
|
||||
|
||||
LINUX_RELEASE := 2
|
||||
export LINUX_RELEASE
|
||||
|
||||
|
||||
GLUON_OPENWRTDIR = $(BOARD_BUILDDIR)/openwrt
|
||||
|
||||
|
||||
$(GLUON_SITEDIR)/site.mk:
|
||||
$(error There was no site configuration found. Please check out a site configuration to $(GLUON_SITEDIR))
|
||||
|
||||
-include $(GLUON_SITEDIR)/site.mk
|
||||
|
||||
|
||||
GLUON_VERSION := $(shell cd $(GLUONDIR) && git describe --always --dirty=+ 2>/dev/null || echo unknown)
|
||||
export GLUON_VERSION
|
||||
|
||||
GLUON_SITE_VERSION := $(shell cd $(GLUON_SITEDIR) && git --git-dir=.git describe --always --dirty=+ 2>/dev/null || echo unknown)
|
||||
export GLUON_SITE_VERSION
|
||||
|
||||
GLUON_LANGS ?= en
|
||||
export GLUON_LANGS
|
||||
|
||||
|
||||
ifeq ($(OPENWRT_BUILD),1)
|
||||
ifeq ($(GLUON_TOOLS),1)
|
||||
|
||||
GLUON_OPENWRT_FEEDS := base packages luci routing telephony management
|
||||
export GLUON_OPENWRT_FEEDS
|
||||
|
||||
GLUON_SITE_CODE := $(shell $(GLUONDIR)/scripts/site.sh site_code)
|
||||
export GLUON_SITE_CODE
|
||||
|
||||
ifeq ($(GLUON_RELEASE),)
|
||||
$(error GLUON_RELEASE not set. GLUON_RELEASE can be set in site.mk or on the command line.)
|
||||
endif
|
||||
export GLUON_RELEASE
|
||||
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
define merge-lists
|
||||
$(1) :=
|
||||
$(foreach var,$(2),$(1) := $$(filter-out -% $$(patsubst -%,%,$$(filter -%,$$($(var)))),$$($(1)) $$($(var)))
|
||||
)
|
||||
endef
|
||||
|
||||
GLUON_TARGETS :=
|
||||
|
||||
define GluonTarget
|
||||
gluon_target := $(1)$$(if $(2),-$(2))
|
||||
GLUON_TARGETS += $$(gluon_target)
|
||||
GLUON_TARGET_$$(gluon_target)_BOARD := $(1)
|
||||
GLUON_TARGET_$$(gluon_target)_SUBTARGET := $(2)
|
||||
endef
|
||||
|
||||
GLUON_DEFAULT_PACKAGES := gluon-core firewall ip6tables -uboot-envtools -wpad-mini hostapd-mini
|
||||
|
||||
override DEFAULT_PACKAGES.router :=
|
||||
|
||||
endif #__gluon_inc
|
@ -1,62 +0,0 @@
|
||||
# Makefile for OpenWrt
|
||||
#
|
||||
# Copyright (C) 2007-2012 OpenWrt.org
|
||||
# Copyright (C) 2013-2014 Project Gluon
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
RELEASE:=Chaos Calmer
|
||||
PREP_MK= OPENWRT_BUILD= QUIET=0
|
||||
|
||||
export IS_TTY=$(shell tty -s && echo 1 || echo 0)
|
||||
|
||||
include $(GLUONDIR)/include/verbose.mk
|
||||
|
||||
REVISION:=$(shell [ -d $(TOPDIR) ] && cd $(TOPDIR) && ./scripts/getver.sh 2>/dev/null)
|
||||
|
||||
HOSTCC ?= gcc
|
||||
OPENWRTVERSION:=$(RELEASE)$(if $(REVISION), ($(REVISION)))
|
||||
export RELEASE
|
||||
export REVISION
|
||||
export OPENWRTVERSION
|
||||
export IS_TTY=$(shell tty -s && echo 1 || echo 0)
|
||||
export LD_LIBRARY_PATH:=$(subst ::,:,$(if $(LD_LIBRARY_PATH),$(LD_LIBRARY_PATH):)$(STAGING_DIR_HOST)/lib)
|
||||
export DYLD_LIBRARY_PATH:=$(subst ::,:,$(if $(DYLD_LIBRARY_PATH),$(DYLD_LIBRARY_PATH):)$(STAGING_DIR_HOST)/lib)
|
||||
export GIT_CONFIG_PARAMETERS='core.autocrlf=false'
|
||||
export MAKE_JOBSERVER=$(filter --jobserver%,$(MAKEFLAGS))
|
||||
|
||||
# prevent perforce from messing with the patch utility
|
||||
unexport P4PORT P4USER P4CONFIG P4CLIENT
|
||||
|
||||
# prevent user defaults for quilt from interfering
|
||||
unexport QUILT_PATCHES QUILT_PATCH_OPTS
|
||||
|
||||
unexport C_INCLUDE_PATH CROSS_COMPILE ARCH
|
||||
|
||||
# prevent distro default LPATH from interfering
|
||||
unexport LPATH
|
||||
|
||||
# make sure that a predefined CFLAGS variable does not disturb packages
|
||||
export CFLAGS=
|
||||
|
||||
ifneq ($(shell $(HOSTCC) 2>&1 | grep clang),)
|
||||
export HOSTCC_REAL?=$(HOSTCC)
|
||||
export HOSTCC_WRAPPER:=$(TOPDIR)/scripts/clang-gcc-wrapper
|
||||
else
|
||||
export HOSTCC_WRAPPER:=$(HOSTCC)
|
||||
endif
|
||||
|
||||
SCAN_COOKIE?=$(shell echo $$$$)
|
||||
export SCAN_COOKIE
|
||||
|
||||
SUBMAKE:=umask 022; $(SUBMAKE)
|
||||
|
||||
ULIMIT_FIX=_limit=`ulimit -n`; [ "$$_limit" = "unlimited" -o "$$_limit" -ge 1024 ] || ulimit -n 1024;
|
||||
|
||||
FORCE: ;
|
||||
|
||||
.PHONY: FORCE
|
||||
.NOTPARALLEL:
|
||||
|
@ -1,67 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2006 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
ifndef OPENWRT_VERBOSE
|
||||
OPENWRT_VERBOSE:=
|
||||
endif
|
||||
ifeq ("$(origin V)", "command line")
|
||||
OPENWRT_VERBOSE:=$(V)
|
||||
endif
|
||||
|
||||
ifeq ($(OPENWRT_VERBOSE),1)
|
||||
OPENWRT_VERBOSE:=w
|
||||
endif
|
||||
ifeq ($(OPENWRT_VERBOSE),99)
|
||||
OPENWRT_VERBOSE:=s
|
||||
endif
|
||||
|
||||
ifeq ($(NO_TRACE_MAKE),)
|
||||
NO_TRACE_MAKE := $(MAKE) V=s$(OPENWRT_VERBOSE)
|
||||
export NO_TRACE_MAKE
|
||||
endif
|
||||
|
||||
ifeq ($(IS_TTY),1)
|
||||
ifneq ($(strip $(NO_COLOR)),1)
|
||||
_Y:=\\033[33m
|
||||
_R:=\\033[31m
|
||||
_N:=\\033[m
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(findstring s,$(OPENWRT_VERBOSE)),)
|
||||
define MESSAGE
|
||||
printf "$(_Y)%s$(_N)\n" "$(1)" >&8
|
||||
endef
|
||||
|
||||
define ERROR_MESSAGE
|
||||
printf "$(_R)%s$(_N)\n" "$(1)" >&8
|
||||
endef
|
||||
|
||||
ifeq ($(QUIET),1)
|
||||
ifneq ($(CURDIR),$(TOPDIR))
|
||||
_DIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR})
|
||||
else
|
||||
_DIR:=
|
||||
endif
|
||||
_NULL:=$(if $(MAKECMDGOALS),$(shell \
|
||||
$(call MESSAGE, make[$(MAKELEVEL)]$(if $(_DIR), -C $(_DIR)) $(MAKECMDGOALS)); \
|
||||
))
|
||||
SUBMAKE=$(MAKE)
|
||||
else
|
||||
SILENT:=>/dev/null $(if $(findstring w,$(OPENWRT_VERBOSE)),,2>&1)
|
||||
export QUIET:=1
|
||||
SUBMAKE=cmd() { $(SILENT) $(MAKE) -s $$* < /dev/null || { echo "make $$*: build failed. Please re-run make with V=s to see what's going on"; false; } } 8>&1 9>&2; cmd
|
||||
endif
|
||||
|
||||
.SILENT: $(MAKECMDGOALS)
|
||||
else
|
||||
SUBMAKE=$(MAKE) -w
|
||||
define MESSAGE
|
||||
printf "%s\n" "$(1)"
|
||||
endef
|
||||
ERROR_MESSAGE=$(MESSAGE)
|
||||
endif
|
10
modules
10
modules
@ -1,15 +1,13 @@
|
||||
GLUON_FEEDS='openwrt gluon routing luci'
|
||||
|
||||
OPENWRT_REPO=git://github.com/openwrt/openwrt.git
|
||||
OPENWRT_COMMIT=0f757bd2606971252f901ef3faf4dbd0086315f7
|
||||
OPENWRT_BRANCH=chaos_calmer
|
||||
LEDE_REPO=git://git.lede-project.org/source.git
|
||||
LEDE_COMMIT=b9a408c2b49ccfa0e906bda00ef77f4002e401fd
|
||||
|
||||
PACKAGES_OPENWRT_REPO=git://github.com/openwrt/packages.git
|
||||
PACKAGES_OPENWRT_COMMIT=73776792f7d58e982be9e5819450d4875b273159
|
||||
PACKAGES_OPENWRT_BRANCH=for-15.05
|
||||
PACKAGES_OPENWRT_COMMIT=ee211f94ec292f7ec3d563fcbc147359b6cf8290
|
||||
|
||||
PACKAGES_GLUON_REPO=git://github.com/freifunk-gluon/packages.git
|
||||
PACKAGES_GLUON_COMMIT=5c25ed888f9f2e05652a994fc0212e34304d58fa
|
||||
PACKAGES_GLUON_COMMIT=ef405e224082c26807fe24c02da9b02135fa46d0
|
||||
|
||||
PACKAGES_ROUTING_REPO=git://github.com/openwrt-routing/packages.git
|
||||
PACKAGES_ROUTING_COMMIT=d848d49d2443448b147c564c2dd8f64433b5fb9c
|
||||
|
2
overlay/opkg.mk
Normal file
2
overlay/opkg.mk
Normal file
@ -0,0 +1,2 @@
|
||||
FEEDS_ENABLED := $(FEEDS_DISABLED)
|
||||
FEEDS_DISABLED :=
|
@ -2,11 +2,13 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=gluon-autoupdater
|
||||
PKG_VERSION:=4
|
||||
PKG_RELEASE:=$(GLUON_BRANCH)
|
||||
|
||||
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||
|
||||
PKG_CONFIG_DEPENDS := CONFIG_GLUON_BRANCH
|
||||
PKG_BUILD_DEPENDS := respondd
|
||||
|
||||
|
||||
include ../gluon.mk
|
||||
|
||||
|
||||
@ -17,6 +19,13 @@ define Package/gluon-autoupdater
|
||||
TITLE:=Automatically update firmware
|
||||
endef
|
||||
|
||||
define Package/gluon-autoupdater/config
|
||||
config GLUON_BRANCH
|
||||
string "Gluon autoupdater branch"
|
||||
depends on PACKAGE_gluon-autoupdater
|
||||
default ""
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
mkdir -p $(PKG_BUILD_DIR)
|
||||
$(CP) ./src/* $(PKG_BUILD_DIR)/
|
||||
@ -34,10 +43,10 @@ define Package/gluon-autoupdater/install
|
||||
$(INSTALL_DIR) $(1)/lib/gluon/respondd
|
||||
$(CP) $(PKG_BUILD_DIR)/respondd.so $(1)/lib/gluon/respondd/autoupdater.so
|
||||
|
||||
if [ '$(GLUON_BRANCH)' ]; then \
|
||||
$(INSTALL_DIR) $(1)/lib/gluon/autoupdater; \
|
||||
echo '$(GLUON_BRANCH)' > $(1)/lib/gluon/autoupdater/default_branch; \
|
||||
fi
|
||||
ifneq ($(CONFIG_GLUON_BRANCH),"")
|
||||
$(INSTALL_DIR) $(1)/lib/gluon/autoupdater
|
||||
echo '$(call qstrip,$(CONFIG_GLUON_BRANCH))' > $(1)/lib/gluon/autoupdater/default_branch
|
||||
endif
|
||||
endef
|
||||
|
||||
define Package/gluon-autoupdater/postinst
|
||||
|
@ -1,8 +1,10 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=gluon-core
|
||||
PKG_VERSION:=3
|
||||
PKG_RELEASE:=$(GLUON_VERSION)
|
||||
|
||||
GLUON_VERSION = $(shell git describe --always --dirty=+ 2>/dev/null || echo unknown)
|
||||
PKG_VERSION:=$(if $(DUMP),x,$(GLUON_VERSION))
|
||||
|
||||
|
||||
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||
|
||||
@ -20,10 +22,6 @@ define Package/gluon-core/description
|
||||
Gluon community wifi mesh firmware framework: core
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
mkdir -p $(PKG_BUILD_DIR)
|
||||
endef
|
||||
|
||||
define Build/Configure
|
||||
endef
|
||||
|
||||
@ -34,11 +32,9 @@ endef
|
||||
define Package/gluon-core/install
|
||||
$(CP) ./files/* $(1)/
|
||||
$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
|
||||
$(SED) 's/__GLUON_OPENWRT_FEEDS__/{$(GLUON_OPENWRT_FEEDS:%="%",)}/' $(1)/lib/gluon/upgrade/500-opkg
|
||||
|
||||
$(INSTALL_DIR) $(1)/lib/gluon
|
||||
echo "$(GLUON_VERSION)" > $(1)/lib/gluon/gluon-version
|
||||
echo "$(GLUON_SITE_VERSION)" > $(1)/lib/gluon/site-version
|
||||
echo '$(GLUON_VERSION)' > $(1)/lib/gluon/gluon-version
|
||||
endef
|
||||
|
||||
define Package/gluon-core/postinst
|
||||
|
@ -2,7 +2,7 @@ need_string 'site_code'
|
||||
need_string 'site_name'
|
||||
|
||||
if need_table('opkg', nil, false) then
|
||||
need_string('opkg.openwrt', false)
|
||||
need_string('opkg.lede', false)
|
||||
|
||||
function check_repo(k, _)
|
||||
-- this is not actually a uci name, but using the same naming rules here is fine
|
||||
|
@ -8,7 +8,7 @@ local util = require 'luci.util'
|
||||
local subst = {}
|
||||
|
||||
subst['%%v'] = util.trim(fs.readfile('/etc/openwrt_version'))
|
||||
subst['%%n'], subst['%%S'] = util.exec('. /etc/openwrt_release; echo $DISTRIB_CODENAME; echo $DISTRIB_TARGET'):match('([^\n]*)\n([^\n]*)')
|
||||
subst['%%n'], subst['%%S'], subst['%%A'] = util.exec('. /etc/openwrt_release; echo "$DISTRIB_CODENAME"; echo "$DISTRIB_TARGET"; echo "$DISTRIB_ARCH"'):match('([^\n]*)\n([^\n]*)\n([^\n]*)')
|
||||
subst['%%GS'] = site.site_code
|
||||
subst['%%GV'] = util.trim(fs.readfile('/lib/gluon/gluon-version'))
|
||||
subst['%%GR'] = util.trim(fs.readfile('/lib/gluon/release'))
|
||||
@ -22,19 +22,29 @@ function replace_patterns(url)
|
||||
end
|
||||
|
||||
|
||||
if site.opkg then
|
||||
if site.opkg.openwrt then
|
||||
local url = replace_patterns(site.opkg.openwrt)
|
||||
local f = io.open('/etc/opkg/distfeeds.conf', 'w')
|
||||
local prefix = subst['%%n'] .. '_'
|
||||
|
||||
for _, v in ipairs(__GLUON_OPENWRT_FEEDS__) do
|
||||
f:write(replace_patterns(string.format('src/gz %%n_%s %s/%s\n', v, site.opkg.openwrt, v)))
|
||||
local distfeeds = {}
|
||||
for line in io.lines('/etc/opkg/distfeeds.conf') do
|
||||
table.insert(distfeeds, line)
|
||||
end
|
||||
|
||||
local f = io.open('/etc/opkg/distfeeds.conf', 'w')
|
||||
|
||||
for _, line in ipairs(distfeeds) do
|
||||
local name = line:match('^src/gz%s' .. prefix .. '(%S+)%s')
|
||||
if name == 'core' then
|
||||
f:write('# ' .. line .. '\n')
|
||||
elseif name and site.opkg and site.opkg.lede then
|
||||
f:write(string.format('src/gz %s %s/%s\n', prefix .. name, replace_patterns(site.opkg.lede), name))
|
||||
else
|
||||
f:write(line .. '\n')
|
||||
end
|
||||
end
|
||||
|
||||
f:close()
|
||||
end
|
||||
f:close()
|
||||
|
||||
if site.opkg.extra and next(site.opkg.extra) then
|
||||
if site.opkg and site.opkg.extra and next(site.opkg.extra) then
|
||||
local f = io.open('/etc/opkg/gluon.conf', 'w')
|
||||
|
||||
for k, v in pairs(site.opkg.extra) do
|
||||
@ -43,7 +53,6 @@ if site.opkg then
|
||||
|
||||
f:close()
|
||||
|
||||
else
|
||||
else
|
||||
os.remove('/etc/opkg/gluon.conf')
|
||||
end
|
||||
end
|
||||
|
@ -1 +0,0 @@
|
||||
/etc/init.d/dropbear
|
@ -1,5 +1,5 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
if /etc/init.d/haveged enabled; then
|
||||
if [ -x /etc/init.d/haveged ] && /etc/init.d/haveged enabled; then
|
||||
. /etc/init.d/haveged
|
||||
fi
|
||||
|
@ -1 +0,0 @@
|
||||
/etc/init.d/dropbear
|
21
package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S50dropbear
Executable file
21
package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S50dropbear
Executable file
@ -0,0 +1,21 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
USE_PROCD=1
|
||||
PROG=/usr/sbin/dropbear
|
||||
NAME=dropbear
|
||||
|
||||
start_service() {
|
||||
[ -x /etc/init.d/dropbear ] || return 0
|
||||
|
||||
. /etc/init.d/dropbear
|
||||
|
||||
[ -s /etc/dropbear/dropbear_rsa_host_key ] || keygen
|
||||
|
||||
. /lib/functions.sh
|
||||
. /lib/functions/network.sh
|
||||
|
||||
procd_open_instance
|
||||
procd_set_param command "$PROG" -F -f
|
||||
procd_set_param respawn
|
||||
procd_close_instance
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=50
|
||||
|
||||
USE_PROCD=1
|
||||
PROG=/usr/sbin/telnetd
|
||||
|
||||
start_service() {
|
||||
procd_open_instance
|
||||
procd_set_param command "$PROG" -F -l /lib/gluon/setup-mode/ash-login
|
||||
procd_close_instance
|
||||
}
|
@ -1,9 +1,13 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=gluon-site
|
||||
PKG_VERSION:=$(if $(GLUON_SITE_CODE),$(GLUON_SITE_CODE),1)
|
||||
PKG_RELEASE:=$(GLUON_RELEASE)
|
||||
|
||||
GLUON_SITEDIR = '$(call qstrip,$(CONFIG_GLUON_SITEDIR))'
|
||||
GLUON_SITE_VERSION = $(shell ( cd $(GLUON_SITEDIR) && git --git-dir=.git describe --always --dirty=+ ) 2>/dev/null || echo unknown)
|
||||
PKG_VERSION:=$(if $(DUMP),x,$(GLUON_SITE_VERSION))
|
||||
|
||||
|
||||
PKG_CONFIG_DEPENDS := CONFIG_GLUON_RELEASE CONFIG_GLUON_SITEDIR
|
||||
PKG_FILE_DEPENDS := $(GLUON_SITEDIR)/site.conf $(GLUON_SITEDIR)/i18n/
|
||||
PKG_BUILD_DEPENDS := luci-base/host lua-cjson/host
|
||||
|
||||
@ -20,6 +24,18 @@ define Package/gluon-site
|
||||
TITLE:=Site-specific files of Gluon
|
||||
endef
|
||||
|
||||
define Package/gluon-site/config
|
||||
config GLUON_RELEASE
|
||||
string "Gluon release number"
|
||||
depends on PACKAGE_gluon-site
|
||||
default ""
|
||||
|
||||
config GLUON_SITEDIR
|
||||
string "Gluon site configuration directory"
|
||||
depends on PACKAGE_gluon-site
|
||||
default ""
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
mkdir -p $(PKG_BUILD_DIR)
|
||||
endef
|
||||
@ -28,14 +44,15 @@ define Build/Configure
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
lua -e 'print(require("cjson").encode(assert(dofile("../../scripts/site_config.lua"))))' > $(PKG_BUILD_DIR)/site.json
|
||||
GLUON_SITEDIR='$(call qstrip,$(CONFIG_GLUON_SITEDIR))' lua -e 'print(require("cjson").encode(assert(dofile("../../scripts/site_config.lua"))))' > $(PKG_BUILD_DIR)/site.json
|
||||
$(call GluonBuildI18N,gluon-site,$(GLUON_SITEDIR)/i18n)
|
||||
endef
|
||||
|
||||
define Package/gluon-site/install
|
||||
$(INSTALL_DIR) $(1)/lib/gluon
|
||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/site.json $(1)/lib/gluon/
|
||||
echo "$(GLUON_RELEASE)" > $(1)/lib/gluon/release
|
||||
echo '$(GLUON_SITE_VERSION)' > $(1)/lib/gluon/site-version
|
||||
echo '$(call qstrip,$(CONFIG_GLUON_RELEASE))' > $(1)/lib/gluon/release
|
||||
|
||||
$(call GluonInstallI18N,gluon-site,$(1))
|
||||
endef
|
||||
|
@ -5,8 +5,13 @@ include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
# Annoyingly, make's shell function replaces all newlines with spaces, so we have to do some escaping work. Yuck.
|
||||
define GluonCheckSite
|
||||
[ -z "$$GLUONDIR" ] || sed -e 's/-@/\n/g' -e 's/+@/@/g' <<'END__GLUON__CHECK__SITE' | "$$GLUONDIR"/scripts/check_site.sh
|
||||
$(shell cat $(1) | sed -ne '1h; 1!H; $$ {g; s/@/+@/g; s/\n/-@/g; p}')
|
||||
[ -z "$$IPKG_INSTROOT" ] || sed -e 's/-@/\n/g' -e 's/+@/@/g' <<'END__GLUON__CHECK__SITE' | "${TOPDIR}/staging_dir/hostpkg/bin/lua" -e 'dofile()'
|
||||
local f = assert(io.open(os.getenv('IPKG_INSTROOT') .. '/lib/gluon/site.json'))
|
||||
local site_json = f:read('*a')
|
||||
f:close()
|
||||
|
||||
site = require('cjson').decode(site_json)
|
||||
$(shell cat '$(TOPDIR)/../scripts/check_site_lib.lua' '$(1)' | sed -ne '1h; 1!H; $$ {g; s/@/+@/g; s/\n/-@/g; p}')
|
||||
END__GLUON__CHECK__SITE
|
||||
endef
|
||||
|
||||
@ -41,9 +46,7 @@ define GluonSrcDiet
|
||||
rm -rf $(2)
|
||||
$(CP) $(1) $(2)
|
||||
$(FIND) $(2) -type f | while read src; do \
|
||||
if $(STAGING_DIR_HOST)/bin/lua $(STAGING_DIR_HOST)/bin/LuaSrcDiet \
|
||||
--noopt-binequiv -o "$$$$src.o" "$$$$src"; \
|
||||
then \
|
||||
if LuaSrcDiet --noopt-binequiv -o "$$$$src.o" "$$$$src"; then \
|
||||
chmod $$$$(stat -c%a "$$$$src") "$$$$src.o"; \
|
||||
mv "$$$$src.o" "$$$$src"; \
|
||||
fi; \
|
||||
|
@ -0,0 +1,111 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sat, 14 Jan 2017 18:13:14 +0100
|
||||
Subject: build: move STAGING_DIR_HOSTPKG and BUILD_DIR_HOST back to a common directory for all targets
|
||||
|
||||
$(STAGING_DIR)/host is kept in addition to $(STAGING_DIR_HOSTPKG) in most
|
||||
places; it is still used as destination for host files in Build/InstallDev.
|
||||
|
||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index b220dfd3c56a11f3e27d70e3d6e58cc6448abd2f..c1a7285c83df310e987eaef8376500d2b614eafb 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -55,7 +55,7 @@ clean: FORCE
|
||||
rm -rf $(BUILD_DIR) $(STAGING_DIR) $(BIN_DIR) $(OUTPUT_DIR)/packages/$(ARCH_PACKAGES) $(BUILD_LOG_DIR) $(TOPDIR)/staging_dir/packages
|
||||
|
||||
dirclean: clean
|
||||
- rm -rf $(STAGING_DIR_HOST) $(TOOLCHAIN_DIR) $(BUILD_DIR_HOST) $(BUILD_DIR_TOOLCHAIN)
|
||||
+ rm -rf $(STAGING_DIR_HOST) $(STAGING_DIR_HOSTPKG) $(TOOLCHAIN_DIR) $(BUILD_DIR_BASE)/host $(BUILD_DIR_BASE)/hostpkg $(BUILD_DIR_TOOLCHAIN)
|
||||
rm -rf $(TMP_DIR)
|
||||
|
||||
ifndef DUMP_TARGET_DB
|
||||
diff --git a/include/autotools.mk b/include/autotools.mk
|
||||
index c6aa47e0bef311697b4def7a7183d1ac59dcf599..7bd400ab36d052b39fcb76a66873c8673eb189a0 100644
|
||||
--- a/include/autotools.mk
|
||||
+++ b/include/autotools.mk
|
||||
@@ -75,7 +75,7 @@ define autoreconf_target
|
||||
$(strip $(call autoreconf, \
|
||||
$(PKG_BUILD_DIR), $(PKG_REMOVE_FILES), \
|
||||
$(PKG_AUTOMAKE_PATHS), $(PKG_LIBTOOL_PATHS), \
|
||||
- $(STAGING_DIR)/host/share/aclocal $(STAGING_DIR)/usr/share/aclocal $(PKG_MACRO_PATHS)))
|
||||
+ $(STAGING_DIR)/host/share/aclocal $(STAGING_DIR_HOSTPKG)/share/aclocal $(STAGING_DIR)/usr/share/aclocal $(PKG_MACRO_PATHS)))
|
||||
endef
|
||||
|
||||
define patch_libtool_target
|
||||
diff --git a/include/cmake.mk b/include/cmake.mk
|
||||
index 5f572e9d7475e807ea56713ee2069dc98f5c1f6b..80c1b05937410cb9fce20e7b759577480cf390e7 100644
|
||||
--- a/include/cmake.mk
|
||||
+++ b/include/cmake.mk
|
||||
@@ -34,7 +34,7 @@ CMAKE_NM:=$(call cmake_tool,$(TARGET_NM))
|
||||
CMAKE_RANLIB:=$(call cmake_tool,$(TARGET_RANLIB))
|
||||
|
||||
CMAKE_FIND_ROOT_PATH:=$(STAGING_DIR)/usr;$(TOOLCHAIN_DIR)$(if $(CONFIG_EXTERNAL_TOOLCHAIN),;$(CONFIG_TOOLCHAIN_ROOT))
|
||||
-CMAKE_HOST_FIND_ROOT_PATH:=$(STAGING_DIR)/host;$(STAGING_DIR_HOST)
|
||||
+CMAKE_HOST_FIND_ROOT_PATH:=$(STAGING_DIR)/host;$(STAGING_DIR_HOSTPKG);$(STAGING_DIR_HOST)
|
||||
CMAKE_SHARED_LDFLAGS:=-Wl,-Bsymbolic-functions
|
||||
|
||||
define Build/Configure/Default
|
||||
diff --git a/include/host-build.mk b/include/host-build.mk
|
||||
index 5cfbdeba5138c4362f82b7ae86b910a1f41f082a..fee7c6ce8fca6160a7055a8ccb9c0ebd0759032b 100644
|
||||
--- a/include/host-build.mk
|
||||
+++ b/include/host-build.mk
|
||||
@@ -115,7 +115,7 @@ ifneq ($(if $(HOST_QUILT),,$(CONFIG_AUTOREBUILD)),)
|
||||
endif
|
||||
|
||||
define Host/Exports/Default
|
||||
- $(1) : export ACLOCAL_INCLUDE=$$(foreach p,$$(wildcard $$(STAGING_DIR_HOST)/share/aclocal $$(STAGING_DIR_HOST)/share/aclocal-* $(if $(IS_PACKAGE_BUILD),$$(STAGING_DIR)/host/share/aclocal $$(STAGING_DIR)/host/share/aclocal-*)),-I $$(p))
|
||||
+ $(1) : export ACLOCAL_INCLUDE=$$(foreach p,$$(wildcard $$(STAGING_DIR_HOST)/share/aclocal $$(STAGING_DIR_HOST)/share/aclocal-* $(if $(IS_PACKAGE_BUILD),$$(STAGING_DIR)/host/share/aclocal $$(STAGING_DIR_HOSTPKG)/share/aclocal $$(STAGING_DIR)/host/share/aclocal-*)),-I $$(p))
|
||||
$(1) : export STAGING_PREFIX=$$(HOST_BUILD_PREFIX)
|
||||
$(1) : export PKG_CONFIG_PATH=$$(STAGING_DIR_HOST)/lib/pkgconfig:$$(HOST_BUILD_PREFIX)/lib/pkgconfig
|
||||
$(1) : export PKG_CONFIG_LIBDIR=$$(HOST_BUILD_PREFIX)/lib/pkgconfig
|
||||
diff --git a/include/package.mk b/include/package.mk
|
||||
index 32485176577b040f6e4a561c5d1144509877bcdf..ea801288eadb139cc0dd2412b4c927c6bd7330e0 100644
|
||||
--- a/include/package.mk
|
||||
+++ b/include/package.mk
|
||||
@@ -130,7 +130,7 @@ ifdef USE_SOURCE_DIR
|
||||
endif
|
||||
|
||||
define Build/Exports/Default
|
||||
- $(1) : export ACLOCAL_INCLUDE=$$(foreach p,$$(wildcard $$(STAGING_DIR)/usr/share/aclocal $$(STAGING_DIR)/usr/share/aclocal-* $$(STAGING_DIR)/host/share/aclocal $$(STAGING_DIR)/host/share/aclocal-*),-I $$(p))
|
||||
+ $(1) : export ACLOCAL_INCLUDE=$$(foreach p,$$(wildcard $$(STAGING_DIR)/usr/share/aclocal $$(STAGING_DIR)/usr/share/aclocal-* $$(STAGING_DIR_HOSTPKG)/share/aclocal $$(STAGING_DIR_HOSTPKG)/share/aclocal-* $$(STAGING_DIR)/host/share/aclocal $$(STAGING_DIR)/host/share/aclocal-*),-I $$(p))
|
||||
$(1) : export STAGING_PREFIX=$$(STAGING_DIR)/usr
|
||||
$(1) : export PATH=$$(TARGET_PATH_PKG)
|
||||
$(1) : export CONFIG_SITE:=$$(CONFIG_SITE)
|
||||
diff --git a/rules.mk b/rules.mk
|
||||
index 04fd936660bef4af49de5500cd2d7c3601c1b9f6..95b18f9e5c69de479db54c5bdb740103140dcf74 100644
|
||||
--- a/rules.mk
|
||||
+++ b/rules.mk
|
||||
@@ -145,9 +145,9 @@ STAGING_DIR_ROOT:=$(STAGING_DIR)/root-$(BOARD)
|
||||
BUILD_LOG_DIR:=$(TOPDIR)/logs
|
||||
PKG_INFO_DIR := $(STAGING_DIR)/pkginfo
|
||||
|
||||
-BUILD_DIR_HOST:=$(if $(IS_PACKAGE_BUILD),$(BUILD_DIR)/host,$(BUILD_DIR_BASE)/host)
|
||||
+BUILD_DIR_HOST:=$(if $(IS_PACKAGE_BUILD),$(BUILD_DIR_BASE)/hostpkg,$(BUILD_DIR_BASE)/host)
|
||||
STAGING_DIR_HOST:=$(TOPDIR)/staging_dir/host
|
||||
-STAGING_DIR_HOSTPKG:=$(STAGING_DIR)/host
|
||||
+STAGING_DIR_HOSTPKG:=$(TOPDIR)/staging_dir/hostpkg
|
||||
|
||||
TARGET_PATH:=$(subst $(space),:,$(filter-out .,$(filter-out ./,$(subst :,$(space),$(PATH)))))
|
||||
TARGET_INIT_PATH:=$(call qstrip,$(CONFIG_TARGET_INIT_PATH))
|
||||
@@ -206,7 +206,7 @@ ifndef DUMP
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
-TARGET_PATH_PKG:=$(STAGING_DIR)/host/bin:$(TARGET_PATH)
|
||||
+TARGET_PATH_PKG:=$(STAGING_DIR)/host/bin:$(STAGING_DIR_HOSTPKG)/bin:$(TARGET_PATH)
|
||||
|
||||
ifeq ($(CONFIG_SOFT_FLOAT),y)
|
||||
SOFT_FLOAT_CONFIG_OPTION:=--with-float=soft
|
||||
@@ -232,9 +232,9 @@ export PKG_CONFIG
|
||||
|
||||
HOSTCC:=gcc
|
||||
HOSTCXX:=g++
|
||||
-HOST_CPPFLAGS:=-I$(STAGING_DIR_HOST)/include -I$(STAGING_DIR_HOST)/usr/include $(if $(IS_PACKAGE_BUILD),-I$(STAGING_DIR)/host/include)
|
||||
+HOST_CPPFLAGS:=-I$(STAGING_DIR_HOST)/include -I$(STAGING_DIR_HOST)/usr/include $(if $(IS_PACKAGE_BUILD),-I$(STAGING_DIR_HOSTPKG)/include -I$(STAGING_DIR)/host/include)
|
||||
HOST_CFLAGS:=-O2 $(HOST_CPPFLAGS)
|
||||
-HOST_LDFLAGS:=-L$(STAGING_DIR_HOST)/lib -L$(STAGING_DIR_HOST)/usr/lib $(if $(IS_PACKAGE_BUILD),-L$(STAGING_DIR)/host/lib)
|
||||
+HOST_LDFLAGS:=-L$(STAGING_DIR_HOST)/lib -L$(STAGING_DIR_HOST)/usr/lib $(if $(IS_PACKAGE_BUILD),-L$(STAGING_DIR_HOSTPKG)/lib -L$(STAGING_DIR)/host/lib)
|
||||
|
||||
ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
|
||||
TARGET_AR:=$(TARGET_CROSS)gcc-ar
|
@ -0,0 +1,43 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sat, 21 Mar 2015 16:40:52 +0100
|
||||
Subject: base-files: disable reset button handling
|
||||
|
||||
This conflicts with our reset button usage.
|
||||
|
||||
diff --git a/package/base-files/files/etc/rc.button/reset b/package/base-files/files/etc/rc.button/reset
|
||||
deleted file mode 100755
|
||||
index 4265767437e8eda3c758fe7f7941d7f608c95782..0000000000000000000000000000000000000000
|
||||
--- a/package/base-files/files/etc/rc.button/reset
|
||||
+++ /dev/null
|
||||
@@ -1,31 +0,0 @@
|
||||
-#!/bin/sh
|
||||
-
|
||||
-. /lib/functions.sh
|
||||
-
|
||||
-OVERLAY="$( grep ' /overlay ' /proc/mounts )"
|
||||
-
|
||||
-case "$ACTION" in
|
||||
-pressed)
|
||||
- [ -z "$OVERLAY" ] && return 0
|
||||
-
|
||||
- return 5
|
||||
-;;
|
||||
-timeout)
|
||||
- . /etc/diag.sh
|
||||
- set_state failsafe
|
||||
-;;
|
||||
-released)
|
||||
- if [ "$SEEN" -lt 1 ]
|
||||
- then
|
||||
- echo "REBOOT" > /dev/console
|
||||
- sync
|
||||
- reboot
|
||||
- elif [ "$SEEN" -gt 5 -a -n "$OVERLAY" ]
|
||||
- then
|
||||
- echo "FACTORY RESET" > /dev/console
|
||||
- jffs2reset -y && reboot &
|
||||
- fi
|
||||
-;;
|
||||
-esac
|
||||
-
|
||||
-return 0
|
@ -0,0 +1,69 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Tue, 27 Sep 2016 03:55:55 +0200
|
||||
Subject: dropbear: add a failsafe mode that will always allow password-less root login
|
||||
|
||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
|
||||
diff --git a/package/network/services/dropbear/patches/700-failsafe-mode.patch b/package/network/services/dropbear/patches/700-failsafe-mode.patch
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..c6e45423e2dba1258549a5bfe4b5a59ac32d73d8
|
||||
--- /dev/null
|
||||
+++ b/package/network/services/dropbear/patches/700-failsafe-mode.patch
|
||||
@@ -0,0 +1,57 @@
|
||||
+--- a/runopts.h
|
||||
++++ b/runopts.h
|
||||
+@@ -97,6 +97,8 @@ typedef struct svr_runopts {
|
||||
+ int norootpass;
|
||||
+ int allowblankpass;
|
||||
+
|
||||
++ int failsafe_mode;
|
||||
++
|
||||
+ #ifdef ENABLE_SVR_REMOTETCPFWD
|
||||
+ int noremotetcp;
|
||||
+ #endif
|
||||
+--- a/svr-auth.c
|
||||
++++ b/svr-auth.c
|
||||
+@@ -149,10 +149,11 @@ void recv_msg_userauth_request() {
|
||||
+ AUTH_METHOD_NONE_LEN) == 0) {
|
||||
+ TRACE(("recv_msg_userauth_request: 'none' request"))
|
||||
+ if (valid_user
|
||||
+- && (svr_opts.allowblankpass || !strcmp(ses.authstate.pw_name, "root"))
|
||||
+- && !svr_opts.noauthpass
|
||||
+- && !(svr_opts.norootpass && ses.authstate.pw_uid == 0)
|
||||
+- && ses.authstate.pw_passwd[0] == '\0')
|
||||
++ && ((svr_opts.failsafe_mode && !strcmp(ses.authstate.pw_name, "root"))
|
||||
++ || ((svr_opts.allowblankpass || !strcmp(ses.authstate.pw_name, "root"))
|
||||
++ && !svr_opts.noauthpass
|
||||
++ && !(svr_opts.norootpass && ses.authstate.pw_uid == 0)
|
||||
++ && ses.authstate.pw_passwd[0] == '\0')))
|
||||
+ {
|
||||
+ dropbear_log(LOG_NOTICE,
|
||||
+ "Auth succeeded with blank password for '%s' from %s",
|
||||
+--- a/svr-runopts.c
|
||||
++++ b/svr-runopts.c
|
||||
+@@ -72,6 +72,7 @@ static void printhelp(const char * progn
|
||||
+ "-s Disable password logins\n"
|
||||
+ "-g Disable password logins for root\n"
|
||||
+ "-B Allow blank password logins\n"
|
||||
++ "-f Failsafe mode: always allow password-less root login\n"
|
||||
+ #endif
|
||||
+ #ifdef ENABLE_SVR_LOCALTCPFWD
|
||||
+ "-j Disable local port forwarding\n"
|
||||
+@@ -130,6 +131,7 @@ void svr_getopts(int argc, char ** argv)
|
||||
+ svr_opts.noauthpass = 0;
|
||||
+ svr_opts.norootpass = 0;
|
||||
+ svr_opts.allowblankpass = 0;
|
||||
++ svr_opts.failsafe_mode = 0;
|
||||
+ svr_opts.inetdmode = 0;
|
||||
+ svr_opts.portcount = 0;
|
||||
+ svr_opts.hostkey = NULL;
|
||||
+@@ -244,6 +246,9 @@ void svr_getopts(int argc, char ** argv)
|
||||
+ case 'B':
|
||||
+ svr_opts.allowblankpass = 1;
|
||||
+ break;
|
||||
++ case 'f':
|
||||
++ svr_opts.failsafe_mode = 1;
|
||||
++ break;
|
||||
+ #endif
|
||||
+ case 'h':
|
||||
+ printhelp(argv[0]);
|
@ -1,36 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sat, 26 Jul 2014 06:10:23 +0200
|
||||
Subject: tools/Makefile: fix host tools build dependencies
|
||||
|
||||
diff --git a/tools/Makefile b/tools/Makefile
|
||||
index d2fe2ffddf4b7207a937ca75efe1c2728e8067aa..c6cded8eccd81c422f99e7ee50754c4bc66decc7 100644
|
||||
--- a/tools/Makefile
|
||||
+++ b/tools/Makefile
|
||||
@@ -95,10 +95,16 @@ define PrepareStaging
|
||||
endef
|
||||
|
||||
# preparatory work
|
||||
+ifneq ($(ARCH),)
|
||||
+staging_prepared = $(STAGING_DIR)/.prepared
|
||||
+
|
||||
$(STAGING_DIR)/.prepared: $(TMP_DIR)/.build
|
||||
$(call PrepareStaging,$(STAGING_DIR))
|
||||
mkdir -p $(BUILD_DIR)/stamp
|
||||
touch $@
|
||||
+else
|
||||
+staging_prepared :=
|
||||
+endif
|
||||
|
||||
$(STAGING_DIR_HOST)/.prepared: $(TMP_DIR)/.build
|
||||
$(call PrepareStaging,$(STAGING_DIR_HOST))
|
||||
@@ -110,8 +116,8 @@ $(STAGING_DIR_HOST)/.prepared: $(TMP_DIR)/.build
|
||||
|
||||
endif
|
||||
|
||||
-$(curdir)//prepare = $(STAGING_DIR)/.prepared $(STAGING_DIR_HOST)/.prepared
|
||||
-$(curdir)//compile = $(STAGING_DIR)/.prepared $(STAGING_DIR_HOST)/.prepared
|
||||
+$(curdir)//prepare = $(staging_prepared) $(STAGING_DIR_HOST)/.prepared
|
||||
+$(curdir)//compile = $(staging_prepared) $(STAGING_DIR_HOST)/.prepared
|
||||
|
||||
# prerequisites for the individual targets
|
||||
$(curdir)/ := .config prereq
|
@ -1,118 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Tue, 17 Jan 2017 22:08:21 +0100
|
||||
Subject: odhcp6c: backport from LEDE 0d49f9f4b4da9d1960f82e68ae797290e4b9c434
|
||||
|
||||
diff --git a/package/network/ipv6/odhcp6c/Makefile b/package/network/ipv6/odhcp6c/Makefile
|
||||
index 3705705f6540dc841c7041e81f6d208a41a1f08a..a8e45588a52859daf14c68c665a53690b9d09be2 100644
|
||||
--- a/package/network/ipv6/odhcp6c/Makefile
|
||||
+++ b/package/network/ipv6/odhcp6c/Makefile
|
||||
@@ -8,15 +8,16 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=odhcp6c
|
||||
-PKG_VERSION:=2016-02-08
|
||||
+PKG_VERSION:=2017-01-07
|
||||
PKG_RELEASE=$(PKG_SOURCE_VERSION)
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
-PKG_SOURCE_URL:=https://github.com/openwrt/odhcp6c.git
|
||||
+PKG_SOURCE_URL:=git://git.lede-project.org/project/odhcp6c.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
-PKG_SOURCE_VERSION:=dc186d6d2b0dd4ad23ca5fc69c00e81f796ff6d9
|
||||
-PKG_MAINTAINER:=Steven Barth <steven@midlink.org>
|
||||
+PKG_SOURCE_VERSION:=d420f49396c627ce1072b83170889baf0720bc8b
|
||||
+PKG_MIRROR_HASH:=a7c599b5600b6cca9aec221dd32fc7754e0e942b0192bd902f1e789f53345127
|
||||
+PKG_MAINTAINER:=Hans Dedecker <dedeckeh@gmail.com>
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
@@ -30,7 +31,7 @@ define Package/odhcp6c
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=Embedded DHCPv6-client for OpenWrt
|
||||
- DEPENDS:=+kmod-ipv6
|
||||
+ DEPENDS:=@IPV6 +libubox
|
||||
endef
|
||||
|
||||
define Package/odhcp6c/config
|
||||
diff --git a/package/network/ipv6/odhcp6c/files/dhcpv6.script b/package/network/ipv6/odhcp6c/files/dhcpv6.script
|
||||
index 677d35f4f92e82d6a7fe9ca01a35e071097baca8..1bb5e771b6dc80c1f5bceef88508d92cc69b1d3a 100755
|
||||
--- a/package/network/ipv6/odhcp6c/files/dhcpv6.script
|
||||
+++ b/package/network/ipv6/odhcp6c/files/dhcpv6.script
|
||||
@@ -77,6 +77,11 @@ setup_interface () {
|
||||
-z "$RA_DNS" -a "$FAKE_ROUTES" = 1 ]; then
|
||||
RA_ROUTES="::/0,$SERVER,$valid,4096"
|
||||
fi
|
||||
+
|
||||
+ # RFC 7278
|
||||
+ if [ "$mask" -eq 64 -a -z "$PREFIXES" -a -n "$EXTENDPREFIX" ]; then
|
||||
+ proto_add_ipv6_prefix "$addr/$mask,$preferred,$valid"
|
||||
+ fi
|
||||
done
|
||||
|
||||
for entry in $RA_ROUTES; do
|
||||
@@ -180,7 +185,7 @@ setup_interface () {
|
||||
# Apply IPv6 / ND configuration
|
||||
HOPLIMIT=$(cat /proc/sys/net/ipv6/conf/$device/hop_limit)
|
||||
[ -n "$RA_HOPLIMIT" -a -n "$HOPLIMIT" ] && [ "$RA_HOPLIMIT" -gt "$HOPLIMIT" ] && echo "$RA_HOPLIMIT" > /proc/sys/net/ipv6/conf/$device/hop_limit
|
||||
- [ -n "$RA_MTU" ] && [ "$RA_MTU" -gt 0 ] && echo "$RA_MTU" > /proc/sys/net/ipv6/conf/$device/mtu
|
||||
+ [ -n "$RA_MTU" ] && [ "$RA_MTU" -ge 1280 ] && echo "$RA_MTU" > /proc/sys/net/ipv6/conf/$device/mtu 2>/dev/null
|
||||
[ -n "$RA_REACHABLE" ] && [ "$RA_REACHABLE" -gt 0 ] && echo "$RA_REACHABLE" > /proc/sys/net/ipv6/neigh/$device/base_reachable_time_ms
|
||||
[ -n "$RA_RETRANSMIT" ] && [ "$RA_RETRANSMIT" -gt 0 ] && echo "$RA_RETRANSMIT" > /proc/sys/net/ipv6/neigh/$device/retrans_time_ms
|
||||
|
||||
@@ -209,6 +214,6 @@ case "$2" in
|
||||
esac
|
||||
|
||||
# user rules
|
||||
-[ -f /etc/odhcp6c.user ] && . /etc/odhcp6c.user
|
||||
+[ -f /etc/odhcp6c.user ] && . /etc/odhcp6c.user "@"
|
||||
|
||||
exit 0
|
||||
diff --git a/package/network/ipv6/odhcp6c/files/dhcpv6.sh b/package/network/ipv6/odhcp6c/files/dhcpv6.sh
|
||||
index 4a453fdc4d94d9298067a986b0e4c6054b6c0a60..9e3f6697335a55cf4be1751fec907a4ac93f09ec 100755
|
||||
--- a/package/network/ipv6/odhcp6c/files/dhcpv6.sh
|
||||
+++ b/package/network/ipv6/odhcp6c/files/dhcpv6.sh
|
||||
@@ -13,6 +13,7 @@ proto_dhcpv6_init_config() {
|
||||
proto_config_add_string 'reqopts:list(uinteger)'
|
||||
proto_config_add_string 'noslaaconly:bool'
|
||||
proto_config_add_string 'forceprefix:bool'
|
||||
+ proto_config_add_string 'extendprefix:bool'
|
||||
proto_config_add_string 'norelease:bool'
|
||||
proto_config_add_string 'ip6prefix:ip6addr'
|
||||
proto_config_add_string iface_dslite
|
||||
@@ -29,14 +30,15 @@ proto_dhcpv6_init_config() {
|
||||
proto_config_add_int "soltimeout"
|
||||
proto_config_add_boolean fakeroutes
|
||||
proto_config_add_boolean sourcefilter
|
||||
+ proto_config_add_boolean keep_ra_dnslifetime
|
||||
}
|
||||
|
||||
proto_dhcpv6_setup() {
|
||||
local config="$1"
|
||||
local iface="$2"
|
||||
|
||||
- local reqaddress reqprefix clientid reqopts noslaaconly forceprefix norelease ip6prefix iface_dslite iface_map iface_464xlat ifaceid userclass vendorclass delegate zone_dslite zone_map zone_464xlat zone soltimeout fakeroutes sourcefilter
|
||||
- json_get_vars reqaddress reqprefix clientid reqopts noslaaconly forceprefix norelease ip6prefix iface_dslite iface_map iface_464xlat ifaceid userclass vendorclass delegate zone_dslite zone_map zone_464xlat zone soltimeout fakeroutes sourcefilter
|
||||
+ local reqaddress reqprefix clientid reqopts noslaaconly forceprefix extendprefix norelease ip6prefix iface_dslite iface_map iface_464xlat ifaceid userclass vendorclass delegate zone_dslite zone_map zone_464xlat zone soltimeout fakeroutes sourcefilter keep_ra_dnslifetime
|
||||
+ json_get_vars reqaddress reqprefix clientid reqopts noslaaconly forceprefix extendprefix norelease ip6prefix iface_dslite iface_map iface_464xlat ifaceid userclass vendorclass delegate zone_dslite zone_map zone_464xlat zone soltimeout fakeroutes sourcefilter keep_ra_dnslifetime
|
||||
|
||||
|
||||
# Configure
|
||||
@@ -60,6 +62,8 @@ proto_dhcpv6_setup() {
|
||||
|
||||
[ -n "$userclass" ] && append opts "-u$userclass"
|
||||
|
||||
+ [ "$keep_ra_dnslifetime" = "1" ] && append opts "-L"
|
||||
+
|
||||
for opt in $reqopts; do
|
||||
append opts "-r$opt"
|
||||
done
|
||||
@@ -78,6 +82,7 @@ proto_dhcpv6_setup() {
|
||||
[ -n "$zone" ] && proto_export "ZONE=$zone"
|
||||
[ "$fakeroutes" != "0" ] && proto_export "FAKE_ROUTES=1"
|
||||
[ "$sourcefilter" = "0" ] && proto_export "NOSOURCEFILTER=1"
|
||||
+ [ "$extendprefix" = "1" ] && proto_export "EXTENDPREFIX=1"
|
||||
|
||||
proto_export "INTERFACE=$config"
|
||||
proto_run_command "$config" odhcp6c \
|
@ -1,26 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Fri, 5 Dec 2014 18:57:16 +0100
|
||||
Subject: busybox: enable telnet only when root password is really empty, not when it is locked
|
||||
|
||||
diff --git a/package/utils/busybox/files/telnet b/package/utils/busybox/files/telnet
|
||||
index a1d1cdf9b18d69895e7a08a8b1318f1ff591ea07..f95be90490597f6251d8c3e1247b522dfd9e72c0 100755
|
||||
--- a/package/utils/busybox/files/telnet
|
||||
+++ b/package/utils/busybox/files/telnet
|
||||
@@ -11,7 +11,7 @@ has_root_pwd() {
|
||||
pwd="${pwd#*root:}"
|
||||
pwd="${pwd%%:*}"
|
||||
|
||||
- test -n "${pwd#[\!x]}"
|
||||
+ test -n "${pwd}"
|
||||
}
|
||||
|
||||
get_root_home() {
|
||||
@@ -28,7 +28,7 @@ has_ssh_pubkey() {
|
||||
|
||||
start_service() {
|
||||
if ( ! has_ssh_pubkey && \
|
||||
- ! has_root_pwd /etc/passwd && ! has_root_pwd /etc/shadow ) || \
|
||||
+ ( ! has_root_pwd /etc/passwd || ! has_root_pwd /etc/shadow ) ) || \
|
||||
( ! /etc/init.d/dropbear enabled 2> /dev/null && ! /etc/init.d/sshd enabled 2> /dev/null );
|
||||
then
|
||||
procd_open_instance
|
@ -1,32 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sat, 21 Mar 2015 16:40:52 +0100
|
||||
Subject: base-files: disable reset button handling
|
||||
|
||||
This conflicts with our reset button usage.
|
||||
|
||||
diff --git a/package/base-files/files/etc/rc.button/reset b/package/base-files/files/etc/rc.button/reset
|
||||
deleted file mode 100755
|
||||
index 3e241460efbb08abaa775c1a7843b5fa3e237d44..0000000000000000000000000000000000000000
|
||||
--- a/package/base-files/files/etc/rc.button/reset
|
||||
+++ /dev/null
|
||||
@@ -1,20 +0,0 @@
|
||||
-#!/bin/sh
|
||||
-
|
||||
-[ "${ACTION}" = "released" ] || exit 0
|
||||
-
|
||||
-. /lib/functions.sh
|
||||
-
|
||||
-logger "$BUTTON pressed for $SEEN seconds"
|
||||
-
|
||||
-if [ "$SEEN" -lt 1 ]
|
||||
-then
|
||||
- echo "REBOOT" > /dev/console
|
||||
- sync
|
||||
- reboot
|
||||
-elif [ "$SEEN" -gt 5 ]
|
||||
-then
|
||||
- echo "FACTORY RESET" > /dev/console
|
||||
- jffs2reset -y && reboot &
|
||||
-fi
|
||||
-
|
||||
-return 0
|
@ -1,85 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Tue, 19 Jul 2016 17:48:53 +0200
|
||||
Subject: ar71xx: define wmac reset function for QCA955x
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
Backport of LEDE a176168a85477caa44eef7e979567d1d52868fde
|
||||
|
||||
diff --git a/target/linux/ar71xx/patches-3.18/640-MIPS-ath79-add-QCA955x-wmac-reset.patch b/target/linux/ar71xx/patches-3.18/640-MIPS-ath79-add-QCA955x-wmac-reset.patch
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..4ac5acd618748fc9ad0f091d110d2503cdc39d53
|
||||
--- /dev/null
|
||||
+++ b/target/linux/ar71xx/patches-3.18/640-MIPS-ath79-add-QCA955x-wmac-reset.patch
|
||||
@@ -0,0 +1,71 @@
|
||||
+--- a/arch/mips/ath79/common.h
|
||||
++++ b/arch/mips/ath79/common.h
|
||||
+@@ -19,6 +19,8 @@
|
||||
+ #define ATH79_MEM_SIZE_MIN (2 * 1024 * 1024)
|
||||
+ #define ATH79_MEM_SIZE_MAX (128 * 1024 * 1024)
|
||||
+
|
||||
++extern void __iomem *ath79_ddr_base;
|
||||
++
|
||||
+ void ath79_clocks_init(void);
|
||||
+ unsigned long ath79_get_sys_clk_rate(const char *id);
|
||||
+
|
||||
+--- a/arch/mips/ath79/dev-wmac.c
|
||||
++++ b/arch/mips/ath79/dev-wmac.c
|
||||
+@@ -149,6 +149,27 @@ static void ar934x_wmac_setup(void)
|
||||
+ ath79_wmac_data.is_clk_25mhz = true;
|
||||
+ }
|
||||
+
|
||||
++static int ar955x_wmac_reset(void)
|
||||
++{
|
||||
++ int i;
|
||||
++
|
||||
++ /* Try to wait for WMAC DDR activity to stop */
|
||||
++ for (i = 0; i < 10; i++) {
|
||||
++ if (!(__raw_readl(ath79_ddr_base + QCA955X_DDR_CTL_CONFIG) &
|
||||
++ QCA955X_DDR_CTL_CONFIG_ACT_WMAC))
|
||||
++ break;
|
||||
++
|
||||
++ udelay(10);
|
||||
++ }
|
||||
++
|
||||
++ ath79_device_reset_set(QCA955X_RESET_RTC);
|
||||
++ udelay(10);
|
||||
++ ath79_device_reset_clear(QCA955X_RESET_RTC);
|
||||
++ udelay(10);
|
||||
++
|
||||
++ return 0;
|
||||
++}
|
||||
++
|
||||
+ static void qca955x_wmac_setup(void)
|
||||
+ {
|
||||
+ u32 t;
|
||||
+@@ -165,6 +186,8 @@ static void qca955x_wmac_setup(void)
|
||||
+ ath79_wmac_data.is_clk_25mhz = false;
|
||||
+ else
|
||||
+ ath79_wmac_data.is_clk_25mhz = true;
|
||||
++
|
||||
++ ath79_wmac_data.external_reset = ar955x_wmac_reset;
|
||||
+ }
|
||||
+
|
||||
+ static bool __init
|
||||
+--- a/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
|
||||
++++ b/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
|
||||
+@@ -32,7 +32,7 @@
|
||||
+ #define AR71XX_SPI_SIZE 0x01000000
|
||||
+
|
||||
+ #define AR71XX_DDR_CTRL_BASE (AR71XX_APB_BASE + 0x00000000)
|
||||
+-#define AR71XX_DDR_CTRL_SIZE 0x100
|
||||
++#define AR71XX_DDR_CTRL_SIZE 0x200
|
||||
+ #define AR71XX_UART_BASE (AR71XX_APB_BASE + 0x00020000)
|
||||
+ #define AR71XX_UART_SIZE 0x100
|
||||
+ #define AR71XX_USB_CTRL_BASE (AR71XX_APB_BASE + 0x00030000)
|
||||
+@@ -173,6 +173,9 @@
|
||||
+ #define AR934X_DDR_REG_FLUSH_PCIE 0xa8
|
||||
+ #define AR934X_DDR_REG_FLUSH_WMAC 0xac
|
||||
+
|
||||
++#define QCA955X_DDR_CTL_CONFIG 0x108
|
||||
++#define QCA955X_DDR_CTL_CONFIG_ACT_WMAC BIT(23)
|
||||
++
|
||||
+ /*
|
||||
+ * PLL block
|
||||
+ */
|
File diff suppressed because it is too large
Load Diff
@ -1,24 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Wed, 20 May 2015 23:15:20 +0200
|
||||
Subject: iwinfo: update NanoStation (Loco) txpower offsets
|
||||
|
||||
diff --git a/package/network/utils/iwinfo/patches/001-update_nanostation_offsets.patch b/package/network/utils/iwinfo/patches/001-update_nanostation_offsets.patch
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..1e13570fc2b585a8e33275116370f5438c899633
|
||||
--- /dev/null
|
||||
+++ b/package/network/utils/iwinfo/patches/001-update_nanostation_offsets.patch
|
||||
@@ -0,0 +1,14 @@
|
||||
+--- a/hardware.txt
|
||||
++++ b/hardware.txt
|
||||
+@@ -42,8 +42,9 @@
|
||||
+ 0x168c 0x0027 0x0777 0x4082 7 0 "Ubiquiti" "SR71"
|
||||
+ 0x168c 0x0029 0x0777 0x4005 7 0 "Ubiquiti" "SR71-15"
|
||||
+ 0x168c 0x002a 0x0777 0xe302 12 0 "Ubiquiti" "PicoStation M2" /* ToDo: confirm offset */
|
||||
+-0x168c 0x002a 0x0777 0xe012 12 0 "Ubiquiti" "NanoStation M2" /* ToDo: confirm offset */
|
||||
+-0x168c 0x002a 0x0777 0xe005 5 0 "Ubiquiti" "NanoStation M5" /* ToDo: confirm offset */
|
||||
++0x168c 0x002a 0x0777 0xe012 11 0 "Ubiquiti" "NanoStation M2"
|
||||
++0x168c 0x002e 0x0777 0xe0a2 8 0 "Ubiquiti" "NanoStation Loco M2"
|
||||
++0x168c 0x002a 0x0777 0xe005 16 0 "Ubiquiti" "NanoStation M5"
|
||||
+ 0x168c 0x002a 0x0777 0xe202 12 0 "Ubiquiti" "Bullet M2"
|
||||
+ 0x168c 0x002a 0x0777 0xe805 5 0 "Ubiquiti" "Bullet M5"
|
||||
+ 0x168c 0x002a 0x0777 0xe345 0 0 "Ubiquiti" "WispStation M5" /* ToDo: confirm offset */
|
@ -1,57 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Mon, 2 Nov 2015 02:02:02 +0100
|
||||
Subject: ipv6: fix crash on ICMPv6 redirects with prohibited/blackholed source
|
||||
|
||||
There are other error values besides ip6_null_entry that can be returned by
|
||||
ip6_route_redirect(): fib6_rule_action() can also result in
|
||||
ip6_blk_hole_entry and ip6_prohibit_entry if such ip rules are installed.
|
||||
|
||||
Only checking for ip6_null_entry in rt6_do_redirect() causes ip6_ins_rt()
|
||||
to be called with rt->rt6i_table == NULL in these cases, making the kernel
|
||||
crash.
|
||||
|
||||
diff --git a/target/linux/generic/patches-3.18/672-ipv6-fix-crash-on-ICMPv6-redirects-with-prohibited-blackholed-source.patch b/target/linux/generic/patches-3.18/672-ipv6-fix-crash-on-ICMPv6-redirects-with-prohibited-blackholed-source.patch
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..6e4b3da3ad820e789f57df71b33ccfc5eaead01e
|
||||
--- /dev/null
|
||||
+++ b/target/linux/generic/patches-3.18/672-ipv6-fix-crash-on-ICMPv6-redirects-with-prohibited-blackholed-source.patch
|
||||
@@ -0,0 +1,39 @@
|
||||
+From 7426eb388ade0f1ad800c408d7efa227d4f41408 Mon Sep 17 00:00:00 2001
|
||||
+Message-Id: <7426eb388ade0f1ad800c408d7efa227d4f41408.1446425986.git.mschiffer@universe-factory.net>
|
||||
+From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
+Date: Mon, 2 Nov 2015 01:05:15 +0100
|
||||
+Subject: [PATCH] ipv6: fix crash on ICMPv6 redirects with
|
||||
+ prohibited/blackholed source
|
||||
+
|
||||
+There are other error values besides ip6_null_entry that can be returned by
|
||||
+ip6_route_redirect(): fib6_rule_action() can also result in
|
||||
+ip6_blk_hole_entry and ip6_prohibit_entry if such ip rules are installed.
|
||||
+
|
||||
+Only checking for ip6_null_entry in rt6_do_redirect() causes ip6_ins_rt()
|
||||
+to be called with rt->rt6i_table == NULL in these cases, making the kernel
|
||||
+crash.
|
||||
+
|
||||
+Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
+---
|
||||
+ net/ipv6/route.c | 3 +--
|
||||
+ 1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
+
|
||||
+--- a/net/ipv6/route.c
|
||||
++++ b/net/ipv6/route.c
|
||||
+@@ -1766,7 +1766,6 @@ static int ip6_route_del(struct fib6_con
|
||||
+
|
||||
+ static void rt6_do_redirect(struct dst_entry *dst, struct sock *sk, struct sk_buff *skb)
|
||||
+ {
|
||||
+- struct net *net = dev_net(skb->dev);
|
||||
+ struct netevent_redirect netevent;
|
||||
+ struct rt6_info *rt, *nrt = NULL;
|
||||
+ struct ndisc_options ndopts;
|
||||
+@@ -1827,7 +1826,7 @@ static void rt6_do_redirect(struct dst_e
|
||||
+ }
|
||||
+
|
||||
+ rt = (struct rt6_info *) dst;
|
||||
+- if (rt == net->ipv6.ip6_null_entry) {
|
||||
++ if (rt->rt6i_flags & RTF_REJECT) {
|
||||
+ net_dbg_ratelimited("rt6_redirect: source isn't a valid nexthop for redirect target\n");
|
||||
+ return;
|
||||
+ }
|
@ -1,16 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Tue, 29 Dec 2015 22:48:52 +0100
|
||||
Subject: lua: fix installation of headers for host build
|
||||
|
||||
diff --git a/package/utils/lua/Makefile b/package/utils/lua/Makefile
|
||||
index 72d56316b45dc484888d219aebd98e651edbe415..c37d99b485d58d955b86a033ea776adb54cfa414 100644
|
||||
--- a/package/utils/lua/Makefile
|
||||
+++ b/package/utils/lua/Makefile
|
||||
@@ -140,6 +140,7 @@ define Host/Install
|
||||
$(MAKE) -C $(HOST_BUILD_DIR) \
|
||||
INSTALL_TOP="$(STAGING_DIR_HOST)" \
|
||||
install
|
||||
+ $(CP) $(HOST_BUILD_DIR)/src/lnum_config.h $(STAGING_DIR_HOST)/include/
|
||||
endef
|
||||
|
||||
define Build/InstallDev
|
@ -1,63 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Mon, 4 Jan 2016 10:22:52 +0100
|
||||
Subject: kernel: fs, seq_file: fallback to vmalloc instead of oom kill processes
|
||||
|
||||
diff --git a/target/linux/generic/patches-3.18/089-fs-seq_file-fallback-to-vmalloc-instead-of-oom-kill-.patch b/target/linux/generic/patches-3.18/089-fs-seq_file-fallback-to-vmalloc-instead-of-oom-kill-.patch
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..cad56f4275287b73dd5e769ea34daee064ee8d69
|
||||
--- /dev/null
|
||||
+++ b/target/linux/generic/patches-3.18/089-fs-seq_file-fallback-to-vmalloc-instead-of-oom-kill-.patch
|
||||
@@ -0,0 +1,53 @@
|
||||
+From 5cec38ac866bfb8775638e71a86e4d8cac30caae Mon Sep 17 00:00:00 2001
|
||||
+Message-Id: <5cec38ac866bfb8775638e71a86e4d8cac30caae.1451899087.git.mschiffer@universe-factory.net>
|
||||
+From: David Rientjes <rientjes@google.com>
|
||||
+Date: Fri, 12 Dec 2014 16:56:16 -0800
|
||||
+Subject: [PATCH] fs, seq_file: fallback to vmalloc instead of oom kill
|
||||
+ processes
|
||||
+
|
||||
+Since commit 058504edd026 ("fs/seq_file: fallback to vmalloc allocation"),
|
||||
+seq_buf_alloc() falls back to vmalloc() when the kmalloc() for contiguous
|
||||
+memory fails. This was done to address order-4 slab allocations for
|
||||
+reading /proc/stat on large machines and noticed because
|
||||
+PAGE_ALLOC_COSTLY_ORDER < 4, so there is no infinite loop in the page
|
||||
+allocator when allocating new slab for such high-order allocations.
|
||||
+
|
||||
+Contiguous memory isn't necessary for caller of seq_buf_alloc(), however.
|
||||
+Other GFP_KERNEL high-order allocations that are <=
|
||||
+PAGE_ALLOC_COSTLY_ORDER will simply loop forever in the page allocator and
|
||||
+oom kill processes as a result.
|
||||
+
|
||||
+We don't want to kill processes so that we can allocate contiguous memory
|
||||
+in situations when contiguous memory isn't necessary.
|
||||
+
|
||||
+This patch does the kmalloc() allocation with __GFP_NORETRY for high-order
|
||||
+allocations. This still utilizes memory compaction and direct reclaim in
|
||||
+the allocation path, the only difference is that it will fail immediately
|
||||
+instead of oom kill processes when out of memory.
|
||||
+
|
||||
+[akpm@linux-foundation.org: add comment]
|
||||
+Signed-off-by: David Rientjes <rientjes@google.com>
|
||||
+Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
|
||||
+Cc: Christoph Hellwig <hch@infradead.org>
|
||||
+Cc: Al Viro <viro@zeniv.linux.org.uk>
|
||||
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
+---
|
||||
+ fs/seq_file.c | 6 +++++-
|
||||
+ 1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
+
|
||||
+--- a/fs/seq_file.c
|
||||
++++ b/fs/seq_file.c
|
||||
+@@ -36,7 +36,11 @@ static void *seq_buf_alloc(unsigned long
|
||||
+ {
|
||||
+ void *buf;
|
||||
+
|
||||
+- buf = kmalloc(size, GFP_KERNEL | __GFP_NOWARN);
|
||||
++ /*
|
||||
++ * __GFP_NORETRY to avoid oom-killings with high-order allocations -
|
||||
++ * it's better to fall back to vmalloc() than to kill things.
|
||||
++ */
|
||||
++ buf = kmalloc(size, GFP_KERNEL | __GFP_NORETRY | __GFP_NOWARN);
|
||||
+ if (!buf && size > PAGE_SIZE)
|
||||
+ buf = vmalloc(size);
|
||||
+ return buf;
|
@ -1,74 +0,0 @@
|
||||
From: Neal Oakey <neal.oakey@bingo-ev.de>
|
||||
Date: Sun, 14 Feb 2016 20:58:20 +0100
|
||||
Subject: fix UBNT XM model detection
|
||||
|
||||
Signed-off-by: Neal Oakey <neal.oakey@bingo-ev.de>
|
||||
|
||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
index a9dca58847fe1fb62a69c5845fda3206407c6727..0aa1c865cbdeb0624147d4117d289a640d20a5ef 100755
|
||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
@@ -64,6 +64,40 @@ wndr3700_board_detect() {
|
||||
AR71XX_MODEL="$machine"
|
||||
}
|
||||
|
||||
+ubnt_get_mtd_part_magic() {
|
||||
+ ar71xx_get_mtd_offset_size_format EEPROM 4118 2 %02x
|
||||
+}
|
||||
+
|
||||
+ubnt_xm_board_detect() {
|
||||
+ local model
|
||||
+ local magic
|
||||
+
|
||||
+ magic="$(ubnt_get_mtd_part_magic)"
|
||||
+ case ${magic:0:3} in
|
||||
+ "e00"|\
|
||||
+ "e01"|\
|
||||
+ "e80")
|
||||
+ model="Ubiquiti NanoStation M"
|
||||
+ ;;
|
||||
+ "e0a")
|
||||
+ model="Ubiquiti NanoStation loco M"
|
||||
+ ;;
|
||||
+ "e1b"|\
|
||||
+ "e1d")
|
||||
+ model="Ubiquiti Rocket M"
|
||||
+ ;;
|
||||
+ "e20"|\
|
||||
+ "e2d")
|
||||
+ model="Ubiquiti Bullet M"
|
||||
+ ;;
|
||||
+ "e30")
|
||||
+ model="Ubiquiti PicoStation M"
|
||||
+ ;;
|
||||
+ esac
|
||||
+
|
||||
+ [ ! -z "$model" ] && AR71XX_MODEL="${model}${magic:3:1}"
|
||||
+}
|
||||
+
|
||||
cybertan_get_hw_magic() {
|
||||
local part
|
||||
|
||||
@@ -478,12 +512,14 @@ ar71xx_board_detect() {
|
||||
;;
|
||||
*"Bullet M")
|
||||
name="bullet-m"
|
||||
+ ubnt_xm_board_detect
|
||||
;;
|
||||
*"Loco M XW")
|
||||
name="loco-m-xw"
|
||||
;;
|
||||
*"Nanostation M")
|
||||
name="nanostation-m"
|
||||
+ ubnt_xm_board_detect
|
||||
;;
|
||||
*"Nanostation M XW")
|
||||
name="nanostation-m-xw"
|
||||
@@ -685,6 +721,7 @@ ar71xx_board_detect() {
|
||||
;;
|
||||
*"Rocket M")
|
||||
name="rocket-m"
|
||||
+ ubnt_xm_board_detect
|
||||
;;
|
||||
*"Rocket M XW")
|
||||
name="rocket-m-xw"
|
@ -1,133 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Mon, 7 Mar 2016 06:07:21 +0100
|
||||
Subject: base-files: implemented basic GPIO control
|
||||
|
||||
Internal GPIO pins are used for PoE passthrough setups in multi-port
|
||||
routers. This patch implemnets control over this hardware feature for
|
||||
Ubiquiti Nanostations and TP-Link CPE510.
|
||||
|
||||
Signed-off-by: Lars Kruse <lists@sumpfralle.de>
|
||||
|
||||
Backport of r46271
|
||||
|
||||
diff --git a/package/base-files/files/etc/init.d/gpio_switch b/package/base-files/files/etc/init.d/gpio_switch
|
||||
new file mode 100755
|
||||
index 0000000000000000000000000000000000000000..1f1b44b2129ce2315943f6a10508eefb66412c48
|
||||
--- /dev/null
|
||||
+++ b/package/base-files/files/etc/init.d/gpio_switch
|
||||
@@ -0,0 +1,42 @@
|
||||
+#!/bin/sh /etc/rc.common
|
||||
+# Copyright (C) 2015 OpenWrt.org
|
||||
+
|
||||
+START=98
|
||||
+STOP=10
|
||||
+USE_PROCD=1
|
||||
+
|
||||
+
|
||||
+load_gpio_switch()
|
||||
+{
|
||||
+ local name
|
||||
+ local gpio_pin
|
||||
+ local value
|
||||
+
|
||||
+ config_get gpio_pin "$1" gpio_pin
|
||||
+ config_get name "$1" name
|
||||
+ config_get value "$1" value 0
|
||||
+
|
||||
+ local gpio_path="/sys/class/gpio/gpio${gpio_pin}"
|
||||
+ # export GPIO pin for access
|
||||
+ [ -d "$gpio_path" ] || {
|
||||
+ echo "$gpio_pin" >/sys/class/gpio/export
|
||||
+ # we need to wait a bit until the GPIO appears
|
||||
+ [ -d "$gpio_path" ] || sleep 1
|
||||
+ echo out >"$gpio_path/direction"
|
||||
+ }
|
||||
+ # write 0 or 1 to the "value" field
|
||||
+ { [ "$value" = "0" ] && echo "0" || echo "1"; } >"$gpio_path/value"
|
||||
+}
|
||||
+
|
||||
+service_triggers()
|
||||
+{
|
||||
+ procd_add_reload_trigger "system"
|
||||
+}
|
||||
+
|
||||
+start_service()
|
||||
+{
|
||||
+ [ -e /sys/class/gpio/ ] && {
|
||||
+ config_load system
|
||||
+ config_foreach load_gpio_switch gpio_switch
|
||||
+ }
|
||||
+}
|
||||
diff --git a/package/base-files/files/lib/functions/uci-defaults.sh b/package/base-files/files/lib/functions/uci-defaults.sh
|
||||
index 5a8809d68c89ac0431919f15dad5f5c33351bbf2..6577ecdcde0c856b3e6dd1b9337f23cb782ef2be 100644
|
||||
--- a/package/base-files/files/lib/functions/uci-defaults.sh
|
||||
+++ b/package/base-files/files/lib/functions/uci-defaults.sh
|
||||
@@ -2,6 +2,7 @@
|
||||
# Copyright (C) 2011 OpenWrt.org
|
||||
|
||||
UCIDEF_LEDS_CHANGED=0
|
||||
+UCIDEF_GPIO_SWITCHES_CHANGED=0
|
||||
|
||||
ucidef_set_led_netdev() {
|
||||
local cfg="led_$1"
|
||||
@@ -180,6 +181,29 @@ ucidef_commit_leds()
|
||||
[ "$UCIDEF_LEDS_CHANGED" = "1" ] && uci commit system
|
||||
}
|
||||
|
||||
+ucidef_set_gpio_switch() {
|
||||
+ local cfg="gpio_switch_$1"
|
||||
+ local name="$2"
|
||||
+ local gpio_pin="$3"
|
||||
+ # use "0" as default value
|
||||
+ local default="${4:-0}"
|
||||
+
|
||||
+ uci -q get "system.$cfg" && return 0
|
||||
+
|
||||
+ uci batch <<EOF
|
||||
+set system.$cfg='gpio_switch'
|
||||
+set system.$cfg.name='$name'
|
||||
+set system.$cfg.gpio_pin='$gpio_pin'
|
||||
+set system.$cfg.value='$default'
|
||||
+EOF
|
||||
+ UCIDEF_GPIO_SWITCHES_CHANGED=1
|
||||
+}
|
||||
+
|
||||
+ucidef_commit_gpio_switches()
|
||||
+{
|
||||
+ [ "$UCIDEF_GPIO_SWITCHES_CHANGED" = "1" ] && uci commit system
|
||||
+}
|
||||
+
|
||||
ucidef_set_interface_loopback() {
|
||||
uci batch <<EOF
|
||||
set network.loopback='interface'
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches b/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..81d3982ed8bf98e01ce2e161017f088a1d0f60dc
|
||||
--- /dev/null
|
||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches
|
||||
@@ -0,0 +1,25 @@
|
||||
+#!/bin/sh
|
||||
+#
|
||||
+# Copyright (C) 2015 OpenWrt.org
|
||||
+#
|
||||
+
|
||||
+. /lib/functions/uci-defaults.sh
|
||||
+. /lib/ar71xx.sh
|
||||
+
|
||||
+board=$(ar71xx_board_name)
|
||||
+
|
||||
+case "$board" in
|
||||
+nanostation-m)
|
||||
+ ucidef_set_gpio_switch "poe_passthrough" "PoE Passthrough" "2"
|
||||
+ ;;
|
||||
+nanostation-m-xw)
|
||||
+ ucidef_set_gpio_switch "poe_passthrough" "PoE Passthrough" "8"
|
||||
+ ;;
|
||||
+cpe510)
|
||||
+ ucidef_set_gpio_switch "poe_passthrough" "PoE Passthrough" "20"
|
||||
+ ;;
|
||||
+esac
|
||||
+
|
||||
+ucidef_commit_gpio_switches
|
||||
+
|
||||
+exit 0
|
@ -1,32 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Mon, 7 Mar 2016 06:07:59 +0100
|
||||
Subject: ar71xx: assign proper GPIO pin for Ubiquiti Nanostation models
|
||||
|
||||
The GPIO pins for "POE passthrough" of Ubiquiti Nanostation models are the
|
||||
following:
|
||||
* Ubiquiti Nanostation M XM: Pin 8
|
||||
* Ubiquiti Nanostation M XW: Pin 2
|
||||
|
||||
The previous definition of the pins was mixed up between XM and XW model.
|
||||
|
||||
Signed-off-by: Lars Kruse <lists@sumpfralle.de>
|
||||
|
||||
Backport of r46922
|
||||
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches b/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches
|
||||
index 81d3982ed8bf98e01ce2e161017f088a1d0f60dc..b41f27554b1e3eac19c22af59731771631a1135b 100644
|
||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches
|
||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches
|
||||
@@ -10,10 +10,10 @@ board=$(ar71xx_board_name)
|
||||
|
||||
case "$board" in
|
||||
nanostation-m)
|
||||
- ucidef_set_gpio_switch "poe_passthrough" "PoE Passthrough" "2"
|
||||
+ ucidef_set_gpio_switch "poe_passthrough" "PoE Passthrough" "8"
|
||||
;;
|
||||
nanostation-m-xw)
|
||||
- ucidef_set_gpio_switch "poe_passthrough" "PoE Passthrough" "8"
|
||||
+ ucidef_set_gpio_switch "poe_passthrough" "PoE Passthrough" "2"
|
||||
;;
|
||||
cpe510)
|
||||
ucidef_set_gpio_switch "poe_passthrough" "PoE Passthrough" "20"
|
@ -1,101 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Fri, 29 Jul 2016 21:28:24 +0200
|
||||
Subject: netifd: update to latest version
|
||||
|
||||
diff --git a/package/network/config/netifd/Makefile b/package/network/config/netifd/Makefile
|
||||
index 619024bd708541dfb3bda28a963fc87a5d301a0d..dc83ca612bcd4c441e8fa0db77c98c8a1b97ad13 100644
|
||||
--- a/package/network/config/netifd/Makefile
|
||||
+++ b/package/network/config/netifd/Makefile
|
||||
@@ -1,15 +1,15 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=netifd
|
||||
-PKG_VERSION:=2015-12-16
|
||||
+PKG_VERSION:=2016-07-29
|
||||
PKG_RELEASE=$(PKG_SOURCE_VERSION)
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=http://git.openwrt.org/project/netifd.git
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
-PKG_SOURCE_VERSION:=245527193e90906451be35c2b8e972b8712ea6ab
|
||||
+PKG_SOURCE_VERSION:=656c387974879105c2aaec6b62478d0195067f2d
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
-PKG_MAINTAINER:=Felix Fietkau <nbd@openwrt.org>
|
||||
+PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||
# PKG_MIRROR_MD5SUM:=
|
||||
# CMAKE_INSTALL:=1
|
||||
|
||||
diff --git a/package/network/config/netifd/files/etc/init.d/network b/package/network/config/netifd/files/etc/init.d/network
|
||||
index 542fc08958e001c2bfce7668ecd7d1c52a649e4e..bdadbbce6db6f9383a0e2c7fab25e7f5d8823091 100755
|
||||
--- a/package/network/config/netifd/files/etc/init.d/network
|
||||
+++ b/package/network/config/netifd/files/etc/init.d/network
|
||||
@@ -21,7 +21,6 @@ start_service() {
|
||||
procd_set_param watch network.interface
|
||||
[ -e /proc/sys/kernel/core_pattern ] && {
|
||||
procd_set_param limits core="unlimited"
|
||||
- echo '/tmp/%e.%p.%s.%t.core' > /proc/sys/kernel/core_pattern
|
||||
}
|
||||
procd_close_instance
|
||||
}
|
||||
diff --git a/package/network/config/netifd/files/lib/netifd/proto/dhcp.sh b/package/network/config/netifd/files/lib/netifd/proto/dhcp.sh
|
||||
index 0e88af9e96ad85e7c51ff0b497ce71342d2d1568..1d3a2091060aac6b89d8d10f915b11b251011a85 100755
|
||||
--- a/package/network/config/netifd/files/lib/netifd/proto/dhcp.sh
|
||||
+++ b/package/network/config/netifd/files/lib/netifd/proto/dhcp.sh
|
||||
@@ -12,6 +12,7 @@ proto_dhcp_init_config() {
|
||||
proto_config_add_string clientid
|
||||
proto_config_add_string vendorid
|
||||
proto_config_add_boolean 'broadcast:bool'
|
||||
+ proto_config_add_boolean 'release:bool'
|
||||
proto_config_add_string 'reqopts:list(string)'
|
||||
proto_config_add_string iface6rd
|
||||
proto_config_add_string sendopts
|
||||
@@ -26,8 +27,8 @@ proto_dhcp_setup() {
|
||||
local config="$1"
|
||||
local iface="$2"
|
||||
|
||||
- local ipaddr hostname clientid vendorid broadcast reqopts iface6rd sendopts delegate zone6rd zone mtu6rd customroutes
|
||||
- json_get_vars ipaddr hostname clientid vendorid broadcast reqopts iface6rd sendopts delegate zone6rd zone mtu6rd customroutes
|
||||
+ local ipaddr hostname clientid vendorid broadcast release reqopts iface6rd sendopts delegate zone6rd zone mtu6rd customroutes
|
||||
+ json_get_vars ipaddr hostname clientid vendorid broadcast release reqopts iface6rd sendopts delegate zone6rd zone mtu6rd customroutes
|
||||
|
||||
local opt dhcpopts
|
||||
for opt in $reqopts; do
|
||||
@@ -39,6 +40,7 @@ proto_dhcp_setup() {
|
||||
done
|
||||
|
||||
[ "$broadcast" = 1 ] && broadcast="-B" || broadcast=
|
||||
+ [ "$release" = 1 ] && release="-R" || release=
|
||||
[ -n "$clientid" ] && clientid="-x 0x3d:${clientid//:/}" || clientid="-C"
|
||||
[ -n "$iface6rd" ] && proto_export "IFACE6RD=$iface6rd"
|
||||
[ "$iface6rd" != 0 -a -f /lib/netifd/proto/6rd.sh ] && append dhcpopts "-O 212"
|
||||
@@ -54,9 +56,9 @@ proto_dhcp_setup() {
|
||||
-s /lib/netifd/dhcp.script \
|
||||
-f -t 0 -i "$iface" \
|
||||
${ipaddr:+-r $ipaddr} \
|
||||
- ${hostname:+-H $hostname} \
|
||||
- ${vendorid:+-V $vendorid} \
|
||||
- $clientid $broadcast $dhcpopts
|
||||
+ ${hostname:+-x "hostname:$hostname"} \
|
||||
+ ${vendorid:+-V "$vendorid"} \
|
||||
+ $clientid $broadcast $release $dhcpopts
|
||||
}
|
||||
|
||||
proto_dhcp_renew() {
|
||||
diff --git a/package/network/config/netifd/files/sbin/ifup b/package/network/config/netifd/files/sbin/ifup
|
||||
index af3aaa8453ce93f52c2b89e743f43f9c509ad696..5515b91f76df2b5c36d46ac4b86dfc9bdcd78b1d 100755
|
||||
--- a/package/network/config/netifd/files/sbin/ifup
|
||||
+++ b/package/network/config/netifd/files/sbin/ifup
|
||||
@@ -67,12 +67,10 @@ if [ -n "$setup_wifi" ] && grep -sq config /etc/config/wireless; then
|
||||
fi
|
||||
}
|
||||
|
||||
- local radio_devs
|
||||
- local network="$1"
|
||||
+ network="$1"
|
||||
config_load wireless
|
||||
config_foreach find_related_radios wifi-iface
|
||||
|
||||
- local dev
|
||||
for dev in $(echo "$radio_devs" | sort -u); do
|
||||
/sbin/wifi up "$dev"
|
||||
done
|
@ -1,25 +0,0 @@
|
||||
From: Alexander Dahl <alex@netz39.de>
|
||||
Date: Thu, 17 Mar 2016 15:04:09 +0100
|
||||
Subject: x86: fix platform_export_bootpart() for Xen virtual disks
|
||||
|
||||
Virtual disk devices in a Xen virtual machine (DomU) can be /dev/xvda,
|
||||
/dev/xvdb and so on with partitions like /dev/xdva1. Devices named like
|
||||
this where not considered before. This resulted in a non working
|
||||
sysupgrade, because the boot partition could not be found.
|
||||
|
||||
Signed-off-by: Alexander Dahl <alex@netz39.de>
|
||||
Suggested-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
|
||||
diff --git a/target/linux/x86/base-files/lib/upgrade/platform.sh b/target/linux/x86/base-files/lib/upgrade/platform.sh
|
||||
index 73ab5ef0794c942495d18865fa2c2498b84e63e6..adc119c897ed840aef17c2041a48244d0922564e 100644
|
||||
--- a/target/linux/x86/base-files/lib/upgrade/platform.sh
|
||||
+++ b/target/linux/x86/base-files/lib/upgrade/platform.sh
|
||||
@@ -17,7 +17,7 @@ platform_export_bootpart() {
|
||||
PARTUUID=[a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]-02)
|
||||
uuid="${disk#PARTUUID=}"
|
||||
uuid="${uuid%-02}"
|
||||
- for disk in /dev/[hsv]d[a-z]; do
|
||||
+ for disk in /dev/[hsv]d[a-z] /dev/xvd[a-z]; do
|
||||
set -- $(dd if=$disk bs=1 skip=440 count=4 2>/dev/null | hexdump -v -e '4/1 "%02x "')
|
||||
if [ "$4$3$2$1" = "$uuid" ]; then
|
||||
export BOOTPART="${disk}1"
|
@ -1,27 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Wed, 30 Mar 2016 02:59:19 +0200
|
||||
Subject: Support LibreSSL as provider of openssl
|
||||
|
||||
The build scripts check for openssl by grepping the string "OpenSSL" in
|
||||
the output of openssl version command. LibreSSL fails this test as it
|
||||
outputs something like "LibreSSL 2.2.4". This patch fix the
|
||||
prereq-bulid.mk file so that it accepts LibreSSL as openssl provider as
|
||||
well.
|
||||
|
||||
Signed-off-by: Marek Behun <kabel@blackhole.sk>
|
||||
|
||||
Backport of r48267
|
||||
|
||||
diff --git a/include/prereq-build.mk b/include/prereq-build.mk
|
||||
index 32c4adabb748c4026d507d40769b3201e2ac5599..f36d57ce06c46be7ac33f3034ad08a3ce603089d 100644
|
||||
--- a/include/prereq-build.mk
|
||||
+++ b/include/prereq-build.mk
|
||||
@@ -151,7 +151,7 @@ $(eval $(call SetupHostCommand,file,Please install the 'file' package, \
|
||||
file --version 2>&1 | grep file))
|
||||
|
||||
$(eval $(call SetupHostCommand,openssl,Please install the 'openssl' utility, \
|
||||
- openssl version | grep OpenSSL))
|
||||
+ openssl version | grep '\(OpenSSL\|LibreSSL\)'))
|
||||
|
||||
|
||||
# Install ldconfig stub
|
@ -1,48 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Fri, 1 Apr 2016 23:16:13 +0200
|
||||
Subject: ar71xx: check both HWID and HWREV on upgrades of TP-LINK devices
|
||||
|
||||
There's no reason for us to be more lenient than the stock firmware, so
|
||||
better check the HWREV as well to avoid bricked devices.
|
||||
|
||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
|
||||
Backport of r49105
|
||||
|
||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
index 762cd760ceb9ff3917903dfd26a5a7a42175abfe..024e4930949c927efd36c3ac67cd351dcaa4bf7b 100755
|
||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
@@ -66,6 +66,10 @@ tplink_get_image_hwid() {
|
||||
get_image "$@" | dd bs=4 count=1 skip=16 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
|
||||
}
|
||||
|
||||
+tplink_get_image_mid() {
|
||||
+ get_image "$@" | dd bs=4 count=1 skip=17 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
|
||||
+}
|
||||
+
|
||||
tplink_get_image_boot_size() {
|
||||
get_image "$@" | dd bs=4 count=1 skip=37 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
|
||||
}
|
||||
@@ -373,13 +377,17 @@ platform_check_image() {
|
||||
}
|
||||
|
||||
local hwid
|
||||
- local imageid
|
||||
+ local mid
|
||||
+ local imagehwid
|
||||
+ local imagemid
|
||||
|
||||
hwid=$(tplink_get_hwid)
|
||||
- imageid=$(tplink_get_image_hwid "$1")
|
||||
+ mid=$(tplink_get_mid)
|
||||
+ imagehwid=$(tplink_get_image_hwid "$1")
|
||||
+ imagemid=$(tplink_get_image_mid "$1")
|
||||
|
||||
- [ "$hwid" != "$imageid" ] && {
|
||||
- echo "Invalid image, hardware ID mismatch, hw:$hwid image:$imageid."
|
||||
+ [ "$hwid" != "$imagehwid" -o "$mid" != "$imagemid" ] && {
|
||||
+ echo "Invalid image, hardware ID mismatch, hw:$hwid $mid image:$imagehwid $imagemid."
|
||||
return 1
|
||||
}
|
||||
|
@ -1,45 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Fri, 1 Apr 2016 23:19:16 +0200
|
||||
Subject: ar71xx: avoid AR71XX_MODEL ending with a space on some TP-LINK-like devices
|
||||
|
||||
Instead of adding the space when combining $model and $hwver, add the space
|
||||
to the beginning of $hwver, so the resulting string won't end with a space
|
||||
when $hwver is set to the empty string.
|
||||
|
||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
|
||||
Backport of r49106
|
||||
|
||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
index 0aa1c865cbdeb0624147d4117d289a640d20a5ef..96a37b4bec019d06c9283afc44b7961d150c05fb 100755
|
||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
@@ -133,7 +133,7 @@ tplink_board_detect() {
|
||||
hwid=$(tplink_get_hwid)
|
||||
mid=$(tplink_get_mid)
|
||||
hwver=${hwid:6:2}
|
||||
- hwver="v${hwver#0}"
|
||||
+ hwver=" v${hwver#0}"
|
||||
|
||||
case "$hwid" in
|
||||
"015000"*)
|
||||
@@ -196,8 +196,8 @@ tplink_board_detect() {
|
||||
"083000"*)
|
||||
model="TP-Link TL-WA830RE"
|
||||
|
||||
- if [ "$hwver" = 'v10' ]; then
|
||||
- hwver='v1'
|
||||
+ if [ "$hwver" = ' v10' ]; then
|
||||
+ hwver=' v1'
|
||||
fi
|
||||
;;
|
||||
"084100"*)
|
||||
@@ -296,7 +296,7 @@ tplink_board_detect() {
|
||||
;;
|
||||
esac
|
||||
|
||||
- AR71XX_MODEL="$model $hwver"
|
||||
+ AR71XX_MODEL="$model$hwver"
|
||||
}
|
||||
|
||||
tplink_pharos_get_model_string() {
|
@ -1,39 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Fri, 1 Apr 2016 23:21:32 +0200
|
||||
Subject: ar71xx: fix the revision of a few TP-LINK devices in AR71XX_MODEL to match labels/image names
|
||||
|
||||
Let's not confuse users about the revisions of their devices when we can
|
||||
easily avoid it.
|
||||
|
||||
Not tested on real hardware.
|
||||
|
||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
|
||||
Backport of r49107
|
||||
|
||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
index 96a37b4bec019d06c9283afc44b7961d150c05fb..6c106179bfa0c01308a03678aef1b7cf4caaf05b 100755
|
||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
@@ -162,6 +162,10 @@ tplink_board_detect() {
|
||||
;;
|
||||
"071000"*)
|
||||
model="TP-Link TL-WR710N"
|
||||
+
|
||||
+ if [ "$hwid" = '07100002' -a "$mid" = '00000002' ]; then
|
||||
+ hwver=' v2.1'
|
||||
+ fi
|
||||
;;
|
||||
"072001"*)
|
||||
model="TP-Link TL-WR720N"
|
||||
@@ -202,6 +206,10 @@ tplink_board_detect() {
|
||||
;;
|
||||
"084100"*)
|
||||
model="TP-Link TL-WR841N/ND"
|
||||
+
|
||||
+ if [ "$hwid" = '08410002' -a "$mid" = '00000002' ]; then
|
||||
+ hwver=' v1.5'
|
||||
+ fi
|
||||
;;
|
||||
"084200"*)
|
||||
model="TP-Link TL-WR842N/ND"
|
@ -1,41 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sat, 2 Apr 2016 00:56:50 +0200
|
||||
Subject: ar71xx: build image for TL-WR710N v2.1
|
||||
|
||||
This patch just extends target/linux/ar71xx/image/Makefile to build
|
||||
images also for version 2.1 of TL-WR710N
|
||||
patch against the latest git
|
||||
|
||||
Signed off by: Norbert Wegener <nw@wegener-net.de>
|
||||
|
||||
Backport of r47849
|
||||
|
||||
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
|
||||
index a8073f2ecadce8404dde77278302202fe494cd75..0783381baeddef2064df8faff89c49c2bed6a28b 100644
|
||||
--- a/target/linux/ar71xx/image/Makefile
|
||||
+++ b/target/linux/ar71xx/image/Makefile
|
||||
@@ -476,6 +476,15 @@ define Device/tl-wr710n-v2
|
||||
CONSOLE := ttyATH0,115200
|
||||
endef
|
||||
|
||||
+define Device/tl-wr710n-v2.1
|
||||
+ $(Device/tplink-8mlzma)
|
||||
+ BOARDNAME := TL-WR710N
|
||||
+ DEVICE_PROFILE := TLWR710
|
||||
+ TPLINK_HWID := 0x07100002
|
||||
+ TPLINK_HWREV := 0x00000002
|
||||
+ CONSOLE := ttyATH0,115200
|
||||
+endef
|
||||
+
|
||||
define Device/tl-wr720n-v3
|
||||
$(Device/tplink-4mlzma)
|
||||
BOARDNAME := TL-WR720N-v3
|
||||
@@ -491,7 +500,7 @@ define Device/tl-wr720n-v4
|
||||
TPLINK_HWID := 0x07200104
|
||||
CONSOLE := ttyATH0,115200
|
||||
endef
|
||||
-TARGET_DEVICES += tl-wr703n-v1 tl-wr710n-v1 tl-wr710n-v2 tl-wr720n-v3 tl-wr720n-v4
|
||||
+TARGET_DEVICES += tl-wr703n-v1 tl-wr710n-v1 tl-wr710n-v2 tl-wr710n-v2.1 tl-wr720n-v3 tl-wr720n-v4
|
||||
|
||||
define Device/tl-wr740n-v4
|
||||
$(Device/tplink-4mlzma)
|
File diff suppressed because it is too large
Load Diff
@ -1,81 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sun, 24 Apr 2016 08:44:30 +0200
|
||||
Subject: tools: add tar host build, required for --sort=name which was only added in the latest version
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
||||
|
||||
Backport of r46876
|
||||
|
||||
diff --git a/tools/Makefile b/tools/Makefile
|
||||
index c6cded8eccd81c422f99e7ee50754c4bc66decc7..98ce8c5f1577981136b277a800a3edd5edd4941e 100644
|
||||
--- a/tools/Makefile
|
||||
+++ b/tools/Makefile
|
||||
@@ -81,6 +81,9 @@ endif
|
||||
# dependency for tools which have patches directory
|
||||
$(foreach tool, $(tools-y), $(if $(wildcard $(curdir)/$(tool)/patches),$(eval $(curdir)/$(tool)/compile += $(curdir)/patch/install)))
|
||||
|
||||
+$(foreach tool, $(tools-y), $(eval $(curdir)/$(tool)/compile += $(curdir)/tar/install))
|
||||
+tools-y += tar
|
||||
+
|
||||
$(curdir)/builddirs := $(tools-y) $(tools-dep) $(tools-)
|
||||
$(curdir)/builddirs-default := $(tools-y)
|
||||
|
||||
diff --git a/tools/tar/Makefile b/tools/tar/Makefile
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..975e7835ef09131326ef10a7951c3866d6050801
|
||||
--- /dev/null
|
||||
+++ b/tools/tar/Makefile
|
||||
@@ -0,0 +1,30 @@
|
||||
+#
|
||||
+# Copyright (C) 2015 OpenWrt.org
|
||||
+#
|
||||
+# This is free software, licensed under the GNU General Public License v2.
|
||||
+# See /LICENSE for more information.
|
||||
+#
|
||||
+include $(TOPDIR)/rules.mk
|
||||
+
|
||||
+PKG_NAME:=tar
|
||||
+PKG_VERSION:=1.28
|
||||
+
|
||||
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||
+PKG_SOURCE_URL:=@GNU/tar
|
||||
+PKG_MD5SUM:=49b6306167724fe48f419a33a5beb857
|
||||
+
|
||||
+HOST_BUILD_PARALLEL := 1
|
||||
+
|
||||
+include $(INCLUDE_DIR)/host-build.mk
|
||||
+
|
||||
+HOSTCC := $(HOSTCC_NOCACHE)
|
||||
+HOSTCXX := $(HOSTCXX_NOCACHE)
|
||||
+
|
||||
+HOST_CONFIGURE_ARGS += \
|
||||
+ --without-posix-acls \
|
||||
+ --without-selinux \
|
||||
+ --without-xattrs \
|
||||
+ --disable-acl \
|
||||
+ --disable-nls
|
||||
+
|
||||
+$(eval $(call HostBuild))
|
||||
diff --git a/tools/tar/patches/100-fix_xattr_disable.patch b/tools/tar/patches/100-fix_xattr_disable.patch
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..5735bd2364a4f324b54a3a49826921ead905d06f
|
||||
--- /dev/null
|
||||
+++ b/tools/tar/patches/100-fix_xattr_disable.patch
|
||||
@@ -0,0 +1,17 @@
|
||||
+--- a/lib/xattr-at.c
|
||||
++++ b/lib/xattr-at.c
|
||||
+@@ -18,6 +18,8 @@
|
||||
+
|
||||
+ #include <config.h>
|
||||
+
|
||||
++#ifdef HAVE_XATTRS
|
||||
++
|
||||
+ #include "xattr-at.h"
|
||||
+ #include "openat.h"
|
||||
+
|
||||
+@@ -108,3 +110,5 @@
|
||||
+ #undef AT_FUNC_RESULT
|
||||
+ #undef AT_FUNC_POST_FILE_PARAM_DECLS
|
||||
+ #undef AT_FUNC_POST_FILE_ARGS
|
||||
++
|
||||
++#endif
|
@ -1,31 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sun, 24 Apr 2016 08:44:47 +0200
|
||||
Subject: tools: compile flock before everything else
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
||||
|
||||
Backport of r48413
|
||||
|
||||
diff --git a/tools/Makefile b/tools/Makefile
|
||||
index 98ce8c5f1577981136b277a800a3edd5edd4941e..3402c08d5c6729a510446a3e9cf586f2d8e15be4 100644
|
||||
--- a/tools/Makefile
|
||||
+++ b/tools/Makefile
|
||||
@@ -26,7 +26,7 @@ endif
|
||||
tools-$(BUILD_TOOLCHAIN) += gmp mpfr mpc libelf
|
||||
tools-y += m4 libtool autoconf automake flex bison pkg-config sed mklibs
|
||||
tools-y += sstrip make-ext4fs e2fsprogs mtd-utils mkimage
|
||||
-tools-y += firmware-utils patch-image patch quilt yaffs2 flock padjffs2
|
||||
+tools-y += firmware-utils patch-image patch quilt yaffs2 padjffs2
|
||||
tools-y += mm-macros missing-macros xz cmake scons bc findutils gengetopt patchelf
|
||||
tools-$(CONFIG_TARGET_orion_generic) += wrt350nv2-builder upslug2
|
||||
tools-$(CONFIG_powerpc) += upx
|
||||
@@ -84,6 +84,9 @@ $(foreach tool, $(tools-y), $(if $(wildcard $(curdir)/$(tool)/patches),$(eval $(
|
||||
$(foreach tool, $(tools-y), $(eval $(curdir)/$(tool)/compile += $(curdir)/tar/install))
|
||||
tools-y += tar
|
||||
|
||||
+$(curdir)/tar/compile := $(curdir)/flock/install
|
||||
+tools-y += flock
|
||||
+
|
||||
$(curdir)/builddirs := $(tools-y) $(tools-dep) $(tools-)
|
||||
$(curdir)/builddirs-default := $(tools-y)
|
||||
|
@ -1,32 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sun, 24 Apr 2016 08:45:44 +0200
|
||||
Subject: rules.mk: make the locked template available even if flock has not been built yet (fall back to unlocked shell command)
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
||||
|
||||
Backport of r48414
|
||||
|
||||
diff --git a/rules.mk b/rules.mk
|
||||
index 9d0134d2b26a52b74d30546cc3d51f7e71d1bc75..ece502609bd08af21be782a706f0bf6599895568 100644
|
||||
--- a/rules.mk
|
||||
+++ b/rules.mk
|
||||
@@ -310,12 +310,16 @@ endef
|
||||
# Execute commands under flock
|
||||
# $(1) => The shell expression.
|
||||
# $(2) => The lock name. If not given, the global lock will be used.
|
||||
-define locked
|
||||
+ifneq ($(wildcard $(STAGING_DIR_HOST)/bin/flock),)
|
||||
+ define locked
|
||||
SHELL= \
|
||||
- $(STAGING_DIR_HOST)/bin/flock \
|
||||
+ flock \
|
||||
$(TMP_DIR)/.$(if $(2),$(strip $(2)),global).flock \
|
||||
-c '$(subst ','\'',$(1))'
|
||||
-endef
|
||||
+ endef
|
||||
+else
|
||||
+ locked=$(1)
|
||||
+endif
|
||||
|
||||
# Recursively copy paths into another directory, purge dangling
|
||||
# symlinks before.
|
@ -1,20 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sun, 24 Apr 2016 08:48:45 +0200
|
||||
Subject: build: add locking for downloads (fixes race conditions with multiple variants)
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
||||
|
||||
Backport of r48416
|
||||
|
||||
diff --git a/include/download.mk b/include/download.mk
|
||||
index e518cce4b2793152b7f4ef92509f2be07fb5cd62..9176b11c836123a37533c3d6cbaa2650a4f7c73d 100644
|
||||
--- a/include/download.mk
|
||||
+++ b/include/download.mk
|
||||
@@ -182,6 +182,6 @@ define Download
|
||||
|
||||
$(DL_DIR)/$(FILE):
|
||||
mkdir -p $(DL_DIR)
|
||||
- $(if $(DownloadMethod/$(call dl_method,$(URL),$(PROTO))),$(DownloadMethod/$(call dl_method,$(URL),$(PROTO))),$(DownloadMethod/unknown))
|
||||
+ $(call locked,$(if $(DownloadMethod/$(call dl_method,$(URL),$(PROTO))),$(DownloadMethod/$(call dl_method,$(URL),$(PROTO))),$(DownloadMethod/unknown)),$(FILE))
|
||||
|
||||
endef
|
@ -1,26 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sun, 24 Apr 2016 08:49:27 +0200
|
||||
Subject: download.mk: fix packed checkout mirroring support
|
||||
|
||||
Changeset r48416 broke the downloading of mirrored, packed scm checkouts.
|
||||
|
||||
Fix this by removing the "@" sign in front of the download command which is
|
||||
now executed as part of a larger shell command under flock.
|
||||
|
||||
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
|
||||
|
||||
Backport of r48733
|
||||
|
||||
diff --git a/include/download.mk b/include/download.mk
|
||||
index 9176b11c836123a37533c3d6cbaa2650a4f7c73d..130bbc57ba89b4ad0b8e8600f45bf553ad6ecfa1 100644
|
||||
--- a/include/download.mk
|
||||
+++ b/include/download.mk
|
||||
@@ -48,7 +48,7 @@ define DownloadMethod/default
|
||||
endef
|
||||
|
||||
define wrap_mirror
|
||||
- $(if $(if $(MIRROR),$(filter-out x,$(MIRROR_MD5SUM))),@$(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "$(MIRROR_MD5SUM)" "" || ( $(1) ),$(1))
|
||||
+$(if $(if $(MIRROR),$(filter-out x,$(MIRROR_MD5SUM))),$(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "$(MIRROR_MD5SUM)" "" || ( $(1) ),$(1))
|
||||
endef
|
||||
|
||||
define DownloadMethod/cvs
|
File diff suppressed because it is too large
Load Diff
@ -1,115 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sat, 7 May 2016 00:17:55 +0200
|
||||
Subject: kernel: mtd: spi-nor: wait until status register writes are ready
|
||||
|
||||
diff --git a/target/linux/generic/patches-3.18/094-0001-mtd-spi-nor-wait-until-lock-unlock-operations-are-re.patch b/target/linux/generic/patches-3.18/094-0001-mtd-spi-nor-wait-until-lock-unlock-operations-are-re.patch
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..2c2e5f32259416f0cc7f342e420ffbd32c139d97
|
||||
--- /dev/null
|
||||
+++ b/target/linux/generic/patches-3.18/094-0001-mtd-spi-nor-wait-until-lock-unlock-operations-are-re.patch
|
||||
@@ -0,0 +1,66 @@
|
||||
+From 32321e950d8a237d7e8f3a9b76220007dfa87544 Mon Sep 17 00:00:00 2001
|
||||
+Message-Id: <32321e950d8a237d7e8f3a9b76220007dfa87544.1462572686.git.mschiffer@universe-factory.net>
|
||||
+From: =?UTF-8?q?Ezequiel=20Garc=C3=ADa?= <ezequiel@vanguardiasur.com.ar>
|
||||
+Date: Mon, 28 Dec 2015 17:54:51 -0300
|
||||
+Subject: [PATCH] mtd: spi-nor: wait until lock/unlock operations are ready
|
||||
+
|
||||
+On Micron and Numonyx devices, the status register write command
|
||||
+(WRSR), raises a work-in-progress bit (WIP) on the status register.
|
||||
+The datasheets for these devices specify that while the status
|
||||
+register write is in progress, the status register WIP bit can still
|
||||
+be read to check the end of the operation.
|
||||
+
|
||||
+This commit adds a wait_till_ready call on lock/unlock operations,
|
||||
+which is required for Micron and Numonyx but should be harmless for
|
||||
+others. This is needed to prevent applications from issuing erase or
|
||||
+program operations before the unlock operation is completed.
|
||||
+
|
||||
+Reported-by: Stas Sergeev <stsp@list.ru>
|
||||
+Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
|
||||
+Signed-off-by: Brian Norris <computersforpeace@gmail.com>
|
||||
+---
|
||||
+ drivers/mtd/spi-nor/spi-nor.c | 12 ++++++++++--
|
||||
+ 1 file changed, 10 insertions(+), 2 deletions(-)
|
||||
+
|
||||
+--- a/drivers/mtd/spi-nor/spi-nor.c
|
||||
++++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||
+@@ -462,6 +462,7 @@ static int stm_lock(struct spi_nor *nor,
|
||||
+ u8 status_old, status_new;
|
||||
+ u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
|
||||
+ u8 shift = ffs(mask) - 1, pow, val;
|
||||
++ int ret;
|
||||
+
|
||||
+ status_old = read_sr(nor);
|
||||
+
|
||||
+@@ -498,7 +499,10 @@ static int stm_lock(struct spi_nor *nor,
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ write_enable(nor);
|
||||
+- return write_sr(nor, status_new);
|
||||
++ ret = write_sr(nor, status_new);
|
||||
++ if (ret)
|
||||
++ return ret;
|
||||
++ return spi_nor_wait_till_ready(nor);
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+@@ -512,6 +516,7 @@ static int stm_unlock(struct spi_nor *no
|
||||
+ uint8_t status_old, status_new;
|
||||
+ u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
|
||||
+ u8 shift = ffs(mask) - 1, pow, val;
|
||||
++ int ret;
|
||||
+
|
||||
+ status_old = read_sr(nor);
|
||||
+
|
||||
+@@ -546,7 +551,10 @@ static int stm_unlock(struct spi_nor *no
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ write_enable(nor);
|
||||
+- return write_sr(nor, status_new);
|
||||
++ ret = write_sr(nor, status_new);
|
||||
++ if (ret)
|
||||
++ return ret;
|
||||
++ return spi_nor_wait_till_ready(nor);
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
diff --git a/target/linux/generic/patches-3.18/094-0002-mtd-spi-nor-wait-for-SR_WIP-to-clear-on-initial-unlo.patch b/target/linux/generic/patches-3.18/094-0002-mtd-spi-nor-wait-for-SR_WIP-to-clear-on-initial-unlo.patch
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..a0573d5aea939c965cb44b2e72a2b7d498b0a5cd
|
||||
--- /dev/null
|
||||
+++ b/target/linux/generic/patches-3.18/094-0002-mtd-spi-nor-wait-for-SR_WIP-to-clear-on-initial-unlo.patch
|
||||
@@ -0,0 +1,33 @@
|
||||
+From edf891ef9ab773363f8e58022a26d7d31604aed6 Mon Sep 17 00:00:00 2001
|
||||
+Message-Id: <edf891ef9ab773363f8e58022a26d7d31604aed6.1462572703.git.mschiffer@universe-factory.net>
|
||||
+From: Brian Norris <computersforpeace@gmail.com>
|
||||
+Date: Fri, 29 Jan 2016 11:25:30 -0800
|
||||
+Subject: [PATCH] mtd: spi-nor: wait for SR_WIP to clear on initial unlock
|
||||
+
|
||||
+Fixup a piece leftover by commit 32321e950d8a ("mtd: spi-nor: wait until
|
||||
+lock/unlock operations are ready"). That commit made us wait for the WIP
|
||||
+bit to settle after lock/unlock operations, but it missed the open-coded
|
||||
+"unlock" that happens at probe() time.
|
||||
+
|
||||
+We should probably have this code utilize the unlock() routines in the
|
||||
+future, to avoid duplication, but unfortunately, flash which need to be
|
||||
+unlocked don't all have a proper ->flash_unlock() callback.
|
||||
+
|
||||
+Signed-off-by: Brian Norris <computersforpeace@gmail.com>
|
||||
+Cc: Stas Sergeev <stsp@users.sourceforge.net>
|
||||
+Reviewed-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
|
||||
+Tested-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
|
||||
+---
|
||||
+ drivers/mtd/spi-nor/spi-nor.c | 1 +
|
||||
+ 1 file changed, 1 insertion(+)
|
||||
+
|
||||
+--- a/drivers/mtd/spi-nor/spi-nor.c
|
||||
++++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||
+@@ -1167,6 +1167,7 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||
+ JEDEC_MFR(info) == SNOR_MFR_SST) {
|
||||
+ write_enable(nor);
|
||||
+ write_sr(nor, 0);
|
||||
++ spi_nor_wait_till_ready(nor);
|
||||
+ }
|
||||
+
|
||||
+ if (!mtd->name)
|
@ -1,56 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sat, 7 May 2016 00:29:06 +0200
|
||||
Subject: kernel: mtd: spi-nor: unlock Winbond flashs
|
||||
|
||||
diff --git a/target/linux/generic/patches-3.18/463-Revert-mtd-spi-nor-fix-Spansion-regressions-aliased-.patch b/target/linux/generic/patches-3.18/463-Revert-mtd-spi-nor-fix-Spansion-regressions-aliased-.patch
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..4682b7a77b160a0814012d26f0edf1a7bfaf5312
|
||||
--- /dev/null
|
||||
+++ b/target/linux/generic/patches-3.18/463-Revert-mtd-spi-nor-fix-Spansion-regressions-aliased-.patch
|
||||
@@ -0,0 +1,46 @@
|
||||
+From 20bbd73b6b04677a73933830363ab3178adc2ce9 Mon Sep 17 00:00:00 2001
|
||||
+Message-Id: <20bbd73b6b04677a73933830363ab3178adc2ce9.1462573588.git.mschiffer@universe-factory.net>
|
||||
+From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
+Date: Sat, 7 May 2016 00:26:23 +0200
|
||||
+Subject: [PATCH] Revert "mtd: spi-nor: fix Spansion regressions (aliased with
|
||||
+ Winbond)"
|
||||
+
|
||||
+This reverts commit 67b9bcd36906e12a15ffec19463afbbd6a41660e.
|
||||
+---
|
||||
+ drivers/mtd/spi-nor/spi-nor.c | 6 ++++--
|
||||
+ include/linux/mtd/spi-nor.h | 2 +-
|
||||
+ 2 files changed, 5 insertions(+), 3 deletions(-)
|
||||
+
|
||||
+--- a/drivers/mtd/spi-nor/spi-nor.c
|
||||
++++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||
+@@ -1165,7 +1165,8 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||
+ if (JEDEC_MFR(info) == SNOR_MFR_ATMEL ||
|
||||
+ JEDEC_MFR(info) == SNOR_MFR_INTEL ||
|
||||
+ JEDEC_MFR(info) == SNOR_MFR_MACRONIX ||
|
||||
+- JEDEC_MFR(info) == SNOR_MFR_SST) {
|
||||
++ JEDEC_MFR(info) == SNOR_MFR_SST ||
|
||||
++ JEDEC_MFR(info) == SNOR_MFR_WINBOND) {
|
||||
+ write_enable(nor);
|
||||
+ write_sr(nor, 0);
|
||||
+ spi_nor_wait_till_ready(nor);
|
||||
+@@ -1182,7 +1183,8 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||
+ mtd->_read = spi_nor_read;
|
||||
+
|
||||
+ /* NOR protection support for STmicro/Micron chips and similar */
|
||||
+- if (JEDEC_MFR(info) == SNOR_MFR_MICRON) {
|
||||
++ if (JEDEC_MFR(info) == SNOR_MFR_MICRON ||
|
||||
++ JEDEC_MFR(info) == SNOR_MFR_WINBOND) {
|
||||
+ nor->flash_lock = stm_lock;
|
||||
+ nor->flash_unlock = stm_unlock;
|
||||
+ nor->flash_is_locked = stm_is_locked;
|
||||
+--- a/include/linux/mtd/spi-nor.h
|
||||
++++ b/include/linux/mtd/spi-nor.h
|
||||
+@@ -25,7 +25,7 @@
|
||||
+ #define SNOR_MFR_MACRONIX CFI_MFR_MACRONIX
|
||||
+ #define SNOR_MFR_SPANSION CFI_MFR_AMD
|
||||
+ #define SNOR_MFR_SST CFI_MFR_SST
|
||||
+-#define SNOR_MFR_WINBOND 0xef /* Also used by some Spansion */
|
||||
++#define SNOR_MFR_WINBOND 0xef
|
||||
+
|
||||
+ /*
|
||||
+ * Note on opcode nomenclature: some opcodes have a format like
|
@ -1,46 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Fri, 13 May 2016 20:59:44 +0200
|
||||
Subject: ath79: dev-eth: fix QCA9561 set phy interface mode and mask
|
||||
|
||||
QCA9563 and QCA9561 are two series of Qualcomm SoC Dragonfly. The only different
|
||||
is QCA9563 w/o internal switch. It has one GMAC with SGMII interface. But they
|
||||
have the same device ID(0x1150). So they share the same codes.
|
||||
|
||||
Signed-off-by: Miaoqing Pan <miaoqing@codeaurora.org>
|
||||
|
||||
Backport of OpenWrt r46971
|
||||
|
||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c
|
||||
index ff94e2ec3733b9473c4c3191cb47bd4ba8ac784d..31d24388d274b92e01642ad6d7f59d22f80dc2a6 100644
|
||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c
|
||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c
|
||||
@@ -633,7 +633,6 @@ static int __init ath79_setup_phy_if_mode(unsigned int id,
|
||||
case ATH79_SOC_AR9330:
|
||||
case ATH79_SOC_AR9331:
|
||||
case ATH79_SOC_QCA9533:
|
||||
- case ATH79_SOC_QCA9561:
|
||||
case ATH79_SOC_TP9343:
|
||||
pdata->phy_if_mode = PHY_INTERFACE_MODE_MII;
|
||||
break;
|
||||
@@ -667,6 +666,11 @@ static int __init ath79_setup_phy_if_mode(unsigned int id,
|
||||
}
|
||||
break;
|
||||
|
||||
+ case ATH79_SOC_QCA9561:
|
||||
+ if (!pdata->phy_if_mode)
|
||||
+ pdata->phy_if_mode = PHY_INTERFACE_MODE_MII;
|
||||
+ break;
|
||||
+
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
@@ -1035,7 +1039,8 @@ void __init ath79_register_eth(unsigned int id)
|
||||
AR933X_RESET_GE0_MDIO;
|
||||
pdata->set_speed = ath79_set_speed_dummy;
|
||||
|
||||
- pdata->phy_mask = BIT(4);
|
||||
+ if (!pdata->phy_mask)
|
||||
+ pdata->phy_mask = BIT(4);
|
||||
} else {
|
||||
pdata->reset_bit = AR933X_RESET_GE1_MAC |
|
||||
AR933X_RESET_GE1_MDIO;
|
@ -1,33 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Fri, 13 May 2016 22:58:50 +0200
|
||||
Subject: ar71xx: use correct PLL configuration register bitmask for QCA956x SoC.
|
||||
|
||||
Incorrect value causes clock inaccuracy as huge as 1/60.
|
||||
|
||||
Signed-off-by: Dmitry Ivanov <dima@ubnt.com>
|
||||
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
||||
|
||||
Backport of OpenWrt r47363
|
||||
|
||||
diff --git a/target/linux/ar71xx/patches-3.18/735-MIPS-ath79-add-support-for-QCA956x-SoC.patch b/target/linux/ar71xx/patches-3.18/735-MIPS-ath79-add-support-for-QCA956x-SoC.patch
|
||||
index 0da81426ca7b1b1db46e869745f0ed00496bef78..2bb4286e5d805ff3c47486a1f091d2b5e6d78373 100644
|
||||
--- a/target/linux/ar71xx/patches-3.18/735-MIPS-ath79-add-support-for-QCA956x-SoC.patch
|
||||
+++ b/target/linux/ar71xx/patches-3.18/735-MIPS-ath79-add-support-for-QCA956x-SoC.patch
|
||||
@@ -529,7 +529,7 @@
|
||||
+#define QCA956X_PLL_CPU_CONFIG1_NFRAC_L_SHIFT 0
|
||||
+#define QCA956X_PLL_CPU_CONFIG1_NFRAC_L_MASK 0x1f
|
||||
+#define QCA956X_PLL_CPU_CONFIG1_NFRAC_H_SHIFT 5
|
||||
-+#define QCA956X_PLL_CPU_CONFIG1_NFRAC_H_MASK 0x3fff
|
||||
++#define QCA956X_PLL_CPU_CONFIG1_NFRAC_H_MASK 0x1fff
|
||||
+#define QCA956X_PLL_CPU_CONFIG1_NINT_SHIFT 18
|
||||
+#define QCA956X_PLL_CPU_CONFIG1_NINT_MASK 0x1ff
|
||||
+
|
||||
@@ -541,7 +541,7 @@
|
||||
+#define QCA956X_PLL_DDR_CONFIG1_NFRAC_L_SHIFT 0
|
||||
+#define QCA956X_PLL_DDR_CONFIG1_NFRAC_L_MASK 0x1f
|
||||
+#define QCA956X_PLL_DDR_CONFIG1_NFRAC_H_SHIFT 5
|
||||
-+#define QCA956X_PLL_DDR_CONFIG1_NFRAC_H_MASK 0x3fff
|
||||
++#define QCA956X_PLL_DDR_CONFIG1_NFRAC_H_MASK 0x1fff
|
||||
+#define QCA956X_PLL_DDR_CONFIG1_NINT_SHIFT 18
|
||||
+#define QCA956X_PLL_DDR_CONFIG1_NINT_MASK 0x1ff
|
||||
+
|
@ -1,415 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Fri, 13 May 2016 22:18:40 +0200
|
||||
Subject: ar71xx: update QCA956x support
|
||||
|
||||
- separate qca956x and tp9343 (they use different IDs)
|
||||
- rename qca9561->qca956x for consistency
|
||||
- add missing bits (device reset, gpio output select)
|
||||
- fix wmac setup
|
||||
|
||||
Signed-off-by: Roman Yeryomin <roman@advem.lv>
|
||||
|
||||
Backport of OpenWrt r47981
|
||||
|
||||
diff --git a/target/linux/ar71xx/patches-3.18/735-MIPS-ath79-add-support-for-QCA956x-SoC.patch b/target/linux/ar71xx/patches-3.18/735-MIPS-ath79-add-support-for-QCA956x-SoC.patch
|
||||
index 2bb4286e5d805ff3c47486a1f091d2b5e6d78373..61b897690a03fd46d2ea95451a09598b272266f9 100644
|
||||
--- a/target/linux/ar71xx/patches-3.18/735-MIPS-ath79-add-support-for-QCA956x-SoC.patch
|
||||
+++ b/target/linux/ar71xx/patches-3.18/735-MIPS-ath79-add-support-for-QCA956x-SoC.patch
|
||||
@@ -105,7 +105,7 @@
|
||||
qca953x_clocks_init();
|
||||
else if (soc_is_qca955x())
|
||||
qca955x_clocks_init();
|
||||
-+ else if (soc_is_qca956x())
|
||||
++ else if (soc_is_qca956x() || soc_is_tp9343())
|
||||
+ qca956x_clocks_init();
|
||||
else
|
||||
BUG();
|
||||
@@ -116,7 +116,7 @@
|
||||
reg = QCA953X_RESET_REG_RESET_MODULE;
|
||||
else if (soc_is_qca955x())
|
||||
reg = QCA955X_RESET_REG_RESET_MODULE;
|
||||
-+ else if (soc_is_qca956x())
|
||||
++ else if (soc_is_qca956x() || soc_is_tp9343())
|
||||
+ reg = QCA956X_RESET_REG_RESET_MODULE;
|
||||
else
|
||||
panic("Reset register not defined for this SOC");
|
||||
@@ -125,20 +125,30 @@
|
||||
reg = QCA953X_RESET_REG_RESET_MODULE;
|
||||
else if (soc_is_qca955x())
|
||||
reg = QCA955X_RESET_REG_RESET_MODULE;
|
||||
-+ else if (soc_is_qca956x())
|
||||
++ else if (soc_is_qca956x() || soc_is_tp9343())
|
||||
+ reg = QCA956X_RESET_REG_RESET_MODULE;
|
||||
else
|
||||
panic("Reset register not defined for this SOC");
|
||||
|
||||
+@@ -133,6 +137,8 @@ u32 ath79_device_reset_get(u32 mask)
|
||||
+ reg = AR933X_RESET_REG_RESET_MODULE;
|
||||
+ else if (soc_is_ar934x())
|
||||
+ reg = AR934X_RESET_REG_RESET_MODULE;
|
||||
++ else if (soc_is_qca956x() || soc_is_tp9343())
|
||||
++ reg = QCA956X_RESET_REG_RESET_MODULE;
|
||||
+ else
|
||||
+ BUG();
|
||||
+
|
||||
--- a/arch/mips/ath79/dev-common.c
|
||||
+++ b/arch/mips/ath79/dev-common.c
|
||||
-@@ -94,7 +94,8 @@ void __init ath79_register_uart(void)
|
||||
+@@ -94,7 +94,9 @@ void __init ath79_register_uart(void)
|
||||
soc_is_ar913x() ||
|
||||
soc_is_ar934x() ||
|
||||
soc_is_qca953x() ||
|
||||
- soc_is_qca955x()) {
|
||||
+ soc_is_qca955x() ||
|
||||
-+ soc_is_qca956x()) {
|
||||
++ soc_is_qca956x() ||
|
||||
++ soc_is_tp9343()) {
|
||||
ath79_uart_data[0].uartclk = uart_clk_rate;
|
||||
platform_device_register(&ath79_uart_device);
|
||||
} else if (soc_is_ar933x()) {
|
||||
@@ -168,14 +178,14 @@
|
||||
qca953x_usb_setup();
|
||||
else if (soc_is_qca955x())
|
||||
qca955x_usb_setup();
|
||||
-+ else if (soc_is_qca9561())
|
||||
++ else if (soc_is_qca956x())
|
||||
+ qca956x_usb_setup();
|
||||
else
|
||||
BUG();
|
||||
}
|
||||
--- a/arch/mips/ath79/dev-wmac.c
|
||||
+++ b/arch/mips/ath79/dev-wmac.c
|
||||
-@@ -189,6 +189,24 @@ static void qca955x_wmac_setup(void)
|
||||
+@@ -189,6 +189,26 @@ static void qca955x_wmac_setup(void)
|
||||
ath79_wmac_data.is_clk_25mhz = true;
|
||||
}
|
||||
|
||||
@@ -195,16 +205,18 @@
|
||||
+ ath79_wmac_data.is_clk_25mhz = false;
|
||||
+ else
|
||||
+ ath79_wmac_data.is_clk_25mhz = true;
|
||||
++
|
||||
++ ath79_wmac_data.get_mac_revision = ar93xx_get_soc_revision;
|
||||
+}
|
||||
+
|
||||
static bool __init
|
||||
ar93xx_wmac_otp_read_word(void __iomem *base, int addr, u32 *data)
|
||||
{
|
||||
-@@ -392,6 +410,8 @@ void __init ath79_register_wmac(u8 *cal_
|
||||
+@@ -392,6 +412,8 @@ void __init ath79_register_wmac(u8 *cal_
|
||||
qca953x_wmac_setup();
|
||||
else if (soc_is_qca955x())
|
||||
qca955x_wmac_setup();
|
||||
-+ else if (soc_is_qca956x())
|
||||
++ else if (soc_is_qca956x() || soc_is_tp9343())
|
||||
+ qca956x_wmac_setup();
|
||||
else
|
||||
BUG();
|
||||
@@ -216,27 +228,38 @@
|
||||
case REV_ID_MAJOR_QCA9556:
|
||||
case REV_ID_MAJOR_QCA9558:
|
||||
+ case REV_ID_MAJOR_TP9343:
|
||||
-+ case REV_ID_MAJOR_QCA9561:
|
||||
++ case REV_ID_MAJOR_QCA956X:
|
||||
_prom_putchar = prom_putchar_ar71xx;
|
||||
break;
|
||||
|
||||
--- a/arch/mips/ath79/gpio.c
|
||||
+++ b/arch/mips/ath79/gpio.c
|
||||
-@@ -148,7 +148,8 @@ static void __iomem *ath79_gpio_get_func
|
||||
+@@ -148,7 +148,10 @@ static void __iomem *ath79_gpio_get_func
|
||||
soc_is_ar913x() ||
|
||||
soc_is_ar933x())
|
||||
reg = AR71XX_GPIO_REG_FUNC;
|
||||
- else if (soc_is_ar934x() || soc_is_qca953x())
|
||||
+ else if (soc_is_ar934x() ||
|
||||
-+ soc_is_qca953x() || soc_is_qca956x())
|
||||
++ soc_is_qca953x() ||
|
||||
++ soc_is_qca956x() ||
|
||||
++ soc_is_tp9343())
|
||||
reg = AR934X_GPIO_REG_FUNC;
|
||||
else
|
||||
BUG();
|
||||
-@@ -228,12 +229,15 @@ void __init ath79_gpio_init(void)
|
||||
+@@ -187,7 +190,7 @@ void __init ath79_gpio_output_select(uns
|
||||
+ unsigned int reg;
|
||||
+ u32 t, s;
|
||||
+
|
||||
+- BUG_ON(!soc_is_ar934x() && !soc_is_qca953x());
|
||||
++ BUG_ON(!soc_is_ar934x() && !soc_is_qca953x() && !soc_is_qca956x());
|
||||
+
|
||||
+ if (gpio >= AR934X_GPIO_COUNT)
|
||||
+ return;
|
||||
+@@ -228,12 +231,15 @@ void __init ath79_gpio_init(void)
|
||||
ath79_gpio_count = QCA953X_GPIO_COUNT;
|
||||
else if (soc_is_qca955x())
|
||||
ath79_gpio_count = QCA955X_GPIO_COUNT;
|
||||
-+ else if (soc_is_qca956x())
|
||||
++ else if (soc_is_qca956x() || soc_is_tp9343())
|
||||
+ ath79_gpio_count = QCA956X_GPIO_COUNT;
|
||||
else
|
||||
BUG();
|
||||
@@ -245,23 +268,24 @@
|
||||
ath79_gpio_chip.ngpio = ath79_gpio_count;
|
||||
- if (soc_is_ar934x() || soc_is_qca953x() || soc_is_qca955x()) {
|
||||
+ if (soc_is_ar934x() || soc_is_qca953x() || soc_is_qca955x() ||
|
||||
-+ soc_is_qca956x()) {
|
||||
++ soc_is_qca956x() || soc_is_tp9343()) {
|
||||
ath79_gpio_chip.direction_input = ar934x_gpio_direction_input;
|
||||
ath79_gpio_chip.direction_output = ar934x_gpio_direction_output;
|
||||
}
|
||||
--- a/arch/mips/ath79/irq.c
|
||||
+++ b/arch/mips/ath79/irq.c
|
||||
-@@ -107,7 +107,8 @@ static void __init ath79_misc_irq_init(v
|
||||
+@@ -107,7 +107,9 @@ static void __init ath79_misc_irq_init(v
|
||||
soc_is_ar933x() ||
|
||||
soc_is_ar934x() ||
|
||||
soc_is_qca953x() ||
|
||||
- soc_is_qca955x())
|
||||
+ soc_is_qca955x() ||
|
||||
-+ soc_is_qca956x())
|
||||
++ soc_is_qca956x() ||
|
||||
++ soc_is_tp9343())
|
||||
ath79_misc_irq_chip.irq_ack = ar724x_misc_irq_ack;
|
||||
else
|
||||
BUG();
|
||||
-@@ -268,6 +269,97 @@ static void qca955x_irq_init(void)
|
||||
+@@ -268,6 +270,97 @@ static void qca955x_irq_init(void)
|
||||
irq_set_chained_handler(ATH79_CPU_IRQ(3), qca955x_ip3_irq_dispatch);
|
||||
}
|
||||
|
||||
@@ -359,21 +383,21 @@
|
||||
asmlinkage void plat_irq_dispatch(void)
|
||||
{
|
||||
unsigned long pending;
|
||||
-@@ -397,6 +489,9 @@ void __init arch_init_irq(void)
|
||||
+@@ -397,6 +490,9 @@ void __init arch_init_irq(void)
|
||||
} else if (soc_is_qca955x()) {
|
||||
ath79_ip2_handler = ath79_default_ip2_handler;
|
||||
ath79_ip3_handler = ath79_default_ip3_handler;
|
||||
-+ } else if (soc_is_qca956x()) {
|
||||
++ } else if (soc_is_qca956x() || soc_is_tp9343()) {
|
||||
+ ath79_ip2_handler = ath79_default_ip2_handler;
|
||||
+ ath79_ip3_handler = ath79_default_ip3_handler;
|
||||
} else {
|
||||
BUG();
|
||||
}
|
||||
-@@ -411,4 +506,6 @@ void __init arch_init_irq(void)
|
||||
+@@ -411,4 +507,6 @@ void __init arch_init_irq(void)
|
||||
qca953x_irq_init();
|
||||
else if (soc_is_qca955x())
|
||||
qca955x_irq_init();
|
||||
-+ else if (soc_is_qca956x())
|
||||
++ else if (soc_is_qca956x() || soc_is_tp9343())
|
||||
+ qca956x_irq_init();
|
||||
}
|
||||
--- a/arch/mips/ath79/Kconfig
|
||||
@@ -428,7 +452,7 @@
|
||||
} else if (soc_is_qca955x()) {
|
||||
ath79_pci_irq_map = qca955x_pci_irq_map;
|
||||
ath79_pci_nr_irqs = ARRAY_SIZE(qca955x_pci_irq_map);
|
||||
-+ } else if (soc_is_qca9561()) {
|
||||
++ } else if (soc_is_qca956x()) {
|
||||
+ ath79_pci_irq_map = qca956x_pci_irq_map;
|
||||
+ ath79_pci_nr_irqs = ARRAY_SIZE(qca956x_pci_irq_map);
|
||||
} else {
|
||||
@@ -438,7 +462,7 @@
|
||||
QCA955X_PCI_MEM_SIZE,
|
||||
1,
|
||||
ATH79_IP3_IRQ(2));
|
||||
-+ } else if (soc_is_qca9561()) {
|
||||
++ } else if (soc_is_qca956x()) {
|
||||
+ pdev = ath79_register_pci_ar724x(0,
|
||||
+ QCA956X_PCI_CFG_BASE1,
|
||||
+ QCA956X_PCI_CTRL_BASE1,
|
||||
@@ -456,15 +480,15 @@
|
||||
rev = id & QCA955X_REV_ID_REVISION_MASK;
|
||||
break;
|
||||
|
||||
-+ case REV_ID_MAJOR_TP9343:
|
||||
-+ ath79_soc = ATH79_SOC_TP9343;
|
||||
-+ chip = "9343";
|
||||
++ case REV_ID_MAJOR_QCA956X:
|
||||
++ ath79_soc = ATH79_SOC_QCA956X;
|
||||
++ chip = "956X";
|
||||
+ rev = id & QCA956X_REV_ID_REVISION_MASK;
|
||||
+ break;
|
||||
+
|
||||
-+ case REV_ID_MAJOR_QCA9561:
|
||||
-+ ath79_soc = ATH79_SOC_QCA9561;
|
||||
-+ chip = "9561";
|
||||
++ case REV_ID_MAJOR_TP9343:
|
||||
++ ath79_soc = ATH79_SOC_TP9343;
|
||||
++ chip = "9343";
|
||||
+ rev = id & QCA956X_REV_ID_REVISION_MASK;
|
||||
+ break;
|
||||
+
|
||||
@@ -476,7 +500,7 @@
|
||||
ath79_soc_rev = rev;
|
||||
|
||||
- if (soc_is_qca953x() || soc_is_qca955x())
|
||||
-+ if (soc_is_qca953x() || soc_is_qca955x() || soc_is_qca9561())
|
||||
++ if (soc_is_qca953x() || soc_is_qca955x() || soc_is_qca956x())
|
||||
sprintf(ath79_sys_type, "Qualcomm Atheros QCA%s ver %u rev %u",
|
||||
chip, ver, rev);
|
||||
+ else if (soc_is_tp9343())
|
||||
@@ -511,7 +535,21 @@
|
||||
#define AR9300_OTP_BASE 0x14000
|
||||
#define AR9300_OTP_STATUS 0x15f18
|
||||
#define AR9300_OTP_STATUS_TYPE 0x7
|
||||
-@@ -375,6 +392,49 @@
|
||||
+@@ -152,6 +169,13 @@
|
||||
+ #define AR9300_OTP_READ_DATA 0x15f1c
|
||||
+
|
||||
+ /*
|
||||
++ * Hidden Registers
|
||||
++ */
|
||||
++#define QCA956X_DAM_RESET_OFFSET 0xb90001bc
|
||||
++#define QCA956X_DAM_RESET_SIZE 0x4
|
||||
++#define QCA956X_INLINE_CHKSUM_ENG BIT(27)
|
||||
++
|
||||
++/*
|
||||
+ * DDR_CTRL block
|
||||
+ */
|
||||
+ #define AR71XX_DDR_REG_PCI_WIN0 0x7c
|
||||
+@@ -375,6 +399,49 @@
|
||||
#define QCA955X_PLL_CLK_CTRL_DDRCLK_FROM_DDRPLL BIT(21)
|
||||
#define QCA955X_PLL_CLK_CTRL_AHBCLK_FROM_DDRPLL BIT(24)
|
||||
|
||||
@@ -561,7 +599,7 @@
|
||||
/*
|
||||
* USB_CONFIG block
|
||||
*/
|
||||
-@@ -422,6 +482,11 @@
|
||||
+@@ -422,6 +489,11 @@
|
||||
#define QCA955X_RESET_REG_BOOTSTRAP 0xb0
|
||||
#define QCA955X_RESET_REG_EXT_INT_STATUS 0xac
|
||||
|
||||
@@ -573,7 +611,7 @@
|
||||
#define MISC_INT_ETHSW BIT(12)
|
||||
#define MISC_INT_TIMER4 BIT(10)
|
||||
#define MISC_INT_TIMER3 BIT(9)
|
||||
-@@ -596,6 +661,8 @@
|
||||
+@@ -596,6 +668,8 @@
|
||||
|
||||
#define QCA955X_BOOTSTRAP_REF_CLK_40 BIT(4)
|
||||
|
||||
@@ -582,7 +620,7 @@
|
||||
#define AR934X_PCIE_WMAC_INT_WMAC_MISC BIT(0)
|
||||
#define AR934X_PCIE_WMAC_INT_WMAC_TX BIT(1)
|
||||
#define AR934X_PCIE_WMAC_INT_WMAC_RXLP BIT(2)
|
||||
-@@ -663,6 +730,37 @@
|
||||
+@@ -663,6 +737,37 @@
|
||||
QCA955X_EXT_INT_PCIE_RC2_INT1 | QCA955X_EXT_INT_PCIE_RC2_INT2 | \
|
||||
QCA955X_EXT_INT_PCIE_RC2_INT3)
|
||||
|
||||
@@ -620,16 +658,16 @@
|
||||
#define REV_ID_MAJOR_MASK 0xfff0
|
||||
#define REV_ID_MAJOR_AR71XX 0x00a0
|
||||
#define REV_ID_MAJOR_AR913X 0x00b0
|
||||
-@@ -678,6 +776,8 @@
|
||||
+@@ -678,6 +783,8 @@
|
||||
#define REV_ID_MAJOR_QCA9533_V2 0x0160
|
||||
#define REV_ID_MAJOR_QCA9556 0x0130
|
||||
#define REV_ID_MAJOR_QCA9558 0x1130
|
||||
+#define REV_ID_MAJOR_TP9343 0x0150
|
||||
-+#define REV_ID_MAJOR_QCA9561 0x1150
|
||||
++#define REV_ID_MAJOR_QCA956X 0x1150
|
||||
|
||||
#define AR71XX_REV_ID_MINOR_MASK 0x3
|
||||
#define AR71XX_REV_ID_MINOR_AR7130 0x0
|
||||
-@@ -702,6 +802,8 @@
|
||||
+@@ -702,6 +809,8 @@
|
||||
|
||||
#define QCA955X_REV_ID_REVISION_MASK 0xf
|
||||
|
||||
@@ -638,7 +676,7 @@
|
||||
/*
|
||||
* SPI block
|
||||
*/
|
||||
-@@ -774,6 +876,19 @@
|
||||
+@@ -766,6 +875,19 @@
|
||||
#define QCA953X_GPIO_OUT_MUX_LED_LINK4 44
|
||||
#define QCA953X_GPIO_OUT_MUX_LED_LINK5 45
|
||||
|
||||
@@ -658,7 +696,7 @@
|
||||
#define AR71XX_GPIO_COUNT 16
|
||||
#define AR7240_GPIO_COUNT 18
|
||||
#define AR7241_GPIO_COUNT 20
|
||||
-@@ -782,6 +897,7 @@
|
||||
+@@ -774,6 +896,7 @@
|
||||
#define AR934X_GPIO_COUNT 23
|
||||
#define QCA953X_GPIO_COUNT 18
|
||||
#define QCA955X_GPIO_COUNT 24
|
||||
@@ -673,11 +711,11 @@
|
||||
ATH79_SOC_QCA9556,
|
||||
ATH79_SOC_QCA9558,
|
||||
+ ATH79_SOC_TP9343,
|
||||
-+ ATH79_SOC_QCA9561,
|
||||
++ ATH79_SOC_QCA956X,
|
||||
};
|
||||
|
||||
extern enum ath79_soc_type ath79_soc;
|
||||
-@@ -126,6 +128,21 @@ static inline int soc_is_qca955x(void)
|
||||
+@@ -126,6 +128,26 @@ static inline int soc_is_qca955x(void)
|
||||
return soc_is_qca9556() || soc_is_qca9558();
|
||||
}
|
||||
|
||||
@@ -685,15 +723,20 @@
|
||||
+{
|
||||
+ return ath79_soc == ATH79_SOC_TP9343;
|
||||
+}
|
||||
-+
|
||||
++
|
||||
+static inline int soc_is_qca9561(void)
|
||||
+{
|
||||
-+ return ath79_soc == ATH79_SOC_QCA9561;
|
||||
++ return ath79_soc == ATH79_SOC_QCA956X;
|
||||
++}
|
||||
++
|
||||
++static inline int soc_is_qca9563(void)
|
||||
++{
|
||||
++ return ath79_soc == ATH79_SOC_QCA956X;
|
||||
+}
|
||||
+
|
||||
+static inline int soc_is_qca956x(void)
|
||||
+{
|
||||
-+ return soc_is_tp9343() || soc_is_qca9561();
|
||||
++ return soc_is_qca9561() || soc_is_qca9563();
|
||||
+}
|
||||
+
|
||||
extern void __iomem *ath79_ddr_base;
|
||||
diff --git a/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch b/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch
|
||||
index a36b8c319f7d08fe5daab867a10edca4dfcd4706..44c9c6281e683792af37b6f9b32357b2a4ec2fd4 100644
|
||||
--- a/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch
|
||||
+++ b/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch
|
||||
@@ -9,8 +9,8 @@
|
||||
+ soc_is_qca955x())
|
||||
reg = AR71XX_GPIO_REG_FUNC;
|
||||
else if (soc_is_ar934x() ||
|
||||
- soc_is_qca953x() || soc_is_qca956x())
|
||||
-@@ -185,15 +186,27 @@ void __init ath79_gpio_output_select(uns
|
||||
+ soc_is_qca953x() ||
|
||||
+@@ -187,15 +188,30 @@ void __init ath79_gpio_output_select(uns
|
||||
{
|
||||
void __iomem *base = ath79_gpio_base;
|
||||
unsigned long flags;
|
||||
@@ -19,7 +19,7 @@
|
||||
+ unsigned long gpio_count;
|
||||
u32 t, s;
|
||||
|
||||
-- BUG_ON(!soc_is_ar934x() && !soc_is_qca953x());
|
||||
+- BUG_ON(!soc_is_ar934x() && !soc_is_qca953x() && !soc_is_qca956x());
|
||||
+ if (soc_is_ar934x()) {
|
||||
+ gpio_count = AR934X_GPIO_COUNT;
|
||||
+ reg_base = AR934X_GPIO_REG_OUT_FUNC0;
|
||||
@@ -29,6 +29,9 @@
|
||||
+ } else if (soc_is_qca955x()) {
|
||||
+ gpio_count = QCA955X_GPIO_COUNT;
|
||||
+ reg_base = QCA955X_GPIO_REG_OUT_FUNC0;
|
||||
++ } else if (soc_is_qca956x()) {
|
||||
++ gpio_count = QCA956X_GPIO_COUNT;
|
||||
++ reg_base = QCA956X_GPIO_REG_OUT_FUNC0;
|
||||
+ } else {
|
||||
+ BUG();
|
||||
+ }
|
@ -1,176 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Fri, 13 May 2016 21:00:16 +0200
|
||||
Subject: ar71xx: fold patch 622-MIPS-ath79-add-support-for-QCA956x-ethernet.patch into files/
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
||||
|
||||
Backport of OpenWrt r48650
|
||||
|
||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c
|
||||
index 31d24388d274b92e01642ad6d7f59d22f80dc2a6..2efb9c70ff31f5c11bcdff6c6326743e4d5b5a11 100644
|
||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c
|
||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c
|
||||
@@ -198,7 +198,6 @@ void __init ath79_register_mdio(unsigned int id, u32 phy_mask)
|
||||
case ATH79_SOC_AR9330:
|
||||
case ATH79_SOC_AR9331:
|
||||
case ATH79_SOC_QCA9533:
|
||||
- case ATH79_SOC_QCA9561:
|
||||
case ATH79_SOC_TP9343:
|
||||
mdio_dev = &ath79_mdio1_device;
|
||||
mdio_data = &ath79_mdio1_data;
|
||||
@@ -209,6 +208,7 @@ void __init ath79_register_mdio(unsigned int id, u32 phy_mask)
|
||||
case ATH79_SOC_AR9344:
|
||||
case ATH79_SOC_QCA9556:
|
||||
case ATH79_SOC_QCA9558:
|
||||
+ case ATH79_SOC_QCA956X:
|
||||
if (id == 0) {
|
||||
mdio_dev = &ath79_mdio0_device;
|
||||
mdio_data = &ath79_mdio0_data;
|
||||
@@ -258,7 +258,6 @@ void __init ath79_register_mdio(unsigned int id, u32 phy_mask)
|
||||
break;
|
||||
|
||||
case ATH79_SOC_QCA9533:
|
||||
- case ATH79_SOC_QCA9561:
|
||||
case ATH79_SOC_TP9343:
|
||||
mdio_data->builtin_switch = 1;
|
||||
break;
|
||||
@@ -268,6 +267,11 @@ void __init ath79_register_mdio(unsigned int id, u32 phy_mask)
|
||||
mdio_data->is_ar934x = 1;
|
||||
break;
|
||||
|
||||
+ case ATH79_SOC_QCA956X:
|
||||
+ if (id == 1)
|
||||
+ mdio_data->builtin_switch = 1;
|
||||
+ break;
|
||||
+
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -387,6 +391,16 @@ static void qca955x_set_speed_sgmii(int speed)
|
||||
iounmap(base);
|
||||
}
|
||||
|
||||
+static void qca956x_set_speed_sgmii(int speed)
|
||||
+{
|
||||
+ void __iomem *base;
|
||||
+ u32 val = ath79_get_eth_pll(0, speed);
|
||||
+
|
||||
+ base = ioremap_nocache(AR71XX_PLL_BASE, AR71XX_PLL_SIZE);
|
||||
+ __raw_writel(val, base + QCA955X_PLL_ETH_SGMII_CONTROL_REG);
|
||||
+ iounmap(base);
|
||||
+}
|
||||
+
|
||||
static void ath79_set_speed_dummy(int speed)
|
||||
{
|
||||
}
|
||||
@@ -517,6 +531,10 @@ struct ag71xx_switch_platform_data ath79_switch_data;
|
||||
#define AR934X_PLL_VAL_100 0x00000101
|
||||
#define AR934X_PLL_VAL_10 0x00001616
|
||||
|
||||
+#define QCA956X_PLL_VAL_1000 0x03000000
|
||||
+#define QCA956X_PLL_VAL_100 0x00000101
|
||||
+#define QCA956X_PLL_VAL_10 0x00001919
|
||||
+
|
||||
static void __init ath79_init_eth_pll_data(unsigned int id)
|
||||
{
|
||||
struct ath79_eth_pll_data *pll_data;
|
||||
@@ -575,13 +593,18 @@ static void __init ath79_init_eth_pll_data(unsigned int id)
|
||||
case ATH79_SOC_QCA9533:
|
||||
case ATH79_SOC_QCA9556:
|
||||
case ATH79_SOC_QCA9558:
|
||||
- case ATH79_SOC_QCA9561:
|
||||
case ATH79_SOC_TP9343:
|
||||
pll_10 = AR934X_PLL_VAL_10;
|
||||
pll_100 = AR934X_PLL_VAL_100;
|
||||
pll_1000 = AR934X_PLL_VAL_1000;
|
||||
break;
|
||||
|
||||
+ case ATH79_SOC_QCA956X:
|
||||
+ pll_10 = QCA956X_PLL_VAL_10;
|
||||
+ pll_100 = QCA956X_PLL_VAL_100;
|
||||
+ pll_1000 = QCA956X_PLL_VAL_1000;
|
||||
+ break;
|
||||
+
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
@@ -656,6 +679,7 @@ static int __init ath79_setup_phy_if_mode(unsigned int id,
|
||||
|
||||
case ATH79_SOC_QCA9556:
|
||||
case ATH79_SOC_QCA9558:
|
||||
+ case ATH79_SOC_QCA956X:
|
||||
switch (pdata->phy_if_mode) {
|
||||
case PHY_INTERFACE_MODE_MII:
|
||||
case PHY_INTERFACE_MODE_RGMII:
|
||||
@@ -666,11 +690,6 @@ static int __init ath79_setup_phy_if_mode(unsigned int id,
|
||||
}
|
||||
break;
|
||||
|
||||
- case ATH79_SOC_QCA9561:
|
||||
- if (!pdata->phy_if_mode)
|
||||
- pdata->phy_if_mode = PHY_INTERFACE_MODE_MII;
|
||||
- break;
|
||||
-
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
@@ -699,7 +718,7 @@ static int __init ath79_setup_phy_if_mode(unsigned int id,
|
||||
case ATH79_SOC_AR7241:
|
||||
case ATH79_SOC_AR9330:
|
||||
case ATH79_SOC_AR9331:
|
||||
- case ATH79_SOC_QCA9561:
|
||||
+ case ATH79_SOC_QCA956X:
|
||||
case ATH79_SOC_TP9343:
|
||||
pdata->phy_if_mode = PHY_INTERFACE_MODE_GMII;
|
||||
break;
|
||||
@@ -1032,7 +1051,6 @@ void __init ath79_register_eth(unsigned int id)
|
||||
pdata->fifo_cfg3 = 0x01f00140;
|
||||
break;
|
||||
|
||||
- case ATH79_SOC_QCA9561:
|
||||
case ATH79_SOC_TP9343:
|
||||
if (id == 0) {
|
||||
pdata->reset_bit = AR933X_RESET_GE0_MAC |
|
||||
@@ -1100,6 +1118,34 @@ void __init ath79_register_eth(unsigned int id)
|
||||
pdata->fifo_cfg3 = 0x01f00140;
|
||||
break;
|
||||
|
||||
+ case ATH79_SOC_QCA956X:
|
||||
+ if (id == 0) {
|
||||
+ pdata->reset_bit = QCA955X_RESET_GE0_MAC |
|
||||
+ QCA955X_RESET_GE0_MDIO;
|
||||
+ if (pdata->phy_if_mode == PHY_INTERFACE_MODE_SGMII)
|
||||
+ pdata->set_speed = qca956x_set_speed_sgmii;
|
||||
+ else
|
||||
+ /* FIXME */
|
||||
+ pdata->set_speed = ath79_set_speed_dummy;
|
||||
+ } else {
|
||||
+ pdata->reset_bit = QCA955X_RESET_GE1_MAC |
|
||||
+ QCA955X_RESET_GE1_MDIO;
|
||||
+ /* FIXME */
|
||||
+ pdata->set_speed = ath79_set_speed_dummy;
|
||||
+ }
|
||||
+
|
||||
+ pdata->ddr_flush = ath79_ddr_no_flush;
|
||||
+ pdata->has_gbit = 1;
|
||||
+ pdata->is_ar724x = 1;
|
||||
+
|
||||
+ if (!pdata->fifo_cfg1)
|
||||
+ pdata->fifo_cfg1 = 0x0010ffff;
|
||||
+ if (!pdata->fifo_cfg2)
|
||||
+ pdata->fifo_cfg2 = 0x015500aa;
|
||||
+ if (!pdata->fifo_cfg3)
|
||||
+ pdata->fifo_cfg3 = 0x01f00140;
|
||||
+ break;
|
||||
+
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
@@ -1140,7 +1186,6 @@ void __init ath79_register_eth(unsigned int id)
|
||||
case ATH79_SOC_AR9330:
|
||||
case ATH79_SOC_AR9331:
|
||||
case ATH79_SOC_QCA9533:
|
||||
- case ATH79_SOC_QCA9561:
|
||||
case ATH79_SOC_TP9343:
|
||||
pdata->mii_bus_dev = &ath79_mdio1_device.dev;
|
||||
break;
|
@ -1,22 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Fri, 13 May 2016 21:00:41 +0200
|
||||
Subject: ar71xx: fix MDIO bus probe on QCA956x
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
||||
|
||||
Backport of OpenWrt r48651
|
||||
|
||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c
|
||||
index 2efb9c70ff31f5c11bcdff6c6326743e4d5b5a11..12a376e1322ae14dd714297ed5f8319ae09eeb64 100644
|
||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c
|
||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c
|
||||
@@ -183,7 +183,8 @@ void __init ath79_register_mdio(unsigned int id, u32 phy_mask)
|
||||
ath79_soc == ATH79_SOC_AR9342 ||
|
||||
ath79_soc == ATH79_SOC_AR9344 ||
|
||||
ath79_soc == ATH79_SOC_QCA9556 ||
|
||||
- ath79_soc == ATH79_SOC_QCA9558)
|
||||
+ ath79_soc == ATH79_SOC_QCA9558 ||
|
||||
+ ath79_soc == ATH79_SOC_QCA956X)
|
||||
max_id = 1;
|
||||
else
|
||||
max_id = 0;
|
@ -1,64 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Fri, 13 May 2016 21:01:19 +0200
|
||||
Subject: ar71xx: fix qca956x ethernet initialization
|
||||
|
||||
Complete internal switch initialization for QCA956X.
|
||||
Set default mdio device if the interface mode of GE0 is not SGMII (fix ticket #21520).
|
||||
|
||||
Signed-off-by: Weijie Gao <hackpascal@gmail.com>
|
||||
|
||||
Backport of OpenWrt r48937
|
||||
|
||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c
|
||||
index 12a376e1322ae14dd714297ed5f8319ae09eeb64..b43c80a3762ddebe46d8443660714922165a2287 100644
|
||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c
|
||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c
|
||||
@@ -271,6 +271,7 @@ void __init ath79_register_mdio(unsigned int id, u32 phy_mask)
|
||||
case ATH79_SOC_QCA956X:
|
||||
if (id == 1)
|
||||
mdio_data->builtin_switch = 1;
|
||||
+ mdio_data->is_ar934x = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -1123,16 +1124,25 @@ void __init ath79_register_eth(unsigned int id)
|
||||
if (id == 0) {
|
||||
pdata->reset_bit = QCA955X_RESET_GE0_MAC |
|
||||
QCA955X_RESET_GE0_MDIO;
|
||||
+
|
||||
if (pdata->phy_if_mode == PHY_INTERFACE_MODE_SGMII)
|
||||
pdata->set_speed = qca956x_set_speed_sgmii;
|
||||
else
|
||||
- /* FIXME */
|
||||
- pdata->set_speed = ath79_set_speed_dummy;
|
||||
+ pdata->set_speed = ath79_set_speed_ge0;
|
||||
} else {
|
||||
pdata->reset_bit = QCA955X_RESET_GE1_MAC |
|
||||
QCA955X_RESET_GE1_MDIO;
|
||||
- /* FIXME */
|
||||
+
|
||||
pdata->set_speed = ath79_set_speed_dummy;
|
||||
+
|
||||
+ pdata->switch_data = &ath79_switch_data;
|
||||
+
|
||||
+ pdata->speed = SPEED_1000;
|
||||
+ pdata->duplex = DUPLEX_FULL;
|
||||
+
|
||||
+ /* reset the built-in switch */
|
||||
+ ath79_device_reset_set(AR934X_RESET_ETH_SWITCH);
|
||||
+ ath79_device_reset_clear(AR934X_RESET_ETH_SWITCH);
|
||||
}
|
||||
|
||||
pdata->ddr_flush = ath79_ddr_no_flush;
|
||||
@@ -1196,6 +1206,11 @@ void __init ath79_register_eth(unsigned int id)
|
||||
/* don't assign any MDIO device by default */
|
||||
break;
|
||||
|
||||
+ case ATH79_SOC_QCA956X:
|
||||
+ if (pdata->phy_if_mode != PHY_INTERFACE_MODE_SGMII)
|
||||
+ pdata->mii_bus_dev = &ath79_mdio1_device.dev;
|
||||
+ break;
|
||||
+
|
||||
default:
|
||||
pdata->mii_bus_dev = &ath79_mdio0_device.dev;
|
||||
break;
|
@ -1,562 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Fri, 13 May 2016 20:47:26 +0200
|
||||
Subject: ar71xx: Support for Ubiquiti UniFi AP AC LITE
|
||||
|
||||
Add support for the Ubiquiti UniFi AP AC LITE
|
||||
Signed-off-by: P.Wassi <p.wassi at gmx.at>
|
||||
|
||||
Backport of OpenWrt r48711
|
||||
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
|
||||
index 486879f512cd28f1b80e828809359b55956fbcc3..3adc449b23e9c590d57cdd914b6c8d990a50e0b0 100644
|
||||
--- a/target/linux/ar71xx/base-files/etc/diag.sh
|
||||
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
|
||||
@@ -309,7 +309,8 @@ get_status_led() {
|
||||
unifi)
|
||||
status_led="ubnt:green:dome"
|
||||
;;
|
||||
- uap-pro)
|
||||
+ uap-pro | \
|
||||
+ unifiac)
|
||||
status_led="ubnt:white:dome"
|
||||
;;
|
||||
unifi-outdoor-plus)
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
index 032c671341fd526c7e4e32cb9cba42217165cf5c..a79376a8cff56b144268130a24a930ff2bee95cd 100755
|
||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
@@ -369,6 +369,7 @@ tl-wa901nd-v3 |\
|
||||
tl-wa901nd-v4 |\
|
||||
tl-wr703n |\
|
||||
tube2h |\
|
||||
+unifiac |\
|
||||
wndap360 |\
|
||||
mynet-rext |\
|
||||
wp543)
|
||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
index 6c106179bfa0c01308a03678aef1b7cf4caaf05b..ecf584d30ecae7a0e2601bed38c6cfad42cab124 100755
|
||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
@@ -902,6 +902,9 @@ ar71xx_board_detect() {
|
||||
*UniFi)
|
||||
name="unifi"
|
||||
;;
|
||||
+ *"UniFi-AC")
|
||||
+ name="unifiac"
|
||||
+ ;;
|
||||
*"UniFi AP Pro")
|
||||
name="uap-pro"
|
||||
;;
|
||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
index 024e4930949c927efd36c3ac67cd351dcaa4bf7b..fff1c3c912cee678ea88e225958b28ceb4c4b742 100755
|
||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
@@ -252,6 +252,7 @@ platform_check_image() {
|
||||
wlae-ag300n | \
|
||||
nbg460n_550n_550nh | \
|
||||
unifi | \
|
||||
+ unifiac | \
|
||||
unifi-outdoor | \
|
||||
carambola2 | \
|
||||
weio )
|
||||
diff --git a/target/linux/ar71xx/config-3.18 b/target/linux/ar71xx/config-3.18
|
||||
index e0d52d9fcbad980f7220dd1f93388359e52dc8f9..a068cc5768aed6f29a67de27d24f00dc57e0695a 100644
|
||||
--- a/target/linux/ar71xx/config-3.18
|
||||
+++ b/target/linux/ar71xx/config-3.18
|
||||
@@ -141,6 +141,7 @@ CONFIG_ATH79_MACH_TL_WR941ND=y
|
||||
CONFIG_ATH79_MACH_TL_WR941ND_V6=y
|
||||
CONFIG_ATH79_MACH_TUBE2H=y
|
||||
CONFIG_ATH79_MACH_UBNT=y
|
||||
+CONFIG_ATH79_MACH_UBNT_UNIFIAC=y
|
||||
CONFIG_ATH79_MACH_UBNT_XM=y
|
||||
CONFIG_ATH79_MACH_WEIO=y
|
||||
CONFIG_ATH79_MACH_WHR_HP_G300N=y
|
||||
@@ -324,7 +325,7 @@ CONFIG_SOC_AR933X=y
|
||||
CONFIG_SOC_AR934X=y
|
||||
CONFIG_SOC_QCA953X=y
|
||||
CONFIG_SOC_QCA955X=y
|
||||
-# CONFIG_SOC_QCA956X is not set
|
||||
+CONFIG_SOC_QCA956X=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_AP83=y
|
||||
CONFIG_SPI_ATH79=y
|
||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..3617ca7d5fc0fff00fce9741b5d9169fac8c83c8
|
||||
--- /dev/null
|
||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c
|
||||
@@ -0,0 +1,109 @@
|
||||
+/*
|
||||
+ * Ubiquiti UniFi AC (LITE) board support
|
||||
+ *
|
||||
+ * Copyright (C) 2015-2016 P. Wassi <p.wassi at gmx.at>
|
||||
+ *
|
||||
+ * Derived from: mach-ubnt-xm.c
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License version 2 as published
|
||||
+ * by the Free Software Foundation.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/init.h>
|
||||
+#include <linux/pci.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/ath9k_platform.h>
|
||||
+#include <linux/etherdevice.h>
|
||||
+
|
||||
+#include <asm/mach-ath79/ath79.h>
|
||||
+#include <asm/mach-ath79/irq.h>
|
||||
+#include <asm/mach-ath79/ar71xx_regs.h>
|
||||
+
|
||||
+#include <linux/platform_data/phy-at803x.h>
|
||||
+
|
||||
+#include "common.h"
|
||||
+#include "dev-ap9x-pci.h"
|
||||
+#include "dev-eth.h"
|
||||
+#include "dev-gpio-buttons.h"
|
||||
+#include "dev-leds-gpio.h"
|
||||
+#include "dev-m25p80.h"
|
||||
+#include "dev-wmac.h"
|
||||
+#include "machtypes.h"
|
||||
+
|
||||
+
|
||||
+#define UNIFIAC_KEYS_POLL_INTERVAL 20
|
||||
+#define UNIFIAC_KEYS_DEBOUNCE_INTERVAL (3 * UNIFIAC_KEYS_POLL_INTERVAL)
|
||||
+
|
||||
+#define UNIFIAC_GPIO_LED_WHITE 7
|
||||
+#define UNIFIAC_GPIO_LED_BLUE 8
|
||||
+
|
||||
+#define UNIFIAC_GPIO_BTN_RESET 2
|
||||
+
|
||||
+#define UNIFIAC_MAC0_OFFSET 0x0000
|
||||
+#define UNIFIAC_WMAC_CALDATA_OFFSET 0x1000
|
||||
+#define UNIFIAC_PCI_CALDATA_OFFSET 0x5000
|
||||
+
|
||||
+
|
||||
+static struct flash_platform_data ubnt_unifiac_flash_data = {
|
||||
+ /* mx25l12805d and mx25l12835f have the same JEDEC ID */
|
||||
+ .type = "mx25l12805d",
|
||||
+};
|
||||
+
|
||||
+static struct gpio_led ubnt_unifiac_leds_gpio[] __initdata = {
|
||||
+ {
|
||||
+ .name = "ubnt:white:dome",
|
||||
+ .gpio = UNIFIAC_GPIO_LED_WHITE,
|
||||
+ .active_low = 0,
|
||||
+ }, {
|
||||
+ .name = "ubnt:blue:dome",
|
||||
+ .gpio = UNIFIAC_GPIO_LED_BLUE,
|
||||
+ .active_low = 0,
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+static struct gpio_keys_button ubnt_unifiac_gpio_keys[] __initdata = {
|
||||
+ {
|
||||
+ .desc = "reset",
|
||||
+ .type = EV_KEY,
|
||||
+ .code = KEY_RESTART,
|
||||
+ .debounce_interval = UNIFIAC_KEYS_DEBOUNCE_INTERVAL,
|
||||
+ .gpio = UNIFIAC_GPIO_BTN_RESET,
|
||||
+ .active_low = 1,
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+static void __init ubnt_unifiac_setup(void)
|
||||
+{
|
||||
+ u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff0000);
|
||||
+
|
||||
+ ath79_register_m25p80(&ubnt_unifiac_flash_data);
|
||||
+
|
||||
+
|
||||
+ ath79_init_mac(ath79_eth0_data.mac_addr,
|
||||
+ eeprom + UNIFIAC_MAC0_OFFSET, 0);
|
||||
+
|
||||
+ ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_SGMII;
|
||||
+ ath79_eth0_data.phy_mask = BIT(4);
|
||||
+ ath79_eth0_pll_data.pll_10 = 0x00001313;
|
||||
+
|
||||
+ ath79_register_mdio(0, ~BIT(4));
|
||||
+ ath79_register_eth(0);
|
||||
+
|
||||
+
|
||||
+ ath79_register_wmac(eeprom + UNIFIAC_WMAC_CALDATA_OFFSET, NULL);
|
||||
+
|
||||
+
|
||||
+ ap91_pci_init(eeprom + UNIFIAC_PCI_CALDATA_OFFSET, NULL);
|
||||
+
|
||||
+
|
||||
+ ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_unifiac_leds_gpio),
|
||||
+ ubnt_unifiac_leds_gpio);
|
||||
+
|
||||
+ ath79_register_gpio_keys_polled(-1, UNIFIAC_KEYS_POLL_INTERVAL,
|
||||
+ ARRAY_SIZE(ubnt_unifiac_gpio_keys),
|
||||
+ ubnt_unifiac_gpio_keys);
|
||||
+}
|
||||
+
|
||||
+MIPS_MACHINE(ATH79_MACH_UBNT_UNIFIAC, "UBNT-UF-AC", "Ubiquiti UniFi-AC",
|
||||
+ ubnt_unifiac_setup);
|
||||
diff --git a/target/linux/ar71xx/generic/profiles/ubnt.mk b/target/linux/ar71xx/generic/profiles/ubnt.mk
|
||||
index d8e24d0032d75231d27be8207fe55294fd108282..94eff18318264de85ea459e94280c88726404888 100644
|
||||
--- a/target/linux/ar71xx/generic/profiles/ubnt.mk
|
||||
+++ b/target/linux/ar71xx/generic/profiles/ubnt.mk
|
||||
@@ -38,6 +38,17 @@ endef
|
||||
|
||||
$(eval $(call Profile,UBNTUNIFI))
|
||||
|
||||
+define Profile/UBNTUNIFIAC
|
||||
+ NAME:=Ubiquiti UniFi AP AC
|
||||
+ PACKAGES:=kmod-ath10k ath10k-firmware-qca988x
|
||||
+endef
|
||||
+
|
||||
+define Profile/UBNTUNIFIAC/Description
|
||||
+ Package set optimized for the Ubiquiti UniFi AP AC.
|
||||
+endef
|
||||
+
|
||||
+$(eval $(call Profile,UBNTUNIFIAC))
|
||||
+
|
||||
define Profile/UBNTUNIFIOUTDOOR
|
||||
NAME:=Ubiquiti UniFiAP Outdoor
|
||||
PACKAGES:=
|
||||
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
|
||||
index 0783381baeddef2064df8faff89c49c2bed6a28b..aaaf89ac1a369431cf9bc15c13e774ba6826bbf3 100644
|
||||
--- a/target/linux/ar71xx/image/Makefile
|
||||
+++ b/target/linux/ar71xx/image/Makefile
|
||||
@@ -740,6 +740,16 @@ define Device/oolite
|
||||
endef
|
||||
TARGET_DEVICES += oolite
|
||||
|
||||
+define Device/ubnt-unifiac
|
||||
+ DEVICE_PROFILE := UBNT UBNTUNIFIAC
|
||||
+ IMAGE_SIZE := 7744k
|
||||
+ MTDPARTS = spi0.0:384k(u-boot)ro,64k(u-boot-env)ro,7744k(firmware),7744k(ubnt-airos)ro,128k(bs)ro,256k(cfg)ro,64k(EEPROM)ro
|
||||
+ IMAGES := sysupgrade.bin
|
||||
+ IMAGE/sysupgrade.bin = append-kernel $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE)
|
||||
+ BOARDNAME := UBNT-UF-AC
|
||||
+endef
|
||||
+TARGET_DEVICES += ubnt-unifiac
|
||||
+
|
||||
rootfs_type=$(patsubst jffs2-%,jffs2,$(patsubst squashfs-%,squashfs,$(1)))
|
||||
|
||||
# $(1): rootfs type.
|
||||
diff --git a/target/linux/ar71xx/mikrotik/config-default b/target/linux/ar71xx/mikrotik/config-default
|
||||
index b8a7bf13f2582b0b458d17f5e4b266a6e110faa1..2b1fe2491c7a00449453efdc4969015ec1b28291 100644
|
||||
--- a/target/linux/ar71xx/mikrotik/config-default
|
||||
+++ b/target/linux/ar71xx/mikrotik/config-default
|
||||
@@ -97,6 +97,7 @@ CONFIG_ATH79_MACH_RBSXTLITE=y
|
||||
# CONFIG_ATH79_MACH_TUBE2H is not set
|
||||
# CONFIG_ATH79_MACH_UBNT is not set
|
||||
# CONFIG_ATH79_MACH_UBNT_XM is not set
|
||||
+# CONFIG_ATH79_MACH_UBNT_UNIFIAC is not set
|
||||
# CONFIG_ATH79_MACH_WHR_HP_G300N is not set
|
||||
# CONFIG_ATH79_MACH_WLAE_AG300N is not set
|
||||
# CONFIG_ATH79_MACH_WLR8100 is not set
|
||||
diff --git a/target/linux/ar71xx/nand/config-default b/target/linux/ar71xx/nand/config-default
|
||||
index 626d676c621b90feb31a88e7b8c2daa587a8f603..f62cf1a4399718b2f4e94a974d26ddaf8d46a8ec 100644
|
||||
--- a/target/linux/ar71xx/nand/config-default
|
||||
+++ b/target/linux/ar71xx/nand/config-default
|
||||
@@ -59,6 +59,7 @@
|
||||
# CONFIG_ATH79_MACH_TL_WR941ND is not set
|
||||
# CONFIG_ATH79_MACH_UBNT is not set
|
||||
# CONFIG_ATH79_MACH_UBNT_XM is not set
|
||||
+# CONFIG_ATH79_MACH_UBNT_UNIFIAC is not set
|
||||
# CONFIG_ATH79_MACH_WHR_HP_G300N is not set
|
||||
# CONFIG_ATH79_MACH_WLAE_AG300N is not set
|
||||
# CONFIG_ATH79_MACH_WNDAP360 is not set
|
||||
diff --git a/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch b/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
|
||||
index 76aeb94412e6f44b9a81fc44858e9c4540a08845..27dc73ffa239979a799bbede72440907e9d0e187 100644
|
||||
--- a/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
|
||||
+++ b/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/arch/mips/ath79/machtypes.h
|
||||
+++ b/arch/mips/ath79/machtypes.h
|
||||
-@@ -16,22 +16,200 @@
|
||||
+@@ -16,22 +16,201 @@
|
||||
|
||||
enum ath79_mach_type {
|
||||
ATH79_MACH_GENERIC = 0,
|
||||
@@ -165,6 +165,7 @@
|
||||
+ ATH79_MACH_UBNT_RS, /* Ubiquiti RouterStation */
|
||||
ATH79_MACH_UBNT_UAP_PRO, /* Ubiquiti UniFi AP Pro */
|
||||
ATH79_MACH_UBNT_UNIFI, /* Ubiquiti Unifi */
|
||||
++ ATH79_MACH_UBNT_UNIFIAC, /* Ubiquiti Unifi AC */
|
||||
ATH79_MACH_UBNT_UNIFI_OUTDOOR, /* Ubiquiti UnifiAP Outdoor */
|
||||
+ ATH79_MACH_UBNT_UNIFI_OUTDOOR_PLUS, /* Ubiquiti UnifiAP Outdoor+ */
|
||||
ATH79_MACH_UBNT_XM, /* Ubiquiti Networks XM board rev 1.0 */
|
||||
@@ -1098,10 +1099,7 @@
|
||||
+ select ATH79_DEV_M25P80
|
||||
+ select ATH79_DEV_USB
|
||||
+ select ATH79_DEV_WMAC
|
||||
-
|
||||
--config ATH79_MACH_AP136
|
||||
-- bool "Atheros AP136/AP135 reference board"
|
||||
-- select SOC_QCA955X
|
||||
++
|
||||
+config ATH79_MACH_TL_WA7210N_V2
|
||||
+ bool "TP-LINK TL-WA7210N v2 support"
|
||||
+ select SOC_AR724X
|
||||
@@ -1116,19 +1114,12 @@
|
||||
+ bool "TP-LINK TL-WA830RE v2 support"
|
||||
+ select SOC_AR934X
|
||||
+ select ATH79_DEV_ETH
|
||||
- select ATH79_DEV_GPIO_BUTTONS
|
||||
- select ATH79_DEV_LEDS_GPIO
|
||||
-- select ATH79_DEV_NFC
|
||||
-- select ATH79_DEV_SPI
|
||||
++ select ATH79_DEV_GPIO_BUTTONS
|
||||
++ select ATH79_DEV_LEDS_GPIO
|
||||
+ select ATH79_DEV_M25P80
|
||||
- select ATH79_DEV_USB
|
||||
- select ATH79_DEV_WMAC
|
||||
-- help
|
||||
-- Say 'Y' here if you want your kernel to support the
|
||||
-- Atheros AP136 or AP135 reference boards.
|
||||
-
|
||||
--config ATH79_MACH_AP81
|
||||
-- bool "Atheros AP81 reference board"
|
||||
++ select ATH79_DEV_USB
|
||||
++ select ATH79_DEV_WMAC
|
||||
++
|
||||
+config ATH79_MACH_TL_WA901ND
|
||||
+ bool "TP-LINK TL-WA901ND/TL-WA7510N support"
|
||||
+ select SOC_AR724X
|
||||
@@ -1140,11 +1131,11 @@
|
||||
+
|
||||
+config ATH79_MACH_TL_WA901ND_V2
|
||||
+ bool "TP-LINK TL-WA901ND v2 support"
|
||||
- select SOC_AR913X
|
||||
- select ATH79_DEV_ETH
|
||||
- select ATH79_DEV_GPIO_BUTTONS
|
||||
- select ATH79_DEV_LEDS_GPIO
|
||||
- select ATH79_DEV_M25P80
|
||||
++ select SOC_AR913X
|
||||
++ select ATH79_DEV_ETH
|
||||
++ select ATH79_DEV_GPIO_BUTTONS
|
||||
++ select ATH79_DEV_LEDS_GPIO
|
||||
++ select ATH79_DEV_M25P80
|
||||
+ select ATH79_DEV_WMAC
|
||||
+
|
||||
+config ATH79_MACH_TL_WDR3500
|
||||
@@ -1155,34 +1146,13 @@
|
||||
+ select ATH79_DEV_GPIO_BUTTONS
|
||||
+ select ATH79_DEV_LEDS_GPIO
|
||||
+ select ATH79_DEV_M25P80
|
||||
- select ATH79_DEV_USB
|
||||
- select ATH79_DEV_WMAC
|
||||
-- help
|
||||
-- Say 'Y' here if you want your kernel to support the
|
||||
-- Atheros AP81 reference board.
|
||||
-
|
||||
--config ATH79_MACH_DB120
|
||||
-- bool "Atheros DB120 reference board"
|
||||
++ select ATH79_DEV_USB
|
||||
++ select ATH79_DEV_WMAC
|
||||
++
|
||||
+config ATH79_MACH_TL_WDR4300
|
||||
+ bool "TP-LINK TL-WDR3600/4300/4310 board support"
|
||||
- select SOC_AR934X
|
||||
- select ATH79_DEV_AP9X_PCI if PCI
|
||||
- select ATH79_DEV_ETH
|
||||
- select ATH79_DEV_GPIO_BUTTONS
|
||||
- select ATH79_DEV_LEDS_GPIO
|
||||
- select ATH79_DEV_M25P80
|
||||
-- select ATH79_DEV_NFC
|
||||
- select ATH79_DEV_USB
|
||||
- select ATH79_DEV_WMAC
|
||||
-- help
|
||||
-- Say 'Y' here if you want your kernel to support the
|
||||
-- Atheros DB120 reference board.
|
||||
-
|
||||
--config ATH79_MACH_PB44
|
||||
-- bool "Atheros PB44 reference board"
|
||||
-+config ATH79_MACH_TL_WR703N
|
||||
-+ bool "TP-LINK TL-WR703N/TL-WR710N/TL-MR10U support"
|
||||
-+ select SOC_AR933X
|
||||
++ select SOC_AR934X
|
||||
++ select ATH79_DEV_AP9X_PCI if PCI
|
||||
+ select ATH79_DEV_ETH
|
||||
+ select ATH79_DEV_GPIO_BUTTONS
|
||||
+ select ATH79_DEV_LEDS_GPIO
|
||||
@@ -1190,8 +1160,8 @@
|
||||
+ select ATH79_DEV_USB
|
||||
+ select ATH79_DEV_WMAC
|
||||
+
|
||||
-+config ATH79_MACH_TL_WR720N_V3
|
||||
-+ bool "TP-LINK TL-WR720N v3/v4 support"
|
||||
++config ATH79_MACH_TL_WR703N
|
||||
++ bool "TP-LINK TL-WR703N/TL-WR710N/TL-MR10U support"
|
||||
+ select SOC_AR933X
|
||||
+ select ATH79_DEV_ETH
|
||||
+ select ATH79_DEV_GPIO_BUTTONS
|
||||
@@ -1199,7 +1169,28 @@
|
||||
+ select ATH79_DEV_M25P80
|
||||
+ select ATH79_DEV_USB
|
||||
+ select ATH79_DEV_WMAC
|
||||
-+
|
||||
+
|
||||
+-config ATH79_MACH_AP136
|
||||
+- bool "Atheros AP136/AP135 reference board"
|
||||
+- select SOC_QCA955X
|
||||
++config ATH79_MACH_TL_WR720N_V3
|
||||
++ bool "TP-LINK TL-WR720N v3/v4 support"
|
||||
++ select SOC_AR933X
|
||||
++ select ATH79_DEV_ETH
|
||||
+ select ATH79_DEV_GPIO_BUTTONS
|
||||
+ select ATH79_DEV_LEDS_GPIO
|
||||
+- select ATH79_DEV_NFC
|
||||
+- select ATH79_DEV_SPI
|
||||
++ select ATH79_DEV_M25P80
|
||||
+ select ATH79_DEV_USB
|
||||
+ select ATH79_DEV_WMAC
|
||||
+- help
|
||||
+- Say 'Y' here if you want your kernel to support the
|
||||
+- Atheros AP136 or AP135 reference boards.
|
||||
+
|
||||
+-config ATH79_MACH_AP81
|
||||
+- bool "Atheros AP81 reference board"
|
||||
+- select SOC_AR913X
|
||||
+config ATH79_MACH_TL_WR741ND
|
||||
+ bool "TP-LINK TL-WR741ND support"
|
||||
+ select SOC_AR724X
|
||||
@@ -1212,21 +1203,25 @@
|
||||
+config ATH79_MACH_TL_WR741ND_V4
|
||||
+ bool "TP-LINK TL-WR741ND v4/TL-MR3220 v2 support"
|
||||
+ select SOC_AR933X
|
||||
-+ select ATH79_DEV_ETH
|
||||
-+ select ATH79_DEV_GPIO_BUTTONS
|
||||
-+ select ATH79_DEV_LEDS_GPIO
|
||||
-+ select ATH79_DEV_M25P80
|
||||
-+ select ATH79_DEV_USB
|
||||
-+ select ATH79_DEV_WMAC
|
||||
-+
|
||||
-+config ATH79_MACH_TL_WR841N_V1
|
||||
-+ bool "TP-LINK TL-WR841N v1 support"
|
||||
- select SOC_AR71XX
|
||||
-+ select ATH79_DEV_DSA
|
||||
select ATH79_DEV_ETH
|
||||
select ATH79_DEV_GPIO_BUTTONS
|
||||
select ATH79_DEV_LEDS_GPIO
|
||||
-- select ATH79_DEV_SPI
|
||||
+ select ATH79_DEV_M25P80
|
||||
+ select ATH79_DEV_USB
|
||||
+ select ATH79_DEV_WMAC
|
||||
+- help
|
||||
+- Say 'Y' here if you want your kernel to support the
|
||||
+- Atheros AP81 reference board.
|
||||
+
|
||||
+-config ATH79_MACH_DB120
|
||||
+- bool "Atheros DB120 reference board"
|
||||
++config ATH79_MACH_TL_WR841N_V1
|
||||
++ bool "TP-LINK TL-WR841N v1 support"
|
||||
++ select SOC_AR71XX
|
||||
++ select ATH79_DEV_DSA
|
||||
++ select ATH79_DEV_ETH
|
||||
++ select ATH79_DEV_GPIO_BUTTONS
|
||||
++ select ATH79_DEV_LEDS_GPIO
|
||||
+ select ATH79_DEV_M25P80
|
||||
+
|
||||
+config ATH79_MACH_TL_WR841N_V8
|
||||
@@ -1269,15 +1264,21 @@
|
||||
+
|
||||
+config ATH79_MACH_TL_WR1041N_V2
|
||||
+ bool "TP-LINK TL-WR1041N v2 support"
|
||||
-+ select SOC_AR934X
|
||||
-+ select ATH79_DEV_AP9X_PCI if PCI
|
||||
-+ select ATH79_DEV_ETH
|
||||
-+ select ATH79_DEV_GPIO_BUTTONS
|
||||
-+ select ATH79_DEV_LEDS_GPIO
|
||||
-+ select ATH79_DEV_M25P80
|
||||
-+ select ATH79_DEV_USB
|
||||
-+ select ATH79_DEV_WMAC
|
||||
-+
|
||||
+ select SOC_AR934X
|
||||
+ select ATH79_DEV_AP9X_PCI if PCI
|
||||
+ select ATH79_DEV_ETH
|
||||
+ select ATH79_DEV_GPIO_BUTTONS
|
||||
+ select ATH79_DEV_LEDS_GPIO
|
||||
+ select ATH79_DEV_M25P80
|
||||
+- select ATH79_DEV_NFC
|
||||
+ select ATH79_DEV_USB
|
||||
+ select ATH79_DEV_WMAC
|
||||
+- help
|
||||
+- Say 'Y' here if you want your kernel to support the
|
||||
+- Atheros DB120 reference board.
|
||||
+
|
||||
+-config ATH79_MACH_PB44
|
||||
+- bool "Atheros PB44 reference board"
|
||||
+config ATH79_MACH_TL_WR1043ND
|
||||
+ bool "TP-LINK TL-WR1043ND support"
|
||||
+ select SOC_AR913X
|
||||
@@ -1320,11 +1321,12 @@
|
||||
+
|
||||
+config ATH79_MACH_TEW_673GRU
|
||||
+ bool "TRENDnet TEW-673GRU support"
|
||||
-+ select SOC_AR71XX
|
||||
+ select SOC_AR71XX
|
||||
+ select ATH79_DEV_AP9X_PCI if PCI
|
||||
-+ select ATH79_DEV_ETH
|
||||
-+ select ATH79_DEV_GPIO_BUTTONS
|
||||
-+ select ATH79_DEV_LEDS_GPIO
|
||||
+ select ATH79_DEV_ETH
|
||||
+ select ATH79_DEV_GPIO_BUTTONS
|
||||
+ select ATH79_DEV_LEDS_GPIO
|
||||
+- select ATH79_DEV_SPI
|
||||
+ select ATH79_DEV_M25P80
|
||||
+ select ATH79_DEV_USB
|
||||
+ select ATH79_NVRAM
|
||||
@@ -1362,10 +1364,20 @@
|
||||
|
||||
config ATH79_MACH_UBNT_XM
|
||||
bool "Ubiquiti Networks XM/UniFi boards"
|
||||
-@@ -83,6 +1144,106 @@ config ATH79_MACH_UBNT_XM
|
||||
+@@ -83,6 +1144,116 @@ config ATH79_MACH_UBNT_XM
|
||||
Say 'Y' here if you want your kernel to support the
|
||||
Ubiquiti Networks XM (rev 1.0) board.
|
||||
|
||||
++config ATH79_MACH_UBNT_UNIFIAC
|
||||
++ bool "Ubiquiti UniFi AC (LITE) support"
|
||||
++ select SOC_QCA956X
|
||||
++ select ATH79_DEV_AP9X_PCI if PCI
|
||||
++ select ATH79_DEV_ETH
|
||||
++ select ATH79_DEV_GPIO_BUTTONS
|
||||
++ select ATH79_DEV_LEDS_GPIO
|
||||
++ select ATH79_DEV_M25P80
|
||||
++ select ATH79_DEV_WMAC
|
||||
++
|
||||
+config ATH79_MACH_WEIO
|
||||
+ bool "WeIO board"
|
||||
+ select SOC_AR933X
|
||||
@@ -1469,7 +1481,7 @@
|
||||
endmenu
|
||||
|
||||
config SOC_AR71XX
|
||||
-@@ -124,7 +1285,10 @@ config ATH79_DEV_DSA
|
||||
+@@ -124,7 +1295,10 @@ config ATH79_DEV_DSA
|
||||
config ATH79_DEV_ETH
|
||||
def_bool n
|
||||
|
||||
@@ -1481,7 +1493,7 @@
|
||||
def_bool n
|
||||
|
||||
config ATH79_DEV_GPIO_BUTTONS
|
||||
-@@ -154,6 +1318,11 @@ config ATH79_PCI_ATH9K_FIXUP
|
||||
+@@ -154,6 +1328,11 @@ config ATH79_PCI_ATH9K_FIXUP
|
||||
def_bool n
|
||||
|
||||
config ATH79_ROUTERBOOT
|
||||
@@ -1495,7 +1507,7 @@
|
||||
endif
|
||||
--- a/arch/mips/ath79/Makefile
|
||||
+++ b/arch/mips/ath79/Makefile
|
||||
-@@ -38,9 +38,128 @@ obj-$(CONFIG_ATH79_ROUTERBOOT) += route
|
||||
+@@ -38,9 +38,129 @@ obj-$(CONFIG_ATH79_ROUTERBOOT) += route
|
||||
#
|
||||
# Machines
|
||||
#
|
||||
@@ -1597,6 +1609,7 @@
|
||||
+obj-$(CONFIG_ATH79_MACH_TL_WR720N_V3) += mach-tl-wr720n-v3.o
|
||||
+obj-$(CONFIG_ATH79_MACH_TUBE2H) += mach-tube2h.o
|
||||
+obj-$(CONFIG_ATH79_MACH_UBNT) += mach-ubnt.o
|
||||
++obj-$(CONFIG_ATH79_MACH_UBNT_UNIFIAC) += mach-ubnt-unifiac.o
|
||||
obj-$(CONFIG_ATH79_MACH_UBNT_XM) += mach-ubnt-xm.o
|
||||
+obj-$(CONFIG_ATH79_MACH_WEIO) += mach-weio.o
|
||||
+obj-$(CONFIG_ATH79_MACH_WHR_HP_G300N) += mach-whr-hp-g300n.o
|
@ -1,21 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Fri, 13 May 2016 21:02:55 +0200
|
||||
Subject: ar71xx: Fix eth0 support for Ubiquiti UniFi AP AC
|
||||
|
||||
Fix eth0 support for the Ubiquiti UniFi AP AC
|
||||
Signed-off-by: Paul Wassi <p.wassi at gmx.at>
|
||||
|
||||
Backport of OpenWrt r49277
|
||||
|
||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c
|
||||
index 3617ca7d5fc0fff00fce9741b5d9169fac8c83c8..072cf12a31a0921a8e9b90689864f5d981cd2c32 100644
|
||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c
|
||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c
|
||||
@@ -84,6 +84,7 @@ static void __init ubnt_unifiac_setup(void)
|
||||
eeprom + UNIFIAC_MAC0_OFFSET, 0);
|
||||
|
||||
ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_SGMII;
|
||||
+ ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
|
||||
ath79_eth0_data.phy_mask = BIT(4);
|
||||
ath79_eth0_pll_data.pll_10 = 0x00001313;
|
||||
|
@ -1,193 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Fri, 13 May 2016 21:24:44 +0200
|
||||
Subject: ar71xx: Rename unifiac to unifiac-lite
|
||||
|
||||
To avoid confusion with different unifiac devices, rename existing target
|
||||
"unifiac" to "unifiac-lite", before "unifiac-pro" is introduced.
|
||||
|
||||
Signed-off-by: P.Wassi <p.wassi at gmx.at>
|
||||
|
||||
Backport of LEDE c855e70491fbd5d432915c4cbeb3b80f3a117e30
|
||||
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
|
||||
index 3adc449b23e9c590d57cdd914b6c8d990a50e0b0..924c1163e26eb84b71e4734b95221104674bfe3e 100644
|
||||
--- a/target/linux/ar71xx/base-files/etc/diag.sh
|
||||
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
|
||||
@@ -310,7 +310,7 @@ get_status_led() {
|
||||
status_led="ubnt:green:dome"
|
||||
;;
|
||||
uap-pro | \
|
||||
- unifiac)
|
||||
+ unifiac-lite)
|
||||
status_led="ubnt:white:dome"
|
||||
;;
|
||||
unifi-outdoor-plus)
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
|
||||
index ab7d93c693f8422bbb518c6accd4ffed169398cd..7777734ae3899840c1c47e7b24373b4bceee0adc 100644
|
||||
--- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
|
||||
+++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
|
||||
@@ -81,7 +81,7 @@ case "$FIRMWARE" in
|
||||
ath10kcal_extract "ART" 20480 2116
|
||||
ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16)
|
||||
;;
|
||||
- unifiac)
|
||||
+ unifiac-lite)
|
||||
ath10kcal_extract "EEPROM" 20480 2116
|
||||
;;
|
||||
esac
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
index a79376a8cff56b144268130a24a930ff2bee95cd..20070426fd033e4ff2e904f9247deed9eb48c3c3 100755
|
||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
@@ -369,7 +369,7 @@ tl-wa901nd-v3 |\
|
||||
tl-wa901nd-v4 |\
|
||||
tl-wr703n |\
|
||||
tube2h |\
|
||||
-unifiac |\
|
||||
+unifiac-lite |\
|
||||
wndap360 |\
|
||||
mynet-rext |\
|
||||
wp543)
|
||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
index ecf584d30ecae7a0e2601bed38c6cfad42cab124..6bc0b868423ef68fb83147c13b00163b29cf2aec 100755
|
||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
@@ -902,8 +902,8 @@ ar71xx_board_detect() {
|
||||
*UniFi)
|
||||
name="unifi"
|
||||
;;
|
||||
- *"UniFi-AC")
|
||||
- name="unifiac"
|
||||
+ *"UniFi-AC-LITE")
|
||||
+ name="unifiac-lite"
|
||||
;;
|
||||
*"UniFi AP Pro")
|
||||
name="uap-pro"
|
||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
index fff1c3c912cee678ea88e225958b28ceb4c4b742..90f961f3f0aaf3c76a0a8022258fbf5404165ca8 100755
|
||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
@@ -252,7 +252,7 @@ platform_check_image() {
|
||||
wlae-ag300n | \
|
||||
nbg460n_550n_550nh | \
|
||||
unifi | \
|
||||
- unifiac | \
|
||||
+ unifiac-lite | \
|
||||
unifi-outdoor | \
|
||||
carambola2 | \
|
||||
weio )
|
||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c
|
||||
index 072cf12a31a0921a8e9b90689864f5d981cd2c32..31cbe30d3ff9b323cb336c62d6fe0d7a0c67ba42 100644
|
||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c
|
||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c
|
||||
@@ -73,7 +73,7 @@ static struct gpio_keys_button ubnt_unifiac_gpio_keys[] __initdata = {
|
||||
}
|
||||
};
|
||||
|
||||
-static void __init ubnt_unifiac_setup(void)
|
||||
+static void __init ubnt_unifiac_lite_setup(void)
|
||||
{
|
||||
u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff0000);
|
||||
|
||||
@@ -81,7 +81,7 @@ static void __init ubnt_unifiac_setup(void)
|
||||
|
||||
|
||||
ath79_init_mac(ath79_eth0_data.mac_addr,
|
||||
- eeprom + UNIFIAC_MAC0_OFFSET, 0);
|
||||
+ eeprom + UNIFIAC_MAC0_OFFSET, 0);
|
||||
|
||||
ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_SGMII;
|
||||
ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
|
||||
@@ -99,12 +99,12 @@ static void __init ubnt_unifiac_setup(void)
|
||||
|
||||
|
||||
ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_unifiac_leds_gpio),
|
||||
- ubnt_unifiac_leds_gpio);
|
||||
+ ubnt_unifiac_leds_gpio);
|
||||
|
||||
ath79_register_gpio_keys_polled(-1, UNIFIAC_KEYS_POLL_INTERVAL,
|
||||
- ARRAY_SIZE(ubnt_unifiac_gpio_keys),
|
||||
- ubnt_unifiac_gpio_keys);
|
||||
+ ARRAY_SIZE(ubnt_unifiac_gpio_keys),
|
||||
+ ubnt_unifiac_gpio_keys);
|
||||
}
|
||||
|
||||
-MIPS_MACHINE(ATH79_MACH_UBNT_UNIFIAC, "UBNT-UF-AC", "Ubiquiti UniFi-AC",
|
||||
- ubnt_unifiac_setup);
|
||||
+MIPS_MACHINE(ATH79_MACH_UBNT_UNIFIAC_LITE, "UBNT-UF-AC-LITE", "Ubiquiti UniFi-AC-LITE",
|
||||
+ ubnt_unifiac_lite_setup);
|
||||
diff --git a/target/linux/ar71xx/generic/profiles/ubnt.mk b/target/linux/ar71xx/generic/profiles/ubnt.mk
|
||||
index 94eff18318264de85ea459e94280c88726404888..eac02406bbbffebbcb20962929fb8254edba520e 100644
|
||||
--- a/target/linux/ar71xx/generic/profiles/ubnt.mk
|
||||
+++ b/target/linux/ar71xx/generic/profiles/ubnt.mk
|
||||
@@ -38,16 +38,16 @@ endef
|
||||
|
||||
$(eval $(call Profile,UBNTUNIFI))
|
||||
|
||||
-define Profile/UBNTUNIFIAC
|
||||
- NAME:=Ubiquiti UniFi AP AC
|
||||
+define Profile/UBNTUNIFIACLITE
|
||||
+ NAME:=Ubiquiti UniFi AP AC LITE/LR
|
||||
PACKAGES:=kmod-ath10k ath10k-firmware-qca988x
|
||||
endef
|
||||
|
||||
-define Profile/UBNTUNIFIAC/Description
|
||||
- Package set optimized for the Ubiquiti UniFi AP AC.
|
||||
+define Profile/UBNTUNIFIACLITE/Description
|
||||
+ Package set optimized for the Ubiquiti UniFi AP AC LITE/LR.
|
||||
endef
|
||||
|
||||
-$(eval $(call Profile,UBNTUNIFIAC))
|
||||
+$(eval $(call Profile,UBNTUNIFIACLITE))
|
||||
|
||||
define Profile/UBNTUNIFIOUTDOOR
|
||||
NAME:=Ubiquiti UniFiAP Outdoor
|
||||
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
|
||||
index aaaf89ac1a369431cf9bc15c13e774ba6826bbf3..42ffc69ca3f9b1cffa542fc2d06ead2ef224d6b2 100644
|
||||
--- a/target/linux/ar71xx/image/Makefile
|
||||
+++ b/target/linux/ar71xx/image/Makefile
|
||||
@@ -741,14 +741,19 @@ endef
|
||||
TARGET_DEVICES += oolite
|
||||
|
||||
define Device/ubnt-unifiac
|
||||
- DEVICE_PROFILE := UBNT UBNTUNIFIAC
|
||||
+ DEVICE_PROFILE := UBNT
|
||||
IMAGE_SIZE := 7744k
|
||||
MTDPARTS = spi0.0:384k(u-boot)ro,64k(u-boot-env)ro,7744k(firmware),7744k(ubnt-airos)ro,128k(bs)ro,256k(cfg)ro,64k(EEPROM)ro
|
||||
IMAGES := sysupgrade.bin
|
||||
IMAGE/sysupgrade.bin = append-kernel $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE)
|
||||
- BOARDNAME := UBNT-UF-AC
|
||||
endef
|
||||
-TARGET_DEVICES += ubnt-unifiac
|
||||
+
|
||||
+define Device/ubnt-unifiac-lite
|
||||
+ $(Device/ubnt-unifiac)
|
||||
+ DEVICE_PROFILE := UBNT UBNTUNIFIACLITE
|
||||
+ BOARDNAME := UBNT-UF-AC-LITE
|
||||
+endef
|
||||
+TARGET_DEVICES += ubnt-unifiac-lite
|
||||
|
||||
rootfs_type=$(patsubst jffs2-%,jffs2,$(patsubst squashfs-%,squashfs,$(1)))
|
||||
|
||||
diff --git a/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch b/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
|
||||
index 27dc73ffa239979a799bbede72440907e9d0e187..9a28f58f67d5f98fcd4aa83dc09698705e2dfa3e 100644
|
||||
--- a/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
|
||||
+++ b/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
|
||||
@@ -165,7 +165,7 @@
|
||||
+ ATH79_MACH_UBNT_RS, /* Ubiquiti RouterStation */
|
||||
ATH79_MACH_UBNT_UAP_PRO, /* Ubiquiti UniFi AP Pro */
|
||||
ATH79_MACH_UBNT_UNIFI, /* Ubiquiti Unifi */
|
||||
-+ ATH79_MACH_UBNT_UNIFIAC, /* Ubiquiti Unifi AC */
|
||||
++ ATH79_MACH_UBNT_UNIFIAC_LITE, /* Ubiquiti Unifi AC LITE/LR */
|
||||
ATH79_MACH_UBNT_UNIFI_OUTDOOR, /* Ubiquiti UnifiAP Outdoor */
|
||||
+ ATH79_MACH_UBNT_UNIFI_OUTDOOR_PLUS, /* Ubiquiti UnifiAP Outdoor+ */
|
||||
ATH79_MACH_UBNT_XM, /* Ubiquiti Networks XM board rev 1.0 */
|
||||
@@ -1369,7 +1369,7 @@
|
||||
Ubiquiti Networks XM (rev 1.0) board.
|
||||
|
||||
+config ATH79_MACH_UBNT_UNIFIAC
|
||||
-+ bool "Ubiquiti UniFi AC (LITE) support"
|
||||
++ bool "Ubiquiti UniFi AC (LITE/LR) support"
|
||||
+ select SOC_QCA956X
|
||||
+ select ATH79_DEV_AP9X_PCI if PCI
|
||||
+ select ATH79_DEV_ETH
|
@ -1,274 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Fri, 13 May 2016 21:34:05 +0200
|
||||
Subject: ar71xx: Add support for Ubiquiti UniFi AP AC PRO
|
||||
|
||||
Add support for the Ubiquiti UniFi AP AC PRO
|
||||
Signed-off-by: P.Wassi <p.wassi at gmx.at>
|
||||
|
||||
Backport of LEDE 8307c2fe686ded345c80318359d5b6679e581fa2
|
||||
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
|
||||
index 924c1163e26eb84b71e4734b95221104674bfe3e..cb92349cab833179a87a195b94e2539cc5ce3e79 100644
|
||||
--- a/target/linux/ar71xx/base-files/etc/diag.sh
|
||||
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
|
||||
@@ -310,7 +310,8 @@ get_status_led() {
|
||||
status_led="ubnt:green:dome"
|
||||
;;
|
||||
uap-pro | \
|
||||
- unifiac-lite)
|
||||
+ unifiac-lite | \
|
||||
+ unifiac-pro)
|
||||
status_led="ubnt:white:dome"
|
||||
;;
|
||||
unifi-outdoor-plus)
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
|
||||
index 7777734ae3899840c1c47e7b24373b4bceee0adc..5eb20bb26521258599898125d42f6b73b9c81f94 100644
|
||||
--- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
|
||||
+++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
|
||||
@@ -81,7 +81,8 @@ case "$FIRMWARE" in
|
||||
ath10kcal_extract "ART" 20480 2116
|
||||
ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16)
|
||||
;;
|
||||
- unifiac-lite)
|
||||
+ unifiac-lite | \
|
||||
+ unifiac-pro)
|
||||
ath10kcal_extract "EEPROM" 20480 2116
|
||||
;;
|
||||
esac
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
index 20070426fd033e4ff2e904f9247deed9eb48c3c3..b59844eac49a1269edb88890d89b0b4d8a7121d0 100755
|
||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
@@ -401,6 +401,13 @@ wpj344)
|
||||
ucidef_add_switch_vlan "switch0" "2" "0t 2"
|
||||
;;
|
||||
|
||||
+unifiac-pro)
|
||||
+ ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
|
||||
+ ucidef_add_switch "switch0" "1" "1"
|
||||
+ ucidef_add_switch_vlan "switch0" "1" "0t 2"
|
||||
+ ucidef_add_switch_vlan "switch0" "2" "0t 3"
|
||||
+ ;;
|
||||
+
|
||||
wpj531)
|
||||
ucidef_set_interfaces_lan_wan "eth0" "eth1"
|
||||
;;
|
||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
index 6bc0b868423ef68fb83147c13b00163b29cf2aec..aded7ad117ffa1c1347c6f457c210d60b8e4df58 100755
|
||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
@@ -905,6 +905,9 @@ ar71xx_board_detect() {
|
||||
*"UniFi-AC-LITE")
|
||||
name="unifiac-lite"
|
||||
;;
|
||||
+ *"UniFi-AC-PRO")
|
||||
+ name="unifiac-pro"
|
||||
+ ;;
|
||||
*"UniFi AP Pro")
|
||||
name="uap-pro"
|
||||
;;
|
||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
index 90f961f3f0aaf3c76a0a8022258fbf5404165ca8..0228f14774d5873a52f19b60ed84389c7be86e51 100755
|
||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
@@ -253,6 +253,7 @@ platform_check_image() {
|
||||
nbg460n_550n_550nh | \
|
||||
unifi | \
|
||||
unifiac-lite | \
|
||||
+ unifiac-pro | \
|
||||
unifi-outdoor | \
|
||||
carambola2 | \
|
||||
weio )
|
||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c
|
||||
index 31cbe30d3ff9b323cb336c62d6fe0d7a0c67ba42..9194bc1c0799d83fca3f6fe76b2602d72e5f4ef8 100644
|
||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c
|
||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <asm/mach-ath79/ar71xx_regs.h>
|
||||
|
||||
#include <linux/platform_data/phy-at803x.h>
|
||||
+#include <linux/ar8216_platform.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "dev-ap9x-pci.h"
|
||||
@@ -29,6 +30,7 @@
|
||||
#include "dev-leds-gpio.h"
|
||||
#include "dev-m25p80.h"
|
||||
#include "dev-wmac.h"
|
||||
+#include "dev-usb.h"
|
||||
#include "machtypes.h"
|
||||
|
||||
|
||||
@@ -108,3 +110,70 @@ static void __init ubnt_unifiac_lite_setup(void)
|
||||
|
||||
MIPS_MACHINE(ATH79_MACH_UBNT_UNIFIAC_LITE, "UBNT-UF-AC-LITE", "Ubiquiti UniFi-AC-LITE",
|
||||
ubnt_unifiac_lite_setup);
|
||||
+
|
||||
+static struct ar8327_pad_cfg ubnt_unifiac_pro_ar8327_pad0_cfg = {
|
||||
+ .mode = AR8327_PAD_MAC_SGMII,
|
||||
+ .sgmii_delay_en = true,
|
||||
+};
|
||||
+
|
||||
+static struct ar8327_platform_data ubnt_unifiac_pro_ar8327_data = {
|
||||
+ .pad0_cfg = &ubnt_unifiac_pro_ar8327_pad0_cfg,
|
||||
+ .port0_cfg = {
|
||||
+ .force_link = 1,
|
||||
+ .speed = AR8327_PORT_SPEED_1000,
|
||||
+ .duplex = 1,
|
||||
+ .txpause = 1,
|
||||
+ .rxpause = 1,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+
|
||||
+static struct mdio_board_info ubnt_unifiac_pro_mdio0_info[] = {
|
||||
+ {
|
||||
+ .bus_id = "ag71xx-mdio.0",
|
||||
+ .phy_addr = 0,
|
||||
+ .platform_data = &ubnt_unifiac_pro_ar8327_data,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static void __init ubnt_unifiac_pro_setup(void)
|
||||
+{
|
||||
+ u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff0000);
|
||||
+
|
||||
+ ath79_register_m25p80(&ubnt_unifiac_flash_data);
|
||||
+
|
||||
+
|
||||
+ ath79_init_mac(ath79_eth0_data.mac_addr,
|
||||
+ eeprom + UNIFIAC_MAC0_OFFSET, 0);
|
||||
+
|
||||
+ ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_SGMII;
|
||||
+ ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
|
||||
+ ath79_eth0_data.phy_mask = BIT(0);
|
||||
+
|
||||
+ mdiobus_register_board_info(ubnt_unifiac_pro_mdio0_info,
|
||||
+ ARRAY_SIZE(ubnt_unifiac_pro_mdio0_info));
|
||||
+
|
||||
+ ath79_register_mdio(0, 0x00);
|
||||
+ ath79_register_eth(0);
|
||||
+
|
||||
+
|
||||
+ ath79_register_usb();
|
||||
+
|
||||
+
|
||||
+ ath79_register_wmac(eeprom + UNIFIAC_WMAC_CALDATA_OFFSET, NULL);
|
||||
+
|
||||
+
|
||||
+ ap91_pci_init(eeprom + UNIFIAC_PCI_CALDATA_OFFSET, NULL);
|
||||
+
|
||||
+
|
||||
+ ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_unifiac_leds_gpio),
|
||||
+ ubnt_unifiac_leds_gpio);
|
||||
+
|
||||
+ ath79_register_gpio_keys_polled(-1, UNIFIAC_KEYS_POLL_INTERVAL,
|
||||
+ ARRAY_SIZE(ubnt_unifiac_gpio_keys),
|
||||
+ ubnt_unifiac_gpio_keys);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+MIPS_MACHINE(ATH79_MACH_UBNT_UNIFIAC_PRO, "UBNT-UF-AC-PRO", "Ubiquiti UniFi-AC-PRO",
|
||||
+ ubnt_unifiac_pro_setup);
|
||||
diff --git a/target/linux/ar71xx/generic/profiles/ubnt.mk b/target/linux/ar71xx/generic/profiles/ubnt.mk
|
||||
index eac02406bbbffebbcb20962929fb8254edba520e..69b83985bd6623c0d6732399d3e2cc8c0af9f9f1 100644
|
||||
--- a/target/linux/ar71xx/generic/profiles/ubnt.mk
|
||||
+++ b/target/linux/ar71xx/generic/profiles/ubnt.mk
|
||||
@@ -49,6 +49,17 @@ endef
|
||||
|
||||
$(eval $(call Profile,UBNTUNIFIACLITE))
|
||||
|
||||
+define Profile/UBNTUNIFIACPRO
|
||||
+ NAME:=Ubiquiti UniFi AP AC PRO
|
||||
+ PACKAGES:=kmod-ath10k ath10k-firmware-qca988x kmod-usb-core kmod-usb-ohci kmod-usb2
|
||||
+endef
|
||||
+
|
||||
+define Profile/UBNTUNIFIACPRO/Description
|
||||
+ Package set optimized for the Ubiquiti UniFi AP AC PRO.
|
||||
+endef
|
||||
+
|
||||
+$(eval $(call Profile,UBNTUNIFIACPRO))
|
||||
+
|
||||
define Profile/UBNTUNIFIOUTDOOR
|
||||
NAME:=Ubiquiti UniFiAP Outdoor
|
||||
PACKAGES:=
|
||||
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
|
||||
index 42ffc69ca3f9b1cffa542fc2d06ead2ef224d6b2..7c648f26e10c49000b848e9b300701b388410c04 100644
|
||||
--- a/target/linux/ar71xx/image/Makefile
|
||||
+++ b/target/linux/ar71xx/image/Makefile
|
||||
@@ -753,7 +753,13 @@ define Device/ubnt-unifiac-lite
|
||||
DEVICE_PROFILE := UBNT UBNTUNIFIACLITE
|
||||
BOARDNAME := UBNT-UF-AC-LITE
|
||||
endef
|
||||
-TARGET_DEVICES += ubnt-unifiac-lite
|
||||
+
|
||||
+define Device/ubnt-unifiac-pro
|
||||
+ $(Device/ubnt-unifiac)
|
||||
+ DEVICE_PROFILE := UBNT UBNTUNIFIACPRO
|
||||
+ BOARDNAME := UBNT-UF-AC-PRO
|
||||
+endef
|
||||
+TARGET_DEVICES += ubnt-unifiac-lite ubnt-unifiac-pro
|
||||
|
||||
rootfs_type=$(patsubst jffs2-%,jffs2,$(patsubst squashfs-%,squashfs,$(1)))
|
||||
|
||||
diff --git a/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch b/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
|
||||
index 9a28f58f67d5f98fcd4aa83dc09698705e2dfa3e..debde6e6a552e71b551d8c01ba06af03013407bf 100644
|
||||
--- a/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
|
||||
+++ b/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/arch/mips/ath79/machtypes.h
|
||||
+++ b/arch/mips/ath79/machtypes.h
|
||||
-@@ -16,22 +16,201 @@
|
||||
+@@ -16,22 +16,202 @@
|
||||
|
||||
enum ath79_mach_type {
|
||||
ATH79_MACH_GENERIC = 0,
|
||||
@@ -166,6 +166,7 @@
|
||||
ATH79_MACH_UBNT_UAP_PRO, /* Ubiquiti UniFi AP Pro */
|
||||
ATH79_MACH_UBNT_UNIFI, /* Ubiquiti Unifi */
|
||||
+ ATH79_MACH_UBNT_UNIFIAC_LITE, /* Ubiquiti Unifi AC LITE/LR */
|
||||
++ ATH79_MACH_UBNT_UNIFIAC_PRO, /* Ubiquiti Unifi AC PRO */
|
||||
ATH79_MACH_UBNT_UNIFI_OUTDOOR, /* Ubiquiti UnifiAP Outdoor */
|
||||
+ ATH79_MACH_UBNT_UNIFI_OUTDOOR_PLUS, /* Ubiquiti UnifiAP Outdoor+ */
|
||||
ATH79_MACH_UBNT_XM, /* Ubiquiti Networks XM board rev 1.0 */
|
||||
@@ -1364,12 +1365,12 @@
|
||||
|
||||
config ATH79_MACH_UBNT_XM
|
||||
bool "Ubiquiti Networks XM/UniFi boards"
|
||||
-@@ -83,6 +1144,116 @@ config ATH79_MACH_UBNT_XM
|
||||
+@@ -83,6 +1144,117 @@ config ATH79_MACH_UBNT_XM
|
||||
Say 'Y' here if you want your kernel to support the
|
||||
Ubiquiti Networks XM (rev 1.0) board.
|
||||
|
||||
+config ATH79_MACH_UBNT_UNIFIAC
|
||||
-+ bool "Ubiquiti UniFi AC (LITE/LR) support"
|
||||
++ bool "Ubiquiti UniFi AC (LITE/LR/PRO) support"
|
||||
+ select SOC_QCA956X
|
||||
+ select ATH79_DEV_AP9X_PCI if PCI
|
||||
+ select ATH79_DEV_ETH
|
||||
@@ -1377,6 +1378,7 @@
|
||||
+ select ATH79_DEV_LEDS_GPIO
|
||||
+ select ATH79_DEV_M25P80
|
||||
+ select ATH79_DEV_WMAC
|
||||
++ select ATH79_DEV_USB
|
||||
+
|
||||
+config ATH79_MACH_WEIO
|
||||
+ bool "WeIO board"
|
||||
@@ -1481,7 +1483,7 @@
|
||||
endmenu
|
||||
|
||||
config SOC_AR71XX
|
||||
-@@ -124,7 +1295,10 @@ config ATH79_DEV_DSA
|
||||
+@@ -124,7 +1296,10 @@ config ATH79_DEV_DSA
|
||||
config ATH79_DEV_ETH
|
||||
def_bool n
|
||||
|
||||
@@ -1493,7 +1495,7 @@
|
||||
def_bool n
|
||||
|
||||
config ATH79_DEV_GPIO_BUTTONS
|
||||
-@@ -154,6 +1328,11 @@ config ATH79_PCI_ATH9K_FIXUP
|
||||
+@@ -154,6 +1329,11 @@ config ATH79_PCI_ATH9K_FIXUP
|
||||
def_bool n
|
||||
|
||||
config ATH79_ROUTERBOOT
|
@ -1,395 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Thu, 3 Sep 2015 23:50:51 +0200
|
||||
Subject: ath9k: add HSR tuner support for UniFi Outdoor Plus
|
||||
|
||||
Patch-by: Stefan Rompf <stefan@loplof.de>
|
||||
|
||||
diff --git a/package/kernel/mac80211/patches/931-ubnt-uap-plus-hsr.patch b/package/kernel/mac80211/patches/931-ubnt-uap-plus-hsr.patch
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..8e09fee938951ab3636d23b5fe4dee3ab0e11c7a
|
||||
--- /dev/null
|
||||
+++ b/package/kernel/mac80211/patches/931-ubnt-uap-plus-hsr.patch
|
||||
@@ -0,0 +1,349 @@
|
||||
+--- a/drivers/net/wireless/ath/ath9k/channel.c
|
||||
++++ b/drivers/net/wireless/ath/ath9k/channel.c
|
||||
+@@ -15,6 +15,8 @@
|
||||
+ */
|
||||
+
|
||||
+ #include "ath9k.h"
|
||||
++#include <linux/ath9k_platform.h>
|
||||
++#include "hsr.h"
|
||||
+
|
||||
+ /* Set/change channels. If the channel is really being changed, it's done
|
||||
+ * by reseting the chip. To accomplish this we must first cleanup any pending
|
||||
+@@ -22,6 +24,7 @@
|
||||
+ */
|
||||
+ static int ath_set_channel(struct ath_softc *sc)
|
||||
+ {
|
||||
++ struct ath9k_platform_data *pdata = sc->dev->platform_data;
|
||||
+ struct ath_hw *ah = sc->sc_ah;
|
||||
+ struct ath_common *common = ath9k_hw_common(ah);
|
||||
+ struct ieee80211_hw *hw = sc->hw;
|
||||
+@@ -41,6 +44,11 @@ static int ath_set_channel(struct ath_so
|
||||
+ ath_dbg(common, CONFIG, "Set channel: %d MHz width: %d\n",
|
||||
+ chan->center_freq, chandef->width);
|
||||
+
|
||||
++ if (pdata && pdata->ubnt_hsr) {
|
||||
++ hsr_enable(ah, chandef->width, chan->center_freq);
|
||||
++ hsr_status(ah);
|
||||
++ }
|
||||
++
|
||||
+ /* update survey stats for the old channel before switching */
|
||||
+ spin_lock_bh(&common->cc_lock);
|
||||
+ ath_update_survey_stats(sc);
|
||||
+--- /dev/null
|
||||
++++ b/drivers/net/wireless/ath/ath9k/hsr.c
|
||||
+@@ -0,0 +1,223 @@
|
||||
++/*
|
||||
++ *
|
||||
++ * The MIT License (MIT)
|
||||
++ *
|
||||
++ * Copyright (c) 2015 Kirill Berezin
|
||||
++ *
|
||||
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
++ * of this software and associated documentation files (the "Software"), to deal
|
||||
++ * in the Software without restriction, including without limitation the rights
|
||||
++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
++ * copies of the Software, and to permit persons to whom the Software is
|
||||
++ * furnished to do so, subject to the following conditions:
|
||||
++ *
|
||||
++ * The above copyright notice and this permission notice shall be included in all
|
||||
++ * copies or substantial portions of the Software.
|
||||
++ *
|
||||
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
++ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
++ * SOFTWARE.
|
||||
++ *
|
||||
++ */
|
||||
++
|
||||
++#include <linux/io.h>
|
||||
++#include <linux/slab.h>
|
||||
++#include <linux/module.h>
|
||||
++#include <linux/time.h>
|
||||
++#include <linux/bitops.h>
|
||||
++#include <linux/etherdevice.h>
|
||||
++#include <linux/rtnetlink.h>
|
||||
++#include <asm/unaligned.h>
|
||||
++
|
||||
++#include "hw.h"
|
||||
++#include "ath9k.h"
|
||||
++
|
||||
++#define HSR_GPIO_CSN 8
|
||||
++#define HSR_GPIO_CLK 6
|
||||
++#define HSR_GPIO_DOUT 7
|
||||
++#define HSR_GPIO_DIN 5
|
||||
++
|
||||
++/* delays are in useconds */
|
||||
++#define HSR_DELAY_HALF_TICK 100
|
||||
++#define HSR_DELAY_PRE_WRITE 75
|
||||
++#define HSR_DELAY_FINAL 20000
|
||||
++#define HSR_DELAY_TRAILING 200
|
||||
++
|
||||
++
|
||||
++void hsr_init(struct ath_hw* ah) {
|
||||
++ ath9k_hw_gpio_request_in(ah, HSR_GPIO_DIN, NULL);
|
||||
++ ath9k_hw_gpio_request_out(ah, HSR_GPIO_CSN, NULL,
|
||||
++ AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
|
||||
++ ath9k_hw_gpio_request_out(ah, HSR_GPIO_CLK, NULL,
|
||||
++ AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
|
||||
++ ath9k_hw_gpio_request_out(ah, HSR_GPIO_DOUT, NULL,
|
||||
++ AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
|
||||
++
|
||||
++ ath9k_hw_set_gpio(ah, HSR_GPIO_CSN, 1);
|
||||
++ ath9k_hw_set_gpio(ah, HSR_GPIO_CLK, 0);
|
||||
++ ath9k_hw_set_gpio(ah, HSR_GPIO_DOUT, 0);
|
||||
++
|
||||
++ udelay(HSR_DELAY_TRAILING);
|
||||
++}
|
||||
++
|
||||
++static u32 hsr_write_byte(struct ath_hw* ah, int delay, u32 value){
|
||||
++ struct ath_common *common = ath9k_hw_common(ah);
|
||||
++ int i;
|
||||
++ u32 rval = 0;
|
||||
++
|
||||
++ udelay(delay);
|
||||
++
|
||||
++ ath9k_hw_set_gpio(ah, HSR_GPIO_CLK, 0);
|
||||
++ udelay(HSR_DELAY_HALF_TICK);
|
||||
++
|
||||
++ ath9k_hw_set_gpio(ah, HSR_GPIO_CSN, 0);
|
||||
++ udelay(HSR_DELAY_HALF_TICK);
|
||||
++
|
||||
++ for( i = 0; i < 8; ++i) {
|
||||
++ rval = rval << 1;
|
||||
++
|
||||
++ // pattern is left to right, that is 7-th bit runs first
|
||||
++ ath9k_hw_set_gpio(ah, HSR_GPIO_DOUT, (value >> (7 - i)) & 0x1);
|
||||
++ udelay(HSR_DELAY_HALF_TICK);
|
||||
++
|
||||
++ ath9k_hw_set_gpio(ah, HSR_GPIO_CLK, 1);
|
||||
++ udelay(HSR_DELAY_HALF_TICK);
|
||||
++
|
||||
++ rval |= ath9k_hw_gpio_get(ah, HSR_GPIO_DIN);
|
||||
++
|
||||
++ ath9k_hw_set_gpio(ah, HSR_GPIO_CLK, 0);
|
||||
++ udelay(HSR_DELAY_HALF_TICK);
|
||||
++ }
|
||||
++
|
||||
++ ath9k_hw_set_gpio(ah, HSR_GPIO_CSN, 1);
|
||||
++ udelay(HSR_DELAY_HALF_TICK);
|
||||
++
|
||||
++ ath_dbg(common, CONFIG, "hsr_write_byte: write byte %d return value is %d %c\n",
|
||||
++ value, rval, rval > 32 ? rval : '-');
|
||||
++
|
||||
++ return rval & 0xff;
|
||||
++}
|
||||
++
|
||||
++static int hsr_write_a_chain(struct ath_hw* ah, char* chain, int items) {
|
||||
++ int i = 0;
|
||||
++ int status = 0;
|
||||
++
|
||||
++ // a preamble
|
||||
++ hsr_write_byte(ah, HSR_DELAY_PRE_WRITE, 0);
|
||||
++ status = hsr_write_byte(ah, HSR_DELAY_PRE_WRITE, 0);
|
||||
++
|
||||
++ // clear HSR's reply buffer
|
||||
++ if (status) {
|
||||
++ int loop = 0;
|
||||
++ for ( loop = 0; (loop < 42) && status; ++loop) {
|
||||
++ status = hsr_write_byte(ah, HSR_DELAY_PRE_WRITE, 0);
|
||||
++ }
|
||||
++ if ( loop >= 42) {
|
||||
++ ATH_DBG_WARN(1, "hsr_write_a_chain: can't clear an output buffer after a 42 cycles.\n");
|
||||
++ return -1;
|
||||
++ }
|
||||
++ }
|
||||
++
|
||||
++ for ( i =0; (i < items) && ( 0 != chain[i]); ++i) {
|
||||
++ hsr_write_byte(ah, HSR_DELAY_PRE_WRITE, (u32)chain[i]);
|
||||
++ }
|
||||
++
|
||||
++ hsr_write_byte(ah, HSR_DELAY_PRE_WRITE, 0);
|
||||
++ mdelay(HSR_DELAY_FINAL / 1000);
|
||||
++
|
||||
++ // reply
|
||||
++ memset(chain, 0, items);
|
||||
++
|
||||
++ hsr_write_byte(ah, HSR_DELAY_PRE_WRITE, 0);
|
||||
++ udelay(HSR_DELAY_TRAILING);
|
||||
++
|
||||
++ for ( i = 0; i < (items - 1); ++i) {
|
||||
++ u32 ret;
|
||||
++ if ( 0 != (ret = hsr_write_byte(ah, HSR_DELAY_PRE_WRITE, 0))) {
|
||||
++ chain[i] = (char)ret;
|
||||
++ } else {
|
||||
++ break;
|
||||
++ }
|
||||
++ udelay(HSR_DELAY_TRAILING);
|
||||
++ }
|
||||
++
|
||||
++ return (1 < i) ? simple_strtol(chain + 1, NULL, 10) : 0;
|
||||
++}
|
||||
++
|
||||
++int hsr_disable(struct ath_hw* ah) {
|
||||
++ char cmd[10] = {'b', '4', '0', 0, 0, 0, 0, 0, 0, 0};
|
||||
++ int ret;
|
||||
++
|
||||
++ ret = hsr_write_a_chain(ah, cmd, sizeof(cmd));
|
||||
++ if ( (ret > 0) && (*cmd == 'B')) {
|
||||
++ return 0;
|
||||
++ }
|
||||
++
|
||||
++ return -1;
|
||||
++}
|
||||
++
|
||||
++int hsr_enable(struct ath_hw* ah, int bw, int fq) {
|
||||
++ char cmd[10];
|
||||
++ int ret;
|
||||
++
|
||||
++ /* Bandwidth argument is 0 sometimes. Assume default 802.11bgn
|
||||
++ 20MHz on invalid values */
|
||||
++ if ( (bw != 5) && (bw != 10) && (bw != 20) && (bw != 40)) {
|
||||
++ bw = 20;
|
||||
++ }
|
||||
++
|
||||
++ memset(cmd, 0, sizeof(cmd));
|
||||
++ *cmd = 'b'; // 98
|
||||
++ snprintf(cmd + 1, 3, "%02d", bw);
|
||||
++
|
||||
++ ret = hsr_write_a_chain(ah, cmd, sizeof(cmd));
|
||||
++ if ( (*cmd != 'B') || (ret != bw)) {
|
||||
++ ATH_DBG_WARN(1, "hsr_enable: failed changing bandwidth -> set (%d,%d) reply (%d, %d) \n", 'b', bw, *cmd, ret);
|
||||
++ return -1;
|
||||
++ }
|
||||
++
|
||||
++ memset(cmd, 0, sizeof(cmd));
|
||||
++ *cmd = 'x'; // 120
|
||||
++ ret = hsr_write_a_chain(ah, cmd, sizeof(cmd));
|
||||
++ if ( *cmd != 'X') {
|
||||
++ ATH_DBG_WARN(1, "hsr_enable: failed 'x' command -> reply (%d, %d) \n", *cmd, ret);
|
||||
++ return -1;
|
||||
++ }
|
||||
++
|
||||
++ memset(cmd, 0, sizeof(cmd));
|
||||
++ *cmd = 'm'; // 109
|
||||
++ ret = hsr_write_a_chain(ah, cmd, sizeof(cmd));
|
||||
++ if ( *cmd != 'M') {
|
||||
++ ATH_DBG_WARN(1, "hsr_enable: failed 'm' command -> reply (%d, %d) \n", *cmd, ret);
|
||||
++ return -1;
|
||||
++ }
|
||||
++
|
||||
++ memset(cmd, 0, sizeof(cmd));
|
||||
++ *cmd = 'f'; // 102
|
||||
++ snprintf(cmd + 1, 6, "%05d", fq);
|
||||
++ ret = hsr_write_a_chain(ah, cmd, sizeof(cmd));
|
||||
++ if ( (*cmd != 'F') && (ret != fq)) {
|
||||
++ ATH_DBG_WARN(1, "hsr_enable: failed set frequency -> reply (%d, %d) \n", *cmd, ret);
|
||||
++ return -1;
|
||||
++ }
|
||||
++
|
||||
++ return 0;
|
||||
++}
|
||||
++
|
||||
++int hsr_status(struct ath_hw* ah) {
|
||||
++ char cmd[10] = {'s', 0, 0, 0, 0, 0, 0, 0, 0, 0}; // 115
|
||||
++ int ret;
|
||||
++
|
||||
++ ret = hsr_write_a_chain(ah, cmd, sizeof(cmd));
|
||||
++ if ( (*cmd != 'S')) {
|
||||
++ ATH_DBG_WARN(1, "hsr_status: returned %d,%d \n", *cmd, ret);
|
||||
++ return -1;
|
||||
++ }
|
||||
++
|
||||
++ return 0;
|
||||
++}
|
||||
++
|
||||
+--- /dev/null
|
||||
++++ b/drivers/net/wireless/ath/ath9k/hsr.h
|
||||
+@@ -0,0 +1,33 @@
|
||||
++/*
|
||||
++ * The MIT License (MIT)
|
||||
++ *
|
||||
++ * Copyright (c) 2015 Kirill Berezin
|
||||
++ *
|
||||
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
++ * of this software and associated documentation files (the "Software"), to deal
|
||||
++ * in the Software without restriction, including without limitation the rights
|
||||
++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
++ * copies of the Software, and to permit persons to whom the Software is
|
||||
++ * furnished to do so, subject to the following conditions:
|
||||
++ *
|
||||
++ * The above copyright notice and this permission notice shall be included in all
|
||||
++ * copies or substantial portions of the Software.
|
||||
++ *
|
||||
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
++ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
++ * SOFTWARE.
|
||||
++ */
|
||||
++
|
||||
++#ifndef HSR_H_
|
||||
++#define HSR_H_
|
||||
++
|
||||
++void hsr_init(struct ath_hw* ah);
|
||||
++int hsr_disable(struct ath_hw* ah);
|
||||
++int hsr_enable(struct ath_hw* ah, int bw, int fq);
|
||||
++int hsr_status(struct ath_hw* ah);
|
||||
++
|
||||
++#endif /* HSR_H_ */
|
||||
+--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||
++++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||
+@@ -16,8 +16,10 @@
|
||||
+
|
||||
+ #include <linux/nl80211.h>
|
||||
+ #include <linux/delay.h>
|
||||
++#include <linux/ath9k_platform.h>
|
||||
+ #include "ath9k.h"
|
||||
+ #include "btcoex.h"
|
||||
++#include "hsr.h"
|
||||
+
|
||||
+ u8 ath9k_parse_mpdudensity(u8 mpdudensity)
|
||||
+ {
|
||||
+@@ -652,6 +654,7 @@ void ath_reset_work(struct work_struct *
|
||||
+ static int ath9k_start(struct ieee80211_hw *hw)
|
||||
+ {
|
||||
+ struct ath_softc *sc = hw->priv;
|
||||
++ struct ath9k_platform_data *pdata = sc->dev->platform_data;
|
||||
+ struct ath_hw *ah = sc->sc_ah;
|
||||
+ struct ath_common *common = ath9k_hw_common(ah);
|
||||
+ struct ieee80211_channel *curchan = sc->cur_chan->chandef.chan;
|
||||
+@@ -727,6 +730,11 @@ static int ath9k_start(struct ieee80211_
|
||||
+ ath9k_hw_set_gpio(ah, ah->led_pin,
|
||||
+ (ah->config.led_active_high) ? 1 : 0);
|
||||
+
|
||||
++ if (pdata && pdata->ubnt_hsr) {
|
||||
++ hsr_init(ah);
|
||||
++ hsr_disable(ah);
|
||||
++ }
|
||||
++
|
||||
+ /*
|
||||
+ * Reset key cache to sane defaults (all entries cleared) instead of
|
||||
+ * semi-random values after suspend/resume.
|
||||
+--- a/drivers/net/wireless/ath/ath9k/Makefile
|
||||
++++ b/drivers/net/wireless/ath/ath9k/Makefile
|
||||
+@@ -6,7 +6,8 @@ ath9k-y += beacon.o \
|
||||
+ xmit.o \
|
||||
+ link.o \
|
||||
+ antenna.o \
|
||||
+- channel.o
|
||||
++ channel.o \
|
||||
++ hsr.o
|
||||
+
|
||||
+ ath9k-$(CPTCFG_ATH9K_BTCOEX_SUPPORT) += mci.o
|
||||
+ ath9k-$(CPTCFG_ATH9K_PCI) += pci.o
|
||||
+--- a/include/linux/ath9k_platform.h
|
||||
++++ b/include/linux/ath9k_platform.h
|
||||
+@@ -54,6 +54,8 @@ struct ath9k_platform_data {
|
||||
+ unsigned num_btns;
|
||||
+ const struct gpio_keys_button *btns;
|
||||
+ unsigned btn_poll_interval;
|
||||
++
|
||||
++ bool ubnt_hsr;
|
||||
+ };
|
||||
+
|
||||
+ #endif /* _LINUX_ATH9K_PLATFORM_H */
|
||||
diff --git a/target/linux/ar71xx/patches-3.18/608-MIPS-ath79-ubnt-xm-add-more-boards.patch b/target/linux/ar71xx/patches-3.18/608-MIPS-ath79-ubnt-xm-add-more-boards.patch
|
||||
index 78035131db93f3e465585d7e96bfae9e88783d28..d865ed29ac268b6b49644c0841be6dfeace75038 100644
|
||||
--- a/target/linux/ar71xx/patches-3.18/608-MIPS-ath79-ubnt-xm-add-more-boards.patch
|
||||
+++ b/target/linux/ar71xx/patches-3.18/608-MIPS-ath79-ubnt-xm-add-more-boards.patch
|
||||
@@ -254,6 +254,7 @@
|
||||
+ ath79_register_eth(0);
|
||||
+ ath79_register_eth(1);
|
||||
+
|
||||
++ ap9x_pci_get_wmac_data(0)->ubnt_hsr = true;
|
||||
+ ap91_pci_init(ee, NULL);
|
||||
+
|
||||
+ ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_unifi_outdoor_plus_leds_gpio),
|
||||
diff --git a/target/linux/generic/patches-3.18/150-ath9k_ubnt_hsr_filter.patch b/target/linux/generic/patches-3.18/150-ath9k_ubnt_hsr_filter.patch
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..b8844f1341f9a8a478730ef6ac440833b84b3e98
|
||||
--- /dev/null
|
||||
+++ b/target/linux/generic/patches-3.18/150-ath9k_ubnt_hsr_filter.patch
|
||||
@@ -0,0 +1,16 @@
|
||||
+Flag that this platform is an Ubiquiti UniFi Outdoor Plus
|
||||
+containing a RF filter in ath9k's receive path.
|
||||
+
|
||||
+Signed-off-by: Stefan Rompf <stefan@loplof.de>
|
||||
+
|
||||
+--- a/include/linux/ath9k_platform.h
|
||||
++++ b/include/linux/ath9k_platform.h
|
||||
+@@ -54,6 +54,8 @@ struct ath9k_platform_data {
|
||||
+ unsigned num_btns;
|
||||
+ const struct gpio_keys_button *btns;
|
||||
+ unsigned btn_poll_interval;
|
||||
++
|
||||
++ bool ubnt_hsr;
|
||||
+ };
|
||||
+
|
||||
+ #endif /* _LINUX_ATH9K_PLATFORM_H */
|
@ -1,41 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sun, 29 May 2016 11:37:08 +0200
|
||||
Subject: ar71xx: Send power to USB port on WNR2200
|
||||
|
||||
This patch fixes ticket #15267 by enabling power on the
|
||||
WNR2200's USB port. At present, the USB port on the WNR2200
|
||||
is non-functional due to it not receiving power.
|
||||
|
||||
This patch defines an additional GPIO pin, but none of the
|
||||
current GPIO definitions have been modified.
|
||||
|
||||
Signed-off-by: Riley Baird <BM-2cVqnDuYbAU5do2DfJTrN7ZbAJ246S4XiX@bitmessage.ch>
|
||||
|
||||
Backport of r47236
|
||||
|
||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-wnr2200.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-wnr2200.c
|
||||
index 0087cac62087786d45bd5c8b68b2ec2ce3b5715e..5d23f21763cd9f4ddafc97f79ff47e819a18f2a6 100644
|
||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-wnr2200.c
|
||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-wnr2200.c
|
||||
@@ -36,7 +36,7 @@
|
||||
#define WNR2200_GPIO_LED_LAN4_GREEN 16
|
||||
#define WNR2200_GPIO_LED_PWR_AMBER 21
|
||||
#define WNR2200_GPIO_LED_PWR_GREEN 22
|
||||
-
|
||||
+#define WNR2200_GPIO_USB_5V 4
|
||||
#define WNR2200_GPIO_USB_POWER 24
|
||||
|
||||
#define WNR2200_KEYS_POLL_INTERVAL 20 /* msecs */
|
||||
@@ -128,9 +128,9 @@ static void __init wnr2200_setup(void)
|
||||
wnr2200_leds_gpio);
|
||||
|
||||
/* enable power for the USB port */
|
||||
- gpio_request_one(WNR2200_GPIO_USB_POWER,
|
||||
- GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
|
||||
- "USB power");
|
||||
+ ap9x_pci_setup_wmac_gpio(0,
|
||||
+ BIT(WNR2200_GPIO_USB_5V),
|
||||
+ BIT(WNR2200_GPIO_USB_5V));
|
||||
|
||||
ath79_register_usb();
|
||||
}
|
@ -1,86 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sun, 29 May 2016 11:45:14 +0200
|
||||
Subject: ar71xx: WNR2200: fix for random WLAN MAC
|
||||
|
||||
Fix for invalid/random/duplicate WLAN MAC address in WNR2200.
|
||||
Permanent platform MAC is calculated and assigned during system startup.
|
||||
WLAN MAC follows wired Ethernet interface addresses.
|
||||
|
||||
Signed-off-by: Michal Cieslakiewicz <michal.cieslakiewicz@wp.pl>
|
||||
|
||||
Backport of r49100
|
||||
|
||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-wnr2200.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-wnr2200.c
|
||||
index 5d23f21763cd9f4ddafc97f79ff47e819a18f2a6..37ffc4c56be33be96c43078117d7b123679378b3 100644
|
||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-wnr2200.c
|
||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-wnr2200.c
|
||||
@@ -12,6 +12,7 @@
|
||||
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
+#include <linux/kernel.h> /* for max() macro */
|
||||
|
||||
#include <asm/mach-ath79/ath79.h>
|
||||
|
||||
@@ -45,6 +46,7 @@
|
||||
#define WNR2200_MAC0_OFFSET 0
|
||||
#define WNR2200_MAC1_OFFSET 6
|
||||
#define WNR2200_PCIE_CALDATA_OFFSET 0x1000
|
||||
+#define WNR2200_WMAC_OFFSET 0x108c /* wireless MAC is inside ART */
|
||||
|
||||
static struct gpio_led wnr2200_leds_gpio[] __initdata = {
|
||||
{
|
||||
@@ -102,9 +104,40 @@ static struct gpio_led wnr2200_leds_gpio[] __initdata = {
|
||||
}
|
||||
};
|
||||
|
||||
+/*
|
||||
+ * For WNR2200 ART flash area used for WLAN MAC is usually empty (0xff)
|
||||
+ * so ath9k driver uses random MAC instead each time module is loaded.
|
||||
+ * OpenWrt's original fix was to copy eth1 address to WLAN interface.
|
||||
+ * New solution does not duplicate hardware addresses and is taken from
|
||||
+ * WNR2000v3 code. It assigns permanent WLAN MAC equal to ethN's MAC
|
||||
+ * plus 1, so network interfaces get sequential addresses.
|
||||
+ * If ART wireless MAC address field has been filled by user, use it.
|
||||
+ */
|
||||
+static void __init wnr2200_get_wmac(u8 *wmac_gen_addr, int mac0_art_offset,
|
||||
+ int mac1_art_offset, int wmac_art_offset)
|
||||
+{
|
||||
+ u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
|
||||
+ u8 *eth0_mac_addr = (u8 *) (art + mac0_art_offset);
|
||||
+ u8 *eth1_mac_addr = (u8 *) (art + mac1_art_offset);
|
||||
+ u8 *wlan_mac_addr = (u8 *) (art + wmac_art_offset);
|
||||
+
|
||||
+ /* only 0xff if all bits are set - address is invalid, empty area */
|
||||
+ if ((wlan_mac_addr[0] & wlan_mac_addr[1] & wlan_mac_addr[2] &
|
||||
+ wlan_mac_addr[3] & wlan_mac_addr[4] & wlan_mac_addr[5]) == 0xff) {
|
||||
+ memcpy(wmac_gen_addr, eth0_mac_addr, 5);
|
||||
+ wmac_gen_addr[5] = max(eth0_mac_addr[5], eth1_mac_addr[5]) + 1;
|
||||
+
|
||||
+ /* Avoid potential conflict in case max(0xff,0x00)+1==0x00 */
|
||||
+ if (!wmac_gen_addr[5])
|
||||
+ wmac_gen_addr[5] = 1;
|
||||
+ } else
|
||||
+ memcpy(wmac_gen_addr, wlan_mac_addr, 6);
|
||||
+}
|
||||
+
|
||||
static void __init wnr2200_setup(void)
|
||||
{
|
||||
u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
|
||||
+ u8 wlan_mac_addr[6];
|
||||
|
||||
ath79_register_mdio(0, 0x0);
|
||||
|
||||
@@ -121,8 +154,10 @@ static void __init wnr2200_setup(void)
|
||||
ath79_register_eth(1);
|
||||
|
||||
ath79_register_m25p80(NULL);
|
||||
- ap91_pci_init(art + WNR2200_PCIE_CALDATA_OFFSET,
|
||||
- art + WNR2200_MAC1_OFFSET);
|
||||
+
|
||||
+ wnr2200_get_wmac(wlan_mac_addr, WNR2200_MAC0_OFFSET,
|
||||
+ WNR2200_MAC1_OFFSET, WNR2200_WMAC_OFFSET);
|
||||
+ ap91_pci_init(art + WNR2200_PCIE_CALDATA_OFFSET, wlan_mac_addr);
|
||||
|
||||
ath79_register_leds_gpio(-1, ARRAY_SIZE(wnr2200_leds_gpio),
|
||||
wnr2200_leds_gpio);
|
@ -1,251 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sun, 29 May 2016 11:50:03 +0200
|
||||
Subject: ar71xx: WNR2200: enable control of all LEDs and buttons
|
||||
|
||||
This patch provides full GPIO support for WNR2200 (LEDs and buttons).
|
||||
It exposes all LEDs to operating system, including Ethernet ones.
|
||||
|
||||
Signed-off-by: Michal Cieslakiewicz <michal.cieslakiewicz@wp.pl>
|
||||
|
||||
Backport of r49101
|
||||
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
|
||||
index f4d523418c8d59e3c96dbe3d68eedd8d85e33546..b8677960249c1e05703570fdf2be4197bde5cac5 100644
|
||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
|
||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
|
||||
@@ -600,6 +600,21 @@ wnr2000-v4)
|
||||
ucidef_set_led_usbdev "usb" "USB" "netgear:amber:status" "1-1"
|
||||
;;
|
||||
|
||||
+wnr2200)
|
||||
+ ucidef_set_led_netdev "wan-amber" "WAN (amber)" "netgear:amber:wan" "eth0"
|
||||
+ ucidef_set_led_default "wan-green" "WAN (green)" "netgear:green:wan" "0"
|
||||
+ ucidef_set_led_netdev "wlan" "WLAN" "netgear:blue:wlan" "wlan0"
|
||||
+ ucidef_set_led_switch "lan1green" "LAN1 (green)" "netgear:green:lan1" "switch0" "0x02" "0x04"
|
||||
+ ucidef_set_led_switch "lan2green" "LAN2 (green)" "netgear:green:lan2" "switch0" "0x04" "0x04"
|
||||
+ ucidef_set_led_switch "lan3green" "LAN3 (green)" "netgear:green:lan3" "switch0" "0x08" "0x04"
|
||||
+ ucidef_set_led_switch "lan4green" "LAN4 (green)" "netgear:green:lan4" "switch0" "0x10" "0x04"
|
||||
+ ucidef_set_led_switch "lan1amber" "LAN1 (amber)" "netgear:amber:lan1" "switch0" "0x02" "0x02"
|
||||
+ ucidef_set_led_switch "lan2amber" "LAN2 (amber)" "netgear:amber:lan2" "switch0" "0x04" "0x02"
|
||||
+ ucidef_set_led_switch "lan3amber" "LAN3 (amber)" "netgear:amber:lan3" "switch0" "0x08" "0x02"
|
||||
+ ucidef_set_led_switch "lan4amber" "LAN4 (amber)" "netgear:amber:lan4" "switch0" "0x10" "0x02"
|
||||
+ ucidef_set_led_usbdev "usb" "USB" "netgear:green:usb" "1-1"
|
||||
+ ;;
|
||||
+
|
||||
wpn824n)
|
||||
ucidef_set_led_netdev "wan-amber" "WAN (amber)" "netgear:amber:wan" "eth0"
|
||||
ucidef_set_led_wlan "wlan" "WLAN" "netgear:blue:wlan" "phy0tpt"
|
||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-wnr2200.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-wnr2200.c
|
||||
index 37ffc4c56be33be96c43078117d7b123679378b3..258d254cf4abfc01a4d859f3f464b2a25aeec165 100644
|
||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-wnr2200.c
|
||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-wnr2200.c
|
||||
@@ -15,6 +15,8 @@
|
||||
#include <linux/kernel.h> /* for max() macro */
|
||||
|
||||
#include <asm/mach-ath79/ath79.h>
|
||||
+#include <asm/mach-ath79/ar71xx_regs.h> /* needed to disable switch LEDs */
|
||||
+#include "common.h" /* needed to disable switch LEDs */
|
||||
|
||||
#include "dev-ap9x-pci.h"
|
||||
#include "dev-eth.h"
|
||||
@@ -24,21 +26,28 @@
|
||||
#include "dev-usb.h"
|
||||
#include "machtypes.h"
|
||||
|
||||
+/* WNR2200 - connected through AR7241 */
|
||||
#define WNR2200_GPIO_LED_LAN2_AMBER 0
|
||||
#define WNR2200_GPIO_LED_LAN4_AMBER 1
|
||||
-#define WNR2200_GPIO_LED_WPS 5
|
||||
-#define WNR2200_GPIO_LED_WAN_GREEN 7
|
||||
-#define WNR2200_GPIO_LED_USB 8
|
||||
+#define WNR2200_GPIO_LED_LAN1_AMBER 6 /* AR724X_GPIO_FUNC_JTAG_DISABLE */
|
||||
+#define WNR2200_GPIO_LED_WPS_GREEN 7 /* AR724X_GPIO_FUNC_JTAG_DISABLE */
|
||||
+#define WNR2200_GPIO_LED_USB_GREEN 8 /* AR724X_GPIO_FUNC_JTAG_DISABLE */
|
||||
#define WNR2200_GPIO_LED_LAN3_AMBER 11
|
||||
#define WNR2200_GPIO_LED_WAN_AMBER 12
|
||||
-#define WNR2200_GPIO_LED_LAN1_GREEN 13
|
||||
-#define WNR2200_GPIO_LED_LAN2_GREEN 14
|
||||
-#define WNR2200_GPIO_LED_LAN3_GREEN 15
|
||||
-#define WNR2200_GPIO_LED_LAN4_GREEN 16
|
||||
-#define WNR2200_GPIO_LED_PWR_AMBER 21
|
||||
-#define WNR2200_GPIO_LED_PWR_GREEN 22
|
||||
-#define WNR2200_GPIO_USB_5V 4
|
||||
-#define WNR2200_GPIO_USB_POWER 24
|
||||
+#define WNR2200_GPIO_LED_LAN1_GREEN 13 /* AR724X_..._ETH_SWITCH_LED0 */
|
||||
+#define WNR2200_GPIO_LED_LAN2_GREEN 14 /* AR724X_..._ETH_SWITCH_LED1 */
|
||||
+#define WNR2200_GPIO_LED_LAN3_GREEN 15 /* AR724X_..._ETH_SWITCH_LED2 */
|
||||
+#define WNR2200_GPIO_LED_LAN4_GREEN 16 /* AR724X_..._ETH_SWITCH_LED3 */
|
||||
+#define WNR2200_GPIO_LED_WAN_GREEN 17 /* AR724X_..._ETH_SWITCH_LED4 */
|
||||
+
|
||||
+/* WNR2200 - connected through AR9287 */
|
||||
+#define WNR2200_GPIO_WMAC_LED_WLAN_BLUE 0
|
||||
+#define WNR2200_GPIO_WMAC_LED_TEST_AMBER 1
|
||||
+#define WNR2200_GPIO_WMAC_LED_POWER_GREEN 2
|
||||
+#define WNR2200_GPIO_WMAC_BTN_RFKILL 3
|
||||
+#define WNR2200_GPIO_WMAC_USB_5V 4
|
||||
+#define WNR2200_GPIO_WMAC_BTN_WPS 5
|
||||
+#define WNR2200_GPIO_WMAC_BTN_RESET 6
|
||||
|
||||
#define WNR2200_KEYS_POLL_INTERVAL 20 /* msecs */
|
||||
#define WNR2200_KEYS_DEBOUNCE_INTERVAL (3 * WNR2200_KEYS_POLL_INTERVAL)
|
||||
@@ -50,30 +59,22 @@
|
||||
|
||||
static struct gpio_led wnr2200_leds_gpio[] __initdata = {
|
||||
{
|
||||
- .name = "netgear:amber:lan2",
|
||||
- .gpio = WNR2200_GPIO_LED_LAN2_AMBER,
|
||||
- .active_low = 1,
|
||||
- }, {
|
||||
- .name = "netgear:amber:lan4",
|
||||
- .gpio = WNR2200_GPIO_LED_LAN4_AMBER,
|
||||
- .active_low = 1,
|
||||
- }, {
|
||||
- .name = "netgear:green:wps",
|
||||
- .gpio = WNR2200_GPIO_LED_WPS,
|
||||
- .active_low = 1,
|
||||
- }, {
|
||||
- .name = "netgear:green:wan",
|
||||
- .gpio = WNR2200_GPIO_LED_WAN_GREEN,
|
||||
+ .name = "netgear:amber:lan1",
|
||||
+ .gpio = WNR2200_GPIO_LED_LAN1_AMBER,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
- .name = "netgear:green:usb",
|
||||
- .gpio = WNR2200_GPIO_LED_USB,
|
||||
+ .name = "netgear:amber:lan2",
|
||||
+ .gpio = WNR2200_GPIO_LED_LAN2_AMBER,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
.name = "netgear:amber:lan3",
|
||||
.gpio = WNR2200_GPIO_LED_LAN3_AMBER,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
+ .name = "netgear:amber:lan4",
|
||||
+ .gpio = WNR2200_GPIO_LED_LAN4_AMBER,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
.name = "netgear:amber:wan",
|
||||
.gpio = WNR2200_GPIO_LED_WAN_AMBER,
|
||||
.active_low = 1,
|
||||
@@ -94,12 +95,56 @@ static struct gpio_led wnr2200_leds_gpio[] __initdata = {
|
||||
.gpio = WNR2200_GPIO_LED_LAN4_GREEN,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
- .name = "netgear:amber:power",
|
||||
- .gpio = WNR2200_GPIO_LED_PWR_AMBER,
|
||||
+ .name = "netgear:green:usb",
|
||||
+ .gpio = WNR2200_GPIO_LED_USB_GREEN,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
+ .name = "netgear:green:wan",
|
||||
+ .gpio = WNR2200_GPIO_LED_WAN_GREEN,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
+ .name = "netgear:green:wps",
|
||||
+ .gpio = WNR2200_GPIO_LED_WPS_GREEN,
|
||||
+ .active_low = 1,
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+static const char *wnr2200_wmac_led_name = "netgear:blue:wlan";
|
||||
+
|
||||
+static struct gpio_led wnr2200_wmac_leds_gpio[] = {
|
||||
+ {
|
||||
+ .name = "netgear:amber:test",
|
||||
+ .gpio = WNR2200_GPIO_WMAC_LED_TEST_AMBER,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
.name = "netgear:green:power",
|
||||
- .gpio = WNR2200_GPIO_LED_PWR_GREEN,
|
||||
+ .gpio = WNR2200_GPIO_WMAC_LED_POWER_GREEN,
|
||||
+ .active_low = 1,
|
||||
+ .default_state = LEDS_GPIO_DEFSTATE_ON,
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+static struct gpio_keys_button wnr2200_wmac_keys_gpio[] = {
|
||||
+ {
|
||||
+ .desc = "reset",
|
||||
+ .type = EV_KEY,
|
||||
+ .code = KEY_RESTART,
|
||||
+ .debounce_interval = WNR2200_KEYS_DEBOUNCE_INTERVAL,
|
||||
+ .gpio = WNR2200_GPIO_WMAC_BTN_RESET,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
+ .desc = "rfkill",
|
||||
+ .type = EV_KEY,
|
||||
+ .code = KEY_RFKILL,
|
||||
+ .debounce_interval = WNR2200_KEYS_DEBOUNCE_INTERVAL,
|
||||
+ .gpio = WNR2200_GPIO_WMAC_BTN_RFKILL,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
+ .desc = "wps",
|
||||
+ .type = EV_KEY,
|
||||
+ .code = KEY_WPS_BUTTON,
|
||||
+ .debounce_interval = WNR2200_KEYS_DEBOUNCE_INTERVAL,
|
||||
+ .gpio = WNR2200_GPIO_WMAC_BTN_WPS,
|
||||
.active_low = 1,
|
||||
}
|
||||
};
|
||||
@@ -139,14 +184,32 @@ static void __init wnr2200_setup(void)
|
||||
u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
|
||||
u8 wlan_mac_addr[6];
|
||||
|
||||
+ /*
|
||||
+ * Disable JTAG to use all AR724X GPIO LEDs. Disable CLKs.
|
||||
+ * Allow OS to control all link LEDs.
|
||||
+ */
|
||||
+ ath79_gpio_function_setup(AR724X_GPIO_FUNC_JTAG_DISABLE |
|
||||
+ AR724X_GPIO_FUNC_UART_EN,
|
||||
+ AR724X_GPIO_FUNC_CLK_OBS1_EN |
|
||||
+ AR724X_GPIO_FUNC_CLK_OBS2_EN |
|
||||
+ AR724X_GPIO_FUNC_CLK_OBS3_EN |
|
||||
+ AR724X_GPIO_FUNC_CLK_OBS4_EN |
|
||||
+ AR724X_GPIO_FUNC_CLK_OBS5_EN |
|
||||
+ AR724X_GPIO_FUNC_GE0_MII_CLK_EN |
|
||||
+ AR724X_GPIO_FUNC_ETH_SWITCH_LED0_EN |
|
||||
+ AR724X_GPIO_FUNC_ETH_SWITCH_LED1_EN |
|
||||
+ AR724X_GPIO_FUNC_ETH_SWITCH_LED2_EN |
|
||||
+ AR724X_GPIO_FUNC_ETH_SWITCH_LED3_EN |
|
||||
+ AR724X_GPIO_FUNC_ETH_SWITCH_LED4_EN);
|
||||
+
|
||||
ath79_register_mdio(0, 0x0);
|
||||
|
||||
- ath79_init_mac(ath79_eth0_data.mac_addr, art+WNR2200_MAC0_OFFSET, 0);
|
||||
+ ath79_init_mac(ath79_eth0_data.mac_addr, art + WNR2200_MAC0_OFFSET, 0);
|
||||
ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
|
||||
ath79_eth0_data.speed = SPEED_100;
|
||||
ath79_eth0_data.duplex = DUPLEX_FULL;
|
||||
|
||||
- ath79_init_mac(ath79_eth1_data.mac_addr, art+WNR2200_MAC1_OFFSET, 0);
|
||||
+ ath79_init_mac(ath79_eth1_data.mac_addr, art + WNR2200_MAC1_OFFSET, 0);
|
||||
ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
|
||||
ath79_eth1_data.phy_mask = 0x10;
|
||||
|
||||
@@ -160,12 +223,22 @@ static void __init wnr2200_setup(void)
|
||||
ap91_pci_init(art + WNR2200_PCIE_CALDATA_OFFSET, wlan_mac_addr);
|
||||
|
||||
ath79_register_leds_gpio(-1, ARRAY_SIZE(wnr2200_leds_gpio),
|
||||
- wnr2200_leds_gpio);
|
||||
+ wnr2200_leds_gpio);
|
||||
+
|
||||
+ ap9x_pci_setup_wmac_led_pin(0, WNR2200_GPIO_WMAC_LED_WLAN_BLUE);
|
||||
+ ap9x_pci_setup_wmac_led_name(0, wnr2200_wmac_led_name);
|
||||
+
|
||||
+ ap9x_pci_setup_wmac_leds(0, wnr2200_wmac_leds_gpio,
|
||||
+ ARRAY_SIZE(wnr2200_wmac_leds_gpio));
|
||||
+
|
||||
+ /* All 3 buttons are connected to wireless chip */
|
||||
+ ap9x_pci_setup_wmac_btns(0, wnr2200_wmac_keys_gpio,
|
||||
+ ARRAY_SIZE(wnr2200_wmac_keys_gpio),
|
||||
+ WNR2200_KEYS_POLL_INTERVAL);
|
||||
|
||||
/* enable power for the USB port */
|
||||
- ap9x_pci_setup_wmac_gpio(0,
|
||||
- BIT(WNR2200_GPIO_USB_5V),
|
||||
- BIT(WNR2200_GPIO_USB_5V));
|
||||
+ ap9x_pci_setup_wmac_gpio(0, BIT(WNR2200_GPIO_WMAC_USB_5V),
|
||||
+ BIT(WNR2200_GPIO_WMAC_USB_5V));
|
||||
|
||||
ath79_register_usb();
|
||||
}
|
@ -1,326 +0,0 @@
|
||||
From: Jan Niehusmann <jan@gondor.com>
|
||||
Date: Wed, 15 Jun 2016 14:57:47 +0200
|
||||
Subject: ar71xx: add GL-AR150 support
|
||||
|
||||
patch from https://github.com/domino-team/OpenWrt-patches
|
||||
|
||||
https://raw.githubusercontent.com/domino-team/OpenWrt-patches/master/AR150%2C%20AR300%2C%20Domino%20-%20CC1505/000-gl-ar150-cc.patch
|
||||
|
||||
(and fixed indentation in target/linux/ar71xx/base-files/lib/ar71xx.sh)
|
||||
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
|
||||
index b8677960249c1e05703570fdf2be4197bde5cac5..d81358d6bf9103ffeb2929b06d3ab01efffe931c 100644
|
||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
|
||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
|
||||
@@ -188,6 +188,10 @@ dlan-pro-1200-ac)
|
||||
ucidef_set_led_trigger_gpio "plcr" "dLAN" "devolo:error:dlan" "16" "0"
|
||||
;;
|
||||
|
||||
+gl-ar150)
|
||||
+ ucidef_set_led_wlan "wlan" "WLAN" "gl_ar150:wlan" "phy0tpt"
|
||||
+ ;;
|
||||
+
|
||||
gl-inet)
|
||||
ucidef_set_led_netdev "lan" "LAN" "gl-connect:green:lan" "eth1"
|
||||
ucidef_set_led_wlan "wlan" "WLAN" "gl-connect:red:wlan" "phy0tpt"
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
index b59844eac49a1269edb88890d89b0b4d8a7121d0..ac3deb8aa2ed4717e2bd682cb4ffd7d32c50134f 100755
|
||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
@@ -383,6 +383,7 @@ dir-505-a1)
|
||||
alfa-ap96 |\
|
||||
alfa-nx |\
|
||||
ap83 |\
|
||||
+gl-ar150 |\
|
||||
gl-inet |\
|
||||
jwap003 |\
|
||||
pb42 |\
|
||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
index aded7ad117ffa1c1347c6f457c210d60b8e4df58..f242980b3e401f2e9de2b8abe7e984b24a71db5a 100755
|
||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
@@ -503,6 +503,9 @@ ar71xx_board_detect() {
|
||||
name="gl-inet"
|
||||
gl_inet_board_detect
|
||||
;;
|
||||
+ *"GL AR150")
|
||||
+ name="gl-ar150"
|
||||
+ ;;
|
||||
*"EnGenius EPG5000")
|
||||
name="epg5000"
|
||||
;;
|
||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
index 0228f14774d5873a52f19b60ed84389c7be86e51..d816f211891d6a259930f2781574504ea62b4e16 100755
|
||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
@@ -216,6 +216,7 @@ platform_check_image() {
|
||||
dlan-pro-500-wp | \
|
||||
dlan-pro-1200-ac | \
|
||||
dragino2 | \
|
||||
+ gl-ar150 | \
|
||||
epg5000 | \
|
||||
esr1750 | \
|
||||
esr900 | \
|
||||
diff --git a/target/linux/ar71xx/config-3.18 b/target/linux/ar71xx/config-3.18
|
||||
index a068cc5768aed6f29a67de27d24f00dc57e0695a..d4d92738d0ab010e1d43ebed0baef34fd9bc3f9d 100644
|
||||
--- a/target/linux/ar71xx/config-3.18
|
||||
+++ b/target/linux/ar71xx/config-3.18
|
||||
@@ -70,6 +70,7 @@ CONFIG_ATH79_MACH_ESR1750=y
|
||||
CONFIG_ATH79_MACH_ESR900=y
|
||||
CONFIG_ATH79_MACH_EW_DORIN=y
|
||||
CONFIG_ATH79_MACH_F9K1115V2=y
|
||||
+CONFIG_ATH79_MACH_GL_AR150=y
|
||||
CONFIG_ATH79_MACH_GL_INET=y
|
||||
CONFIG_ATH79_MACH_GS_MINIBOX_V1=y
|
||||
CONFIG_ATH79_MACH_GS_OOLITE=y
|
||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-ar150.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-ar150.c
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..310182cc8e9c22e2bfcb168996d4f01d117dc103
|
||||
--- /dev/null
|
||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-ar150.c
|
||||
@@ -0,0 +1,125 @@
|
||||
+/*
|
||||
+ * GL_ar150 board support
|
||||
+ *
|
||||
+ * Copyright (C) 2011 dongyuqi <729650915@qq.com>
|
||||
+ * Copyright (C) 2011-2012 Gabor Juhos <juhosg@openwrt.org>
|
||||
+ * Copyright (C) 2013 alzhao <alzhao@gmail.com>
|
||||
+ * Copyright (C) 2014 Michel Stempin <michel.stempin@wanadoo.fr>
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License version 2 as published
|
||||
+ * by the Free Software Foundation.
|
||||
+*/
|
||||
+
|
||||
+#include <linux/gpio.h>
|
||||
+
|
||||
+#include <asm/mach-ath79/ath79.h>
|
||||
+
|
||||
+#include "dev-eth.h"
|
||||
+#include "dev-gpio-buttons.h"
|
||||
+#include "dev-leds-gpio.h"
|
||||
+#include "dev-m25p80.h"
|
||||
+#include "dev-usb.h"
|
||||
+#include "dev-wmac.h"
|
||||
+#include "machtypes.h"
|
||||
+
|
||||
+#define GL_AR150_GPIO_LED_WLAN 0
|
||||
+#define GL_AR150_GPIO_LED_LAN 13
|
||||
+#define GL_AR150_GPIO_LED_WAN 15
|
||||
+
|
||||
+#define GL_AR150_GPIO_BIN_USB 6
|
||||
+#define GL_AR150_GPIO_BTN_MANUAL 7
|
||||
+#define GL_AR150_GPIO_BTN_AUTO 8
|
||||
+#define GL_AR150_GPIO_BTN_RESET 11
|
||||
+
|
||||
+#define GL_AR150_KEYS_POLL_INTERVAL 20 /* msecs */
|
||||
+#define GL_AR150_KEYS_DEBOUNCE_INTERVAL (3 * GL_AR150_KEYS_POLL_INTERVAL)
|
||||
+
|
||||
+#define GL_AR150_MAC0_OFFSET 0x0000
|
||||
+#define GL_AR150_MAC1_OFFSET 0x0000
|
||||
+#define GL_AR150_CALDATA_OFFSET 0x1000
|
||||
+#define GL_AR150_WMAC_MAC_OFFSET 0x0000
|
||||
+
|
||||
+static struct gpio_led gl_ar150_leds_gpio[] __initdata = {
|
||||
+ {
|
||||
+ .name = "gl_ar150:wlan",
|
||||
+ .gpio = GL_AR150_GPIO_LED_WLAN,
|
||||
+ .active_low = 0,
|
||||
+ },
|
||||
+ {
|
||||
+ .name = "gl_ar150:lan",
|
||||
+ .gpio = GL_AR150_GPIO_LED_LAN,
|
||||
+ .active_low = 0,
|
||||
+ },
|
||||
+ {
|
||||
+ .name = "gl_ar150:wan",
|
||||
+ .gpio = GL_AR150_GPIO_LED_WAN,
|
||||
+ .active_low = 0,
|
||||
+ .default_state = 1,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static struct gpio_keys_button gl_ar150_gpio_keys[] __initdata = {
|
||||
+ {
|
||||
+ .desc = "BTN_7",
|
||||
+ .type = EV_KEY,
|
||||
+ .code = BTN_7,
|
||||
+ .debounce_interval = GL_AR150_KEYS_DEBOUNCE_INTERVAL,
|
||||
+ .gpio = GL_AR150_GPIO_BTN_MANUAL,
|
||||
+ .active_low = 0,
|
||||
+ },
|
||||
+ {
|
||||
+ .desc = "BTN_8",
|
||||
+ .type = EV_KEY,
|
||||
+ .code = BTN_8,
|
||||
+ .debounce_interval = GL_AR150_KEYS_DEBOUNCE_INTERVAL,
|
||||
+ .gpio = GL_AR150_GPIO_BTN_AUTO,
|
||||
+ .active_low = 0,
|
||||
+ },
|
||||
+ {
|
||||
+ .desc = "reset",
|
||||
+ .type = EV_KEY,
|
||||
+ .code = KEY_RESTART,
|
||||
+ .debounce_interval = GL_AR150_KEYS_DEBOUNCE_INTERVAL,
|
||||
+ .gpio = GL_AR150_GPIO_BTN_RESET,
|
||||
+ .active_low = 0,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static void __init gl_ar150_setup(void)
|
||||
+{
|
||||
+
|
||||
+ /* ART base address */
|
||||
+ u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
|
||||
+
|
||||
+ /* disable PHY_SWAP and PHY_ADDR_SWAP bits */
|
||||
+ ath79_setup_ar933x_phy4_switch(false, false);
|
||||
+
|
||||
+ /* register flash. */
|
||||
+ ath79_register_m25p80(NULL);
|
||||
+
|
||||
+ /* register gpio LEDs and keys */
|
||||
+ ath79_register_leds_gpio(-1, ARRAY_SIZE(gl_ar150_leds_gpio),
|
||||
+ gl_ar150_leds_gpio);
|
||||
+ ath79_register_gpio_keys_polled(-1, GL_AR150_KEYS_POLL_INTERVAL,
|
||||
+ ARRAY_SIZE(gl_ar150_gpio_keys),
|
||||
+ gl_ar150_gpio_keys);
|
||||
+
|
||||
+ /* enable usb */
|
||||
+ gpio_request_one(GL_AR150_GPIO_BIN_USB,
|
||||
+ GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
|
||||
+ "USB power");
|
||||
+ ath79_register_usb();
|
||||
+
|
||||
+ /* register eth0 as WAN, eth1 as LAN */
|
||||
+ ath79_init_mac(ath79_eth0_data.mac_addr, art+GL_AR150_MAC0_OFFSET, 0);
|
||||
+ ath79_init_mac(ath79_eth1_data.mac_addr, art+GL_AR150_MAC1_OFFSET, 0);
|
||||
+ ath79_register_mdio(0, 0x0);
|
||||
+ ath79_register_eth(0);
|
||||
+ ath79_register_eth(1);
|
||||
+
|
||||
+ /* register wireless mac with cal data */
|
||||
+ ath79_register_wmac(art + GL_AR150_CALDATA_OFFSET, art + GL_AR150_WMAC_MAC_OFFSET);
|
||||
+}
|
||||
+
|
||||
+MIPS_MACHINE(ATH79_MACH_GL_AR150, "GL-AR150", "GL AR150",gl_ar150_setup);
|
||||
diff --git a/target/linux/ar71xx/generic/profiles/gl-connect.mk b/target/linux/ar71xx/generic/profiles/gl-connect.mk
|
||||
deleted file mode 100644
|
||||
index e9377dbbfa042f790f15817313c24b2700617f37..0000000000000000000000000000000000000000
|
||||
--- a/target/linux/ar71xx/generic/profiles/gl-connect.mk
|
||||
+++ /dev/null
|
||||
@@ -1,17 +0,0 @@
|
||||
-#
|
||||
-# Copyright (C) 2014 OpenWrt.org
|
||||
-#
|
||||
-# This is free software, licensed under the GNU General Public License v2.
|
||||
-# See /LICENSE for more information.
|
||||
-#
|
||||
-
|
||||
-define Profile/GLINET
|
||||
- NAME:=GL.iNet
|
||||
- PACKAGES:=kmod-usb-core kmod-usb2
|
||||
-endef
|
||||
-
|
||||
-define Profile/GLINET/Description
|
||||
- Package set optimized for the GL-Connect GL.iNet v1.
|
||||
-endef
|
||||
-
|
||||
-$(eval $(call Profile,GLINET))
|
||||
diff --git a/target/linux/ar71xx/generic/profiles/gli.mk b/target/linux/ar71xx/generic/profiles/gli.mk
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..a6ad661666a168a591319e74ef211277f8617fca
|
||||
--- /dev/null
|
||||
+++ b/target/linux/ar71xx/generic/profiles/gli.mk
|
||||
@@ -0,0 +1,27 @@
|
||||
+#
|
||||
+# Copyright (C) 2013 OpenWrt.org
|
||||
+#
|
||||
+# This is free software, licensed under the GNU General Public License v2.
|
||||
+# See /LICENSE for more information.
|
||||
+#
|
||||
+define Profile/GLINET
|
||||
+ NAME:=GL.iNet 6416
|
||||
+ PACKAGES:=kmod-usb-core kmod-usb2
|
||||
+endef
|
||||
+
|
||||
+define Profile/GLINET/Description
|
||||
+ Package set optimized for the GL-Connect GL.iNet v1.
|
||||
+endef
|
||||
+
|
||||
+$(eval $(call Profile,GLINET))
|
||||
+
|
||||
+define Profile/GL-AR150
|
||||
+ NAME:=GL AR150
|
||||
+ PACKAGES:=kmod-usb-core kmod-usb2
|
||||
+endef
|
||||
+
|
||||
+define Profile/GL-AR150/Description
|
||||
+ Configuration of GL AR150.
|
||||
+endef
|
||||
+
|
||||
+$(eval $(call Profile,GL-AR150))
|
||||
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
|
||||
index 7c648f26e10c49000b848e9b300701b388410c04..05eea0b16c362ba5f70c9f435dbe312087b319c2 100644
|
||||
--- a/target/linux/ar71xx/image/Makefile
|
||||
+++ b/target/linux/ar71xx/image/Makefile
|
||||
@@ -144,6 +144,14 @@ define Device/weio
|
||||
endef
|
||||
TARGET_DEVICES += weio
|
||||
|
||||
+define Device/gl-ar150
|
||||
+ BOARDNAME = GL-AR150
|
||||
+ IMAGE_SIZE = 16000k
|
||||
+ CONSOLE = ttyATH0,115200
|
||||
+ MTDPARTS = spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,16000k(firmware),64k(art)ro
|
||||
+endef
|
||||
+TARGET_DEVICES += gl-ar150
|
||||
+
|
||||
define Device/wndr3700
|
||||
BOARDNAME = WNDR3700
|
||||
NETGEAR_KERNEL_MAGIC = 0x33373030
|
||||
diff --git a/target/linux/ar71xx/patches-3.18/911-MIPS-ath79-add-gl_ar150.patch b/target/linux/ar71xx/patches-3.18/911-MIPS-ath79-add-gl_ar150.patch
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..31db5816caf5dc8076ceec349884cf9a47b2fc68
|
||||
--- /dev/null
|
||||
+++ b/target/linux/ar71xx/patches-3.18/911-MIPS-ath79-add-gl_ar150.patch
|
||||
@@ -0,0 +1,39 @@
|
||||
+--- a/arch/mips/ath79/Kconfig
|
||||
++++ b/arch/mips/ath79/Kconfig
|
||||
+@@ -533,6 +533,16 @@ config ATH79_MACH_GL_INET
|
||||
+ select ATH79_DEV_USB
|
||||
+ select ATH79_DEV_WMAC
|
||||
+
|
||||
++config ATH79_MACH_GL_AR150
|
||||
++ bool "GL AR150 support"
|
||||
++ select SOC_AR933X
|
||||
++ select ATH79_DEV_ETH
|
||||
++ select ATH79_DEV_GPIO_BUTTONS
|
||||
++ select ATH79_DEV_LEDS_GPIO
|
||||
++ select ATH79_DEV_M25P80
|
||||
++ select ATH79_DEV_USB
|
||||
++ select ATH79_DEV_WMAC
|
||||
++
|
||||
+ config ATH79_MACH_EAP300V2
|
||||
+ bool "EnGenius EAP300 v2 support"
|
||||
+ select SOC_AR934X
|
||||
+--- a/arch/mips/ath79/Makefile
|
||||
++++ b/arch/mips/ath79/Makefile
|
||||
+@@ -78,6 +78,7 @@ obj-$(CONFIG_ATH79_MACH_EL_MINI) += mach
|
||||
+ obj-$(CONFIG_ATH79_MACH_EPG5000) += mach-epg5000.o
|
||||
+ obj-$(CONFIG_ATH79_MACH_ESR1750) += mach-esr1750.o
|
||||
+ obj-$(CONFIG_ATH79_MACH_F9K1115V2) += mach-f9k1115v2.o
|
||||
++obj-$(CONFIG_ATH79_MACH_GL_AR150) += mach-gl-ar150.o
|
||||
+ obj-$(CONFIG_ATH79_MACH_GL_INET) += mach-gl-inet.o
|
||||
+ obj-$(CONFIG_ATH79_MACH_GS_MINIBOX_V1) += mach-gs-minibox-v1.o
|
||||
+ obj-$(CONFIG_ATH79_MACH_GS_OOLITE) += mach-gs-oolite.o
|
||||
+--- a/arch/mips/ath79/machtypes.h
|
||||
++++ b/arch/mips/ath79/machtypes.h
|
||||
+@@ -67,6 +67,7 @@ enum ath79_mach_type {
|
||||
+ ATH79_MACH_ESR1750, /* EnGenius ESR1750 */
|
||||
+ ATH79_MACH_EPG5000, /* EnGenius EPG5000 */
|
||||
+ ATH79_MACH_F9K1115V2, /* Belkin AC1750DB */
|
||||
++ ATH79_MACH_GL_AR150, /* GL-AR150 support */
|
||||
+ ATH79_MACH_GL_INET, /* GL-CONNECT GL-INET */
|
||||
+ ATH79_MACH_GS_MINIBOX_V1, /* Gainstrong MiniBox V1.0 */
|
||||
+ ATH79_MACH_GS_OOLITE, /* GS OOLITE V1.0 */
|
@ -1,48 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Wed, 15 Jun 2016 19:31:34 +0200
|
||||
Subject: build: don't add -j for parallel builds with Make 4.2+
|
||||
|
||||
Make usually passes -j and jobserver arguments as part of MAKEFLAGS. LEDE
|
||||
removes MAKEFLAGS to have better control of the build, and re-adds the
|
||||
jobserver arguments with -j to the Make commandline where desired.
|
||||
|
||||
Make 4.2+ behave differently with these arguments passed on the commandline
|
||||
than in MAKEFLAGS: -j will override the jobserver argument and the job
|
||||
count will be unlimited.
|
||||
|
||||
Moving the flags to MAKEFLAGS will need many packages to be changed and
|
||||
tested; therefore, we opt for a less invasive change for now and just
|
||||
remove -j for Make 4.2+, as the jobserver argument alone is enough to
|
||||
enable parallel builds for these Make versions.
|
||||
|
||||
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
|
||||
Backport of LEDE 6fb212f2933bbbdf2935124205717c9d0ca72b32
|
||||
|
||||
diff --git a/include/host-build.mk b/include/host-build.mk
|
||||
index e2b5f2f8d1882207e11697df3df1302076adfaa3..44401b866a4d637648bb093470a5e66b4a3e38fc 100644
|
||||
--- a/include/host-build.mk
|
||||
+++ b/include/host-build.mk
|
||||
@@ -10,7 +10,7 @@ HOST_INSTALL_DIR ?= $(HOST_BUILD_DIR)/host-install
|
||||
HOST_BUILD_PARALLEL ?=
|
||||
|
||||
ifneq ($(CONFIG_PKG_BUILD_USE_JOBSERVER),)
|
||||
- HOST_MAKE_J:=$(if $(MAKE_JOBSERVER),$(MAKE_JOBSERVER) -j)
|
||||
+ HOST_MAKE_J:=$(if $(MAKE_JOBSERVER),$(MAKE_JOBSERVER) $(if $(filter 3.% 4.0 4.1,$(MAKE_VERSION)),-j))
|
||||
else
|
||||
HOST_MAKE_J:=-j$(CONFIG_PKG_BUILD_JOBS)
|
||||
endif
|
||||
diff --git a/include/package.mk b/include/package.mk
|
||||
index c69d92819779dd0ee92381620accd73ef2b80de6..a99cdc6990280d7ef83223861cd9f224c6eebc33 100644
|
||||
--- a/include/package.mk
|
||||
+++ b/include/package.mk
|
||||
@@ -23,7 +23,7 @@ PKG_RELRO_PARTIAL ?= 1
|
||||
PKG_RELRO_FULL ?= 1
|
||||
|
||||
ifneq ($(CONFIG_PKG_BUILD_USE_JOBSERVER),)
|
||||
- MAKE_J:=$(if $(MAKE_JOBSERVER),$(MAKE_JOBSERVER) -j)
|
||||
+ MAKE_J:=$(if $(MAKE_JOBSERVER),$(MAKE_JOBSERVER) $(if $(filter 3.% 4.0 4.1,$(MAKE_VERSION)),-j))
|
||||
else
|
||||
MAKE_J:=-j$(CONFIG_PKG_BUILD_JOBS)
|
||||
endif
|
@ -1,30 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Wed, 15 Jun 2016 19:31:49 +0200
|
||||
Subject: tools/cmake: fix parallel build with Make 4.2+
|
||||
|
||||
Avoid using the --parallel argument to the CMake bootstrap, as that doesn't
|
||||
allow us to remove the -j argument. Instead, pass the HOST_JOBS arguments
|
||||
in MAKEFLAGS.
|
||||
|
||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
|
||||
Backport of LEDE 96db10752483cb07f822686482b44be6c21fbb5f
|
||||
|
||||
diff --git a/tools/cmake/Makefile b/tools/cmake/Makefile
|
||||
index 08e2b028150dd4f496e3a8ebccf27bd49b6937c2..6c211def540a6a41012349d5979b919481e1bcec 100644
|
||||
--- a/tools/cmake/Makefile
|
||||
+++ b/tools/cmake/Makefile
|
||||
@@ -18,10 +18,11 @@ HOST_CONFIGURE_PARALLEL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/host-build.mk
|
||||
|
||||
+HOST_CONFIGURE_CMD := MAKEFLAGS="$(HOST_JOBS)" $(BASH) ./configure
|
||||
+
|
||||
HOST_CONFIGURE_VARS :=
|
||||
|
||||
HOST_CONFIGURE_ARGS := \
|
||||
- --prefix=$(STAGING_DIR_HOST) \
|
||||
- $(if $(MAKE_JOBSERVER),--parallel="$(MAKE_JOBSERVER)")
|
||||
+ --prefix=$(STAGING_DIR_HOST)
|
||||
|
||||
$(eval $(call HostBuild))
|
@ -1,143 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Thu, 16 Jun 2016 00:51:07 +0200
|
||||
Subject: linux: make IPv6 builtin if selected (saves >30KB)
|
||||
|
||||
Signed-off-by: Steven Barth <steven@midlink.org>
|
||||
|
||||
Backport of OpenWrt r46834
|
||||
|
||||
kmod-ipv6 is added to the PROVIDES of the kernel package, so we don't have
|
||||
to adjust all packages depending on kmod-ipv6.
|
||||
|
||||
diff --git a/config/Config-build.in b/config/Config-build.in
|
||||
index 4674d8403539a3b209d709342ab71a6e6ff79de2..cd50290f812f73bc6886a789a456956fa4fb1e42 100644
|
||||
--- a/config/Config-build.in
|
||||
+++ b/config/Config-build.in
|
||||
@@ -83,7 +83,7 @@ menu "Global build settings"
|
||||
prompt "Enable IPv6 support in packages"
|
||||
default y
|
||||
help
|
||||
- Enable IPv6 support in packages (passes --enable-ipv6 to configure scripts).
|
||||
+ Enables IPv6 support in kernel (builtin) and packages.
|
||||
|
||||
config PKG_BUILD_PARALLEL
|
||||
bool
|
||||
diff --git a/package/kernel/linux/Makefile b/package/kernel/linux/Makefile
|
||||
index 45ca9faa923eb1a1db97d94d0406a46223c59a8f..b06c49a92fd396e8edcb0ca7a7a94b74b05a87e0 100644
|
||||
--- a/package/kernel/linux/Makefile
|
||||
+++ b/package/kernel/linux/Makefile
|
||||
@@ -49,6 +49,7 @@ define Package/kernel
|
||||
TITLE:=Virtual kernel package
|
||||
VERSION:=$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)
|
||||
URL:=http://www.kernel.org/
|
||||
+ PROVIDES:=$(if $(CONFIG_IPV6),kmod-ipv6)
|
||||
endef
|
||||
|
||||
define Package/kernel/install
|
||||
diff --git a/package/kernel/linux/modules/netsupport.mk b/package/kernel/linux/modules/netsupport.mk
|
||||
index cea8e47a65b5283640a17ed6c311bd87c70373b2..8a2760d8a4a429f206eba41a8c83432e5b6ddab7 100644
|
||||
--- a/package/kernel/linux/modules/netsupport.mk
|
||||
+++ b/package/kernel/linux/modules/netsupport.mk
|
||||
@@ -439,7 +439,7 @@ $(eval $(call KernelPackage,iptunnel4))
|
||||
define KernelPackage/iptunnel6
|
||||
SUBMENU:=$(NETWORK_SUPPORT_MENU)
|
||||
TITLE:=IPv6 tunneling
|
||||
- DEPENDS:= +kmod-ipv6
|
||||
+ DEPENDS:=@IPV6
|
||||
KCONFIG:= \
|
||||
CONFIG_INET6_TUNNEL
|
||||
FILES:=$(LINUX_DIR)/net/ipv6/tunnel6.ko
|
||||
@@ -456,15 +456,16 @@ $(eval $(call KernelPackage,iptunnel6))
|
||||
define KernelPackage/ipv6
|
||||
SUBMENU:=$(NETWORK_SUPPORT_MENU)
|
||||
TITLE:=IPv6 support
|
||||
+ DEPENDS:=@IPV6
|
||||
+ HIDDEN:=1
|
||||
+ DEFAULT:=y
|
||||
KCONFIG:= \
|
||||
- CONFIG_IPV6 \
|
||||
+ CONFIG_IPV6=y \
|
||||
CONFIG_IPV6_PRIVACY=y \
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y \
|
||||
CONFIG_IPV6_MROUTE=y \
|
||||
CONFIG_IPV6_PIMSM_V2=n \
|
||||
CONFIG_IPV6_SUBTREES=y
|
||||
- FILES:=$(LINUX_DIR)/net/ipv6/ipv6.ko
|
||||
- AUTOLOAD:=$(call AutoLoad,20,ipv6)
|
||||
endef
|
||||
|
||||
define KernelPackage/ipv6/description
|
||||
@@ -476,7 +477,7 @@ $(eval $(call KernelPackage,ipv6))
|
||||
|
||||
define KernelPackage/sit
|
||||
SUBMENU:=$(NETWORK_SUPPORT_MENU)
|
||||
- DEPENDS:=+kmod-ipv6 +kmod-iptunnel +kmod-iptunnel4
|
||||
+ DEPENDS:=@IPV6 +kmod-iptunnel +kmod-iptunnel4
|
||||
TITLE:=IPv6-in-IPv4 tunnel
|
||||
KCONFIG:=CONFIG_IPV6_SIT \
|
||||
CONFIG_IPV6_SIT_6RD=y
|
||||
@@ -494,7 +495,7 @@ $(eval $(call KernelPackage,sit))
|
||||
define KernelPackage/ip6-tunnel
|
||||
SUBMENU:=$(NETWORK_SUPPORT_MENU)
|
||||
TITLE:=IP-in-IPv6 tunnelling
|
||||
- DEPENDS:= +kmod-ipv6 +kmod-iptunnel6
|
||||
+ DEPENDS:=@IPV6 +kmod-iptunnel6
|
||||
KCONFIG:= CONFIG_IPV6_TUNNEL
|
||||
FILES:=$(LINUX_DIR)/net/ipv6/ip6_tunnel.ko
|
||||
AUTOLOAD:=$(call AutoLoad,32,ip6_tunnel)
|
||||
@@ -510,7 +511,7 @@ $(eval $(call KernelPackage,ip6-tunnel))
|
||||
define KernelPackage/gre
|
||||
SUBMENU:=$(NETWORK_SUPPORT_MENU)
|
||||
TITLE:=GRE support
|
||||
- DEPENDS:=+PACKAGE_kmod-ipv6:kmod-ipv6 +kmod-iptunnel
|
||||
+ DEPENDS:=+kmod-iptunnel
|
||||
KCONFIG:=CONFIG_NET_IPGRE CONFIG_NET_IPGRE_DEMUX
|
||||
FILES:=$(LINUX_DIR)/net/ipv4/ip_gre.ko $(LINUX_DIR)/net/ipv4/gre.ko
|
||||
AUTOLOAD:=$(call AutoLoad,39,gre ip_gre)
|
||||
@@ -526,7 +527,7 @@ $(eval $(call KernelPackage,gre))
|
||||
define KernelPackage/gre6
|
||||
SUBMENU:=$(NETWORK_SUPPORT_MENU)
|
||||
TITLE:=GRE support over IPV6
|
||||
- DEPENDS:=+kmod-ipv6 +kmod-iptunnel +kmod-ip6-tunnel
|
||||
+ DEPENDS:=@IPV6 +kmod-iptunnel +kmod-ip6-tunnel
|
||||
KCONFIG:=CONFIG_IPV6_GRE
|
||||
FILES:=$(LINUX_DIR)/net/ipv6/ip6_gre.ko
|
||||
AUTOLOAD:=$(call AutoLoad,39,ip6_gre)
|
||||
@@ -862,7 +863,6 @@ define KernelPackage/l2tp
|
||||
SUBMENU:=$(NETWORK_SUPPORT_MENU)
|
||||
TITLE:=Layer Two Tunneling Protocol (L2TP)
|
||||
DEPENDS:= \
|
||||
- +IPV6:kmod-ipv6 \
|
||||
+kmod-udptunnel4 \
|
||||
+IPV6:kmod-udptunnel6
|
||||
KCONFIG:=CONFIG_L2TP \
|
||||
@@ -898,7 +898,7 @@ $(eval $(call KernelPackage,l2tp-eth))
|
||||
define KernelPackage/l2tp-ip
|
||||
SUBMENU:=$(NETWORK_SUPPORT_MENU)
|
||||
TITLE:=L2TP IP encapsulation for L2TPv3
|
||||
- DEPENDS:=+kmod-l2tp +IPV6:kmod-ipv6
|
||||
+ DEPENDS:=+kmod-l2tp
|
||||
KCONFIG:=CONFIG_L2TP_IP
|
||||
FILES:= \
|
||||
$(LINUX_DIR)/net/l2tp/l2tp_ip.ko \
|
||||
@@ -930,7 +930,7 @@ define KernelPackage/sctp
|
||||
CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5=y
|
||||
FILES:= $(LINUX_DIR)/net/sctp/sctp.ko
|
||||
AUTOLOAD:= $(call AutoLoad,32,sctp)
|
||||
- DEPENDS:=+kmod-lib-crc32c +kmod-crypto-md5 +kmod-crypto-hmac +IPV6:kmod-ipv6
|
||||
+ DEPENDS:=+kmod-lib-crc32c +kmod-crypto-md5 +kmod-crypto-hmac
|
||||
endef
|
||||
|
||||
define KernelPackage/sctp/description
|
||||
diff --git a/package/network/services/dnsmasq/Makefile b/package/network/services/dnsmasq/Makefile
|
||||
index 19a8df9009da7fee967b84f65248470db3b34150..8fd51fe8748082b072710b718300a706832b25be 100644
|
||||
--- a/package/network/services/dnsmasq/Makefile
|
||||
+++ b/package/network/services/dnsmasq/Makefile
|
||||
@@ -52,7 +52,6 @@ define Package/dnsmasq-full
|
||||
$(call Package/dnsmasq/Default)
|
||||
TITLE += (with DNSSEC, DHCPv6, Auth DNS, IPset enabled by default)
|
||||
DEPENDS:=+PACKAGE_dnsmasq_full_dnssec:libnettle \
|
||||
- +PACKAGE_dnsmasq_full_dhcpv6:kmod-ipv6 \
|
||||
+PACKAGE_dnsmasq_full_ipset:kmod-ipt-ipset
|
||||
VARIANT:=full
|
||||
endef
|
@ -1,21 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Thu, 16 Jun 2016 04:28:44 +0200
|
||||
Subject: package-ipkg.mk: fix Provides for packages with multiple PROVIDES entries
|
||||
|
||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
|
||||
Backport of LEDE 3ee6c17cd14ec1fed0b0491542c499c03fc6d211
|
||||
|
||||
diff --git a/include/package-ipkg.mk b/include/package-ipkg.mk
|
||||
index eb4c874047e8a9e24a4d77b13f7ba66e1221cbb5..1830d644c36fa3dad342d3283529a18b8d70a377 100644
|
||||
--- a/include/package-ipkg.mk
|
||||
+++ b/include/package-ipkg.mk
|
||||
@@ -154,7 +154,7 @@ Package: $(1)
|
||||
Version: $(VERSION)
|
||||
$$(call addfield,Depends,$$(Package/$(1)/DEPENDS)
|
||||
)$$(call addfield,Conflicts,$$(call mergelist,$(CONFLICTS))
|
||||
-)$$(call addfield,Provides,$(PROVIDES)
|
||||
+)$$(call addfield,Provides,$$(call mergelist,$(PROVIDES))
|
||||
)$$(call addfield,Source,$(SOURCE)
|
||||
)$$(call addfield,License,$$(PKG_LICENSE)
|
||||
)$$(call addfield,LicenseFiles,$$(PKG_LICENSE_FILES)
|
@ -1,154 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Thu, 16 Jun 2016 03:42:03 +0200
|
||||
Subject: kernel: remove packaging of kmod-crypto-core and kmod-crypto-arc4
|
||||
|
||||
Everything except for blkcipher was already built-in, so make blkcipher
|
||||
built-in as well.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
||||
|
||||
Backport of OpenWrt r46820
|
||||
|
||||
The packages kmod-crypto-{core,arc4} are added to kernel PROVIDES to
|
||||
satisfy dependencies of CC packages.
|
||||
|
||||
diff --git a/package/kernel/linux/Makefile b/package/kernel/linux/Makefile
|
||||
index b06c49a92fd396e8edcb0ca7a7a94b74b05a87e0..19bcbd582ba06cb8cdb9ee869c50a67dbfd470bb 100644
|
||||
--- a/package/kernel/linux/Makefile
|
||||
+++ b/package/kernel/linux/Makefile
|
||||
@@ -49,7 +49,7 @@ define Package/kernel
|
||||
TITLE:=Virtual kernel package
|
||||
VERSION:=$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)
|
||||
URL:=http://www.kernel.org/
|
||||
- PROVIDES:=$(if $(CONFIG_IPV6),kmod-ipv6)
|
||||
+ PROVIDES:=kmod-crypto-core kmod-crypto-arc4 $(if $(CONFIG_IPV6),kmod-ipv6)
|
||||
endef
|
||||
|
||||
define Package/kernel/install
|
||||
diff --git a/package/kernel/linux/modules/crypto.mk b/package/kernel/linux/modules/crypto.mk
|
||||
index c8e0fbb04397c9b1fa7ebde3579f663b5d756e1b..926dab0e3379efbc92aeac865b02673928c18644 100644
|
||||
--- a/package/kernel/linux/modules/crypto.mk
|
||||
+++ b/package/kernel/linux/modules/crypto.mk
|
||||
@@ -15,24 +15,9 @@ crypto_confvar=CONFIG_CRYPTO_$(word 1,$(subst =,$(space),$(1)))
|
||||
crypto_file=$(LINUX_DIR)/crypto/$(word 2,$(subst =,$(space),$(1))).ko
|
||||
crypto_name=$(if $(findstring y,$($(call crypto_confvar,$(1)))),,$(word 2,$(subst =,$(space),$(1))))
|
||||
|
||||
-define KernelPackage/crypto-core
|
||||
- SUBMENU:=$(CRYPTO_MENU)
|
||||
- TITLE:=Core CryptoAPI modules
|
||||
- KCONFIG:= \
|
||||
- CONFIG_CRYPTO=y \
|
||||
- CONFIG_CRYPTO_HW=y \
|
||||
- CONFIG_CRYPTO_BLKCIPHER \
|
||||
- CONFIG_CRYPTO_ALGAPI \
|
||||
- $(foreach mod,$(CRYPTO_MODULES),$(call crypto_confvar,$(mod)))
|
||||
- FILES:=$(foreach mod,$(CRYPTO_MODULES),$(call crypto_file,$(mod)))
|
||||
-endef
|
||||
-
|
||||
-$(eval $(call KernelPackage,crypto-core))
|
||||
-
|
||||
-
|
||||
define AddDepends/crypto
|
||||
SUBMENU:=$(CRYPTO_MENU)
|
||||
- DEPENDS+=+kmod-crypto-core $(1)
|
||||
+ DEPENDS+= $(1)
|
||||
endef
|
||||
|
||||
define KernelPackage/crypto-aead
|
||||
@@ -272,17 +257,6 @@ endif
|
||||
$(eval $(call KernelPackage,crypto-aes))
|
||||
|
||||
|
||||
-define KernelPackage/crypto-arc4
|
||||
- TITLE:=ARC4 (RC4) cipher CryptoAPI module
|
||||
- KCONFIG:=CONFIG_CRYPTO_ARC4
|
||||
- FILES:=$(LINUX_DIR)/crypto/arc4.ko
|
||||
- AUTOLOAD:=$(call AutoLoad,09,arc4)
|
||||
- $(call AddDepends/crypto)
|
||||
-endef
|
||||
-
|
||||
-$(eval $(call KernelPackage,crypto-arc4))
|
||||
-
|
||||
-
|
||||
define KernelPackage/crypto-authenc
|
||||
TITLE:=Combined mode wrapper for IPsec
|
||||
DEPENDS:=+kmod-crypto-manager
|
||||
diff --git a/package/kernel/linux/modules/fs.mk b/package/kernel/linux/modules/fs.mk
|
||||
index fa182375ea8b0224753141620bd168328194ddf4..cc87a45961d04d93badce575530495f994deee86 100644
|
||||
--- a/package/kernel/linux/modules/fs.mk
|
||||
+++ b/package/kernel/linux/modules/fs.mk
|
||||
@@ -91,7 +91,6 @@ define KernelPackage/fs-cifs
|
||||
AUTOLOAD:=$(call AutoLoad,30,cifs)
|
||||
$(call AddDepends/nls)
|
||||
DEPENDS+= \
|
||||
- +kmod-crypto-arc4 \
|
||||
+kmod-crypto-hmac \
|
||||
+kmod-crypto-md5 \
|
||||
+kmod-crypto-md4 \
|
||||
diff --git a/package/kernel/linux/modules/netsupport.mk b/package/kernel/linux/modules/netsupport.mk
|
||||
index 8a2760d8a4a429f206eba41a8c83432e5b6ddab7..ab76946d2ab30e748ea5bc69c24051dbfc411036 100644
|
||||
--- a/package/kernel/linux/modules/netsupport.mk
|
||||
+++ b/package/kernel/linux/modules/netsupport.mk
|
||||
@@ -714,7 +714,7 @@ $(eval $(call KernelPackage,ipoa))
|
||||
define KernelPackage/mppe
|
||||
SUBMENU:=$(NETWORK_SUPPORT_MENU)
|
||||
TITLE:=Microsoft PPP compression/encryption
|
||||
- DEPENDS:=kmod-ppp +kmod-crypto-core +kmod-crypto-arc4 +kmod-crypto-sha1 +kmod-crypto-ecb
|
||||
+ DEPENDS:=kmod-ppp +kmod-crypto-sha1 +kmod-crypto-ecb
|
||||
KCONFIG:= \
|
||||
CONFIG_PPP_MPPE_MPPC \
|
||||
CONFIG_PPP_MPPE
|
||||
@@ -998,7 +998,7 @@ define KernelPackage/rxrpc
|
||||
$(LINUX_DIR)/net/rxrpc/af-rxrpc.ko \
|
||||
$(LINUX_DIR)/net/rxrpc/rxkad.ko
|
||||
AUTOLOAD:=$(call AutoLoad,30,rxkad af-rxrpc)
|
||||
- DEPENDS:=+kmod-crypto-core +kmod-crypto-manager +kmod-crypto-pcbc +kmod-crypto-fcrypt
|
||||
+ DEPENDS:= +kmod-crypto-manager +kmod-crypto-pcbc +kmod-crypto-fcrypt
|
||||
endef
|
||||
|
||||
define KernelPackage/rxrpc/description
|
||||
diff --git a/target/linux/generic/config-3.18 b/target/linux/generic/config-3.18
|
||||
index 6038692b7e81334e4864d30453f734f4fe829aa0..a0dc3c9b607abe32c1ca021b7fad293a8f742ec1 100644
|
||||
--- a/target/linux/generic/config-3.18
|
||||
+++ b/target/linux/generic/config-3.18
|
||||
@@ -700,9 +700,10 @@ CONFIG_CRYPTO_ALGAPI=y
|
||||
CONFIG_CRYPTO_ALGAPI2=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_ANUBIS is not set
|
||||
-# CONFIG_CRYPTO_ARC4 is not set
|
||||
+CONFIG_CRYPTO_ARC4=y
|
||||
# CONFIG_CRYPTO_AUTHENC is not set
|
||||
-# CONFIG_CRYPTO_BLKCIPHER is not set
|
||||
+CONFIG_CRYPTO_BLKCIPHER=y
|
||||
+CONFIG_CRYPTO_BLKCIPHER2=y
|
||||
# CONFIG_CRYPTO_BLOWFISH is not set
|
||||
# CONFIG_CRYPTO_CAMELLIA is not set
|
||||
# CONFIG_CRYPTO_CAST5 is not set
|
||||
diff --git a/target/linux/omap/config-3.18 b/target/linux/omap/config-3.18
|
||||
index a06a350a37c035c66ec8d6242f28379e7992685e..d5003c275b2b2a167d4614f5e33269941a02173e 100644
|
||||
--- a/target/linux/omap/config-3.18
|
||||
+++ b/target/linux/omap/config-3.18
|
||||
@@ -114,9 +114,6 @@ CONFIG_CPU_V7=y
|
||||
CONFIG_CRC16=y
|
||||
CONFIG_CRYPTO_AEAD=m
|
||||
CONFIG_CRYPTO_AEAD2=m
|
||||
-CONFIG_CRYPTO_ARC4=m
|
||||
-CONFIG_CRYPTO_BLKCIPHER=m
|
||||
-CONFIG_CRYPTO_BLKCIPHER2=m
|
||||
CONFIG_CRYPTO_CCM=m
|
||||
CONFIG_CRYPTO_CRC32C=y
|
||||
CONFIG_CRYPTO_CTR=m
|
||||
diff --git a/target/linux/sunxi/config-3.18 b/target/linux/sunxi/config-3.18
|
||||
index ddc3f7acb82064fb3be16f5111b0c4344b01c362..57651bbd65ebc61b14d45aefaaf20e5b8d59e27a 100644
|
||||
--- a/target/linux/sunxi/config-3.18
|
||||
+++ b/target/linux/sunxi/config-3.18
|
||||
@@ -110,9 +110,6 @@ CONFIG_CPU_TLB_V7=y
|
||||
CONFIG_CPU_V7=y
|
||||
CONFIG_CRC16=y
|
||||
CONFIG_CRC_T10DIF=y
|
||||
-CONFIG_CRYPTO_ARC4=y
|
||||
-CONFIG_CRYPTO_BLKCIPHER=y
|
||||
-CONFIG_CRYPTO_BLKCIPHER2=y
|
||||
CONFIG_CRYPTO_CRC32C=y
|
||||
CONFIG_CRYPTO_CRCT10DIF=y
|
||||
CONFIG_CRYPTO_DES=y
|
@ -1,24 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sun, 3 Jul 2016 19:15:49 +0200
|
||||
Subject: x86: stop relying on hexdump for image build signature
|
||||
|
||||
Use perl to generate random number instead.
|
||||
See https://github.com/freifunk-gluon/gluon/issues/811
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
Backport of LEDE d5ee23ee275fcd6550b0051de59706cc928cdac8
|
||||
|
||||
diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile
|
||||
index e7e02f15fbb3d1638b26982e7ddff305464e6851..6f64eba398e34093308b766839e69780512a4ca8 100644
|
||||
--- a/target/linux/x86/image/Makefile
|
||||
+++ b/target/linux/x86/image/Makefile
|
||||
@@ -40,7 +40,7 @@ ifneq ($(GRUB_TERMINALS),)
|
||||
GRUB_TERMINAL_CONFIG := terminal_input $(GRUB_TERMINALS); terminal_output $(GRUB_TERMINALS)
|
||||
endif
|
||||
|
||||
-SIGNATURE:=$(shell dd if=/dev/urandom bs=4 count=1 2>/dev/null | hexdump -v -e '"%08x"')
|
||||
+SIGNATURE:=$(shell perl -e 'printf("%08x", rand(0xFFFFFFFF))')
|
||||
ROOTPART:=$(call qstrip,$(CONFIG_TARGET_ROOTFS_PARTNAME))
|
||||
ROOTPART:=$(if $(ROOTPART),$(ROOTPART),PARTUUID=$(SIGNATURE)-02)
|
||||
|
@ -1,34 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Thu, 30 Jun 2016 21:52:02 +0200
|
||||
Subject: mt76: fix build with kernel 3.18
|
||||
|
||||
diff --git a/package/kernel/mac80211/patches/945-netdev_alloc_frag.patch b/package/kernel/mac80211/patches/945-netdev_alloc_frag.patch
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..ea389cd85cb15c7ecb20a1e0c934fcf8b58c0eda
|
||||
--- /dev/null
|
||||
+++ b/package/kernel/mac80211/patches/945-netdev_alloc_frag.patch
|
||||
@@ -0,0 +1,11 @@
|
||||
+--- a/backport-include/linux/netdevice.h
|
||||
++++ b/backport-include/linux/netdevice.h
|
||||
+@@ -233,7 +233,7 @@ static inline void backport_unregister_n
|
||||
+ #endif
|
||||
+
|
||||
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(3,19,0)
|
||||
+-#define napi_alloc_frag(fragsz) netdev_alloc_frag(fragsz)
|
||||
++#define napi_alloc_frag netdev_alloc_frag
|
||||
+ #endif
|
||||
+
|
||||
+ /*
|
||||
diff --git a/package/kernel/mt76/Makefile b/package/kernel/mt76/Makefile
|
||||
index bd851e61910c9a57ca45a570855ca22329c9ae4b..989ba0c2e8d10f6e7bb8fbd31e7181efff19be7c 100644
|
||||
--- a/package/kernel/mt76/Makefile
|
||||
+++ b/package/kernel/mt76/Makefile
|
||||
@@ -24,7 +24,7 @@ include $(INCLUDE_DIR)/package.mk
|
||||
define KernelPackage/mt76
|
||||
SUBMENU:=Wireless Drivers
|
||||
TITLE:=MediaTek MT76x2/MT7603 wireless driver
|
||||
- DEPENDS:=+kmod-mac80211 +@DRIVER_11N_SUPPORT @PCI_SUPPORT @!LINUX_3_18
|
||||
+ DEPENDS:=+kmod-mac80211 +@DRIVER_11N_SUPPORT @PCI_SUPPORT
|
||||
FILES:=\
|
||||
$(PKG_BUILD_DIR)/mt76.ko \
|
||||
$(PKG_BUILD_DIR)/mt76x2e.ko \
|
@ -1,41 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Thu, 30 Jun 2016 15:34:32 +0200
|
||||
Subject: ramips: Support LEDs on D-Link DIR-860L B1
|
||||
|
||||
Adds the required gpio definitions.
|
||||
|
||||
Signed-off-by: Johannes Wienke <languitar@semipol.de>
|
||||
|
||||
Backport of OpenWrt r48715
|
||||
|
||||
diff --git a/target/linux/ramips/dts/DIR-860L-B1.dts b/target/linux/ramips/dts/DIR-860L-B1.dts
|
||||
index 23ec1140bc89fa06aa2920bc43efc8bb7465fb42..2582b3d4182d3a0fcee6e6ea6f97ab8007edf3a2 100644
|
||||
--- a/target/linux/ramips/dts/DIR-860L-B1.dts
|
||||
+++ b/target/linux/ramips/dts/DIR-860L-B1.dts
|
||||
@@ -97,6 +97,26 @@
|
||||
|
||||
gpio-leds {
|
||||
compatible = "gpio-leds";
|
||||
+
|
||||
+ power {
|
||||
+ label = "d-link:orange:power";
|
||||
+ gpios = <&gpio0 13 1>;
|
||||
+ };
|
||||
+
|
||||
+ power2 {
|
||||
+ label = "d-link:green:power";
|
||||
+ gpios = <&gpio0 15 1>;
|
||||
+ };
|
||||
+
|
||||
+ net {
|
||||
+ label = "d-link:orange:net";
|
||||
+ gpios = <&gpio0 14 1>;
|
||||
+ };
|
||||
+
|
||||
+ net2 {
|
||||
+ label = "d-link:green:net";
|
||||
+ gpios = <&gpio0 16 1>;
|
||||
+ };
|
||||
};
|
||||
|
||||
gpio-keys-polled {
|
@ -1,56 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Thu, 30 Jun 2016 15:18:03 +0200
|
||||
Subject: ramips: add button support and make LEDs known to userspace for DIR-860L B1
|
||||
|
||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
|
||||
diff --git a/target/linux/ramips/base-files/etc/board.d/01_leds b/target/linux/ramips/base-files/etc/board.d/01_leds
|
||||
index 5327d006299ed94c645542f687e20962c83e842d..5fb28a52f7632bf09e7f62ff77dcd7254a2ebcc2 100755
|
||||
--- a/target/linux/ramips/base-files/etc/board.d/01_leds
|
||||
+++ b/target/linux/ramips/base-files/etc/board.d/01_leds
|
||||
@@ -114,6 +114,9 @@ case $board in
|
||||
esr-9753)
|
||||
set_wifi_led "rt2800pci-phy0::radio"
|
||||
;;
|
||||
+ dir-860l-b1)
|
||||
+ ucidef_set_led_netdev "wan" "wan" "d-link:green:net" "eth0.2"
|
||||
+ ;;
|
||||
ex2700)
|
||||
ucidef_set_led_default "power_r" "POWER (red)" "ex2700:red:power" "0"
|
||||
set_wifi_led "ex2700:green:router"
|
||||
diff --git a/target/linux/ramips/base-files/etc/diag.sh b/target/linux/ramips/base-files/etc/diag.sh
|
||||
index 6474ebdde354b51648fcafd426e3256f0b6fe8b4..37360a417cb24eaedef24766510db7146c92e3cb 100644
|
||||
--- a/target/linux/ramips/base-files/etc/diag.sh
|
||||
+++ b/target/linux/ramips/base-files/etc/diag.sh
|
||||
@@ -54,6 +54,9 @@ get_status_led() {
|
||||
dir-645)
|
||||
status_led="d-link:green:wps"
|
||||
;;
|
||||
+ dir-860l-b1)
|
||||
+ status_led="d-link:green:power"
|
||||
+ ;;
|
||||
dap-1350)
|
||||
status_led="d-link:blue:power"
|
||||
;;
|
||||
diff --git a/target/linux/ramips/dts/DIR-860L-B1.dts b/target/linux/ramips/dts/DIR-860L-B1.dts
|
||||
index 2582b3d4182d3a0fcee6e6ea6f97ab8007edf3a2..c0bcc86216cf4bd343b688aa7e717b5c45775c50 100644
|
||||
--- a/target/linux/ramips/dts/DIR-860L-B1.dts
|
||||
+++ b/target/linux/ramips/dts/DIR-860L-B1.dts
|
||||
@@ -124,5 +124,17 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
poll-interval = <20>;
|
||||
+
|
||||
+ reset {
|
||||
+ label = "reset";
|
||||
+ gpios = <&gpio0 7 1>;
|
||||
+ linux,code = <0x198>;
|
||||
+ };
|
||||
+
|
||||
+ wps {
|
||||
+ label = "wps";
|
||||
+ gpios = <&gpio0 18 1>;
|
||||
+ linux,code = <0x211>;
|
||||
+ };
|
||||
};
|
||||
};
|
@ -1,22 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Thu, 30 Jun 2016 16:16:30 +0200
|
||||
Subject: ramips: set correct LAN/WAN MAC addresses on DIR-860L B1
|
||||
|
||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
|
||||
diff --git a/target/linux/ramips/base-files/etc/board.d/02_network b/target/linux/ramips/base-files/etc/board.d/02_network
|
||||
index a78912dbc9b5ecdc8a9fb0c583c1e47fdb579015..4e6e507625adf8c706e2311ee121769cadb2aeaf 100755
|
||||
--- a/target/linux/ramips/base-files/etc/board.d/02_network
|
||||
+++ b/target/linux/ramips/base-files/etc/board.d/02_network
|
||||
@@ -346,6 +346,11 @@ ramips_setup_macs()
|
||||
wan_mac=$(mtd_get_mac_ascii nvram wanmac)
|
||||
;;
|
||||
|
||||
+ dir-860l-b1)
|
||||
+ lan_mac=$(mtd_get_mac_ascii factory lanmac)
|
||||
+ wan_mac=$(mtd_get_mac_ascii factory wanmac)
|
||||
+ ;;
|
||||
+
|
||||
e1700)
|
||||
wan_mac=$(mtd_get_mac_ascii config WAN_MAC_ADDR)
|
||||
;;
|
@ -1,323 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sun, 3 Jul 2016 22:14:18 +0200
|
||||
Subject: ar71xx: add support for TP-LINK TL-WR842N/ND v3
|
||||
|
||||
- CPU QCA9531-BL3A
|
||||
- RAM: 64MB
|
||||
- flash: 16MB
|
||||
- USB
|
||||
|
||||
AP143 platform, similar to tl-wr841n v10/v11, but with USB
|
||||
|
||||
Signed-off-by: Cezary Jackiewicz <cezary@eko.one.pl>
|
||||
|
||||
Backport of LEDE 0b45bec22c59cc6e6b2fa71dc9a88386c5587132
|
||||
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
|
||||
index cb92349cab833179a87a195b94e2539cc5ce3e79..2c5d6af8f4e2c5ce71adc0b63d32b8506e01b6a2 100644
|
||||
--- a/target/linux/ar71xx/base-files/etc/diag.sh
|
||||
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
|
||||
@@ -280,6 +280,7 @@ get_status_led() {
|
||||
tl-wr841n-v11 | \
|
||||
tl-wa830re-v2 | \
|
||||
tl-wr842n-v2 | \
|
||||
+ tl-wr842n-v3 | \
|
||||
tl-wr941nd | \
|
||||
tl-wr941nd-v5)
|
||||
status_led="tp-link:green:system"
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
|
||||
index d81358d6bf9103ffeb2929b06d3ab01efffe931c..14aa7bc5e56c0d7be435ba3a1803416075eccb58 100644
|
||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
|
||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
|
||||
@@ -523,6 +523,16 @@ tl-wr842n-v2)
|
||||
ucidef_set_led_usbdev "usb" "USB" "tp-link:green:3g" "1-1"
|
||||
;;
|
||||
|
||||
+tl-wr842n-v3)
|
||||
+ ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth1"
|
||||
+ ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x10"
|
||||
+ ucidef_set_led_switch "lan2" "LAN2" "tp-link:green:lan2" "switch0" "0x08"
|
||||
+ ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x04"
|
||||
+ ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x02"
|
||||
+ ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
|
||||
+ ucidef_set_led_usbdev "usb" "USB" "tp-link:green:3g" "1-1"
|
||||
+ ;;
|
||||
+
|
||||
tl-wa801nd-v2 | \
|
||||
tl-wa901nd-v3)
|
||||
ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan" "eth0"
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
index ac3deb8aa2ed4717e2bd682cb4ffd7d32c50134f..ca9c5771d72681557f4139c0e58f4d7a656bd741 100755
|
||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
@@ -449,6 +449,7 @@ tl-wr741nd-v4 |\
|
||||
tl-wr841n-v7 |\
|
||||
tl-wr841n-v9 |\
|
||||
tl-wr841n-v11 |\
|
||||
+tl-wr842n-v3 |\
|
||||
whr-g301n |\
|
||||
whr-hp-g300n |\
|
||||
whr-hp-gn |\
|
||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
index f242980b3e401f2e9de2b8abe7e984b24a71db5a..fcd0bc35227de9b6a02c10c1bebf2413bdc555bf 100755
|
||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
@@ -869,6 +869,9 @@ ar71xx_board_detect() {
|
||||
*"TL-WR842N/ND v2")
|
||||
name="tl-wr842n-v2"
|
||||
;;
|
||||
+ *"TL-WR842N/ND v3")
|
||||
+ name="tl-wr842n-v3"
|
||||
+ ;;
|
||||
*TL-WR941ND)
|
||||
name="tl-wr941nd"
|
||||
;;
|
||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
index d816f211891d6a259930f2781574504ea62b4e16..53284df5e2da19d8012361e9560244af898d3c2c 100755
|
||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
@@ -367,6 +367,7 @@ platform_check_image() {
|
||||
tl-wr841n-v9 | \
|
||||
tl-wr841n-v11 | \
|
||||
tl-wr842n-v2 | \
|
||||
+ tl-wr842n-v3 | \
|
||||
tl-wr941nd | \
|
||||
tl-wr941nd-v5 | \
|
||||
tl-wr941nd-v6 | \
|
||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr841n-v9.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr841n-v9.c
|
||||
index 004f71961396cd33cfd381aca386706104a7b757..ebaed15a49113133f59f069325898a00f5612fef 100644
|
||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr841n-v9.c
|
||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr841n-v9.c
|
||||
@@ -1,9 +1,16 @@
|
||||
/*
|
||||
+<<<<<<< HEAD
|
||||
* TP-LINK TL-WR841N/ND v9/v11
|
||||
*
|
||||
* Copyright (C) 2014 Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
* Copyright (C) 2016 Cezary Jackiewicz <cezary@eko.one.pl>
|
||||
* Copyright (C) 2016 Stijn Segers <francesco.borromini@gmail.com>
|
||||
+=======
|
||||
+ * TP-LINK TL-WR841N/ND v9/TL-WR842N/ND v3
|
||||
+ *
|
||||
+ * Copyright (C) 2014 Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
+ * Copyright (C) 2016 Cezary Jackiewicz <cezary@eko.one.pl>
|
||||
+>>>>>>> ar71xx: add support for TP-LINK TL-WR842N/ND v3
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 as published
|
||||
@@ -49,6 +56,20 @@
|
||||
#define TL_WR841NV11_GPIO_BTN_RESET 12
|
||||
#define TL_WR841NV11_GPIO_BTN_WIFI 17
|
||||
|
||||
+#define TL_WR842NV3_GPIO_LED_SYSTEM 2
|
||||
+#define TL_WR842NV3_GPIO_LED_WLAN 3
|
||||
+#define TL_WR842NV3_GPIO_LED_WAN_RED 4
|
||||
+#define TL_WR842NV3_GPIO_LED_WAN_GREEN 11
|
||||
+#define TL_WR842NV3_GPIO_LED_LAN1 12
|
||||
+#define TL_WR842NV3_GPIO_LED_LAN2 13
|
||||
+#define TL_WR842NV3_GPIO_LED_LAN3 14
|
||||
+#define TL_WR842NV3_GPIO_LED_LAN4 15
|
||||
+#define TL_WR842NV3_GPIO_LED_3G 16
|
||||
+#define TL_WR842NV3_GPIO_LED_WPS 17
|
||||
+
|
||||
+#define TL_WR842NV3_GPIO_BTN_RESET 1
|
||||
+#define TL_WR842NV3_GPIO_BTN_WIFI 0
|
||||
+
|
||||
#define TL_WR841NV9_KEYS_POLL_INTERVAL 20 /* msecs */
|
||||
#define TL_WR841NV9_KEYS_DEBOUNCE_INTERVAL (3 * TL_WR841NV9_KEYS_POLL_INTERVAL)
|
||||
|
||||
@@ -151,6 +172,68 @@ static struct gpio_led tl_wr841n_v11_leds_gpio[] __initdata = {
|
||||
},
|
||||
};
|
||||
|
||||
+static struct gpio_led tl_wr842n_v3_leds_gpio[] __initdata = {
|
||||
+ {
|
||||
+ .name = "tp-link:green:lan1",
|
||||
+ .gpio = TL_WR842NV3_GPIO_LED_LAN1,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
+ .name = "tp-link:green:lan2",
|
||||
+ .gpio = TL_WR842NV3_GPIO_LED_LAN2,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
+ .name = "tp-link:green:lan3",
|
||||
+ .gpio = TL_WR842NV3_GPIO_LED_LAN3,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
+ .name = "tp-link:green:lan4",
|
||||
+ .gpio = TL_WR842NV3_GPIO_LED_LAN4,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
+ .name = "tp-link:green:wan",
|
||||
+ .gpio = TL_WR842NV3_GPIO_LED_WAN_GREEN,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
+ .name = "tp-link:red:wan",
|
||||
+ .gpio = TL_WR842NV3_GPIO_LED_WAN_RED,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
+ .name = "tp-link:green:wlan",
|
||||
+ .gpio = TL_WR842NV3_GPIO_LED_WLAN,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
+ .name = "tp-link:green:system",
|
||||
+ .gpio = TL_WR842NV3_GPIO_LED_SYSTEM,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
+ .name = "tp-link:green:3g",
|
||||
+ .gpio = TL_WR842NV3_GPIO_LED_3G,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
+ .name = "tp-link:green:wps",
|
||||
+ .gpio = TL_WR842NV3_GPIO_LED_WPS,
|
||||
+ .active_low = 1,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static struct gpio_keys_button tl_wr842n_v3_gpio_keys[] __initdata = {
|
||||
+ {
|
||||
+ .desc = "Reset button",
|
||||
+ .type = EV_KEY,
|
||||
+ .code = KEY_RESTART,
|
||||
+ .debounce_interval = TL_WR841NV9_KEYS_DEBOUNCE_INTERVAL,
|
||||
+ .gpio = TL_WR842NV3_GPIO_BTN_RESET,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
+ .desc = "WIFI button",
|
||||
+ .type = EV_KEY,
|
||||
+ .code = KEY_RFKILL,
|
||||
+ .debounce_interval = TL_WR841NV9_KEYS_DEBOUNCE_INTERVAL,
|
||||
+ .gpio = TL_WR842NV3_GPIO_BTN_WIFI,
|
||||
+ .active_low = 1,
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
static void __init tl_ap143_setup(void)
|
||||
{
|
||||
u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
|
||||
@@ -212,3 +295,20 @@ static void __init tl_wr841n_v11_setup(void)
|
||||
|
||||
MIPS_MACHINE(ATH79_MACH_TL_WR841N_V11, "TL-WR841N-v11", "TP-LINK TL-WR841N/ND v11",
|
||||
tl_wr841n_v11_setup);
|
||||
+
|
||||
+static void __init tl_wr842n_v3_setup(void)
|
||||
+{
|
||||
+ tl_ap143_setup();
|
||||
+
|
||||
+ ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr842n_v3_leds_gpio),
|
||||
+ tl_wr842n_v3_leds_gpio);
|
||||
+
|
||||
+ ath79_register_gpio_keys_polled(1, TL_WR841NV9_KEYS_POLL_INTERVAL,
|
||||
+ ARRAY_SIZE(tl_wr842n_v3_gpio_keys),
|
||||
+ tl_wr842n_v3_gpio_keys);
|
||||
+
|
||||
+ ath79_register_usb();
|
||||
+}
|
||||
+
|
||||
+MIPS_MACHINE(ATH79_MACH_TL_WR842N_V3, "TL-WR842N-v3", "TP-LINK TL-WR842N/ND v3",
|
||||
+ tl_wr842n_v3_setup);
|
||||
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
|
||||
index 05eea0b16c362ba5f70c9f435dbe312087b319c2..d66bd25fe01544224a69e3f35f020f2e4130c8b3 100644
|
||||
--- a/target/linux/ar71xx/image/Makefile
|
||||
+++ b/target/linux/ar71xx/image/Makefile
|
||||
@@ -607,6 +607,13 @@ define Device/tl-wr842n-v2
|
||||
TPLINK_HWID := 0x8420002
|
||||
endef
|
||||
|
||||
+define Device/tl-wr842n-v3
|
||||
+ $(Device/tplink-16mlzma)
|
||||
+ BOARDNAME := TL-WR842N-v3
|
||||
+ DEVICE_PROFILE := TLWR842
|
||||
+ TPLINK_HWID := 0x08420003
|
||||
+endef
|
||||
+
|
||||
define Device/tl-wr843nd-v1
|
||||
$(Device/tplink-4mlzma)
|
||||
BOARDNAME := TL-WR841N-v8
|
||||
@@ -620,7 +627,7 @@ define Device/tl-wr847n-v8
|
||||
DEVICE_PROFILE := TLWR841
|
||||
TPLINK_HWID := 0x08470008
|
||||
endef
|
||||
-TARGET_DEVICES += tl-wr841n-v8 tl-wr841n-v9 tl-wr841n-v10 tl-wr841n-v11 tl-wr842n-v2 tl-wr843nd-v1 tl-wr847n-v8
|
||||
+TARGET_DEVICES += tl-wr841n-v8 tl-wr841n-v9 tl-wr841n-v10 tl-wr841n-v11 tl-wr842n-v2 tl-wr842n-v3 tl-wr843nd-v1 tl-wr847n-v8
|
||||
|
||||
define Device/tl-wr941nd-v5
|
||||
$(Device/tplink-4mlzma)
|
||||
diff --git a/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch b/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
|
||||
index debde6e6a552e71b551d8c01ba06af03013407bf..d4b417bfb78606ddb84076ad8c927952e65118c2 100644
|
||||
--- a/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
|
||||
+++ b/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/arch/mips/ath79/machtypes.h
|
||||
+++ b/arch/mips/ath79/machtypes.h
|
||||
-@@ -16,22 +16,202 @@
|
||||
+@@ -16,22 +16,203 @@
|
||||
|
||||
enum ath79_mach_type {
|
||||
ATH79_MACH_GENERIC = 0,
|
||||
@@ -148,6 +148,7 @@
|
||||
+ ATH79_MACH_TL_WR841N_V9, /* TP-LINK TL-WR841N/ND v9 */
|
||||
+ ATH79_MACH_TL_WR841N_V11, /* TP-LINK TL-WR841N/ND v11 */
|
||||
+ ATH79_MACH_TL_WR842N_V2, /* TP-LINK TL-WR842N/ND v2 */
|
||||
++ ATH79_MACH_TL_WR842N_V3, /* TP-LINK TL-WR842N/ND v3 */
|
||||
+ ATH79_MACH_TL_WR941ND, /* TP-LINK TL-WR941ND */
|
||||
+ ATH79_MACH_TL_WR941ND_V5, /* TP-LINK TL-WR941ND v5 */
|
||||
+ ATH79_MACH_TL_WR941ND_V6, /* TP-LINK TL-WR941ND v6 */
|
||||
@@ -285,7 +286,7 @@
|
||||
config ATH79_MACH_AP121
|
||||
bool "Atheros AP121 reference board"
|
||||
select SOC_AR933X
|
||||
-@@ -11,62 +84,1050 @@ config ATH79_MACH_AP121
|
||||
+@@ -11,62 +84,1051 @@ config ATH79_MACH_AP121
|
||||
select ATH79_DEV_M25P80
|
||||
select ATH79_DEV_USB
|
||||
select ATH79_DEV_WMAC
|
||||
@@ -1236,13 +1237,14 @@
|
||||
+ select ATH79_DEV_WMAC
|
||||
+
|
||||
+config ATH79_MACH_TL_WR841N_V9
|
||||
-+ bool "TP-LINK TL-WR841N/ND v9 support"
|
||||
-+ select SOC_QCA953X
|
||||
-+ select ATH79_DEV_ETH
|
||||
-+ select ATH79_DEV_GPIO_BUTTONS
|
||||
-+ select ATH79_DEV_LEDS_GPIO
|
||||
-+ select ATH79_DEV_M25P80
|
||||
-+ select ATH79_DEV_WMAC
|
||||
++ bool "TP-LINK TL-WR841N/ND v9/TL-WR842N/ND v3 support"
|
||||
++ select SOC_QCA953X
|
||||
++ select ATH79_DEV_ETH
|
||||
++ select ATH79_DEV_GPIO_BUTTONS
|
||||
++ select ATH79_DEV_LEDS_GPIO
|
||||
++ select ATH79_DEV_M25P80
|
||||
++ select ATH79_DEV_USB
|
||||
++ select ATH79_DEV_WMAC
|
||||
+
|
||||
+config ATH79_MACH_TL_WR941ND
|
||||
+ bool "TP-LINK TL-WR941ND support"
|
||||
@@ -1365,7 +1367,7 @@
|
||||
|
||||
config ATH79_MACH_UBNT_XM
|
||||
bool "Ubiquiti Networks XM/UniFi boards"
|
||||
-@@ -83,6 +1144,117 @@ config ATH79_MACH_UBNT_XM
|
||||
+@@ -83,6 +1145,117 @@ config ATH79_MACH_UBNT_XM
|
||||
Say 'Y' here if you want your kernel to support the
|
||||
Ubiquiti Networks XM (rev 1.0) board.
|
||||
|
||||
@@ -1483,7 +1485,7 @@
|
||||
endmenu
|
||||
|
||||
config SOC_AR71XX
|
||||
-@@ -124,7 +1296,10 @@ config ATH79_DEV_DSA
|
||||
+@@ -124,7 +1297,10 @@ config ATH79_DEV_DSA
|
||||
config ATH79_DEV_ETH
|
||||
def_bool n
|
||||
|
||||
@@ -1495,7 +1497,7 @@
|
||||
def_bool n
|
||||
|
||||
config ATH79_DEV_GPIO_BUTTONS
|
||||
-@@ -154,6 +1329,11 @@ config ATH79_PCI_ATH9K_FIXUP
|
||||
+@@ -154,6 +1330,11 @@ config ATH79_PCI_ATH9K_FIXUP
|
||||
def_bool n
|
||||
|
||||
config ATH79_ROUTERBOOT
|
@ -1,18 +0,0 @@
|
||||
From: Florian Klink <flokli@flokli.de>
|
||||
Date: Mon, 18 Jul 2016 13:53:25 +0200
|
||||
Subject: x86/generic: enable CONFIG_SATA_VIA
|
||||
|
||||
This enables support for VIA SATA.
|
||||
|
||||
diff --git a/target/linux/x86/generic/config-default b/target/linux/x86/generic/config-default
|
||||
index 9e963bf725b222dc94792dc8760f6f747cfffb78..4fc513154bd566319d77e6e42622ef362baeb094 100644
|
||||
--- a/target/linux/x86/generic/config-default
|
||||
+++ b/target/linux/x86/generic/config-default
|
||||
@@ -174,6 +174,7 @@ CONFIG_PNP_DEBUG_MESSAGES=y
|
||||
CONFIG_RAS=y
|
||||
# CONFIG_SAMSUNG_Q10 is not set
|
||||
CONFIG_SATA_AHCI=y
|
||||
+CONFIG_SATA_VIA=y
|
||||
# CONFIG_SCx200_ACB is not set
|
||||
# CONFIG_SERIAL_8250_FINTEK is not set
|
||||
CONFIG_SERIAL_8250_PNP=y
|
@ -1,45 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Thu, 21 Jul 2016 17:45:26 +0200
|
||||
Subject: libpcap: fix dependency of install-shared-so make target
|
||||
|
||||
There seems to be a situation in which a rebuild of libpcap.so is triggered
|
||||
in the install step of the libpcap Makefile. libpcap.so is the wrong
|
||||
target, leading to the build failure reported in [1].
|
||||
|
||||
Fix the dependency of install-shared-so to $(SHAREDLIB) so the build can
|
||||
succeed in this case.
|
||||
|
||||
[1] https://dev.openwrt.org/ticket/19894
|
||||
|
||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
|
||||
Backport of LEDE b82c8ddf8c15e91d6eecfd6d237606a4ce1f756f
|
||||
|
||||
diff --git a/package/libs/libpcap/patches/100-debian_shared_lib.patch b/package/libs/libpcap/patches/100-debian_shared_lib.patch
|
||||
index b294e51576f9b9f363fa0143bd0945f03f9d13cd..f8df7f3636cb62845930843a4b208fe4e91a54f2 100644
|
||||
--- a/package/libs/libpcap/patches/100-debian_shared_lib.patch
|
||||
+++ b/package/libs/libpcap/patches/100-debian_shared_lib.patch
|
||||
@@ -97,7 +97,7 @@ build a shared library.
|
||||
|
||||
+grammar_pic.o: grammar.c
|
||||
+ @rm -f $@
|
||||
-+ $(CC) -fPIC $(FULL_CFLAGS) -Dyylval=pcap_lval -o $@ -c grammar.c
|
||||
++ $(CC) -fPIC $(FULL_CFLAGS) -Dyylval=pcap_lval -o $@ -c grammar.c
|
||||
+
|
||||
version.o: version.c
|
||||
$(CC) $(FULL_CFLAGS) -c version.c
|
||||
@@ -118,8 +118,12 @@ build a shared library.
|
||||
#
|
||||
# Generate the pcap-config script.
|
||||
#
|
||||
-@@ -618,11 +652,9 @@ install-shared: install-shared-$(DYEXT)
|
||||
- install-shared-so: libpcap.so
|
||||
+@@ -615,14 +649,12 @@ install: install-shared install-archive
|
||||
+ $(DESTDIR)$(mandir)/man@MAN_MISC_INFO@/`echo $$i | sed 's/.manmisc.in/.@MAN_MISC_INFO@/'`; done
|
||||
+
|
||||
+ install-shared: install-shared-$(DYEXT)
|
||||
+-install-shared-so: libpcap.so
|
||||
++install-shared-so: $(SHAREDLIB)
|
||||
[ -d $(DESTDIR)$(libdir) ] || \
|
||||
(mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
|
||||
- VER=`cat $(srcdir)/VERSION`; \
|
@ -1,38 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Thu, 28 Jul 2016 15:43:25 +0200
|
||||
Subject: ar71xx: add revision detection for D-Link DIR-505 A1/A2
|
||||
|
||||
The A1 image also works on the A2, correctly set AR71XX_MODEL in this case.
|
||||
|
||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
|
||||
Backport of LEDE 500a67a167a256002f8ab05171f49dfb86b03260
|
||||
|
||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
index fcd0bc35227de9b6a02c10c1bebf2413bdc555bf..20250e96fdcc1783f9b6818c340425206c67016f 100755
|
||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
@@ -107,6 +107,15 @@ cybertan_get_hw_magic() {
|
||||
dd bs=8 count=1 skip=0 if=$part 2>/dev/null | hexdump -v -n 8 -e '1/1 "%02x"'
|
||||
}
|
||||
|
||||
+dir505_board_detect() {
|
||||
+ local dev=$(find_mtd_part 'mac')
|
||||
+ [ -z "$dev" ] && return
|
||||
+
|
||||
+ # The revision is stored at the beginning of the "mac" partition
|
||||
+ local rev="$(LC_CTYPE=C awk -v 'FS=[^[:print:]]' '{print $1; exit}' $dev)"
|
||||
+ AR71XX_MODEL="D-Link DIR-505 rev. $rev"
|
||||
+}
|
||||
+
|
||||
tplink_get_hwid() {
|
||||
local part
|
||||
|
||||
@@ -453,6 +462,7 @@ ar71xx_board_detect() {
|
||||
;;
|
||||
*"DIR-505 rev. A1")
|
||||
name="dir-505-a1"
|
||||
+ dir505_board_detect
|
||||
;;
|
||||
*"DIR-600 rev. A1")
|
||||
name="dir-600-a1"
|
@ -1,28 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Thu, 28 Jul 2016 15:59:04 +0200
|
||||
Subject: ar71xx: don't use D-Link DIR-505 status LED as ethernet indicator
|
||||
|
||||
The stock firmware uses the single LED as status indicator only. Using the
|
||||
same LED both for status and as ethernet indicator is uncommon, and has
|
||||
been confusing users who were using the device as a WLAN mesh node (so the
|
||||
LED was just off, as no ethernet was connected).
|
||||
|
||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
|
||||
Backport of LEDE adbbfb7ff900c489e6be34b2ec2834172dff7943
|
||||
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
|
||||
index 14aa7bc5e56c0d7be435ba3a1803416075eccb58..3d240fb076bf40b07e7f0b5974d7b5fd4435a044 100644
|
||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
|
||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
|
||||
@@ -139,10 +139,6 @@ dhp-1565-a1)
|
||||
ucidef_set_led_switch "wan" "WAN" "d-link:green:planet" "switch0" "0x20"
|
||||
;;
|
||||
|
||||
-dir-505-a1)
|
||||
- ucidef_set_led_netdev "lan" "LAN" "d-link:green:power" "eth1"
|
||||
- ;;
|
||||
-
|
||||
dir-600-a1|\
|
||||
dir-615-e1|\
|
||||
dir-615-e4)
|
@ -1,35 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Thu, 9 Jun 2016 04:39:08 +0200
|
||||
Subject: ar71xx/cpe510: enable LNA for CPE210/220/510/520
|
||||
|
||||
The LNA improves the rx path. Within a simple test setup
|
||||
it improved the signal from -60dbm to -40dbm.
|
||||
|
||||
Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
|
||||
|
||||
Backport of LEDE 94e23bf7409d6cc4c9efb55ed32aba8e5a497966
|
||||
|
||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c
|
||||
index 8bf5c0f6226cbba10da10af4798b67b76db94e2b..5cb052a84aee451b9fbd449910acfde80dcf8aa7 100644
|
||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c
|
||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c
|
||||
@@ -30,6 +30,9 @@
|
||||
#define CPE510_GPIO_LED_L3 15
|
||||
#define CPE510_GPIO_LED_L4 16
|
||||
|
||||
+#define CPE510_GPIO_EXTERNAL_LNA0 18
|
||||
+#define CPE510_GPIO_EXTERNAL_LNA1 19
|
||||
+
|
||||
#define CPE510_GPIO_BTN_RESET 4
|
||||
|
||||
#define CPE510_KEYS_POLL_INTERVAL 20 /* msecs */
|
||||
@@ -93,6 +96,9 @@ static void __init cpe510_setup(void)
|
||||
ARRAY_SIZE(cpe510_gpio_keys),
|
||||
cpe510_gpio_keys);
|
||||
|
||||
+ ath79_wmac_set_ext_lna_gpio(0, CPE510_GPIO_EXTERNAL_LNA0);
|
||||
+ ath79_wmac_set_ext_lna_gpio(1, CPE510_GPIO_EXTERNAL_LNA1);
|
||||
+
|
||||
ath79_register_m25p80(NULL);
|
||||
|
||||
ath79_register_mdio(1, 0);
|
@ -1,169 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Thu, 9 Jun 2016 04:55:37 +0200
|
||||
Subject: ar71xx/cpe510: split profile into 2 profiles cpe210 and cpe510
|
||||
|
||||
Split profile into 2GHz and 5GHz. The 5GHz devices are
|
||||
quite "special". The 2 GHz works perfect.
|
||||
|
||||
Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
|
||||
|
||||
Backport of LEDE c5ff273d85f69981e5b126eeaed3dee5b4061fb4
|
||||
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches b/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches
|
||||
index b41f27554b1e3eac19c22af59731771631a1135b..0f7a41589384755ff596d4355ad9fbf1e1087d91 100644
|
||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches
|
||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches
|
||||
@@ -15,6 +15,7 @@ nanostation-m)
|
||||
nanostation-m-xw)
|
||||
ucidef_set_gpio_switch "poe_passthrough" "PoE Passthrough" "2"
|
||||
;;
|
||||
+cpe210|\
|
||||
cpe510)
|
||||
ucidef_set_gpio_switch "poe_passthrough" "PoE Passthrough" "20"
|
||||
;;
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
|
||||
index 3d240fb076bf40b07e7f0b5974d7b5fd4435a044..f1266d88f1b6a441e58b0a008ca915a4b5958928 100644
|
||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
|
||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
|
||||
@@ -78,6 +78,7 @@ carambola2)
|
||||
ucidef_set_led_wlan "wlan" "WLAN" "carambola2:green:wlan" "phy0tpt"
|
||||
;;
|
||||
|
||||
+cpe210|\
|
||||
cpe510)
|
||||
ucidef_set_led_switch "lan0" "LAN0" "tp-link:green:lan0" "switch0" "0x20"
|
||||
ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x10"
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
index ca9c5771d72681557f4139c0e58f4d7a656bd741..6c3ecf54dccd111231d93e539346f7839252794c 100755
|
||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
@@ -72,6 +72,7 @@ bsb)
|
||||
ucidef_set_interface_wlan
|
||||
;;
|
||||
|
||||
+cpe210|\
|
||||
cpe510)
|
||||
ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
|
||||
ucidef_add_switch "switch0" "1" "1"
|
||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
index 20250e96fdcc1783f9b6818c340425206c67016f..0d8ccd21c3f552b7ae7aff6905a08ff6a4fdadf7 100755
|
||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
@@ -447,7 +447,11 @@ ar71xx_board_detect() {
|
||||
*CAP4200AG)
|
||||
name="cap4200ag"
|
||||
;;
|
||||
- *"CPE210/220/510/520")
|
||||
+ *"CPE210/220")
|
||||
+ name="cpe210"
|
||||
+ tplink_pharos_board_detect
|
||||
+ ;;
|
||||
+ *"CPE510/520")
|
||||
name="cpe510"
|
||||
tplink_pharos_board_detect
|
||||
;;
|
||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
index 53284df5e2da19d8012361e9560244af898d3c2c..4003b21df26917a521ed96db82a970a82cdbc2cb 100755
|
||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||||
@@ -265,6 +265,7 @@ platform_check_image() {
|
||||
return 0
|
||||
;;
|
||||
|
||||
+ cpe210|\
|
||||
cpe510)
|
||||
tplink_pharos_check_image "$1" && return 0
|
||||
return 1
|
||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c
|
||||
index 5cb052a84aee451b9fbd449910acfde80dcf8aa7..74daf434e611d1f9d05f7d7516ae918d334b32b7 100644
|
||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c
|
||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c
|
||||
@@ -78,12 +78,8 @@ static struct gpio_keys_button cpe510_gpio_keys[] __initdata = {
|
||||
}
|
||||
};
|
||||
|
||||
-
|
||||
-static void __init cpe510_setup(void)
|
||||
+static void __init cpe_setup(u8 *mac)
|
||||
{
|
||||
- u8 *mac = (u8 *) KSEG1ADDR(0x1f830008);
|
||||
- u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
|
||||
-
|
||||
/* Disable JTAG, enabling GPIOs 0-3 */
|
||||
/* Configure OBS4 line, for GPIO 4*/
|
||||
ath79_gpio_function_setup(AR934X_GPIO_FUNC_JTAG_DISABLE,
|
||||
@@ -105,9 +101,31 @@ static void __init cpe510_setup(void)
|
||||
ath79_init_mac(ath79_eth1_data.mac_addr, mac, 0);
|
||||
ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII;
|
||||
ath79_register_eth(1);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static void __init cpe210_setup(void)
|
||||
+{
|
||||
+ u8 *mac = (u8 *) KSEG1ADDR(0x1f830008);
|
||||
+ u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
|
||||
+
|
||||
+ cpe_setup(mac);
|
||||
|
||||
ath79_register_wmac(ee, mac);
|
||||
}
|
||||
|
||||
-MIPS_MACHINE(ATH79_MACH_CPE510, "CPE510", "TP-LINK CPE210/220/510/520",
|
||||
+static void __init cpe510_setup(void)
|
||||
+{
|
||||
+ u8 *mac = (u8 *) KSEG1ADDR(0x1f830008);
|
||||
+ u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
|
||||
+
|
||||
+ cpe_setup(mac);
|
||||
+
|
||||
+ ath79_register_wmac(ee, mac);
|
||||
+}
|
||||
+
|
||||
+MIPS_MACHINE(ATH79_MACH_CPE210, "CPE210", "TP-LINK CPE210/220",
|
||||
+ cpe210_setup);
|
||||
+
|
||||
+MIPS_MACHINE(ATH79_MACH_CPE510, "CPE510", "TP-LINK CPE510/520",
|
||||
cpe510_setup);
|
||||
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
|
||||
index d66bd25fe01544224a69e3f35f020f2e4130c8b3..75083f9b698ba8a438256209a34369eb626a3b3d 100644
|
||||
--- a/target/linux/ar71xx/image/Makefile
|
||||
+++ b/target/linux/ar71xx/image/Makefile
|
||||
@@ -2111,7 +2111,8 @@ $(eval $(call SingleProfile,TPLINK-LZMA,64kraw,TLWR1043V2,tl-wr1043nd-v2,TL-WR10
|
||||
$(eval $(call SingleProfile,TPLINK-LZMA,64kraw,TLWR1043V3,tl-wr1043nd-v3,TL-WR1043ND-v2,ttyS0,115200,0x10430003,1,8M))
|
||||
$(eval $(call SingleProfile,TPLINK-LZMA,64kraw,TLWR2543,tl-wr2543-v1,TL-WR2543N,ttyS0,115200,0x25430001,1,8Mlzma,-v 3.13.99))
|
||||
|
||||
-$(eval $(call SingleProfile,TPLINK-SAFELOADER,64kraw,CPE510,cpe210-220-510-520,CPE510,ttyS0,115200,$$(cpe510_mtdlayout),CPE510))
|
||||
+$(eval $(call SingleProfile,TPLINK-SAFELOADER,64kraw,CPE210_220,cpe210-220,CPE210,ttyS0,115200,$$(cpe510_mtdlayout),CPE510))
|
||||
+$(eval $(call SingleProfile,TPLINK-SAFELOADER,64kraw,CPE510_520,cpe510-520,CPE510,ttyS0,115200,$$(cpe510_mtdlayout),CPE510))
|
||||
|
||||
$(eval $(call SingleProfile,UAPPRO,64k,UAPPRO,ubnt-uap-pro,UAP-PRO,ttyS0,115200,BZ,BZ,ar934x))
|
||||
$(eval $(call SingleProfile,UAPPRO,64k,UBNTUNIFIOUTDOORPLUS,ubnt-unifi-outdoor-plus,UBNT-UOP,ttyS0,115200,BZ,BZ,ar7240))
|
||||
@@ -2175,6 +2176,7 @@ $(eval $(call MultiProfile,TLWR842,TLWR842V1))
|
||||
$(eval $(call MultiProfile,TLWR941,TLWR941NV2 TLWR941NV3 TLWR941NV4))
|
||||
$(eval $(call MultiProfile,TLWR1043,TLWR1043V1 TLWR1043V2 TLWR1043V3))
|
||||
$(eval $(call MultiProfile,TLWDR4300,TLWDR3500V1 TLWDR3600V1 TLWDR4300V1 TLWDR4300V1IL TLWDR4310V1 MW4530RV1))
|
||||
+$(eval $(call MultiProfile,CPE510,CPE210_220 CPE510_520))
|
||||
$(eval $(call MultiProfile,TUBE2H,TUBE2H8M TUBE2H16M))
|
||||
$(eval $(call MultiProfile,UBNT,UBNTAIRROUTER UBNTRS UBNTRSPRO UBNTLSSR71 UBNTBULLETM UBNTROCKETM UBNTROCKETMXW UBNTNANOM UBNTNANOMXW UBNTLOCOXW UBNTUNIFI UBNTUNIFIOUTDOOR UBNTUNIFIOUTDOORPLUS UAPPRO UBNTAIRGW))
|
||||
$(eval $(call MultiProfile,WNR612V2,REALWNR612V2 N150R))
|
||||
diff --git a/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch b/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
|
||||
index d4b417bfb78606ddb84076ad8c927952e65118c2..c83ac2e89324deda3135aab84e8c4f4112ea728d 100644
|
||||
--- a/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
|
||||
+++ b/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/arch/mips/ath79/machtypes.h
|
||||
+++ b/arch/mips/ath79/machtypes.h
|
||||
-@@ -16,22 +16,203 @@
|
||||
+@@ -16,22 +16,204 @@
|
||||
|
||||
enum ath79_mach_type {
|
||||
ATH79_MACH_GENERIC = 0,
|
||||
@@ -26,6 +26,7 @@
|
||||
+ ATH79_MACH_BHU_BXU2000N2_A1, /* BHU BXU2000n-2 A1 */
|
||||
+ ATH79_MACH_CAP4200AG, /* Senao CAP4200AG */
|
||||
+ ATH79_MACH_CARAMBOLA2, /* 8devices Carambola2 */
|
||||
++ ATH79_MACH_CPE210, /* TP-LINK CPE210 */
|
||||
+ ATH79_MACH_CPE510, /* TP-LINK CPE510 */
|
||||
ATH79_MACH_DB120, /* Atheros DB120 reference board */
|
||||
ATH79_MACH_PB44, /* Atheros PB44 reference board */
|
@ -1,555 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Wed, 21 Dec 2016 19:22:56 +0100
|
||||
Subject: firmware-utils: backport tplink-safeloader from LEDE 05abcf518d5e2b7d6526fd7a87a88a268030694a
|
||||
|
||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
|
||||
diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c
|
||||
index 77a894b237281f6211dd1123ead4b5b0f2f58370..016c118787f3b5332b76f65c85930065a569d6b8 100644
|
||||
--- a/tools/firmware-utils/src/tplink-safeloader.c
|
||||
+++ b/tools/firmware-utils/src/tplink-safeloader.c
|
||||
@@ -53,6 +53,8 @@
|
||||
#define ALIGN(x,a) ({ typeof(a) __a = (a); (((x) + __a - 1) & ~(__a - 1)); })
|
||||
|
||||
|
||||
+#define MAX_PARTITIONS 32
|
||||
+
|
||||
/** An image partition table entry */
|
||||
struct image_partition_entry {
|
||||
const char *name;
|
||||
@@ -67,6 +69,16 @@ struct flash_partition_entry {
|
||||
uint32_t size;
|
||||
};
|
||||
|
||||
+/** Firmware layout description */
|
||||
+struct device_info {
|
||||
+ const char *id;
|
||||
+ const char *vendor;
|
||||
+ const char *support_list;
|
||||
+ char support_trail;
|
||||
+ const struct flash_partition_entry partitions[MAX_PARTITIONS+1];
|
||||
+ const char *first_sysupgrade_partition;
|
||||
+ const char *last_sysupgrade_partition;
|
||||
+};
|
||||
|
||||
/** The content of the soft-version structure */
|
||||
struct __attribute__((__packed__)) soft_version {
|
||||
@@ -102,45 +114,225 @@ static const uint8_t md5_salt[16] = {
|
||||
};
|
||||
|
||||
|
||||
-/** Vendor information for CPE210/220/510/520 */
|
||||
-static const char cpe510_vendor[] = "CPE510(TP-LINK|UN|N300-5):1.0\r\n";
|
||||
-
|
||||
-
|
||||
-/**
|
||||
- The flash partition table for CPE210/220/510/520;
|
||||
- it is the same as the one used by the stock images.
|
||||
-*/
|
||||
-static const struct flash_partition_entry cpe510_partitions[] = {
|
||||
- {"fs-uboot", 0x00000, 0x20000},
|
||||
- {"partition-table", 0x20000, 0x02000},
|
||||
- {"default-mac", 0x30000, 0x00020},
|
||||
- {"product-info", 0x31100, 0x00100},
|
||||
- {"signature", 0x32000, 0x00400},
|
||||
- {"os-image", 0x40000, 0x170000},
|
||||
- {"soft-version", 0x1b0000, 0x00100},
|
||||
- {"support-list", 0x1b1000, 0x00400},
|
||||
- {"file-system", 0x1c0000, 0x600000},
|
||||
- {"user-config", 0x7c0000, 0x10000},
|
||||
- {"default-config", 0x7d0000, 0x10000},
|
||||
- {"log", 0x7e0000, 0x10000},
|
||||
- {"radio", 0x7f0000, 0x10000},
|
||||
- {NULL, 0, 0}
|
||||
+/** Firmware layout table */
|
||||
+static struct device_info boards[] = {
|
||||
+ /** Firmware layout for the CPE210/220 */
|
||||
+ {
|
||||
+ .id = "CPE210",
|
||||
+ .vendor = "CPE510(TP-LINK|UN|N300-5):1.0\r\n",
|
||||
+ .support_list =
|
||||
+ "SupportList:\r\n"
|
||||
+ "CPE210(TP-LINK|UN|N300-2):1.0\r\n"
|
||||
+ "CPE210(TP-LINK|UN|N300-2):1.1\r\n"
|
||||
+ "CPE210(TP-LINK|US|N300-2):1.1\r\n"
|
||||
+ "CPE210(TP-LINK|EU|N300-2):1.1\r\n"
|
||||
+ "CPE220(TP-LINK|UN|N300-2):1.1\r\n"
|
||||
+ "CPE220(TP-LINK|US|N300-2):1.1\r\n"
|
||||
+ "CPE220(TP-LINK|EU|N300-2):1.1\r\n",
|
||||
+ .support_trail = '\xff',
|
||||
+
|
||||
+ .partitions = {
|
||||
+ {"fs-uboot", 0x00000, 0x20000},
|
||||
+ {"partition-table", 0x20000, 0x02000},
|
||||
+ {"default-mac", 0x30000, 0x00020},
|
||||
+ {"product-info", 0x31100, 0x00100},
|
||||
+ {"signature", 0x32000, 0x00400},
|
||||
+ {"os-image", 0x40000, 0x170000},
|
||||
+ {"soft-version", 0x1b0000, 0x00100},
|
||||
+ {"support-list", 0x1b1000, 0x00400},
|
||||
+ {"file-system", 0x1c0000, 0x600000},
|
||||
+ {"user-config", 0x7c0000, 0x10000},
|
||||
+ {"default-config", 0x7d0000, 0x10000},
|
||||
+ {"log", 0x7e0000, 0x10000},
|
||||
+ {"radio", 0x7f0000, 0x10000},
|
||||
+ {NULL, 0, 0}
|
||||
+ },
|
||||
+
|
||||
+ .first_sysupgrade_partition = "os-image",
|
||||
+ .last_sysupgrade_partition = "file-system",
|
||||
+ },
|
||||
+
|
||||
+ /** Firmware layout for the CPE510/520 */
|
||||
+ {
|
||||
+ .id = "CPE510",
|
||||
+ .vendor = "CPE510(TP-LINK|UN|N300-5):1.0\r\n",
|
||||
+ .support_list =
|
||||
+ "SupportList:\r\n"
|
||||
+ "CPE510(TP-LINK|UN|N300-5):1.0\r\n"
|
||||
+ "CPE510(TP-LINK|UN|N300-5):1.1\r\n"
|
||||
+ "CPE510(TP-LINK|UN|N300-5):1.1\r\n"
|
||||
+ "CPE510(TP-LINK|US|N300-5):1.1\r\n"
|
||||
+ "CPE510(TP-LINK|EU|N300-5):1.1\r\n"
|
||||
+ "CPE520(TP-LINK|UN|N300-5):1.1\r\n"
|
||||
+ "CPE520(TP-LINK|US|N300-5):1.1\r\n"
|
||||
+ "CPE520(TP-LINK|EU|N300-5):1.1\r\n",
|
||||
+ .support_trail = '\xff',
|
||||
+
|
||||
+ .partitions = {
|
||||
+ {"fs-uboot", 0x00000, 0x20000},
|
||||
+ {"partition-table", 0x20000, 0x02000},
|
||||
+ {"default-mac", 0x30000, 0x00020},
|
||||
+ {"product-info", 0x31100, 0x00100},
|
||||
+ {"signature", 0x32000, 0x00400},
|
||||
+ {"os-image", 0x40000, 0x170000},
|
||||
+ {"soft-version", 0x1b0000, 0x00100},
|
||||
+ {"support-list", 0x1b1000, 0x00400},
|
||||
+ {"file-system", 0x1c0000, 0x600000},
|
||||
+ {"user-config", 0x7c0000, 0x10000},
|
||||
+ {"default-config", 0x7d0000, 0x10000},
|
||||
+ {"log", 0x7e0000, 0x10000},
|
||||
+ {"radio", 0x7f0000, 0x10000},
|
||||
+ {NULL, 0, 0}
|
||||
+ },
|
||||
+
|
||||
+ .first_sysupgrade_partition = "os-image",
|
||||
+ .last_sysupgrade_partition = "file-system",
|
||||
+ },
|
||||
+
|
||||
+ /** Firmware layout for the C2600 */
|
||||
+ {
|
||||
+ .id = "C2600",
|
||||
+ .vendor = "",
|
||||
+ .support_list =
|
||||
+ "SupportList:\r\n"
|
||||
+ "{product_name:Archer C2600,product_ver:1.0.0,special_id:00000000}\r\n",
|
||||
+ .support_trail = '\x00',
|
||||
+
|
||||
+ .partitions = {
|
||||
+ {"SBL1", 0x00000, 0x20000},
|
||||
+ {"MIBIB", 0x20000, 0x20000},
|
||||
+ {"SBL2", 0x40000, 0x20000},
|
||||
+ {"SBL3", 0x60000, 0x30000},
|
||||
+ {"DDRCONFIG", 0x90000, 0x10000},
|
||||
+ {"SSD", 0xa0000, 0x10000},
|
||||
+ {"TZ", 0xb0000, 0x30000},
|
||||
+ {"RPM", 0xe0000, 0x20000},
|
||||
+ {"fs-uboot", 0x100000, 0x70000},
|
||||
+ {"uboot-env", 0x170000, 0x40000},
|
||||
+ {"radio", 0x1b0000, 0x40000},
|
||||
+ {"os-image", 0x1f0000, 0x200000},
|
||||
+ {"file-system", 0x3f0000, 0x1b00000},
|
||||
+ {"default-mac", 0x1ef0000, 0x00200},
|
||||
+ {"pin", 0x1ef0200, 0x00200},
|
||||
+ {"product-info", 0x1ef0400, 0x0fc00},
|
||||
+ {"partition-table", 0x1f00000, 0x10000},
|
||||
+ {"soft-version", 0x1f10000, 0x10000},
|
||||
+ {"support-list", 0x1f20000, 0x10000},
|
||||
+ {"profile", 0x1f30000, 0x10000},
|
||||
+ {"default-config", 0x1f40000, 0x10000},
|
||||
+ {"user-config", 0x1f50000, 0x40000},
|
||||
+ {"qos-db", 0x1f90000, 0x40000},
|
||||
+ {"usb-config", 0x1fd0000, 0x10000},
|
||||
+ {"log", 0x1fe0000, 0x20000},
|
||||
+ {NULL, 0, 0}
|
||||
+ },
|
||||
+
|
||||
+ .first_sysupgrade_partition = "os-image",
|
||||
+ .last_sysupgrade_partition = "file-system"
|
||||
+ },
|
||||
+
|
||||
+ /** Firmware layout for the C9 */
|
||||
+ {
|
||||
+ .id = "ARCHERC9",
|
||||
+ .vendor = "",
|
||||
+ .support_list =
|
||||
+ "SupportList:\n"
|
||||
+ "{product_name:ArcherC9,"
|
||||
+ "product_ver:1.0.0,"
|
||||
+ "special_id:00000000}\n",
|
||||
+ .support_trail = '\x00',
|
||||
+
|
||||
+ .partitions = {
|
||||
+ {"fs-uboot", 0x00000, 0x40000},
|
||||
+ {"os-image", 0x40000, 0x200000},
|
||||
+ {"file-system", 0x240000, 0xc00000},
|
||||
+ {"default-mac", 0xe40000, 0x00200},
|
||||
+ {"pin", 0xe40200, 0x00200},
|
||||
+ {"product-info", 0xe40400, 0x00200},
|
||||
+ {"partition-table", 0xe50000, 0x10000},
|
||||
+ {"soft-version", 0xe60000, 0x00200},
|
||||
+ {"support-list", 0xe61000, 0x0f000},
|
||||
+ {"profile", 0xe70000, 0x10000},
|
||||
+ {"default-config", 0xe80000, 0x10000},
|
||||
+ {"user-config", 0xe90000, 0x50000},
|
||||
+ {"log", 0xee0000, 0x100000},
|
||||
+ {"radio_bk", 0xfe0000, 0x10000},
|
||||
+ {"radio", 0xff0000, 0x10000},
|
||||
+ {NULL, 0, 0}
|
||||
+ },
|
||||
+
|
||||
+ .first_sysupgrade_partition = "os-image",
|
||||
+ .last_sysupgrade_partition = "file-system"
|
||||
+ },
|
||||
+
|
||||
+ /** Firmware layout for the EAP120 */
|
||||
+ {
|
||||
+ .id = "EAP120",
|
||||
+ .vendor = "EAP120(TP-LINK|UN|N300-2):1.0\r\n",
|
||||
+ .support_list =
|
||||
+ "SupportList:\r\n"
|
||||
+ "EAP120(TP-LINK|UN|N300-2):1.0\r\n",
|
||||
+ .support_trail = '\xff',
|
||||
+
|
||||
+ .partitions = {
|
||||
+ {"fs-uboot", 0x00000, 0x20000},
|
||||
+ {"partition-table", 0x20000, 0x02000},
|
||||
+ {"default-mac", 0x30000, 0x00020},
|
||||
+ {"support-list", 0x31000, 0x00100},
|
||||
+ {"product-info", 0x31100, 0x00100},
|
||||
+ {"soft-version", 0x32000, 0x00100},
|
||||
+ {"os-image", 0x40000, 0x180000},
|
||||
+ {"file-system", 0x1c0000, 0x600000},
|
||||
+ {"user-config", 0x7c0000, 0x10000},
|
||||
+ {"backup-config", 0x7d0000, 0x10000},
|
||||
+ {"log", 0x7e0000, 0x10000},
|
||||
+ {"radio", 0x7f0000, 0x10000},
|
||||
+ {NULL, 0, 0}
|
||||
+ },
|
||||
+
|
||||
+ .first_sysupgrade_partition = "os-image",
|
||||
+ .last_sysupgrade_partition = "file-system"
|
||||
+ },
|
||||
+
|
||||
+ /** Firmware layout for the TL-WR1043 v4 */
|
||||
+ {
|
||||
+ .id = "TLWR1043NDV4",
|
||||
+ .vendor = "",
|
||||
+ .support_list =
|
||||
+ "SupportList:\n"
|
||||
+ "{product_name:TL-WR1043ND,product_ver:4.0.0,special_id:45550000}\n",
|
||||
+ .support_trail = '\x00',
|
||||
+
|
||||
+ /**
|
||||
+ We use a bigger os-image partition than the stock images (and thus
|
||||
+ smaller file-system), as our kernel doesn't fit in the stock firmware's
|
||||
+ 1MB os-image.
|
||||
+ */
|
||||
+ .partitions = {
|
||||
+ {"fs-uboot", 0x00000, 0x20000},
|
||||
+ {"os-image", 0x20000, 0x180000},
|
||||
+ {"file-system", 0x1a0000, 0xdb0000},
|
||||
+ {"default-mac", 0xf50000, 0x00200},
|
||||
+ {"pin", 0xf50200, 0x00200},
|
||||
+ {"product-info", 0xf50400, 0x0fc00},
|
||||
+ {"soft-version", 0xf60000, 0x0b000},
|
||||
+ {"support-list", 0xf6b000, 0x04000},
|
||||
+ {"profile", 0xf70000, 0x04000},
|
||||
+ {"default-config", 0xf74000, 0x0b000},
|
||||
+ {"user-config", 0xf80000, 0x40000},
|
||||
+ {"partition-table", 0xfc0000, 0x10000},
|
||||
+ {"log", 0xfd0000, 0x20000},
|
||||
+ {"radio", 0xff0000, 0x10000},
|
||||
+ {NULL, 0, 0}
|
||||
+ },
|
||||
+
|
||||
+ .first_sysupgrade_partition = "os-image",
|
||||
+ .last_sysupgrade_partition = "file-system"
|
||||
+ },
|
||||
+
|
||||
+ {}
|
||||
};
|
||||
|
||||
-/**
|
||||
- The support list for CPE210/220/510/520
|
||||
-*/
|
||||
-static const char cpe510_support_list[] =
|
||||
- "SupportList:\r\n"
|
||||
- "CPE510(TP-LINK|UN|N300-5):1.0\r\n"
|
||||
- "CPE510(TP-LINK|UN|N300-5):1.1\r\n"
|
||||
- "CPE520(TP-LINK|UN|N300-5):1.0\r\n"
|
||||
- "CPE520(TP-LINK|UN|N300-5):1.1\r\n"
|
||||
- "CPE210(TP-LINK|UN|N300-2):1.0\r\n"
|
||||
- "CPE210(TP-LINK|UN|N300-2):1.1\r\n"
|
||||
- "CPE220(TP-LINK|UN|N300-2):1.0\r\n"
|
||||
- "CPE220(TP-LINK|UN|N300-2):1.1\r\n";
|
||||
-
|
||||
#define error(_ret, _errno, _str, ...) \
|
||||
do { \
|
||||
fprintf(stderr, _str ": %s\n", ## __VA_ARGS__, \
|
||||
@@ -240,14 +432,14 @@ static struct image_partition_entry make_soft_version(uint32_t rev) {
|
||||
}
|
||||
|
||||
/** Generates the support-list partition */
|
||||
-static struct image_partition_entry make_support_list(const char *support_list) {
|
||||
- size_t len = strlen(support_list);
|
||||
+static struct image_partition_entry make_support_list(const struct device_info *info) {
|
||||
+ size_t len = strlen(info->support_list);
|
||||
struct image_partition_entry entry = alloc_image_partition("support-list", len + 9);
|
||||
|
||||
put32(entry.data, len);
|
||||
memset(entry.data+4, 0, 4);
|
||||
- memcpy(entry.data+8, support_list, len);
|
||||
- entry.data[len+8] = '\xff';
|
||||
+ memcpy(entry.data+8, info->support_list, len);
|
||||
+ entry.data[len+8] = info->support_trail;
|
||||
|
||||
return entry;
|
||||
}
|
||||
@@ -313,12 +505,22 @@ static struct image_partition_entry read_file(const char *part_name, const char
|
||||
|
||||
I think partition-table must be the first partition in the firmware image.
|
||||
*/
|
||||
-static void put_partitions(uint8_t *buffer, const struct image_partition_entry *parts) {
|
||||
- size_t i;
|
||||
+static void put_partitions(uint8_t *buffer, const struct flash_partition_entry *flash_parts, const struct image_partition_entry *parts) {
|
||||
+ size_t i, j;
|
||||
char *image_pt = (char *)buffer, *end = image_pt + 0x800;
|
||||
|
||||
size_t base = 0x800;
|
||||
for (i = 0; parts[i].name; i++) {
|
||||
+ for (j = 0; flash_parts[j].name; j++) {
|
||||
+ if (!strcmp(flash_parts[j].name, parts[i].name)) {
|
||||
+ if (parts[i].size > flash_parts[j].size)
|
||||
+ error(1, 0, "%s partition too big (more than %u bytes)", flash_parts[j].name, (unsigned)flash_parts[j].size);
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ assert(flash_parts[j].name);
|
||||
+
|
||||
memcpy(buffer + base, parts[i].data, parts[i].size);
|
||||
|
||||
size_t len = end-image_pt;
|
||||
@@ -331,10 +533,6 @@ static void put_partitions(uint8_t *buffer, const struct image_partition_entry *
|
||||
|
||||
base += parts[i].size;
|
||||
}
|
||||
-
|
||||
- image_pt++;
|
||||
-
|
||||
- memset(image_pt, 0xff, end-image_pt);
|
||||
}
|
||||
|
||||
/** Generates and writes the image MD5 checksum */
|
||||
@@ -363,7 +561,7 @@ static void put_md5(uint8_t *md5, uint8_t *buffer, unsigned int len) {
|
||||
1014-1813 Image partition table (2048 bytes, padded with 0xff)
|
||||
1814-xxxx Firmware partitions
|
||||
*/
|
||||
-static void * generate_factory_image(const char *vendor, const struct image_partition_entry *parts, size_t *len) {
|
||||
+static void * generate_factory_image(const struct device_info *info, const struct image_partition_entry *parts, size_t *len) {
|
||||
*len = 0x1814;
|
||||
|
||||
size_t i;
|
||||
@@ -374,14 +572,16 @@ static void * generate_factory_image(const char *vendor, const struct image_part
|
||||
if (!image)
|
||||
error(1, errno, "malloc");
|
||||
|
||||
+ memset(image, 0xff, *len);
|
||||
put32(image, *len);
|
||||
|
||||
- size_t vendor_len = strlen(vendor);
|
||||
- put32(image+0x14, vendor_len);
|
||||
- memcpy(image+0x18, vendor, vendor_len);
|
||||
- memset(image+0x18+vendor_len, 0xff, 4092-vendor_len);
|
||||
+ if (info->vendor) {
|
||||
+ size_t vendor_len = strlen(info->vendor);
|
||||
+ put32(image+0x14, vendor_len);
|
||||
+ memcpy(image+0x18, info->vendor, vendor_len);
|
||||
+ }
|
||||
|
||||
- put_partitions(image + 0x1014, parts);
|
||||
+ put_partitions(image + 0x1014, info->partitions, parts);
|
||||
put_md5(image+0x04, image+0x14, *len-0x14);
|
||||
|
||||
return image;
|
||||
@@ -394,33 +594,39 @@ static void * generate_factory_image(const char *vendor, const struct image_part
|
||||
should be generalized when TP-LINK starts building its safeloader into hardware with
|
||||
different flash layouts.
|
||||
*/
|
||||
-static void * generate_sysupgrade_image(const struct flash_partition_entry *flash_parts, const struct image_partition_entry *image_parts, size_t *len) {
|
||||
- const struct flash_partition_entry *flash_os_image = &flash_parts[5];
|
||||
- const struct flash_partition_entry *flash_soft_version = &flash_parts[6];
|
||||
- const struct flash_partition_entry *flash_support_list = &flash_parts[7];
|
||||
- const struct flash_partition_entry *flash_file_system = &flash_parts[8];
|
||||
-
|
||||
- const struct image_partition_entry *image_os_image = &image_parts[3];
|
||||
- const struct image_partition_entry *image_soft_version = &image_parts[1];
|
||||
- const struct image_partition_entry *image_support_list = &image_parts[2];
|
||||
- const struct image_partition_entry *image_file_system = &image_parts[4];
|
||||
-
|
||||
- assert(strcmp(flash_os_image->name, "os-image") == 0);
|
||||
- assert(strcmp(flash_soft_version->name, "soft-version") == 0);
|
||||
- assert(strcmp(flash_support_list->name, "support-list") == 0);
|
||||
- assert(strcmp(flash_file_system->name, "file-system") == 0);
|
||||
-
|
||||
- assert(strcmp(image_os_image->name, "os-image") == 0);
|
||||
- assert(strcmp(image_soft_version->name, "soft-version") == 0);
|
||||
- assert(strcmp(image_support_list->name, "support-list") == 0);
|
||||
- assert(strcmp(image_file_system->name, "file-system") == 0);
|
||||
-
|
||||
- if (image_os_image->size > flash_os_image->size)
|
||||
- error(1, 0, "kernel image too big (more than %u bytes)", (unsigned)flash_os_image->size);
|
||||
- if (image_file_system->size > flash_file_system->size)
|
||||
- error(1, 0, "rootfs image too big (more than %u bytes)", (unsigned)flash_file_system->size);
|
||||
-
|
||||
- *len = flash_file_system->base - flash_os_image->base + image_file_system->size;
|
||||
+static void * generate_sysupgrade_image(const struct device_info *info, const struct image_partition_entry *image_parts, size_t *len) {
|
||||
+ size_t i, j;
|
||||
+ size_t flash_first_partition_index = 0;
|
||||
+ size_t flash_last_partition_index = 0;
|
||||
+ const struct flash_partition_entry *flash_first_partition = NULL;
|
||||
+ const struct flash_partition_entry *flash_last_partition = NULL;
|
||||
+ const struct image_partition_entry *image_last_partition = NULL;
|
||||
+
|
||||
+ /** Find first and last partitions */
|
||||
+ for (i = 0; info->partitions[i].name; i++) {
|
||||
+ if (!strcmp(info->partitions[i].name, info->first_sysupgrade_partition)) {
|
||||
+ flash_first_partition = &info->partitions[i];
|
||||
+ flash_first_partition_index = i;
|
||||
+ } else if (!strcmp(info->partitions[i].name, info->last_sysupgrade_partition)) {
|
||||
+ flash_last_partition = &info->partitions[i];
|
||||
+ flash_last_partition_index = i;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ assert(flash_first_partition && flash_last_partition);
|
||||
+ assert(flash_first_partition_index < flash_last_partition_index);
|
||||
+
|
||||
+ /** Find last partition from image to calculate needed size */
|
||||
+ for (i = 0; image_parts[i].name; i++) {
|
||||
+ if (!strcmp(image_parts[i].name, info->last_sysupgrade_partition)) {
|
||||
+ image_last_partition = &image_parts[i];
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ assert(image_last_partition);
|
||||
+
|
||||
+ *len = flash_last_partition->base - flash_first_partition->base + image_last_partition->size;
|
||||
|
||||
uint8_t *image = malloc(*len);
|
||||
if (!image)
|
||||
@@ -428,31 +634,44 @@ static void * generate_sysupgrade_image(const struct flash_partition_entry *flas
|
||||
|
||||
memset(image, 0xff, *len);
|
||||
|
||||
- memcpy(image, image_os_image->data, image_os_image->size);
|
||||
- memcpy(image + flash_soft_version->base - flash_os_image->base, image_soft_version->data, image_soft_version->size);
|
||||
- memcpy(image + flash_support_list->base - flash_os_image->base, image_support_list->data, image_support_list->size);
|
||||
- memcpy(image + flash_file_system->base - flash_os_image->base, image_file_system->data, image_file_system->size);
|
||||
+ for (i = flash_first_partition_index; i <= flash_last_partition_index; i++) {
|
||||
+ for (j = 0; image_parts[j].name; j++) {
|
||||
+ if (!strcmp(info->partitions[i].name, image_parts[j].name)) {
|
||||
+ if (image_parts[j].size > info->partitions[i].size)
|
||||
+ error(1, 0, "%s partition too big (more than %u bytes)", info->partitions[i].name, (unsigned)info->partitions[i].size);
|
||||
+ memcpy(image + info->partitions[i].base - flash_first_partition->base, image_parts[j].data, image_parts[j].size);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ assert(image_parts[j].name);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
-
|
||||
-/** Generates an image for CPE210/220/510/520 and writes it to a file */
|
||||
-static void do_cpe510(const char *output, const char *kernel_image, const char *rootfs_image, uint32_t rev, bool add_jffs2_eof, bool sysupgrade) {
|
||||
+/** Generates an image according to a given layout and writes it to a file */
|
||||
+static void build_image(const char *output,
|
||||
+ const char *kernel_image,
|
||||
+ const char *rootfs_image,
|
||||
+ uint32_t rev,
|
||||
+ bool add_jffs2_eof,
|
||||
+ bool sysupgrade,
|
||||
+ const struct device_info *info) {
|
||||
struct image_partition_entry parts[6] = {};
|
||||
|
||||
- parts[0] = make_partition_table(cpe510_partitions);
|
||||
+ parts[0] = make_partition_table(info->partitions);
|
||||
parts[1] = make_soft_version(rev);
|
||||
- parts[2] = make_support_list(cpe510_support_list);
|
||||
+ parts[2] = make_support_list(info);
|
||||
parts[3] = read_file("os-image", kernel_image, false);
|
||||
parts[4] = read_file("file-system", rootfs_image, add_jffs2_eof);
|
||||
|
||||
size_t len;
|
||||
void *image;
|
||||
if (sysupgrade)
|
||||
- image = generate_sysupgrade_image(cpe510_partitions, parts, &len);
|
||||
+ image = generate_sysupgrade_image(info, parts, &len);
|
||||
else
|
||||
- image = generate_factory_image(cpe510_vendor, parts, &len);
|
||||
+ image = generate_factory_image(info, parts, &len);
|
||||
|
||||
FILE *file = fopen(output, "wb");
|
||||
if (!file)
|
||||
@@ -470,7 +689,6 @@ static void do_cpe510(const char *output, const char *kernel_image, const char *
|
||||
free_image_partition(parts[i]);
|
||||
}
|
||||
|
||||
-
|
||||
/** Usage output */
|
||||
static void usage(const char *argv0) {
|
||||
fprintf(stderr,
|
||||
@@ -490,10 +708,22 @@ static void usage(const char *argv0) {
|
||||
};
|
||||
|
||||
|
||||
+static const struct device_info *find_board(const char *id)
|
||||
+{
|
||||
+ struct device_info *board = NULL;
|
||||
+
|
||||
+ for (board = boards; board->id != NULL; board++)
|
||||
+ if (strcasecmp(id, board->id) == 0)
|
||||
+ return board;
|
||||
+
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
int main(int argc, char *argv[]) {
|
||||
const char *board = NULL, *kernel_image = NULL, *rootfs_image = NULL, *output = NULL;
|
||||
bool add_jffs2_eof = false, sysupgrade = false;
|
||||
unsigned rev = 0;
|
||||
+ const struct device_info *info;
|
||||
|
||||
while (true) {
|
||||
int c;
|
||||
@@ -550,10 +780,12 @@ int main(int argc, char *argv[]) {
|
||||
if (!output)
|
||||
error(1, 0, "no output filename has been specified");
|
||||
|
||||
- if (strcmp(board, "CPE510") == 0)
|
||||
- do_cpe510(output, kernel_image, rootfs_image, rev, add_jffs2_eof, sysupgrade);
|
||||
- else
|
||||
+ info = find_board(board);
|
||||
+
|
||||
+ if (info == NULL)
|
||||
error(1, 0, "unsupported board %s", board);
|
||||
|
||||
+ build_image(output, kernel_image, rootfs_image, rev, add_jffs2_eof, sysupgrade, info);
|
||||
+
|
||||
return 0;
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Thu, 9 Jun 2016 05:03:35 +0200
|
||||
Subject: ar71xx: split CPE210 from CPE510 profile
|
||||
|
||||
The CPE210 was still described for the OEM upgrade as compatible,
|
||||
even the wireless configuration isn't compatible anymore between
|
||||
both series (2ghz and 5ghz).
|
||||
Update the CPE210 image profile to use the new profile.
|
||||
|
||||
Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
|
||||
|
||||
Backport of LEDE 824147960569f2c1cd22140c9074c62c3df911a5
|
||||
|
||||
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
|
||||
index 75083f9b698ba8a438256209a34369eb626a3b3d..bb2bb94e04ee8f59db62907ace49952061b411dc 100644
|
||||
--- a/target/linux/ar71xx/image/Makefile
|
||||
+++ b/target/linux/ar71xx/image/Makefile
|
||||
@@ -2111,7 +2111,7 @@ $(eval $(call SingleProfile,TPLINK-LZMA,64kraw,TLWR1043V2,tl-wr1043nd-v2,TL-WR10
|
||||
$(eval $(call SingleProfile,TPLINK-LZMA,64kraw,TLWR1043V3,tl-wr1043nd-v3,TL-WR1043ND-v2,ttyS0,115200,0x10430003,1,8M))
|
||||
$(eval $(call SingleProfile,TPLINK-LZMA,64kraw,TLWR2543,tl-wr2543-v1,TL-WR2543N,ttyS0,115200,0x25430001,1,8Mlzma,-v 3.13.99))
|
||||
|
||||
-$(eval $(call SingleProfile,TPLINK-SAFELOADER,64kraw,CPE210_220,cpe210-220,CPE210,ttyS0,115200,$$(cpe510_mtdlayout),CPE510))
|
||||
+$(eval $(call SingleProfile,TPLINK-SAFELOADER,64kraw,CPE210_220,cpe210-220,CPE210,ttyS0,115200,$$(cpe510_mtdlayout),CPE210))
|
||||
$(eval $(call SingleProfile,TPLINK-SAFELOADER,64kraw,CPE510_520,cpe510-520,CPE510,ttyS0,115200,$$(cpe510_mtdlayout),CPE510))
|
||||
|
||||
$(eval $(call SingleProfile,UAPPRO,64k,UAPPRO,ubnt-uap-pro,UAP-PRO,ttyS0,115200,BZ,BZ,ar934x))
|
@ -1,437 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Mon, 22 Aug 2016 19:14:52 +0200
|
||||
Subject: dropbear: update to LEDE 277f85c21ae0ede4e15e66cbd801b9fb502531df
|
||||
|
||||
Includes a few security updates and enables Curve25519 support.
|
||||
|
||||
The patches 600-allow-blank-root-password.patch and
|
||||
610-skip-default-keys-in-custom-runs.patch are left out for now to avoid
|
||||
allowing password-less root login.
|
||||
|
||||
diff --git a/package/network/services/dropbear/Config.in b/package/network/services/dropbear/Config.in
|
||||
index e2a761034fa64225439db4a18030dee75fb0775c..7c2edd79f23708f9ef01c6a62a54073b0c7a33ed 100644
|
||||
--- a/package/network/services/dropbear/Config.in
|
||||
+++ b/package/network/services/dropbear/Config.in
|
||||
@@ -1,6 +1,15 @@
|
||||
menu "Configuration"
|
||||
depends on PACKAGE_dropbear
|
||||
|
||||
+config DROPBEAR_CURVE25519
|
||||
+ bool "Curve25519 support"
|
||||
+ default y
|
||||
+ help
|
||||
+ This enables the following key exchange algorithm:
|
||||
+ curve25519-sha256@libssh.org
|
||||
+
|
||||
+ Increases binary size by about 13 kB uncompressed (MIPS).
|
||||
+
|
||||
config DROPBEAR_ECC
|
||||
bool "Elliptic curve cryptography (ECC)"
|
||||
default n
|
||||
@@ -12,7 +21,6 @@ config DROPBEAR_ECC
|
||||
ecdh-sha2-nistp256
|
||||
ecdh-sha2-nistp384
|
||||
ecdh-sha2-nistp521
|
||||
- curve25519-sha256@libssh.org
|
||||
|
||||
Public key algorithms:
|
||||
ecdsa-sha2-nistp256
|
||||
@@ -22,6 +30,21 @@ config DROPBEAR_ECC
|
||||
Does not generate ECC host keys by default (ECC key exchange will not be used,
|
||||
only ECC public key auth).
|
||||
|
||||
- Increases binary size by about 36 kB (MIPS).
|
||||
+ Increases binary size by about 23 kB (MIPS).
|
||||
+
|
||||
+config DROPBEAR_UTMP
|
||||
+ bool "Utmp support"
|
||||
+ default n
|
||||
+ depends on BUSYBOX_CONFIG_FEATURE_UTMP
|
||||
+ help
|
||||
+ This enables dropbear utmp support, the file /var/run/utmp is used to
|
||||
+ track who is currently logged in.
|
||||
+
|
||||
+config DROPBEAR_PUTUTLINE
|
||||
+ bool "Pututline support"
|
||||
+ default n
|
||||
+ depends on DROPBEAR_UTMP
|
||||
+ help
|
||||
+ Dropbear will use pututline() to write the utmp structure into the utmp file.
|
||||
|
||||
endmenu
|
||||
diff --git a/package/network/services/dropbear/Makefile b/package/network/services/dropbear/Makefile
|
||||
index 35958d332cd0c9796ba50c433b13a3e24cd4441c..36bcb4ab7b6c57460cd15da1bcc130af62e32bc6 100644
|
||||
--- a/package/network/services/dropbear/Makefile
|
||||
+++ b/package/network/services/dropbear/Makefile
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
-# Copyright (C) 2006-2014 OpenWrt.org
|
||||
+# Copyright (C) 2006-2016 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
@@ -8,14 +8,14 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=dropbear
|
||||
-PKG_VERSION:=2015.67
|
||||
+PKG_VERSION:=2016.74
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
|
||||
PKG_SOURCE_URL:= \
|
||||
http://matt.ucc.asn.au/dropbear/releases/ \
|
||||
https://dropbear.nl/mirror/releases/
|
||||
-PKG_MD5SUM:=e967e320344cd4bfebe321e3ab8514d6
|
||||
+PKG_MD5SUM:=9ad0172731e0f16623937804643b5bd8
|
||||
|
||||
PKG_LICENSE:=MIT
|
||||
PKG_LICENSE_FILES:=LICENSE libtomcrypt/LICENSE libtommath/LICENSE
|
||||
@@ -23,10 +23,14 @@ PKG_LICENSE_FILES:=LICENSE libtomcrypt/LICENSE libtommath/LICENSE
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
|
||||
-PKG_CONFIG_DEPENDS:=CONFIG_DROPBEAR_ECC
|
||||
+PKG_CONFIG_DEPENDS:=CONFIG_TARGET_INIT_PATH CONFIG_DROPBEAR_ECC CONFIG_DROPBEAR_CURVE25519
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
+ifneq ($(DUMP),1)
|
||||
+ STAMP_CONFIGURED:=$(strip $(STAMP_CONFIGURED))_$(shell $(SH_FUNC) echo $(CONFIG_TARGET_INIT_PATH) | md5s)
|
||||
+endif
|
||||
+
|
||||
define Package/dropbear/Default
|
||||
URL:=http://matt.ucc.asn.au/dropbear/
|
||||
endef
|
||||
@@ -48,7 +52,6 @@ endef
|
||||
|
||||
define Package/dropbear/conffiles
|
||||
/etc/dropbear/dropbear_rsa_host_key
|
||||
-/etc/dropbear/dropbear_dss_host_key
|
||||
/etc/config/dropbear
|
||||
endef
|
||||
|
||||
@@ -65,25 +68,35 @@ CONFIGURE_ARGS += \
|
||||
--enable-syslog \
|
||||
$(if $(CONFIG_SHADOW_PASSWORDS),,--disable-shadow) \
|
||||
--disable-lastlog \
|
||||
- --disable-utmp \
|
||||
--disable-utmpx \
|
||||
+ $(if $(CONFIG_DROPBEAR_UTMP),,--disable-utmp) \
|
||||
--disable-wtmp \
|
||||
--disable-wtmpx \
|
||||
--disable-loginfunc \
|
||||
- --disable-pututline \
|
||||
+ $(if $(CONFIG_DROPBEAR_PUTUTLINE),,--disable-pututline) \
|
||||
--disable-pututxline \
|
||||
--disable-zlib \
|
||||
--enable-bundled-libtom
|
||||
|
||||
-TARGET_CFLAGS += -DARGTYPE=3 -ffunction-sections -fdata-sections
|
||||
+TARGET_CFLAGS += -DDEFAULT_PATH=\\\"$(CONFIG_TARGET_INIT_PATH)\\\" -DARGTYPE=3 -ffunction-sections -fdata-sections
|
||||
TARGET_LDFLAGS += -Wl,--gc-sections
|
||||
|
||||
define Build/Configure
|
||||
$(Build/Configure/Default)
|
||||
|
||||
+ $(SED) 's,^#define DEFAULT_PATH .*$$$$,#define DEFAULT_PATH "$(CONFIG_TARGET_INIT_PATH)",g' \
|
||||
+ $(PKG_BUILD_DIR)/options.h
|
||||
+
|
||||
+ awk 'BEGIN { rc = 1 } \
|
||||
+ /'DROPBEAR_CURVE25519'/ { $$$$0 = "$(if $(CONFIG_DROPBEAR_CURVE25519),,// )#define 'DROPBEAR_CURVE25519'"; rc = 0 } \
|
||||
+ { print } \
|
||||
+ END { exit(rc) }' $(PKG_BUILD_DIR)/options.h \
|
||||
+ >$(PKG_BUILD_DIR)/options.h.new && \
|
||||
+ mv $(PKG_BUILD_DIR)/options.h.new $(PKG_BUILD_DIR)/options.h
|
||||
+
|
||||
# Enforce that all replacements are made, otherwise options.h has changed
|
||||
# format and this logic is broken.
|
||||
- for OPTION in DROPBEAR_ECDSA DROPBEAR_ECDH DROPBEAR_CURVE25519; do \
|
||||
+ for OPTION in DROPBEAR_ECDSA DROPBEAR_ECDH; do \
|
||||
awk 'BEGIN { rc = 1 } \
|
||||
/'$$$$OPTION'/ { $$$$0 = "$(if $(CONFIG_DROPBEAR_ECC),,// )#define '$$$$OPTION'"; rc = 0 } \
|
||||
{ print } \
|
||||
@@ -91,6 +104,9 @@ define Build/Configure
|
||||
>$(PKG_BUILD_DIR)/options.h.new && \
|
||||
mv $(PKG_BUILD_DIR)/options.h.new $(PKG_BUILD_DIR)/options.h || exit 1; \
|
||||
done
|
||||
+
|
||||
+ # Enforce rebuild of svr-chansession.c
|
||||
+ rm -f $(PKG_BUILD_DIR)/svr-chansession.o
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
@@ -118,7 +134,6 @@ define Package/dropbear/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib/opkg/info
|
||||
$(INSTALL_DIR) $(1)/etc/dropbear
|
||||
touch $(1)/etc/dropbear/dropbear_rsa_host_key
|
||||
- touch $(1)/etc/dropbear/dropbear_dss_host_key
|
||||
endef
|
||||
|
||||
define Package/dropbearconvert/install
|
||||
diff --git a/package/network/services/dropbear/files/dropbear.init b/package/network/services/dropbear/files/dropbear.init
|
||||
index 6de0142728dfa127652ecceef1d25080069d800a..1653efbdb38b1037c3630595b903c839887a4e52 100755
|
||||
--- a/package/network/services/dropbear/files/dropbear.init
|
||||
+++ b/package/network/services/dropbear/files/dropbear.init
|
||||
@@ -37,7 +37,6 @@ validate_section_dropbear()
|
||||
'RootPasswordAuth:bool:1' \
|
||||
'RootLogin:bool:1' \
|
||||
'rsakeyfile:file' \
|
||||
- 'dsskeyfile:file' \
|
||||
'BannerFile:file' \
|
||||
'Port:list(port):22' \
|
||||
'SSHKeepAlive:uinteger:300' \
|
||||
@@ -49,7 +48,7 @@ dropbear_instance()
|
||||
{
|
||||
local PasswordAuth enable Interface GatewayPorts \
|
||||
RootPasswordAuth RootLogin rsakeyfile \
|
||||
- dsskeyfile BannerFile Port SSHKeepAlive IdleTimeout \
|
||||
+ BannerFile Port SSHKeepAlive IdleTimeout \
|
||||
mdns ipaddrs
|
||||
|
||||
validate_section_dropbear "${1}" || {
|
||||
@@ -75,18 +74,18 @@ dropbear_instance()
|
||||
[ "${RootPasswordAuth}" -eq 0 ] && procd_append_param command -g
|
||||
[ "${RootLogin}" -eq 0 ] && procd_append_param command -w
|
||||
[ -n "${rsakeyfile}" ] && procd_append_param command -r "${rsakeyfile}"
|
||||
- [ -n "${dsskeyfile}" ] && procd_append_param command -d "${dsskeyfile}"
|
||||
[ -n "${BannerFile}" ] && procd_append_param command -b "${BannerFile}"
|
||||
append_ports "${ipaddrs}" "${Port}"
|
||||
[ "${IdleTimeout}" -ne 0 ] && procd_append_param command -I "${IdleTimeout}"
|
||||
[ "${SSHKeepAlive}" -ne 0 ] && procd_append_param command -K "${SSHKeepAlive}"
|
||||
[ "${mdns}" -ne 0 ] && procd_add_mdns "ssh" "tcp" "$Port" "daemon=dropbear"
|
||||
+ procd_set_param respawn
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
keygen()
|
||||
{
|
||||
- for keytype in rsa dss; do
|
||||
+ for keytype in rsa; do
|
||||
# check for keys
|
||||
key=dropbear/dropbear_${keytype}_host_key
|
||||
[ -f /tmp/$key -o -s /etc/$key ] || {
|
||||
@@ -107,10 +106,15 @@ keygen()
|
||||
chmod 0700 /etc/dropbear
|
||||
}
|
||||
|
||||
+load_interfaces()
|
||||
+{
|
||||
+ config_get interface "$1" Interface
|
||||
+ interfaces=" ${interface} ${interfaces}"
|
||||
+}
|
||||
+
|
||||
start_service()
|
||||
{
|
||||
- [ -s /etc/dropbear/dropbear_rsa_host_key -a \
|
||||
- -s /etc/dropbear/dropbear_dss_host_key ] || keygen
|
||||
+ [ -s /etc/dropbear/dropbear_rsa_host_key ] || keygen
|
||||
|
||||
. /lib/functions.sh
|
||||
. /lib/functions/network.sh
|
||||
@@ -121,7 +125,19 @@ start_service()
|
||||
|
||||
service_triggers()
|
||||
{
|
||||
- procd_add_reload_trigger "dropbear"
|
||||
+ local interfaces
|
||||
+
|
||||
+ procd_add_config_trigger "config.change" "dropbear" /etc/init.d/dropbear reload
|
||||
+
|
||||
+ config_load "${NAME}"
|
||||
+ config_foreach load_interfaces dropbear
|
||||
+
|
||||
+ [ -n "${interfaces}" ] & {
|
||||
+ for n in $interfaces ; do
|
||||
+ procd_add_interface_trigger "interface.*" $n /etc/init.d/dropbear reload
|
||||
+ done
|
||||
+ }
|
||||
+
|
||||
procd_add_validation validate_section_dropbear
|
||||
}
|
||||
|
||||
diff --git a/package/network/services/dropbear/patches/100-pubkey_path.patch b/package/network/services/dropbear/patches/100-pubkey_path.patch
|
||||
index 456874b730272f157bd3f4b2e9f65e14eda49b0b..41fdc1adab96cf9efffa8593000336c504fdf6fb 100644
|
||||
--- a/package/network/services/dropbear/patches/100-pubkey_path.patch
|
||||
+++ b/package/network/services/dropbear/patches/100-pubkey_path.patch
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/svr-authpubkey.c
|
||||
+++ b/svr-authpubkey.c
|
||||
-@@ -208,17 +208,21 @@ static int checkpubkey(unsigned char* al
|
||||
+@@ -218,17 +218,21 @@ static int checkpubkey(char* algo, unsig
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
if (authfile == NULL) {
|
||||
goto out;
|
||||
}
|
||||
-@@ -371,26 +375,35 @@ static int checkpubkeyperms() {
|
||||
+@@ -381,26 +385,35 @@ static int checkpubkeyperms() {
|
||||
goto out;
|
||||
}
|
||||
|
||||
diff --git a/package/network/services/dropbear/patches/110-change_user.patch b/package/network/services/dropbear/patches/110-change_user.patch
|
||||
index 7982af631539e351d3d46f50541115f9311612db..4b5c1cb51bb16a7229c03b6298796769e5752f6b 100644
|
||||
--- a/package/network/services/dropbear/patches/110-change_user.patch
|
||||
+++ b/package/network/services/dropbear/patches/110-change_user.patch
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/svr-chansession.c
|
||||
+++ b/svr-chansession.c
|
||||
-@@ -920,12 +920,12 @@ static void execchild(void *user_data) {
|
||||
+@@ -922,12 +922,12 @@ static void execchild(void *user_data) {
|
||||
/* We can only change uid/gid as root ... */
|
||||
if (getuid() == 0) {
|
||||
|
||||
diff --git a/package/network/services/dropbear/patches/120-openwrt_options.patch b/package/network/services/dropbear/patches/120-openwrt_options.patch
|
||||
index 48dae73b1f7bcb052172f0a8d22d06203c80f993..f16aaf001eee11811be81fa1db399cf117e66595 100644
|
||||
--- a/package/network/services/dropbear/patches/120-openwrt_options.patch
|
||||
+++ b/package/network/services/dropbear/patches/120-openwrt_options.patch
|
||||
@@ -18,7 +18,28 @@
|
||||
|
||||
/* Whether to support "-c" and "-m" flags to choose ciphers/MACs at runtime */
|
||||
#define ENABLE_USER_ALGO_LIST
|
||||
-@@ -126,9 +126,9 @@ much traffic. */
|
||||
+@@ -91,16 +91,16 @@ much traffic. */
|
||||
+ * Including multiple keysize variants the same cipher
|
||||
+ * (eg AES256 as well as AES128) will result in a minimal size increase.*/
|
||||
+ #define DROPBEAR_AES128
|
||||
+-#define DROPBEAR_3DES
|
||||
++/*#define DROPBEAR_3DES*/
|
||||
+ #define DROPBEAR_AES256
|
||||
+ /* Compiling in Blowfish will add ~6kB to runtime heap memory usage */
|
||||
+ /*#define DROPBEAR_BLOWFISH*/
|
||||
+-#define DROPBEAR_TWOFISH256
|
||||
+-#define DROPBEAR_TWOFISH128
|
||||
++/*#define DROPBEAR_TWOFISH256*/
|
||||
++/*#define DROPBEAR_TWOFISH128*/
|
||||
+
|
||||
+ /* Enable CBC mode for ciphers. This has security issues though
|
||||
+ * is the most compatible with older SSH implementations */
|
||||
+-#define DROPBEAR_ENABLE_CBC_MODE
|
||||
++/*#define DROPBEAR_ENABLE_CBC_MODE*/
|
||||
+
|
||||
+ /* Enable "Counter Mode" for ciphers. This is more secure than normal
|
||||
+ * CBC mode against certain attacks. It is recommended for security
|
||||
+@@ -131,9 +131,9 @@ If you test it please contact the Dropbe
|
||||
* If you disable MD5, Dropbear will fall back to SHA1 fingerprints,
|
||||
* which are not the standard form. */
|
||||
#define DROPBEAR_SHA1_HMAC
|
||||
@@ -31,7 +52,16 @@
|
||||
#define DROPBEAR_MD5_HMAC
|
||||
|
||||
/* You can also disable integrity. Don't bother disabling this if you're
|
||||
-@@ -184,7 +184,7 @@ much traffic. */
|
||||
+@@ -146,7 +146,7 @@ If you test it please contact the Dropbe
|
||||
+ * Removing either of these won't save very much space.
|
||||
+ * SSH2 RFC Draft requires dss, recommends rsa */
|
||||
+ #define DROPBEAR_RSA
|
||||
+-#define DROPBEAR_DSS
|
||||
++/*#define DROPBEAR_DSS*/
|
||||
+ /* ECDSA is significantly faster than RSA or DSS. Compiling in ECC
|
||||
+ * code (either ECDSA or ECDH) increases binary size - around 30kB
|
||||
+ * on x86-64 */
|
||||
+@@ -194,7 +194,7 @@ If you test it please contact the Dropbe
|
||||
|
||||
/* Whether to print the message of the day (MOTD). This doesn't add much code
|
||||
* size */
|
||||
@@ -40,7 +70,7 @@
|
||||
|
||||
/* The MOTD file path */
|
||||
#ifndef MOTD_FILENAME
|
||||
-@@ -226,7 +226,7 @@ much traffic. */
|
||||
+@@ -242,7 +242,7 @@ Homedir is prepended unless path begins
|
||||
* note that it will be provided for all "hidden" client-interactive
|
||||
* style prompts - if you want something more sophisticated, use
|
||||
* SSH_ASKPASS instead. Comment out this var to remove this functionality.*/
|
||||
diff --git a/package/network/services/dropbear/patches/130-ssh_ignore_o_and_x_args.patch b/package/network/services/dropbear/patches/130-ssh_ignore_o_and_x_args.patch
|
||||
deleted file mode 100644
|
||||
index edb29093aece5423554ccd406e34b41466c25511..0000000000000000000000000000000000000000
|
||||
--- a/package/network/services/dropbear/patches/130-ssh_ignore_o_and_x_args.patch
|
||||
+++ /dev/null
|
||||
@@ -1,21 +0,0 @@
|
||||
---- a/cli-runopts.c
|
||||
-+++ b/cli-runopts.c
|
||||
-@@ -315,6 +315,10 @@ void cli_getopts(int argc, char ** argv)
|
||||
- debug_trace = 1;
|
||||
- break;
|
||||
- #endif
|
||||
-+ case 'o':
|
||||
-+ next = &dummy;
|
||||
-+ case 'x':
|
||||
-+ break;
|
||||
- case 'F':
|
||||
- case 'e':
|
||||
- #ifndef ENABLE_USER_ALGO_LIST
|
||||
-@@ -332,7 +336,6 @@ void cli_getopts(int argc, char ** argv)
|
||||
- print_version();
|
||||
- exit(EXIT_SUCCESS);
|
||||
- break;
|
||||
-- case 'o':
|
||||
- case 'b':
|
||||
- next = &dummy;
|
||||
- default:
|
||||
diff --git a/package/network/services/dropbear/patches/130-ssh_ignore_x_args.patch b/package/network/services/dropbear/patches/130-ssh_ignore_x_args.patch
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..ab09c2f3dc3a253fd18acae8d7d3b4b0f668e3dd
|
||||
--- /dev/null
|
||||
+++ b/package/network/services/dropbear/patches/130-ssh_ignore_x_args.patch
|
||||
@@ -0,0 +1,11 @@
|
||||
+--- a/cli-runopts.c
|
||||
++++ b/cli-runopts.c
|
||||
+@@ -296,6 +296,8 @@ void cli_getopts(int argc, char ** argv)
|
||||
+ debug_trace = 1;
|
||||
+ break;
|
||||
+ #endif
|
||||
++ case 'x':
|
||||
++ break;
|
||||
+ case 'F':
|
||||
+ case 'e':
|
||||
+ #ifndef ENABLE_USER_ALGO_LIST
|
||||
diff --git a/package/network/services/dropbear/patches/140-disable_assert.patch b/package/network/services/dropbear/patches/140-disable_assert.patch
|
||||
index 0717228ef3de0576967b3824ca9709f95a326f61..78b54acfa0f52a4abbae497ed57a04cca7368c41 100644
|
||||
--- a/package/network/services/dropbear/patches/140-disable_assert.patch
|
||||
+++ b/package/network/services/dropbear/patches/140-disable_assert.patch
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/dbutil.h
|
||||
+++ b/dbutil.h
|
||||
-@@ -101,7 +101,11 @@ int m_str_to_uint(const char* str, unsig
|
||||
+@@ -78,7 +78,11 @@ int m_str_to_uint(const char* str, unsig
|
||||
#define DEF_MP_INT(X) mp_int X = {0, 0, 0, NULL}
|
||||
|
||||
/* Dropbear assertion */
|
||||
diff --git a/package/network/services/dropbear/patches/150-dbconvert_standalone.patch b/package/network/services/dropbear/patches/150-dbconvert_standalone.patch
|
||||
index 367dc2c68122f382273464fc7bf570fde18386ab..ccc2cb792598de77b4db6aa7b7b46e8eb7bf93a5 100644
|
||||
--- a/package/network/services/dropbear/patches/150-dbconvert_standalone.patch
|
||||
+++ b/package/network/services/dropbear/patches/150-dbconvert_standalone.patch
|
||||
@@ -1,8 +1,8 @@
|
||||
--- a/options.h
|
||||
+++ b/options.h
|
||||
@@ -5,6 +5,11 @@
|
||||
- #ifndef _OPTIONS_H_
|
||||
- #define _OPTIONS_H_
|
||||
+ #ifndef DROPBEAR_OPTIONS_H_
|
||||
+ #define DROPBEAR_OPTIONS_H_
|
||||
|
||||
+#if !defined(DROPBEAR_CLIENT) && !defined(DROPBEAR_SERVER)
|
||||
+#define DROPBEAR_SERVER
|
||||
diff --git a/package/network/services/dropbear/patches/500-set-default-path.patch b/package/network/services/dropbear/patches/500-set-default-path.patch
|
||||
index e2add9415fd4e7884a007ce7337ee8026bcc62a7..da6b9ae0ce0ae6a270f8c7bc6152cf09efbee15d 100644
|
||||
--- a/package/network/services/dropbear/patches/500-set-default-path.patch
|
||||
+++ b/package/network/services/dropbear/patches/500-set-default-path.patch
|
||||
@@ -1,11 +1,12 @@
|
||||
--- a/options.h
|
||||
+++ b/options.h
|
||||
-@@ -336,7 +336,7 @@ be overridden at runtime with -I. 0 disa
|
||||
+@@ -352,7 +352,9 @@ be overridden at runtime with -I. 0 disa
|
||||
#define DEFAULT_IDLE_TIMEOUT 0
|
||||
|
||||
/* The default path. This will often get replaced by the shell */
|
||||
--#define DEFAULT_PATH "/usr/bin:/bin"
|
||||
-+#define DEFAULT_PATH "/bin:/sbin:/usr/bin:/usr/sbin"
|
||||
++#ifndef DEFAULT_PATH
|
||||
+ #define DEFAULT_PATH "/usr/bin:/bin"
|
||||
++#endif
|
||||
|
||||
/* Some other defines (that mostly should be left alone) are defined
|
||||
* in sysoptions.h */
|
@ -1,567 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Mon, 22 Aug 2016 23:55:22 +0200
|
||||
Subject: ar71xx: Added support for TL-WA801NDv3
|
||||
|
||||
Signed-off-by: Tiziano Bacocco <tizbac2@gmail.com>
|
||||
|
||||
Backport of OpenWrt r48705
|
||||
|
||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
index 6c3ecf54dccd111231d93e539346f7839252794c..027a671215e5acd70cee06620c6648506ad6be47 100755
|
||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
|
||||
@@ -377,6 +377,7 @@ wp543)
|
||||
ucidef_set_interface_lan "eth0"
|
||||
;;
|
||||
|
||||
+tl-wa801nd-v3 |\
|
||||
dir-505-a1)
|
||||
ucidef_set_interface_lan "eth1"
|
||||
;;
|
||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
index 0d8ccd21c3f552b7ae7aff6905a08ff6a4fdadf7..5928439f3ae253fc15eeb2ac30451ff467411e88 100755
|
||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||||
@@ -838,6 +838,9 @@ ar71xx_board_detect() {
|
||||
*"TL-WA801ND v2")
|
||||
name="tl-wa801nd-v2"
|
||||
;;
|
||||
+ *"TL-WA801ND v3")
|
||||
+ name="tl-wa801nd-v3"
|
||||
+ ;;
|
||||
*TL-WA901ND)
|
||||
name="tl-wa901nd"
|
||||
;;
|
||||
diff --git a/target/linux/ar71xx/config-3.18 b/target/linux/ar71xx/config-3.18
|
||||
index d4d92738d0ab010e1d43ebed0baef34fd9bc3f9d..d7cbe2e79af31a0ff88d946323e237f3215620a0 100644
|
||||
--- a/target/linux/ar71xx/config-3.18
|
||||
+++ b/target/linux/ar71xx/config-3.18
|
||||
@@ -120,6 +120,7 @@ CONFIG_ATH79_MACH_TL_MR3020=y
|
||||
CONFIG_ATH79_MACH_TL_MR3X20=y
|
||||
CONFIG_ATH79_MACH_TL_WA701ND_V2=y
|
||||
CONFIG_ATH79_MACH_TL_WA7210N_V2=y
|
||||
+CONFIG_ATH79_MACH_TL_WA801ND_V3=y
|
||||
CONFIG_ATH79_MACH_TL_WA830RE_V2=y
|
||||
CONFIG_ATH79_MACH_TL_WA901ND=y
|
||||
CONFIG_ATH79_MACH_TL_WA901ND_V2=y
|
||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wa801nd-v3.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wa801nd-v3.c
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..39cdb10ee340650bc69e4f6054b06a4ae7421e57
|
||||
--- /dev/null
|
||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wa801nd-v3.c
|
||||
@@ -0,0 +1,136 @@
|
||||
+/*
|
||||
+ * TP-LINK TL-WA801ND v3 adapted from TP-LINK TL-WR841N/ND v9
|
||||
+ *
|
||||
+ * Copyright (C) 2014 Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
+ * Copyright (C) 2016 Tiziano Bacocco <tizbac2@gmail.com>
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License version 2 as published
|
||||
+ * by the Free Software Foundation.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/gpio.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+
|
||||
+#include <asm/mach-ath79/ath79.h>
|
||||
+#include <asm/mach-ath79/ar71xx_regs.h>
|
||||
+
|
||||
+#include "common.h"
|
||||
+#include "dev-eth.h"
|
||||
+#include "dev-gpio-buttons.h"
|
||||
+#include "dev-leds-gpio.h"
|
||||
+#include "dev-m25p80.h"
|
||||
+#include "dev-wmac.h"
|
||||
+#include "machtypes.h"
|
||||
+
|
||||
+#define TL_WA801NDV3_GPIO_LED_WLAN 12
|
||||
+#define TL_WA801NDV3_GPIO_LED_QSS 13
|
||||
+#define TL_WA801NDV3_GPIO_LED_SECURITY_RED 11
|
||||
+#define TL_WA801NDV3_GPIO_LED_SECURITY_GREEN 15
|
||||
+#define TL_WA801NDV3_GPIO_LED_LAN 3
|
||||
+
|
||||
+#define TL_WA801NDV3_GPIO_BTN_RESET 2
|
||||
+#define TL_WA801NDV3_GPIO_BTN_WIFI 1
|
||||
+
|
||||
+#define TL_WA801NDV3_KEYS_POLL_INTERVAL 20 /* msecs */
|
||||
+#define TL_WA801NDV3_KEYS_DEBOUNCE_INTERVAL (3 * TL_WA801NDV3_KEYS_POLL_INTERVAL)
|
||||
+
|
||||
+static const char *tl_wa801n_v3_part_probes[] = {
|
||||
+ "tp-link",
|
||||
+ NULL,
|
||||
+};
|
||||
+
|
||||
+static struct flash_platform_data tl_wa801n_v3_flash_data = {
|
||||
+ .part_probes = tl_wa801n_v3_part_probes,
|
||||
+};
|
||||
+
|
||||
+static struct gpio_led tl_wa801n_v3_leds_gpio[] __initdata = {
|
||||
+ {
|
||||
+ .name = "tp-link:green:qss",
|
||||
+ .gpio = TL_WA801NDV3_GPIO_LED_QSS,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
+ .name = "tp-link:green:lan",
|
||||
+ .gpio = TL_WA801NDV3_GPIO_LED_LAN,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
+ .name = "tp-link:green:wlan",
|
||||
+ .gpio = TL_WA801NDV3_GPIO_LED_WLAN,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
+ .name = "tp-link:red:security",
|
||||
+ .gpio = TL_WA801NDV3_GPIO_LED_SECURITY_RED,
|
||||
+ .active_low = 0,
|
||||
+ }, {
|
||||
+ .name = "tp-link:green:security",
|
||||
+ .gpio = TL_WA801NDV3_GPIO_LED_SECURITY_GREEN,
|
||||
+ .active_low = 0,
|
||||
+ }
|
||||
+
|
||||
+};
|
||||
+
|
||||
+static struct gpio_keys_button tl_wa801n_v3_gpio_keys[] __initdata = {
|
||||
+ {
|
||||
+ .desc = "Reset button",
|
||||
+ .type = EV_KEY,
|
||||
+ .code = KEY_RESTART,
|
||||
+ .debounce_interval = TL_WA801NDV3_KEYS_DEBOUNCE_INTERVAL,
|
||||
+ .gpio = TL_WA801NDV3_GPIO_BTN_RESET,
|
||||
+ .active_low = 1,
|
||||
+ }, {
|
||||
+ .desc = "WIFI button",
|
||||
+ .type = EV_KEY,
|
||||
+ .code = KEY_RFKILL,
|
||||
+ .debounce_interval = TL_WA801NDV3_KEYS_DEBOUNCE_INTERVAL,
|
||||
+ .gpio = TL_WA801NDV3_GPIO_BTN_WIFI,
|
||||
+ .active_low = 1,
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+
|
||||
+static void __init tl_ap143_setup(void)
|
||||
+{
|
||||
+ u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
|
||||
+ u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
|
||||
+ u8 tmpmac[ETH_ALEN];
|
||||
+
|
||||
+ ath79_register_m25p80(&tl_wa801n_v3_flash_data);
|
||||
+
|
||||
+ ath79_setup_ar933x_phy4_switch(false, false);
|
||||
+
|
||||
+ ath79_register_mdio(0, 0x0);
|
||||
+
|
||||
+ /* LAN */
|
||||
+ ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII;
|
||||
+ ath79_eth1_data.duplex = DUPLEX_FULL;
|
||||
+ ath79_switch_data.phy_poll_mask |= BIT(4);
|
||||
+ ath79_init_mac(ath79_eth1_data.mac_addr, mac, 0);
|
||||
+ ath79_register_eth(1);
|
||||
+
|
||||
+ /* WAN */
|
||||
+ ath79_switch_data.phy4_mii_en = 1;
|
||||
+ ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
|
||||
+ ath79_eth0_data.duplex = DUPLEX_FULL;
|
||||
+ ath79_eth0_data.speed = SPEED_100;
|
||||
+ ath79_eth0_data.phy_mask = BIT(4);
|
||||
+ ath79_init_mac(ath79_eth0_data.mac_addr, mac, 1);
|
||||
+ ath79_register_eth(0);
|
||||
+
|
||||
+ ath79_init_mac(tmpmac, mac, 0);
|
||||
+ ath79_register_wmac(ee, tmpmac);
|
||||
+}
|
||||
+
|
||||
+static void __init tl_wa801n_v3_setup(void)
|
||||
+{
|
||||
+ tl_ap143_setup();
|
||||
+
|
||||
+ ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wa801n_v3_leds_gpio),
|
||||
+ tl_wa801n_v3_leds_gpio);
|
||||
+
|
||||
+ ath79_register_gpio_keys_polled(1, TL_WA801NDV3_KEYS_POLL_INTERVAL,
|
||||
+ ARRAY_SIZE(tl_wa801n_v3_gpio_keys),
|
||||
+ tl_wa801n_v3_gpio_keys);
|
||||
+}
|
||||
+
|
||||
+MIPS_MACHINE(ATH79_MACH_TL_WA801ND_V3, "TL-WA801ND-v3", "TP-LINK TL-WA801ND v3",
|
||||
+ tl_wa801n_v3_setup);
|
||||
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
|
||||
index bb2bb94e04ee8f59db62907ace49952061b411dc..868a5021acb49878359497c90509de07faa3ca49 100644
|
||||
--- a/target/linux/ar71xx/image/Makefile
|
||||
+++ b/target/linux/ar71xx/image/Makefile
|
||||
@@ -691,6 +691,13 @@ define Device/tl-wa801nd-v2
|
||||
TPLINK_HWID := 0x08010002
|
||||
endef
|
||||
|
||||
+define Device/tl-wa801nd-v3
|
||||
+ $(Device/tplink-4mlzma)
|
||||
+ BOARDNAME := TL-WA801ND-v3
|
||||
+ DEVICE_PROFILE := TLWA801
|
||||
+ TPLINK_HWID := 0x08010003
|
||||
+endef
|
||||
+
|
||||
define Device/tl-wa830re-v2
|
||||
$(Device/tplink-4mlzma)
|
||||
BOARDNAME := TL-WA830RE-v2
|
||||
@@ -711,7 +718,7 @@ define Device/tl-wa860re-v1
|
||||
DEVICE_PROFILE := TLWA860
|
||||
TPLINK_HWID := 0x08600001
|
||||
endef
|
||||
-TARGET_DEVICES += tl-wa801nd-v2 tl-wa830re-v2 tl-wa850re-v1 tl-wa860re-v1
|
||||
+TARGET_DEVICES += tl-wa801nd-v2 tl-wa801nd-v3 tl-wa830re-v2 tl-wa850re-v1 tl-wa860re-v1
|
||||
|
||||
define Device/tl-wa901nd-v3
|
||||
$(Device/tplink-4mlzma)
|
||||
diff --git a/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch b/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
|
||||
index c83ac2e89324deda3135aab84e8c4f4112ea728d..d23f0cf33e50da891e7135861f1defda047ff2c8 100644
|
||||
--- a/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
|
||||
+++ b/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/arch/mips/ath79/machtypes.h
|
||||
+++ b/arch/mips/ath79/machtypes.h
|
||||
-@@ -16,22 +16,204 @@
|
||||
+@@ -16,22 +16,205 @@
|
||||
|
||||
enum ath79_mach_type {
|
||||
ATH79_MACH_GENERIC = 0,
|
||||
@@ -127,6 +127,7 @@
|
||||
+ ATH79_MACH_TL_WA850RE, /* TP-LINK TL-WA850RE */
|
||||
+ ATH79_MACH_TL_WA860RE, /* TP-LINK TL-WA860RE */
|
||||
+ ATH79_MACH_TL_WA801ND_V2, /* TP-LINK TL-WA801ND v2 */
|
||||
++ ATH79_MACH_TL_WA801ND_V3, /* TP-LINK TL-WA801ND v3 */
|
||||
+ ATH79_MACH_TL_WA830RE_V2, /* TP-LINK TL-WA830RE v2 */
|
||||
+ ATH79_MACH_TL_WA901ND, /* TP-LINK TL-WA901ND */
|
||||
+ ATH79_MACH_TL_WA901ND_V2, /* TP-LINK TL-WA901ND v2 */
|
||||
@@ -287,17 +288,10 @@
|
||||
config ATH79_MACH_AP121
|
||||
bool "Atheros AP121 reference board"
|
||||
select SOC_AR933X
|
||||
-@@ -11,62 +84,1051 @@ config ATH79_MACH_AP121
|
||||
- select ATH79_DEV_M25P80
|
||||
- select ATH79_DEV_USB
|
||||
- select ATH79_DEV_WMAC
|
||||
-- help
|
||||
-- Say 'Y' here if you want your kernel to support the
|
||||
-- Atheros AP121 reference board.
|
||||
-+ help
|
||||
-+ Say 'Y' here if you want your kernel to support the
|
||||
-+ Atheros AP121 reference board.
|
||||
-+
|
||||
+@@ -15,13 +88,25 @@ config ATH79_MACH_AP121
|
||||
+ Say 'Y' here if you want your kernel to support the
|
||||
+ Atheros AP121 reference board.
|
||||
+
|
||||
+config ATH79_MACH_AP132
|
||||
+ bool "Atheros AP132 reference board"
|
||||
+ select SOC_QCA955X
|
||||
@@ -310,32 +304,21 @@
|
||||
+ Say 'Y' here if you want your kernel to support the
|
||||
+ Atheros AP132 reference boards.
|
||||
+
|
||||
-+config ATH79_MACH_AP136
|
||||
-+ bool "Atheros AP136/AP135 reference board"
|
||||
-+ select SOC_QCA955X
|
||||
-+ select ATH79_DEV_GPIO_BUTTONS
|
||||
-+ select ATH79_DEV_LEDS_GPIO
|
||||
-+ select ATH79_DEV_NFC
|
||||
-+ select ATH79_DEV_M25P80
|
||||
-+ select ATH79_DEV_USB
|
||||
-+ select ATH79_DEV_WMAC
|
||||
-+ help
|
||||
-+ Say 'Y' here if you want your kernel to support the
|
||||
-+ Atheros AP136 or AP135 reference boards.
|
||||
-+
|
||||
-+config ATH79_MACH_AP81
|
||||
-+ bool "Atheros AP81 reference board"
|
||||
-+ select SOC_AR913X
|
||||
-+ select ATH79_DEV_ETH
|
||||
-+ select ATH79_DEV_GPIO_BUTTONS
|
||||
-+ select ATH79_DEV_LEDS_GPIO
|
||||
+ config ATH79_MACH_AP136
|
||||
+ bool "Atheros AP136/AP135 reference board"
|
||||
+ select SOC_QCA955X
|
||||
+ select ATH79_DEV_GPIO_BUTTONS
|
||||
+ select ATH79_DEV_LEDS_GPIO
|
||||
+ select ATH79_DEV_NFC
|
||||
+- select ATH79_DEV_SPI
|
||||
+ select ATH79_DEV_M25P80
|
||||
-+ select ATH79_DEV_USB
|
||||
-+ select ATH79_DEV_WMAC
|
||||
-+ help
|
||||
-+ Say 'Y' here if you want your kernel to support the
|
||||
-+ Atheros AP81 reference board.
|
||||
-+
|
||||
+ select ATH79_DEV_USB
|
||||
+ select ATH79_DEV_WMAC
|
||||
+ help
|
||||
+@@ -41,6 +126,24 @@ config ATH79_MACH_AP81
|
||||
+ Say 'Y' here if you want your kernel to support the
|
||||
+ Atheros AP81 reference board.
|
||||
+
|
||||
+config ATH79_MACH_AP83
|
||||
+ bool "Atheros AP83 board support"
|
||||
+ select SOC_AR913X
|
||||
@@ -354,21 +337,13 @@
|
||||
+ select ATH79_DEV_M25P80
|
||||
+ select ATH79_DEV_USB
|
||||
+
|
||||
-+config ATH79_MACH_DB120
|
||||
-+ bool "Atheros DB120 reference board"
|
||||
-+ select SOC_AR934X
|
||||
-+ select ATH79_DEV_AP9X_PCI if PCI
|
||||
-+ select ATH79_DEV_ETH
|
||||
-+ select ATH79_DEV_GPIO_BUTTONS
|
||||
-+ select ATH79_DEV_LEDS_GPIO
|
||||
-+ select ATH79_DEV_M25P80
|
||||
-+ select ATH79_DEV_NFC
|
||||
-+ select ATH79_DEV_USB
|
||||
-+ select ATH79_DEV_WMAC
|
||||
-+ help
|
||||
-+ Say 'Y' here if you want your kernel to support the
|
||||
-+ Atheros DB120 reference board.
|
||||
-+
|
||||
+ config ATH79_MACH_DB120
|
||||
+ bool "Atheros DB120 reference board"
|
||||
+ select SOC_AR934X
|
||||
+@@ -56,6 +159,13 @@ config ATH79_MACH_DB120
|
||||
+ Say 'Y' here if you want your kernel to support the
|
||||
+ Atheros DB120 reference board.
|
||||
+
|
||||
+config ATH79_MACH_PB42
|
||||
+ bool "Atheros PB42 board support"
|
||||
+ select SOC_AR71XX
|
||||
@@ -376,18 +351,13 @@
|
||||
+ select ATH79_DEV_GPIO_BUTTONS
|
||||
+ select ATH79_DEV_M25P80
|
||||
+
|
||||
-+config ATH79_MACH_PB44
|
||||
-+ bool "Atheros PB44 reference board"
|
||||
-+ select SOC_AR71XX
|
||||
-+ select ATH79_DEV_ETH
|
||||
-+ select ATH79_DEV_GPIO_BUTTONS
|
||||
-+ select ATH79_DEV_LEDS_GPIO
|
||||
-+ select ATH79_DEV_SPI
|
||||
-+ select ATH79_DEV_USB
|
||||
-+ help
|
||||
-+ Say 'Y' here if you want your kernel to support the
|
||||
-+ Atheros PB44 reference board.
|
||||
-+
|
||||
+ config ATH79_MACH_PB44
|
||||
+ bool "Atheros PB44 reference board"
|
||||
+ select SOC_AR71XX
|
||||
+@@ -68,6 +178,967 @@ config ATH79_MACH_PB44
|
||||
+ Say 'Y' here if you want your kernel to support the
|
||||
+ Atheros PB44 reference board.
|
||||
+
|
||||
+config ATH79_MACH_PB92
|
||||
+ bool "Atheros PB92 board support"
|
||||
+ select SOC_AR724X
|
||||
@@ -1113,6 +1083,15 @@
|
||||
+ select ATH79_DEV_M25P80
|
||||
+ select ATH79_DEV_WMAC
|
||||
+
|
||||
++config ATH79_MACH_TL_WA801ND_V3
|
||||
++ bool "TP-LINK TL-WA801ND v3 support"
|
||||
++ select SOC_QCA953X
|
||||
++ select ATH79_DEV_ETH
|
||||
++ select ATH79_DEV_GPIO_BUTTONS
|
||||
++ select ATH79_DEV_LEDS_GPIO
|
||||
++ select ATH79_DEV_M25P80
|
||||
++ select ATH79_DEV_WMAC
|
||||
++
|
||||
+config ATH79_MACH_TL_WA830RE_V2
|
||||
+ bool "TP-LINK TL-WA830RE v2 support"
|
||||
+ select SOC_AR934X
|
||||
@@ -1172,28 +1151,17 @@
|
||||
+ select ATH79_DEV_M25P80
|
||||
+ select ATH79_DEV_USB
|
||||
+ select ATH79_DEV_WMAC
|
||||
-
|
||||
--config ATH79_MACH_AP136
|
||||
-- bool "Atheros AP136/AP135 reference board"
|
||||
-- select SOC_QCA955X
|
||||
++
|
||||
+config ATH79_MACH_TL_WR720N_V3
|
||||
+ bool "TP-LINK TL-WR720N v3/v4 support"
|
||||
+ select SOC_AR933X
|
||||
+ select ATH79_DEV_ETH
|
||||
- select ATH79_DEV_GPIO_BUTTONS
|
||||
- select ATH79_DEV_LEDS_GPIO
|
||||
-- select ATH79_DEV_NFC
|
||||
-- select ATH79_DEV_SPI
|
||||
++ select ATH79_DEV_GPIO_BUTTONS
|
||||
++ select ATH79_DEV_LEDS_GPIO
|
||||
+ select ATH79_DEV_M25P80
|
||||
- select ATH79_DEV_USB
|
||||
- select ATH79_DEV_WMAC
|
||||
-- help
|
||||
-- Say 'Y' here if you want your kernel to support the
|
||||
-- Atheros AP136 or AP135 reference boards.
|
||||
-
|
||||
--config ATH79_MACH_AP81
|
||||
-- bool "Atheros AP81 reference board"
|
||||
-- select SOC_AR913X
|
||||
++ select ATH79_DEV_USB
|
||||
++ select ATH79_DEV_WMAC
|
||||
++
|
||||
+config ATH79_MACH_TL_WR741ND
|
||||
+ bool "TP-LINK TL-WR741ND support"
|
||||
+ select SOC_AR724X
|
||||
@@ -1206,18 +1174,13 @@
|
||||
+config ATH79_MACH_TL_WR741ND_V4
|
||||
+ bool "TP-LINK TL-WR741ND v4/TL-MR3220 v2 support"
|
||||
+ select SOC_AR933X
|
||||
- select ATH79_DEV_ETH
|
||||
- select ATH79_DEV_GPIO_BUTTONS
|
||||
- select ATH79_DEV_LEDS_GPIO
|
||||
- select ATH79_DEV_M25P80
|
||||
- select ATH79_DEV_USB
|
||||
- select ATH79_DEV_WMAC
|
||||
-- help
|
||||
-- Say 'Y' here if you want your kernel to support the
|
||||
-- Atheros AP81 reference board.
|
||||
-
|
||||
--config ATH79_MACH_DB120
|
||||
-- bool "Atheros DB120 reference board"
|
||||
++ select ATH79_DEV_ETH
|
||||
++ select ATH79_DEV_GPIO_BUTTONS
|
||||
++ select ATH79_DEV_LEDS_GPIO
|
||||
++ select ATH79_DEV_M25P80
|
||||
++ select ATH79_DEV_USB
|
||||
++ select ATH79_DEV_WMAC
|
||||
++
|
||||
+config ATH79_MACH_TL_WR841N_V1
|
||||
+ bool "TP-LINK TL-WR841N v1 support"
|
||||
+ select SOC_AR71XX
|
||||
@@ -1268,21 +1231,15 @@
|
||||
+
|
||||
+config ATH79_MACH_TL_WR1041N_V2
|
||||
+ bool "TP-LINK TL-WR1041N v2 support"
|
||||
- select SOC_AR934X
|
||||
- select ATH79_DEV_AP9X_PCI if PCI
|
||||
- select ATH79_DEV_ETH
|
||||
- select ATH79_DEV_GPIO_BUTTONS
|
||||
- select ATH79_DEV_LEDS_GPIO
|
||||
- select ATH79_DEV_M25P80
|
||||
-- select ATH79_DEV_NFC
|
||||
- select ATH79_DEV_USB
|
||||
- select ATH79_DEV_WMAC
|
||||
-- help
|
||||
-- Say 'Y' here if you want your kernel to support the
|
||||
-- Atheros DB120 reference board.
|
||||
-
|
||||
--config ATH79_MACH_PB44
|
||||
-- bool "Atheros PB44 reference board"
|
||||
++ select SOC_AR934X
|
||||
++ select ATH79_DEV_AP9X_PCI if PCI
|
||||
++ select ATH79_DEV_ETH
|
||||
++ select ATH79_DEV_GPIO_BUTTONS
|
||||
++ select ATH79_DEV_LEDS_GPIO
|
||||
++ select ATH79_DEV_M25P80
|
||||
++ select ATH79_DEV_USB
|
||||
++ select ATH79_DEV_WMAC
|
||||
++
|
||||
+config ATH79_MACH_TL_WR1043ND
|
||||
+ bool "TP-LINK TL-WR1043ND support"
|
||||
+ select SOC_AR913X
|
||||
@@ -1325,12 +1282,11 @@
|
||||
+
|
||||
+config ATH79_MACH_TEW_673GRU
|
||||
+ bool "TRENDnet TEW-673GRU support"
|
||||
- select SOC_AR71XX
|
||||
++ select SOC_AR71XX
|
||||
+ select ATH79_DEV_AP9X_PCI if PCI
|
||||
- select ATH79_DEV_ETH
|
||||
- select ATH79_DEV_GPIO_BUTTONS
|
||||
- select ATH79_DEV_LEDS_GPIO
|
||||
-- select ATH79_DEV_SPI
|
||||
++ select ATH79_DEV_ETH
|
||||
++ select ATH79_DEV_GPIO_BUTTONS
|
||||
++ select ATH79_DEV_LEDS_GPIO
|
||||
+ select ATH79_DEV_M25P80
|
||||
+ select ATH79_DEV_USB
|
||||
+ select ATH79_NVRAM
|
||||
@@ -1361,14 +1317,12 @@
|
||||
+ select ATH79_DEV_GPIO_BUTTONS
|
||||
+ select ATH79_DEV_LEDS_GPIO
|
||||
+ select ATH79_DEV_M25P80
|
||||
- select ATH79_DEV_USB
|
||||
-- help
|
||||
-- Say 'Y' here if you want your kernel to support the
|
||||
-- Atheros PB44 reference board.
|
||||
-
|
||||
++ select ATH79_DEV_USB
|
||||
++
|
||||
config ATH79_MACH_UBNT_XM
|
||||
bool "Ubiquiti Networks XM/UniFi boards"
|
||||
-@@ -83,6 +1145,117 @@ config ATH79_MACH_UBNT_XM
|
||||
+ select SOC_AR724X
|
||||
+@@ -83,6 +1154,117 @@ config ATH79_MACH_UBNT_XM
|
||||
Say 'Y' here if you want your kernel to support the
|
||||
Ubiquiti Networks XM (rev 1.0) board.
|
||||
|
||||
@@ -1486,7 +1440,7 @@
|
||||
endmenu
|
||||
|
||||
config SOC_AR71XX
|
||||
-@@ -124,7 +1297,10 @@ config ATH79_DEV_DSA
|
||||
+@@ -124,7 +1306,10 @@ config ATH79_DEV_DSA
|
||||
config ATH79_DEV_ETH
|
||||
def_bool n
|
||||
|
||||
@@ -1498,7 +1452,7 @@
|
||||
def_bool n
|
||||
|
||||
config ATH79_DEV_GPIO_BUTTONS
|
||||
-@@ -154,6 +1330,11 @@ config ATH79_PCI_ATH9K_FIXUP
|
||||
+@@ -154,6 +1339,11 @@ config ATH79_PCI_ATH9K_FIXUP
|
||||
def_bool n
|
||||
|
||||
config ATH79_ROUTERBOOT
|
||||
@@ -1512,7 +1466,7 @@
|
||||
endif
|
||||
--- a/arch/mips/ath79/Makefile
|
||||
+++ b/arch/mips/ath79/Makefile
|
||||
-@@ -38,9 +38,129 @@ obj-$(CONFIG_ATH79_ROUTERBOOT) += route
|
||||
+@@ -38,9 +38,130 @@ obj-$(CONFIG_ATH79_ROUTERBOOT) += route
|
||||
#
|
||||
# Machines
|
||||
#
|
||||
@@ -1595,6 +1549,7 @@
|
||||
+obj-$(CONFIG_ATH79_MACH_TL_WA701ND_V2) += mach-tl-wa701nd-v2.o
|
||||
+obj-$(CONFIG_ATH79_MACH_TL_WA7210N_V2) += mach-tl-wa7210n-v2.o
|
||||
+obj-$(CONFIG_ATH79_MACH_TL_WA830RE_V2) += mach-tl-wa830re-v2.o
|
||||
++obj-$(CONFIG_ATH79_MACH_TL_WA801ND_V3) += mach-tl-wa801nd-v3.o
|
||||
+obj-$(CONFIG_ATH79_MACH_TL_WA901ND) += mach-tl-wa901nd.o
|
||||
+obj-$(CONFIG_ATH79_MACH_TL_WA901ND_V2) += mach-tl-wa901nd-v2.o
|
||||
+obj-$(CONFIG_ATH79_MACH_TL_WDR3500) += mach-tl-wdr3500.o
|
||||
diff --git a/tools/firmware-utils/src/mktplinkfw.c b/tools/firmware-utils/src/mktplinkfw.c
|
||||
index 6df869d59a6138d4c0dd1fbec5337a71c31eccd3..9785a3f232ed4457e77aee249c0da86b4e99c532 100644
|
||||
--- a/tools/firmware-utils/src/mktplinkfw.c
|
||||
+++ b/tools/firmware-utils/src/mktplinkfw.c
|
||||
@@ -50,6 +50,7 @@
|
||||
#define HWID_TL_WA830RE_V1 0x08300010
|
||||
#define HWID_TL_WA830RE_V2 0x08300002
|
||||
#define HWID_TL_WA801ND_V2 0x08010002
|
||||
+#define HWID_TL_WA801ND_V3 0x08010003
|
||||
#define HWID_TL_WA901ND_V1 0x09010001
|
||||
#define HWID_TL_WA901ND_V2 0x09010002
|
||||
#define HWID_TL_WA901ND_V4 0x09010004
|
||||
@@ -296,6 +297,11 @@ static struct board_info boards[] = {
|
||||
.hw_id = HWID_TL_WA801ND_V2,
|
||||
.hw_rev = 1,
|
||||
.layout_id = "4Mlzma",
|
||||
+ },{
|
||||
+ .id = "TL-WA801NDv3",
|
||||
+ .hw_id = HWID_TL_WA801ND_V3,
|
||||
+ .hw_rev = 1,
|
||||
+ .layout_id = "4Mlzma",
|
||||
}, {
|
||||
.id = "TL-WA901NDv1",
|
||||
.hw_id = HWID_TL_WA901ND_V1,
|
||||
@@ -1207,4 +1213,3 @@ int main(int argc, char *argv[])
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
-
|
@ -1,856 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sun, 28 Aug 2016 20:20:35 +0200
|
||||
Subject: firmware-utils: mktplinkfw: backport from LEDE a4fc62bc0ea4010ddbfbd738453c9db70988a57c
|
||||
|
||||
diff --git a/tools/firmware-utils/Makefile b/tools/firmware-utils/Makefile
|
||||
index 03978456636ad50fc8128c0a5a51845135301a3d..aee8e87a1c0839f3220686e97cd8458516fc17cf 100644
|
||||
--- a/tools/firmware-utils/Makefile
|
||||
+++ b/tools/firmware-utils/Makefile
|
||||
@@ -40,7 +40,7 @@ define Host/Compile
|
||||
$(call cc,encode_crc)
|
||||
$(call cc,nand_ecc)
|
||||
$(call cc,mkplanexfw sha1)
|
||||
- $(call cc,mktplinkfw md5)
|
||||
+ $(call cc,mktplinkfw md5, -Wall)
|
||||
$(call cc,mktplinkfw2 md5)
|
||||
$(call cc,tplink-safeloader md5, -Wall)
|
||||
$(call cc,pc1crypt)
|
||||
diff --git a/tools/firmware-utils/src/mktplinkfw.c b/tools/firmware-utils/src/mktplinkfw.c
|
||||
index 9785a3f232ed4457e77aee249c0da86b4e99c532..34e6546a2d7db72748146ef233830c2e8de9ce97 100644
|
||||
--- a/tools/firmware-utils/src/mktplinkfw.c
|
||||
+++ b/tools/firmware-utils/src/mktplinkfw.c
|
||||
@@ -28,53 +28,10 @@
|
||||
#include "md5.h"
|
||||
|
||||
#define ALIGN(x,a) ({ typeof(a) __a = (a); (((x) + __a - 1) & ~(__a - 1)); })
|
||||
+#define ARRAY_SIZE(a) (sizeof((a)) / sizeof((a)[0]))
|
||||
|
||||
#define HEADER_VERSION_V1 0x01000000
|
||||
-#define HWID_ANTMINER_S1 0x04440101
|
||||
-#define HWID_ANTMINER_S3 0x04440301
|
||||
-#define HWID_GL_INET_V1 0x08000001
|
||||
-#define HWID_GS_OOLITE_V1 0x3C000101
|
||||
-#define HWID_ONION_OMEGA 0x04700001
|
||||
-#define HWID_TL_MR10U_V1 0x00100101
|
||||
-#define HWID_TL_MR13U_V1 0x00130101
|
||||
-#define HWID_TL_MR3020_V1 0x30200001
|
||||
-#define HWID_TL_MR3220_V1 0x32200001
|
||||
-#define HWID_TL_MR3220_V2 0x32200002
|
||||
-#define HWID_TL_MR3420_V1 0x34200001
|
||||
-#define HWID_TL_MR3420_V2 0x34200002
|
||||
-#define HWID_TL_WA701N_V1 0x07010001
|
||||
-#define HWID_TL_WA701N_V2 0x07010002
|
||||
-#define HWID_TL_WA7210N_V2 0x72100002
|
||||
-#define HWID_TL_WA7510N_V1 0x75100001
|
||||
-#define HWID_TL_WA801ND_V1 0x08010001
|
||||
-#define HWID_TL_WA830RE_V1 0x08300010
|
||||
-#define HWID_TL_WA830RE_V2 0x08300002
|
||||
-#define HWID_TL_WA801ND_V2 0x08010002
|
||||
-#define HWID_TL_WA801ND_V3 0x08010003
|
||||
-#define HWID_TL_WA901ND_V1 0x09010001
|
||||
-#define HWID_TL_WA901ND_V2 0x09010002
|
||||
-#define HWID_TL_WA901ND_V4 0x09010004
|
||||
-#define HWID_TL_WDR4300_V1_IL 0x43008001
|
||||
-#define HWID_TL_WDR4900_V1 0x49000001
|
||||
-#define HWID_TL_WR703N_V1 0x07030101
|
||||
-#define HWID_TL_WR720N_V3 0x07200103
|
||||
-#define HWID_TL_WR720N_V4 0x07200104
|
||||
-#define HWID_TL_WR741ND_V1 0x07410001
|
||||
-#define HWID_TL_WR741ND_V4 0x07410004
|
||||
-#define HWID_TL_WR740N_V1 0x07400001
|
||||
-#define HWID_TL_WR740N_V3 0x07400003
|
||||
-#define HWID_TL_WR743ND_V1 0x07430001
|
||||
-#define HWID_TL_WR743ND_V2 0x07430002
|
||||
-#define HWID_TL_WR841N_V1_5 0x08410002
|
||||
-#define HWID_TL_WR841ND_V3 0x08410003
|
||||
-#define HWID_TL_WR841ND_V5 0x08410005
|
||||
-#define HWID_TL_WR841ND_V7 0x08410007
|
||||
-#define HWID_TL_WR941ND_V2 0x09410002
|
||||
-#define HWID_TL_WR941ND_V4 0x09410004
|
||||
-#define HWID_TL_WR1043ND_V1 0x10430001
|
||||
-#define HWID_TL_WR1043ND_V2 0x10430002
|
||||
-#define HWID_TL_WR1041N_V2 0x10410002
|
||||
-#define HWID_TL_WR2543N_V1 0x25430001
|
||||
+#define HEADER_VERSION_V2 0x02000000
|
||||
|
||||
#define MD5SUM_LEN 16
|
||||
|
||||
@@ -89,7 +46,7 @@ struct fw_header {
|
||||
char fw_version[36];
|
||||
uint32_t hw_id; /* hardware id */
|
||||
uint32_t hw_rev; /* hardware revision */
|
||||
- uint32_t unk1;
|
||||
+ uint32_t region_code; /* region code */
|
||||
uint8_t md5sum1[MD5SUM_LEN];
|
||||
uint32_t unk2;
|
||||
uint8_t md5sum2[MD5SUM_LEN];
|
||||
@@ -106,7 +63,10 @@ struct fw_header {
|
||||
uint16_t ver_hi;
|
||||
uint16_t ver_mid;
|
||||
uint16_t ver_lo;
|
||||
- uint8_t pad[354];
|
||||
+ uint8_t pad[130];
|
||||
+ char region_str1[32];
|
||||
+ char region_str2[32];
|
||||
+ uint8_t pad2[160];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct flash_layout {
|
||||
@@ -117,13 +77,12 @@ struct flash_layout {
|
||||
uint32_t rootfs_ofs;
|
||||
};
|
||||
|
||||
-struct board_info {
|
||||
- char *id;
|
||||
- uint32_t hw_id;
|
||||
- uint32_t hw_rev;
|
||||
- char *layout_id;
|
||||
+struct fw_region {
|
||||
+ char name[4];
|
||||
+ uint32_t code;
|
||||
};
|
||||
|
||||
+
|
||||
/*
|
||||
* Globals
|
||||
*/
|
||||
@@ -132,15 +91,17 @@ static char *progname;
|
||||
static char *vendor = "TP-LINK Technologies";
|
||||
static char *version = "ver. 1.0";
|
||||
static char *fw_ver = "0.0.0";
|
||||
+static uint32_t hdr_ver = HEADER_VERSION_V1;
|
||||
|
||||
-static char *board_id;
|
||||
-static struct board_info *board;
|
||||
static char *layout_id;
|
||||
static struct flash_layout *layout;
|
||||
static char *opt_hw_id;
|
||||
static uint32_t hw_id;
|
||||
static char *opt_hw_rev;
|
||||
static uint32_t hw_rev;
|
||||
+static uint32_t opt_hdr_ver = 1;
|
||||
+static char *country;
|
||||
+static const struct fw_region *region;
|
||||
static int fw_ver_lo;
|
||||
static int fw_ver_mid;
|
||||
static int fw_ver_hi;
|
||||
@@ -163,12 +124,12 @@ static uint32_t reserved_space;
|
||||
static struct file_info inspect_info;
|
||||
static int extract = 0;
|
||||
|
||||
-char md5salt_normal[MD5SUM_LEN] = {
|
||||
+static const char md5salt_normal[MD5SUM_LEN] = {
|
||||
0xdc, 0xd7, 0x3a, 0xa5, 0xc3, 0x95, 0x98, 0xfb,
|
||||
0xdd, 0xf9, 0xe7, 0xf4, 0x0e, 0xae, 0x47, 0x38,
|
||||
};
|
||||
|
||||
-char md5salt_boot[MD5SUM_LEN] = {
|
||||
+static const char md5salt_boot[MD5SUM_LEN] = {
|
||||
0x8c, 0xef, 0x33, 0x5b, 0xd5, 0xc5, 0xce, 0xfa,
|
||||
0xa7, 0x9c, 0x28, 0xda, 0xb2, 0xe9, 0x0f, 0x42,
|
||||
};
|
||||
@@ -213,7 +174,7 @@ static struct flash_layout layouts[] = {
|
||||
}, {
|
||||
.id = "16Mppc",
|
||||
.fw_max_len = 0xf80000,
|
||||
- .kernel_la = 0x00000000,
|
||||
+ .kernel_la = 0x00000000 ,
|
||||
.kernel_ep = 0xc0000000,
|
||||
.rootfs_ofs = 0x2a0000,
|
||||
}, {
|
||||
@@ -221,235 +182,10 @@ static struct flash_layout layouts[] = {
|
||||
}
|
||||
};
|
||||
|
||||
-static struct board_info boards[] = {
|
||||
- {
|
||||
- .id = "TL-MR10Uv1",
|
||||
- .hw_id = HWID_TL_MR10U_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4Mlzma",
|
||||
- }, {
|
||||
- .id = "TL-MR13Uv1",
|
||||
- .hw_id = HWID_TL_MR13U_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4Mlzma",
|
||||
- }, {
|
||||
- .id = "TL-MR3020v1",
|
||||
- .hw_id = HWID_TL_MR3020_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4Mlzma",
|
||||
- }, {
|
||||
- .id = "TL-MR3220v1",
|
||||
- .hw_id = HWID_TL_MR3220_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-MR3220v2",
|
||||
- .hw_id = HWID_TL_MR3220_V2,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4Mlzma",
|
||||
- }, {
|
||||
- .id = "TL-MR3420v1",
|
||||
- .hw_id = HWID_TL_MR3420_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-MR3420v2",
|
||||
- .hw_id = HWID_TL_MR3420_V2,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4Mlzma",
|
||||
- }, {
|
||||
- .id = "TL-WA701Nv1",
|
||||
- .hw_id = HWID_TL_WA701N_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-WA701Nv2",
|
||||
- .hw_id = HWID_TL_WA701N_V2,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4Mlzma",
|
||||
- }, {
|
||||
- .id = "TL-WA7210N",
|
||||
- .hw_id = HWID_TL_WA7210N_V2,
|
||||
- .hw_rev = 2,
|
||||
- .layout_id = "4Mlzma",
|
||||
- }, {
|
||||
- .id = "TL-WA7510N",
|
||||
- .hw_id = HWID_TL_WA7510N_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-WA801NDv1",
|
||||
- .hw_id = HWID_TL_WA801ND_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-WA830REv1",
|
||||
- .hw_id = HWID_TL_WA830RE_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-WA830REv2",
|
||||
- .hw_id = HWID_TL_WA830RE_V2,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-WA801NDv2",
|
||||
- .hw_id = HWID_TL_WA801ND_V2,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4Mlzma",
|
||||
- },{
|
||||
- .id = "TL-WA801NDv3",
|
||||
- .hw_id = HWID_TL_WA801ND_V3,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4Mlzma",
|
||||
- }, {
|
||||
- .id = "TL-WA901NDv1",
|
||||
- .hw_id = HWID_TL_WA901ND_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-WA901NDv2",
|
||||
- .hw_id = HWID_TL_WA901ND_V2,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-WA901NDv4",
|
||||
- .hw_id = HWID_TL_WA901ND_V4,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4Mlzma",
|
||||
- }, {
|
||||
- .id = "TL-WDR4300v1",
|
||||
- .hw_id = HWID_TL_WDR4300_V1_IL,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "8Mlzma",
|
||||
- }, {
|
||||
- .id = "TL-WDR4900v1",
|
||||
- .hw_id = HWID_TL_WDR4900_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "16Mppc",
|
||||
- }, {
|
||||
- .id = "TL-WR741NDv1",
|
||||
- .hw_id = HWID_TL_WR741ND_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-WR741NDv4",
|
||||
- .hw_id = HWID_TL_WR741ND_V4,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4Mlzma",
|
||||
- }, {
|
||||
- .id = "TL-WR740Nv1",
|
||||
- .hw_id = HWID_TL_WR740N_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-WR740Nv3",
|
||||
- .hw_id = HWID_TL_WR740N_V3,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-WR743NDv1",
|
||||
- .hw_id = HWID_TL_WR743ND_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-WR743NDv2",
|
||||
- .hw_id = HWID_TL_WR743ND_V2,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4Mlzma",
|
||||
- }, {
|
||||
- .id = "TL-WR841Nv1.5",
|
||||
- .hw_id = HWID_TL_WR841N_V1_5,
|
||||
- .hw_rev = 2,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-WR841NDv3",
|
||||
- .hw_id = HWID_TL_WR841ND_V3,
|
||||
- .hw_rev = 3,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-WR841NDv5",
|
||||
- .hw_id = HWID_TL_WR841ND_V5,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-WR841NDv7",
|
||||
- .hw_id = HWID_TL_WR841ND_V7,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-WR941NDv2",
|
||||
- .hw_id = HWID_TL_WR941ND_V2,
|
||||
- .hw_rev = 2,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-WR941NDv4",
|
||||
- .hw_id = HWID_TL_WR941ND_V4,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4M",
|
||||
- }, {
|
||||
- .id = "TL-WR1041Nv2",
|
||||
- .hw_id = HWID_TL_WR1041N_V2,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4Mlzma",
|
||||
- }, {
|
||||
- .id = "TL-WR1043NDv1",
|
||||
- .hw_id = HWID_TL_WR1043ND_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "8M",
|
||||
- }, {
|
||||
- .id = "TL-WR1043NDv2",
|
||||
- .hw_id = HWID_TL_WR1043ND_V2,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "8Mlzma",
|
||||
- }, {
|
||||
- .id = "TL-WR2543Nv1",
|
||||
- .hw_id = HWID_TL_WR2543N_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "8Mlzma",
|
||||
- }, {
|
||||
- .id = "TL-WR703Nv1",
|
||||
- .hw_id = HWID_TL_WR703N_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4Mlzma",
|
||||
- }, {
|
||||
- .id = "TL-WR720Nv3",
|
||||
- .hw_id = HWID_TL_WR720N_V3,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4Mlzma",
|
||||
- }, {
|
||||
- .id = "TL-WR720Nv4",
|
||||
- .hw_id = HWID_TL_WR720N_V4,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "4Mlzma",
|
||||
- }, {
|
||||
- .id = "GL-INETv1",
|
||||
- .hw_id = HWID_GL_INET_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "8Mlzma",
|
||||
- }, {
|
||||
- .id = "GS-OOLITEv1",
|
||||
- .hw_id = HWID_GS_OOLITE_V1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "16Mlzma",
|
||||
- }, {
|
||||
- .id = "ONION-OMEGA",
|
||||
- .hw_id = HWID_ONION_OMEGA,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "16Mlzma",
|
||||
- }, {
|
||||
- .id = "ANTMINER-S1",
|
||||
- .hw_id = HWID_ANTMINER_S1,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "8Mlzma",
|
||||
- }, {
|
||||
- .id = "ANTMINER-S3",
|
||||
- .hw_id = HWID_ANTMINER_S3,
|
||||
- .hw_rev = 1,
|
||||
- .layout_id = "8Mlzma",
|
||||
- }, {
|
||||
- /* terminating entry */
|
||||
- }
|
||||
+static const struct fw_region regions[] = {
|
||||
+ /* Default region (universal) uses code 0 as well */
|
||||
+ {"US", 1},
|
||||
+ {"EU", 0},
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -464,7 +200,7 @@ static struct board_info boards[] = {
|
||||
#define ERRS(fmt, ...) do { \
|
||||
int save = errno; \
|
||||
fflush(0); \
|
||||
- fprintf(stderr, "[%s] *** error: " fmt "\n", \
|
||||
+ fprintf(stderr, "[%s] *** error: " fmt ": %s\n", \
|
||||
progname, ## __VA_ARGS__, strerror(save)); \
|
||||
} while (0)
|
||||
|
||||
@@ -472,35 +208,7 @@ static struct board_info boards[] = {
|
||||
fprintf(stderr, "[%s] " fmt "\n", progname, ## __VA_ARGS__ ); \
|
||||
} while (0)
|
||||
|
||||
-static struct board_info *find_board(char *id)
|
||||
-{
|
||||
- struct board_info *ret;
|
||||
- struct board_info *board;
|
||||
-
|
||||
- ret = NULL;
|
||||
- for (board = boards; board->id != NULL; board++){
|
||||
- if (strcasecmp(id, board->id) == 0) {
|
||||
- ret = board;
|
||||
- break;
|
||||
- }
|
||||
- };
|
||||
-
|
||||
- return ret;
|
||||
-}
|
||||
-
|
||||
-static struct board_info *find_board_by_hwid(uint32_t hw_id)
|
||||
-{
|
||||
- struct board_info *board;
|
||||
-
|
||||
- for (board = boards; board->id != NULL; board++) {
|
||||
- if (hw_id == board->hw_id)
|
||||
- return board;
|
||||
- };
|
||||
-
|
||||
- return NULL;
|
||||
-}
|
||||
-
|
||||
-static struct flash_layout *find_layout(char *id)
|
||||
+static struct flash_layout *find_layout(const char *id)
|
||||
{
|
||||
struct flash_layout *ret;
|
||||
struct flash_layout *l;
|
||||
@@ -516,21 +224,29 @@ static struct flash_layout *find_layout(char *id)
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static const struct fw_region * find_region(const char *country) {
|
||||
+ size_t i;
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(regions); i++) {
|
||||
+ if (strcasecmp(regions[i].name, country) == 0)
|
||||
+ return ®ions[i];
|
||||
+ }
|
||||
+
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
static void usage(int status)
|
||||
{
|
||||
- FILE *stream = (status != EXIT_SUCCESS) ? stderr : stdout;
|
||||
- struct board_info *board;
|
||||
-
|
||||
- fprintf(stream, "Usage: %s [OPTIONS...]\n", progname);
|
||||
- fprintf(stream,
|
||||
+ fprintf(stderr, "Usage: %s [OPTIONS...]\n", progname);
|
||||
+ fprintf(stderr,
|
||||
"\n"
|
||||
"Options:\n"
|
||||
-" -B <board> create image for the board specified with <board>\n"
|
||||
" -c use combined kernel image\n"
|
||||
" -E <ep> overwrite kernel entry point with <ep> (hexval prefixed with 0x)\n"
|
||||
" -L <la> overwrite kernel load address with <la> (hexval prefixed with 0x)\n"
|
||||
" -H <hwid> use hardware id specified with <hwid>\n"
|
||||
" -W <hwrev> use hardware revision specified with <hwrev>\n"
|
||||
+" -C <country> set region code to <country>\n"
|
||||
" -F <id> use flash layout specified with <id>\n"
|
||||
" -k <file> read kernel image from the file <file>\n"
|
||||
" -r <file> read rootfs image from the file <file>\n"
|
||||
@@ -543,6 +259,7 @@ static void usage(int status)
|
||||
" -N <vendor> set image vendor to <vendor>\n"
|
||||
" -V <version> set image version to <version>\n"
|
||||
" -v <version> set firmware version to <version>\n"
|
||||
+" -m <version> set header version to <version>\n"
|
||||
" -i <file> inspect given firmware file <file>\n"
|
||||
" -x extract kernel and rootfs while inspecting (requires -i)\n"
|
||||
" -X <size> reserve <size> bytes in the firmware image (hexval prefixed with 0x)\n"
|
||||
@@ -552,7 +269,7 @@ static void usage(int status)
|
||||
exit(status);
|
||||
}
|
||||
|
||||
-static int get_md5(char *data, int size, char *md5)
|
||||
+static void get_md5(const char *data, int size, uint8_t *md5)
|
||||
{
|
||||
MD5_CTX ctx;
|
||||
|
||||
@@ -579,7 +296,7 @@ static int get_file_stat(struct file_info *fdata)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int read_to_buf(struct file_info *fdata, char *buf)
|
||||
+static int read_to_buf(const struct file_info *fdata, char *buf)
|
||||
{
|
||||
FILE *f;
|
||||
int ret = EXIT_FAILURE;
|
||||
@@ -608,6 +325,7 @@ static int read_to_buf(struct file_info *fdata, char *buf)
|
||||
static int check_options(void)
|
||||
{
|
||||
int ret;
|
||||
+ int exceed_bytes;
|
||||
|
||||
if (inspect_info.file_name) {
|
||||
ret = get_file_stat(&inspect_info);
|
||||
@@ -620,33 +338,28 @@ static int check_options(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
- if (board_id == NULL && opt_hw_id == NULL) {
|
||||
- ERR("either board or hardware id must be specified");
|
||||
+ if (opt_hw_id == NULL) {
|
||||
+ ERR("hardware id not specified");
|
||||
return -1;
|
||||
}
|
||||
+ hw_id = strtoul(opt_hw_id, NULL, 0);
|
||||
|
||||
- if (board_id) {
|
||||
- board = find_board(board_id);
|
||||
- if (board == NULL) {
|
||||
- ERR("unknown/unsupported board id \"%s\"", board_id);
|
||||
- return -1;
|
||||
- }
|
||||
- if (layout_id == NULL)
|
||||
- layout_id = board->layout_id;
|
||||
+ if (layout_id == NULL) {
|
||||
+ ERR("flash layout is not specified");
|
||||
+ return -1;
|
||||
+ }
|
||||
|
||||
- hw_id = board->hw_id;
|
||||
- hw_rev = board->hw_rev;
|
||||
- } else {
|
||||
- if (layout_id == NULL) {
|
||||
- ERR("flash layout is not specified");
|
||||
+ if (opt_hw_rev)
|
||||
+ hw_rev = strtoul(opt_hw_rev, NULL, 0);
|
||||
+ else
|
||||
+ hw_rev = 1;
|
||||
+
|
||||
+ if (country) {
|
||||
+ region = find_region(country);
|
||||
+ if (!region) {
|
||||
+ ERR("unknown region code \"%s\"", country);
|
||||
return -1;
|
||||
}
|
||||
- hw_id = strtoul(opt_hw_id, NULL, 0);
|
||||
-
|
||||
- if (opt_hw_rev)
|
||||
- hw_rev = strtoul(opt_hw_rev, NULL, 0);
|
||||
- else
|
||||
- hw_rev = 1;
|
||||
}
|
||||
|
||||
layout = find_layout(layout_id);
|
||||
@@ -681,10 +394,10 @@ static int check_options(void)
|
||||
kernel_len = kernel_info.file_size;
|
||||
|
||||
if (combined) {
|
||||
- if (kernel_info.file_size >
|
||||
- fw_max_len - sizeof(struct fw_header)) {
|
||||
+ exceed_bytes = kernel_info.file_size - (fw_max_len - sizeof(struct fw_header));
|
||||
+ if (exceed_bytes > 0) {
|
||||
if (!ignore_size) {
|
||||
- ERR("kernel image is too big");
|
||||
+ ERR("kernel image is too big by %i bytes", exceed_bytes);
|
||||
return -1;
|
||||
}
|
||||
layout->fw_max_len = sizeof(struct fw_header) +
|
||||
@@ -708,21 +421,21 @@ static int check_options(void)
|
||||
|
||||
DBG("kernel length aligned to %u", kernel_len);
|
||||
|
||||
- if (kernel_len + rootfs_info.file_size >
|
||||
- fw_max_len - sizeof(struct fw_header)) {
|
||||
- ERR("images are too big");
|
||||
+ exceed_bytes = kernel_len + rootfs_info.file_size - (fw_max_len - sizeof(struct fw_header));
|
||||
+ if (exceed_bytes > 0) {
|
||||
+ ERR("images are too big by %i bytes", exceed_bytes);
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
- if (kernel_info.file_size >
|
||||
- rootfs_ofs - sizeof(struct fw_header)) {
|
||||
- ERR("kernel image is too big");
|
||||
+ exceed_bytes = kernel_info.file_size - (rootfs_ofs - sizeof(struct fw_header));
|
||||
+ if (exceed_bytes > 0) {
|
||||
+ ERR("kernel image is too big by %i bytes", exceed_bytes);
|
||||
return -1;
|
||||
}
|
||||
|
||||
- if (rootfs_info.file_size >
|
||||
- (fw_max_len - rootfs_ofs)) {
|
||||
- ERR("rootfs image is too big");
|
||||
+ exceed_bytes = rootfs_info.file_size - (fw_max_len - rootfs_ofs);
|
||||
+ if (exceed_bytes > 0) {
|
||||
+ ERR("rootfs image is too big by %i bytes", exceed_bytes);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@@ -739,6 +452,15 @@ static int check_options(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
+ if (opt_hdr_ver == 1) {
|
||||
+ hdr_ver = HEADER_VERSION_V1;
|
||||
+ } else if (opt_hdr_ver == 2) {
|
||||
+ hdr_ver = HEADER_VERSION_V2;
|
||||
+ } else {
|
||||
+ ERR("invalid header version '%u'", opt_hdr_ver);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -748,7 +470,7 @@ static void fill_header(char *buf, int len)
|
||||
|
||||
memset(hdr, 0, sizeof(struct fw_header));
|
||||
|
||||
- hdr->version = htonl(HEADER_VERSION_V1);
|
||||
+ hdr->version = htonl(hdr_ver);
|
||||
strncpy(hdr->vendor_name, vendor, sizeof(hdr->vendor_name));
|
||||
strncpy(hdr->fw_version, version, sizeof(hdr->fw_version));
|
||||
hdr->hw_id = htonl(hw_id);
|
||||
@@ -773,6 +495,18 @@ static void fill_header(char *buf, int len)
|
||||
hdr->ver_mid = htons(fw_ver_mid);
|
||||
hdr->ver_lo = htons(fw_ver_lo);
|
||||
|
||||
+ if (region) {
|
||||
+ hdr->region_code = htonl(region->code);
|
||||
+ snprintf(
|
||||
+ hdr->region_str1, sizeof(hdr->region_str1), "00000000;%02X%02X%02X%02X;",
|
||||
+ region->name[0], region->name[1], region->name[2], region->name[3]
|
||||
+ );
|
||||
+ snprintf(
|
||||
+ hdr->region_str2, sizeof(hdr->region_str2), "%02X%02X%02X%02X",
|
||||
+ region->name[0], region->name[1], region->name[2], region->name[3]
|
||||
+ );
|
||||
+ }
|
||||
+
|
||||
get_md5(buf, len, hdr->md5sum1);
|
||||
}
|
||||
|
||||
@@ -810,7 +544,7 @@ static int pad_jffs2(char *buf, int currlen)
|
||||
return len;
|
||||
}
|
||||
|
||||
-static int write_fw(char *data, int len)
|
||||
+static int write_fw(const char *data, int len)
|
||||
{
|
||||
FILE *f;
|
||||
int ret = EXIT_FAILURE;
|
||||
@@ -902,61 +636,22 @@ static int build_fw(void)
|
||||
}
|
||||
|
||||
/* Helper functions to inspect_fw() representing different output formats */
|
||||
-static inline void inspect_fw_pstr(char *label, char *str)
|
||||
+static inline void inspect_fw_pstr(const char *label, const char *str)
|
||||
{
|
||||
printf("%-23s: %s\n", label, str);
|
||||
}
|
||||
|
||||
-static inline void inspect_fw_phex(char *label, uint32_t val)
|
||||
+static inline void inspect_fw_phex(const char *label, uint32_t val)
|
||||
{
|
||||
printf("%-23s: 0x%08x\n", label, val);
|
||||
}
|
||||
|
||||
-static inline void inspect_fw_phexpost(char *label,
|
||||
- uint32_t val, char *post)
|
||||
-{
|
||||
- printf("%-23s: 0x%08x (%s)\n", label, val, post);
|
||||
-}
|
||||
-
|
||||
-static inline void inspect_fw_phexdef(char *label,
|
||||
- uint32_t val, uint32_t defval)
|
||||
-{
|
||||
- printf("%-23s: 0x%08x ", label, val);
|
||||
-
|
||||
- if (val == defval)
|
||||
- printf("(== OpenWrt default)\n");
|
||||
- else
|
||||
- printf("(OpenWrt default: 0x%08x)\n", defval);
|
||||
-}
|
||||
-
|
||||
-static inline void inspect_fw_phexexp(char *label,
|
||||
- uint32_t val, uint32_t expval)
|
||||
-{
|
||||
- printf("%-23s: 0x%08x ", label, val);
|
||||
-
|
||||
- if (val == expval)
|
||||
- printf("(ok)\n");
|
||||
- else
|
||||
- printf("(expected: 0x%08x)\n", expval);
|
||||
-}
|
||||
-
|
||||
-static inline void inspect_fw_phexdec(char *label, uint32_t val)
|
||||
+static inline void inspect_fw_phexdec(const char *label, uint32_t val)
|
||||
{
|
||||
printf("%-23s: 0x%08x / %8u bytes\n", label, val, val);
|
||||
}
|
||||
|
||||
-static inline void inspect_fw_phexdecdef(char *label,
|
||||
- uint32_t val, uint32_t defval)
|
||||
-{
|
||||
- printf("%-23s: 0x%08x / %8u bytes ", label, val, val);
|
||||
-
|
||||
- if (val == defval)
|
||||
- printf("(== OpenWrt default)\n");
|
||||
- else
|
||||
- printf("(OpenWrt default: 0x%08x)\n", defval);
|
||||
-}
|
||||
-
|
||||
-static inline void inspect_fw_pmd5sum(char *label, uint8_t *val, char *text)
|
||||
+static inline void inspect_fw_pmd5sum(const char *label, const uint8_t *val, const char *text)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -971,7 +666,6 @@ static int inspect_fw(void)
|
||||
char *buf;
|
||||
struct fw_header *hdr;
|
||||
uint8_t md5sum[MD5SUM_LEN];
|
||||
- struct board_info *board;
|
||||
int ret = EXIT_FAILURE;
|
||||
|
||||
buf = malloc(inspect_info.file_size);
|
||||
@@ -988,16 +682,14 @@ static int inspect_fw(void)
|
||||
inspect_fw_pstr("File name", inspect_info.file_name);
|
||||
inspect_fw_phexdec("File size", inspect_info.file_size);
|
||||
|
||||
- if (ntohl(hdr->version) != HEADER_VERSION_V1) {
|
||||
- ERR("file does not seem to have V1 header!\n");
|
||||
+ if ((ntohl(hdr->version) != HEADER_VERSION_V1) &&
|
||||
+ (ntohl(hdr->version) != HEADER_VERSION_V2)) {
|
||||
+ ERR("file does not seem to have V1/V2 header!\n");
|
||||
goto out_free_buf;
|
||||
}
|
||||
|
||||
inspect_fw_phexdec("Version 1 Header size", sizeof(struct fw_header));
|
||||
|
||||
- if (ntohl(hdr->unk1) != 0)
|
||||
- inspect_fw_phexdec("Unknown value 1", hdr->unk1);
|
||||
-
|
||||
memcpy(md5sum, hdr->md5sum1, sizeof(md5sum));
|
||||
if (ntohl(hdr->boot_len) == 0)
|
||||
memcpy(hdr->md5sum1, md5salt_normal, sizeof(md5sum));
|
||||
@@ -1022,19 +714,9 @@ static int inspect_fw(void)
|
||||
|
||||
inspect_fw_pstr("Vendor name", hdr->vendor_name);
|
||||
inspect_fw_pstr("Firmware version", hdr->fw_version);
|
||||
- board = find_board_by_hwid(ntohl(hdr->hw_id));
|
||||
- if (board) {
|
||||
- layout = find_layout(board->layout_id);
|
||||
- inspect_fw_phexpost("Hardware ID",
|
||||
- ntohl(hdr->hw_id), board->id);
|
||||
- inspect_fw_phexexp("Hardware Revision",
|
||||
- ntohl(hdr->hw_rev), board->hw_rev);
|
||||
- } else {
|
||||
- inspect_fw_phexpost("Hardware ID",
|
||||
- ntohl(hdr->hw_id), "unknown");
|
||||
- inspect_fw_phex("Hardware Revision",
|
||||
- ntohl(hdr->hw_rev));
|
||||
- }
|
||||
+ inspect_fw_phex("Hardware ID", ntohl(hdr->hw_id));
|
||||
+ inspect_fw_phex("Hardware Revision", ntohl(hdr->hw_rev));
|
||||
+ inspect_fw_phex("Region code", ntohl(hdr->region_code));
|
||||
|
||||
printf("\n");
|
||||
|
||||
@@ -1042,24 +724,12 @@ static int inspect_fw(void)
|
||||
ntohl(hdr->kernel_ofs));
|
||||
inspect_fw_phexdec("Kernel data length",
|
||||
ntohl(hdr->kernel_len));
|
||||
- if (board) {
|
||||
- inspect_fw_phexdef("Kernel load address",
|
||||
- ntohl(hdr->kernel_la),
|
||||
- layout ? layout->kernel_la : 0xffffffff);
|
||||
- inspect_fw_phexdef("Kernel entry point",
|
||||
- ntohl(hdr->kernel_ep),
|
||||
- layout ? layout->kernel_ep : 0xffffffff);
|
||||
- inspect_fw_phexdecdef("Rootfs data offset",
|
||||
- ntohl(hdr->rootfs_ofs),
|
||||
- layout ? layout->rootfs_ofs : 0xffffffff);
|
||||
- } else {
|
||||
- inspect_fw_phex("Kernel load address",
|
||||
- ntohl(hdr->kernel_la));
|
||||
- inspect_fw_phex("Kernel entry point",
|
||||
- ntohl(hdr->kernel_ep));
|
||||
- inspect_fw_phexdec("Rootfs data offset",
|
||||
- ntohl(hdr->rootfs_ofs));
|
||||
- }
|
||||
+ inspect_fw_phex("Kernel load address",
|
||||
+ ntohl(hdr->kernel_la));
|
||||
+ inspect_fw_phex("Kernel entry point",
|
||||
+ ntohl(hdr->kernel_ep));
|
||||
+ inspect_fw_phexdec("Rootfs data offset",
|
||||
+ ntohl(hdr->rootfs_ofs));
|
||||
inspect_fw_phexdec("Rootfs data length",
|
||||
ntohl(hdr->rootfs_len));
|
||||
inspect_fw_phexdec("Boot loader data offset",
|
||||
@@ -1115,16 +785,13 @@ static int inspect_fw(void)
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int ret = EXIT_FAILURE;
|
||||
- int err;
|
||||
-
|
||||
- FILE *outfile;
|
||||
|
||||
progname = basename(argv[0]);
|
||||
|
||||
while ( 1 ) {
|
||||
int c;
|
||||
|
||||
- c = getopt(argc, argv, "a:B:H:E:F:L:V:N:W:ci:k:r:R:o:xX:hsSjv:");
|
||||
+ c = getopt(argc, argv, "a:H:E:F:L:m:V:N:W:C:ci:k:r:R:o:xX:hsSjv:");
|
||||
if (c == -1)
|
||||
break;
|
||||
|
||||
@@ -1132,9 +799,6 @@ int main(int argc, char *argv[])
|
||||
case 'a':
|
||||
sscanf(optarg, "0x%x", &rootfs_align);
|
||||
break;
|
||||
- case 'B':
|
||||
- board_id = optarg;
|
||||
- break;
|
||||
case 'H':
|
||||
opt_hw_id = optarg;
|
||||
break;
|
||||
@@ -1147,9 +811,15 @@ int main(int argc, char *argv[])
|
||||
case 'W':
|
||||
opt_hw_rev = optarg;
|
||||
break;
|
||||
+ case 'C':
|
||||
+ country = optarg;
|
||||
+ break;
|
||||
case 'L':
|
||||
sscanf(optarg, "0x%x", &kernel_la);
|
||||
break;
|
||||
+ case 'm':
|
||||
+ sscanf(optarg, "%u", &opt_hdr_ver);
|
||||
+ break;
|
||||
case 'V':
|
||||
version = optarg;
|
||||
break;
|
@ -1,38 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sun, 28 Aug 2016 20:38:58 +0200
|
||||
Subject: ar71xx: backport support for new TP-Link region codes
|
||||
|
||||
Generate flashable images for the Archer C7 v2 with current stock firmware
|
||||
again.
|
||||
|
||||
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
|
||||
index 868a5021acb49878359497c90509de07faa3ca49..95f6d46d15b43faabb0bbf9301476d3ea5bee470 100644
|
||||
--- a/target/linux/ar71xx/image/Makefile
|
||||
+++ b/target/linux/ar71xx/image/Makefile
|
||||
@@ -58,13 +58,14 @@ define Build/mktplinkfw
|
||||
-o $@.new \
|
||||
-j -X 0x40000 \
|
||||
-a $(call rootfs_align,$(FILESYSTEM)) \
|
||||
- $(if $(findstring sysupgrade,$1),-s) && mv $@.new $@ || rm -f $@
|
||||
+ $(wordlist 2,$(words $(1)),$(1)) \
|
||||
+ $(if $(findstring sysupgrade,$(word 1,$(1))),-s) && mv $@.new $@ || rm -f $@
|
||||
endef
|
||||
|
||||
# -c combined image
|
||||
define Build/mktplinkfw-initramfs
|
||||
$(STAGING_DIR_HOST)/bin/mktplinkfw \
|
||||
- -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -F $(TPLINK_FLASHLAYOUT) -N OpenWrt -V $(REVISION) \
|
||||
+ -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -F $(TPLINK_FLASHLAYOUT) -N OpenWrt -V $(REVISION) $(1) \
|
||||
-k $@ \
|
||||
-o $@.new \
|
||||
-s -S \
|
||||
@@ -300,6 +301,9 @@ define Device/archer-c7-v2
|
||||
BOARDNAME := ARCHER-C7
|
||||
DEVICE_PROFILE := ARCHERC7
|
||||
TPLINK_HWID := 0xc7000002
|
||||
+ IMAGES := sysupgrade.bin factory.bin factory-us.bin factory-eu.bin
|
||||
+ IMAGE/factory-us.bin := append-rootfs | mktplinkfw factory -C US
|
||||
+ IMAGE/factory-eu.bin := append-rootfs | mktplinkfw factory -C EU
|
||||
endef
|
||||
TARGET_DEVICES += archer-c5 archer-c7-v1 archer-c7-v2
|
||||
|
@ -1,68 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Fri, 9 Sep 2016 01:54:44 +0200
|
||||
Subject: ath10k-firmware: add ath10k-firmware-qca988x-11s
|
||||
|
||||
diff --git a/package/firmware/ath10k-firmware/Makefile b/package/firmware/ath10k-firmware/Makefile
|
||||
index 624da6a1ed43ea37bbb3409b3dbe4b3af01263b5..3a4f0c59eb89a32f78f0104d2420b921d6660ddc 100644
|
||||
--- a/package/firmware/ath10k-firmware/Makefile
|
||||
+++ b/package/firmware/ath10k-firmware/Makefile
|
||||
@@ -8,7 +8,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ath10k-firmware
|
||||
-PKG_SOURCE_VERSION:=b00eb8d30fbebb6a5047ccacefa8c37e072fca9c
|
||||
+PKG_SOURCE_VERSION:=307cb46b06661ebd3186723b5002de769c7add83
|
||||
PKG_VERSION:=2014-11-13-$(PKG_SOURCE_VERSION)
|
||||
PKG_RELEASE:=1
|
||||
|
||||
@@ -104,6 +104,11 @@ $(Package/ath10k-firmware-default)
|
||||
TITLE:=ath10k firmware for QCA99x0 devices
|
||||
endef
|
||||
|
||||
+define Package/ath10k-firmware-qca988x-11s
|
||||
+$(Package/ath10k-firmware-default)
|
||||
+ TITLE:=ath10k firmware for QCA988x devices (with 11s support)
|
||||
+endef
|
||||
+
|
||||
define Package/ath10k-firmware-qca988x-ct
|
||||
$(Package/ath10k-firmware-default)
|
||||
TITLE:=ath10k CT 10.1 firmware for QCA988x devices
|
||||
@@ -188,17 +193,27 @@ endef
|
||||
define Package/ath10k-firmware-qca988x/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA988X/hw2.0
|
||||
$(INSTALL_DATA) \
|
||||
- $(PKG_BUILD_DIR)/QCA988X/board.bin \
|
||||
+ $(PKG_BUILD_DIR)/QCA988X/hw2.0/board.bin \
|
||||
$(1)/lib/firmware/ath10k/QCA988X/hw2.0/
|
||||
$(INSTALL_DATA) \
|
||||
$(DL_DIR)/$(QCA988X_FIRMWARE_FILE) \
|
||||
$(1)/lib/firmware/ath10k/QCA988X/hw2.0/firmware-5.bin
|
||||
endef
|
||||
|
||||
+define Package/ath10k-firmware-qca988x-11s/install
|
||||
+ $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA988X/hw2.0
|
||||
+ $(INSTALL_DATA) \
|
||||
+ $(PKG_BUILD_DIR)/QCA988X/hw2.0/board.bin \
|
||||
+ $(1)/lib/firmware/ath10k/QCA988X/hw2.0/
|
||||
+ $(INSTALL_DATA) \
|
||||
+ $(PKG_BUILD_DIR)/QCA988X/hw2.0/10.2.4.70/firmware-5.bin_10.2.4.70.54 \
|
||||
+ $(1)/lib/firmware/ath10k/QCA988X/hw2.0/firmware-5.bin
|
||||
+endef
|
||||
+
|
||||
define Package/ath10k-firmware-qca988x-ct/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA988X/hw2.0
|
||||
$(INSTALL_DATA) \
|
||||
- $(PKG_BUILD_DIR)/QCA988X/board.bin \
|
||||
+ $(PKG_BUILD_DIR)/QCA988X/hw2.0/board.bin \
|
||||
$(1)/lib/firmware/ath10k/QCA988X/hw2.0/
|
||||
$(INSTALL_DATA) \
|
||||
$(DL_DIR)/$(QCA988X_FIRMWARE_FILE_CT) \
|
||||
@@ -268,6 +283,8 @@ $(eval $(call BuildPackage,ath10k-firmware-qca99x0))
|
||||
$(eval $(call BuildPackage,ath10k-firmware-qca6174))
|
||||
$(eval $(call BuildPackage,ath10k-firmware-qca9984))
|
||||
|
||||
+$(eval $(call BuildPackage,ath10k-firmware-qca988x-11s))
|
||||
+
|
||||
$(eval $(call BuildPackage,ath10k-firmware-qca988x-ct))
|
||||
$(eval $(call BuildPackage,ath10k-firmware-qca99x0-ct))
|
||||
$(eval $(call BuildPackage,ath10k-firmware-qca9984-ct))
|
@ -1,124 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Tue, 11 Oct 2016 02:54:27 +0200
|
||||
Subject: ath9k: revert temperature compensation support patch (FS#111)
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
Backport of LEDE 3e4d0e3e77dcf9b2116e5ed53f30e2bf53b1c6b7
|
||||
|
||||
diff --git a/package/kernel/mac80211/patches/328-ath9k_hw-implement-temperature-compensation-support-.patch b/package/kernel/mac80211/patches/328-ath9k_hw-implement-temperature-compensation-support-.patch
|
||||
deleted file mode 100644
|
||||
index cff32ad47cb0b905d9cfa4eb021258b644b2a47a..0000000000000000000000000000000000000000
|
||||
--- a/package/kernel/mac80211/patches/328-ath9k_hw-implement-temperature-compensation-support-.patch
|
||||
+++ /dev/null
|
||||
@@ -1,97 +0,0 @@
|
||||
-From: Felix Fietkau <nbd@nbd.name>
|
||||
-Date: Mon, 11 Jul 2016 11:35:55 +0200
|
||||
-Subject: [PATCH] ath9k_hw: implement temperature compensation support for
|
||||
- AR9003+
|
||||
-
|
||||
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
----
|
||||
-
|
||||
---- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c
|
||||
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
|
||||
-@@ -33,6 +33,7 @@ struct coeff {
|
||||
-
|
||||
- enum ar9003_cal_types {
|
||||
- IQ_MISMATCH_CAL = BIT(0),
|
||||
-+ TEMP_COMP_CAL = BIT(1),
|
||||
- };
|
||||
-
|
||||
- static void ar9003_hw_setup_calibration(struct ath_hw *ah,
|
||||
-@@ -58,6 +59,12 @@ static void ar9003_hw_setup_calibration(
|
||||
- /* Kick-off cal */
|
||||
- REG_SET_BIT(ah, AR_PHY_TIMING4, AR_PHY_TIMING4_DO_CAL);
|
||||
- break;
|
||||
-+ case TEMP_COMP_CAL:
|
||||
-+ ath_dbg(common, CALIBRATE,
|
||||
-+ "starting Temperature Compensation Calibration\n");
|
||||
-+ REG_SET_BIT(ah, AR_CH0_THERM, AR_CH0_THERM_LOCAL);
|
||||
-+ REG_SET_BIT(ah, AR_CH0_THERM, AR_CH0_THERM_START);
|
||||
-+ break;
|
||||
- default:
|
||||
- ath_err(common, "Invalid calibration type\n");
|
||||
- break;
|
||||
-@@ -86,7 +93,8 @@ static bool ar9003_hw_per_calibration(st
|
||||
- /*
|
||||
- * Accumulate cal measures for active chains
|
||||
- */
|
||||
-- cur_caldata->calCollect(ah);
|
||||
-+ if (cur_caldata->calCollect)
|
||||
-+ cur_caldata->calCollect(ah);
|
||||
- ah->cal_samples++;
|
||||
-
|
||||
- if (ah->cal_samples >= cur_caldata->calNumSamples) {
|
||||
-@@ -99,7 +107,8 @@ static bool ar9003_hw_per_calibration(st
|
||||
- /*
|
||||
- * Process accumulated data
|
||||
- */
|
||||
-- cur_caldata->calPostProc(ah, numChains);
|
||||
-+ if (cur_caldata->calPostProc)
|
||||
-+ cur_caldata->calPostProc(ah, numChains);
|
||||
-
|
||||
- /* Calibration has finished. */
|
||||
- caldata->CalValid |= cur_caldata->calType;
|
||||
-@@ -314,9 +323,16 @@ static const struct ath9k_percal_data iq
|
||||
- ar9003_hw_iqcalibrate
|
||||
- };
|
||||
-
|
||||
-+static const struct ath9k_percal_data temp_cal_single_sample = {
|
||||
-+ TEMP_COMP_CAL,
|
||||
-+ MIN_CAL_SAMPLES,
|
||||
-+ PER_MAX_LOG_COUNT,
|
||||
-+};
|
||||
-+
|
||||
- static void ar9003_hw_init_cal_settings(struct ath_hw *ah)
|
||||
- {
|
||||
- ah->iq_caldata.calData = &iq_cal_single_sample;
|
||||
-+ ah->temp_caldata.calData = &temp_cal_single_sample;
|
||||
-
|
||||
- if (AR_SREV_9300_20_OR_LATER(ah)) {
|
||||
- ah->enabled_cals |= TX_IQ_CAL;
|
||||
-@@ -324,7 +340,7 @@ static void ar9003_hw_init_cal_settings(
|
||||
- ah->enabled_cals |= TX_IQ_ON_AGC_CAL;
|
||||
- }
|
||||
-
|
||||
-- ah->supp_cals = IQ_MISMATCH_CAL;
|
||||
-+ ah->supp_cals = IQ_MISMATCH_CAL | TEMP_COMP_CAL;
|
||||
- }
|
||||
-
|
||||
- #define OFF_UPPER_LT 24
|
||||
-@@ -1383,6 +1399,9 @@ static void ar9003_hw_init_cal_common(st
|
||||
- INIT_CAL(&ah->iq_caldata);
|
||||
- INSERT_CAL(ah, &ah->iq_caldata);
|
||||
-
|
||||
-+ INIT_CAL(&ah->temp_caldata);
|
||||
-+ INSERT_CAL(ah, &ah->temp_caldata);
|
||||
-+
|
||||
- /* Initialize current pointer to first element in list */
|
||||
- ah->cal_list_curr = ah->cal_list;
|
||||
-
|
||||
---- a/drivers/net/wireless/ath/ath9k/hw.h
|
||||
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
||||
-@@ -830,6 +830,7 @@ struct ath_hw {
|
||||
- /* Calibration */
|
||||
- u32 supp_cals;
|
||||
- struct ath9k_cal_list iq_caldata;
|
||||
-+ struct ath9k_cal_list temp_caldata;
|
||||
- struct ath9k_cal_list adcgain_caldata;
|
||||
- struct ath9k_cal_list adcdc_caldata;
|
||||
- struct ath9k_cal_list *cal_list;
|
||||
diff --git a/package/kernel/mac80211/patches/542-ath9k_debugfs_diag.patch b/package/kernel/mac80211/patches/542-ath9k_debugfs_diag.patch
|
||||
index 461564350feb43410e5c702a8a67514cdfaa3961..6edef0975431165285a7b937442b5d89b362c807 100644
|
||||
--- a/package/kernel/mac80211/patches/542-ath9k_debugfs_diag.patch
|
||||
+++ b/package/kernel/mac80211/patches/542-ath9k_debugfs_diag.patch
|
||||
@@ -84,7 +84,7 @@
|
||||
bool reset_power_on;
|
||||
bool htc_reset_init;
|
||||
|
||||
-@@ -1068,6 +1076,7 @@ void ath9k_hw_check_nav(struct ath_hw *a
|
||||
+@@ -1067,6 +1075,7 @@ void ath9k_hw_check_nav(struct ath_hw *a
|
||||
bool ath9k_hw_check_alive(struct ath_hw *ah);
|
||||
|
||||
bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode);
|
@ -1,885 +0,0 @@
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Thu, 13 Oct 2016 10:01:19 +0200
|
||||
Subject: ath9k: remove intermediate queueing patch until it is fixed properly
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
Backport of LEDE 04a69843198f2252992812e35ac05016db4a1a94
|
||||
|
||||
diff --git a/package/kernel/mac80211/patches/320-ath9k-Switch-to-using-mac80211-intermediate-software.patch b/package/kernel/mac80211/patches/320-ath9k-Switch-to-using-mac80211-intermediate-software.patch
|
||||
deleted file mode 100644
|
||||
index f8b8f86e03ba0786ef410db31d6de2ab691430bd..0000000000000000000000000000000000000000
|
||||
--- a/package/kernel/mac80211/patches/320-ath9k-Switch-to-using-mac80211-intermediate-software.patch
|
||||
+++ /dev/null
|
||||
@@ -1,871 +0,0 @@
|
||||
-From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= <toke@toke.dk>
|
||||
-Date: Wed, 6 Jul 2016 21:34:17 +0200
|
||||
-Subject: [PATCH] ath9k: Switch to using mac80211 intermediate software queues.
|
||||
-MIME-Version: 1.0
|
||||
-Content-Type: text/plain; charset=UTF-8
|
||||
-Content-Transfer-Encoding: 8bit
|
||||
-
|
||||
-This switches ath9k over to using the mac80211 intermediate software
|
||||
-queueing mechanism for data packets. It removes the queueing inside the
|
||||
-driver, except for the retry queue, and instead pulls from mac80211 when
|
||||
-a packet is needed. The retry queue is used to store a packet that was
|
||||
-pulled but can't be sent immediately.
|
||||
-
|
||||
-The old code path in ath_tx_start that would queue packets has been
|
||||
-removed completely, as has the qlen limit tunables (since there's no
|
||||
-longer a queue in the driver to limit).
|
||||
-
|
||||
-Based on Tim's original patch set, but reworked quite thoroughly.
|
||||
-
|
||||
-Cc: Tim Shepard <shep@alum.mit.edu>
|
||||
-Cc: Felix Fietkau <nbd@nbd.name>
|
||||
-Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk>
|
||||
----
|
||||
-
|
||||
---- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
-+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
-@@ -91,7 +91,6 @@ int ath_descdma_setup(struct ath_softc *
|
||||
- #define ATH_RXBUF 512
|
||||
- #define ATH_TXBUF 512
|
||||
- #define ATH_TXBUF_RESERVE 5
|
||||
--#define ATH_MAX_QDEPTH (ATH_TXBUF / 4 - ATH_TXBUF_RESERVE)
|
||||
- #define ATH_TXMAXTRY 13
|
||||
- #define ATH_MAX_SW_RETRIES 30
|
||||
-
|
||||
-@@ -145,7 +144,9 @@ int ath_descdma_setup(struct ath_softc *
|
||||
- #define BAW_WITHIN(_start, _bawsz, _seqno) \
|
||||
- ((((_seqno) - (_start)) & 4095) < (_bawsz))
|
||||
-
|
||||
--#define ATH_AN_2_TID(_an, _tidno) (&(_an)->tid[(_tidno)])
|
||||
-+#define ATH_STA_2_TID(_sta, _tidno) ((struct ath_atx_tid *)(_sta)->txq[_tidno]->drv_priv)
|
||||
-+#define ATH_VIF_2_TID(_vif) ((struct ath_atx_tid *)(_vif)->txq->drv_priv)
|
||||
-+#define ATH_AN_2_TID(_an, _tidno) ((_an)->sta ? ATH_STA_2_TID((_an)->sta, _tidno) : ATH_VIF_2_TID((_an)->vif))
|
||||
-
|
||||
- #define IS_HT_RATE(rate) (rate & 0x80)
|
||||
- #define IS_CCK_RATE(rate) ((rate >= 0x18) && (rate <= 0x1e))
|
||||
-@@ -164,7 +165,6 @@ struct ath_txq {
|
||||
- spinlock_t axq_lock;
|
||||
- u32 axq_depth;
|
||||
- u32 axq_ampdu_depth;
|
||||
-- bool stopped;
|
||||
- bool axq_tx_inprogress;
|
||||
- struct list_head txq_fifo[ATH_TXFIFO_DEPTH];
|
||||
- u8 txq_headidx;
|
||||
-@@ -232,7 +232,6 @@ struct ath_buf {
|
||||
-
|
||||
- struct ath_atx_tid {
|
||||
- struct list_head list;
|
||||
-- struct sk_buff_head buf_q;
|
||||
- struct sk_buff_head retry_q;
|
||||
- struct ath_node *an;
|
||||
- struct ath_txq *txq;
|
||||
-@@ -247,13 +246,13 @@ struct ath_atx_tid {
|
||||
- s8 bar_index;
|
||||
- bool active;
|
||||
- bool clear_ps_filter;
|
||||
-+ bool has_queued;
|
||||
- };
|
||||
-
|
||||
- struct ath_node {
|
||||
- struct ath_softc *sc;
|
||||
- struct ieee80211_sta *sta; /* station struct we're part of */
|
||||
- struct ieee80211_vif *vif; /* interface with which we're associated */
|
||||
-- struct ath_atx_tid tid[IEEE80211_NUM_TIDS];
|
||||
-
|
||||
- u16 maxampdu;
|
||||
- u8 mpdudensity;
|
||||
-@@ -276,7 +275,6 @@ struct ath_tx_control {
|
||||
- struct ath_node *an;
|
||||
- struct ieee80211_sta *sta;
|
||||
- u8 paprd;
|
||||
-- bool force_channel;
|
||||
- };
|
||||
-
|
||||
-
|
||||
-@@ -293,7 +291,6 @@ struct ath_tx {
|
||||
- struct ath_descdma txdma;
|
||||
- struct ath_txq *txq_map[IEEE80211_NUM_ACS];
|
||||
- struct ath_txq *uapsdq;
|
||||
-- u32 txq_max_pending[IEEE80211_NUM_ACS];
|
||||
- u16 max_aggr_framelen[IEEE80211_NUM_ACS][4][32];
|
||||
- };
|
||||
-
|
||||
-@@ -585,6 +582,7 @@ void ath9k_release_buffered_frames(struc
|
||||
- u16 tids, int nframes,
|
||||
- enum ieee80211_frame_release_type reason,
|
||||
- bool more_data);
|
||||
-+void ath9k_wake_tx_queue(struct ieee80211_hw *hw, struct ieee80211_txq *queue);
|
||||
-
|
||||
- /********/
|
||||
- /* VIFs */
|
||||
---- a/drivers/net/wireless/ath/ath9k/channel.c
|
||||
-+++ b/drivers/net/wireless/ath/ath9k/channel.c
|
||||
-@@ -1007,7 +1007,6 @@ static void ath_scan_send_probe(struct a
|
||||
- goto error;
|
||||
-
|
||||
- txctl.txq = sc->tx.txq_map[IEEE80211_AC_VO];
|
||||
-- txctl.force_channel = true;
|
||||
- if (ath_tx_start(sc->hw, skb, &txctl))
|
||||
- goto error;
|
||||
-
|
||||
-@@ -1130,7 +1129,6 @@ ath_chanctx_send_vif_ps_frame(struct ath
|
||||
- memset(&txctl, 0, sizeof(txctl));
|
||||
- txctl.txq = sc->tx.txq_map[IEEE80211_AC_VO];
|
||||
- txctl.sta = sta;
|
||||
-- txctl.force_channel = true;
|
||||
- if (ath_tx_start(sc->hw, skb, &txctl)) {
|
||||
- ieee80211_free_txskb(sc->hw, skb);
|
||||
- return false;
|
||||
---- a/drivers/net/wireless/ath/ath9k/debug.c
|
||||
-+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
||||
-@@ -600,7 +600,6 @@ static int read_file_xmit(struct seq_fil
|
||||
- PR("MPDUs XRetried: ", xretries);
|
||||
- PR("Aggregates: ", a_aggr);
|
||||
- PR("AMPDUs Queued HW:", a_queued_hw);
|
||||
-- PR("AMPDUs Queued SW:", a_queued_sw);
|
||||
- PR("AMPDUs Completed:", a_completed);
|
||||
- PR("AMPDUs Retried: ", a_retries);
|
||||
- PR("AMPDUs XRetried: ", a_xretries);
|
||||
-@@ -629,8 +628,7 @@ static void print_queue(struct ath_softc
|
||||
- seq_printf(file, "%s: %d ", "qnum", txq->axq_qnum);
|
||||
- seq_printf(file, "%s: %2d ", "qdepth", txq->axq_depth);
|
||||
- seq_printf(file, "%s: %2d ", "ampdu-depth", txq->axq_ampdu_depth);
|
||||
-- seq_printf(file, "%s: %3d ", "pending", txq->pending_frames);
|
||||
-- seq_printf(file, "%s: %d\n", "stopped", txq->stopped);
|
||||
-+ seq_printf(file, "%s: %3d\n", "pending", txq->pending_frames);
|
||||
-
|
||||
- ath_txq_unlock(sc, txq);
|
||||
- }
|
||||
-@@ -1208,7 +1206,6 @@ static const char ath9k_gstrings_stats[]
|
||||
- AMKSTR(d_tx_mpdu_xretries),
|
||||
- AMKSTR(d_tx_aggregates),
|
||||
- AMKSTR(d_tx_ampdus_queued_hw),
|
||||
-- AMKSTR(d_tx_ampdus_queued_sw),
|
||||
- AMKSTR(d_tx_ampdus_completed),
|
||||
- AMKSTR(d_tx_ampdu_retries),
|
||||
- AMKSTR(d_tx_ampdu_xretries),
|
||||
-@@ -1288,7 +1285,6 @@ void ath9k_get_et_stats(struct ieee80211
|
||||
- AWDATA(xretries);
|
||||
- AWDATA(a_aggr);
|
||||
- AWDATA(a_queued_hw);
|
||||
-- AWDATA(a_queued_sw);
|
||||
- AWDATA(a_completed);
|
||||
- AWDATA(a_retries);
|
||||
- AWDATA(a_xretries);
|
||||
-@@ -1346,14 +1342,6 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
- read_file_xmit);
|
||||
- debugfs_create_devm_seqfile(sc->dev, "queues", sc->debug.debugfs_phy,
|
||||
- read_file_queues);
|
||||
-- debugfs_create_u32("qlen_bk", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
|
||||
-- &sc->tx.txq_max_pending[IEEE80211_AC_BK]);
|
||||
-- debugfs_create_u32("qlen_be", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
|
||||
-- &sc->tx.txq_max_pending[IEEE80211_AC_BE]);
|
||||
-- debugfs_create_u32("qlen_vi", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
|
||||
-- &sc->tx.txq_max_pending[IEEE80211_AC_VI]);
|
||||
-- debugfs_create_u32("qlen_vo", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
|
||||
-- &sc->tx.txq_max_pending[IEEE80211_AC_VO]);
|
||||
- debugfs_create_devm_seqfile(sc->dev, "misc", sc->debug.debugfs_phy,
|
||||
- read_file_misc);
|
||||
- debugfs_create_devm_seqfile(sc->dev, "reset", sc->debug.debugfs_phy,
|
||||
---- a/drivers/net/wireless/ath/ath9k/debug.h
|
||||
-+++ b/drivers/net/wireless/ath/ath9k/debug.h
|
||||
-@@ -147,7 +147,6 @@ struct ath_interrupt_stats {
|
||||
- * @completed: Total MPDUs (non-aggr) completed
|
||||
- * @a_aggr: Total no. of aggregates queued
|
||||
- * @a_queued_hw: Total AMPDUs queued to hardware
|
||||
-- * @a_queued_sw: Total AMPDUs queued to software queues
|
||||
- * @a_completed: Total AMPDUs completed
|
||||
- * @a_retries: No. of AMPDUs retried (SW)
|
||||
- * @a_xretries: No. of AMPDUs dropped due to xretries
|
||||
-@@ -174,7 +173,6 @@ struct ath_tx_stats {
|
||||
- u32 xretries;
|
||||
- u32 a_aggr;
|
||||
- u32 a_queued_hw;
|
||||
-- u32 a_queued_sw;
|
||||
- u32 a_completed;
|
||||
- u32 a_retries;
|
||||
- u32 a_xretries;
|
||||
---- a/drivers/net/wireless/ath/ath9k/debug_sta.c
|
||||
-+++ b/drivers/net/wireless/ath/ath9k/debug_sta.c
|
||||
-@@ -52,8 +52,8 @@ static ssize_t read_file_node_aggr(struc
|
||||
- "TID", "SEQ_START", "SEQ_NEXT", "BAW_SIZE",
|
||||
- "BAW_HEAD", "BAW_TAIL", "BAR_IDX", "SCHED", "PAUSED");
|
||||
-
|
||||
-- for (tidno = 0, tid = &an->tid[tidno];
|
||||
-- tidno < IEEE80211_NUM_TIDS; tidno++, tid++) {
|
||||
-+ for (tidno = 0; tidno < IEEE80211_NUM_TIDS; tidno++) {
|
||||
-+ tid = ATH_STA_2_TID(an->sta, tidno);
|
||||
- txq = tid->txq;
|
||||
- ath_txq_lock(sc, txq);
|
||||
- if (tid->active) {
|
||||
---- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
-+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
-@@ -358,7 +358,6 @@ static int ath9k_init_queues(struct ath_
|
||||
- for (i = 0; i < IEEE80211_NUM_ACS; i++) {
|
||||
- sc->tx.txq_map[i] = ath_txq_setup(sc, ATH9K_TX_QUEUE_DATA, i);
|
||||
- sc->tx.txq_map[i]->mac80211_qnum = i;
|
||||
-- sc->tx.txq_max_pending[i] = ATH_MAX_QDEPTH;
|
||||
- }
|
||||
- return 0;
|
||||
- }
|
||||
-@@ -873,6 +872,7 @@ static void ath9k_set_hw_capab(struct at
|
||||
- hw->max_rate_tries = 10;
|
||||
- hw->sta_data_size = sizeof(struct ath_node);
|
||||
- hw->vif_data_size = sizeof(struct ath_vif);
|
||||
-+ hw->txq_data_size = sizeof(struct ath_atx_tid);
|
||||
- hw->extra_tx_headroom = 4;
|
||||
-
|
||||
- hw->wiphy->available_antennas_rx = BIT(ah->caps.max_rxchains) - 1;
|
||||
---- a/drivers/net/wireless/ath/ath9k/main.c
|
||||
-+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||
-@@ -2695,4 +2695,5 @@ struct ieee80211_ops ath9k_ops = {
|
||||
- .sw_scan_start = ath9k_sw_scan_start,
|
||||
- .sw_scan_complete = ath9k_sw_scan_complete,
|
||||
- .get_txpower = ath9k_get_txpower,
|
||||
-+ .wake_tx_queue = ath9k_wake_tx_queue,
|
||||
- };
|
||||
---- a/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
-+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
-@@ -65,6 +65,8 @@ static struct ath_buf *ath_tx_setup_buff
|
||||
- struct ath_txq *txq,
|
||||
- struct ath_atx_tid *tid,
|
||||
- struct sk_buff *skb);
|
||||
-+static int ath_tx_prepare(struct ieee80211_hw *hw, struct sk_buff *skb,
|
||||
-+ struct ath_tx_control *txctl);
|
||||
-
|
||||
- enum {
|
||||
- MCS_HT20,
|
||||
-@@ -118,6 +120,26 @@ static void ath_tx_queue_tid(struct ath_
|
||||
- list_add_tail(&tid->list, list);
|
||||
- }
|
||||
-
|
||||
-+void ath9k_wake_tx_queue(struct ieee80211_hw *hw, struct ieee80211_txq *queue)
|
||||
-+{
|
||||
-+ struct ath_softc *sc = hw->priv;
|
||||
-+ struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
||||
-+ struct ath_atx_tid *tid = (struct ath_atx_tid *) queue->drv_priv;
|
||||
-+ struct ath_txq *txq = tid->txq;
|
||||
-+
|
||||
-+ ath_dbg(common, QUEUE, "Waking TX queue: %pM (%d)\n",
|
||||
-+ queue->sta ? queue->sta->addr : queue->vif->addr,
|
||||
-+ tid->tidno);
|
||||
-+
|
||||
-+ ath_txq_lock(sc, txq);
|
||||
-+
|
||||
-+ tid->has_queued = true;
|
||||
-+ ath_tx_queue_tid(sc, txq, tid);
|
||||
-+ ath_txq_schedule(sc, txq);
|
||||
-+
|
||||
-+ ath_txq_unlock(sc, txq);
|
||||
-+}
|
||||
-+
|
||||
- static struct ath_frame_info *get_frame_info(struct sk_buff *skb)
|
||||
- {
|
||||
- struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
|
||||
-@@ -160,7 +182,6 @@ static void ath_set_rates(struct ieee802
|
||||
- static void ath_txq_skb_done(struct ath_softc *sc, struct ath_txq *txq,
|
||||
- struct sk_buff *skb)
|
||||
- {
|
||||
-- struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
|
||||
- struct ath_frame_info *fi = get_frame_info(skb);
|
||||
- int q = fi->txq;
|
||||
-
|
||||
-@@ -171,14 +192,6 @@ static void ath_txq_skb_done(struct ath_
|
||||
- if (WARN_ON(--txq->pending_frames < 0))
|
||||
- txq->pending_frames = 0;
|
||||
-
|
||||
-- if (txq->stopped &&
|
||||
-- txq->pending_frames < sc->tx.txq_max_pending[q]) {
|
||||
-- if (ath9k_is_chanctx_enabled())
|
||||
-- ieee80211_wake_queue(sc->hw, info->hw_queue);
|
||||
-- else
|
||||
-- ieee80211_wake_queue(sc->hw, q);
|
||||
-- txq->stopped = false;
|
||||
-- }
|
||||
- }
|
||||
-
|
||||
- static struct ath_atx_tid *
|
||||
-@@ -188,9 +201,47 @@ ath_get_skb_tid(struct ath_softc *sc, st
|
||||
- return ATH_AN_2_TID(an, tidno);
|
||||
- }
|
||||
-
|
||||
-+static struct sk_buff *
|
||||
-+ath_tid_pull(struct ath_atx_tid *tid)
|
||||
-+{
|
||||
-+ struct ath_softc *sc = tid->an->sc;
|
||||
-+ struct ieee80211_hw *hw = sc->hw;
|
||||
-+ struct ath_tx_control txctl = {
|
||||
-+ .txq = tid->txq,
|
||||
-+ .sta = tid->an->sta,
|
||||
-+ };
|
||||
-+ struct sk_buff *skb;
|
||||
-+ struct ath_frame_info *fi;
|
||||
-+ int q;
|
||||
-+
|
||||
-+ if (!tid->has_queued)
|
||||
-+ return NULL;
|
||||
-+
|
||||
-+ skb = ieee80211_tx_dequeue(hw, container_of((void*)tid, struct ieee80211_txq, drv_priv));
|
||||
-+ if (!skb) {
|
||||
-+ tid->has_queued = false;
|
||||
-+ return NULL;
|
||||
-+ }
|
||||
-+
|
||||
-+ if (ath_tx_prepare(hw, skb, &txctl)) {
|
||||
-+ ieee80211_free_txskb(hw, skb);
|
||||
-+ return NULL;
|
||||
-+ }
|
||||
-+
|
||||
-+ q = skb_get_queue_mapping(skb);
|
||||
-+ if (tid->txq == sc->tx.txq_map[q]) {
|
||||
-+ fi = get_frame_info(skb);
|
||||
-+ fi->txq = q;
|
||||
-+ ++tid->txq->pending_frames;
|
||||
-+ }
|
||||
-+
|
||||
-+ return skb;
|
||||
-+ }
|
||||
-+
|
||||
-+
|
||||
- static bool ath_tid_has_buffered(struct ath_atx_tid *tid)
|
||||
- {
|
||||
-- return !skb_queue_empty(&tid->buf_q) || !skb_queue_empty(&tid->retry_q);
|
||||
-+ return !skb_queue_empty(&tid->retry_q) || tid->has_queued;
|
||||
- }
|
||||
-
|
||||
- static struct sk_buff *ath_tid_dequeue(struct ath_atx_tid *tid)
|
||||
-@@ -199,46 +250,11 @@ static struct sk_buff *ath_tid_dequeue(s
|
||||
-
|
||||
- skb = __skb_dequeue(&tid->retry_q);
|
||||
- if (!skb)
|
||||
-- skb = __skb_dequeue(&tid->buf_q);
|
||||
-+ skb = ath_tid_pull(tid);
|
||||
-
|
||||
- return skb;
|
||||
- }
|
||||
-
|
||||
--/*
|
||||
-- * ath_tx_tid_change_state:
|
||||
-- * - clears a-mpdu flag of previous session
|
||||
-- * - force sequence number allocation to fix next BlockAck Window
|
||||
-- */
|
||||
--static void
|
||||
--ath_tx_tid_change_state(struct ath_softc *sc, struct ath_atx_tid *tid)
|
||||
--{
|
||||
-- struct ath_txq *txq = tid->txq;
|
||||
-- struct ieee80211_tx_info *tx_info;
|
||||
-- struct sk_buff *skb, *tskb;
|
||||
-- struct ath_buf *bf;
|
||||
-- struct ath_frame_info *fi;
|
||||
--
|
||||
-- skb_queue_walk_safe(&tid->buf_q, skb, tskb) {
|
||||
-- fi = get_frame_info(skb);
|
||||
-- bf = fi->bf;
|
||||
--
|
||||
-- tx_info = IEEE80211_SKB_CB(skb);
|
||||
-- tx_info->flags &= ~IEEE80211_TX_CTL_AMPDU;
|
||||
--
|
||||
-- if (bf)
|
||||
-- continue;
|
||||
--
|
||||
-- bf = ath_tx_setup_buffer(sc, txq, tid, skb);
|
||||
-- if (!bf) {
|
||||
-- __skb_unlink(skb, &tid->buf_q);
|
||||
-- ath_txq_skb_done(sc, txq, skb);
|
||||
-- ieee80211_free_txskb(sc->hw, skb);
|
||||
-- continue;
|
||||
-- }
|
||||
-- }
|
||||
--
|
||||
--}
|
||||
--
|
||||
- static void ath_tx_flush_tid(struct ath_softc *sc, struct ath_atx_tid *tid)
|
||||
- {
|
||||
- struct ath_txq *txq = tid->txq;
|
||||
-@@ -873,20 +889,16 @@ static int ath_compute_num_delims(struct
|
||||
-
|
||||
- static struct ath_buf *
|
||||
- ath_tx_get_tid_subframe(struct ath_softc *sc, struct ath_txq *txq,
|
||||
-- struct ath_atx_tid *tid, struct sk_buff_head **q)
|
||||
-+ struct ath_atx_tid *tid)
|
||||
- {
|
||||
- struct ieee80211_tx_info *tx_info;
|
||||
- struct ath_frame_info *fi;
|
||||
-- struct sk_buff *skb;
|
||||
-+ struct sk_buff *skb, *first_skb = NULL;
|
||||
- struct ath_buf *bf;
|
||||
- u16 seqno;
|
||||
-
|
||||
- while (1) {
|
||||
-- *q = &tid->retry_q;
|
||||
-- if (skb_queue_empty(*q))
|
||||
-- *q = &tid->buf_q;
|
||||
--
|
||||
-- skb = skb_peek(*q);
|
||||
-+ skb = ath_tid_dequeue(tid);
|
||||
- if (!skb)
|
||||
- break;
|
||||
-
|
||||
-@@ -898,7 +910,6 @@ ath_tx_get_tid_subframe(struct ath_softc
|
||||
- bf->bf_state.stale = false;
|
||||
-
|
||||
- if (!bf) {
|
||||
-- __skb_unlink(skb, *q);
|
||||
- ath_txq_skb_done(sc, txq, skb);
|
||||
- ieee80211_free_txskb(sc->hw, skb);
|
||||
- continue;
|
||||
-@@ -927,8 +938,19 @@ ath_tx_get_tid_subframe(struct ath_softc
|
||||
- seqno = bf->bf_state.seqno;
|
||||
-
|
||||
- /* do not step over block-ack window */
|
||||
-- if (!BAW_WITHIN(tid->seq_start, tid->baw_size, seqno))
|
||||
-+ if (!BAW_WITHIN(tid->seq_start, tid->baw_size, seqno)) {
|
||||
-+ __skb_queue_tail(&tid->retry_q, skb);
|
||||
-+
|
||||
-+ /* If there are other skbs in the retry q, they are
|
||||
-+ * probably within the BAW, so loop immediately to get
|
||||
-+ * one of them. Otherwise the queue can get stuck. */
|
||||
-+ if (!skb_queue_is_first(&tid->retry_q, skb) && skb != first_skb) {
|
||||
-+ if(!first_skb) /* infinite loop prevention */
|
||||
-+ first_skb = skb;
|
||||
-+ continue;
|
||||
-+ }
|
||||
- break;
|
||||
-+ }
|
||||
-
|
||||
- if (tid->bar_index > ATH_BA_INDEX(tid->seq_start, seqno)) {
|
||||
- struct ath_tx_status ts = {};
|
||||
-@@ -936,7 +958,6 @@ ath_tx_get_tid_subframe(struct ath_softc
|
||||
-
|
||||
- INIT_LIST_HEAD(&bf_head);
|
||||
- list_add(&bf->list, &bf_head);
|
||||
-- __skb_unlink(skb, *q);
|
||||
- ath_tx_update_baw(sc, tid, seqno);
|
||||
- ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0);
|
||||
- continue;
|
||||
-@@ -948,11 +969,10 @@ ath_tx_get_tid_subframe(struct ath_softc
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
--static bool
|
||||
-+static int
|
||||
- ath_tx_form_aggr(struct ath_softc *sc, struct ath_txq *txq,
|
||||
- struct ath_atx_tid *tid, struct list_head *bf_q,
|
||||
-- struct ath_buf *bf_first, struct sk_buff_head *tid_q,
|
||||
-- int *aggr_len)
|
||||
-+ struct ath_buf *bf_first)
|
||||
- {
|
||||
- #define PADBYTES(_len) ((4 - ((_len) % 4)) % 4)
|
||||
- struct ath_buf *bf = bf_first, *bf_prev = NULL;
|
||||
-@@ -962,12 +982,13 @@ ath_tx_form_aggr(struct ath_softc *sc, s
|
||||
- struct ieee80211_tx_info *tx_info;
|
||||
- struct ath_frame_info *fi;
|
||||
- struct sk_buff *skb;
|
||||
-- bool closed = false;
|
||||
-+
|
||||
-
|
||||
- bf = bf_first;
|
||||
- aggr_limit = ath_lookup_rate(sc, bf, tid);
|
||||
-
|
||||
-- do {
|
||||
-+ while (bf)
|
||||
-+ {
|
||||
- skb = bf->bf_mpdu;
|
||||
- fi = get_frame_info(skb);
|
||||
-
|
||||
-@@ -976,12 +997,12 @@ ath_tx_form_aggr(struct ath_softc *sc, s
|
||||
- if (nframes) {
|
||||
- if (aggr_limit < al + bpad + al_delta ||
|
||||
- ath_lookup_legacy(bf) || nframes >= h_baw)
|
||||
-- break;
|
||||
-+ goto stop;
|
||||
-
|
||||
- tx_info = IEEE80211_SKB_CB(bf->bf_mpdu);
|
||||
- if ((tx_info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE) ||
|
||||
- !(tx_info->flags & IEEE80211_TX_CTL_AMPDU))
|
||||
-- break;
|
||||
-+ goto stop;
|
||||
- }
|
||||
-
|
||||
- /* add padding for previous frame to aggregation length */
|
||||
-@@ -1003,20 +1024,18 @@ ath_tx_form_aggr(struct ath_softc *sc, s
|
||||
- ath_tx_addto_baw(sc, tid, bf);
|
||||
- bf->bf_state.ndelim = ndelim;
|
||||
-
|
||||
-- __skb_unlink(skb, tid_q);
|
||||
- list_add_tail(&bf->list, bf_q);
|
||||
- if (bf_prev)
|
||||
- bf_prev->bf_next = bf;
|
||||
-
|
||||
- bf_prev = bf;
|
||||
-
|
||||
-- bf = ath_tx_get_tid_subframe(sc, txq, tid, &tid_q);
|
||||
-- if (!bf) {
|
||||
-- closed = true;
|
||||
-- break;
|
||||
-- }
|
||||
-- } while (ath_tid_has_buffered(tid));
|
||||
--
|
||||
-+ bf = ath_tx_get_tid_subframe(sc, txq, tid);
|
||||
-+ }
|
||||
-+ goto finish;
|
||||
-+stop:
|
||||
-+ __skb_queue_tail(&tid->retry_q, bf->bf_mpdu);
|
||||
-+finish:
|
||||
- bf = bf_first;
|
||||
- bf->bf_lastbf = bf_prev;
|
||||
-
|
||||
-@@ -1027,9 +1046,7 @@ ath_tx_form_aggr(struct ath_softc *sc, s
|
||||
- TX_STAT_INC(txq->axq_qnum, a_aggr);
|
||||
- }
|
||||
-
|
||||
-- *aggr_len = al;
|
||||
--
|
||||
-- return closed;
|
||||
-+ return al;
|
||||
- #undef PADBYTES
|
||||
- }
|
||||
-
|
||||
-@@ -1406,18 +1423,15 @@ static void ath_tx_fill_desc(struct ath_
|
||||
- static void
|
||||
- ath_tx_form_burst(struct ath_softc *sc, struct ath_txq *txq,
|
||||
- struct ath_atx_tid *tid, struct list_head *bf_q,
|
||||
-- struct ath_buf *bf_first, struct sk_buff_head *tid_q)
|
||||
-+ struct ath_buf *bf_first)
|
||||
- {
|
||||
- struct ath_buf *bf = bf_first, *bf_prev = NULL;
|
||||
-- struct sk_buff *skb;
|
||||
- int nframes = 0;
|
||||
-
|
||||
- do {
|
||||
- struct ieee80211_tx_info *tx_info;
|
||||
-- skb = bf->bf_mpdu;
|
||||
-
|
||||
- nframes++;
|
||||
-- __skb_unlink(skb, tid_q);
|
||||
- list_add_tail(&bf->list, bf_q);
|
||||
- if (bf_prev)
|
||||
- bf_prev->bf_next = bf;
|
||||
-@@ -1426,13 +1440,15 @@ ath_tx_form_burst(struct ath_softc *sc,
|
||||
- if (nframes >= 2)
|
||||
- break;
|
||||
-
|
||||
-- bf = ath_tx_get_tid_subframe(sc, txq, tid, &tid_q);
|
||||
-+ bf = ath_tx_get_tid_subframe(sc, txq, tid);
|
||||
- if (!bf)
|
||||
- break;
|
||||
-
|
||||
- tx_info = IEEE80211_SKB_CB(bf->bf_mpdu);
|
||||
-- if (tx_info->flags & IEEE80211_TX_CTL_AMPDU)
|
||||
-+ if (tx_info->flags & IEEE80211_TX_CTL_AMPDU) {
|
||||
-+ __skb_queue_tail(&tid->retry_q, bf->bf_mpdu);
|
||||
- break;
|
||||
-+ }
|
||||
-
|
||||
- ath_set_rates(tid->an->vif, tid->an->sta, bf, false);
|
||||
- } while (1);
|
||||
-@@ -1443,34 +1459,33 @@ static bool ath_tx_sched_aggr(struct ath
|
||||
- {
|
||||
- struct ath_buf *bf;
|
||||
- struct ieee80211_tx_info *tx_info;
|
||||
-- struct sk_buff_head *tid_q;
|
||||
- struct list_head bf_q;
|
||||
- int aggr_len = 0;
|
||||
-- bool aggr, last = true;
|
||||
-+ bool aggr;
|
||||
-
|
||||
- if (!ath_tid_has_buffered(tid))
|
||||
- return false;
|
||||
-
|
||||
- INIT_LIST_HEAD(&bf_q);
|
||||
-
|
||||
-- bf = ath_tx_get_tid_subframe(sc, txq, tid, &tid_q);
|
||||
-+ bf = ath_tx_get_tid_subframe(sc, txq, tid);
|
||||
- if (!bf)
|
||||
- return false;
|
||||
-
|
||||
- tx_info = IEEE80211_SKB_CB(bf->bf_mpdu);
|
||||
- aggr = !!(tx_info->flags & IEEE80211_TX_CTL_AMPDU);
|
||||
- if ((aggr && txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH) ||
|
||||
-- (!aggr && txq->axq_depth >= ATH_NON_AGGR_MIN_QDEPTH)) {
|
||||
-+ (!aggr && txq->axq_depth >= ATH_NON_AGGR_MIN_QDEPTH)) {
|
||||
-+ __skb_queue_tail(&tid->retry_q, bf->bf_mpdu);
|
||||
- *stop = true;
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
- ath_set_rates(tid->an->vif, tid->an->sta, bf, false);
|
||||
- if (aggr)
|
||||
-- last = ath_tx_form_aggr(sc, txq, tid, &bf_q, bf,
|
||||
-- tid_q, &aggr_len);
|
||||
-+ aggr_len = ath_tx_form_aggr(sc, txq, tid, &bf_q, bf);
|
||||
- else
|
||||
-- ath_tx_form_burst(sc, txq, tid, &bf_q, bf, tid_q);
|
||||
-+ ath_tx_form_burst(sc, txq, tid, &bf_q, bf);
|
||||
-
|
||||
- if (list_empty(&bf_q))
|
||||
- return false;
|
||||
-@@ -1513,9 +1528,6 @@ int ath_tx_aggr_start(struct ath_softc *
|
||||
- an->mpdudensity = density;
|
||||
- }
|
||||
-
|
||||
-- /* force sequence number allocation for pending frames */
|
||||
-- ath_tx_tid_change_state(sc, txtid);
|
||||
--
|
||||
- txtid->active = true;
|
||||
- *ssn = txtid->seq_start = txtid->seq_next;
|
||||
- txtid->bar_index = -1;
|
||||
-@@ -1540,7 +1552,6 @@ void ath_tx_aggr_stop(struct ath_softc *
|
||||
- ath_txq_lock(sc, txq);
|
||||
- txtid->active = false;
|
||||
- ath_tx_flush_tid(sc, txtid);
|
||||
-- ath_tx_tid_change_state(sc, txtid);
|
||||
- ath_txq_unlock_complete(sc, txq);
|
||||
- }
|
||||
-
|
||||
-@@ -1550,14 +1561,12 @@ void ath_tx_aggr_sleep(struct ieee80211_
|
||||
- struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
||||
- struct ath_atx_tid *tid;
|
||||
- struct ath_txq *txq;
|
||||
-- bool buffered;
|
||||
- int tidno;
|
||||
-
|
||||
- ath_dbg(common, XMIT, "%s called\n", __func__);
|
||||
-
|
||||
-- for (tidno = 0, tid = &an->tid[tidno];
|
||||
-- tidno < IEEE80211_NUM_TIDS; tidno++, tid++) {
|
||||
--
|
||||
-+ for (tidno = 0; tidno < IEEE80211_NUM_TIDS; tidno++) {
|
||||
-+ tid = ATH_AN_2_TID(an, tidno);
|
||||
- txq = tid->txq;
|
||||
-
|
||||
- ath_txq_lock(sc, txq);
|
||||
-@@ -1567,13 +1576,12 @@ void ath_tx_aggr_sleep(struct ieee80211_
|
||||
- continue;
|
||||
- }
|
||||
-
|
||||
-- buffered = ath_tid_has_buffered(tid);
|
||||
-+ if (!skb_queue_empty(&tid->retry_q))
|
||||
-+ ieee80211_sta_set_buffered(sta, tid->tidno, true);
|
||||
-
|
||||
- list_del_init(&tid->list);
|
||||
-
|
||||
- ath_txq_unlock(sc, txq);
|
||||
--
|
||||
-- ieee80211_sta_set_buffered(sta, tidno, buffered);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
-@@ -1586,19 +1594,16 @@ void ath_tx_aggr_wakeup(struct ath_softc
|
||||
-
|
||||
- ath_dbg(common, XMIT, "%s called\n", __func__);
|
||||
-
|
||||
-- for (tidno = 0, tid = &an->tid[tidno];
|
||||
-- tidno < IEEE80211_NUM_TIDS; tidno++, tid++) {
|
||||
--
|
||||
-+ for (tidno = 0; tidno < IEEE80211_NUM_TIDS; tidno++) {
|
||||
-+ tid = ATH_AN_2_TID(an, tidno);
|
||||
- txq = tid->txq;
|
||||
-
|
||||
- ath_txq_lock(sc, txq);
|
||||
- tid->clear_ps_filter = true;
|
||||
--
|
||||
- if (ath_tid_has_buffered(tid)) {
|
||||
- ath_tx_queue_tid(sc, txq, tid);
|
||||
- ath_txq_schedule(sc, txq);
|
||||
- }
|
||||
--
|
||||
- ath_txq_unlock_complete(sc, txq);
|
||||
- }
|
||||
- }
|
||||
-@@ -1621,11 +1626,6 @@ void ath_tx_aggr_resume(struct ath_softc
|
||||
-
|
||||
- tid->baw_size = IEEE80211_MIN_AMPDU_BUF << sta->ht_cap.ampdu_factor;
|
||||
-
|
||||
-- if (ath_tid_has_buffered(tid)) {
|
||||
-- ath_tx_queue_tid(sc, txq, tid);
|
||||
-- ath_txq_schedule(sc, txq);
|
||||
-- }
|
||||
--
|
||||
- ath_txq_unlock_complete(sc, txq);
|
||||
- }
|
||||
-
|
||||
-@@ -1641,7 +1641,6 @@ void ath9k_release_buffered_frames(struc
|
||||
- struct ieee80211_tx_info *info;
|
||||
- struct list_head bf_q;
|
||||
- struct ath_buf *bf_tail = NULL, *bf;
|
||||
-- struct sk_buff_head *tid_q;
|
||||
- int sent = 0;
|
||||
- int i;
|
||||
-
|
||||
-@@ -1656,11 +1655,10 @@ void ath9k_release_buffered_frames(struc
|
||||
-
|
||||
- ath_txq_lock(sc, tid->txq);
|
||||
- while (nframes > 0) {
|
||||
-- bf = ath_tx_get_tid_subframe(sc, sc->tx.uapsdq, tid, &tid_q);
|
||||
-+ bf = ath_tx_get_tid_subframe(sc, sc->tx.uapsdq, tid);
|
||||
- if (!bf)
|
||||
- break;
|
||||
-
|
||||
-- __skb_unlink(bf->bf_mpdu, tid_q);
|
||||
- list_add_tail(&bf->list, &bf_q);
|
||||
- ath_set_rates(tid->an->vif, tid->an->sta, bf, true);
|
||||
- if (bf_isampdu(bf)) {
|
||||
-@@ -1675,7 +1673,7 @@ void ath9k_release_buffered_frames(struc
|
||||
- sent++;
|
||||
- TX_STAT_INC(txq->axq_qnum, a_queued_hw);
|
||||
-
|
||||
-- if (an->sta && !ath_tid_has_buffered(tid))
|
||||
-+ if (an->sta && skb_queue_empty(&tid->retry_q))
|
||||
- ieee80211_sta_set_buffered(an->sta, i, false);
|
||||
- }
|
||||
- ath_txq_unlock_complete(sc, tid->txq);
|
||||
-@@ -1902,13 +1900,7 @@ bool ath_drain_all_txq(struct ath_softc
|
||||
- if (!ATH_TXQ_SETUP(sc, i))
|
||||
- continue;
|
||||
-
|
||||
-- /*
|
||||
-- * The caller will resume queues with ieee80211_wake_queues.
|
||||
-- * Mark the queue as not stopped to prevent ath_tx_complete
|
||||
-- * from waking the queue too early.
|
||||
-- */
|
||||
- txq = &sc->tx.txq[i];
|
||||
-- txq->stopped = false;
|
||||
- ath_draintxq(sc, txq);
|
||||
- }
|
||||
-
|
||||
-@@ -2308,15 +2300,12 @@ int ath_tx_start(struct ieee80211_hw *hw
|
||||
- struct ath_txq *txq = txctl->txq;
|
||||
- struct ath_atx_tid *tid = NULL;
|
||||
- struct ath_buf *bf;
|
||||
-- bool queue, ps_resp;
|
||||
-+ bool ps_resp;
|
||||
- int q, ret;
|
||||
-
|
||||
- if (vif)
|
||||
- avp = (void *)vif->drv_priv;
|
||||
-
|
||||
-- if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN)
|
||||
-- txctl->force_channel = true;
|
||||
--
|
||||
- ps_resp = !!(info->control.flags & IEEE80211_TX_CTRL_PS_RESPONSE);
|
||||
-
|
||||
- ret = ath_tx_prepare(hw, skb, txctl);
|
||||
-@@ -2331,63 +2320,13 @@ int ath_tx_start(struct ieee80211_hw *hw
|
||||
-
|
||||
- q = skb_get_queue_mapping(skb);
|
||||
-
|
||||
-+ if (ps_resp)
|
||||
-+ txq = sc->tx.uapsdq;
|
||||
-+
|
||||
- ath_txq_lock(sc, txq);
|
||||
- if (txq == sc->tx.txq_map[q]) {
|
||||
- fi->txq = q;
|
||||
-- if (++txq->pending_frames > sc->tx.txq_max_pending[q] &&
|
||||
-- !txq->stopped) {
|
||||
-- if (ath9k_is_chanctx_enabled())
|
||||
-- ieee80211_stop_queue(sc->hw, info->hw_queue);
|
||||
-- else
|
||||
-- ieee80211_stop_queue(sc->hw, q);
|
||||
-- txq->stopped = true;
|
||||
-- }
|
||||
-- }
|
||||
--
|
||||
-- queue = ieee80211_is_data_present(hdr->frame_control);
|
||||
--
|
||||
-- /* If chanctx, queue all null frames while NOA could be there */
|
||||
-- if (ath9k_is_chanctx_enabled() &&
|
||||
-- ieee80211_is_nullfunc(hdr->frame_control) &&
|
||||
-- !txctl->force_channel)
|
||||
-- queue = true;
|
||||
--
|
||||
-- /* Force queueing of all frames that belong to a virtual interface on
|
||||
-- * a different channel context, to ensure that they are sent on the
|
||||
-- * correct channel.
|
||||
-- */
|
||||
-- if (((avp && avp->chanctx != sc->cur_chan) ||
|
||||
-- sc->cur_chan->stopped) && !txctl->force_channel) {
|
||||
-- if (!txctl->an)
|
||||
-- txctl->an = &avp->mcast_node;
|
||||
-- queue = true;
|
||||
-- ps_resp = false;
|
||||
-- }
|
||||
--
|
||||
-- if (txctl->an && queue)
|
||||
-- tid = ath_get_skb_tid(sc, txctl->an, skb);
|
||||
--
|
||||
-- if (ps_resp) {
|
||||
-- ath_txq_unlock(sc, txq);
|
||||
-- txq = sc->tx.uapsdq;
|
||||
-- ath_txq_lock(sc, txq);
|
||||
-- } else if (txctl->an && queue) {
|
||||
-- WARN_ON(tid->txq != txctl->txq);
|
||||
--
|
||||
-- if (info->flags & IEEE80211_TX_CTL_CLEAR_PS_FILT)
|
||||
-- tid->clear_ps_filter = true;
|
||||
--
|
||||
-- /*
|
||||
-- * Add this frame to software queue for scheduling later
|
||||
-- * for aggregation.
|
||||
-- */
|
||||
-- TX_STAT_INC(txq->axq_qnum, a_queued_sw);
|
||||
-- __skb_queue_tail(&tid->buf_q, skb);
|
||||
-- if (!txctl->an->sleeping)
|
||||
-- ath_tx_queue_tid(sc, txq, tid);
|
||||
--
|
||||
-- ath_txq_schedule(sc, txq);
|
||||
-- goto out;
|
||||
-+ ++txq->pending_frames;
|
||||
- }
|
||||
-
|
||||
- bf = ath_tx_setup_buffer(sc, txq, tid, skb);
|
||||
-@@ -2871,9 +2810,8 @@ void ath_tx_node_init(struct ath_softc *
|
||||
- struct ath_atx_tid *tid;
|
||||
- int tidno, acno;
|
||||
-
|
||||
-- for (tidno = 0, tid = &an->tid[tidno];
|
||||
-- tidno < IEEE80211_NUM_TIDS;
|
||||
-- tidno++, tid++) {
|
||||
-+ for (tidno = 0; tidno < IEEE80211_NUM_TIDS; tidno++) {
|
||||
-+ tid = ATH_AN_2_TID(an, tidno);
|
||||
- tid->an = an;
|
||||
- tid->tidno = tidno;
|
||||
- tid->seq_start = tid->seq_next = 0;
|
||||
-@@ -2881,11 +2819,14 @@ void ath_tx_node_init(struct ath_softc *
|
||||
- tid->baw_head = tid->baw_tail = 0;
|
||||
- tid->active = false;
|
||||
- tid->clear_ps_filter = true;
|
||||
-- __skb_queue_head_init(&tid->buf_q);
|
||||
-+ tid->has_queued = false;
|
||||
- __skb_queue_head_init(&tid->retry_q);
|
||||
- INIT_LIST_HEAD(&tid->list);
|
||||
- acno = TID_TO_WME_AC(tidno);
|
||||
- tid->txq = sc->tx.txq_map[acno];
|
||||
-+
|
||||
-+ if (!an->sta)
|
||||
-+ break; /* just one multicast ath_atx_tid */
|
||||
- }
|
||||
- }
|
||||
-
|
||||
-@@ -2895,9 +2836,8 @@ void ath_tx_node_cleanup(struct ath_soft
|
||||
- struct ath_txq *txq;
|
||||
- int tidno;
|
||||
-
|
||||
-- for (tidno = 0, tid = &an->tid[tidno];
|
||||
-- tidno < IEEE80211_NUM_TIDS; tidno++, tid++) {
|
||||
--
|
||||
-+ for (tidno = 0; tidno < IEEE80211_NUM_TIDS; tidno++) {
|
||||
-+ tid = ATH_AN_2_TID(an, tidno);
|
||||
- txq = tid->txq;
|
||||
-
|
||||
- ath_txq_lock(sc, txq);
|
||||
-@@ -2909,6 +2849,9 @@ void ath_tx_node_cleanup(struct ath_soft
|
||||
- tid->active = false;
|
||||
-
|
||||
- ath_txq_unlock(sc, txq);
|
||||
-+
|
||||
-+ if (!an->sta)
|
||||
-+ break; /* just one multicast ath_atx_tid */
|
||||
- }
|
||||
- }
|
||||
-
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user