mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-15 18:03:30 +00:00
sync with OpenWrt v18.06.1 stable new R8.1 version
This commit is contained in:
parent
cd1f88fd57
commit
9ba04fd0d7
@ -18,7 +18,6 @@ menu "Target Images"
|
||||
default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ramips
|
||||
default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_apm821xx
|
||||
default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_mpc85xx
|
||||
default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ipq40xx
|
||||
default TARGET_INITRAMFS_COMPRESSION_NONE
|
||||
depends on TARGET_ROOTFS_INITRAMFS
|
||||
help
|
||||
@ -70,7 +69,7 @@ menu "Target Images"
|
||||
|
||||
config TARGET_ROOTFS_TARGZ
|
||||
bool "tar.gz"
|
||||
default n if USES_TARGZ
|
||||
default y if USES_TARGZ
|
||||
help
|
||||
Build a compressed tar archive of the root filesystem.
|
||||
|
||||
@ -78,7 +77,7 @@ menu "Target Images"
|
||||
|
||||
menuconfig TARGET_ROOTFS_EXT4FS
|
||||
bool "ext4"
|
||||
default n if USES_EXT4
|
||||
default y if USES_EXT4
|
||||
help
|
||||
Build an ext4 root filesystem.
|
||||
|
||||
@ -227,7 +226,7 @@ menu "Target Images"
|
||||
config GRUB_TIMEOUT
|
||||
string "Seconds to wait before booting the default entry"
|
||||
depends on GRUB_IMAGES
|
||||
default "0"
|
||||
default "5"
|
||||
help
|
||||
If you don't know, 5 seconds is a reasonable default.
|
||||
|
||||
@ -244,17 +243,15 @@ menu "Target Images"
|
||||
select GRUB_IMAGES
|
||||
select TARGET_IMAGES_PAD
|
||||
select PACKAGE_kmod-e1000
|
||||
default y
|
||||
|
||||
config TARGET_IMAGES_PAD
|
||||
bool "Pad images to filesystem size (for JFFS2)"
|
||||
depends on GRUB_IMAGES
|
||||
default y
|
||||
|
||||
config TARGET_IMAGES_GZIP
|
||||
bool "GZip images"
|
||||
depends on TARGET_IMAGES_PAD || TARGET_ROOTFS_EXT4FS || TARGET_x86
|
||||
default n
|
||||
default y
|
||||
|
||||
comment "Image Options"
|
||||
|
||||
@ -268,7 +265,7 @@ menu "Target Images"
|
||||
config TARGET_ROOTFS_PARTSIZE
|
||||
int "Root filesystem partition size (in MB)"
|
||||
depends on GRUB_IMAGES || TARGET_ROOTFS_EXT4FS || TARGET_rb532 || TARGET_mvebu || TARGET_uml
|
||||
default 90
|
||||
default 256
|
||||
help
|
||||
Select the root filesystem partition size.
|
||||
|
||||
|
@ -67,7 +67,7 @@ config KERNEL_PROFILING
|
||||
|
||||
config KERNEL_KALLSYMS
|
||||
bool "Compile the kernel with symbol table information"
|
||||
default n
|
||||
default y if !SMALL_FLASH
|
||||
help
|
||||
This will give you more information in stack traces from kernel oopses.
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
src-git packages https://git.openwrt.org/feed/packages.git;openwrt-18.06
|
||||
src-git luci https://git.openwrt.org/project/luci.git;openwrt-18.06
|
||||
src-git routing https://git.openwrt.org/feed/routing.git;openwrt-18.06
|
||||
src-git telephony https://git.openwrt.org/feed/telephony.git;openwrt-18.06
|
||||
#src-git telephony https://git.openwrt.org/feed/telephony.git;openwrt-18.06
|
||||
|
@ -10,17 +10,11 @@
|
||||
|
||||
FEEDS_INSTALLED:=$(notdir $(wildcard $(TOPDIR)/package/feeds/*))
|
||||
FEEDS_AVAILABLE:=$(sort $(FEEDS_INSTALLED) $(shell $(SCRIPT_DIR)/feeds list -n))
|
||||
FEEDS_ENABLED:=$(foreach feed,$(FEEDS_AVAILABLE),$(if $(CONFIG_FEED_$(feed)),$(feed)))
|
||||
FEEDS_DISABLED:=$(filter-out $(FEEDS_ENABLED),$(FEEDS_AVAILABLE))
|
||||
|
||||
PACKAGE_SUBDIRS=$(PACKAGE_DIR)
|
||||
ifneq ($(CONFIG_PER_FEED_REPO),)
|
||||
PACKAGE_SUBDIRS += $(OUTPUT_DIR)/packages/$(ARCH_PACKAGES)/base
|
||||
ifneq ($(CONFIG_PER_FEED_REPO_ADD_DISABLED),)
|
||||
PACKAGE_SUBDIRS += $(foreach FEED,$(FEEDS_AVAILABLE),$(OUTPUT_DIR)/packages/$(ARCH_PACKAGES)/$(FEED))
|
||||
else
|
||||
PACKAGE_SUBDIRS += $(foreach FEED,$(FEEDS_ENABLED),$(OUTPUT_DIR)/packages/$(ARCH_PACKAGES)/$(FEED))
|
||||
endif
|
||||
PACKAGE_SUBDIRS += $(foreach FEED,$(FEEDS_AVAILABLE),$(OUTPUT_DIR)/packages/$(ARCH_PACKAGES)/$(FEED))
|
||||
endif
|
||||
|
||||
opkg_package_files = $(wildcard \
|
||||
@ -39,10 +33,11 @@ endef
|
||||
# 1: destination file
|
||||
define FeedSourcesAppend
|
||||
( \
|
||||
echo "src/gz %d_core %U/targets/%S/packages"; \
|
||||
echo 'src/gz %d_core %U/targets/%S/packages'; \
|
||||
$(strip $(if $(CONFIG_PER_FEED_REPO), \
|
||||
$(foreach feed,base $(FEEDS_ENABLED),echo "src/gz %d_$(feed) %U/packages/%A/$(feed)";) \
|
||||
$(if $(CONFIG_PER_FEED_REPO_ADD_DISABLED), \
|
||||
$(foreach feed,$(FEEDS_DISABLED),echo "$(if $(CONFIG_PER_FEED_REPO_ADD_COMMENTED),# )src/gz %d_$(feed) %U/packages/%A/$(feed)";)))) \
|
||||
echo 'src/gz %d_base %U/packages/%A/base'; \
|
||||
$(foreach feed,$(FEEDS_AVAILABLE), \
|
||||
$(if $(CONFIG_FEED_$(feed)), \
|
||||
echo '$(if $(filter m,$(CONFIG_FEED_$(feed))),# )src/gz %d_$(feed) %U/packages/%A/$(feed)';)))) \
|
||||
) >> $(1)
|
||||
endef
|
||||
|
@ -60,7 +60,7 @@ endef
|
||||
|
||||
define Build/netgear-dni
|
||||
$(STAGING_DIR_HOST)/bin/mkdniimg \
|
||||
-B $(NETGEAR_BOARD_ID) -v $(VERSION_DIST).$(REVISION) \
|
||||
-B $(NETGEAR_BOARD_ID) -v $(VERSION_DIST).$(firstword $(subst -, ,$(REVISION))) \
|
||||
$(if $(NETGEAR_HW_ID),-H $(NETGEAR_HW_ID)) \
|
||||
-r "$(1)" \
|
||||
-i $@ -o $@.new
|
||||
@ -135,7 +135,7 @@ define Build/lzma-no-dict
|
||||
endef
|
||||
|
||||
define Build/gzip
|
||||
gzip --force -9n -c $@ $(1) > $@.new
|
||||
gzip -f -9n -c $@ $(1) > $@.new
|
||||
@mv $@.new $@
|
||||
endef
|
||||
|
||||
@ -186,6 +186,10 @@ define Build/append-ubi
|
||||
rm $@.tmp
|
||||
endef
|
||||
|
||||
define Build/append-uboot
|
||||
dd if=$(UBOOT_PATH) >> $@
|
||||
endef
|
||||
|
||||
define Build/pad-to
|
||||
dd if=$@ of=$@.new bs=$(1) conv=sync
|
||||
mv $@.new $@
|
||||
|
@ -393,6 +393,7 @@ endef
|
||||
|
||||
define Device/Check/Common
|
||||
_PROFILE_SET = $$(strip $$(foreach profile,$$(PROFILES) DEVICE_$(1),$$(call DEVICE_CHECK_PROFILE,$$(profile))))
|
||||
DEVICE_PACKAGES += $$(call extra_packages,$$(DEVICE_PACKAGES))
|
||||
ifdef TARGET_PER_DEVICE_ROOTFS
|
||||
$$(eval $$(call merge_packages,_PACKAGES,$$(DEVICE_PACKAGES) $$(call DEVICE_EXTRA_PACKAGES,$(1))))
|
||||
ROOTFS_ID/$(1) := $$(if $$(_PROFILE_SET),$$(call mkfs_packages_id,$$(_PACKAGES)))
|
||||
|
@ -11,7 +11,7 @@ ifneq ($(DUMP),1)
|
||||
all: compile
|
||||
endif
|
||||
|
||||
KERNEL_FILE_DEPENDS=$(BACKPORT_PATCH_DIR) $(GENERIC_PATCH_DIR) $(GENERIC_HACK_DIR) $(PATCH_DIR) $(GENERIC_FILES_DIR) $(FILES_DIR)
|
||||
KERNEL_FILE_DEPENDS=$(GENERIC_BACKPORT_DIR) $(GENERIC_PATCH_DIR) $(GENERIC_HACK_DIR) $(PATCH_DIR) $(GENERIC_FILES_DIR) $(FILES_DIR)
|
||||
STAMP_PREPARED=$(LINUX_DIR)/.prepared$(if $(QUILT)$(DUMP),,_$(shell $(call find_md5,$(KERNEL_FILE_DEPENDS),)))
|
||||
STAMP_CONFIGURED:=$(LINUX_DIR)/.configured
|
||||
include $(INCLUDE_DIR)/download.mk
|
||||
|
@ -2,15 +2,11 @@
|
||||
|
||||
LINUX_RELEASE?=1
|
||||
|
||||
LINUX_VERSION-3.18 = .71
|
||||
LINUX_VERSION-4.4 = .121
|
||||
LINUX_VERSION-4.9 = .107
|
||||
LINUX_VERSION-4.14 = .48
|
||||
LINUX_VERSION-4.9 = .123
|
||||
LINUX_VERSION-4.14 = .66
|
||||
|
||||
LINUX_KERNEL_HASH-3.18.71 = 5abc9778ad44ce02ed6c8ab52ece8a21c6d20d21f6ed8a19287b4a38a50c1240
|
||||
LINUX_KERNEL_HASH-4.4.121 = 44a88268b5088dc326b30c9b9133ac35a9a200b636b7268d08f32abeae6ca729
|
||||
LINUX_KERNEL_HASH-4.9.107 = 3ce7f40ecee096cda1d51eb2cada105a39abe8da7b968ef85f52be961f22cad3
|
||||
LINUX_KERNEL_HASH-4.14.48 = 80a0608f611fe7a5c54556402cdc2880a21301e1c4e1b19d4c1db82ad2bf22b9
|
||||
LINUX_KERNEL_HASH-4.9.123 = 8d12ceab9f8cbfd0555c881b35ed4384cf3ea8e223d894c030b04786005e5071
|
||||
LINUX_KERNEL_HASH-4.14.66 = a38061ca4c864d11a72beb3dc5918a99f13372fe9ee35508d004fdfabd460413
|
||||
|
||||
remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
|
||||
sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1)))))))
|
||||
|
@ -190,7 +190,7 @@ $(_endef)
|
||||
fi; \
|
||||
done; $(Package/$(1)/extra_provides) \
|
||||
) | sort -u > $(PKG_INFO_DIR)/$(1).provides
|
||||
$(if $(PROVIDES),@for pkg in $(PROVIDES); do cp $(PKG_INFO_DIR)/$(1).provides $(PKG_INFO_DIR)/$$$$pkg.provides; done)
|
||||
$(if $(PROVIDES),@for pkg in $(filter-out $(1),$(PROVIDES)); do cp $(PKG_INFO_DIR)/$(1).provides $(PKG_INFO_DIR)/$$$$pkg.provides; done)
|
||||
$(CheckDependencies)
|
||||
|
||||
$(RSTRIP) $$(IDIR_$(1))
|
||||
|
@ -120,7 +120,12 @@ ifdef USE_GIT_TREE
|
||||
define Build/Prepare/Default
|
||||
mkdir -p $(PKG_BUILD_DIR)
|
||||
ln -s $(CURDIR)/git-src $(PKG_BUILD_DIR)/.git
|
||||
( cd $(PKG_BUILD_DIR); git checkout .)
|
||||
( cd $(PKG_BUILD_DIR); \
|
||||
git checkout .; \
|
||||
git submodule update --recursive; \
|
||||
git submodule foreach git config --unset core.worktree; \
|
||||
git submodule foreach git checkout .; \
|
||||
)
|
||||
endef
|
||||
endif
|
||||
ifdef USE_SOURCE_DIR
|
||||
@ -223,7 +228,7 @@ define Build/CoreTargets
|
||||
|
||||
ifneq ($(CONFIG_AUTOREMOVE),)
|
||||
compile:
|
||||
-touch $(PKG_BUILD_DIR)/.autoremove 2>/dev/null >/dev/null
|
||||
-touch -r $(PKG_BUILD_DIR)/.built $(PKG_BUILD_DIR)/.autoremove 2>/dev/null >/dev/null
|
||||
$(FIND) $(PKG_BUILD_DIR) -mindepth 1 -maxdepth 1 -not '(' -type f -and -name '.*' -and -size 0 ')' -and -not -name '.pkgdir' | \
|
||||
$(XARGS) rm -rf
|
||||
endif
|
||||
|
@ -76,11 +76,6 @@ else
|
||||
zlib_link_flags := -lz
|
||||
endif
|
||||
|
||||
$(eval $(call TestHostCommand,zlib, \
|
||||
Please install a static zlib. (Missing libz.a or zlib.h), \
|
||||
echo 'int main(int argc, char **argv) { gzdopen(0, "rb"); return 0; }' | \
|
||||
gcc -include zlib.h -x c -o $(TMP_DIR)/a.out - $(zlib_link_flags)))
|
||||
|
||||
$(eval $(call TestHostCommand,perl-thread-queue, \
|
||||
Please install the Perl Thread::Queue module, \
|
||||
perl -MThread::Queue -e 1))
|
||||
@ -143,6 +138,11 @@ $(eval $(call SetupHostCommand,bzip2,Please install 'bzip2', \
|
||||
$(eval $(call SetupHostCommand,wget,Please install GNU 'wget', \
|
||||
wget --version | grep GNU))
|
||||
|
||||
$(eval $(call SetupHostCommand,time,Please install GNU 'time' or BusyBox 'time' that supports -f, \
|
||||
gtime --version 2>&1 | grep GNU, \
|
||||
time --version 2>&1 | grep GNU, \
|
||||
busybox time 2>&1 | grep -- '-f FMT'))
|
||||
|
||||
$(eval $(call SetupHostCommand,perl,Please install Perl 5.x, \
|
||||
perl --version | grep "perl.*v5"))
|
||||
|
||||
|
@ -12,6 +12,12 @@ OVERRIDELIST:=$(TMP_DIR)/info/.overrides-$(SCAN_TARGET)-$(SCAN_COOKIE)
|
||||
|
||||
export PATH:=$(TOPDIR)/staging_dir/host/bin:$(PATH)
|
||||
|
||||
ifeq ($(SCAN_NAME),target)
|
||||
SCAN_DEPS=image/Makefile profiles/*.mk $(TOPDIR)/include/kernel*.mk $(TOPDIR)/include/target.mk image/*.mk
|
||||
else
|
||||
SCAN_DEPS=$(TOPDIR)/include/package*.mk
|
||||
endif
|
||||
|
||||
ifeq ($(IS_TTY),1)
|
||||
define progress
|
||||
printf "\033[M\r$(1)" >&2;
|
||||
|
@ -43,6 +43,7 @@ log_make = \
|
||||
$(if $(BUILD_LOG), \
|
||||
set -o pipefail; \
|
||||
mkdir -p $(BUILD_LOG_DIR)/$(1)$(if $(4),/$(4));) \
|
||||
env time -f "time: $(1)$(if $(4),/$(4))/$(if $(3),$(3)-)$(2)\#%U\#%S\#%e" -- \
|
||||
$$(SUBMAKE) $(subdir_make_opts) $(if $(3),$(3)-)$(2) \
|
||||
$(if $(BUILD_LOG),SILENT= 2>&1 | tee $(BUILD_LOG_DIR)/$(1)$(if $(4),/$(4))/$(if $(3),$(3)-)$(2).txt)
|
||||
|
||||
|
@ -56,7 +56,7 @@ else
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(filter 3.18 4.4 4.9,$(KERNEL_PATCHVER)),)
|
||||
ifneq ($(filter 4.9,$(KERNEL_PATCHVER)),)
|
||||
DEFAULT_PACKAGES.router:=$(filter-out kmod-ipt-offload,$(DEFAULT_PACKAGES.router))
|
||||
endif
|
||||
|
||||
@ -77,7 +77,6 @@ define Profile
|
||||
$(eval $(call ProfileDefault))
|
||||
$(eval $(call Profile/$(1)))
|
||||
dumpinfo : $(call shexport,Profile/$(1)/Description)
|
||||
DEFAULT_PACKAGES := $(filter-out $(patsubst -%,%,$(filter -%,$(PACKAGES))),$(DEFAULT_PACKAGES))
|
||||
PACKAGES := $(filter-out -%,$(PACKAGES))
|
||||
DUMPINFO += \
|
||||
echo "Target-Profile: $(1)"; \
|
||||
|
@ -82,8 +82,8 @@ _ignore = $(foreach p,$(IGNORE_PACKAGES),--ignore $(p))
|
||||
prepare-tmpinfo: FORCE
|
||||
@+$(MAKE) -r -s staging_dir/host/.prereq-build $(PREP_MK)
|
||||
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" SCAN_DEPTH=5 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="image/Makefile profiles/*.mk $(TOPDIR)/include/kernel*.mk $(TOPDIR)/include/target.mk" SCAN_DEPTH=2 SCAN_EXTRA="" SCAN_MAKEOPTS="TARGET_BUILD=1"
|
||||
$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f include/scan.mk SCAN_TARGET="packageinfo" SCAN_DIR="package" SCAN_NAME="package" SCAN_DEPTH=5 SCAN_EXTRA=""
|
||||
$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f include/scan.mk SCAN_TARGET="targetinfo" SCAN_DIR="target/linux" SCAN_NAME="target" 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/$${type}-metadata.pl $(_ignore) config "$$f" > "$$t" || { rm -f "$$t"; echo "Failed to build $$t"; false; break; }; \
|
||||
|
@ -25,13 +25,13 @@ PKG_CONFIG_DEPENDS += \
|
||||
sanitize = $(call tolower,$(subst _,-,$(subst $(space),-,$(1))))
|
||||
|
||||
VERSION_NUMBER:=$(call qstrip,$(CONFIG_VERSION_NUMBER))
|
||||
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),SNAPSHOT)
|
||||
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),18.06-SNAPSHOT)
|
||||
|
||||
VERSION_CODE:=$(call qstrip,$(CONFIG_VERSION_CODE))
|
||||
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),$(REVISION))
|
||||
|
||||
VERSION_REPO:=$(call qstrip,$(CONFIG_VERSION_REPO))
|
||||
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),http://downloads.lede-project.org/snapshots)
|
||||
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),http://downloads.openwrt.org/releases/18.06-SNAPSHOT)
|
||||
|
||||
VERSION_DIST:=$(call qstrip,$(CONFIG_VERSION_DIST))
|
||||
VERSION_DIST:=$(if $(VERSION_DIST),$(VERSION_DIST),OpenWrt)
|
||||
@ -41,10 +41,10 @@ VERSION_MANUFACTURER:=$(call qstrip,$(CONFIG_VERSION_MANUFACTURER))
|
||||
VERSION_MANUFACTURER:=$(if $(VERSION_MANUFACTURER),$(VERSION_MANUFACTURER),OpenWrt)
|
||||
|
||||
VERSION_MANUFACTURER_URL:=$(call qstrip,$(CONFIG_VERSION_MANUFACTURER_URL))
|
||||
VERSION_MANUFACTURER_URL:=$(if $(VERSION_MANUFACTURER_URL),$(VERSION_MANUFACTURER_URL),http://lede-project.org/)
|
||||
VERSION_MANUFACTURER_URL:=$(if $(VERSION_MANUFACTURER_URL),$(VERSION_MANUFACTURER_URL),http://openwrt.org/)
|
||||
|
||||
VERSION_BUG_URL:=$(call qstrip,$(CONFIG_VERSION_BUG_URL))
|
||||
VERSION_BUG_URL:=$(if $(VERSION_BUG_URL),$(VERSION_BUG_URL),http://bugs.lede-project.org/)
|
||||
VERSION_BUG_URL:=$(if $(VERSION_BUG_URL),$(VERSION_BUG_URL),http://bugs.openwrt.org/)
|
||||
|
||||
VERSION_SUPPORT_URL:=$(call qstrip,$(CONFIG_VERSION_SUPPORT_URL))
|
||||
VERSION_SUPPORT_URL:=$(if $(VERSION_SUPPORT_URL),$(VERSION_SUPPORT_URL),http://forum.lede-project.org/)
|
||||
|
@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/version.mk
|
||||
include $(INCLUDE_DIR)/feeds.mk
|
||||
|
||||
PKG_NAME:=base-files
|
||||
PKG_RELEASE:=190
|
||||
PKG_RELEASE:=192
|
||||
PKG_FLAGS:=nonshared
|
||||
|
||||
PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
|
||||
@ -25,9 +25,7 @@ PKG_CONFIG_DEPENDS += \
|
||||
CONFIG_NAND_SUPPORT \
|
||||
CONFIG_CLEAN_IPKG \
|
||||
CONFIG_PER_FEED_REPO \
|
||||
CONFIG_PER_FEED_REPO_ADD_DISABLED \
|
||||
CONFIG_PER_FEED_REPO_ADD_COMMENTED \
|
||||
$(foreach feed,$(FEEDS_INSTALLED),CONFIG_FEED_$(feed))
|
||||
$(foreach feed,$(FEEDS_AVAILABLE),CONFIG_FEED_$(feed))
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
@ -39,7 +37,7 @@ endif
|
||||
define Package/base-files
|
||||
SECTION:=base
|
||||
CATEGORY:=Base system
|
||||
DEPENDS:=+netifd +libc +procd +jsonfilter +SIGNED_PACKAGES:usign +SIGNED_PACKAGES:lede-keyring +NAND_SUPPORT:ubi-utils +fstools +fwtool
|
||||
DEPENDS:=+netifd +libc +procd +jsonfilter +SIGNED_PACKAGES:usign +SIGNED_PACKAGES:openwrt-keyring +NAND_SUPPORT:ubi-utils +fstools +fwtool
|
||||
TITLE:=Base filesystem for OpenWrt
|
||||
URL:=http://openwrt.org/
|
||||
VERSION:=$(PKG_RELEASE)-$(REVISION)
|
||||
|
@ -8,6 +8,8 @@ after mount_root:
|
||||
* /etc/config directory with config files
|
||||
|
||||
for more help see:
|
||||
http://wiki.openwrt.org/doc/howto/generic.failsafe
|
||||
https://openwrt.org/docs/guide-user/troubleshooting/
|
||||
- failsafe_and_factory_reset
|
||||
- root_password_reset
|
||||
=======================================================
|
||||
|
||||
|
@ -39,6 +39,6 @@ apply_defaults() {
|
||||
start() {
|
||||
apply_defaults
|
||||
for CONF in /etc/sysctl.d/*.conf /etc/sysctl.conf; do
|
||||
[ -f "$CONF" ] && sysctl -p "$CONF" -e >&-
|
||||
[ -f "$CONF" ] && sysctl -e -p "$CONF" >&-
|
||||
done
|
||||
}
|
||||
|
@ -5,6 +5,9 @@ kernel.panic=3
|
||||
kernel.core_pattern=/tmp/%e.%t.%p.%s.core
|
||||
fs.suid_dumpable=2
|
||||
|
||||
fs.protected_hardlinks=1
|
||||
fs.protected_symlinks=1
|
||||
|
||||
net.ipv4.conf.default.arp_ignore=1
|
||||
net.ipv4.conf.all.arp_ignore=1
|
||||
net.ipv4.ip_forward=1
|
||||
@ -20,5 +23,3 @@ net.ipv4.tcp_dsack=1
|
||||
|
||||
net.ipv6.conf.default.forwarding=1
|
||||
net.ipv6.conf.all.forwarding=1
|
||||
|
||||
net.netfilter.nf_conntrack_helper = 1
|
||||
|
@ -57,16 +57,16 @@ config () {
|
||||
export ${NO_EXPORT:+-n} CONFIG_NUM_SECTIONS=$(($CONFIG_NUM_SECTIONS + 1))
|
||||
name="${name:-cfg$CONFIG_NUM_SECTIONS}"
|
||||
append CONFIG_SECTIONS "$name"
|
||||
[ -n "$NO_CALLBACK" ] || config_cb "$cfgtype" "$name"
|
||||
export ${NO_EXPORT:+-n} CONFIG_SECTION="$name"
|
||||
export ${NO_EXPORT:+-n} "CONFIG_${CONFIG_SECTION}_TYPE=$cfgtype"
|
||||
config_set "$CONFIG_SECTION" "TYPE" "${cfgtype}"
|
||||
[ -n "$NO_CALLBACK" ] || config_cb "$cfgtype" "$name"
|
||||
}
|
||||
|
||||
option () {
|
||||
local varname="$1"; shift
|
||||
local value="$*"
|
||||
|
||||
export ${NO_EXPORT:+-n} "CONFIG_${CONFIG_SECTION}_${varname}=$value"
|
||||
config_set "$CONFIG_SECTION" "${varname}" "${value}"
|
||||
[ -n "$NO_CALLBACK" ] || option_cb "$varname" "$*"
|
||||
}
|
||||
|
||||
@ -81,7 +81,7 @@ list() {
|
||||
config_set "$CONFIG_SECTION" "${varname}_ITEM$len" "$value"
|
||||
config_set "$CONFIG_SECTION" "${varname}_LENGTH" "$len"
|
||||
append "CONFIG_${CONFIG_SECTION}_${varname}" "$value" "$LIST_SEP"
|
||||
list_cb "$varname" "$*"
|
||||
[ -n "$NO_CALLBACK" ] || list_cb "$varname" "$*"
|
||||
}
|
||||
|
||||
config_unset() {
|
||||
@ -113,11 +113,8 @@ config_set() {
|
||||
local section="$1"
|
||||
local option="$2"
|
||||
local value="$3"
|
||||
local old_section="$CONFIG_SECTION"
|
||||
|
||||
CONFIG_SECTION="$section"
|
||||
option "$option" "$value"
|
||||
CONFIG_SECTION="$old_section"
|
||||
export ${NO_EXPORT:+-n} "CONFIG_${section}_${option}=${value}"
|
||||
}
|
||||
|
||||
config_foreach() {
|
||||
|
@ -6,10 +6,16 @@
|
||||
__network_ifstatus() {
|
||||
local __tmp
|
||||
|
||||
[ -z "$__NETWORK_CACHE" ] && \
|
||||
export __NETWORK_CACHE="$(ubus call network.interface dump)"
|
||||
[ -z "$__NETWORK_CACHE" ] && {
|
||||
__tmp="$(ubus call network.interface dump 2>&1)"
|
||||
case "$?" in
|
||||
4) : ;;
|
||||
0) export __NETWORK_CACHE="$__tmp" ;;
|
||||
*) echo "$__tmp" >&2 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
__tmp="$(jsonfilter ${4:+-F "$4"} ${5:+-l "$5"} -s "$__NETWORK_CACHE" -e "$1=@.interface${2:+[@.interface='$2']}$3")"
|
||||
__tmp="$(jsonfilter ${4:+-F "$4"} ${5:+-l "$5"} -s "${__NETWORK_CACHE:-{}}" -e "$1=@.interface${2:+[@.interface='$2']}$3")"
|
||||
|
||||
[ -z "$__tmp" ] && \
|
||||
unset "$1" && \
|
||||
|
@ -78,18 +78,18 @@ rootfs_type() {
|
||||
|
||||
get_image() { # <source> [ <command> ]
|
||||
local from="$1"
|
||||
local cat="$2"
|
||||
local cmd="$2"
|
||||
|
||||
if [ -z "$cat" ]; then
|
||||
if [ -z "$cmd" ]; then
|
||||
local magic="$(dd if="$from" bs=2 count=1 2>/dev/null | hexdump -n 2 -e '1/1 "%02x"')"
|
||||
case "$magic" in
|
||||
1f8b) cat="zcat";;
|
||||
425a) cat="bzcat";;
|
||||
*) cat="cat";;
|
||||
1f8b) cmd="zcat";;
|
||||
425a) cmd="bzcat";;
|
||||
*) cmd="cat";;
|
||||
esac
|
||||
fi
|
||||
|
||||
$cat "$from" 2>/dev/null
|
||||
cat "$from" 2>/dev/null | $cmd
|
||||
}
|
||||
|
||||
get_magic_word() {
|
||||
|
@ -1,7 +1,3 @@
|
||||
fwtool_pre_upgrade() {
|
||||
fwtool -q -i /dev/null "$1"
|
||||
}
|
||||
|
||||
fwtool_check_image() {
|
||||
[ $# -gt 1 ] && return 1
|
||||
|
||||
|
@ -137,7 +137,6 @@ add_overlayfiles() {
|
||||
|
||||
# hooks
|
||||
sysupgrade_image_check="fwtool_check_image platform_check_image"
|
||||
sysupgrade_pre_upgrade="fwtool_pre_upgrade"
|
||||
|
||||
if [ $SAVE_OVERLAY = 1 ]; then
|
||||
[ ! -d /overlay/upper/etc ] && {
|
||||
@ -264,10 +263,8 @@ else
|
||||
rm -f /tmp/sysupgrade.always.overwrite.bootdisk.partmap
|
||||
fi
|
||||
|
||||
run_hooks "" $sysupgrade_pre_upgrade
|
||||
|
||||
install_bin /sbin/upgraded
|
||||
v "Commencing upgrade. All shell sessions will be closed now."
|
||||
v "Commencing upgrade. Closing all shell sessions."
|
||||
|
||||
COMMAND='. /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2'
|
||||
|
||||
|
@ -183,7 +183,7 @@ if VERSIONOPT
|
||||
config VERSION_REPO
|
||||
string
|
||||
prompt "Release repository"
|
||||
default "http://downloads.lede-project.org/snapshots"
|
||||
default "http://downloads.openwrt.org/releases/18.06-SNAPSHOT"
|
||||
help
|
||||
This is the repository address embedded in the image, it defaults
|
||||
to the trunk snapshot repo; the url may contain the following placeholders:
|
||||
@ -268,18 +268,4 @@ menuconfig PER_FEED_REPO
|
||||
If set, a separate repository is generated within bin/*/packages/
|
||||
for the core packages and each enabled feed.
|
||||
|
||||
config PER_FEED_REPO_ADD_DISABLED
|
||||
bool "Add available but not enabled feeds to opkg.conf"
|
||||
default y
|
||||
depends on PER_FEED_REPO
|
||||
help
|
||||
Add not installed or disabled feeds from feeds.conf to opkg.conf.
|
||||
|
||||
config PER_FEED_REPO_ADD_COMMENTED
|
||||
bool "Comment out not enabled feeds"
|
||||
default !BUILDBOT
|
||||
depends on PER_FEED_REPO && PER_FEED_REPO_ADD_DISABLED
|
||||
help
|
||||
Add not enabled feeds as commented out source lines to opkg.conf.
|
||||
|
||||
source "tmp/.config-feeds.in"
|
||||
|
@ -9,12 +9,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=at91bootstrap
|
||||
PKG_VERSION:=v3.8.8
|
||||
PKG_VERSION:=v3.8.10
|
||||
PKG_RELEASE:=
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/linux4sam/at91bootstrap.git
|
||||
PKG_SOURCE_VERSION:=3d33a4e0707c61007a5278f6620453502f7500db
|
||||
PKG_SOURCE_VERSION:=04efa5500d60a0211d14b6ee60df7ce0a828704d
|
||||
|
||||
PKG_BUILD_DIR = \
|
||||
$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
|
||||
@ -24,51 +24,88 @@ include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define AT91Bootstrap/Default
|
||||
BUILD_TARGET:=at91
|
||||
BUILD_SUBTARGET:=sama5
|
||||
HIDDEN:=1
|
||||
AT91BOOTSTRAP_IMAGE:=at91bootstrap.bin
|
||||
endef
|
||||
|
||||
define AT91Bootstrap/sama5d2_xplaineddf_uboot
|
||||
TITLE:=AT91Bootstrap for SAMA5D2 Xplained board (SPI Flash)
|
||||
BUILD_SUBTARGET:=sama5d2
|
||||
BUILD_DEVICES:=at91-sama5d2_xplained
|
||||
endef
|
||||
|
||||
define AT91Bootstrap/sama5d2_xplaineddf_qspi_uboot
|
||||
TITLE:=AT91Bootstrap for SAMA5D2 Xplained board (QSPI Flash)
|
||||
BUILD_SUBTARGET:=sama5d2
|
||||
BUILD_DEVICES:=at91-sama5d2_xplained
|
||||
endef
|
||||
|
||||
define AT91Bootstrap/sama5d2_xplainedsd_uboot
|
||||
TITLE:=AT91Bootstrap for SAMA5D2 Xplained board (SDcard/EMMC)
|
||||
BUILD_SUBTARGET:=sama5d2
|
||||
BUILD_DEVICES:=at91-sama5d2_xplained
|
||||
endef
|
||||
|
||||
define AT91Bootstrap/sama5d3_xplainednf_uboot
|
||||
TITLE:=AT91Bootstrap for SAMA5D3 Xplained board (Nand Flash)
|
||||
BUILD_SUBTARGET:=sama5d3
|
||||
BUILD_DEVICES:=at91-sama5d3_xplained
|
||||
endef
|
||||
|
||||
define AT91Bootstrap/sama5d3_xplainedsd_uboot
|
||||
TITLE:=AT91Bootstrap for SAMA5D3 Xplained board (SDcard)
|
||||
BUILD_SUBTARGET:=sama5d3
|
||||
BUILD_DEVICES:=at91-sama5d3_xplained
|
||||
endef
|
||||
|
||||
define AT91Bootstrap/sama5d4_xplainednf_uboot_secure
|
||||
TITLE:=AT91Bootstrap for SAMA5D4 Xplained board (Nand Flash)
|
||||
BUILD_SUBTARGET:=sama5d4
|
||||
BUILD_DEVICES:=at91-sama5d4_xplained
|
||||
endef
|
||||
|
||||
define AT91Bootstrap/sama5d4_xplaineddf_uboot_secure
|
||||
TITLE:=AT91Bootstrap for SAMA5D4 Xplained board (SPI Flash)
|
||||
BUILD_SUBTARGET:=sama5d4
|
||||
BUILD_DEVICES:=at91-sama5d4_xplained
|
||||
endef
|
||||
|
||||
define AT91Bootstrap/sama5d4_xplainedsd_uboot_secure
|
||||
TITLE:=AT91Bootstrap for SAMA5D4 Xplained board (SDcard)
|
||||
BUILD_SUBTARGET:=sama5d4
|
||||
BUILD_DEVICES:=at91-sama5d4_xplained
|
||||
endef
|
||||
|
||||
define AT91Bootstrap/sama5d27_som1_eksd_uboot
|
||||
TITLE:=AT91Bootstrap for SAMA5D27 SOM1 Ek (SDcard0)
|
||||
BUILD_SUBTARGET:=sama5d2
|
||||
BUILD_DEVICES:=at91-sama5d27_som1_ek
|
||||
endef
|
||||
|
||||
define AT91Bootstrap/sama5d27_som1_eksd1_uboot
|
||||
TITLE:=AT91Bootstrap for SAMA5D27 SOM1 Ek (SDcard1)
|
||||
BUILD_SUBTARGET:=sama5d2
|
||||
BUILD_DEVICES:=at91-sama5d27_som1_ek
|
||||
endef
|
||||
|
||||
define AT91Bootstrap/sama5d27_som1_ekqspi_uboot
|
||||
TITLE:=AT91Bootstrap for SAMA5D27 SOM1 Ek (QSPI Flash)
|
||||
BUILD_SUBTARGET:=sama5d2
|
||||
BUILD_DEVICES:=at91-sama5d27_som1_ek
|
||||
endef
|
||||
|
||||
define AT91Bootstrap/sama5d2_ptc_eknf_uboot
|
||||
TITLE:=AT91Bootstrap for SAMA5D2 PTC EK (Nand Flash)
|
||||
BUILD_SUBTARGET:=sama5d2
|
||||
BUILD_DEVICES:=at91-sama5d2_ptc_ek
|
||||
endef
|
||||
|
||||
define AT91Bootstrap/sama5d2_ptc_eksd_uboot
|
||||
TITLE:=AT91Bootstrap for SAMA5D2 PTC EK (SDCard)
|
||||
BUILD_SUBTARGET:=sama5d2
|
||||
BUILD_DEVICES:=at91-sama5d2_ptc_ek
|
||||
endef
|
||||
|
||||
AT91BOOTSTRAP_TARGETS := \
|
||||
sama5d2_xplaineddf_uboot \
|
||||
sama5d2_xplaineddf_qspi_uboot \
|
||||
@ -77,7 +114,11 @@ AT91BOOTSTRAP_TARGETS := \
|
||||
sama5d3_xplainedsd_uboot \
|
||||
sama5d4_xplainednf_uboot_secure \
|
||||
sama5d4_xplaineddf_uboot_secure \
|
||||
sama5d4_xplainedsd_uboot_secure
|
||||
sama5d4_xplainedsd_uboot_secure \
|
||||
sama5d27_som1_eksd_uboot \
|
||||
sama5d27_som1_ekqspi_uboot \
|
||||
sama5d2_ptc_eknf_uboot \
|
||||
sama5d2_ptc_eksd_uboot
|
||||
|
||||
define Build/Compile
|
||||
+$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
|
||||
|
@ -5,7 +5,7 @@ PKG_FLAGS:=nonshared
|
||||
export GCC_HONOUR_COPTS=s
|
||||
|
||||
define Package/at91bootstrap/install/default
|
||||
$(CP) $(PKG_BUILD_DIR)/binaries/*uboot* $(1)/
|
||||
$(CP) -avL $(PKG_BUILD_DIR)/binaries/at91bootstrap.bin $(1)/
|
||||
endef
|
||||
|
||||
Package/at91bootstrap/install = $(Package/at91bootstrap/install/default)
|
||||
|
@ -7,18 +7,21 @@
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_VERSION:=2016.05
|
||||
PKG_VERSION:=linux4sam_5.8
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_HASH:=87d02275615aaf0cd007b54cbe9fbadceef2bee7c79e6c323ea1ae8956dcb171
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/linux4sam/u-boot-at91.git
|
||||
PKG_SOURCE_VERSION:=59f202622154f82e708a6ca2bf86350a5c1b2d33
|
||||
|
||||
include $(INCLUDE_DIR)/u-boot.mk
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
define U-Boot/Default
|
||||
BUILD_TARGET:=at91
|
||||
HIDDEN:=1
|
||||
UBOOT_IMAGE:=u-boot.bin boot.bin
|
||||
UBOOT_IMAGE:=u-boot.bin
|
||||
endef
|
||||
|
||||
define U-Boot/at91sam9m10g45ek_nandflash
|
||||
@ -30,51 +33,77 @@ endef
|
||||
define U-Boot/at91sam9x5ek_nandflash
|
||||
NAME:=AT91SAM9X5-EK board (NandFlash)
|
||||
BUILD_SUBTARGET:=legacy
|
||||
BUILD_DEVICES:=at91sam9g15ek at91sam9g25ek at91sam9g35ek at91sam9x25ek at91sam9x35ek
|
||||
BUILD_DEVICES:=at91sam9g15ek at91sam9g25ek \
|
||||
at91sam9g35ek at91sam9x25ek \
|
||||
at91sam9x35ek
|
||||
endef
|
||||
|
||||
define U-Boot/sama5d3_xplained_nandflash
|
||||
NAME:=SAMA5D3 Xplained board (NandFlash)
|
||||
BUILD_SUBTARGET:=sama5
|
||||
BUILD_SUBTARGET:=sama5d3
|
||||
BUILD_DEVICES:=at91-sama5d3_xplained
|
||||
endef
|
||||
|
||||
define U-Boot/sama5d3_xplained_mmc
|
||||
NAME:=SAMA5D3 Xplained board (SDcard)
|
||||
BUILD_SUBTARGET:=sama5
|
||||
BUILD_SUBTARGET:=sama5d3
|
||||
BUILD_DEVICES:=at91-sama5d3_xplained
|
||||
endef
|
||||
|
||||
define U-Boot/sama5d2_xplained_spiflash
|
||||
NAME:=SAMA5D2 Xplained board (SPI Flash)
|
||||
BUILD_SUBTARGET:=sama5
|
||||
BUILD_SUBTARGET:=sama5d2
|
||||
BUILD_DEVICES:=at91-sama5d2_xplained
|
||||
endef
|
||||
|
||||
define U-Boot/sama5d2_xplained_mmc
|
||||
NAME:=SAMA5D2 Xplained board (SDcard/EMMC)
|
||||
BUILD_SUBTARGET:=sama5
|
||||
BUILD_SUBTARGET:=sama5d2
|
||||
BUILD_DEVICES:=at91-sama5d2_xplained
|
||||
endef
|
||||
|
||||
define U-Boot/sama5d4_xplained_spiflash
|
||||
NAME:=SAMA5D4 Xplained board (SPI Flash)
|
||||
BUILD_SUBTARGET:=sama5
|
||||
BUILD_SUBTARGET:=sama5d4
|
||||
BUILD_DEVICES:=at91-sama5d4_xplained
|
||||
endef
|
||||
|
||||
define U-Boot/sama5d4_xplained_mmc
|
||||
NAME:=SAMA5D4 Xplained board (SDcard)
|
||||
BUILD_SUBTARGET:=sama5
|
||||
BUILD_SUBTARGET:=sama5d4
|
||||
BUILD_DEVICES:=at91-sama5d4_xplained
|
||||
endef
|
||||
|
||||
define U-Boot/sama5d4_xplained_nandflash
|
||||
NAME:=SAMA5D4 Xplained board (NandFlash)
|
||||
BUILD_SUBTARGET:=sama5
|
||||
BUILD_SUBTARGET:=sama5d4
|
||||
BUILD_DEVICES:=at91-sama5d4_xplained
|
||||
endef
|
||||
|
||||
define U-Boot/sama5d27_som1_ek_mmc
|
||||
NAME:=SAMA5D27 SOM1 Ek (SDCard)
|
||||
BUILD_SUBTARGET:=sama5d2
|
||||
BUILD_DEVICES:=at91-sama5d27_som1_ek
|
||||
endef
|
||||
|
||||
define U-Boot/sama5d27_som1_ek_spiflash
|
||||
NAME:=SAMA5D27 SOM1 Ek (QSPI Flash)
|
||||
BUILD_SUBTARGET:=sama5d2
|
||||
BUILD_DEVICES:=at91-sama5d27_som1_ek
|
||||
endef
|
||||
|
||||
define U-Boot/sama5d2_ptc_ek_nandflash
|
||||
NAME:=SAMA5D2 PTC Ek (Nand Flash)
|
||||
BUILD_SUBTARGET:=sama5d2
|
||||
BUILD_DEVICES:=at91-sama5d2_ptc_ek
|
||||
endef
|
||||
|
||||
define U-Boot/sama5d2_ptc_ek_mmc
|
||||
NAME:=SAMA5D2 PTC Ek (SDCard)
|
||||
BUILD_SUBTARGET:=sama5d2
|
||||
BUILD_DEVICES:=at91-sama5d2_ptc_ek
|
||||
endef
|
||||
|
||||
UBOOT_TARGETS := \
|
||||
at91sam9m10g45ek_nandflash \
|
||||
at91sam9x5ek_nandflash \
|
||||
@ -84,12 +113,18 @@ UBOOT_TARGETS := \
|
||||
sama5d2_xplained_spiflash \
|
||||
sama5d4_xplained_mmc \
|
||||
sama5d4_xplained_spiflash \
|
||||
sama5d4_xplained_nandflash
|
||||
sama5d4_xplained_nandflash\
|
||||
sama5d27_som1_ek_mmc \
|
||||
sama5d27_som1_ek_spiflash \
|
||||
sama5d2_ptc_ek_nandflash \
|
||||
sama5d2_ptc_ek_mmc
|
||||
|
||||
define Build/Compile
|
||||
+$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
|
||||
CROSS_COMPILE=$(TARGET_CROSS) \
|
||||
KCFLAGS="$(filter-out -fstack-protector -mfloat-abi=hard, $(TARGET_CFLAGS)) -mfloat-abi=soft"
|
||||
+$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
|
||||
CROSS_COMPILE=$(TARGET_CROSS) \
|
||||
DTC=$(LINUX_DIR)/scripts/dtc/dtc \
|
||||
KCFLAGS="$(filter-out -fstack-protector \
|
||||
-mfloat-abi=hard, $(TARGET_CFLAGS)) -mfloat-abi=soft"
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage/U-Boot))
|
||||
|
@ -12,12 +12,13 @@ PKG_DISTNAME:=u-boot
|
||||
PKG_VERSION:=2018.03
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/u-boot-$(PKG_VERSION)
|
||||
PKG_SOURCE:=$(PKG_DISTNAME)-$(PKG_VERSION).tar.bz2
|
||||
PKG_SOURCE_URL:=\
|
||||
http://mirror2.openwrt.org/sources \
|
||||
ftp://ftp.denx.de/pub/u-boot
|
||||
PKG_HASH:=7e7477534409d5368eb1371ffde6820f0f79780a1a1f676161c48442cb303dfd
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE:=$(PKG_DISTNAME)-$(PKG_VERSION).tar.xz
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_DISTNAME)-$(PKG_VERSION)
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_DISTNAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE_URL:=https://git.denx.de/u-boot.git
|
||||
PKG_SOURCE_VERSION:=f95ab1fb6e37f0601f397091bb011edf7a98b890
|
||||
PKG_MIRROR_HASH:=b50d8b6fe0d90b92c8c147457b1b4c2ed1cdb03191085cfc57fdad77c0bfffab
|
||||
|
||||
PKG_BUILD_DEPENDS:=fstools
|
||||
|
||||
|
@ -38,6 +38,7 @@ gl-ar750|\
|
||||
hornet-ub|\
|
||||
hornet-ub-x2|\
|
||||
jwap230|\
|
||||
koala|\
|
||||
mr1750|\
|
||||
mr1750v2|\
|
||||
mr600|\
|
||||
|
@ -31,7 +31,8 @@ ubootenv_mtdinfo () {
|
||||
}
|
||||
|
||||
case "$board" in
|
||||
openmesh,a42)
|
||||
openmesh,a42 |\
|
||||
openmesh,a62)
|
||||
ubootenv_add_uci_config "/dev/mtd5" "0x0" "0x10000" "0x10000"
|
||||
;;
|
||||
esac
|
||||
|
@ -29,6 +29,10 @@ armada-385-turris-omnia)
|
||||
armada-xp-linksys-mamba)
|
||||
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x40000" "0x20000"
|
||||
;;
|
||||
globalscale,espressobin|\
|
||||
marvell,armada8040-mcbin)
|
||||
ubootenv_add_uci_config "/dev/mtd0" "0x3f0000" "0x10000" "0x10000" "1"
|
||||
;;
|
||||
esac
|
||||
|
||||
config_load ubootenv
|
||||
|
@ -627,7 +627,7 @@ NOTE: this patch is ready for upstream, LEDE-specific parts are in
|
||||
+#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||
+ "console=console=ttyS0,115200\0" \
|
||||
+ "mtdids=nand0=orion_nand\0" \
|
||||
+ "mtdparts="CONFIG_MTDPARTS_DEFAULT \
|
||||
+ "mtdparts="CONFIG_MTDPARTS_DEFAULT "\0" \
|
||||
+ "bootargs_root=\0"
|
||||
+
|
||||
+/*
|
||||
|
@ -613,7 +613,7 @@
|
||||
+#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||
+ "console=console=ttyS0,115200\0" \
|
||||
+ "mtdids=nand0=orion_nand\0" \
|
||||
+ "mtdparts="CONFIG_MTDPARTS_DEFAULT \
|
||||
+ "mtdparts="CONFIG_MTDPARTS_DEFAULT "\0" \
|
||||
+ "bootargs_root=\0"
|
||||
+
|
||||
+/*
|
||||
|
@ -1212,7 +1212,7 @@
|
||||
+#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||
+ "console=console=ttyS0,115200\0" \
|
||||
+ "mtdids=nand0=orion_nand\0" \
|
||||
+ "mtdparts="CONFIG_MTDPARTS_DEFAULT \
|
||||
+ "mtdparts="CONFIG_MTDPARTS_DEFAULT "\0" \
|
||||
+ "bootargs_root=\0"
|
||||
+
|
||||
+/*
|
||||
|
@ -39,7 +39,7 @@
|
||||
- "bootargs_root=ubi.mtd=1 root=ubi0:root rootfstype=ubifs ro\0"
|
||||
+ "console=console=ttyS0,115200\0" \
|
||||
+ "mtdids=nand0=orion_nand\0" \
|
||||
+ "mtdparts="CONFIG_MTDPARTS_DEFAULT \
|
||||
+ "mtdparts="CONFIG_MTDPARTS_DEFAULT "\0" \
|
||||
+ "bootargs_root=\0"
|
||||
|
||||
/*
|
||||
|
@ -22,9 +22,10 @@
|
||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||
"console=console=ttyS0,115200\0" \
|
||||
"mtdids=nand0=orion_nand\0" \
|
||||
"mtdparts="CONFIG_MTDPARTS_DEFAULT \
|
||||
- "mtdparts="CONFIG_MTDPARTS_DEFAULT \
|
||||
- "kernel=/boot/uImage\0" \
|
||||
- "bootargs_root=noinitrd ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs\0"
|
||||
+ "mtdparts="CONFIG_MTDPARTS_DEFAULT "\0" \
|
||||
+ "bootargs_root=\0"
|
||||
|
||||
/*
|
||||
|
@ -18,10 +18,11 @@
|
||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||
"console=console=ttyS0,115200\0" \
|
||||
"mtdids=nand0=orion_nand\0" \
|
||||
"mtdparts="CONFIG_MTDPARTS_DEFAULT \
|
||||
- "mtdparts="CONFIG_MTDPARTS_DEFAULT \
|
||||
- "kernel=/boot/zImage\0" \
|
||||
- "fdt=/boot/ib62x0.dtb\0" \
|
||||
- "bootargs_root=ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs rw\0"
|
||||
+ "mtdparts="CONFIG_MTDPARTS_DEFAULT "\0" \
|
||||
+ "bootargs_root=\0"
|
||||
|
||||
/*
|
||||
|
@ -29,7 +29,7 @@
|
||||
- "ext2load usb 0:1 0x01100000 /uInitrd\0"
|
||||
+ "console=console=ttyS0,115200\0" \
|
||||
+ "mtdids=nand0=orion_nand\0" \
|
||||
+ "mtdparts="CONFIG_MTDPARTS_DEFAULT \
|
||||
+ "mtdparts="CONFIG_MTDPARTS_DEFAULT "\0" \
|
||||
+ "bootargs_root=\0"
|
||||
|
||||
/*
|
||||
|
@ -14,9 +14,10 @@
|
||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||
"console=console=ttyS0,115200\0" \
|
||||
"mtdids=nand0=orion_nand\0" \
|
||||
"mtdparts="CONFIG_MTDPARTS_DEFAULT \
|
||||
- "mtdparts="CONFIG_MTDPARTS_DEFAULT \
|
||||
- "kernel=/boot/uImage\0" \
|
||||
- "bootargs_root=ubi.mtd=root root=ubi0:root rootfstype=ubifs ro\0"
|
||||
+ "mtdparts="CONFIG_MTDPARTS_DEFAULT "\0" \
|
||||
+ "bootargs_root=\0"
|
||||
|
||||
/*
|
||||
|
@ -15,6 +15,7 @@ PKG_HASH:=7e7477534409d5368eb1371ffde6820f0f79780a1a1f676161c48442cb303dfd
|
||||
|
||||
include $(INCLUDE_DIR)/u-boot.mk
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/host-build.mk
|
||||
|
||||
define U-Boot/Default
|
||||
BUILD_TARGET:=mvebu
|
||||
@ -31,6 +32,8 @@ endef
|
||||
UBOOT_TARGETS:= \
|
||||
clearfog
|
||||
|
||||
Build/Exports:=$(Host/Exports)
|
||||
|
||||
define Build/Configure
|
||||
# enable additional options beyond clearfog_defconfig
|
||||
echo CONFIG_NET_RANDOM_ETHADDR=y >> $(PKG_BUILD_DIR)/configs/$(BUILD_VARIANT)_defconfig
|
||||
|
@ -0,0 +1,14 @@
|
||||
OpenWrt links the libressl statically against mkimage, make sure all the
|
||||
needed dependencies are added too.
|
||||
|
||||
--- a/tools/Makefile
|
||||
+++ b/tools/Makefile
|
||||
@@ -145,7 +145,7 @@ endif
|
||||
# MXSImage needs LibSSL
|
||||
ifneq ($(CONFIG_MX23)$(CONFIG_MX28)$(CONFIG_ARMADA_38X)$(CONFIG_ARMADA_39X)$(CONFIG_FIT_SIGNATURE),)
|
||||
HOSTLOADLIBES_mkimage += \
|
||||
- $(shell pkg-config --libs libssl libcrypto 2> /dev/null || echo "-lssl -lcrypto")
|
||||
+ $(shell pkg-config --libs --static libssl libcrypto 2> /dev/null || echo "-lssl -lpthread -lcrypto")
|
||||
|
||||
# OS X deprecate openssl in favour of CommonCrypto, supress deprecation
|
||||
# warnings on those systems
|
@ -15,6 +15,7 @@ PKG_HASH:=6a018fd3caf58f3dcfa23ee989a82bd35df03af71872b9dca8c6d758a0d26c05
|
||||
|
||||
include $(INCLUDE_DIR)/u-boot.mk
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/host-build.mk
|
||||
|
||||
define U-Boot/Default
|
||||
BUILD_TARGET:=mxs
|
||||
@ -37,6 +38,8 @@ UBOOT_TARGETS := \
|
||||
|
||||
UBOOT_MAKE_FLAGS += $(UBOOT_IMAGE)
|
||||
|
||||
Build/Exports:=$(Host/Exports)
|
||||
|
||||
define Build/InstallDev
|
||||
$(INSTALL_DIR) $(STAGING_DIR_IMAGE)
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(UBOOT_IMAGE) $(STAGING_DIR_IMAGE)/$(BUILD_VARIANT)-$(UBOOT_IMAGE)
|
||||
|
@ -1,35 +1,36 @@
|
||||
From 74e3ace3495b73f6e592e92eca18175cccdb5a24 Mon Sep 17 00:00:00 2001
|
||||
From c5b0bca4c3ca5c3d1d8ee99fdbf3b494a3986dbd Mon Sep 17 00:00:00 2001
|
||||
From: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
Date: Sat, 17 Feb 2018 15:34:19 +0100
|
||||
Subject: [PATCH v2] tools/mxsimage: Support building with LibreSSL
|
||||
Date: Sun, 18 Mar 2018 16:03:47 +0100
|
||||
Subject: [PATCH] tools/mxsimage: Support building with LibreSSL
|
||||
|
||||
The mxsimage utility fails to compile against LibreSSL because LibreSSL
|
||||
says it is OpenSSL 2.0, but it does not support the complete OpenSSL 1.1
|
||||
interface.
|
||||
The mxsimage utility fails to compile against LibreSSL version < 2.7.0
|
||||
because LibreSSL says it is OpenSSL 2.0, but it does not support the
|
||||
complete OpenSSL 1.1 interface.
|
||||
|
||||
LibreSSL defines OPENSSL_VERSION_NUMBER with 0x20000000L and therefor
|
||||
claims to have an API compatible with OpenSSL 2.0, but it does not
|
||||
implement OPENSSL_zalloc() and some other functions in its most recent
|
||||
version. OpenSSL implements this function since version 1.1.0.
|
||||
claims to have an API compatible with OpenSSL 2.0, but it implements
|
||||
EVP_MD_CTX_new(), EVP_MD_CTX_free() and EVP_CIPHER_CTX_reset() only
|
||||
starting with version 2.7.0, which is not yet released. OpenSSL
|
||||
implements this function since version 1.1.0.
|
||||
|
||||
This commit will activate the compatibility code meant for
|
||||
OpenSSL < 1.1.0 also for all versions of LibreSSL, if some version of
|
||||
LibreSSL will support these functions in the future the version check
|
||||
should be adapted.
|
||||
OpenSSL < 1.1.0 also for LibreSSL version < 2.7.0.
|
||||
|
||||
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
Reviewed-by: Jonathan Gray <jsg@jsg.id.au>
|
||||
---
|
||||
tools/mxsimage.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
tools/mxsimage.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/tools/mxsimage.c
|
||||
+++ b/tools/mxsimage.c
|
||||
@@ -26,7 +26,7 @@
|
||||
@@ -26,7 +26,8 @@
|
||||
* OpenSSL 1.1.0 and newer compatibility functions:
|
||||
* https://wiki.openssl.org/index.php/1.1_API_Changes
|
||||
*/
|
||||
-#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
||||
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
|
||||
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || \
|
||||
+ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL)
|
||||
static void *OPENSSL_zalloc(size_t num)
|
||||
{
|
||||
void *ret = OPENSSL_malloc(num);
|
||||
|
@ -0,0 +1,14 @@
|
||||
OpenWrt links the libressl statically against mkimage, make sure all the
|
||||
needed dependencies are added too.
|
||||
|
||||
--- a/tools/Makefile
|
||||
+++ b/tools/Makefile
|
||||
@@ -163,7 +163,7 @@ endif
|
||||
# MXSImage needs LibSSL
|
||||
ifneq ($(CONFIG_MX23)$(CONFIG_MX28)$(CONFIG_ARMADA_38X)$(CONFIG_ARMADA_39X)$(CONFIG_FIT_SIGNATURE),)
|
||||
HOSTLOADLIBES_mkimage += \
|
||||
- $(shell pkg-config --libs libssl libcrypto 2> /dev/null || echo "-lssl -lcrypto")
|
||||
+ $(shell pkg-config --libs --static libssl libcrypto 2> /dev/null || echo "-lssl -lpthread -lcrypto")
|
||||
|
||||
# OS X deprecate openssl in favour of CommonCrypto, supress deprecation
|
||||
# warnings on those systems
|
306
package/boot/uboot-oxnas/patches/410-gcc-6-compiler.patch
Normal file
306
package/boot/uboot-oxnas/patches/410-gcc-6-compiler.patch
Normal file
@ -0,0 +1,306 @@
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Sat, 7 Feb 2015 21:52:40 +0000 (+0100)
|
||||
Subject: Add linux/compiler-gcc6.h to fix builds with gcc6
|
||||
X-Git-Tag: v2015.04-rc2~31
|
||||
X-Git-Url: http://git.denx.de/?p=u-boot.git;a=commitdiff_plain;h=478b02f1a7043b673565075ea5016376f3293b23
|
||||
|
||||
Add linux/compiler-gcc6.h to fix builds with gcc6
|
||||
|
||||
Add linux/compiler-gcc6/h from the kernel sources at:
|
||||
|
||||
commit 5631b8fba640a4ab2f8a954f63a603fa34eda96b
|
||||
Author: Steven Noonan <steven@uplinklabs.net>
|
||||
Date: Sat Oct 25 15:09:42 2014 -0700
|
||||
|
||||
compiler/gcc4+: Remove inaccurate comment about 'asm goto' miscompiles
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
|
||||
--- /dev/null
|
||||
+++ b/include/linux/compiler-gcc6.h
|
||||
@@ -0,0 +1,284 @@
|
||||
+#ifndef __LINUX_COMPILER_H
|
||||
+#error "Please don't include <linux/compiler-gcc.h> directly, include <linux/compiler.h> instead."
|
||||
+#endif
|
||||
+
|
||||
+/*
|
||||
+ * Common definitions for all gcc versions go here.
|
||||
+ */
|
||||
+#define GCC_VERSION (__GNUC__ * 10000 \
|
||||
+ + __GNUC_MINOR__ * 100 \
|
||||
+ + __GNUC_PATCHLEVEL__)
|
||||
+
|
||||
+/* Optimization barrier */
|
||||
+
|
||||
+/* The "volatile" is due to gcc bugs */
|
||||
+#define barrier() __asm__ __volatile__("": : :"memory")
|
||||
+/*
|
||||
+ * This version is i.e. to prevent dead stores elimination on @ptr
|
||||
+ * where gcc and llvm may behave differently when otherwise using
|
||||
+ * normal barrier(): while gcc behavior gets along with a normal
|
||||
+ * barrier(), llvm needs an explicit input variable to be assumed
|
||||
+ * clobbered. The issue is as follows: while the inline asm might
|
||||
+ * access any memory it wants, the compiler could have fit all of
|
||||
+ * @ptr into memory registers instead, and since @ptr never escaped
|
||||
+ * from that, it proofed that the inline asm wasn't touching any of
|
||||
+ * it. This version works well with both compilers, i.e. we're telling
|
||||
+ * the compiler that the inline asm absolutely may see the contents
|
||||
+ * of @ptr. See also: https://llvm.org/bugs/show_bug.cgi?id=15495
|
||||
+ */
|
||||
+#define barrier_data(ptr) __asm__ __volatile__("": :"r"(ptr) :"memory")
|
||||
+
|
||||
+/*
|
||||
+ * This macro obfuscates arithmetic on a variable address so that gcc
|
||||
+ * shouldn't recognize the original var, and make assumptions about it.
|
||||
+ *
|
||||
+ * This is needed because the C standard makes it undefined to do
|
||||
+ * pointer arithmetic on "objects" outside their boundaries and the
|
||||
+ * gcc optimizers assume this is the case. In particular they
|
||||
+ * assume such arithmetic does not wrap.
|
||||
+ *
|
||||
+ * A miscompilation has been observed because of this on PPC.
|
||||
+ * To work around it we hide the relationship of the pointer and the object
|
||||
+ * using this macro.
|
||||
+ *
|
||||
+ * Versions of the ppc64 compiler before 4.1 had a bug where use of
|
||||
+ * RELOC_HIDE could trash r30. The bug can be worked around by changing
|
||||
+ * the inline assembly constraint from =g to =r, in this particular
|
||||
+ * case either is valid.
|
||||
+ */
|
||||
+#define RELOC_HIDE(ptr, off) \
|
||||
+({ \
|
||||
+ unsigned long __ptr; \
|
||||
+ __asm__ ("" : "=r"(__ptr) : "0"(ptr)); \
|
||||
+ (typeof(ptr)) (__ptr + (off)); \
|
||||
+})
|
||||
+
|
||||
+/* Make the optimizer believe the variable can be manipulated arbitrarily. */
|
||||
+#define OPTIMIZER_HIDE_VAR(var) \
|
||||
+ __asm__ ("" : "=r" (var) : "0" (var))
|
||||
+
|
||||
+#ifdef __CHECKER__
|
||||
+#define __must_be_array(a) 0
|
||||
+#else
|
||||
+/* &a[0] degrades to a pointer: a different type from an array */
|
||||
+#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
|
||||
+#endif
|
||||
+
|
||||
+/*
|
||||
+ * Force always-inline if the user requests it so via the .config,
|
||||
+ * or if gcc is too old:
|
||||
+ */
|
||||
+#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \
|
||||
+ !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4)
|
||||
+#define inline inline __attribute__((always_inline)) notrace
|
||||
+#define __inline__ __inline__ __attribute__((always_inline)) notrace
|
||||
+#define __inline __inline __attribute__((always_inline)) notrace
|
||||
+#else
|
||||
+/* A lot of inline functions can cause havoc with function tracing */
|
||||
+#define inline inline notrace
|
||||
+#define __inline__ __inline__ notrace
|
||||
+#define __inline __inline notrace
|
||||
+#endif
|
||||
+
|
||||
+#define __always_inline inline __attribute__((always_inline))
|
||||
+#define noinline __attribute__((noinline))
|
||||
+
|
||||
+#define __deprecated __attribute__((deprecated))
|
||||
+#define __packed __attribute__((packed))
|
||||
+#define __weak __attribute__((weak))
|
||||
+#define __alias(symbol) __attribute__((alias(#symbol)))
|
||||
+
|
||||
+/*
|
||||
+ * it doesn't make sense on ARM (currently the only user of __naked)
|
||||
+ * to trace naked functions because then mcount is called without
|
||||
+ * stack and frame pointer being set up and there is no chance to
|
||||
+ * restore the lr register to the value before mcount was called.
|
||||
+ *
|
||||
+ * The asm() bodies of naked functions often depend on standard calling
|
||||
+ * conventions, therefore they must be noinline and noclone.
|
||||
+ *
|
||||
+ * GCC 4.[56] currently fail to enforce this, so we must do so ourselves.
|
||||
+ * See GCC PR44290.
|
||||
+ */
|
||||
+#define __naked __attribute__((naked)) noinline __noclone notrace
|
||||
+
|
||||
+#define __noreturn __attribute__((noreturn))
|
||||
+
|
||||
+/*
|
||||
+ * From the GCC manual:
|
||||
+ *
|
||||
+ * Many functions have no effects except the return value and their
|
||||
+ * return value depends only on the parameters and/or global
|
||||
+ * variables. Such a function can be subject to common subexpression
|
||||
+ * elimination and loop optimization just as an arithmetic operator
|
||||
+ * would be.
|
||||
+ * [...]
|
||||
+ */
|
||||
+#define __pure __attribute__((pure))
|
||||
+#define __aligned(x) __attribute__((aligned(x)))
|
||||
+#define __printf(a, b) __attribute__((format(printf, a, b)))
|
||||
+#define __scanf(a, b) __attribute__((format(scanf, a, b)))
|
||||
+#define __attribute_const__ __attribute__((__const__))
|
||||
+#define __maybe_unused __attribute__((unused))
|
||||
+#define __always_unused __attribute__((unused))
|
||||
+
|
||||
+/* gcc version specific checks */
|
||||
+
|
||||
+#if GCC_VERSION < 30200
|
||||
+# error Sorry, your compiler is too old - please upgrade it.
|
||||
+#endif
|
||||
+
|
||||
+#if GCC_VERSION < 30300
|
||||
+# define __used __attribute__((__unused__))
|
||||
+#else
|
||||
+# define __used __attribute__((__used__))
|
||||
+#endif
|
||||
+
|
||||
+#ifdef CONFIG_GCOV_KERNEL
|
||||
+# if GCC_VERSION < 30400
|
||||
+# error "GCOV profiling support for gcc versions below 3.4 not included"
|
||||
+# endif /* __GNUC_MINOR__ */
|
||||
+#endif /* CONFIG_GCOV_KERNEL */
|
||||
+
|
||||
+#if GCC_VERSION >= 30400
|
||||
+#define __must_check __attribute__((warn_unused_result))
|
||||
+#define __malloc __attribute__((__malloc__))
|
||||
+#endif
|
||||
+
|
||||
+#if GCC_VERSION >= 40000
|
||||
+
|
||||
+/* GCC 4.1.[01] miscompiles __weak */
|
||||
+#ifdef __KERNEL__
|
||||
+# if GCC_VERSION >= 40100 && GCC_VERSION <= 40101
|
||||
+# error Your version of gcc miscompiles the __weak directive
|
||||
+# endif
|
||||
+#endif
|
||||
+
|
||||
+#define __used __attribute__((__used__))
|
||||
+#define __compiler_offsetof(a, b) \
|
||||
+ __builtin_offsetof(a, b)
|
||||
+
|
||||
+#if GCC_VERSION >= 40100 && GCC_VERSION < 40600
|
||||
+# define __compiletime_object_size(obj) __builtin_object_size(obj, 0)
|
||||
+#endif
|
||||
+
|
||||
+#if GCC_VERSION >= 40300
|
||||
+/* Mark functions as cold. gcc will assume any path leading to a call
|
||||
+ * to them will be unlikely. This means a lot of manual unlikely()s
|
||||
+ * are unnecessary now for any paths leading to the usual suspects
|
||||
+ * like BUG(), printk(), panic() etc. [but let's keep them for now for
|
||||
+ * older compilers]
|
||||
+ *
|
||||
+ * Early snapshots of gcc 4.3 don't support this and we can't detect this
|
||||
+ * in the preprocessor, but we can live with this because they're unreleased.
|
||||
+ * Maketime probing would be overkill here.
|
||||
+ *
|
||||
+ * gcc also has a __attribute__((__hot__)) to move hot functions into
|
||||
+ * a special section, but I don't see any sense in this right now in
|
||||
+ * the kernel context
|
||||
+ */
|
||||
+#define __cold __attribute__((__cold__))
|
||||
+
|
||||
+#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
|
||||
+
|
||||
+#ifndef __CHECKER__
|
||||
+# define __compiletime_warning(message) __attribute__((warning(message)))
|
||||
+# define __compiletime_error(message) __attribute__((error(message)))
|
||||
+#endif /* __CHECKER__ */
|
||||
+#endif /* GCC_VERSION >= 40300 */
|
||||
+
|
||||
+#if GCC_VERSION >= 40500
|
||||
+/*
|
||||
+ * Mark a position in code as unreachable. This can be used to
|
||||
+ * suppress control flow warnings after asm blocks that transfer
|
||||
+ * control elsewhere.
|
||||
+ *
|
||||
+ * Early snapshots of gcc 4.5 don't support this and we can't detect
|
||||
+ * this in the preprocessor, but we can live with this because they're
|
||||
+ * unreleased. Really, we need to have autoconf for the kernel.
|
||||
+ */
|
||||
+#define unreachable() __builtin_unreachable()
|
||||
+
|
||||
+/* Mark a function definition as prohibited from being cloned. */
|
||||
+#define __noclone __attribute__((__noclone__, __optimize__("no-tracer")))
|
||||
+
|
||||
+#endif /* GCC_VERSION >= 40500 */
|
||||
+
|
||||
+#if GCC_VERSION >= 40600
|
||||
+/*
|
||||
+ * When used with Link Time Optimization, gcc can optimize away C functions or
|
||||
+ * variables which are referenced only from assembly code. __visible tells the
|
||||
+ * optimizer that something else uses this function or variable, thus preventing
|
||||
+ * this.
|
||||
+ */
|
||||
+#define __visible __attribute__((externally_visible))
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
+#if GCC_VERSION >= 40900 && !defined(__CHECKER__)
|
||||
+/*
|
||||
+ * __assume_aligned(n, k): Tell the optimizer that the returned
|
||||
+ * pointer can be assumed to be k modulo n. The second argument is
|
||||
+ * optional (default 0), so we use a variadic macro to make the
|
||||
+ * shorthand.
|
||||
+ *
|
||||
+ * Beware: Do not apply this to functions which may return
|
||||
+ * ERR_PTRs. Also, it is probably unwise to apply it to functions
|
||||
+ * returning extra information in the low bits (but in that case the
|
||||
+ * compiler should see some alignment anyway, when the return value is
|
||||
+ * massaged by 'flags = ptr & 3; ptr &= ~3;').
|
||||
+ */
|
||||
+#define __assume_aligned(a, ...) __attribute__((__assume_aligned__(a, ## __VA_ARGS__)))
|
||||
+#endif
|
||||
+
|
||||
+/*
|
||||
+ * GCC 'asm goto' miscompiles certain code sequences:
|
||||
+ *
|
||||
+ * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
|
||||
+ *
|
||||
+ * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
|
||||
+ *
|
||||
+ * (asm goto is automatically volatile - the naming reflects this.)
|
||||
+ */
|
||||
+#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
|
||||
+
|
||||
+#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
|
||||
+#if GCC_VERSION >= 40400
|
||||
+#define __HAVE_BUILTIN_BSWAP32__
|
||||
+#define __HAVE_BUILTIN_BSWAP64__
|
||||
+#endif
|
||||
+#if GCC_VERSION >= 40800
|
||||
+#define __HAVE_BUILTIN_BSWAP16__
|
||||
+#endif
|
||||
+#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
|
||||
+
|
||||
+#if GCC_VERSION >= 50000
|
||||
+#define KASAN_ABI_VERSION 4
|
||||
+#elif GCC_VERSION >= 40902
|
||||
+#define KASAN_ABI_VERSION 3
|
||||
+#endif
|
||||
+
|
||||
+#if GCC_VERSION >= 40902
|
||||
+/*
|
||||
+ * Tell the compiler that address safety instrumentation (KASAN)
|
||||
+ * should not be applied to that function.
|
||||
+ * Conflicts with inlining: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67368
|
||||
+ */
|
||||
+#define __no_sanitize_address __attribute__((no_sanitize_address))
|
||||
+#endif
|
||||
+
|
||||
+#endif /* gcc version >= 40000 specific checks */
|
||||
+
|
||||
+#if !defined(__noclone)
|
||||
+#define __noclone /* not needed */
|
||||
+#endif
|
||||
+
|
||||
+#if !defined(__no_sanitize_address)
|
||||
+#define __no_sanitize_address
|
||||
+#endif
|
||||
+
|
||||
+/*
|
||||
+ * A trick to suppress uninitialized variable warning without generating any
|
||||
+ * code
|
||||
+ */
|
||||
+#define uninitialized_var(x) x = x
|
287
package/boot/uboot-oxnas/patches/420-gcc-7-compiler.patch
Normal file
287
package/boot/uboot-oxnas/patches/420-gcc-7-compiler.patch
Normal file
@ -0,0 +1,287 @@
|
||||
--- /dev/null
|
||||
+++ b/include/linux/compiler-gcc7.h
|
||||
@@ -0,0 +1,284 @@
|
||||
+#ifndef __LINUX_COMPILER_H
|
||||
+#error "Please don't include <linux/compiler-gcc.h> directly, include <linux/compiler.h> instead."
|
||||
+#endif
|
||||
+
|
||||
+/*
|
||||
+ * Common definitions for all gcc versions go here.
|
||||
+ */
|
||||
+#define GCC_VERSION (__GNUC__ * 10000 \
|
||||
+ + __GNUC_MINOR__ * 100 \
|
||||
+ + __GNUC_PATCHLEVEL__)
|
||||
+
|
||||
+/* Optimization barrier */
|
||||
+
|
||||
+/* The "volatile" is due to gcc bugs */
|
||||
+#define barrier() __asm__ __volatile__("": : :"memory")
|
||||
+/*
|
||||
+ * This version is i.e. to prevent dead stores elimination on @ptr
|
||||
+ * where gcc and llvm may behave differently when otherwise using
|
||||
+ * normal barrier(): while gcc behavior gets along with a normal
|
||||
+ * barrier(), llvm needs an explicit input variable to be assumed
|
||||
+ * clobbered. The issue is as follows: while the inline asm might
|
||||
+ * access any memory it wants, the compiler could have fit all of
|
||||
+ * @ptr into memory registers instead, and since @ptr never escaped
|
||||
+ * from that, it proofed that the inline asm wasn't touching any of
|
||||
+ * it. This version works well with both compilers, i.e. we're telling
|
||||
+ * the compiler that the inline asm absolutely may see the contents
|
||||
+ * of @ptr. See also: https://llvm.org/bugs/show_bug.cgi?id=15495
|
||||
+ */
|
||||
+#define barrier_data(ptr) __asm__ __volatile__("": :"r"(ptr) :"memory")
|
||||
+
|
||||
+/*
|
||||
+ * This macro obfuscates arithmetic on a variable address so that gcc
|
||||
+ * shouldn't recognize the original var, and make assumptions about it.
|
||||
+ *
|
||||
+ * This is needed because the C standard makes it undefined to do
|
||||
+ * pointer arithmetic on "objects" outside their boundaries and the
|
||||
+ * gcc optimizers assume this is the case. In particular they
|
||||
+ * assume such arithmetic does not wrap.
|
||||
+ *
|
||||
+ * A miscompilation has been observed because of this on PPC.
|
||||
+ * To work around it we hide the relationship of the pointer and the object
|
||||
+ * using this macro.
|
||||
+ *
|
||||
+ * Versions of the ppc64 compiler before 4.1 had a bug where use of
|
||||
+ * RELOC_HIDE could trash r30. The bug can be worked around by changing
|
||||
+ * the inline assembly constraint from =g to =r, in this particular
|
||||
+ * case either is valid.
|
||||
+ */
|
||||
+#define RELOC_HIDE(ptr, off) \
|
||||
+({ \
|
||||
+ unsigned long __ptr; \
|
||||
+ __asm__ ("" : "=r"(__ptr) : "0"(ptr)); \
|
||||
+ (typeof(ptr)) (__ptr + (off)); \
|
||||
+})
|
||||
+
|
||||
+/* Make the optimizer believe the variable can be manipulated arbitrarily. */
|
||||
+#define OPTIMIZER_HIDE_VAR(var) \
|
||||
+ __asm__ ("" : "=r" (var) : "0" (var))
|
||||
+
|
||||
+#ifdef __CHECKER__
|
||||
+#define __must_be_array(a) 0
|
||||
+#else
|
||||
+/* &a[0] degrades to a pointer: a different type from an array */
|
||||
+#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
|
||||
+#endif
|
||||
+
|
||||
+/*
|
||||
+ * Force always-inline if the user requests it so via the .config,
|
||||
+ * or if gcc is too old:
|
||||
+ */
|
||||
+#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \
|
||||
+ !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4)
|
||||
+#define inline inline __attribute__((always_inline)) notrace
|
||||
+#define __inline__ __inline__ __attribute__((always_inline)) notrace
|
||||
+#define __inline __inline __attribute__((always_inline)) notrace
|
||||
+#else
|
||||
+/* A lot of inline functions can cause havoc with function tracing */
|
||||
+#define inline inline notrace
|
||||
+#define __inline__ __inline__ notrace
|
||||
+#define __inline __inline notrace
|
||||
+#endif
|
||||
+
|
||||
+#define __always_inline inline __attribute__((always_inline))
|
||||
+#define noinline __attribute__((noinline))
|
||||
+
|
||||
+#define __deprecated __attribute__((deprecated))
|
||||
+#define __packed __attribute__((packed))
|
||||
+#define __weak __attribute__((weak))
|
||||
+#define __alias(symbol) __attribute__((alias(#symbol)))
|
||||
+
|
||||
+/*
|
||||
+ * it doesn't make sense on ARM (currently the only user of __naked)
|
||||
+ * to trace naked functions because then mcount is called without
|
||||
+ * stack and frame pointer being set up and there is no chance to
|
||||
+ * restore the lr register to the value before mcount was called.
|
||||
+ *
|
||||
+ * The asm() bodies of naked functions often depend on standard calling
|
||||
+ * conventions, therefore they must be noinline and noclone.
|
||||
+ *
|
||||
+ * GCC 4.[56] currently fail to enforce this, so we must do so ourselves.
|
||||
+ * See GCC PR44290.
|
||||
+ */
|
||||
+#define __naked __attribute__((naked)) noinline __noclone notrace
|
||||
+
|
||||
+#define __noreturn __attribute__((noreturn))
|
||||
+
|
||||
+/*
|
||||
+ * From the GCC manual:
|
||||
+ *
|
||||
+ * Many functions have no effects except the return value and their
|
||||
+ * return value depends only on the parameters and/or global
|
||||
+ * variables. Such a function can be subject to common subexpression
|
||||
+ * elimination and loop optimization just as an arithmetic operator
|
||||
+ * would be.
|
||||
+ * [...]
|
||||
+ */
|
||||
+#define __pure __attribute__((pure))
|
||||
+#define __aligned(x) __attribute__((aligned(x)))
|
||||
+#define __printf(a, b) __attribute__((format(printf, a, b)))
|
||||
+#define __scanf(a, b) __attribute__((format(scanf, a, b)))
|
||||
+#define __attribute_const__ __attribute__((__const__))
|
||||
+#define __maybe_unused __attribute__((unused))
|
||||
+#define __always_unused __attribute__((unused))
|
||||
+
|
||||
+/* gcc version specific checks */
|
||||
+
|
||||
+#if GCC_VERSION < 30200
|
||||
+# error Sorry, your compiler is too old - please upgrade it.
|
||||
+#endif
|
||||
+
|
||||
+#if GCC_VERSION < 30300
|
||||
+# define __used __attribute__((__unused__))
|
||||
+#else
|
||||
+# define __used __attribute__((__used__))
|
||||
+#endif
|
||||
+
|
||||
+#ifdef CONFIG_GCOV_KERNEL
|
||||
+# if GCC_VERSION < 30400
|
||||
+# error "GCOV profiling support for gcc versions below 3.4 not included"
|
||||
+# endif /* __GNUC_MINOR__ */
|
||||
+#endif /* CONFIG_GCOV_KERNEL */
|
||||
+
|
||||
+#if GCC_VERSION >= 30400
|
||||
+#define __must_check __attribute__((warn_unused_result))
|
||||
+#define __malloc __attribute__((__malloc__))
|
||||
+#endif
|
||||
+
|
||||
+#if GCC_VERSION >= 40000
|
||||
+
|
||||
+/* GCC 4.1.[01] miscompiles __weak */
|
||||
+#ifdef __KERNEL__
|
||||
+# if GCC_VERSION >= 40100 && GCC_VERSION <= 40101
|
||||
+# error Your version of gcc miscompiles the __weak directive
|
||||
+# endif
|
||||
+#endif
|
||||
+
|
||||
+#define __used __attribute__((__used__))
|
||||
+#define __compiler_offsetof(a, b) \
|
||||
+ __builtin_offsetof(a, b)
|
||||
+
|
||||
+#if GCC_VERSION >= 40100 && GCC_VERSION < 40600
|
||||
+# define __compiletime_object_size(obj) __builtin_object_size(obj, 0)
|
||||
+#endif
|
||||
+
|
||||
+#if GCC_VERSION >= 40300
|
||||
+/* Mark functions as cold. gcc will assume any path leading to a call
|
||||
+ * to them will be unlikely. This means a lot of manual unlikely()s
|
||||
+ * are unnecessary now for any paths leading to the usual suspects
|
||||
+ * like BUG(), printk(), panic() etc. [but let's keep them for now for
|
||||
+ * older compilers]
|
||||
+ *
|
||||
+ * Early snapshots of gcc 4.3 don't support this and we can't detect this
|
||||
+ * in the preprocessor, but we can live with this because they're unreleased.
|
||||
+ * Maketime probing would be overkill here.
|
||||
+ *
|
||||
+ * gcc also has a __attribute__((__hot__)) to move hot functions into
|
||||
+ * a special section, but I don't see any sense in this right now in
|
||||
+ * the kernel context
|
||||
+ */
|
||||
+#define __cold __attribute__((__cold__))
|
||||
+
|
||||
+#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
|
||||
+
|
||||
+#ifndef __CHECKER__
|
||||
+# define __compiletime_warning(message) __attribute__((warning(message)))
|
||||
+# define __compiletime_error(message) __attribute__((error(message)))
|
||||
+#endif /* __CHECKER__ */
|
||||
+#endif /* GCC_VERSION >= 40300 */
|
||||
+
|
||||
+#if GCC_VERSION >= 40500
|
||||
+/*
|
||||
+ * Mark a position in code as unreachable. This can be used to
|
||||
+ * suppress control flow warnings after asm blocks that transfer
|
||||
+ * control elsewhere.
|
||||
+ *
|
||||
+ * Early snapshots of gcc 4.5 don't support this and we can't detect
|
||||
+ * this in the preprocessor, but we can live with this because they're
|
||||
+ * unreleased. Really, we need to have autoconf for the kernel.
|
||||
+ */
|
||||
+#define unreachable() __builtin_unreachable()
|
||||
+
|
||||
+/* Mark a function definition as prohibited from being cloned. */
|
||||
+#define __noclone __attribute__((__noclone__, __optimize__("no-tracer")))
|
||||
+
|
||||
+#endif /* GCC_VERSION >= 40500 */
|
||||
+
|
||||
+#if GCC_VERSION >= 40600
|
||||
+/*
|
||||
+ * When used with Link Time Optimization, gcc can optimize away C functions or
|
||||
+ * variables which are referenced only from assembly code. __visible tells the
|
||||
+ * optimizer that something else uses this function or variable, thus preventing
|
||||
+ * this.
|
||||
+ */
|
||||
+#define __visible __attribute__((externally_visible))
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
+#if GCC_VERSION >= 40900 && !defined(__CHECKER__)
|
||||
+/*
|
||||
+ * __assume_aligned(n, k): Tell the optimizer that the returned
|
||||
+ * pointer can be assumed to be k modulo n. The second argument is
|
||||
+ * optional (default 0), so we use a variadic macro to make the
|
||||
+ * shorthand.
|
||||
+ *
|
||||
+ * Beware: Do not apply this to functions which may return
|
||||
+ * ERR_PTRs. Also, it is probably unwise to apply it to functions
|
||||
+ * returning extra information in the low bits (but in that case the
|
||||
+ * compiler should see some alignment anyway, when the return value is
|
||||
+ * massaged by 'flags = ptr & 3; ptr &= ~3;').
|
||||
+ */
|
||||
+#define __assume_aligned(a, ...) __attribute__((__assume_aligned__(a, ## __VA_ARGS__)))
|
||||
+#endif
|
||||
+
|
||||
+/*
|
||||
+ * GCC 'asm goto' miscompiles certain code sequences:
|
||||
+ *
|
||||
+ * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
|
||||
+ *
|
||||
+ * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
|
||||
+ *
|
||||
+ * (asm goto is automatically volatile - the naming reflects this.)
|
||||
+ */
|
||||
+#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
|
||||
+
|
||||
+#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
|
||||
+#if GCC_VERSION >= 40400
|
||||
+#define __HAVE_BUILTIN_BSWAP32__
|
||||
+#define __HAVE_BUILTIN_BSWAP64__
|
||||
+#endif
|
||||
+#if GCC_VERSION >= 40800
|
||||
+#define __HAVE_BUILTIN_BSWAP16__
|
||||
+#endif
|
||||
+#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
|
||||
+
|
||||
+#if GCC_VERSION >= 50000
|
||||
+#define KASAN_ABI_VERSION 4
|
||||
+#elif GCC_VERSION >= 40902
|
||||
+#define KASAN_ABI_VERSION 3
|
||||
+#endif
|
||||
+
|
||||
+#if GCC_VERSION >= 40902
|
||||
+/*
|
||||
+ * Tell the compiler that address safety instrumentation (KASAN)
|
||||
+ * should not be applied to that function.
|
||||
+ * Conflicts with inlining: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67368
|
||||
+ */
|
||||
+#define __no_sanitize_address __attribute__((no_sanitize_address))
|
||||
+#endif
|
||||
+
|
||||
+#endif /* gcc version >= 40000 specific checks */
|
||||
+
|
||||
+#if !defined(__noclone)
|
||||
+#define __noclone /* not needed */
|
||||
+#endif
|
||||
+
|
||||
+#if !defined(__no_sanitize_address)
|
||||
+#define __no_sanitize_address
|
||||
+#endif
|
||||
+
|
||||
+/*
|
||||
+ * A trick to suppress uninitialized variable warning without generating any
|
||||
+ * code
|
||||
+ */
|
||||
+#define uninitialized_var(x) x = x
|
@ -350,6 +350,7 @@
|
||||
#define CONFIG_CMD_GETTIME
|
||||
#define CONFIG_CMD_BOOTMENU
|
||||
#define CONFIG_CMD_ELF
|
||||
#define CONFIG_CMD_BOOTZ
|
||||
|
||||
#define CONFIG_DOS_PARTITION
|
||||
#define CONFIG_EFI_PARTITION
|
||||
|
@ -14,6 +14,7 @@ PKG_HASH:=e49337262ecac44dbdeac140f2c6ebd1eba345e0162b0464172e7f05583ed7bb
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
include $(INCLUDE_DIR)/u-boot.mk
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/host-build.mk
|
||||
|
||||
define U-Boot/Default
|
||||
BUILD_TARGET:=zynq
|
||||
@ -42,4 +43,6 @@ UBOOT_TARGETS := \
|
||||
zed \
|
||||
zybo
|
||||
|
||||
Build/Exports:=$(Host/Exports)
|
||||
|
||||
$(eval $(call BuildPackage/U-Boot))
|
||||
|
@ -0,0 +1,14 @@
|
||||
OpenWrt links the libressl statically against mkimage, make sure all the
|
||||
needed dependencies are added too.
|
||||
|
||||
--- a/tools/Makefile
|
||||
+++ b/tools/Makefile
|
||||
@@ -128,7 +128,7 @@ endif
|
||||
# MXSImage needs LibSSL
|
||||
ifneq ($(CONFIG_MX23)$(CONFIG_MX28)$(CONFIG_FIT_SIGNATURE),)
|
||||
HOSTLOADLIBES_mkimage += \
|
||||
- $(shell pkg-config --libs libssl libcrypto 2> /dev/null || echo "-lssl -lcrypto")
|
||||
+ $(shell pkg-config --libs --static libssl libcrypto 2> /dev/null || echo "-lssl -lpthread -lcrypto")
|
||||
|
||||
# OS X deprecate openssl in favour of CommonCrypto, supress deprecation
|
||||
# warnings on those systems
|
@ -8,12 +8,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=amd64-microcode
|
||||
PKG_VERSION:=20171205
|
||||
PKG_VERSION:=20180524
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=amd64-microcode_3.$(PKG_VERSION).$(PKG_RELEASE).tar.xz
|
||||
PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/non-free/a/amd64-microcode/
|
||||
PKG_HASH:=a38bc072f535a3d3c1bf4e9e545197aa5114e979e94ef7e4a67e615df2f853a7
|
||||
PKG_HASH:=7c389c357c242e7161f6872bf4e12011a71e4c0683f06fb1bcfad650a78bf0a9
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-3.$(PKG_VERSION).$(PKG_RELEASE)
|
||||
|
||||
PKG_LICENSE_FILE:=LICENSE.amd-ucode
|
||||
|
@ -8,9 +8,9 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ath10k-firmware
|
||||
PKG_SOURCE_DATE:=2018-05-12
|
||||
PKG_SOURCE_VERSION:=952afa4949cb34193040cd4e7441e1aee50ac731
|
||||
PKG_MIRROR_HASH:=dd300f3f28b8f8c07c93065fd9dc1c9785ebda8f15398b4d2d33f9418adcaf46
|
||||
PKG_SOURCE_DATE:=2018-04-19
|
||||
PKG_SOURCE_VERSION:=71e50312b54cc972657a7b08c470088447cb9676
|
||||
PKG_MIRROR_HASH:=726e7bce9917532e3b39ced6a17ca2d4c39fdf4c9bec4a3f8f2ea3e5defa6a54
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
@ -433,25 +433,13 @@ define Package/ath10k-firmware-qca988x/install
|
||||
$(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-1.0/firmware-5.bin_10.2.4-1.0-00037 \
|
||||
$(PKG_BUILD_DIR)/QCA988X/hw2.0/10.2.4-1.0/firmware-5.bin_10.2.4-1.0-00033 \
|
||||
$(1)/lib/firmware/ath10k/QCA988X/hw2.0/firmware-5.bin
|
||||
endef
|
||||
|
||||
define Package/ath10k-firmware-qca6174/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA6174/hw2.1
|
||||
$(INSTALL_DATA) \
|
||||
$(PKG_BUILD_DIR)/QCA6174/hw2.1/board-2.bin \
|
||||
$(1)/lib/firmware/ath10k/QCA6174/hw2.1/
|
||||
$(INSTALL_DATA) \
|
||||
$(PKG_BUILD_DIR)/QCA6174/hw2.1/firmware-5.bin_SW_RM.1.1.1-00157-QCARMSWPZ-1 \
|
||||
$(1)/lib/firmware/ath10k/QCA6174/hw2.1/firmware-5.bin
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA6174/hw3.0
|
||||
$(INSTALL_DATA) \
|
||||
$(PKG_BUILD_DIR)/QCA6174/hw3.0/board-2.bin \
|
||||
$(1)/lib/firmware/ath10k/QCA6174/hw3.0/
|
||||
$(INSTALL_DATA) \
|
||||
$(PKG_BUILD_DIR)/QCA6174/hw3.0/4.4.1.c1/firmware-6.bin_RM.4.4.1.c1-00042-QCARMSWP-1 \
|
||||
$(1)/lib/firmware/ath10k/QCA6174/hw3.0/firmware-6.bin
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath10k
|
||||
$(CP) $(PKG_BUILD_DIR)/QCA6174 $(1)/lib/firmware/ath10k/
|
||||
endef
|
||||
|
||||
define Package/ath10k-firmware-qca99x0/install
|
||||
|
@ -8,12 +8,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=intel-microcode
|
||||
PKG_VERSION:=20180312
|
||||
PKG_RELEASE:=1
|
||||
PKG_VERSION:=20180703
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_SOURCE:=intel-microcode_3.$(PKG_VERSION).$(PKG_RELEASE).tar.xz
|
||||
PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/non-free/i/intel-microcode/
|
||||
PKG_HASH:=6ccb295d23961c7b96a69280e30fdce939e1d905147b22b8428886b173812d52
|
||||
PKG_HASH:=26dfaa47100ce3d06f968edefa7539da10de7b96d5d8e26ee8174a040ee5cdae
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-3.$(PKG_VERSION).$(PKG_RELEASE)
|
||||
|
||||
PKG_BUILD_DEPENDS:=iucode-tool/host
|
||||
@ -36,14 +36,14 @@ endef
|
||||
|
||||
define Build/Compile
|
||||
IUCODE_TOOL=$(STAGING_DIR)/../host/bin/iucode_tool $(MAKE) -C $(PKG_BUILD_DIR)
|
||||
mkdir $(PKG_BUILD_DIR)/intel-ucode
|
||||
mkdir $(PKG_BUILD_DIR)/intel-ucode-ipkg
|
||||
$(STAGING_DIR)/../host/bin/iucode_tool -q \
|
||||
--write-firmware=$(PKG_BUILD_DIR)/intel-ucode $(PKG_BUILD_DIR)/$(MICROCODE).bin
|
||||
--write-firmware=$(PKG_BUILD_DIR)/intel-ucode-ipkg $(PKG_BUILD_DIR)/$(MICROCODE).bin
|
||||
endef
|
||||
|
||||
define Package/intel-microcode/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/intel-ucode
|
||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/intel-ucode/* $(1)/lib/firmware/intel-ucode
|
||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/intel-ucode-ipkg/* $(1)/lib/firmware/intel-ucode
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,intel-microcode))
|
||||
|
@ -14,7 +14,7 @@ define Build/Compile
|
||||
endef
|
||||
|
||||
#ALLWIFIBOARDS:=<devicename>
|
||||
ALLWIFIBOARDS:=rt-acrh17
|
||||
ALLWIFIBOARDS:=zyxel_wre6606
|
||||
ALLWIFIPACKAGES:=$(foreach BOARD,$(ALLWIFIBOARDS),ipq-wifi-$(BOARD))
|
||||
|
||||
define Package/ipq-wifi-default
|
||||
@ -48,7 +48,7 @@ Don't install it for any other device!
|
||||
PREV_BOARD+=ipq-wifi-$(1)
|
||||
endef
|
||||
|
||||
$(eval $(call generate-ipq-wifi-package,zyxel_wre6606,board-zyxel_wre6606.bin,ZyXEL WRE6606))
|
||||
#$(eval $(call generate-ipq-wifi-package,<devicename>,<filename>,<displayname>))
|
||||
$(eval $(call generate-ipq-wifi-package,rt-acrh17,board-rt-acrh17.bin,ASUS RT-ACRH17/RT-AC82U/RT-AC42U))
|
||||
|
||||
$(foreach PACKAGE,$(ALLWIFIPACKAGES),$(eval $(call BuildPackage,$(PACKAGE))))
|
||||
|
Binary file not shown.
BIN
package/firmware/ipq-wifi/board-zyxel_wre6606.bin
Normal file
BIN
package/firmware/ipq-wifi/board-zyxel_wre6606.bin
Normal file
Binary file not shown.
@ -23,3 +23,16 @@ define Package/wl18xx-firmware/install
|
||||
endef
|
||||
$(eval $(call BuildPackage,wl18xx-firmware))
|
||||
|
||||
Package/ti-3410-firmware = $(call Package/firmware-default,TI 3410 firmware)
|
||||
define Package/ti-3410-firmware/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware
|
||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/ti_3410.fw $(1)/lib/firmware
|
||||
endef
|
||||
$(eval $(call BuildPackage,ti-3410-firmware))
|
||||
|
||||
Package/ti-5052-firmware = $(call Package/firmware-default,TI 5052 firmware)
|
||||
define Package/ti-5052-firmware/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware
|
||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/ti_5052.fw $(1)/lib/firmware
|
||||
endef
|
||||
$(eval $(call BuildPackage,ti-5052-firmware))
|
||||
|
@ -1,41 +0,0 @@
|
||||
From 7eb6313910023f1be6015a8cd9e1b380ae01af64 Mon Sep 17 00:00:00 2001
|
||||
From: Chen Minqiang <ptpt52@gmail.com>
|
||||
Date: Sun, 7 Jan 2018 14:38:36 +0800
|
||||
Subject: [PATCH] custom fix txpower and dfs
|
||||
|
||||
---
|
||||
db.txt | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/db.txt b/db.txt
|
||||
index 75dc0a3..24989ad 100644
|
||||
--- a/db.txt
|
||||
+++ b/db.txt
|
||||
@@ -277,9 +277,9 @@ country CL: DFS-JP
|
||||
(5735 - 5835 @ 80), (20)
|
||||
|
||||
country CN: DFS-FCC
|
||||
- (2402 - 2482 @ 40), (20)
|
||||
- (5170 - 5250 @ 80), (23), AUTO-BW
|
||||
- (5250 - 5330 @ 80), (23), DFS, AUTO-BW
|
||||
+ (2402 - 2482 @ 40), (30)
|
||||
+ (5170 - 5250 @ 80), (30), AUTO-BW
|
||||
+ (5250 - 5330 @ 80), (30), AUTO-BW
|
||||
(5735 - 5835 @ 80), (30)
|
||||
# 60 GHz band channels 1,4: 28dBm, channels 2,3: 44dBm
|
||||
# ref: http://www.miit.gov.cn/n11293472/n11505629/n11506593/n11960250/n11960606/n11960700/n12330791.files/n12330790.pdf
|
||||
@@ -1238,9 +1238,9 @@ country UG: DFS-FCC
|
||||
country US: DFS-FCC
|
||||
(2402 - 2472 @ 40), (30)
|
||||
# 5.15 ~ 5.25 GHz: 30 dBm for master mode, 23 dBm for clients
|
||||
- (5170 - 5250 @ 80), (23), AUTO-BW
|
||||
- (5250 - 5330 @ 80), (23), DFS, AUTO-BW
|
||||
- (5490 - 5730 @ 160), (23), DFS
|
||||
+ (5170 - 5250 @ 80), (30), AUTO-BW
|
||||
+ (5250 - 5330 @ 80), (30), AUTO-BW
|
||||
+ (5490 - 5730 @ 160), (30)
|
||||
(5735 - 5835 @ 80), (30)
|
||||
# 60g band
|
||||
# reference: http://cfr.regstoday.com/47cfr15.aspx#47_CFR_15p255
|
||||
--
|
||||
2.7.4
|
@ -1,7 +1,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ath10k-ct
|
||||
PKG_RELEASE=2
|
||||
PKG_RELEASE=3
|
||||
|
||||
PKG_LICENSE:=GPLv2
|
||||
PKG_LICENSE_FILES:=
|
||||
|
@ -0,0 +1,113 @@
|
||||
From d06f26c5c8a41f246a9c40862a77a55725cedbd3 Mon Sep 17 00:00:00 2001
|
||||
From: Sven Eckelmann <sven.eckelmann@openmesh.com>
|
||||
Date: Fri, 8 Dec 2017 11:37:42 +0100
|
||||
Subject: ath10k: search DT for qcom,ath10k-calibration-variant
|
||||
|
||||
Board Data File (BDF) is loaded upon driver boot-up procedure. The right
|
||||
board data file is identified on QCA4019 using bus, bmi-chip-id and
|
||||
bmi-board-id.
|
||||
|
||||
The problem, however, can occur when the (default) board data file cannot
|
||||
fulfill with the vendor requirements and it is necessary to use a different
|
||||
board data file.
|
||||
|
||||
This problem was solved for SMBIOS by adding a special SMBIOS type 0xF8.
|
||||
Something similar has to be provided for systems without SMBIOS but with
|
||||
device trees. No solution was specified by QCA and therefore a new one has
|
||||
to be found for ath10k.
|
||||
|
||||
The device tree requires addition strings to define the variant name
|
||||
|
||||
wifi@a000000 {
|
||||
status = "okay";
|
||||
qcom,ath10k-calibration-variant = "RT-AC58U";
|
||||
};
|
||||
|
||||
wifi@a800000 {
|
||||
status = "okay";
|
||||
qcom,ath10k-calibration-variant = "RT-AC58U";
|
||||
};
|
||||
|
||||
This would create the boarddata identifiers for the board-2.bin search
|
||||
|
||||
* bus=ahb,bmi-chip-id=0,bmi-board-id=16,variant=RT-AC58U
|
||||
* bus=ahb,bmi-chip-id=0,bmi-board-id=17,variant=RT-AC58U
|
||||
|
||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@openmesh.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
||||
|
||||
Origin: upstream, https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d06f26c5c8a41f246a9c40862a77a55725cedbd3
|
||||
---
|
||||
ath10k-4.13/core.c | 40 ++++++++++++++++++++++++++++------
|
||||
1 file changed, 33 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/ath10k-4.13/core.c
|
||||
+++ b/ath10k-4.13/core.c
|
||||
@@ -889,6 +889,28 @@ static int ath10k_core_check_smbios(stru
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int ath10k_core_check_dt(struct ath10k *ar)
|
||||
+{
|
||||
+ struct device_node *node;
|
||||
+ const char *variant = NULL;
|
||||
+
|
||||
+ node = ar->dev->of_node;
|
||||
+ if (!node)
|
||||
+ return -ENOENT;
|
||||
+
|
||||
+ of_property_read_string(node, "qcom,ath10k-calibration-variant",
|
||||
+ &variant);
|
||||
+ if (!variant)
|
||||
+ return -ENODATA;
|
||||
+
|
||||
+ if (strscpy(ar->id.bdf_ext, variant, sizeof(ar->id.bdf_ext)) < 0)
|
||||
+ ath10k_dbg(ar, ATH10K_DBG_BOOT,
|
||||
+ "bdf variant string is longer than the buffer can accommodate (variant: %s)\n",
|
||||
+ variant);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int ath10k_download_and_run_otp(struct ath10k *ar)
|
||||
{
|
||||
u32 result, address = ar->hw_params.patch_load_addr;
|
||||
@@ -1522,19 +1544,19 @@ static int ath10k_core_create_board_name
|
||||
/* strlen(',variant=') + strlen(ar->id.bdf_ext) */
|
||||
char variant[9 + ATH10K_SMBIOS_BDF_EXT_STR_LENGTH] = { 0 };
|
||||
|
||||
+ if (ar->id.bdf_ext[0] != '\0')
|
||||
+ scnprintf(variant, sizeof(variant), ",variant=%s",
|
||||
+ ar->id.bdf_ext);
|
||||
+
|
||||
if (ar->id.bmi_ids_valid) {
|
||||
scnprintf(name, name_len,
|
||||
- "bus=%s,bmi-chip-id=%d,bmi-board-id=%d",
|
||||
+ "bus=%s,bmi-chip-id=%d,bmi-board-id=%d%s",
|
||||
ath10k_bus_str(ar->hif.bus),
|
||||
ar->id.bmi_chip_id,
|
||||
- ar->id.bmi_board_id);
|
||||
+ ar->id.bmi_board_id, variant);
|
||||
goto out;
|
||||
}
|
||||
|
||||
- if (ar->id.bdf_ext[0] != '\0')
|
||||
- scnprintf(variant, sizeof(variant), ",variant=%s",
|
||||
- ar->id.bdf_ext);
|
||||
-
|
||||
scnprintf(name, name_len,
|
||||
"bus=%s,vendor=%04x,device=%04x,subsystem-vendor=%04x,subsystem-device=%04x%s",
|
||||
ath10k_bus_str(ar->hif.bus),
|
||||
@@ -2964,7 +2986,11 @@ static int ath10k_core_probe_fw(struct a
|
||||
|
||||
ret = ath10k_core_check_smbios(ar);
|
||||
if (ret)
|
||||
- ath10k_dbg(ar, ATH10K_DBG_BOOT, "bdf variant name not set.\n");
|
||||
+ ath10k_dbg(ar, ATH10K_DBG_BOOT, "SMBIOS bdf variant name not set.\n");
|
||||
+
|
||||
+ ret = ath10k_core_check_dt(ar);
|
||||
+ if (ret)
|
||||
+ ath10k_dbg(ar, ATH10K_DBG_BOOT, "DT bdf variant name not set.\n");
|
||||
|
||||
ret = ath10k_core_fetch_board_file(ar);
|
||||
if (ret) {
|
@ -0,0 +1,249 @@
|
||||
From: Thomas Hebb <tommyhebb@gmail.com>
|
||||
Date: Fri, 13 Apr 2018 17:40:26 +0300
|
||||
Subject: [PATCH] ath10k: search all IEs for variant before falling back
|
||||
|
||||
commit f2593cb1b291 ("ath10k: Search SMBIOS for OEM board file
|
||||
extension") added a feature to ath10k that allows Board Data File
|
||||
(BDF) conflicts between multiple devices that use the same device IDs
|
||||
but have different calibration requirements to be resolved by allowing
|
||||
a "variant" string to be stored in SMBIOS [and later device tree, added
|
||||
by commit d06f26c5c8a4 ("ath10k: search DT for qcom,ath10k-calibration-
|
||||
variant")] that gets appended to the ID stored in board-2.bin.
|
||||
|
||||
This original patch had a regression, however. Namely that devices with
|
||||
a variant present in SMBIOS that didn't need custom BDFs could no longer
|
||||
find the default BDF, which has no variant appended. The patch was
|
||||
reverted and re-applied with a fix for this issue in commit 1657b8f84ed9
|
||||
("search SMBIOS for OEM board file extension").
|
||||
|
||||
But the fix to fall back to a default BDF introduced another issue: the
|
||||
driver currently parses IEs in board-2.bin one by one, and for each one
|
||||
it first checks to see if it matches the ID with the variant appended.
|
||||
If it doesn't, it checks to see if it matches the "fallback" ID with no
|
||||
variant. If a matching BDF is found at any point during this search, the
|
||||
search is terminated and that BDF is used. The issue is that it's very
|
||||
possible (and is currently the case for board-2.bin files present in the
|
||||
ath10k-firmware repository) for the default BDF to occur in an earlier
|
||||
IE than the variant-specific BDF. In this case, the current code will
|
||||
happily choose the default BDF even though a better-matching BDF is
|
||||
present later in the file.
|
||||
|
||||
This patch fixes the issue by first searching the entire file for the ID
|
||||
with variant, and searching for the fallback ID only if that search
|
||||
fails. It also includes some code cleanup in the area, as
|
||||
ath10k_core_fetch_board_data_api_n() no longer does its own string
|
||||
mangling to remove the variant from an ID, instead leaving that job to a
|
||||
new flag passed to ath10k_core_create_board_name().
|
||||
|
||||
I've tested this patch on a QCA4019 and verified that the driver behaves
|
||||
correctly for 1) both fallback and variant BDFs present, 2) only fallback
|
||||
BDF present, and 3) no matching BDFs present.
|
||||
|
||||
Fixes: 1657b8f84ed9 ("ath10k: search SMBIOS for OEM board file extension")
|
||||
Signed-off-by: Thomas Hebb <tommyhebb@gmail.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
|
||||
Origin: backport, https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c8489668065a283d3027e86e877b103a87f99d22
|
||||
---
|
||||
ath10k-4.13/core.c | 134 ++++++++++++++++++---------------
|
||||
1 file changed, 72 insertions(+), 62 deletions(-)
|
||||
|
||||
--- a/ath10k-4.13/core.c
|
||||
+++ b/ath10k-4.13/core.c
|
||||
@@ -1419,14 +1419,61 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int ath10k_core_search_bd(struct ath10k *ar,
|
||||
+ const char *boardname,
|
||||
+ const u8 *data,
|
||||
+ size_t len)
|
||||
+{
|
||||
+ size_t ie_len;
|
||||
+ struct ath10k_fw_ie *hdr;
|
||||
+ int ret = -ENOENT, ie_id;
|
||||
+
|
||||
+ while (len > sizeof(struct ath10k_fw_ie)) {
|
||||
+ hdr = (struct ath10k_fw_ie *)data;
|
||||
+ ie_id = le32_to_cpu(hdr->id);
|
||||
+ ie_len = le32_to_cpu(hdr->len);
|
||||
+
|
||||
+ len -= sizeof(*hdr);
|
||||
+ data = hdr->data;
|
||||
+
|
||||
+ if (len < ALIGN(ie_len, 4)) {
|
||||
+ ath10k_err(ar, "invalid length for board ie_id %d ie_len %zu len %zu\n",
|
||||
+ ie_id, ie_len, len);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ switch (ie_id) {
|
||||
+ case ATH10K_BD_IE_BOARD:
|
||||
+ ret = ath10k_core_parse_bd_ie_board(ar, data, ie_len,
|
||||
+ boardname);
|
||||
+ if (ret == -ENOENT)
|
||||
+ /* no match found, continue */
|
||||
+ break;
|
||||
+
|
||||
+ /* either found or error, so stop searching */
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ /* jump over the padding */
|
||||
+ ie_len = ALIGN(ie_len, 4);
|
||||
+
|
||||
+ len -= ie_len;
|
||||
+ data += ie_len;
|
||||
+ }
|
||||
+
|
||||
+out:
|
||||
+ /* return result of parse_bd_ie_board() or -ENOENT */
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static int ath10k_core_fetch_board_data_api_n(struct ath10k *ar,
|
||||
const char *boardname,
|
||||
+ const char *fallback_boardname,
|
||||
const char *filename)
|
||||
{
|
||||
- size_t len, magic_len, ie_len;
|
||||
- struct ath10k_fw_ie *hdr;
|
||||
+ size_t len, magic_len;
|
||||
const u8 *data;
|
||||
- int ret, ie_id;
|
||||
+ int ret;
|
||||
|
||||
ar->normal_mode_fw.board = ath10k_fetch_fw_file(ar,
|
||||
ar->hw_params.fw.dir,
|
||||
@@ -1464,73 +1511,28 @@ static int ath10k_core_fetch_board_data_
|
||||
data += magic_len;
|
||||
len -= magic_len;
|
||||
|
||||
- while (len > sizeof(struct ath10k_fw_ie)) {
|
||||
- hdr = (struct ath10k_fw_ie *)data;
|
||||
- ie_id = le32_to_cpu(hdr->id);
|
||||
- ie_len = le32_to_cpu(hdr->len);
|
||||
-
|
||||
- len -= sizeof(*hdr);
|
||||
- data = hdr->data;
|
||||
-
|
||||
- if (len < ALIGN(ie_len, 4)) {
|
||||
- ath10k_err(ar, "invalid length for board ie_id %d ie_len %zu len %zu\n",
|
||||
- ie_id, ie_len, len);
|
||||
- ret = -EINVAL;
|
||||
- goto err;
|
||||
- }
|
||||
-
|
||||
- switch (ie_id) {
|
||||
- case ATH10K_BD_IE_BOARD:
|
||||
- ret = ath10k_core_parse_bd_ie_board(ar, data, ie_len,
|
||||
- boardname);
|
||||
- if (ret == -ENOENT && ar->id.bdf_ext[0] != '\0') {
|
||||
- /* try default bdf if variant was not found */
|
||||
- char *s, *v = ",variant=";
|
||||
- char boardname2[100];
|
||||
-
|
||||
- strlcpy(boardname2, boardname,
|
||||
- sizeof(boardname2));
|
||||
-
|
||||
- s = strstr(boardname2, v);
|
||||
- if (s)
|
||||
- *s = '\0'; /* strip ",variant=%s" */
|
||||
-
|
||||
- ret = ath10k_core_parse_bd_ie_board(ar, data,
|
||||
- ie_len,
|
||||
- boardname2);
|
||||
- }
|
||||
-
|
||||
- if (ret == -ENOENT)
|
||||
- /* no match found, continue */
|
||||
- break;
|
||||
- else if (ret)
|
||||
- /* there was an error, bail out */
|
||||
- goto err;
|
||||
-
|
||||
- /* board data found */
|
||||
- goto out;
|
||||
- }
|
||||
+ /* attempt to find boardname in the IE list */
|
||||
+ ret = ath10k_core_search_bd(ar, boardname, data, len);
|
||||
|
||||
- /* jump over the padding */
|
||||
- ie_len = ALIGN(ie_len, 4);
|
||||
-
|
||||
- len -= ie_len;
|
||||
- data += ie_len;
|
||||
- }
|
||||
+ /* if we didn't find it and have a fallback name, try that */
|
||||
+ if (ret == -ENOENT && fallback_boardname)
|
||||
+ ret = ath10k_core_search_bd(ar, fallback_boardname, data, len);
|
||||
|
||||
out:
|
||||
- if (!ar->normal_mode_fw.board_data || !ar->normal_mode_fw.board_len) {
|
||||
+ if (ret == -ENOENT) {
|
||||
ath10k_err(ar,
|
||||
"failed to fetch board data for %s from %s/%s\n",
|
||||
boardname, ar->hw_params.fw.dir, filename);
|
||||
ret = -ENODATA;
|
||||
- goto err;
|
||||
}
|
||||
|
||||
/* Save firmware board name so we can display it later. */
|
||||
strlcpy(ar->normal_mode_fw.fw_file.fw_board_name, filename,
|
||||
sizeof(ar->normal_mode_fw.fw_file.fw_board_name));
|
||||
|
||||
+ if (ret)
|
||||
+ goto err;
|
||||
+
|
||||
return 0;
|
||||
|
||||
err:
|
||||
@@ -1539,12 +1541,12 @@ err:
|
||||
}
|
||||
|
||||
static int ath10k_core_create_board_name(struct ath10k *ar, char *name,
|
||||
- size_t name_len)
|
||||
+ size_t name_len, bool with_variant)
|
||||
{
|
||||
/* strlen(',variant=') + strlen(ar->id.bdf_ext) */
|
||||
char variant[9 + ATH10K_SMBIOS_BDF_EXT_STR_LENGTH] = { 0 };
|
||||
|
||||
- if (ar->id.bdf_ext[0] != '\0')
|
||||
+ if (with_variant && ar->id.bdf_ext[0] != '\0')
|
||||
scnprintf(variant, sizeof(variant), ",variant=%s",
|
||||
ar->id.bdf_ext);
|
||||
|
||||
@@ -1570,21 +1572,31 @@ out:
|
||||
|
||||
static int ath10k_core_fetch_board_file(struct ath10k *ar)
|
||||
{
|
||||
- char boardname[100];
|
||||
+ char boardname[100], fallback_boardname[100];
|
||||
int ret;
|
||||
|
||||
- ret = ath10k_core_create_board_name(ar, boardname, sizeof(boardname));
|
||||
+ ret = ath10k_core_create_board_name(ar, boardname,
|
||||
+ sizeof(boardname), true);
|
||||
if (ret) {
|
||||
ath10k_err(ar, "failed to create board name: %d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
+ ret = ath10k_core_create_board_name(ar, fallback_boardname,
|
||||
+ sizeof(boardname), false);
|
||||
+ if (ret) {
|
||||
+ ath10k_err(ar, "failed to create fallback board name: %d", ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
ar->bd_api = 2;
|
||||
if (ar->fwcfg.bname[0])
|
||||
ret = ath10k_core_fetch_board_data_api_n(ar, boardname,
|
||||
+ fallback_boardname,
|
||||
ar->fwcfg.bname);
|
||||
else
|
||||
ret = ath10k_core_fetch_board_data_api_n(ar, boardname,
|
||||
+ fallback_boardname,
|
||||
ATH10K_BOARD_API2_FILE);
|
||||
if (!ret)
|
||||
goto success;
|
@ -434,11 +434,6 @@ static int __init nct5104d_gpio_init(void)
|
||||
const char *board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
|
||||
const char *board_name = dmi_get_system_info(DMI_BOARD_NAME);
|
||||
|
||||
/* Make sure we only run on PC Engine APU boards */
|
||||
if (!board_name || !board_vendor || strcasecmp(board_vendor, "PC Engines") || strncasecmp(board_name, "apu", 3)) {
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (nct5104d_find(0x2e, &sio) &&
|
||||
nct5104d_find(0x4e, &sio))
|
||||
return -ENODEV;
|
||||
|
@ -13,9 +13,10 @@ PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/dtaht/sch_cake.git
|
||||
PKG_SOURCE_DATE:=2018-05-15
|
||||
PKG_SOURCE_VERSION:=779e91a91e803cf2b95a6a46de721d3a4fd4dfe6
|
||||
PKG_MIRROR_HASH:=2bd1e9aee6d53a2a140ad5ece6d8eeccbfb8ae8c788e84f9dd946e29abb64010
|
||||
PKG_SOURCE_DATE:=2018-07-16
|
||||
PKG_SOURCE_VERSION:=f39ab9a402ad51d7c17d4cde18ca15b2b7022030
|
||||
PKG_MIRROR_HASH:=fc22fc6eb7a24f4595c2777f33758ebcf9a2a404c16d00aa37ae389cd7f9c78f
|
||||
PKG_MAINTAINER:=Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
|
@ -0,0 +1,12 @@
|
||||
--- a/src/drv_mei_cpe_api_atm_ptm_intern.c
|
||||
+++ b/src/drv_mei_cpe_api_atm_ptm_intern.c
|
||||
@@ -124,6 +124,9 @@ IFX_int32_t MEI_InternalXtmSwhowtimeExit
|
||||
/* Get line number*/
|
||||
dslLineNum = pMeiDynCntrl->pMeiDev->meiDrvCntrl.dslLineNum;
|
||||
|
||||
+ g_tx_link_rate[dslLineNum][0] = 0;
|
||||
+ g_tx_link_rate[dslLineNum][1] = 0;
|
||||
+
|
||||
/* get NULL or function pointer */
|
||||
mei_showtime_exit =
|
||||
(ltq_mei_atm_showtime_exit_t)ppa_callback_get(LTQ_MEI_SHOWTIME_EXIT);
|
@ -331,18 +331,6 @@ static int __init gpio_apu2_init (void)
|
||||
const char *board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
|
||||
const char *board_name = dmi_get_system_info(DMI_BOARD_NAME);
|
||||
|
||||
/* Match the device name/model */
|
||||
if (!board_name \
|
||||
|| !board_vendor \
|
||||
|| strcasecmp(board_vendor, "PC Engines") \
|
||||
|| (strcasecmp(board_name, "apu2") \
|
||||
&& strcasecmp(board_name, "apu3") \
|
||||
&& strcasecmp(board_name, "PC Engines apu2") \
|
||||
&& strcasecmp(board_name, "PC Engines apu3"))) {
|
||||
err = -ENODEV;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
pr_info ("%s: load APU2/LED GPIO driver module\n", DEVNAME);
|
||||
|
||||
err = platform_driver_register (&gpio_apu2_driver);
|
||||
|
@ -14,7 +14,7 @@ PKG_FLAGS:=hold
|
||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/packages
|
||||
SCAN_DEPS=modules/*.mk $(TOPDIR)/target/linux/*/modules.mk $(TOPDIR)/include/netfilter.mk
|
||||
|
||||
PKG_LICENSE:=GPLv2
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
PKG_LICENSE_FILES:=
|
||||
|
||||
export SHELL:=/bin/sh
|
||||
|
@ -568,5 +568,3 @@ define KernelPackage/fuse/description
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,fuse))
|
||||
|
||||
|
||||
|
@ -209,7 +209,7 @@ $(eval $(call KernelPackage,switch-ip17xx))
|
||||
define KernelPackage/switch-rtl8366-smi
|
||||
SUBMENU:=$(NETWORK_DEVICES_MENU)
|
||||
TITLE:=Realtek RTL8366 SMI switch interface support
|
||||
DEPENDS:=@GPIO_SUPPORT +kmod-swconfig
|
||||
DEPENDS:=@GPIO_SUPPORT +kmod-swconfig +(TARGET_armvirt||TARGET_brcm2708_bcm2708):kmod-of-mdio
|
||||
KCONFIG:=CONFIG_RTL8366_SMI
|
||||
FILES:=$(LINUX_DIR)/drivers/net/phy/rtl8366_smi.ko
|
||||
AUTOLOAD:=$(call AutoLoad,42,rtl8366_smi)
|
||||
@ -828,7 +828,7 @@ $(eval $(call KernelPackage,ifb))
|
||||
define KernelPackage/dm9000
|
||||
SUBMENU:=$(NETWORK_DEVICES_MENU)
|
||||
TITLE:=Davicom 9000 Ethernet support
|
||||
DEPENDS:=@PCI_SUPPORT +kmod-mii
|
||||
DEPENDS:=+kmod-mii
|
||||
KCONFIG:=CONFIG_DM9000 \
|
||||
CONFIG_DM9000_DEBUGLEVEL=4 \
|
||||
CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL=y
|
||||
|
@ -411,7 +411,8 @@ $(eval $(call KernelPackage,rfkill))
|
||||
define KernelPackage/softdog
|
||||
SUBMENU:=$(OTHER_MENU)
|
||||
TITLE:=Software watchdog driver
|
||||
KCONFIG:=CONFIG_SOFT_WATCHDOG
|
||||
KCONFIG:=CONFIG_SOFT_WATCHDOG \
|
||||
CONFIG_SOFT_WATCHDOG_PRETIMEOUT=n
|
||||
FILES:=$(LINUX_DIR)/drivers/$(WATCHDOG_DIR)/softdog.ko
|
||||
AUTOLOAD:=$(call AutoLoad,50,softdog,1)
|
||||
endef
|
||||
@ -707,11 +708,15 @@ define KernelPackage/regmap
|
||||
CONFIG_REGMAP_I2C \
|
||||
CONFIG_SPI=y
|
||||
FILES:= \
|
||||
$(LINUX_DIR)/drivers/base/regmap/regmap-core.ko \
|
||||
$(LINUX_DIR)/drivers/base/regmap/regmap-i2c.ko \
|
||||
$(LINUX_DIR)/drivers/base/regmap/regmap-mmio.ko \
|
||||
$(if $(CONFIG_SPI),$(LINUX_DIR)/drivers/base/regmap/regmap-spi.ko)
|
||||
AUTOLOAD:=$(call AutoLoad,21,regmap-core regmap-i2c regmap-mmio regmap-spi)
|
||||
ifeq ($(strip $(CONFIG_EXTERNAL_KERNEL_TREE)),"")
|
||||
ifeq ($(strip $(CONFIG_KERNEL_GIT_CLONE_URI)),"")
|
||||
FILES += $(LINUX_DIR)/drivers/base/regmap/regmap-core.ko
|
||||
endif
|
||||
endif
|
||||
endef
|
||||
|
||||
define KernelPackage/regmap/description
|
||||
|
@ -90,6 +90,25 @@ endef
|
||||
$(eval $(call KernelPackage,usb-phy-qcom-dwc3))
|
||||
|
||||
|
||||
define KernelPackage/phy-ath79-usb
|
||||
TITLE:=Support for ATH79 USB PHY
|
||||
KCONFIG:=CONFIG_PHY_AR7100_USB \
|
||||
CONFIG_PHY_AR7200_USB
|
||||
DEPENDS:=@TARGET_ath79
|
||||
HIDDEN:=1
|
||||
FILES:=$(LINUX_DIR)/drivers/phy/phy-ar7100-usb.ko \
|
||||
$(LINUX_DIR)/drivers/phy/phy-ar7200-usb.ko
|
||||
AUTOLOAD:=$(call AutoLoad,21,phy-ar7100-usb phy-ar7200-usb,1)
|
||||
$(call AddDepends/usb)
|
||||
endef
|
||||
|
||||
define KernelPackage/phy-ath79-usb/description
|
||||
Support for ATH79 USB transceiver
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,phy-ath79-usb))
|
||||
|
||||
|
||||
define KernelPackage/usb-gadget
|
||||
TITLE:=USB Gadget support
|
||||
KCONFIG:=CONFIG_USB_GADGET
|
||||
@ -131,7 +150,6 @@ define KernelPackage/usb-gadget-ehci-debug
|
||||
CONFIG_USB_G_DBGP_PRINTK=n
|
||||
DEPENDS:=+kmod-usb-gadget +kmod-usb-lib-composite +kmod-usb-gadget-serial
|
||||
FILES:=$(LINUX_DIR)/drivers/usb/gadget/legacy/g_dbgp.ko
|
||||
AUTOLOAD:=$(call AutoLoad,52,g_dbgp)
|
||||
$(call AddDepends/usb)
|
||||
endef
|
||||
|
||||
@ -154,7 +172,7 @@ define KernelPackage/usb-gadget-eth
|
||||
$(LINUX_DIR)/drivers/usb/gadget/function/usb_f_ecm_subset.ko \
|
||||
$(LINUX_DIR)/drivers/usb/gadget/function/usb_f_rndis.ko \
|
||||
$(LINUX_DIR)/drivers/usb/gadget/legacy/g_ether.ko
|
||||
AUTOLOAD:=$(call AutoLoad,52,usb_f_ecm g_ether)
|
||||
AUTOLOAD:=$(call AutoLoad,52,usb_f_ecm)
|
||||
$(call AddDepends/usb)
|
||||
endef
|
||||
|
||||
@ -175,7 +193,7 @@ define KernelPackage/usb-gadget-serial
|
||||
$(LINUX_DIR)/drivers/usb/gadget/function/usb_f_obex.ko \
|
||||
$(LINUX_DIR)/drivers/usb/gadget/function/usb_f_serial.ko \
|
||||
$(LINUX_DIR)/drivers/usb/gadget/legacy/g_serial.ko
|
||||
AUTOLOAD:=$(call AutoLoad,52,usb_f_acm g_serial)
|
||||
AUTOLOAD:=$(call AutoLoad,52,usb_f_acm)
|
||||
$(call AddDepends/usb)
|
||||
endef
|
||||
|
||||
@ -192,7 +210,7 @@ define KernelPackage/usb-gadget-mass-storage
|
||||
FILES:= \
|
||||
$(LINUX_DIR)/drivers/usb/gadget/function/usb_f_mass_storage.ko \
|
||||
$(LINUX_DIR)/drivers/usb/gadget/legacy/g_mass_storage.ko
|
||||
AUTOLOAD:=$(call AutoLoad,52,usb_f_mass_storage g_mass_storage)
|
||||
AUTOLOAD:=$(call AutoLoad,52,usb_f_mass_storage)
|
||||
$(call AddDepends/usb)
|
||||
endef
|
||||
|
||||
@ -314,6 +332,7 @@ define KernelPackage/usb2
|
||||
+TARGET_brcm47xx:kmod-usb-ssb \
|
||||
+TARGET_bcm53xx:kmod-usb-bcma \
|
||||
+TARGET_bcm53xx:kmod-phy-bcm-ns-usb2 \
|
||||
+TARGET_ath79:kmod-phy-ath79-usb \
|
||||
+kmod-usb-ehci
|
||||
KCONFIG:=\
|
||||
CONFIG_USB_EHCI_HCD_PLATFORM \
|
||||
@ -1493,7 +1512,7 @@ $(eval $(call KernelPackage,usbip-server))
|
||||
|
||||
define KernelPackage/usb-chipidea
|
||||
TITLE:=Host and device support for Chipidea controllers
|
||||
DEPENDS:=+USB_GADGET_SUPPORT:kmod-usb-gadget @TARGET_ar71xx +kmod-usb-ehci +kmod-usb-phy-nop
|
||||
DEPENDS:=+USB_GADGET_SUPPORT:kmod-usb-gadget @TARGET_ar71xx||TARGET_ath79 +kmod-usb-ehci +kmod-usb-phy-nop
|
||||
KCONFIG:= \
|
||||
CONFIG_EXTCON \
|
||||
CONFIG_USB_CHIPIDEA \
|
||||
@ -1514,6 +1533,31 @@ endef
|
||||
|
||||
$(eval $(call KernelPackage,usb-chipidea))
|
||||
|
||||
|
||||
define KernelPackage/usb-chipidea2
|
||||
TITLE:=Host and device support for Chipidea2 controllers
|
||||
DEPENDS:=+kmod-usb-chipidea
|
||||
KCONFIG:= \
|
||||
CONFIG_EXTCON \
|
||||
CONFIG_USB_CHIPIDEA \
|
||||
CONFIG_USB_CHIPIDEA_HOST=y \
|
||||
CONFIG_USB_CHIPIDEA_UDC=y \
|
||||
CONFIG_USB_CHIPIDEA_DEBUG=y
|
||||
FILES:= \
|
||||
$(LINUX_DIR)/drivers/extcon/extcon.ko@lt4.9 \
|
||||
$(LINUX_DIR)/drivers/extcon/extcon-core.ko@ge4.9 \
|
||||
$(LINUX_DIR)/drivers/usb/chipidea/ci_hdrc_usb2.ko
|
||||
AUTOLOAD:=$(call AutoLoad,39,ci_hdrc_usb2,1)
|
||||
$(call AddDepends/usb)
|
||||
endef
|
||||
|
||||
define KernelPackage/usb-chipidea2/description
|
||||
Kernel support for USB Chipidea controllers
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,usb-chipidea2))
|
||||
|
||||
|
||||
define KernelPackage/usbmon
|
||||
TITLE:=USB traffic monitor
|
||||
KCONFIG:=CONFIG_USB_MON
|
||||
|
@ -11,7 +11,7 @@ include $(INCLUDE_DIR)/kernel.mk
|
||||
PKG_NAME:=mac80211
|
||||
|
||||
PKG_VERSION:=2017-11-01
|
||||
PKG_RELEASE:=8
|
||||
PKG_RELEASE:=9
|
||||
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
|
||||
PKG_HASH:=8437ab7886b988c8152e7a4db30b7f41009e49a3b2cb863edd05da1ecd7eb05a
|
||||
|
||||
@ -57,6 +57,7 @@ PKG_CONFIG_DEPENDS:= \
|
||||
CONFIG_PACKAGE_ATH_DEBUG \
|
||||
CONFIG_PACKAGE_ATH_DFS \
|
||||
CONFIG_PACKAGE_ATH_SPECTRAL \
|
||||
CONFIG_PACKAGE_ATH_DYNACK \
|
||||
CONFIG_PACKAGE_B43_DEBUG \
|
||||
CONFIG_PACKAGE_B43_PIO \
|
||||
CONFIG_PACKAGE_B43_PHY_G \
|
||||
@ -197,6 +198,17 @@ define KernelPackage/ath/config
|
||||
help
|
||||
Say Y to enable access to the FFT/spectral data via debugfs.
|
||||
|
||||
config PACKAGE_ATH_DYNACK
|
||||
bool "Enable Dynack support"
|
||||
depends on PACKAGE_kmod-ath9k-common
|
||||
help
|
||||
Enables support for Dynamic ACK estimation, which allows the fastest possible speed
|
||||
at any distance automatically by increasing/decreasing the max frame ACK time for
|
||||
the most remote station detected. It can be enabled by using iw (iw phy0 set distance auto),
|
||||
or by sending the NL80211_ATTR_WIPHY_DYN_ACK flag to mac80211 driver using netlink.
|
||||
|
||||
Select this option if you want to enable this feature
|
||||
|
||||
endif
|
||||
endef
|
||||
|
||||
@ -1614,7 +1626,7 @@ config-$(call config_package,ath) += ATH_CARDS ATH_COMMON ATH_REG_DYNAMIC_USER_R
|
||||
config-$(CONFIG_PACKAGE_ATH_DEBUG) += ATH_DEBUG ATH10K_DEBUG ATH9K_STATION_STATISTICS
|
||||
config-$(CONFIG_PACKAGE_ATH_DFS) += ATH9K_DFS_CERTIFIED ATH10K_DFS_CERTIFIED
|
||||
config-$(CONFIG_PACKAGE_ATH_SPECTRAL) += ATH9K_COMMON_SPECTRAL ATH10K_SPECTRAL
|
||||
|
||||
config-$(CONFIG_PACKAGE_ATH_DYNACK) += ATH9K_DYNACK
|
||||
config-$(call config_package,ath9k) += ATH9K
|
||||
config-$(call config_package,ath9k-common) += ATH9K_COMMON
|
||||
config-$(CONFIG_TARGET_ar71xx) += ATH9K_AHB
|
||||
|
@ -111,9 +111,9 @@ detect_mac80211() {
|
||||
set wireless.radio${devidx}.type=mac80211
|
||||
set wireless.radio${devidx}.channel=${channel}
|
||||
set wireless.radio${devidx}.hwmode=11${mode_band}
|
||||
set wireless.radio${devidx}.noscan=1
|
||||
${dev_id}
|
||||
${ht_capab}
|
||||
set wireless.radio${devidx}.disabled=0
|
||||
|
||||
set wireless.default_radio${devidx}=wifi-iface
|
||||
set wireless.default_radio${devidx}.device=radio${devidx}
|
||||
|
@ -0,0 +1,43 @@
|
||||
From 52a192362932f333a7ebafd581c4d9b81da2fec8 Mon Sep 17 00:00:00 2001
|
||||
From: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||
Date: Mon, 28 May 2018 13:25:06 +0200
|
||||
Subject: [PATCH] Revert "rt2800: use TXOP_BACKOFF for probe frames"
|
||||
|
||||
This reverts commit fb47ada8dc3c30c8e7b415da155742b49536c61e.
|
||||
|
||||
In some situations when we set TXOP_BACKOFF, the probe frame is
|
||||
not sent at all. What it worse then sending probe frame as part
|
||||
of AMPDU and can degrade 11n performance to 11g rates.
|
||||
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/ralink/rt2x00/rt2x00queue.c | 7 +++----
|
||||
1 file changed, 3 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
|
||||
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
|
||||
@@ -372,16 +372,15 @@ static void rt2x00queue_create_tx_descri
|
||||
|
||||
/*
|
||||
* Determine IFS values
|
||||
- * - Use TXOP_BACKOFF for probe and management frames except beacons
|
||||
+ * - Use TXOP_BACKOFF for management frames except beacons
|
||||
* - Use TXOP_SIFS for fragment bursts
|
||||
* - Use TXOP_HTTXOP for everything else
|
||||
*
|
||||
* Note: rt2800 devices won't use CTS protection (if used)
|
||||
* for frames not transmitted with TXOP_HTTXOP
|
||||
*/
|
||||
- if ((ieee80211_is_mgmt(hdr->frame_control) &&
|
||||
- !ieee80211_is_beacon(hdr->frame_control)) ||
|
||||
- (tx_info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE))
|
||||
+ if (ieee80211_is_mgmt(hdr->frame_control) &&
|
||||
+ !ieee80211_is_beacon(hdr->frame_control))
|
||||
txdesc->u.ht.txop = TXOP_BACKOFF;
|
||||
else if (!(tx_info->flags & IEEE80211_TX_CTL_FIRST_FRAGMENT))
|
||||
txdesc->u.ht.txop = TXOP_SIFS;
|
||||
--
|
||||
2.17.1
|
||||
|
@ -173,7 +173,8 @@
|
||||
#define AES_CCM_H
|
||||
|
||||
-#include "aead_api.h"
|
||||
-
|
||||
+#include <linux/crypto.h>
|
||||
|
||||
-#define CCM_AAD_LEN 32
|
||||
-
|
||||
-static inline struct crypto_aead *
|
||||
@ -201,8 +202,7 @@
|
||||
- be16_to_cpup((__be16 *)aad),
|
||||
- data, data_len, mic);
|
||||
-}
|
||||
+#include <linux/crypto.h>
|
||||
|
||||
-
|
||||
-static inline void ieee80211_aes_key_free(struct crypto_aead *tfm)
|
||||
-{
|
||||
- return aead_key_free(tfm);
|
||||
@ -338,10 +338,10 @@
|
||||
#define AES_GCM_H
|
||||
|
||||
-#include "aead_api.h"
|
||||
-
|
||||
-#define GCM_AAD_LEN 32
|
||||
+#include <linux/crypto.h>
|
||||
|
||||
-#define GCM_AAD_LEN 32
|
||||
-
|
||||
-static inline int ieee80211_aes_gcm_encrypt(struct crypto_aead *tfm,
|
||||
- u8 *j_0, u8 *aad, u8 *data,
|
||||
- size_t data_len, u8 *mic)
|
||||
|
@ -20,12 +20,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
-void ieee80211_aes_cmac(struct crypto_shash *tfm, const u8 *aad,
|
||||
- const u8 *data, size_t data_len, u8 *mic)
|
||||
+void gf_mulx(u8 *pad)
|
||||
{
|
||||
- SHASH_DESC_ON_STACK(desc, tfm);
|
||||
- u8 out[AES_BLOCK_SIZE];
|
||||
+{
|
||||
+ int i, carry;
|
||||
|
||||
- desc->tfm = tfm;
|
||||
+
|
||||
+ carry = pad[0] & 0x80;
|
||||
+ for (i = 0; i < AES_BLOCK_SIZE - 1; i++)
|
||||
+ pad[i] = (pad[i] << 1) | (pad[i + 1] >> 7);
|
||||
@ -33,20 +30,17 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+ if (carry)
|
||||
+ pad[AES_BLOCK_SIZE - 1] ^= 0x87;
|
||||
+}
|
||||
|
||||
- crypto_shash_init(desc);
|
||||
- crypto_shash_update(desc, aad, AAD_LEN);
|
||||
- crypto_shash_update(desc, data, data_len - CMAC_TLEN);
|
||||
- crypto_shash_finup(desc, zero, CMAC_TLEN, out);
|
||||
+
|
||||
+void aes_cmac_vector(struct crypto_cipher *tfm, size_t num_elem,
|
||||
+ const u8 *addr[], const size_t *len, u8 *mac,
|
||||
+ size_t mac_len)
|
||||
+{
|
||||
{
|
||||
- SHASH_DESC_ON_STACK(desc, tfm);
|
||||
- u8 out[AES_BLOCK_SIZE];
|
||||
+ u8 cbc[AES_BLOCK_SIZE], pad[AES_BLOCK_SIZE];
|
||||
+ const u8 *pos, *end;
|
||||
+ size_t i, e, left, total_len;
|
||||
|
||||
- memcpy(mic, out, CMAC_TLEN);
|
||||
+
|
||||
+ memset(cbc, 0, AES_BLOCK_SIZE);
|
||||
+
|
||||
+ total_len = 0;
|
||||
@ -93,10 +87,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+ pad[i] ^= cbc[i];
|
||||
+ crypto_cipher_encrypt_one(tfm, pad, pad);
|
||||
+ memcpy(mac, pad, mac_len);
|
||||
}
|
||||
+}
|
||||
|
||||
-void ieee80211_aes_cmac_256(struct crypto_shash *tfm, const u8 *aad,
|
||||
+
|
||||
- desc->tfm = tfm;
|
||||
|
||||
- crypto_shash_init(desc);
|
||||
- crypto_shash_update(desc, aad, AAD_LEN);
|
||||
- crypto_shash_update(desc, data, data_len - CMAC_TLEN);
|
||||
- crypto_shash_finup(desc, zero, CMAC_TLEN, out);
|
||||
+void ieee80211_aes_cmac(struct crypto_cipher *tfm, const u8 *aad,
|
||||
+ const u8 *data, size_t data_len, u8 *mic)
|
||||
+{
|
||||
@ -111,10 +109,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+ len[1] = data_len - CMAC_TLEN;
|
||||
+ addr[2] = zero;
|
||||
+ len[2] = CMAC_TLEN;
|
||||
+
|
||||
|
||||
- memcpy(mic, out, CMAC_TLEN);
|
||||
+ aes_cmac_vector(tfm, 3, addr, len, mic, CMAC_TLEN);
|
||||
+}
|
||||
+
|
||||
}
|
||||
|
||||
-void ieee80211_aes_cmac_256(struct crypto_shash *tfm, const u8 *aad,
|
||||
+void ieee80211_aes_cmac_256(struct crypto_cipher *tfm, const u8 *aad,
|
||||
const u8 *data, size_t data_len, u8 *mic)
|
||||
{
|
||||
@ -122,8 +122,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+ const u8 *addr[3];
|
||||
+ size_t len[3];
|
||||
+ u8 zero[CMAC_TLEN_256];
|
||||
|
||||
- desc->tfm = tfm;
|
||||
+
|
||||
+ memset(zero, 0, CMAC_TLEN_256);
|
||||
+ addr[0] = aad;
|
||||
+ len[0] = AAD_LEN;
|
||||
@ -132,6 +131,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+ addr[2] = zero;
|
||||
+ len[2] = CMAC_TLEN_256;
|
||||
|
||||
- desc->tfm = tfm;
|
||||
-
|
||||
- crypto_shash_init(desc);
|
||||
- crypto_shash_update(desc, aad, AAD_LEN);
|
||||
- crypto_shash_update(desc, data, data_len - CMAC_TLEN_256);
|
||||
|
@ -88,7 +88,7 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
- spec_scan = true;
|
||||
- } else
|
||||
- brcmf_dbg(SCAN, "Broadcast scan\n");
|
||||
|
||||
-
|
||||
- passive_scan = cfg->active_scan ? 0 : 1;
|
||||
- err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_PASSIVE_SCAN,
|
||||
- passive_scan);
|
||||
@ -105,15 +105,17 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
- ssid_le.SSID);
|
||||
- else
|
||||
- brcmf_err("WLC_SCAN error (%d)\n", err);
|
||||
+ cfg->escan_info.run = brcmf_run_escan;
|
||||
+ err = brcmf_p2p_scan_prep(wiphy, request, vif);
|
||||
+ if (err)
|
||||
+ goto scan_out;
|
||||
|
||||
-
|
||||
- brcmf_scan_config_mpc(ifp, 1);
|
||||
- goto scan_out;
|
||||
- }
|
||||
- }
|
||||
+
|
||||
+ cfg->escan_info.run = brcmf_run_escan;
|
||||
+ err = brcmf_p2p_scan_prep(wiphy, request, vif);
|
||||
+ if (err)
|
||||
+ goto scan_out;
|
||||
+
|
||||
+ err = brcmf_do_escan(vif->ifp, request);
|
||||
+ if (err)
|
||||
+ goto scan_out;
|
||||
|
@ -141,12 +141,12 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
- func = SDIO_FUNC_0;
|
||||
- else
|
||||
- func = SDIO_FUNC_1;
|
||||
|
||||
-
|
||||
- do {
|
||||
- /* for retry wait for 1 ms till bus get settled down */
|
||||
- if (retry)
|
||||
- usleep_range(1000, 2000);
|
||||
-
|
||||
|
||||
- ret = brcmf_sdiod_request_data(sdiodev, func, addr, regsz,
|
||||
- data, true);
|
||||
-
|
||||
|
@ -198,14 +198,14 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
int retval;
|
||||
|
||||
- retval = brcmf_sdiod_reg_read(sdiodev, addr, 1, &data);
|
||||
+ retval = brcmf_sdiod_addrprep(sdiodev, &addr);
|
||||
|
||||
-
|
||||
- if (ret)
|
||||
- *ret = retval;
|
||||
-
|
||||
- return data;
|
||||
-}
|
||||
-
|
||||
+ retval = brcmf_sdiod_addrprep(sdiodev, &addr);
|
||||
|
||||
-u32 brcmf_sdiod_regrl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret)
|
||||
-{
|
||||
- u32 data;
|
||||
|
@ -62,10 +62,10 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
+ if (!err)
|
||||
sdiodev->sbwad = bar0;
|
||||
- }
|
||||
-
|
||||
|
||||
- *addr &= SBSDIO_SB_OFT_ADDR_MASK;
|
||||
- *addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
|
||||
|
||||
-
|
||||
- return 0;
|
||||
+ return err;
|
||||
}
|
||||
@ -99,14 +99,14 @@ Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
+ retval = brcmf_sdiod_set_backplane_window(sdiodev, addr);
|
||||
+ if (retval)
|
||||
+ goto out;
|
||||
+
|
||||
+ addr &= SBSDIO_SB_OFT_ADDR_MASK;
|
||||
+ addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
|
||||
|
||||
- if (!retval)
|
||||
- sdio_writel(sdiodev->func[1], data, addr, &retval);
|
||||
+ sdio_writel(sdiodev->func[1], data, addr, &retval);
|
||||
+ addr &= SBSDIO_SB_OFT_ADDR_MASK;
|
||||
+ addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
|
||||
|
||||
+ sdio_writel(sdiodev->func[1], data, addr, &retval);
|
||||
+
|
||||
+out:
|
||||
if (ret)
|
||||
*ret = retval;
|
||||
|
@ -0,0 +1,45 @@
|
||||
From da472385a29f1fddcac7cfa0499482704310bd16 Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Tue, 20 Feb 2018 00:14:18 +0100
|
||||
Subject: [PATCH] brcmfmac: move brcmf_bus_preinit() call just after changing
|
||||
bus state
|
||||
|
||||
Moving the brcmf_bus_preinit() call allows the bus code to do some
|
||||
required initialization before handling firmware control messages.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c | 3 ---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 5 +++++
|
||||
2 files changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
@@ -369,9 +369,6 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
|
||||
|
||||
/* Enable tx beamforming, errors can be ignored (not supported) */
|
||||
(void)brcmf_fil_iovar_int_set(ifp, "txbf", 1);
|
||||
-
|
||||
- /* do bus specific preinit here */
|
||||
- err = brcmf_bus_preinit(ifp->drvr->bus_if);
|
||||
done:
|
||||
return err;
|
||||
}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1091,6 +1091,11 @@ int brcmf_bus_started(struct device *dev
|
||||
/* signal bus ready */
|
||||
brcmf_bus_change_state(bus_if, BRCMF_BUS_UP);
|
||||
|
||||
+ /* do bus specific preinit here */
|
||||
+ ret = brcmf_bus_preinit(ifp->drvr->bus_if);
|
||||
+ if (ret < 0)
|
||||
+ goto fail;
|
||||
+
|
||||
/* Bus is ready, do any initialization */
|
||||
ret = brcmf_c_preinit_dcmds(ifp);
|
||||
if (ret < 0)
|
@ -0,0 +1,69 @@
|
||||
From 4b5adc736828dc25ca33e263ad8c0b9dcd3bf325 Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Tue, 20 Feb 2018 00:14:19 +0100
|
||||
Subject: [PATCH] brcmfmac: move allocation of control rx buffer to
|
||||
brcmf_sdio_bus_preinit()
|
||||
|
||||
Allocate the control rx buffer needed for firmware control interface
|
||||
during brcmf_sdio_bus_preinit(). This relies on common layer setting
|
||||
struct brcmf_bus::maxctl during brcmf_attach(). By moving the allocation
|
||||
we can move brcmf_attach() in subsequent change.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 26 ++++++++++------------
|
||||
1 file changed, 12 insertions(+), 14 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -1707,7 +1707,6 @@ brcmf_sdio_read_control(struct brcmf_sdi
|
||||
int sdret;
|
||||
|
||||
brcmf_dbg(TRACE, "Enter\n");
|
||||
-
|
||||
if (bus->rxblen)
|
||||
buf = vzalloc(bus->rxblen);
|
||||
if (!buf)
|
||||
@@ -3411,6 +3410,18 @@ static int brcmf_sdio_bus_preinit(struct
|
||||
u32 value;
|
||||
int err;
|
||||
|
||||
+ /* maxctl provided by common layer */
|
||||
+ if (WARN_ON(!bus_if->maxctl))
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ /* Allocate control receive buffer */
|
||||
+ bus_if->maxctl += bus->roundup;
|
||||
+ value = roundup((bus_if->maxctl + SDPCM_HDRLEN), ALIGNMENT);
|
||||
+ value += bus->head_align;
|
||||
+ bus->rxbuf = kmalloc(value, GFP_ATOMIC);
|
||||
+ if (bus->rxbuf)
|
||||
+ bus->rxblen = value;
|
||||
+
|
||||
/* the commands below use the terms tx and rx from
|
||||
* a device perspective, ie. bus:txglom affects the
|
||||
* bus transfers from device to host.
|
||||
@@ -4209,19 +4220,6 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
|
||||
bus->blocksize = bus->sdiodev->func2->cur_blksize;
|
||||
bus->roundup = min(max_roundup, bus->blocksize);
|
||||
|
||||
- /* Allocate buffers */
|
||||
- if (bus->sdiodev->bus_if->maxctl) {
|
||||
- bus->sdiodev->bus_if->maxctl += bus->roundup;
|
||||
- bus->rxblen =
|
||||
- roundup((bus->sdiodev->bus_if->maxctl + SDPCM_HDRLEN),
|
||||
- ALIGNMENT) + bus->head_align;
|
||||
- bus->rxbuf = kmalloc(bus->rxblen, GFP_ATOMIC);
|
||||
- if (!(bus->rxbuf)) {
|
||||
- brcmf_err("rxbuf allocation failed\n");
|
||||
- goto fail;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
sdio_claim_host(bus->sdiodev->func1);
|
||||
|
||||
/* Disable F2 to clear any intermediate frame state on the dongle */
|
@ -0,0 +1,106 @@
|
||||
From 262f2b53f67936b59cc8dfc6f3899ab8905bf1ed Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Tue, 20 Feb 2018 00:14:20 +0100
|
||||
Subject: [PATCH] brcmfmac: call brcmf_attach() just before calling
|
||||
brcmf_bus_started()
|
||||
|
||||
Now we can move brcmf_attach() until after the firmware has been downloaded
|
||||
to the device. Make the call just before brcmf_bus_started().
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/core.c | 6 ++++
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 34 +++++++++++-----------
|
||||
2 files changed, 23 insertions(+), 17 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1268,6 +1268,12 @@ void brcmf_bus_change_state(struct brcmf
|
||||
int ifidx;
|
||||
|
||||
brcmf_dbg(TRACE, "%d -> %d\n", bus->state, state);
|
||||
+
|
||||
+ if (!drvr) {
|
||||
+ brcmf_dbg(INFO, "ignoring transition, bus not attached yet\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
bus->state = state;
|
||||
|
||||
if (state == BRCMF_BUS_UP) {
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -4048,9 +4048,6 @@ static void brcmf_sdio_firmware_callback
|
||||
if (err)
|
||||
goto fail;
|
||||
|
||||
- if (!bus_if->drvr)
|
||||
- return;
|
||||
-
|
||||
/* try to download image and nvram to the dongle */
|
||||
bus->alp_only = true;
|
||||
err = brcmf_sdio_download_firmware(bus, code, nvram, nvram_len);
|
||||
@@ -4126,11 +4123,28 @@ static void brcmf_sdio_firmware_callback
|
||||
|
||||
sdio_release_host(sdiodev->func1);
|
||||
|
||||
+ /* Assign bus interface call back */
|
||||
+ sdiodev->bus_if->dev = sdiodev->dev;
|
||||
+ sdiodev->bus_if->ops = &brcmf_sdio_bus_ops;
|
||||
+ sdiodev->bus_if->chip = bus->ci->chip;
|
||||
+ sdiodev->bus_if->chiprev = bus->ci->chiprev;
|
||||
+
|
||||
+ /* Attach to the common layer, reserve hdr space */
|
||||
+ err = brcmf_attach(sdiodev->dev, sdiodev->settings);
|
||||
+ if (err != 0) {
|
||||
+ brcmf_err("brcmf_attach failed\n");
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
+ brcmf_sdio_debugfs_create(bus);
|
||||
+
|
||||
err = brcmf_bus_started(dev);
|
||||
if (err != 0) {
|
||||
brcmf_err("dongle is not responding\n");
|
||||
goto fail;
|
||||
}
|
||||
+
|
||||
+ /* ready */
|
||||
return;
|
||||
|
||||
release:
|
||||
@@ -4200,22 +4214,9 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
|
||||
bus->dpc_triggered = false;
|
||||
bus->dpc_running = false;
|
||||
|
||||
- /* Assign bus interface call back */
|
||||
- bus->sdiodev->bus_if->dev = bus->sdiodev->dev;
|
||||
- bus->sdiodev->bus_if->ops = &brcmf_sdio_bus_ops;
|
||||
- bus->sdiodev->bus_if->chip = bus->ci->chip;
|
||||
- bus->sdiodev->bus_if->chiprev = bus->ci->chiprev;
|
||||
-
|
||||
/* default sdio bus header length for tx packet */
|
||||
bus->tx_hdrlen = SDPCM_HWHDR_LEN + SDPCM_SWHDR_LEN;
|
||||
|
||||
- /* Attach to the common layer, reserve hdr space */
|
||||
- ret = brcmf_attach(bus->sdiodev->dev, bus->sdiodev->settings);
|
||||
- if (ret != 0) {
|
||||
- brcmf_err("brcmf_attach failed\n");
|
||||
- goto fail;
|
||||
- }
|
||||
-
|
||||
/* Query the F2 block size, set roundup accordingly */
|
||||
bus->blocksize = bus->sdiodev->func2->cur_blksize;
|
||||
bus->roundup = min(max_roundup, bus->blocksize);
|
||||
@@ -4240,7 +4241,6 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
|
||||
/* SR state */
|
||||
bus->sr_enabled = false;
|
||||
|
||||
- brcmf_sdio_debugfs_create(bus);
|
||||
brcmf_dbg(INFO, "completed!!\n");
|
||||
|
||||
ret = brcmf_fw_map_chip_to_name(bus->ci->chip, bus->ci->chiprev,
|
@ -0,0 +1,41 @@
|
||||
From a7f4a80c0070b673d4a4ce94b99979ea6d0c6296 Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Tue, 20 Feb 2018 00:14:21 +0100
|
||||
Subject: [PATCH] brcmfmac: usb: call brcmf_usb_up() during brcmf_bus_preinit()
|
||||
|
||||
By calling brcmf_usb_up() during brcmf_bus_preinit() it does not need
|
||||
to be called in brcmf_usb_bus_setup().
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 7 ++-----
|
||||
1 file changed, 2 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -1146,8 +1146,9 @@ static int brcmf_usb_get_fwname(struct d
|
||||
}
|
||||
|
||||
static const struct brcmf_bus_ops brcmf_usb_bus_ops = {
|
||||
- .txdata = brcmf_usb_tx,
|
||||
+ .preinit = brcmf_usb_up,
|
||||
.stop = brcmf_usb_down,
|
||||
+ .txdata = brcmf_usb_tx,
|
||||
.txctl = brcmf_usb_tx_ctlpkt,
|
||||
.rxctl = brcmf_usb_rx_ctlpkt,
|
||||
.wowl_config = brcmf_usb_wowl_config,
|
||||
@@ -1165,10 +1166,6 @@ static int brcmf_usb_bus_setup(struct br
|
||||
return ret;
|
||||
}
|
||||
|
||||
- ret = brcmf_usb_up(devinfo->dev);
|
||||
- if (ret)
|
||||
- goto fail;
|
||||
-
|
||||
ret = brcmf_bus_started(devinfo->dev);
|
||||
if (ret)
|
||||
goto fail;
|
@ -0,0 +1,130 @@
|
||||
From 0542503c4c164c65cd1567b0f2b3f887af6c81eb Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Tue, 20 Feb 2018 00:14:22 +0100
|
||||
Subject: [PATCH] brcmfmac: move brcmf_attach() function in core.c
|
||||
|
||||
Moving the function in preparation of subsequent patch.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/core.c | 98 +++++++++++-----------
|
||||
1 file changed, 49 insertions(+), 49 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -992,55 +992,6 @@ static int brcmf_inet6addr_changed(struc
|
||||
}
|
||||
#endif
|
||||
|
||||
-int brcmf_attach(struct device *dev, struct brcmf_mp_device *settings)
|
||||
-{
|
||||
- struct brcmf_pub *drvr = NULL;
|
||||
- int ret = 0;
|
||||
- int i;
|
||||
-
|
||||
- brcmf_dbg(TRACE, "Enter\n");
|
||||
-
|
||||
- /* Allocate primary brcmf_info */
|
||||
- drvr = kzalloc(sizeof(struct brcmf_pub), GFP_ATOMIC);
|
||||
- if (!drvr)
|
||||
- return -ENOMEM;
|
||||
-
|
||||
- for (i = 0; i < ARRAY_SIZE(drvr->if2bss); i++)
|
||||
- drvr->if2bss[i] = BRCMF_BSSIDX_INVALID;
|
||||
-
|
||||
- mutex_init(&drvr->proto_block);
|
||||
-
|
||||
- /* Link to bus module */
|
||||
- drvr->hdrlen = 0;
|
||||
- drvr->bus_if = dev_get_drvdata(dev);
|
||||
- drvr->bus_if->drvr = drvr;
|
||||
- drvr->settings = settings;
|
||||
-
|
||||
- /* attach debug facilities */
|
||||
- brcmf_debug_attach(drvr);
|
||||
-
|
||||
- /* Attach and link in the protocol */
|
||||
- ret = brcmf_proto_attach(drvr);
|
||||
- if (ret != 0) {
|
||||
- brcmf_err("brcmf_prot_attach failed\n");
|
||||
- goto fail;
|
||||
- }
|
||||
-
|
||||
- /* Attach to events important for core code */
|
||||
- brcmf_fweh_register(drvr, BRCMF_E_PSM_WATCHDOG,
|
||||
- brcmf_psm_watchdog_notify);
|
||||
-
|
||||
- /* attach firmware event handler */
|
||||
- brcmf_fweh_attach(drvr);
|
||||
-
|
||||
- return ret;
|
||||
-
|
||||
-fail:
|
||||
- brcmf_detach(dev);
|
||||
-
|
||||
- return ret;
|
||||
-}
|
||||
-
|
||||
static int brcmf_revinfo_read(struct seq_file *s, void *data)
|
||||
{
|
||||
struct brcmf_bus *bus_if = dev_get_drvdata(s->private);
|
||||
@@ -1170,6 +1121,55 @@ fail:
|
||||
|
||||
return ret;
|
||||
}
|
||||
+
|
||||
+int brcmf_attach(struct device *dev, struct brcmf_mp_device *settings)
|
||||
+{
|
||||
+ struct brcmf_pub *drvr = NULL;
|
||||
+ int ret = 0;
|
||||
+ int i;
|
||||
+
|
||||
+ brcmf_dbg(TRACE, "Enter\n");
|
||||
+
|
||||
+ /* Allocate primary brcmf_info */
|
||||
+ drvr = kzalloc(sizeof(*drvr), GFP_ATOMIC);
|
||||
+ if (!drvr)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(drvr->if2bss); i++)
|
||||
+ drvr->if2bss[i] = BRCMF_BSSIDX_INVALID;
|
||||
+
|
||||
+ mutex_init(&drvr->proto_block);
|
||||
+
|
||||
+ /* Link to bus module */
|
||||
+ drvr->hdrlen = 0;
|
||||
+ drvr->bus_if = dev_get_drvdata(dev);
|
||||
+ drvr->bus_if->drvr = drvr;
|
||||
+ drvr->settings = settings;
|
||||
+
|
||||
+ /* attach debug facilities */
|
||||
+ brcmf_debug_attach(drvr);
|
||||
+
|
||||
+ /* Attach and link in the protocol */
|
||||
+ ret = brcmf_proto_attach(drvr);
|
||||
+ if (ret != 0) {
|
||||
+ brcmf_err("brcmf_prot_attach failed\n");
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
+ /* Attach to events important for core code */
|
||||
+ brcmf_fweh_register(drvr, BRCMF_E_PSM_WATCHDOG,
|
||||
+ brcmf_psm_watchdog_notify);
|
||||
+
|
||||
+ /* attach firmware event handler */
|
||||
+ brcmf_fweh_attach(drvr);
|
||||
+
|
||||
+ return ret;
|
||||
+
|
||||
+fail:
|
||||
+ brcmf_detach(dev);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
|
||||
void brcmf_bus_add_txhdrlen(struct device *dev, uint len)
|
||||
{
|
@ -0,0 +1,190 @@
|
||||
From de2a3027f6f15e2f6558dc4d178282ccc1f054db Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Tue, 20 Feb 2018 00:14:23 +0100
|
||||
Subject: [PATCH] brcmfmac: remove brcmf_bus_started() from bus api
|
||||
|
||||
No longer needed to call this in bus layer so make it static and call
|
||||
it in the last phase of brcmf_attach() instead.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/bus.h | 1 -
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/core.c | 14 +++++++----
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/pcie.c | 20 +---------------
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 10 ++------
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 28 ++++------------------
|
||||
5 files changed, 16 insertions(+), 57 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||
@@ -253,7 +253,6 @@ void brcmf_dev_reset(struct device *dev)
|
||||
/* Configure the "global" bus state used by upper layers */
|
||||
void brcmf_bus_change_state(struct brcmf_bus *bus, enum brcmf_bus_state state);
|
||||
|
||||
-int brcmf_bus_started(struct device *dev);
|
||||
s32 brcmf_iovar_data_set(struct device *dev, char *name, void *data, u32 len);
|
||||
void brcmf_bus_add_txhdrlen(struct device *dev, uint len);
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1022,11 +1022,10 @@ static int brcmf_revinfo_read(struct seq
|
||||
return 0;
|
||||
}
|
||||
|
||||
-int brcmf_bus_started(struct device *dev)
|
||||
+static int brcmf_bus_started(struct brcmf_pub *drvr)
|
||||
{
|
||||
int ret = -1;
|
||||
- struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||
- struct brcmf_pub *drvr = bus_if->drvr;
|
||||
+ struct brcmf_bus *bus_if = drvr->bus_if;
|
||||
struct brcmf_if *ifp;
|
||||
struct brcmf_if *p2p_ifp;
|
||||
|
||||
@@ -1043,7 +1042,7 @@ int brcmf_bus_started(struct device *dev
|
||||
brcmf_bus_change_state(bus_if, BRCMF_BUS_UP);
|
||||
|
||||
/* do bus specific preinit here */
|
||||
- ret = brcmf_bus_preinit(ifp->drvr->bus_if);
|
||||
+ ret = brcmf_bus_preinit(bus_if);
|
||||
if (ret < 0)
|
||||
goto fail;
|
||||
|
||||
@@ -1163,7 +1162,12 @@ int brcmf_attach(struct device *dev, str
|
||||
/* attach firmware event handler */
|
||||
brcmf_fweh_attach(drvr);
|
||||
|
||||
- return ret;
|
||||
+ ret = brcmf_bus_started(drvr);
|
||||
+ if (ret != 0) {
|
||||
+ brcmf_err("dongle is not responding: err=%d\n", ret);
|
||||
+ goto fail;
|
||||
+ }
|
||||
+ return 0;
|
||||
|
||||
fail:
|
||||
brcmf_detach(dev);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -1581,24 +1581,6 @@ static void brcmf_pcie_release_resource(
|
||||
}
|
||||
|
||||
|
||||
-static int brcmf_pcie_attach_bus(struct brcmf_pciedev_info *devinfo)
|
||||
-{
|
||||
- int ret;
|
||||
-
|
||||
- /* Attach to the common driver interface */
|
||||
- ret = brcmf_attach(&devinfo->pdev->dev, devinfo->settings);
|
||||
- if (ret) {
|
||||
- brcmf_err("brcmf_attach failed\n");
|
||||
- } else {
|
||||
- ret = brcmf_bus_started(&devinfo->pdev->dev);
|
||||
- if (ret)
|
||||
- brcmf_err("dongle is not responding\n");
|
||||
- }
|
||||
-
|
||||
- return ret;
|
||||
-}
|
||||
-
|
||||
-
|
||||
static u32 brcmf_pcie_buscore_prep_addr(const struct pci_dev *pdev, u32 addr)
|
||||
{
|
||||
u32 ret_addr;
|
||||
@@ -1735,7 +1717,7 @@ static void brcmf_pcie_setup(struct devi
|
||||
init_waitqueue_head(&devinfo->mbdata_resp_wait);
|
||||
|
||||
brcmf_pcie_intr_enable(devinfo);
|
||||
- if (brcmf_pcie_attach_bus(devinfo) == 0)
|
||||
+ if (brcmf_attach(&devinfo->pdev->dev, devinfo->settings) == 0)
|
||||
return;
|
||||
|
||||
brcmf_pcie_bus_console_read(devinfo);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -3422,6 +3422,8 @@ static int brcmf_sdio_bus_preinit(struct
|
||||
if (bus->rxbuf)
|
||||
bus->rxblen = value;
|
||||
|
||||
+ brcmf_sdio_debugfs_create(bus);
|
||||
+
|
||||
/* the commands below use the terms tx and rx from
|
||||
* a device perspective, ie. bus:txglom affects the
|
||||
* bus transfers from device to host.
|
||||
@@ -4136,14 +4138,6 @@ static void brcmf_sdio_firmware_callback
|
||||
goto fail;
|
||||
}
|
||||
|
||||
- brcmf_sdio_debugfs_create(bus);
|
||||
-
|
||||
- err = brcmf_bus_started(dev);
|
||||
- if (err != 0) {
|
||||
- brcmf_err("dongle is not responding\n");
|
||||
- goto fail;
|
||||
- }
|
||||
-
|
||||
/* ready */
|
||||
return;
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -1155,27 +1155,6 @@ static const struct brcmf_bus_ops brcmf_
|
||||
.get_fwname = brcmf_usb_get_fwname,
|
||||
};
|
||||
|
||||
-static int brcmf_usb_bus_setup(struct brcmf_usbdev_info *devinfo)
|
||||
-{
|
||||
- int ret;
|
||||
-
|
||||
- /* Attach to the common driver interface */
|
||||
- ret = brcmf_attach(devinfo->dev, devinfo->settings);
|
||||
- if (ret) {
|
||||
- brcmf_err("brcmf_attach failed\n");
|
||||
- return ret;
|
||||
- }
|
||||
-
|
||||
- ret = brcmf_bus_started(devinfo->dev);
|
||||
- if (ret)
|
||||
- goto fail;
|
||||
-
|
||||
- return 0;
|
||||
-fail:
|
||||
- brcmf_detach(devinfo->dev);
|
||||
- return ret;
|
||||
-}
|
||||
-
|
||||
static void brcmf_usb_probe_phase2(struct device *dev, int ret,
|
||||
const struct firmware *fw,
|
||||
void *nvram, u32 nvlen)
|
||||
@@ -1203,7 +1182,8 @@ static void brcmf_usb_probe_phase2(struc
|
||||
if (ret)
|
||||
goto error;
|
||||
|
||||
- ret = brcmf_usb_bus_setup(devinfo);
|
||||
+ /* Attach to the common driver interface */
|
||||
+ ret = brcmf_attach(devinfo->dev, devinfo->settings);
|
||||
if (ret)
|
||||
goto error;
|
||||
|
||||
@@ -1253,7 +1233,7 @@ static int brcmf_usb_probe_cb(struct brc
|
||||
}
|
||||
|
||||
if (!brcmf_usb_dlneeded(devinfo)) {
|
||||
- ret = brcmf_usb_bus_setup(devinfo);
|
||||
+ ret = brcmf_attach(devinfo->dev, devinfo->settings);
|
||||
if (ret)
|
||||
goto fail;
|
||||
/* we are done */
|
||||
@@ -1456,7 +1436,7 @@ static int brcmf_usb_resume(struct usb_i
|
||||
|
||||
brcmf_dbg(USB, "Enter\n");
|
||||
if (!devinfo->wowl_enabled)
|
||||
- return brcmf_usb_bus_setup(devinfo);
|
||||
+ return brcmf_attach(devinfo->dev, devinfo->settings);
|
||||
|
||||
devinfo->bus_pub.state = BRCMFMAC_USB_STATE_UP;
|
||||
brcmf_usb_rx_fill_all(devinfo);
|
@ -0,0 +1,64 @@
|
||||
From d678296bfb9a630d0000222fc21f4ed0d0d65332 Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Tue, 20 Feb 2018 00:14:24 +0100
|
||||
Subject: [PATCH] brcmfmac: change log level for some low-level sdio functions
|
||||
|
||||
Reducing the number of trace level messages in sdio code giving
|
||||
them sdio log level instead.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -1706,7 +1706,7 @@ brcmf_sdio_read_control(struct brcmf_sdi
|
||||
u8 *buf = NULL, *rbuf;
|
||||
int sdret;
|
||||
|
||||
- brcmf_dbg(TRACE, "Enter\n");
|
||||
+ brcmf_dbg(SDIO, "Enter\n");
|
||||
if (bus->rxblen)
|
||||
buf = vzalloc(bus->rxblen);
|
||||
if (!buf)
|
||||
@@ -1809,7 +1809,7 @@ static uint brcmf_sdio_readframes(struct
|
||||
struct brcmf_sdio_hdrinfo *rd = &bus->cur_read, rd_new;
|
||||
u8 head_read = 0;
|
||||
|
||||
- brcmf_dbg(TRACE, "Enter\n");
|
||||
+ brcmf_dbg(SDIO, "Enter\n");
|
||||
|
||||
/* Not finished unless we encounter no more frames indication */
|
||||
bus->rxpending = true;
|
||||
@@ -2344,7 +2344,7 @@ static int brcmf_sdio_tx_ctrlframe(struc
|
||||
struct brcmf_sdio_hdrinfo hd_info = {0};
|
||||
int ret;
|
||||
|
||||
- brcmf_dbg(TRACE, "Enter\n");
|
||||
+ brcmf_dbg(SDIO, "Enter\n");
|
||||
|
||||
/* Back the pointer to make room for bus header */
|
||||
frame -= bus->tx_hdrlen;
|
||||
@@ -2520,7 +2520,7 @@ static void brcmf_sdio_dpc(struct brcmf_
|
||||
uint framecnt; /* Temporary counter of tx/rx frames */
|
||||
int err = 0;
|
||||
|
||||
- brcmf_dbg(TRACE, "Enter\n");
|
||||
+ brcmf_dbg(SDIO, "Enter\n");
|
||||
|
||||
sdio_claim_host(bus->sdiodev->func1);
|
||||
|
||||
@@ -2605,7 +2605,7 @@ static void brcmf_sdio_dpc(struct brcmf_
|
||||
|
||||
/* Would be active due to wake-wlan in gSPI */
|
||||
if (intstatus & I_CHIPACTIVE) {
|
||||
- brcmf_dbg(INFO, "Dongle reports CHIPACTIVE\n");
|
||||
+ brcmf_dbg(SDIO, "Dongle reports CHIPACTIVE\n");
|
||||
intstatus &= ~I_CHIPACTIVE;
|
||||
}
|
||||
|
@ -0,0 +1,126 @@
|
||||
From 2d6edad4b2da1991f74e7b02053eeb4a043b887f Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Tue, 20 Feb 2018 00:14:25 +0100
|
||||
Subject: [PATCH] brcmfmac: remove duplicate pointer variable from
|
||||
brcmf_sdio_firmware_callback()
|
||||
|
||||
In brcmf_sdio_firmware_callback() two pointer variables were used
|
||||
pointing to the same construct. Get rid of sdiodev variable.
|
||||
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 37 +++++++++++-----------
|
||||
1 file changed, 18 insertions(+), 19 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -4039,9 +4039,8 @@ static void brcmf_sdio_firmware_callback
|
||||
void *nvram, u32 nvram_len)
|
||||
{
|
||||
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||
- struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
|
||||
- struct brcmf_sdio *bus = sdiodev->bus;
|
||||
- struct brcmf_sdio_dev *sdiod = bus->sdiodev;
|
||||
+ struct brcmf_sdio_dev *sdiod = bus_if->bus_priv.sdio;
|
||||
+ struct brcmf_sdio *bus = sdiod->bus;
|
||||
struct brcmf_core *core = bus->sdio_core;
|
||||
u8 saveclk;
|
||||
|
||||
@@ -4061,7 +4060,7 @@ static void brcmf_sdio_firmware_callback
|
||||
bus->sdcnt.tickcnt = 0;
|
||||
brcmf_sdio_wd_timer(bus, true);
|
||||
|
||||
- sdio_claim_host(sdiodev->func1);
|
||||
+ sdio_claim_host(sdiod->func1);
|
||||
|
||||
/* Make sure backplane clock is on, needed to generate F2 interrupt */
|
||||
brcmf_sdio_clkctl(bus, CLK_AVAIL, false);
|
||||
@@ -4069,9 +4068,9 @@ static void brcmf_sdio_firmware_callback
|
||||
goto release;
|
||||
|
||||
/* Force clocks on backplane to be sure F2 interrupt propagates */
|
||||
- saveclk = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, &err);
|
||||
+ saveclk = brcmf_sdiod_readb(sdiod, SBSDIO_FUNC1_CHIPCLKCSR, &err);
|
||||
if (!err) {
|
||||
- brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
|
||||
+ brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_CHIPCLKCSR,
|
||||
(saveclk | SBSDIO_FORCE_HT), &err);
|
||||
}
|
||||
if (err) {
|
||||
@@ -4083,7 +4082,7 @@ static void brcmf_sdio_firmware_callback
|
||||
brcmf_sdiod_writel(sdiod, core->base + SD_REG(tosbmailboxdata),
|
||||
SDPCM_PROT_VERSION << SMB_DATA_VERSION_SHIFT, NULL);
|
||||
|
||||
- err = sdio_enable_func(sdiodev->func2);
|
||||
+ err = sdio_enable_func(sdiod->func2);
|
||||
|
||||
brcmf_dbg(INFO, "enable F2: err=%d\n", err);
|
||||
|
||||
@@ -4095,10 +4094,10 @@ static void brcmf_sdio_firmware_callback
|
||||
bus->hostintmask, NULL);
|
||||
|
||||
|
||||
- brcmf_sdiod_writeb(sdiodev, SBSDIO_WATERMARK, 8, &err);
|
||||
+ brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK, 8, &err);
|
||||
} else {
|
||||
/* Disable F2 again */
|
||||
- sdio_disable_func(sdiodev->func2);
|
||||
+ sdio_disable_func(sdiod->func2);
|
||||
goto release;
|
||||
}
|
||||
|
||||
@@ -4106,7 +4105,7 @@ static void brcmf_sdio_firmware_callback
|
||||
brcmf_sdio_sr_init(bus);
|
||||
} else {
|
||||
/* Restore previous clock setting */
|
||||
- brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
|
||||
+ brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_CHIPCLKCSR,
|
||||
saveclk, &err);
|
||||
}
|
||||
|
||||
@@ -4114,7 +4113,7 @@ static void brcmf_sdio_firmware_callback
|
||||
/* Allow full data communication using DPC from now on. */
|
||||
brcmf_sdiod_change_state(bus->sdiodev, BRCMF_SDIOD_DATA);
|
||||
|
||||
- err = brcmf_sdiod_intr_register(sdiodev);
|
||||
+ err = brcmf_sdiod_intr_register(sdiod);
|
||||
if (err != 0)
|
||||
brcmf_err("intr register failed:%d\n", err);
|
||||
}
|
||||
@@ -4123,16 +4122,16 @@ static void brcmf_sdio_firmware_callback
|
||||
if (err != 0)
|
||||
brcmf_sdio_clkctl(bus, CLK_NONE, false);
|
||||
|
||||
- sdio_release_host(sdiodev->func1);
|
||||
+ sdio_release_host(sdiod->func1);
|
||||
|
||||
/* Assign bus interface call back */
|
||||
- sdiodev->bus_if->dev = sdiodev->dev;
|
||||
- sdiodev->bus_if->ops = &brcmf_sdio_bus_ops;
|
||||
- sdiodev->bus_if->chip = bus->ci->chip;
|
||||
- sdiodev->bus_if->chiprev = bus->ci->chiprev;
|
||||
+ sdiod->bus_if->dev = sdiod->dev;
|
||||
+ sdiod->bus_if->ops = &brcmf_sdio_bus_ops;
|
||||
+ sdiod->bus_if->chip = bus->ci->chip;
|
||||
+ sdiod->bus_if->chiprev = bus->ci->chiprev;
|
||||
|
||||
/* Attach to the common layer, reserve hdr space */
|
||||
- err = brcmf_attach(sdiodev->dev, sdiodev->settings);
|
||||
+ err = brcmf_attach(sdiod->dev, sdiod->settings);
|
||||
if (err != 0) {
|
||||
brcmf_err("brcmf_attach failed\n");
|
||||
goto fail;
|
||||
@@ -4142,10 +4141,10 @@ static void brcmf_sdio_firmware_callback
|
||||
return;
|
||||
|
||||
release:
|
||||
- sdio_release_host(sdiodev->func1);
|
||||
+ sdio_release_host(sdiod->func1);
|
||||
fail:
|
||||
brcmf_dbg(TRACE, "failed: dev=%s, err=%d\n", dev_name(dev), err);
|
||||
- device_release_driver(&sdiodev->func2->dev);
|
||||
+ device_release_driver(&sdiod->func2->dev);
|
||||
device_release_driver(dev);
|
||||
}
|
||||
|
@ -0,0 +1,27 @@
|
||||
From 64d1519edc959f5b8f86a66a51c40971c215e4ec Mon Sep 17 00:00:00 2001
|
||||
From: Johannes Berg <johannes.berg@intel.com>
|
||||
Date: Mon, 19 Feb 2018 13:30:45 +0100
|
||||
Subject: [PATCH] brcmfmac: reject too long PSK
|
||||
|
||||
nl80211 already allows specifying 48 bytes, but brcmfmac
|
||||
only supports 32. Reject keys that are too long.
|
||||
|
||||
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -5125,6 +5125,9 @@ static int brcmf_cfg80211_set_pmk(struct
|
||||
if (WARN_ON(ifp->vif->profile.use_fwsup != BRCMF_PROFILE_FWSUP_1X))
|
||||
return -EINVAL;
|
||||
|
||||
+ if (conf->pmk_len > BRCMF_WSEC_MAX_PSK_LEN)
|
||||
+ return -ERANGE;
|
||||
+
|
||||
return brcmf_set_pmk(ifp, conf->pmk, conf->pmk_len);
|
||||
}
|
||||
|
@ -0,0 +1,31 @@
|
||||
From 1170f6d1be6a39e1a115a2c0f50923eb4ce2a7ec Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 22 Mar 2018 21:28:20 +0100
|
||||
Subject: [PATCH] brcmfmac: do not convert linux error to firmware error string
|
||||
|
||||
In case of a linux error brcmf_fil_cmd_data() blurts an error message
|
||||
in which the error code is translated to an error string. However, it
|
||||
maps it to a firmware error string which should not happen. Simply
|
||||
print only the numeric error code and be done with it.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.c
|
||||
@@ -124,8 +124,7 @@ brcmf_fil_cmd_data(struct brcmf_if *ifp,
|
||||
data, len, &fwerr);
|
||||
|
||||
if (err) {
|
||||
- brcmf_dbg(FIL, "Failed: %s (%d)\n",
|
||||
- brcmf_fil_get_errstr((u32)(-err)), err);
|
||||
+ brcmf_dbg(FIL, "Failed: error=%d\n", err);
|
||||
} else if (fwerr < 0) {
|
||||
brcmf_dbg(FIL, "Firmware error: %s (%d)\n",
|
||||
brcmf_fil_get_errstr((u32)(-fwerr)), fwerr);
|
@ -0,0 +1,203 @@
|
||||
From 756a2b390874d274f2f615921318ef0856ff9313 Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 22 Mar 2018 21:28:21 +0100
|
||||
Subject: [PATCH] brcmfmac: use brcmf_chip_name() to store name in revinfo
|
||||
|
||||
The chip id can either be four or five digits. For the chip name either
|
||||
the hexadecimal value needs to be taken (four digits) or the decimal
|
||||
value (five digits). The function brcmf_chip_name() does this conversion
|
||||
so use it to store the name in driver revision info.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/chip.c | 9 +++++----
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/chip.h | 3 ++-
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/common.c | 23 ++++++++++++++++------
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/core.c | 10 +---------
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/core.h | 3 +--
|
||||
5 files changed, 26 insertions(+), 22 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
|
||||
@@ -464,12 +464,12 @@ static void brcmf_chip_ai_resetcore(stru
|
||||
ci->ops->read32(ci->ctx, core->wrapbase + BCMA_IOCTL);
|
||||
}
|
||||
|
||||
-static char *brcmf_chip_name(uint chipid, char *buf, uint len)
|
||||
+char *brcmf_chip_name(u32 id, u32 rev, char *buf, uint len)
|
||||
{
|
||||
const char *fmt;
|
||||
|
||||
- fmt = ((chipid > 0xa000) || (chipid < 0x4000)) ? "%d" : "%x";
|
||||
- snprintf(buf, len, fmt, chipid);
|
||||
+ fmt = ((id > 0xa000) || (id < 0x4000)) ? "BCM%d/%u" : "BCM%x/%u";
|
||||
+ snprintf(buf, len, fmt, id, rev);
|
||||
return buf;
|
||||
}
|
||||
|
||||
@@ -924,7 +924,8 @@ static int brcmf_chip_recognition(struct
|
||||
ci->pub.chiprev = (regdata & CID_REV_MASK) >> CID_REV_SHIFT;
|
||||
socitype = (regdata & CID_TYPE_MASK) >> CID_TYPE_SHIFT;
|
||||
|
||||
- brcmf_chip_name(ci->pub.chip, ci->pub.name, sizeof(ci->pub.name));
|
||||
+ brcmf_chip_name(ci->pub.chip, ci->pub.chiprev,
|
||||
+ ci->pub.name, sizeof(ci->pub.name));
|
||||
brcmf_dbg(INFO, "found %s chip: BCM%s, rev=%d\n",
|
||||
socitype == SOCI_SB ? "SB" : "AXI", ci->pub.name,
|
||||
ci->pub.chiprev);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.h
|
||||
@@ -45,7 +45,7 @@ struct brcmf_chip {
|
||||
u32 rambase;
|
||||
u32 ramsize;
|
||||
u32 srsize;
|
||||
- char name[8];
|
||||
+ char name[12];
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -93,5 +93,6 @@ void brcmf_chip_resetcore(struct brcmf_c
|
||||
void brcmf_chip_set_passive(struct brcmf_chip *ci);
|
||||
bool brcmf_chip_set_active(struct brcmf_chip *ci, u32 rstvec);
|
||||
bool brcmf_chip_sr_capable(struct brcmf_chip *pub);
|
||||
+char *brcmf_chip_name(u32 chipid, u32 chiprev, char *buf, uint len);
|
||||
|
||||
#endif /* BRCMF_AXIDMP_H */
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "common.h"
|
||||
#include "of.h"
|
||||
#include "firmware.h"
|
||||
+#include "chip.h"
|
||||
|
||||
MODULE_AUTHOR("Broadcom Corporation");
|
||||
MODULE_DESCRIPTION("Broadcom 802.11 wireless LAN fullmac driver.");
|
||||
@@ -131,14 +132,13 @@ static int brcmf_c_download(struct brcmf
|
||||
static int brcmf_c_get_clm_name(struct brcmf_if *ifp, u8 *clm_name)
|
||||
{
|
||||
struct brcmf_bus *bus = ifp->drvr->bus_if;
|
||||
- struct brcmf_rev_info *ri = &ifp->drvr->revinfo;
|
||||
u8 fw_name[BRCMF_FW_NAME_LEN];
|
||||
u8 *ptr;
|
||||
size_t len;
|
||||
s32 err;
|
||||
|
||||
memset(fw_name, 0, BRCMF_FW_NAME_LEN);
|
||||
- err = brcmf_bus_get_fwname(bus, ri->chipnum, ri->chiprev, fw_name);
|
||||
+ err = brcmf_bus_get_fwname(bus, bus->chip, bus->chiprev, fw_name);
|
||||
if (err) {
|
||||
brcmf_err("get firmware name failed (%d)\n", err);
|
||||
goto done;
|
||||
@@ -238,6 +238,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
|
||||
{
|
||||
s8 eventmask[BRCMF_EVENTING_MASK_LEN];
|
||||
u8 buf[BRCMF_DCMD_SMLEN];
|
||||
+ struct brcmf_bus *bus;
|
||||
struct brcmf_rev_info_le revinfo;
|
||||
struct brcmf_rev_info *ri;
|
||||
char *clmver;
|
||||
@@ -253,16 +254,18 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
|
||||
}
|
||||
memcpy(ifp->drvr->mac, ifp->mac_addr, sizeof(ifp->drvr->mac));
|
||||
|
||||
+ bus = ifp->drvr->bus_if;
|
||||
+ ri = &ifp->drvr->revinfo;
|
||||
+
|
||||
err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_REVINFO,
|
||||
&revinfo, sizeof(revinfo));
|
||||
- ri = &ifp->drvr->revinfo;
|
||||
if (err < 0) {
|
||||
brcmf_err("retrieving revision info failed, %d\n", err);
|
||||
+ strlcpy(ri->chipname, "UNKNOWN", sizeof(ri->chipname));
|
||||
} else {
|
||||
ri->vendorid = le32_to_cpu(revinfo.vendorid);
|
||||
ri->deviceid = le32_to_cpu(revinfo.deviceid);
|
||||
ri->radiorev = le32_to_cpu(revinfo.radiorev);
|
||||
- ri->chiprev = le32_to_cpu(revinfo.chiprev);
|
||||
ri->corerev = le32_to_cpu(revinfo.corerev);
|
||||
ri->boardid = le32_to_cpu(revinfo.boardid);
|
||||
ri->boardvendor = le32_to_cpu(revinfo.boardvendor);
|
||||
@@ -270,15 +273,23 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
|
||||
ri->driverrev = le32_to_cpu(revinfo.driverrev);
|
||||
ri->ucoderev = le32_to_cpu(revinfo.ucoderev);
|
||||
ri->bus = le32_to_cpu(revinfo.bus);
|
||||
- ri->chipnum = le32_to_cpu(revinfo.chipnum);
|
||||
ri->phytype = le32_to_cpu(revinfo.phytype);
|
||||
ri->phyrev = le32_to_cpu(revinfo.phyrev);
|
||||
ri->anarev = le32_to_cpu(revinfo.anarev);
|
||||
ri->chippkg = le32_to_cpu(revinfo.chippkg);
|
||||
ri->nvramrev = le32_to_cpu(revinfo.nvramrev);
|
||||
+
|
||||
+ if (!bus->chip) {
|
||||
+ bus->chip = le32_to_cpu(revinfo.chipnum);
|
||||
+ bus->chiprev = le32_to_cpu(revinfo.chiprev);
|
||||
+ }
|
||||
}
|
||||
ri->result = err;
|
||||
|
||||
+ if (bus->chip)
|
||||
+ brcmf_chip_name(bus->chip, bus->chiprev,
|
||||
+ ri->chipname, sizeof(ri->chipname));
|
||||
+
|
||||
/* Do any CLM downloading */
|
||||
err = brcmf_c_process_clm_blob(ifp);
|
||||
if (err < 0) {
|
||||
@@ -299,7 +310,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
|
||||
strsep(&ptr, "\n");
|
||||
|
||||
/* Print fw version info */
|
||||
- brcmf_info("Firmware version = %s\n", buf);
|
||||
+ brcmf_info("Firmware: %s %s\n", ri->chipname, buf);
|
||||
|
||||
/* locate firmware version number for ethtool */
|
||||
ptr = strrchr(buf, ' ') + 1;
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1002,8 +1002,7 @@ static int brcmf_revinfo_read(struct seq
|
||||
seq_printf(s, "vendorid: 0x%04x\n", ri->vendorid);
|
||||
seq_printf(s, "deviceid: 0x%04x\n", ri->deviceid);
|
||||
seq_printf(s, "radiorev: %s\n", brcmu_dotrev_str(ri->radiorev, drev));
|
||||
- seq_printf(s, "chipnum: %u (%x)\n", ri->chipnum, ri->chipnum);
|
||||
- seq_printf(s, "chiprev: %u\n", ri->chiprev);
|
||||
+ seq_printf(s, "chip: %s\n", ri->chipname);
|
||||
seq_printf(s, "chippkg: %u\n", ri->chippkg);
|
||||
seq_printf(s, "corerev: %u\n", ri->corerev);
|
||||
seq_printf(s, "boardid: 0x%04x\n", ri->boardid);
|
||||
@@ -1053,13 +1052,6 @@ static int brcmf_bus_started(struct brcm
|
||||
|
||||
brcmf_debugfs_add_entry(drvr, "revinfo", brcmf_revinfo_read);
|
||||
|
||||
- /* assure we have chipid before feature attach */
|
||||
- if (!bus_if->chip) {
|
||||
- bus_if->chip = drvr->revinfo.chipnum;
|
||||
- bus_if->chiprev = drvr->revinfo.chiprev;
|
||||
- brcmf_dbg(INFO, "firmware revinfo: chip %x (%d) rev %d\n",
|
||||
- bus_if->chip, bus_if->chip, bus_if->chiprev);
|
||||
- }
|
||||
brcmf_feat_attach(drvr);
|
||||
|
||||
ret = brcmf_proto_init_done(drvr);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
||||
@@ -87,7 +87,6 @@ struct brcmf_rev_info {
|
||||
u32 vendorid;
|
||||
u32 deviceid;
|
||||
u32 radiorev;
|
||||
- u32 chiprev;
|
||||
u32 corerev;
|
||||
u32 boardid;
|
||||
u32 boardvendor;
|
||||
@@ -95,7 +94,7 @@ struct brcmf_rev_info {
|
||||
u32 driverrev;
|
||||
u32 ucoderev;
|
||||
u32 bus;
|
||||
- u32 chipnum;
|
||||
+ char chipname[12];
|
||||
u32 phytype;
|
||||
u32 phyrev;
|
||||
u32 anarev;
|
@ -0,0 +1,69 @@
|
||||
From c88cfa075de356ddf40c668896b2126340f19ba4 Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 22 Mar 2018 21:28:22 +0100
|
||||
Subject: [PATCH] brcmfmac: use brcmf_chip_name() for consistency
|
||||
|
||||
When logging the chip id/revision information make use of
|
||||
brcmf_chip_name() so it is always the same.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c | 5 ++---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | 7 +++++--
|
||||
2 files changed, 7 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
|
||||
@@ -926,9 +926,8 @@ static int brcmf_chip_recognition(struct
|
||||
|
||||
brcmf_chip_name(ci->pub.chip, ci->pub.chiprev,
|
||||
ci->pub.name, sizeof(ci->pub.name));
|
||||
- brcmf_dbg(INFO, "found %s chip: BCM%s, rev=%d\n",
|
||||
- socitype == SOCI_SB ? "SB" : "AXI", ci->pub.name,
|
||||
- ci->pub.chiprev);
|
||||
+ brcmf_dbg(INFO, "found %s chip: %s\n",
|
||||
+ socitype == SOCI_SB ? "SB" : "AXI", ci->pub.name);
|
||||
|
||||
if (socitype == SOCI_SB) {
|
||||
if (ci->pub.chip != BRCM_CC_4329_CHIP_ID) {
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "firmware.h"
|
||||
#include "core.h"
|
||||
#include "common.h"
|
||||
+#include "chip.h"
|
||||
|
||||
#define BRCMF_FW_MAX_NVRAM_SIZE 64000
|
||||
#define BRCMF_FW_NVRAM_DEVPATH_LEN 19 /* devpath0=pcie/1/4/ */
|
||||
@@ -567,6 +568,7 @@ int brcmf_fw_map_chip_to_name(u32 chip,
|
||||
u32 table_size, char fw_name[BRCMF_FW_NAME_LEN],
|
||||
char nvram_name[BRCMF_FW_NAME_LEN])
|
||||
{
|
||||
+ char chipname[12];
|
||||
u32 i;
|
||||
char end;
|
||||
|
||||
@@ -581,6 +583,8 @@ int brcmf_fw_map_chip_to_name(u32 chip,
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
+ brcmf_chip_name(chip, chiprev, chipname, sizeof(chipname));
|
||||
+
|
||||
/* check if firmware path is provided by module parameter */
|
||||
if (brcmf_mp_global.firmware_path[0] != '\0') {
|
||||
strlcpy(fw_name, brcmf_mp_global.firmware_path,
|
||||
@@ -601,8 +605,7 @@ int brcmf_fw_map_chip_to_name(u32 chip,
|
||||
if ((nvram_name) && (mapping_table[i].nvram))
|
||||
strlcat(nvram_name, mapping_table[i].nvram, BRCMF_FW_NAME_LEN);
|
||||
|
||||
- brcmf_info("using %s for chip %#08x(%d) rev %#08x\n",
|
||||
- fw_name, chip, chip, chiprev);
|
||||
+ brcmf_info("using %s for chip %s\n", fw_name, chipname);
|
||||
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,452 @@
|
||||
From 856d5a011c86b59f6564be4508912fb1d866adfc Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 22 Mar 2018 21:28:23 +0100
|
||||
Subject: [PATCH] brcmfmac: allocate struct brcmf_pub instance using
|
||||
wiphy_new()
|
||||
|
||||
Rework the driver so the wiphy instance holds the main driver information
|
||||
in its private buffer. Previously it held struct brcmf_cfg80211_info
|
||||
instance so a bit of reorg was needed. This was done so that the wiphy
|
||||
name or its parent device can be shown in debug output.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/btcoex.c | 2 +-
|
||||
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 86 ++++++++++------------
|
||||
.../broadcom/brcm80211/brcmfmac/cfg80211.h | 17 +++--
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/common.c | 2 +
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/core.c | 27 +++++--
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/core.h | 1 +
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | 2 +-
|
||||
7 files changed, 76 insertions(+), 61 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/btcoex.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/btcoex.c
|
||||
@@ -462,7 +462,7 @@ static void brcmf_btcoex_dhcp_end(struct
|
||||
int brcmf_btcoex_set_mode(struct brcmf_cfg80211_vif *vif,
|
||||
enum brcmf_btcoex_mode mode, u16 duration)
|
||||
{
|
||||
- struct brcmf_cfg80211_info *cfg = wiphy_priv(vif->wdev.wiphy);
|
||||
+ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(vif->wdev.wiphy);
|
||||
struct brcmf_btcoex_info *btci = cfg->btcoex;
|
||||
struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -753,7 +753,7 @@ s32 brcmf_notify_escan_complete(struct b
|
||||
static int brcmf_cfg80211_del_ap_iface(struct wiphy *wiphy,
|
||||
struct wireless_dev *wdev)
|
||||
{
|
||||
- struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
|
||||
+ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
struct net_device *ndev = wdev->netdev;
|
||||
struct brcmf_if *ifp = netdev_priv(ndev);
|
||||
int ret;
|
||||
@@ -786,7 +786,7 @@ err_unarm:
|
||||
static
|
||||
int brcmf_cfg80211_del_iface(struct wiphy *wiphy, struct wireless_dev *wdev)
|
||||
{
|
||||
- struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
|
||||
+ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
struct net_device *ndev = wdev->netdev;
|
||||
|
||||
if (ndev && ndev == cfg_to_ndev(cfg))
|
||||
@@ -831,7 +831,7 @@ brcmf_cfg80211_change_iface(struct wiphy
|
||||
enum nl80211_iftype type,
|
||||
struct vif_params *params)
|
||||
{
|
||||
- struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
|
||||
+ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
struct brcmf_if *ifp = netdev_priv(ndev);
|
||||
struct brcmf_cfg80211_vif *vif = ifp->vif;
|
||||
s32 infra = 0;
|
||||
@@ -2127,17 +2127,15 @@ static s32
|
||||
brcmf_cfg80211_get_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev,
|
||||
s32 *dbm)
|
||||
{
|
||||
- struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
- struct net_device *ndev = cfg_to_ndev(cfg);
|
||||
- struct brcmf_if *ifp = netdev_priv(ndev);
|
||||
+ struct brcmf_cfg80211_vif *vif = wdev_to_vif(wdev);
|
||||
s32 qdbm = 0;
|
||||
s32 err;
|
||||
|
||||
brcmf_dbg(TRACE, "Enter\n");
|
||||
- if (!check_vif_up(ifp->vif))
|
||||
+ if (!check_vif_up(vif))
|
||||
return -EIO;
|
||||
|
||||
- err = brcmf_fil_iovar_int_get(ifp, "qtxpower", &qdbm);
|
||||
+ err = brcmf_fil_iovar_int_get(vif->ifp, "qtxpower", &qdbm);
|
||||
if (err) {
|
||||
brcmf_err("error (%d)\n", err);
|
||||
goto done;
|
||||
@@ -3359,7 +3357,7 @@ brcmf_cfg80211_sched_scan_start(struct w
|
||||
struct cfg80211_sched_scan_request *req)
|
||||
{
|
||||
struct brcmf_if *ifp = netdev_priv(ndev);
|
||||
- struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
|
||||
+ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
|
||||
brcmf_dbg(SCAN, "Enter: n_match_sets=%d n_ssids=%d\n",
|
||||
req->n_match_sets, req->n_ssids);
|
||||
@@ -5191,6 +5189,12 @@ static struct cfg80211_ops brcmf_cfg8021
|
||||
.del_pmk = brcmf_cfg80211_del_pmk,
|
||||
};
|
||||
|
||||
+struct cfg80211_ops *brcmf_cfg80211_get_ops(void)
|
||||
+{
|
||||
+ return kmemdup(&brcmf_cfg80211_ops, sizeof(brcmf_cfg80211_ops),
|
||||
+ GFP_KERNEL);
|
||||
+}
|
||||
+
|
||||
struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg,
|
||||
enum nl80211_iftype type)
|
||||
{
|
||||
@@ -5898,7 +5902,7 @@ static void brcmf_update_bw40_channel_fl
|
||||
static int brcmf_construct_chaninfo(struct brcmf_cfg80211_info *cfg,
|
||||
u32 bw_cap[])
|
||||
{
|
||||
- struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg));
|
||||
+ struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
|
||||
struct ieee80211_supported_band *band;
|
||||
struct ieee80211_channel *channel;
|
||||
struct wiphy *wiphy;
|
||||
@@ -6013,7 +6017,7 @@ fail_pbuf:
|
||||
|
||||
static int brcmf_enable_bw40_2g(struct brcmf_cfg80211_info *cfg)
|
||||
{
|
||||
- struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg));
|
||||
+ struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
|
||||
struct ieee80211_supported_band *band;
|
||||
struct brcmf_fil_bwcap_le band_bwcap;
|
||||
struct brcmf_chanspec_list *list;
|
||||
@@ -6198,10 +6202,10 @@ static void brcmf_update_vht_cap(struct
|
||||
}
|
||||
}
|
||||
|
||||
-static int brcmf_setup_wiphybands(struct wiphy *wiphy)
|
||||
+static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
|
||||
{
|
||||
- struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
|
||||
- struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg));
|
||||
+ struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
|
||||
+ struct wiphy *wiphy;
|
||||
u32 nmode = 0;
|
||||
u32 vhtmode = 0;
|
||||
u32 bw_cap[2] = { WLC_BW_20MHZ_BIT, WLC_BW_20MHZ_BIT };
|
||||
@@ -6795,8 +6799,8 @@ static s32 brcmf_translate_country_code(
|
||||
static void brcmf_cfg80211_reg_notifier(struct wiphy *wiphy,
|
||||
struct regulatory_request *req)
|
||||
{
|
||||
- struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
|
||||
- struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg));
|
||||
+ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
+ struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
|
||||
struct brcmf_fil_country_le ccreq;
|
||||
s32 err;
|
||||
int i;
|
||||
@@ -6831,7 +6835,7 @@ static void brcmf_cfg80211_reg_notifier(
|
||||
brcmf_err("Firmware rejected country setting\n");
|
||||
return;
|
||||
}
|
||||
- brcmf_setup_wiphybands(wiphy);
|
||||
+ brcmf_setup_wiphybands(cfg);
|
||||
}
|
||||
|
||||
static void brcmf_free_wiphy(struct wiphy *wiphy)
|
||||
@@ -6858,17 +6862,15 @@ static void brcmf_free_wiphy(struct wiph
|
||||
if (wiphy->wowlan != &brcmf_wowlan_support)
|
||||
kfree(wiphy->wowlan);
|
||||
#endif
|
||||
- wiphy_free(wiphy);
|
||||
}
|
||||
|
||||
struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
|
||||
- struct device *busdev,
|
||||
+ struct cfg80211_ops *ops,
|
||||
bool p2pdev_forced)
|
||||
{
|
||||
+ struct wiphy *wiphy = drvr->wiphy;
|
||||
struct net_device *ndev = brcmf_get_ifp(drvr, 0)->ndev;
|
||||
struct brcmf_cfg80211_info *cfg;
|
||||
- struct wiphy *wiphy;
|
||||
- struct cfg80211_ops *ops;
|
||||
struct brcmf_cfg80211_vif *vif;
|
||||
struct brcmf_if *ifp;
|
||||
s32 err = 0;
|
||||
@@ -6880,26 +6882,13 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- ops = kmemdup(&brcmf_cfg80211_ops, sizeof(*ops), GFP_KERNEL);
|
||||
- if (!ops)
|
||||
- return NULL;
|
||||
-
|
||||
- ifp = netdev_priv(ndev);
|
||||
-#ifdef CONFIG_PM
|
||||
- if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_WOWL_GTK))
|
||||
- ops->set_rekey_data = brcmf_cfg80211_set_rekey_data;
|
||||
-#endif
|
||||
- wiphy = wiphy_new(ops, sizeof(struct brcmf_cfg80211_info));
|
||||
- if (!wiphy) {
|
||||
+ cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
|
||||
+ if (!cfg) {
|
||||
brcmf_err("Could not allocate wiphy device\n");
|
||||
- goto ops_out;
|
||||
+ return NULL;
|
||||
}
|
||||
- memcpy(wiphy->perm_addr, drvr->mac, ETH_ALEN);
|
||||
- set_wiphy_dev(wiphy, busdev);
|
||||
|
||||
- cfg = wiphy_priv(wiphy);
|
||||
cfg->wiphy = wiphy;
|
||||
- cfg->ops = ops;
|
||||
cfg->pub = drvr;
|
||||
init_vif_event(&cfg->vif_event);
|
||||
INIT_LIST_HEAD(&cfg->vif_list);
|
||||
@@ -6908,6 +6897,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
if (IS_ERR(vif))
|
||||
goto wiphy_out;
|
||||
|
||||
+ ifp = netdev_priv(ndev);
|
||||
vif->ifp = ifp;
|
||||
vif->wdev.netdev = ndev;
|
||||
ndev->ieee80211_ptr = &vif->wdev;
|
||||
@@ -6934,6 +6924,11 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
if (err < 0)
|
||||
goto priv_out;
|
||||
|
||||
+ /* regulatory notifer below needs access to cfg so
|
||||
+ * assign it now.
|
||||
+ */
|
||||
+ drvr->config = cfg;
|
||||
+
|
||||
brcmf_dbg(INFO, "Registering custom regulatory\n");
|
||||
wiphy->reg_notifier = brcmf_cfg80211_reg_notifier;
|
||||
wiphy->regulatory_flags |= REGULATORY_CUSTOM_REG;
|
||||
@@ -6947,13 +6942,17 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
cap = &wiphy->bands[NL80211_BAND_2GHZ]->ht_cap.cap;
|
||||
*cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
|
||||
}
|
||||
+#ifdef CONFIG_PM
|
||||
+ if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_WOWL_GTK))
|
||||
+ ops->set_rekey_data = brcmf_cfg80211_set_rekey_data;
|
||||
+#endif
|
||||
err = wiphy_register(wiphy);
|
||||
if (err < 0) {
|
||||
brcmf_err("Could not register wiphy device (%d)\n", err);
|
||||
goto priv_out;
|
||||
}
|
||||
|
||||
- err = brcmf_setup_wiphybands(wiphy);
|
||||
+ err = brcmf_setup_wiphybands(cfg);
|
||||
if (err) {
|
||||
brcmf_err("Setting wiphy bands failed (%d)\n", err);
|
||||
goto wiphy_unreg_out;
|
||||
@@ -6970,12 +6969,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
|
||||
else
|
||||
*cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
|
||||
}
|
||||
- /* p2p might require that "if-events" get processed by fweh. So
|
||||
- * activate the already registered event handlers now and activate
|
||||
- * the rest when initialization has completed. drvr->config needs to
|
||||
- * be assigned before activating events.
|
||||
- */
|
||||
- drvr->config = cfg;
|
||||
+
|
||||
err = brcmf_fweh_activate_events(ifp);
|
||||
if (err) {
|
||||
brcmf_err("FWEH activation failed (%d)\n", err);
|
||||
@@ -7043,8 +7037,7 @@ priv_out:
|
||||
ifp->vif = NULL;
|
||||
wiphy_out:
|
||||
brcmf_free_wiphy(wiphy);
|
||||
-ops_out:
|
||||
- kfree(ops);
|
||||
+ kfree(cfg);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -7059,4 +7052,5 @@ void brcmf_cfg80211_detach(struct brcmf_
|
||||
kfree(cfg->ops);
|
||||
wl_deinit_priv(cfg);
|
||||
brcmf_free_wiphy(cfg->wiphy);
|
||||
+ kfree(cfg);
|
||||
}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
|
||||
@@ -355,20 +355,24 @@ static inline struct wiphy *cfg_to_wiphy
|
||||
|
||||
static inline struct brcmf_cfg80211_info *wiphy_to_cfg(struct wiphy *w)
|
||||
{
|
||||
- return (struct brcmf_cfg80211_info *)(wiphy_priv(w));
|
||||
+ struct brcmf_pub *drvr = wiphy_priv(w);
|
||||
+ return drvr->config;
|
||||
}
|
||||
|
||||
static inline struct brcmf_cfg80211_info *wdev_to_cfg(struct wireless_dev *wd)
|
||||
{
|
||||
- return (struct brcmf_cfg80211_info *)(wdev_priv(wd));
|
||||
+ return wiphy_to_cfg(wd->wiphy);
|
||||
+}
|
||||
+
|
||||
+static inline struct brcmf_cfg80211_vif *wdev_to_vif(struct wireless_dev *wdev)
|
||||
+{
|
||||
+ return container_of(wdev, struct brcmf_cfg80211_vif, wdev);
|
||||
}
|
||||
|
||||
static inline
|
||||
struct net_device *cfg_to_ndev(struct brcmf_cfg80211_info *cfg)
|
||||
{
|
||||
- struct brcmf_cfg80211_vif *vif;
|
||||
- vif = list_first_entry(&cfg->vif_list, struct brcmf_cfg80211_vif, list);
|
||||
- return vif->wdev.netdev;
|
||||
+ return brcmf_get_ifp(cfg->pub, 0)->ndev;
|
||||
}
|
||||
|
||||
static inline struct brcmf_cfg80211_info *ndev_to_cfg(struct net_device *ndev)
|
||||
@@ -395,11 +399,12 @@ brcmf_cfg80211_connect_info *cfg_to_conn
|
||||
}
|
||||
|
||||
struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
|
||||
- struct device *busdev,
|
||||
+ struct cfg80211_ops *ops,
|
||||
bool p2pdev_forced);
|
||||
void brcmf_cfg80211_detach(struct brcmf_cfg80211_info *cfg);
|
||||
s32 brcmf_cfg80211_up(struct net_device *ndev);
|
||||
s32 brcmf_cfg80211_down(struct net_device *ndev);
|
||||
+struct cfg80211_ops *brcmf_cfg80211_get_ops(void);
|
||||
enum nl80211_iftype brcmf_cfg80211_get_iftype(struct brcmf_if *ifp);
|
||||
|
||||
struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg,
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
@@ -252,6 +252,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
|
||||
brcmf_err("Retreiving cur_etheraddr failed, %d\n", err);
|
||||
goto done;
|
||||
}
|
||||
+ memcpy(ifp->drvr->wiphy->perm_addr, ifp->drvr->mac, ETH_ALEN);
|
||||
memcpy(ifp->drvr->mac, ifp->mac_addr, sizeof(ifp->drvr->mac));
|
||||
|
||||
bus = ifp->drvr->bus_if;
|
||||
@@ -279,6 +280,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
|
||||
ri->chippkg = le32_to_cpu(revinfo.chippkg);
|
||||
ri->nvramrev = le32_to_cpu(revinfo.nvramrev);
|
||||
|
||||
+ /* use revinfo if not known yet */
|
||||
if (!bus->chip) {
|
||||
bus->chip = le32_to_cpu(revinfo.chipnum);
|
||||
bus->chiprev = le32_to_cpu(revinfo.chiprev);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1021,7 +1021,7 @@ static int brcmf_revinfo_read(struct seq
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int brcmf_bus_started(struct brcmf_pub *drvr)
|
||||
+static int brcmf_bus_started(struct brcmf_pub *drvr, struct cfg80211_ops *ops)
|
||||
{
|
||||
int ret = -1;
|
||||
struct brcmf_bus *bus_if = drvr->bus_if;
|
||||
@@ -1060,7 +1060,7 @@ static int brcmf_bus_started(struct brcm
|
||||
|
||||
brcmf_proto_add_if(drvr, ifp);
|
||||
|
||||
- drvr->config = brcmf_cfg80211_attach(drvr, bus_if->dev,
|
||||
+ drvr->config = brcmf_cfg80211_attach(drvr, ops,
|
||||
drvr->settings->p2p_enable);
|
||||
if (drvr->config == NULL) {
|
||||
ret = -ENOMEM;
|
||||
@@ -1115,17 +1115,26 @@ fail:
|
||||
|
||||
int brcmf_attach(struct device *dev, struct brcmf_mp_device *settings)
|
||||
{
|
||||
+ struct wiphy *wiphy;
|
||||
+ struct cfg80211_ops *ops;
|
||||
struct brcmf_pub *drvr = NULL;
|
||||
int ret = 0;
|
||||
int i;
|
||||
|
||||
brcmf_dbg(TRACE, "Enter\n");
|
||||
|
||||
- /* Allocate primary brcmf_info */
|
||||
- drvr = kzalloc(sizeof(*drvr), GFP_ATOMIC);
|
||||
- if (!drvr)
|
||||
+ ops = brcmf_cfg80211_get_ops();
|
||||
+ if (!ops)
|
||||
return -ENOMEM;
|
||||
|
||||
+ wiphy = wiphy_new(ops, sizeof(*drvr));
|
||||
+ if (!wiphy)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ set_wiphy_dev(wiphy, dev);
|
||||
+ drvr = wiphy_priv(wiphy);
|
||||
+ drvr->wiphy = wiphy;
|
||||
+
|
||||
for (i = 0; i < ARRAY_SIZE(drvr->if2bss); i++)
|
||||
drvr->if2bss[i] = BRCMF_BSSIDX_INVALID;
|
||||
|
||||
@@ -1154,15 +1163,18 @@ int brcmf_attach(struct device *dev, str
|
||||
/* attach firmware event handler */
|
||||
brcmf_fweh_attach(drvr);
|
||||
|
||||
- ret = brcmf_bus_started(drvr);
|
||||
+ ret = brcmf_bus_started(drvr, ops);
|
||||
if (ret != 0) {
|
||||
brcmf_err("dongle is not responding: err=%d\n", ret);
|
||||
goto fail;
|
||||
}
|
||||
+
|
||||
+ drvr->config->ops = ops;
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
brcmf_detach(dev);
|
||||
+ kfree(ops);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1220,6 +1232,7 @@ void brcmf_detach(struct device *dev)
|
||||
brcmf_remove_interface(drvr->iflist[i], false);
|
||||
|
||||
brcmf_cfg80211_detach(drvr->config);
|
||||
+ drvr->config = NULL;
|
||||
|
||||
brcmf_bus_stop(drvr->bus_if);
|
||||
|
||||
@@ -1227,7 +1240,7 @@ void brcmf_detach(struct device *dev)
|
||||
|
||||
brcmf_debug_detach(drvr);
|
||||
bus_if->drvr = NULL;
|
||||
- kfree(drvr);
|
||||
+ wiphy_free(drvr->wiphy);
|
||||
}
|
||||
|
||||
s32 brcmf_iovar_data_set(struct device *dev, char *name, void *data, u32 len)
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
||||
@@ -107,6 +107,7 @@ struct brcmf_pub {
|
||||
/* Linkage ponters */
|
||||
struct brcmf_bus *bus_if;
|
||||
struct brcmf_proto *proto;
|
||||
+ struct wiphy *wiphy;
|
||||
struct brcmf_cfg80211_info *config;
|
||||
|
||||
/* Internal brcmf items */
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
|
||||
@@ -2229,7 +2229,7 @@ fail:
|
||||
*/
|
||||
int brcmf_p2p_del_vif(struct wiphy *wiphy, struct wireless_dev *wdev)
|
||||
{
|
||||
- struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
|
||||
+ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
||||
struct brcmf_p2p_info *p2p = &cfg->p2p;
|
||||
struct brcmf_cfg80211_vif *vif;
|
||||
enum nl80211_iftype iftype;
|
@ -0,0 +1,349 @@
|
||||
From 34789d0cf682c643862792750a06c31ccf016cbc Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 22 Mar 2018 21:28:24 +0100
|
||||
Subject: [PATCH] brcmfmac: use wiphy debugfs dir entry
|
||||
|
||||
The driver used to create a brcmfmac dir entry at the top level
|
||||
debugfs mount point. This moves the debugfs entries into the
|
||||
wiphy debugfs dir entry.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 6 ++++
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/common.c | 5 ---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/core.c | 11 +++---
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/debug.c | 42 ++--------------------
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/debug.h | 17 ---------
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/feature.c | 3 ++
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/feature.h | 7 ++++
|
||||
.../broadcom/brcm80211/brcmfmac/fwsignal.c | 11 +++---
|
||||
.../broadcom/brcm80211/brcmfmac/fwsignal.h | 1 +
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/msgbuf.c | 8 +++--
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/proto.c | 3 +-
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/proto.h | 7 ++++
|
||||
12 files changed, 47 insertions(+), 74 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
||||
@@ -445,6 +445,11 @@ brcmf_proto_bcdc_init_done(struct brcmf_
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void brcmf_proto_bcdc_debugfs_create(struct brcmf_pub *drvr)
|
||||
+{
|
||||
+ brcmf_fws_debugfs_create(drvr);
|
||||
+}
|
||||
+
|
||||
int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr)
|
||||
{
|
||||
struct brcmf_bcdc *bcdc;
|
||||
@@ -472,6 +477,7 @@ int brcmf_proto_bcdc_attach(struct brcmf
|
||||
drvr->proto->del_if = brcmf_proto_bcdc_del_if;
|
||||
drvr->proto->reset_if = brcmf_proto_bcdc_reset_if;
|
||||
drvr->proto->init_done = brcmf_proto_bcdc_init_done;
|
||||
+ drvr->proto->debugfs_create = brcmf_proto_bcdc_debugfs_create;
|
||||
drvr->proto->pd = bcdc;
|
||||
|
||||
drvr->hdrlen += BCDC_HEADER_LEN + BRCMF_PROT_FW_SIGNAL_MAX_TXBYTES;
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
@@ -529,9 +529,6 @@ static int __init brcmfmac_module_init(v
|
||||
{
|
||||
int err;
|
||||
|
||||
- /* Initialize debug system first */
|
||||
- brcmf_debugfs_init();
|
||||
-
|
||||
/* Get the platform data (if available) for our devices */
|
||||
err = platform_driver_probe(&brcmf_pd, brcmf_common_pd_probe);
|
||||
if (err == -ENODEV)
|
||||
@@ -543,7 +540,6 @@ static int __init brcmfmac_module_init(v
|
||||
/* Continue the initialization by registering the different busses */
|
||||
err = brcmf_core_init();
|
||||
if (err) {
|
||||
- brcmf_debugfs_exit();
|
||||
if (brcmfmac_pdata)
|
||||
platform_driver_unregister(&brcmf_pd);
|
||||
}
|
||||
@@ -556,7 +552,6 @@ static void __exit brcmfmac_module_exit(
|
||||
brcmf_core_exit();
|
||||
if (brcmfmac_pdata)
|
||||
platform_driver_unregister(&brcmf_pd);
|
||||
- brcmf_debugfs_exit();
|
||||
}
|
||||
|
||||
module_init(brcmfmac_module_init);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1050,8 +1050,6 @@ static int brcmf_bus_started(struct brcm
|
||||
if (ret < 0)
|
||||
goto fail;
|
||||
|
||||
- brcmf_debugfs_add_entry(drvr, "revinfo", brcmf_revinfo_read);
|
||||
-
|
||||
brcmf_feat_attach(drvr);
|
||||
|
||||
ret = brcmf_proto_init_done(drvr);
|
||||
@@ -1094,6 +1092,11 @@ static int brcmf_bus_started(struct brcm
|
||||
#endif
|
||||
#endif /* CONFIG_INET */
|
||||
|
||||
+ /* populate debugfs */
|
||||
+ brcmf_debugfs_add_entry(drvr, "revinfo", brcmf_revinfo_read);
|
||||
+ brcmf_feat_debugfs_create(drvr);
|
||||
+ brcmf_proto_debugfs_create(drvr);
|
||||
+
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
@@ -1146,9 +1149,6 @@ int brcmf_attach(struct device *dev, str
|
||||
drvr->bus_if->drvr = drvr;
|
||||
drvr->settings = settings;
|
||||
|
||||
- /* attach debug facilities */
|
||||
- brcmf_debug_attach(drvr);
|
||||
-
|
||||
/* Attach and link in the protocol */
|
||||
ret = brcmf_proto_attach(drvr);
|
||||
if (ret != 0) {
|
||||
@@ -1238,7 +1238,6 @@ void brcmf_detach(struct device *dev)
|
||||
|
||||
brcmf_proto_detach(drvr);
|
||||
|
||||
- brcmf_debug_detach(drvr);
|
||||
bus_if->drvr = NULL;
|
||||
wiphy_free(drvr->wiphy);
|
||||
}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c
|
||||
@@ -25,8 +25,6 @@
|
||||
#include "fweh.h"
|
||||
#include "debug.h"
|
||||
|
||||
-static struct dentry *root_folder;
|
||||
-
|
||||
int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data,
|
||||
size_t len)
|
||||
{
|
||||
@@ -54,44 +52,9 @@ int brcmf_debug_create_memdump(struct br
|
||||
return 0;
|
||||
}
|
||||
|
||||
-void brcmf_debugfs_init(void)
|
||||
-{
|
||||
- root_folder = debugfs_create_dir(KBUILD_MODNAME, NULL);
|
||||
- if (IS_ERR(root_folder))
|
||||
- root_folder = NULL;
|
||||
-}
|
||||
-
|
||||
-void brcmf_debugfs_exit(void)
|
||||
-{
|
||||
- if (!root_folder)
|
||||
- return;
|
||||
-
|
||||
- debugfs_remove_recursive(root_folder);
|
||||
- root_folder = NULL;
|
||||
-}
|
||||
-
|
||||
-int brcmf_debug_attach(struct brcmf_pub *drvr)
|
||||
-{
|
||||
- struct device *dev = drvr->bus_if->dev;
|
||||
-
|
||||
- if (!root_folder)
|
||||
- return -ENODEV;
|
||||
-
|
||||
- drvr->dbgfs_dir = debugfs_create_dir(dev_name(dev), root_folder);
|
||||
- return PTR_ERR_OR_ZERO(drvr->dbgfs_dir);
|
||||
-}
|
||||
-
|
||||
-void brcmf_debug_detach(struct brcmf_pub *drvr)
|
||||
-{
|
||||
- brcmf_fweh_unregister(drvr, BRCMF_E_PSM_WATCHDOG);
|
||||
-
|
||||
- if (!IS_ERR_OR_NULL(drvr->dbgfs_dir))
|
||||
- debugfs_remove_recursive(drvr->dbgfs_dir);
|
||||
-}
|
||||
-
|
||||
struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr)
|
||||
{
|
||||
- return drvr->dbgfs_dir;
|
||||
+ return drvr->wiphy->debugfsdir;
|
||||
}
|
||||
|
||||
int brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
|
||||
@@ -99,7 +62,8 @@ int brcmf_debugfs_add_entry(struct brcmf
|
||||
{
|
||||
struct dentry *e;
|
||||
|
||||
+ WARN(!drvr->wiphy->debugfsdir, "wiphy not (yet) registered\n");
|
||||
e = debugfs_create_devm_seqfile(drvr->bus_if->dev, fn,
|
||||
- drvr->dbgfs_dir, read_fn);
|
||||
+ drvr->wiphy->debugfsdir, read_fn);
|
||||
return PTR_ERR_OR_ZERO(e);
|
||||
}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
|
||||
@@ -113,29 +113,12 @@ extern int brcmf_msg_level;
|
||||
struct brcmf_bus;
|
||||
struct brcmf_pub;
|
||||
#ifdef DEBUG
|
||||
-void brcmf_debugfs_init(void);
|
||||
-void brcmf_debugfs_exit(void);
|
||||
-int brcmf_debug_attach(struct brcmf_pub *drvr);
|
||||
-void brcmf_debug_detach(struct brcmf_pub *drvr);
|
||||
struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr);
|
||||
int brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
|
||||
int (*read_fn)(struct seq_file *seq, void *data));
|
||||
int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data,
|
||||
size_t len);
|
||||
#else
|
||||
-static inline void brcmf_debugfs_init(void)
|
||||
-{
|
||||
-}
|
||||
-static inline void brcmf_debugfs_exit(void)
|
||||
-{
|
||||
-}
|
||||
-static inline int brcmf_debug_attach(struct brcmf_pub *drvr)
|
||||
-{
|
||||
- return 0;
|
||||
-}
|
||||
-static inline void brcmf_debug_detach(struct brcmf_pub *drvr)
|
||||
-{
|
||||
-}
|
||||
static inline
|
||||
int brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
|
||||
int (*read_fn)(struct seq_file *seq, void *data))
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
|
||||
@@ -228,7 +228,10 @@ void brcmf_feat_attach(struct brcmf_pub
|
||||
/* no quirks */
|
||||
break;
|
||||
}
|
||||
+}
|
||||
|
||||
+void brcmf_feat_debugfs_create(struct brcmf_pub *drvr)
|
||||
+{
|
||||
brcmf_debugfs_add_entry(drvr, "features", brcmf_feat_debugfs_read);
|
||||
}
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h
|
||||
@@ -90,6 +90,13 @@ enum brcmf_feat_quirk {
|
||||
void brcmf_feat_attach(struct brcmf_pub *drvr);
|
||||
|
||||
/**
|
||||
+ * brcmf_feat_debugfs_create() - create debugfs entries.
|
||||
+ *
|
||||
+ * @drvr: driver instance.
|
||||
+ */
|
||||
+void brcmf_feat_debugfs_create(struct brcmf_pub *drvr);
|
||||
+
|
||||
+/**
|
||||
* brcmf_feat_is_enabled() - query feature.
|
||||
*
|
||||
* @ifp: interface instance.
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
||||
@@ -2399,10 +2399,6 @@ struct brcmf_fws_info *brcmf_fws_attach(
|
||||
brcmu_pktq_init(&fws->desc.other.psq, BRCMF_FWS_PSQ_PREC_COUNT,
|
||||
BRCMF_FWS_PSQ_LEN);
|
||||
|
||||
- /* create debugfs file for statistics */
|
||||
- brcmf_debugfs_add_entry(drvr, "fws_stats",
|
||||
- brcmf_debugfs_fws_stats_read);
|
||||
-
|
||||
brcmf_dbg(INFO, "%s bdcv2 tlv signaling [%x]\n",
|
||||
fws->fw_signals ? "enabled" : "disabled", tlv);
|
||||
return fws;
|
||||
@@ -2429,6 +2425,13 @@ void brcmf_fws_detach(struct brcmf_fws_i
|
||||
kfree(fws);
|
||||
}
|
||||
|
||||
+void brcmf_fws_debugfs_create(struct brcmf_pub *drvr)
|
||||
+{
|
||||
+ /* create debugfs file for statistics */
|
||||
+ brcmf_debugfs_add_entry(drvr, "fws_stats",
|
||||
+ brcmf_debugfs_fws_stats_read);
|
||||
+}
|
||||
+
|
||||
bool brcmf_fws_queue_skbs(struct brcmf_fws_info *fws)
|
||||
{
|
||||
return !fws->avoid_queueing;
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
|
||||
@@ -20,6 +20,7 @@
|
||||
|
||||
struct brcmf_fws_info *brcmf_fws_attach(struct brcmf_pub *drvr);
|
||||
void brcmf_fws_detach(struct brcmf_fws_info *fws);
|
||||
+void brcmf_fws_debugfs_create(struct brcmf_pub *drvr);
|
||||
bool brcmf_fws_queue_skbs(struct brcmf_fws_info *fws);
|
||||
bool brcmf_fws_fc_active(struct brcmf_fws_info *fws);
|
||||
void brcmf_fws_hdrpull(struct brcmf_if *ifp, s16 siglen, struct sk_buff *skb);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
||||
@@ -1418,6 +1418,11 @@ static int brcmf_msgbuf_stats_read(struc
|
||||
}
|
||||
#endif
|
||||
|
||||
+static void brcmf_msgbuf_debugfs_create(struct brcmf_pub *drvr)
|
||||
+{
|
||||
+ brcmf_debugfs_add_entry(drvr, "msgbuf_stats", brcmf_msgbuf_stats_read);
|
||||
+}
|
||||
+
|
||||
int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr)
|
||||
{
|
||||
struct brcmf_bus_msgbuf *if_msgbuf;
|
||||
@@ -1472,6 +1477,7 @@ int brcmf_proto_msgbuf_attach(struct brc
|
||||
drvr->proto->delete_peer = brcmf_msgbuf_delete_peer;
|
||||
drvr->proto->add_tdls_peer = brcmf_msgbuf_add_tdls_peer;
|
||||
drvr->proto->rxreorder = brcmf_msgbuf_rxreorder;
|
||||
+ drvr->proto->debugfs_create = brcmf_msgbuf_debugfs_create;
|
||||
drvr->proto->pd = msgbuf;
|
||||
|
||||
init_waitqueue_head(&msgbuf->ioctl_resp_wait);
|
||||
@@ -1525,8 +1531,6 @@ int brcmf_proto_msgbuf_attach(struct brc
|
||||
spin_lock_init(&msgbuf->flowring_work_lock);
|
||||
INIT_LIST_HEAD(&msgbuf->work_queue);
|
||||
|
||||
- brcmf_debugfs_add_entry(drvr, "msgbuf_stats", brcmf_msgbuf_stats_read);
|
||||
-
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.c
|
||||
@@ -54,7 +54,8 @@ int brcmf_proto_attach(struct brcmf_pub
|
||||
if (!proto->tx_queue_data || (proto->hdrpull == NULL) ||
|
||||
(proto->query_dcmd == NULL) || (proto->set_dcmd == NULL) ||
|
||||
(proto->configure_addr_mode == NULL) ||
|
||||
- (proto->delete_peer == NULL) || (proto->add_tdls_peer == NULL)) {
|
||||
+ (proto->delete_peer == NULL) || (proto->add_tdls_peer == NULL) ||
|
||||
+ (proto->debugfs_create == NULL)) {
|
||||
brcmf_err("Not all proto handlers have been installed\n");
|
||||
goto fail;
|
||||
}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
|
||||
@@ -48,6 +48,7 @@ struct brcmf_proto {
|
||||
void (*del_if)(struct brcmf_if *ifp);
|
||||
void (*reset_if)(struct brcmf_if *ifp);
|
||||
int (*init_done)(struct brcmf_pub *drvr);
|
||||
+ void (*debugfs_create)(struct brcmf_pub *drvr);
|
||||
void *pd;
|
||||
};
|
||||
|
||||
@@ -156,4 +157,10 @@ brcmf_proto_init_done(struct brcmf_pub *
|
||||
return drvr->proto->init_done(drvr);
|
||||
}
|
||||
|
||||
+static inline void
|
||||
+brcmf_proto_debugfs_create(struct brcmf_pub *drvr)
|
||||
+{
|
||||
+ drvr->proto->debugfs_create(drvr);
|
||||
+}
|
||||
+
|
||||
#endif /* BRCMFMAC_PROTO_H */
|
@ -0,0 +1,286 @@
|
||||
From 41f573dbb534f14e62a4a5411f602c970cad1d77 Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 22 Mar 2018 21:28:25 +0100
|
||||
Subject: [PATCH] brcmfmac: derive firmware filenames from basename mapping
|
||||
|
||||
Instead of defining individual filenames for firmware and nvram
|
||||
use a basename and derive the names from that.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/firmware.c | 31 ++++++---
|
||||
.../broadcom/brcm80211/brcmfmac/firmware.h | 24 ++-----
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/pcie.c | 56 ++++++++---------
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 73 +++++++++++-----------
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 10 +--
|
||||
5 files changed, 96 insertions(+), 98 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
|
||||
@@ -563,6 +563,13 @@ int brcmf_fw_get_firmwares(struct device
|
||||
0);
|
||||
}
|
||||
|
||||
+static void brcmf_fw_get_full_name(char fw_name[BRCMF_FW_NAME_LEN],
|
||||
+ const char *fw_base, const char *extension)
|
||||
+{
|
||||
+ strlcat(fw_name, fw_base, BRCMF_FW_NAME_LEN);
|
||||
+ strlcat(fw_name, extension, BRCMF_FW_NAME_LEN);
|
||||
+}
|
||||
+
|
||||
int brcmf_fw_map_chip_to_name(u32 chip, u32 chiprev,
|
||||
struct brcmf_firmware_mapping mapping_table[],
|
||||
u32 table_size, char fw_name[BRCMF_FW_NAME_LEN],
|
||||
@@ -587,25 +594,31 @@ int brcmf_fw_map_chip_to_name(u32 chip,
|
||||
|
||||
/* check if firmware path is provided by module parameter */
|
||||
if (brcmf_mp_global.firmware_path[0] != '\0') {
|
||||
- strlcpy(fw_name, brcmf_mp_global.firmware_path,
|
||||
- BRCMF_FW_NAME_LEN);
|
||||
- if ((nvram_name) && (mapping_table[i].nvram))
|
||||
+ if (fw_name)
|
||||
+ strlcpy(fw_name, brcmf_mp_global.firmware_path,
|
||||
+ BRCMF_FW_NAME_LEN);
|
||||
+ if (nvram_name)
|
||||
strlcpy(nvram_name, brcmf_mp_global.firmware_path,
|
||||
BRCMF_FW_NAME_LEN);
|
||||
|
||||
end = brcmf_mp_global.firmware_path[
|
||||
strlen(brcmf_mp_global.firmware_path) - 1];
|
||||
if (end != '/') {
|
||||
- strlcat(fw_name, "/", BRCMF_FW_NAME_LEN);
|
||||
- if ((nvram_name) && (mapping_table[i].nvram))
|
||||
+ if (fw_name)
|
||||
+ strlcat(fw_name, "/", BRCMF_FW_NAME_LEN);
|
||||
+ if (nvram_name)
|
||||
strlcat(nvram_name, "/", BRCMF_FW_NAME_LEN);
|
||||
}
|
||||
}
|
||||
- strlcat(fw_name, mapping_table[i].fw, BRCMF_FW_NAME_LEN);
|
||||
- if ((nvram_name) && (mapping_table[i].nvram))
|
||||
- strlcat(nvram_name, mapping_table[i].nvram, BRCMF_FW_NAME_LEN);
|
||||
|
||||
- brcmf_info("using %s for chip %s\n", fw_name, chipname);
|
||||
+ brcmf_info("using %s for chip %s\n",
|
||||
+ mapping_table[i].fw_base, chipname);
|
||||
+ if (fw_name)
|
||||
+ brcmf_fw_get_full_name(fw_name,
|
||||
+ mapping_table[i].fw_base, ".bin");
|
||||
+ if (nvram_name)
|
||||
+ brcmf_fw_get_full_name(nvram_name,
|
||||
+ mapping_table[i].fw_base, ".txt");
|
||||
|
||||
return 0;
|
||||
}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
|
||||
@@ -38,28 +38,16 @@
|
||||
struct brcmf_firmware_mapping {
|
||||
u32 chipid;
|
||||
u32 revmask;
|
||||
- const char *fw;
|
||||
- const char *nvram;
|
||||
+ const char *fw_base;
|
||||
};
|
||||
|
||||
-#define BRCMF_FW_NVRAM_DEF(fw_nvram_name, fw, nvram) \
|
||||
-static const char BRCM_ ## fw_nvram_name ## _FIRMWARE_NAME[] = \
|
||||
- BRCMF_FW_DEFAULT_PATH fw; \
|
||||
-static const char BRCM_ ## fw_nvram_name ## _NVRAM_NAME[] = \
|
||||
- BRCMF_FW_DEFAULT_PATH nvram; \
|
||||
-MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH fw);
|
||||
-
|
||||
-#define BRCMF_FW_DEF(fw_name, fw) \
|
||||
-static const char BRCM_ ## fw_name ## _FIRMWARE_NAME[] = \
|
||||
- BRCMF_FW_DEFAULT_PATH fw; \
|
||||
-MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH fw) \
|
||||
-
|
||||
-#define BRCMF_FW_NVRAM_ENTRY(chipid, mask, name) \
|
||||
- { chipid, mask, \
|
||||
- BRCM_ ## name ## _FIRMWARE_NAME, BRCM_ ## name ## _NVRAM_NAME }
|
||||
+#define BRCMF_FW_DEF(fw_name, fw_base) \
|
||||
+static const char BRCM_ ## fw_name ## _FIRMWARE_BASENAME[] = \
|
||||
+ BRCMF_FW_DEFAULT_PATH fw_base; \
|
||||
+MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH fw_base ".bin")
|
||||
|
||||
#define BRCMF_FW_ENTRY(chipid, mask, name) \
|
||||
- { chipid, mask, BRCM_ ## name ## _FIRMWARE_NAME, NULL }
|
||||
+ { chipid, mask, BRCM_ ## name ## _FIRMWARE_BASENAME }
|
||||
|
||||
int brcmf_fw_map_chip_to_name(u32 chip, u32 chiprev,
|
||||
struct brcmf_firmware_mapping mapping_table[],
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -46,36 +46,36 @@ enum brcmf_pcie_state {
|
||||
BRCMFMAC_PCIE_STATE_UP
|
||||
};
|
||||
|
||||
-BRCMF_FW_NVRAM_DEF(43602, "brcmfmac43602-pcie.bin", "brcmfmac43602-pcie.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(4350, "brcmfmac4350-pcie.bin", "brcmfmac4350-pcie.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(4350C, "brcmfmac4350c2-pcie.bin", "brcmfmac4350c2-pcie.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(4356, "brcmfmac4356-pcie.bin", "brcmfmac4356-pcie.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(43570, "brcmfmac43570-pcie.bin", "brcmfmac43570-pcie.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(4358, "brcmfmac4358-pcie.bin", "brcmfmac4358-pcie.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(4359, "brcmfmac4359-pcie.bin", "brcmfmac4359-pcie.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(4365B, "brcmfmac4365b-pcie.bin", "brcmfmac4365b-pcie.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(4365C, "brcmfmac4365c-pcie.bin", "brcmfmac4365c-pcie.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(4366B, "brcmfmac4366b-pcie.bin", "brcmfmac4366b-pcie.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(4366C, "brcmfmac4366c-pcie.bin", "brcmfmac4366c-pcie.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(4371, "brcmfmac4371-pcie.bin", "brcmfmac4371-pcie.txt");
|
||||
+BRCMF_FW_DEF(43602, "brcmfmac43602-pcie");
|
||||
+BRCMF_FW_DEF(4350, "brcmfmac4350-pcie");
|
||||
+BRCMF_FW_DEF(4350C, "brcmfmac4350c2-pcie");
|
||||
+BRCMF_FW_DEF(4356, "brcmfmac4356-pcie");
|
||||
+BRCMF_FW_DEF(43570, "brcmfmac43570-pcie");
|
||||
+BRCMF_FW_DEF(4358, "brcmfmac4358-pcie");
|
||||
+BRCMF_FW_DEF(4359, "brcmfmac4359-pcie");
|
||||
+BRCMF_FW_DEF(4365B, "brcmfmac4365b-pcie");
|
||||
+BRCMF_FW_DEF(4365C, "brcmfmac4365c-pcie");
|
||||
+BRCMF_FW_DEF(4366B, "brcmfmac4366b-pcie");
|
||||
+BRCMF_FW_DEF(4366C, "brcmfmac4366c-pcie");
|
||||
+BRCMF_FW_DEF(4371, "brcmfmac4371-pcie");
|
||||
|
||||
static struct brcmf_firmware_mapping brcmf_pcie_fwnames[] = {
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43602_CHIP_ID, 0xFFFFFFFF, 43602),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43465_CHIP_ID, 0xFFFFFFF0, 4366C),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4350_CHIP_ID, 0x000000FF, 4350C),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4350_CHIP_ID, 0xFFFFFF00, 4350),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43525_CHIP_ID, 0xFFFFFFF0, 4365C),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4356_CHIP_ID, 0xFFFFFFFF, 4356),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43567_CHIP_ID, 0xFFFFFFFF, 43570),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43569_CHIP_ID, 0xFFFFFFFF, 43570),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43570_CHIP_ID, 0xFFFFFFFF, 43570),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4358_CHIP_ID, 0xFFFFFFFF, 4358),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4359_CHIP_ID, 0xFFFFFFFF, 4359),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4365_CHIP_ID, 0x0000000F, 4365B),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4365_CHIP_ID, 0xFFFFFFF0, 4365C),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4366_CHIP_ID, 0x0000000F, 4366B),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4366_CHIP_ID, 0xFFFFFFF0, 4366C),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4371_CHIP_ID, 0xFFFFFFFF, 4371),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_43602_CHIP_ID, 0xFFFFFFFF, 43602),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_43465_CHIP_ID, 0xFFFFFFF0, 4366C),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4350_CHIP_ID, 0x000000FF, 4350C),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4350_CHIP_ID, 0xFFFFFF00, 4350),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_43525_CHIP_ID, 0xFFFFFFF0, 4365C),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4356_CHIP_ID, 0xFFFFFFFF, 4356),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_43567_CHIP_ID, 0xFFFFFFFF, 43570),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_43569_CHIP_ID, 0xFFFFFFFF, 43570),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_43570_CHIP_ID, 0xFFFFFFFF, 43570),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4358_CHIP_ID, 0xFFFFFFFF, 4358),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4359_CHIP_ID, 0xFFFFFFFF, 4359),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4365_CHIP_ID, 0x0000000F, 4365B),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4365_CHIP_ID, 0xFFFFFFF0, 4365C),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4366_CHIP_ID, 0x0000000F, 4366B),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4366_CHIP_ID, 0xFFFFFFF0, 4366C),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4371_CHIP_ID, 0xFFFFFFFF, 4371),
|
||||
};
|
||||
|
||||
#define BRCMF_PCIE_FW_UP_TIMEOUT 2000 /* msec */
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -600,47 +600,44 @@ static const struct sdiod_drive_str sdio
|
||||
{4, 0x1}
|
||||
};
|
||||
|
||||
-BRCMF_FW_NVRAM_DEF(43143, "brcmfmac43143-sdio.bin", "brcmfmac43143-sdio.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(43241B0, "brcmfmac43241b0-sdio.bin",
|
||||
- "brcmfmac43241b0-sdio.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(43241B4, "brcmfmac43241b4-sdio.bin",
|
||||
- "brcmfmac43241b4-sdio.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(43241B5, "brcmfmac43241b5-sdio.bin",
|
||||
- "brcmfmac43241b5-sdio.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(4329, "brcmfmac4329-sdio.bin", "brcmfmac4329-sdio.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(4330, "brcmfmac4330-sdio.bin", "brcmfmac4330-sdio.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(4334, "brcmfmac4334-sdio.bin", "brcmfmac4334-sdio.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(43340, "brcmfmac43340-sdio.bin", "brcmfmac43340-sdio.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(4335, "brcmfmac4335-sdio.bin", "brcmfmac4335-sdio.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(43362, "brcmfmac43362-sdio.bin", "brcmfmac43362-sdio.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(4339, "brcmfmac4339-sdio.bin", "brcmfmac4339-sdio.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(43430A0, "brcmfmac43430a0-sdio.bin", "brcmfmac43430a0-sdio.txt");
|
||||
+BRCMF_FW_DEF(43143, "brcmfmac43143-sdio");
|
||||
+BRCMF_FW_DEF(43241B0, "brcmfmac43241b0-sdio");
|
||||
+BRCMF_FW_DEF(43241B4, "brcmfmac43241b4-sdio");
|
||||
+BRCMF_FW_DEF(43241B5, "brcmfmac43241b5-sdio");
|
||||
+BRCMF_FW_DEF(4329, "brcmfmac4329-sdio");
|
||||
+BRCMF_FW_DEF(4330, "brcmfmac4330-sdio");
|
||||
+BRCMF_FW_DEF(4334, "brcmfmac4334-sdio");
|
||||
+BRCMF_FW_DEF(43340, "brcmfmac43340-sdio");
|
||||
+BRCMF_FW_DEF(4335, "brcmfmac4335-sdio");
|
||||
+BRCMF_FW_DEF(43362, "brcmfmac43362-sdio");
|
||||
+BRCMF_FW_DEF(4339, "brcmfmac4339-sdio");
|
||||
+BRCMF_FW_DEF(43430A0, "brcmfmac43430a0-sdio");
|
||||
/* Note the names are not postfixed with a1 for backward compatibility */
|
||||
-BRCMF_FW_NVRAM_DEF(43430A1, "brcmfmac43430-sdio.bin", "brcmfmac43430-sdio.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(43455, "brcmfmac43455-sdio.bin", "brcmfmac43455-sdio.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(4354, "brcmfmac4354-sdio.bin", "brcmfmac4354-sdio.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(4356, "brcmfmac4356-sdio.bin", "brcmfmac4356-sdio.txt");
|
||||
-BRCMF_FW_NVRAM_DEF(4373, "brcmfmac4373-sdio.bin", "brcmfmac4373-sdio.txt");
|
||||
+BRCMF_FW_DEF(43430A1, "brcmfmac43430-sdio");
|
||||
+BRCMF_FW_DEF(43455, "brcmfmac43455-sdio");
|
||||
+BRCMF_FW_DEF(4354, "brcmfmac4354-sdio");
|
||||
+BRCMF_FW_DEF(4356, "brcmfmac4356-sdio");
|
||||
+BRCMF_FW_DEF(4373, "brcmfmac4373-sdio");
|
||||
|
||||
static struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = {
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43241_CHIP_ID, 0x0000001F, 43241B0),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43241_CHIP_ID, 0x00000020, 43241B4),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43241_CHIP_ID, 0xFFFFFFC0, 43241B5),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4329_CHIP_ID, 0xFFFFFFFF, 4329),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4330_CHIP_ID, 0xFFFFFFFF, 4330),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4334_CHIP_ID, 0xFFFFFFFF, 4334),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43340_CHIP_ID, 0xFFFFFFFF, 43340),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43341_CHIP_ID, 0xFFFFFFFF, 43340),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4335_CHIP_ID, 0xFFFFFFFF, 4335),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43362_CHIP_ID, 0xFFFFFFFE, 43362),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF, 4339),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43430_CHIP_ID, 0x00000001, 43430A0),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43430_CHIP_ID, 0xFFFFFFFE, 43430A1),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4345_CHIP_ID, 0xFFFFFFC0, 43455),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4354_CHIP_ID, 0xFFFFFFFF, 4354),
|
||||
- BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4356_CHIP_ID, 0xFFFFFFFF, 4356),
|
||||
- BRCMF_FW_NVRAM_ENTRY(CY_CC_4373_CHIP_ID, 0xFFFFFFFF, 4373)
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_43241_CHIP_ID, 0x0000001F, 43241B0),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_43241_CHIP_ID, 0x00000020, 43241B4),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_43241_CHIP_ID, 0xFFFFFFC0, 43241B5),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4329_CHIP_ID, 0xFFFFFFFF, 4329),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4330_CHIP_ID, 0xFFFFFFFF, 4330),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4334_CHIP_ID, 0xFFFFFFFF, 4334),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_43340_CHIP_ID, 0xFFFFFFFF, 43340),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_43341_CHIP_ID, 0xFFFFFFFF, 43340),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4335_CHIP_ID, 0xFFFFFFFF, 4335),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_43362_CHIP_ID, 0xFFFFFFFE, 43362),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF, 4339),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_43430_CHIP_ID, 0x00000001, 43430A0),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_43430_CHIP_ID, 0xFFFFFFFE, 43430A1),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4345_CHIP_ID, 0xFFFFFFC0, 43455),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4354_CHIP_ID, 0xFFFFFFFF, 4354),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_4356_CHIP_ID, 0xFFFFFFFF, 4356),
|
||||
+ BRCMF_FW_ENTRY(CY_CC_4373_CHIP_ID, 0xFFFFFFFF, 4373)
|
||||
};
|
||||
|
||||
static void pkt_align(struct sk_buff *p, int len, int align)
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -46,11 +46,11 @@
|
||||
#define BRCMF_USB_CBCTL_READ 1
|
||||
#define BRCMF_USB_MAX_PKT_SIZE 1600
|
||||
|
||||
-BRCMF_FW_DEF(43143, "brcmfmac43143.bin");
|
||||
-BRCMF_FW_DEF(43236B, "brcmfmac43236b.bin");
|
||||
-BRCMF_FW_DEF(43242A, "brcmfmac43242a.bin");
|
||||
-BRCMF_FW_DEF(43569, "brcmfmac43569.bin");
|
||||
-BRCMF_FW_DEF(4373, "brcmfmac4373.bin");
|
||||
+BRCMF_FW_DEF(43143, "brcmfmac43143");
|
||||
+BRCMF_FW_DEF(43236B, "brcmfmac43236b");
|
||||
+BRCMF_FW_DEF(43242A, "brcmfmac43242a");
|
||||
+BRCMF_FW_DEF(43569, "brcmfmac43569");
|
||||
+BRCMF_FW_DEF(4373, "brcmfmac4373");
|
||||
|
||||
static struct brcmf_firmware_mapping brcmf_usb_fwnames[] = {
|
||||
BRCMF_FW_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143),
|
@ -0,0 +1,574 @@
|
||||
From d09ae51a4b676151edaf572bcd5f272b5532639f Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 22 Mar 2018 21:28:26 +0100
|
||||
Subject: [PATCH] brcmfmac: pass struct in brcmf_fw_get_firmwares()
|
||||
|
||||
Make the function brcmf_fw_get_firmwares() a bit more easy to extend
|
||||
using a structure to pass the request parameters.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/firmware.c | 175 ++++++++++++++-------
|
||||
.../broadcom/brcm80211/brcmfmac/firmware.h | 43 +++--
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/pcie.c | 38 ++++-
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 32 +++-
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 43 ++++-
|
||||
5 files changed, 245 insertions(+), 86 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
|
||||
@@ -438,18 +438,31 @@ void brcmf_fw_nvram_free(void *nvram)
|
||||
|
||||
struct brcmf_fw {
|
||||
struct device *dev;
|
||||
- u16 flags;
|
||||
- const struct firmware *code;
|
||||
- const char *nvram_name;
|
||||
- u16 domain_nr;
|
||||
- u16 bus_nr;
|
||||
- void (*done)(struct device *dev, int err, const struct firmware *fw,
|
||||
- void *nvram_image, u32 nvram_len);
|
||||
+ struct brcmf_fw_request *req;
|
||||
+ u32 curpos;
|
||||
+ void (*done)(struct device *dev, int err, struct brcmf_fw_request *req);
|
||||
};
|
||||
|
||||
+static void brcmf_fw_request_done(const struct firmware *fw, void *ctx);
|
||||
+
|
||||
+static void brcmf_fw_free_request(struct brcmf_fw_request *req)
|
||||
+{
|
||||
+ struct brcmf_fw_item *item;
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0, item = &req->items[0]; i < req->n_items; i++, item++) {
|
||||
+ if (item->type == BRCMF_FW_TYPE_BINARY)
|
||||
+ release_firmware(item->binary);
|
||||
+ else if (item->type == BRCMF_FW_TYPE_NVRAM)
|
||||
+ brcmf_fw_nvram_free(item->nv_data.data);
|
||||
+ }
|
||||
+ kfree(req);
|
||||
+}
|
||||
+
|
||||
static void brcmf_fw_request_nvram_done(const struct firmware *fw, void *ctx)
|
||||
{
|
||||
struct brcmf_fw *fwctx = ctx;
|
||||
+ struct brcmf_fw_item *cur;
|
||||
u32 nvram_length = 0;
|
||||
void *nvram = NULL;
|
||||
u8 *data = NULL;
|
||||
@@ -457,83 +470,150 @@ static void brcmf_fw_request_nvram_done(
|
||||
bool raw_nvram;
|
||||
|
||||
brcmf_dbg(TRACE, "enter: dev=%s\n", dev_name(fwctx->dev));
|
||||
+
|
||||
+ cur = &fwctx->req->items[fwctx->curpos];
|
||||
+
|
||||
if (fw && fw->data) {
|
||||
data = (u8 *)fw->data;
|
||||
data_len = fw->size;
|
||||
raw_nvram = false;
|
||||
} else {
|
||||
data = bcm47xx_nvram_get_contents(&data_len);
|
||||
- if (!data && !(fwctx->flags & BRCMF_FW_REQ_NV_OPTIONAL))
|
||||
+ if (!data && !(cur->flags & BRCMF_FW_REQF_OPTIONAL))
|
||||
goto fail;
|
||||
raw_nvram = true;
|
||||
}
|
||||
|
||||
if (data)
|
||||
nvram = brcmf_fw_nvram_strip(data, data_len, &nvram_length,
|
||||
- fwctx->domain_nr, fwctx->bus_nr);
|
||||
+ fwctx->req->domain_nr,
|
||||
+ fwctx->req->bus_nr);
|
||||
|
||||
if (raw_nvram)
|
||||
bcm47xx_nvram_release_contents(data);
|
||||
release_firmware(fw);
|
||||
- if (!nvram && !(fwctx->flags & BRCMF_FW_REQ_NV_OPTIONAL))
|
||||
+ if (!nvram && !(cur->flags & BRCMF_FW_REQF_OPTIONAL))
|
||||
goto fail;
|
||||
|
||||
- fwctx->done(fwctx->dev, 0, fwctx->code, nvram, nvram_length);
|
||||
- kfree(fwctx);
|
||||
+ brcmf_dbg(TRACE, "nvram %p len %d\n", nvram, nvram_length);
|
||||
+ cur->nv_data.data = nvram;
|
||||
+ cur->nv_data.len = nvram_length;
|
||||
return;
|
||||
|
||||
fail:
|
||||
brcmf_dbg(TRACE, "failed: dev=%s\n", dev_name(fwctx->dev));
|
||||
- release_firmware(fwctx->code);
|
||||
- fwctx->done(fwctx->dev, -ENOENT, NULL, NULL, 0);
|
||||
+ fwctx->done(fwctx->dev, -ENOENT, NULL);
|
||||
+ brcmf_fw_free_request(fwctx->req);
|
||||
kfree(fwctx);
|
||||
}
|
||||
|
||||
-static void brcmf_fw_request_code_done(const struct firmware *fw, void *ctx)
|
||||
+static int brcmf_fw_request_next_item(struct brcmf_fw *fwctx, bool async)
|
||||
+{
|
||||
+ struct brcmf_fw_item *cur;
|
||||
+ const struct firmware *fw = NULL;
|
||||
+ int ret;
|
||||
+
|
||||
+ cur = &fwctx->req->items[fwctx->curpos];
|
||||
+
|
||||
+ brcmf_dbg(TRACE, "%srequest for %s\n", async ? "async " : "",
|
||||
+ cur->path);
|
||||
+
|
||||
+ if (async)
|
||||
+ ret = request_firmware_nowait(THIS_MODULE, true, cur->path,
|
||||
+ fwctx->dev, GFP_KERNEL, fwctx,
|
||||
+ brcmf_fw_request_done);
|
||||
+ else
|
||||
+ ret = request_firmware(&fw, cur->path, fwctx->dev);
|
||||
+
|
||||
+ if (ret < 0) {
|
||||
+ brcmf_fw_request_done(NULL, fwctx);
|
||||
+ } else if (!async && fw) {
|
||||
+ brcmf_dbg(TRACE, "firmware %s %sfound\n", cur->path,
|
||||
+ fw ? "" : "not ");
|
||||
+ if (cur->type == BRCMF_FW_TYPE_BINARY)
|
||||
+ cur->binary = fw;
|
||||
+ else if (cur->type == BRCMF_FW_TYPE_NVRAM)
|
||||
+ brcmf_fw_request_nvram_done(fw, fwctx);
|
||||
+ else
|
||||
+ release_firmware(fw);
|
||||
+
|
||||
+ return -EAGAIN;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void brcmf_fw_request_done(const struct firmware *fw, void *ctx)
|
||||
{
|
||||
struct brcmf_fw *fwctx = ctx;
|
||||
+ struct brcmf_fw_item *cur;
|
||||
int ret = 0;
|
||||
|
||||
- brcmf_dbg(TRACE, "enter: dev=%s\n", dev_name(fwctx->dev));
|
||||
- if (!fw) {
|
||||
+ cur = &fwctx->req->items[fwctx->curpos];
|
||||
+
|
||||
+ brcmf_dbg(TRACE, "enter: firmware %s %sfound\n", cur->path,
|
||||
+ fw ? "" : "not ");
|
||||
+
|
||||
+ if (fw) {
|
||||
+ if (cur->type == BRCMF_FW_TYPE_BINARY)
|
||||
+ cur->binary = fw;
|
||||
+ else if (cur->type == BRCMF_FW_TYPE_NVRAM)
|
||||
+ brcmf_fw_request_nvram_done(fw, fwctx);
|
||||
+ else
|
||||
+ release_firmware(fw);
|
||||
+ } else if (cur->type == BRCMF_FW_TYPE_NVRAM) {
|
||||
+ brcmf_fw_request_nvram_done(NULL, fwctx);
|
||||
+ } else if (!(cur->flags & BRCMF_FW_REQF_OPTIONAL)) {
|
||||
ret = -ENOENT;
|
||||
goto fail;
|
||||
}
|
||||
- /* only requested code so done here */
|
||||
- if (!(fwctx->flags & BRCMF_FW_REQUEST_NVRAM))
|
||||
- goto done;
|
||||
-
|
||||
- fwctx->code = fw;
|
||||
- ret = request_firmware_nowait(THIS_MODULE, true, fwctx->nvram_name,
|
||||
- fwctx->dev, GFP_KERNEL, fwctx,
|
||||
- brcmf_fw_request_nvram_done);
|
||||
|
||||
- /* pass NULL to nvram callback for bcm47xx fallback */
|
||||
- if (ret)
|
||||
- brcmf_fw_request_nvram_done(NULL, fwctx);
|
||||
+ do {
|
||||
+ if (++fwctx->curpos == fwctx->req->n_items) {
|
||||
+ ret = 0;
|
||||
+ goto done;
|
||||
+ }
|
||||
+
|
||||
+ ret = brcmf_fw_request_next_item(fwctx, false);
|
||||
+ } while (ret == -EAGAIN);
|
||||
+
|
||||
return;
|
||||
|
||||
fail:
|
||||
- brcmf_dbg(TRACE, "failed: dev=%s\n", dev_name(fwctx->dev));
|
||||
+ brcmf_dbg(TRACE, "failed err=%d: dev=%s, fw=%s\n", ret,
|
||||
+ dev_name(fwctx->dev), cur->path);
|
||||
+ brcmf_fw_free_request(fwctx->req);
|
||||
+ fwctx->req = NULL;
|
||||
done:
|
||||
- fwctx->done(fwctx->dev, ret, fw, NULL, 0);
|
||||
+ fwctx->done(fwctx->dev, ret, fwctx->req);
|
||||
kfree(fwctx);
|
||||
}
|
||||
|
||||
-int brcmf_fw_get_firmwares_pcie(struct device *dev, u16 flags,
|
||||
- const char *code, const char *nvram,
|
||||
- void (*fw_cb)(struct device *dev, int err,
|
||||
- const struct firmware *fw,
|
||||
- void *nvram_image, u32 nvram_len),
|
||||
- u16 domain_nr, u16 bus_nr)
|
||||
+static bool brcmf_fw_request_is_valid(struct brcmf_fw_request *req)
|
||||
+{
|
||||
+ struct brcmf_fw_item *item;
|
||||
+ int i;
|
||||
+
|
||||
+ if (!req->n_items)
|
||||
+ return false;
|
||||
+
|
||||
+ for (i = 0, item = &req->items[0]; i < req->n_items; i++, item++) {
|
||||
+ if (!item->path)
|
||||
+ return false;
|
||||
+ }
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+int brcmf_fw_get_firmwares(struct device *dev, struct brcmf_fw_request *req,
|
||||
+ void (*fw_cb)(struct device *dev, int err,
|
||||
+ struct brcmf_fw_request *req))
|
||||
{
|
||||
struct brcmf_fw *fwctx;
|
||||
|
||||
brcmf_dbg(TRACE, "enter: dev=%s\n", dev_name(dev));
|
||||
- if (!fw_cb || !code)
|
||||
+ if (!fw_cb)
|
||||
return -EINVAL;
|
||||
|
||||
- if ((flags & BRCMF_FW_REQUEST_NVRAM) && !nvram)
|
||||
+ if (!brcmf_fw_request_is_valid(req))
|
||||
return -EINVAL;
|
||||
|
||||
fwctx = kzalloc(sizeof(*fwctx), GFP_KERNEL);
|
||||
@@ -541,26 +621,11 @@ int brcmf_fw_get_firmwares_pcie(struct d
|
||||
return -ENOMEM;
|
||||
|
||||
fwctx->dev = dev;
|
||||
- fwctx->flags = flags;
|
||||
+ fwctx->req = req;
|
||||
fwctx->done = fw_cb;
|
||||
- if (flags & BRCMF_FW_REQUEST_NVRAM)
|
||||
- fwctx->nvram_name = nvram;
|
||||
- fwctx->domain_nr = domain_nr;
|
||||
- fwctx->bus_nr = bus_nr;
|
||||
-
|
||||
- return request_firmware_nowait(THIS_MODULE, true, code, dev,
|
||||
- GFP_KERNEL, fwctx,
|
||||
- brcmf_fw_request_code_done);
|
||||
-}
|
||||
|
||||
-int brcmf_fw_get_firmwares(struct device *dev, u16 flags,
|
||||
- const char *code, const char *nvram,
|
||||
- void (*fw_cb)(struct device *dev, int err,
|
||||
- const struct firmware *fw,
|
||||
- void *nvram_image, u32 nvram_len))
|
||||
-{
|
||||
- return brcmf_fw_get_firmwares_pcie(dev, flags, code, nvram, fw_cb, 0,
|
||||
- 0);
|
||||
+ brcmf_fw_request_next_item(fwctx, true);
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static void brcmf_fw_get_full_name(char fw_name[BRCMF_FW_NAME_LEN],
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
|
||||
@@ -16,10 +16,7 @@
|
||||
#ifndef BRCMFMAC_FIRMWARE_H
|
||||
#define BRCMFMAC_FIRMWARE_H
|
||||
|
||||
-#define BRCMF_FW_REQUEST 0x000F
|
||||
-#define BRCMF_FW_REQUEST_NVRAM 0x0001
|
||||
-#define BRCMF_FW_REQ_FLAGS 0x00F0
|
||||
-#define BRCMF_FW_REQ_NV_OPTIONAL 0x0010
|
||||
+#define BRCMF_FW_REQF_OPTIONAL 0x0001
|
||||
|
||||
#define BRCMF_FW_NAME_LEN 320
|
||||
|
||||
@@ -54,21 +51,39 @@ int brcmf_fw_map_chip_to_name(u32 chip,
|
||||
u32 table_size, char fw_name[BRCMF_FW_NAME_LEN],
|
||||
char nvram_name[BRCMF_FW_NAME_LEN]);
|
||||
void brcmf_fw_nvram_free(void *nvram);
|
||||
+
|
||||
+enum brcmf_fw_type {
|
||||
+ BRCMF_FW_TYPE_BINARY,
|
||||
+ BRCMF_FW_TYPE_NVRAM
|
||||
+};
|
||||
+
|
||||
+struct brcmf_fw_item {
|
||||
+ const char *path;
|
||||
+ enum brcmf_fw_type type;
|
||||
+ u16 flags;
|
||||
+ union {
|
||||
+ const struct firmware *binary;
|
||||
+ struct {
|
||||
+ void *data;
|
||||
+ u32 len;
|
||||
+ } nv_data;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+struct brcmf_fw_request {
|
||||
+ u16 domain_nr;
|
||||
+ u16 bus_nr;
|
||||
+ u32 n_items;
|
||||
+ struct brcmf_fw_item items[0];
|
||||
+};
|
||||
+
|
||||
/*
|
||||
* Request firmware(s) asynchronously. When the asynchronous request
|
||||
* fails it will not use the callback, but call device_release_driver()
|
||||
* instead which will call the driver .remove() callback.
|
||||
*/
|
||||
-int brcmf_fw_get_firmwares_pcie(struct device *dev, u16 flags,
|
||||
- const char *code, const char *nvram,
|
||||
- void (*fw_cb)(struct device *dev, int err,
|
||||
- const struct firmware *fw,
|
||||
- void *nvram_image, u32 nvram_len),
|
||||
- u16 domain_nr, u16 bus_nr);
|
||||
-int brcmf_fw_get_firmwares(struct device *dev, u16 flags,
|
||||
- const char *code, const char *nvram,
|
||||
+int brcmf_fw_get_firmwares(struct device *dev, struct brcmf_fw_request *req,
|
||||
void (*fw_cb)(struct device *dev, int err,
|
||||
- const struct firmware *fw,
|
||||
- void *nvram_image, u32 nvram_len));
|
||||
+ struct brcmf_fw_request *req));
|
||||
|
||||
#endif /* BRCMFMAC_FIRMWARE_H */
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -1651,15 +1651,19 @@ static const struct brcmf_buscore_ops br
|
||||
.write32 = brcmf_pcie_buscore_write32,
|
||||
};
|
||||
|
||||
+#define BRCMF_PCIE_FW_CODE 0
|
||||
+#define BRCMF_PCIE_FW_NVRAM 1
|
||||
+
|
||||
static void brcmf_pcie_setup(struct device *dev, int ret,
|
||||
- const struct firmware *fw,
|
||||
- void *nvram, u32 nvram_len)
|
||||
+ struct brcmf_fw_request *fwreq)
|
||||
{
|
||||
+ const struct firmware *fw;
|
||||
+ void *nvram;
|
||||
struct brcmf_bus *bus;
|
||||
struct brcmf_pciedev *pcie_bus_dev;
|
||||
struct brcmf_pciedev_info *devinfo;
|
||||
struct brcmf_commonring **flowrings;
|
||||
- u32 i;
|
||||
+ u32 i, nvram_len;
|
||||
|
||||
/* check firmware loading result */
|
||||
if (ret)
|
||||
@@ -1670,6 +1674,11 @@ static void brcmf_pcie_setup(struct devi
|
||||
devinfo = pcie_bus_dev->devinfo;
|
||||
brcmf_pcie_attach(devinfo);
|
||||
|
||||
+ fw = fwreq->items[BRCMF_PCIE_FW_CODE].binary;
|
||||
+ nvram = fwreq->items[BRCMF_PCIE_FW_NVRAM].nv_data.data;
|
||||
+ nvram_len = fwreq->items[BRCMF_PCIE_FW_NVRAM].nv_data.len;
|
||||
+ kfree(fwreq);
|
||||
+
|
||||
/* Some of the firmwares have the size of the memory of the device
|
||||
* defined inside the firmware. This is because part of the memory in
|
||||
* the device is shared and the devision is determined by FW. Parse
|
||||
@@ -1730,6 +1739,7 @@ static int
|
||||
brcmf_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
{
|
||||
int ret;
|
||||
+ struct brcmf_fw_request *fwreq;
|
||||
struct brcmf_pciedev_info *devinfo;
|
||||
struct brcmf_pciedev *pcie_bus_dev;
|
||||
struct brcmf_bus *bus;
|
||||
@@ -1800,12 +1810,26 @@ brcmf_pcie_probe(struct pci_dev *pdev, c
|
||||
if (ret)
|
||||
goto fail_bus;
|
||||
|
||||
- ret = brcmf_fw_get_firmwares_pcie(bus->dev, BRCMF_FW_REQUEST_NVRAM |
|
||||
- BRCMF_FW_REQ_NV_OPTIONAL,
|
||||
- devinfo->fw_name, devinfo->nvram_name,
|
||||
- brcmf_pcie_setup, domain_nr, bus_nr);
|
||||
+ fwreq = kzalloc(sizeof(*fwreq) + 2 * sizeof(struct brcmf_fw_item),
|
||||
+ GFP_KERNEL);
|
||||
+ if (!fwreq) {
|
||||
+ ret = -ENOMEM;
|
||||
+ goto fail_bus;
|
||||
+ }
|
||||
+
|
||||
+ fwreq->items[BRCMF_PCIE_FW_CODE].path = devinfo->fw_name;
|
||||
+ fwreq->items[BRCMF_PCIE_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
|
||||
+ fwreq->items[BRCMF_PCIE_FW_NVRAM].path = devinfo->nvram_name;
|
||||
+ fwreq->items[BRCMF_PCIE_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM;
|
||||
+ fwreq->items[BRCMF_PCIE_FW_NVRAM].flags = BRCMF_FW_REQF_OPTIONAL;
|
||||
+ fwreq->n_items = 2;
|
||||
+ fwreq->domain_nr = domain_nr;
|
||||
+ fwreq->bus_nr = bus_nr;
|
||||
+ ret = brcmf_fw_get_firmwares(bus->dev, fwreq, brcmf_pcie_setup);
|
||||
if (ret == 0)
|
||||
return 0;
|
||||
+
|
||||
+ kfree(fwreq);
|
||||
fail_bus:
|
||||
kfree(bus->msgbuf);
|
||||
kfree(bus);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -4031,14 +4031,19 @@ static const struct brcmf_bus_ops brcmf_
|
||||
.get_fwname = brcmf_sdio_get_fwname,
|
||||
};
|
||||
|
||||
+#define BRCMF_SDIO_FW_CODE 0
|
||||
+#define BRCMF_SDIO_FW_NVRAM 1
|
||||
+
|
||||
static void brcmf_sdio_firmware_callback(struct device *dev, int err,
|
||||
- const struct firmware *code,
|
||||
- void *nvram, u32 nvram_len)
|
||||
+ struct brcmf_fw_request *fwreq)
|
||||
{
|
||||
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||
struct brcmf_sdio_dev *sdiod = bus_if->bus_priv.sdio;
|
||||
struct brcmf_sdio *bus = sdiod->bus;
|
||||
struct brcmf_core *core = bus->sdio_core;
|
||||
+ const struct firmware *code;
|
||||
+ void *nvram;
|
||||
+ u32 nvram_len;
|
||||
u8 saveclk;
|
||||
|
||||
brcmf_dbg(TRACE, "Enter: dev=%s, err=%d\n", dev_name(dev), err);
|
||||
@@ -4046,6 +4051,11 @@ static void brcmf_sdio_firmware_callback
|
||||
if (err)
|
||||
goto fail;
|
||||
|
||||
+ code = fwreq->items[BRCMF_SDIO_FW_CODE].binary;
|
||||
+ nvram = fwreq->items[BRCMF_SDIO_FW_NVRAM].nv_data.data;
|
||||
+ nvram_len = fwreq->items[BRCMF_SDIO_FW_NVRAM].nv_data.len;
|
||||
+ kfree(fwreq);
|
||||
+
|
||||
/* try to download image and nvram to the dongle */
|
||||
bus->alp_only = true;
|
||||
err = brcmf_sdio_download_firmware(bus, code, nvram, nvram_len);
|
||||
@@ -4150,6 +4160,7 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
|
||||
int ret;
|
||||
struct brcmf_sdio *bus;
|
||||
struct workqueue_struct *wq;
|
||||
+ struct brcmf_fw_request *fwreq;
|
||||
|
||||
brcmf_dbg(TRACE, "Enter\n");
|
||||
|
||||
@@ -4240,11 +4251,24 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
|
||||
if (ret)
|
||||
goto fail;
|
||||
|
||||
- ret = brcmf_fw_get_firmwares(sdiodev->dev, BRCMF_FW_REQUEST_NVRAM,
|
||||
- sdiodev->fw_name, sdiodev->nvram_name,
|
||||
+ fwreq = kzalloc(sizeof(fwreq) + 2 * sizeof(struct brcmf_fw_item),
|
||||
+ GFP_KERNEL);
|
||||
+ if (!fwreq) {
|
||||
+ ret = -ENOMEM;
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
+ fwreq->items[BRCMF_SDIO_FW_CODE].path = sdiodev->fw_name;
|
||||
+ fwreq->items[BRCMF_SDIO_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
|
||||
+ fwreq->items[BRCMF_SDIO_FW_NVRAM].path = sdiodev->nvram_name;
|
||||
+ fwreq->items[BRCMF_SDIO_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM;
|
||||
+ fwreq->n_items = 2;
|
||||
+
|
||||
+ ret = brcmf_fw_get_firmwares(sdiodev->dev, fwreq,
|
||||
brcmf_sdio_firmware_callback);
|
||||
if (ret != 0) {
|
||||
brcmf_err("async firmware request failed: %d\n", ret);
|
||||
+ kfree(fwreq);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -1155,18 +1155,23 @@ static const struct brcmf_bus_ops brcmf_
|
||||
.get_fwname = brcmf_usb_get_fwname,
|
||||
};
|
||||
|
||||
+#define BRCMF_USB_FW_CODE 0
|
||||
+
|
||||
static void brcmf_usb_probe_phase2(struct device *dev, int ret,
|
||||
- const struct firmware *fw,
|
||||
- void *nvram, u32 nvlen)
|
||||
+ struct brcmf_fw_request *fwreq)
|
||||
{
|
||||
struct brcmf_bus *bus = dev_get_drvdata(dev);
|
||||
struct brcmf_usbdev_info *devinfo = bus->bus_priv.usb->devinfo;
|
||||
+ const struct firmware *fw;
|
||||
|
||||
if (ret)
|
||||
goto error;
|
||||
|
||||
brcmf_dbg(USB, "Start fw downloading\n");
|
||||
|
||||
+ fw = fwreq->items[BRCMF_USB_FW_CODE].binary;
|
||||
+ kfree(fwreq);
|
||||
+
|
||||
ret = check_file(fw->data);
|
||||
if (ret < 0) {
|
||||
brcmf_err("invalid firmware\n");
|
||||
@@ -1200,6 +1205,7 @@ static int brcmf_usb_probe_cb(struct brc
|
||||
struct brcmf_bus *bus = NULL;
|
||||
struct brcmf_usbdev *bus_pub = NULL;
|
||||
struct device *dev = devinfo->dev;
|
||||
+ struct brcmf_fw_request *fwreq;
|
||||
int ret;
|
||||
|
||||
brcmf_dbg(USB, "Enter\n");
|
||||
@@ -1250,11 +1256,22 @@ static int brcmf_usb_probe_cb(struct brc
|
||||
if (ret)
|
||||
goto fail;
|
||||
|
||||
+ fwreq = kzalloc(sizeof(*fwreq) + sizeof(struct brcmf_fw_item),
|
||||
+ GFP_KERNEL);
|
||||
+ if (!fwreq) {
|
||||
+ ret = -ENOMEM;
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
+ fwreq->items[BRCMF_USB_FW_CODE].path = devinfo->fw_name;
|
||||
+ fwreq->items[BRCMF_USB_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
|
||||
+ fwreq->n_items = 1;
|
||||
+
|
||||
/* request firmware here */
|
||||
- ret = brcmf_fw_get_firmwares(dev, 0, devinfo->fw_name, NULL,
|
||||
- brcmf_usb_probe_phase2);
|
||||
+ ret = brcmf_fw_get_firmwares(dev, fwreq, brcmf_usb_probe_phase2);
|
||||
if (ret) {
|
||||
brcmf_err("firmware request failed: %d\n", ret);
|
||||
+ kfree(fwreq);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
@@ -1447,11 +1464,25 @@ static int brcmf_usb_reset_resume(struct
|
||||
{
|
||||
struct usb_device *usb = interface_to_usbdev(intf);
|
||||
struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(&usb->dev);
|
||||
+ struct brcmf_fw_request *fwreq;
|
||||
+ int ret;
|
||||
|
||||
brcmf_dbg(USB, "Enter\n");
|
||||
|
||||
- return brcmf_fw_get_firmwares(&usb->dev, 0, devinfo->fw_name, NULL,
|
||||
- brcmf_usb_probe_phase2);
|
||||
+ fwreq = kzalloc(sizeof(*fwreq) + sizeof(struct brcmf_fw_item),
|
||||
+ GFP_KERNEL);
|
||||
+ if (!fwreq)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ fwreq->items[BRCMF_USB_FW_CODE].path = devinfo->fw_name;
|
||||
+ fwreq->items[BRCMF_USB_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
|
||||
+ fwreq->n_items = 1;
|
||||
+
|
||||
+ ret = brcmf_fw_get_firmwares(&usb->dev, fwreq, brcmf_usb_probe_phase2);
|
||||
+ if (ret < 0)
|
||||
+ kfree(fwreq);
|
||||
+
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
#define BRCMF_USB_DEVICE(dev_id) \
|
@ -0,0 +1,328 @@
|
||||
From 2baa3aaee27f137b8db9a9224d0fe9b281d28e34 Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 22 Mar 2018 21:28:27 +0100
|
||||
Subject: [PATCH] brcmfmac: introduce brcmf_fw_alloc_request() function
|
||||
|
||||
The function brcmf_fw_alloc_request() takes a list of required files
|
||||
and allocated the struct brcmf_fw_request instance accordingly. The
|
||||
request can be modified by the caller before being passed to the
|
||||
brcmf_fw_request_firmwares() function.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/firmware.c | 58 ++++++++++++++++++++++
|
||||
.../broadcom/brcm80211/brcmfmac/firmware.h | 11 ++++
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/pcie.c | 58 ++++++++++++----------
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 38 ++++++++------
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 42 +++++++++-------
|
||||
5 files changed, 147 insertions(+), 60 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
|
||||
@@ -688,3 +688,61 @@ int brcmf_fw_map_chip_to_name(u32 chip,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+struct brcmf_fw_request *
|
||||
+brcmf_fw_alloc_request(u32 chip, u32 chiprev,
|
||||
+ struct brcmf_firmware_mapping mapping_table[],
|
||||
+ u32 table_size, struct brcmf_fw_name *fwnames,
|
||||
+ u32 n_fwnames)
|
||||
+{
|
||||
+ struct brcmf_fw_request *fwreq;
|
||||
+ char chipname[12];
|
||||
+ const char *mp_path;
|
||||
+ u32 i, j;
|
||||
+ char end;
|
||||
+ size_t reqsz;
|
||||
+
|
||||
+ for (i = 0; i < table_size; i++) {
|
||||
+ if (mapping_table[i].chipid == chip &&
|
||||
+ mapping_table[i].revmask & BIT(chiprev))
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (i == table_size) {
|
||||
+ brcmf_err("Unknown chipid %d [%d]\n", chip, chiprev);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ reqsz = sizeof(*fwreq) + n_fwnames * sizeof(struct brcmf_fw_item);
|
||||
+ fwreq = kzalloc(reqsz, GFP_KERNEL);
|
||||
+ if (!fwreq)
|
||||
+ return NULL;
|
||||
+
|
||||
+ brcmf_chip_name(chip, chiprev, chipname, sizeof(chipname));
|
||||
+
|
||||
+ brcmf_info("using %s for chip %s\n",
|
||||
+ mapping_table[i].fw_base, chipname);
|
||||
+
|
||||
+ mp_path = brcmf_mp_global.firmware_path;
|
||||
+ end = mp_path[strlen(mp_path) - 1];
|
||||
+ fwreq->n_items = n_fwnames;
|
||||
+
|
||||
+ for (j = 0; j < n_fwnames; j++) {
|
||||
+ fwreq->items[j].path = fwnames[j].path;
|
||||
+ /* check if firmware path is provided by module parameter */
|
||||
+ if (brcmf_mp_global.firmware_path[0] != '\0') {
|
||||
+ strlcpy(fwnames[j].path, mp_path,
|
||||
+ BRCMF_FW_NAME_LEN);
|
||||
+
|
||||
+ if (end != '/') {
|
||||
+ strlcat(fwnames[j].path, "/",
|
||||
+ BRCMF_FW_NAME_LEN);
|
||||
+ }
|
||||
+ }
|
||||
+ brcmf_fw_get_full_name(fwnames[j].path,
|
||||
+ mapping_table[i].fw_base,
|
||||
+ fwnames[j].extension);
|
||||
+ fwreq->items[j].path = fwnames[j].path;
|
||||
+ }
|
||||
+
|
||||
+ return fwreq;
|
||||
+}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
|
||||
@@ -77,6 +77,17 @@ struct brcmf_fw_request {
|
||||
struct brcmf_fw_item items[0];
|
||||
};
|
||||
|
||||
+struct brcmf_fw_name {
|
||||
+ const char *extension;
|
||||
+ char *path;
|
||||
+};
|
||||
+
|
||||
+struct brcmf_fw_request *
|
||||
+brcmf_fw_alloc_request(u32 chip, u32 chiprev,
|
||||
+ struct brcmf_firmware_mapping mapping_table[],
|
||||
+ u32 table_size, struct brcmf_fw_name *fwnames,
|
||||
+ u32 n_fwnames);
|
||||
+
|
||||
/*
|
||||
* Request firmware(s) asynchronously. When the asynchronous request
|
||||
* fails it will not use the callback, but call device_release_driver()
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -1735,6 +1735,31 @@ fail:
|
||||
device_release_driver(dev);
|
||||
}
|
||||
|
||||
+static struct brcmf_fw_request *
|
||||
+brcmf_pcie_prepare_fw_request(struct brcmf_pciedev_info *devinfo)
|
||||
+{
|
||||
+ struct brcmf_fw_request *fwreq;
|
||||
+ struct brcmf_fw_name fwnames[] = {
|
||||
+ { ".bin", devinfo->fw_name },
|
||||
+ { ".txt", devinfo->nvram_name },
|
||||
+ };
|
||||
+
|
||||
+ fwreq = brcmf_fw_alloc_request(devinfo->ci->chip, devinfo->ci->chiprev,
|
||||
+ brcmf_pcie_fwnames,
|
||||
+ ARRAY_SIZE(brcmf_pcie_fwnames),
|
||||
+ fwnames, ARRAY_SIZE(fwnames));
|
||||
+ if (!fwreq)
|
||||
+ return NULL;
|
||||
+
|
||||
+ fwreq->items[BRCMF_PCIE_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
|
||||
+ fwreq->items[BRCMF_PCIE_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM;
|
||||
+ fwreq->items[BRCMF_PCIE_FW_NVRAM].flags = BRCMF_FW_REQF_OPTIONAL;
|
||||
+ fwreq->domain_nr = pci_domain_nr(devinfo->pdev->bus);
|
||||
+ fwreq->bus_nr = devinfo->pdev->bus->number;
|
||||
+
|
||||
+ return fwreq;
|
||||
+}
|
||||
+
|
||||
static int
|
||||
brcmf_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
{
|
||||
@@ -1743,13 +1768,8 @@ brcmf_pcie_probe(struct pci_dev *pdev, c
|
||||
struct brcmf_pciedev_info *devinfo;
|
||||
struct brcmf_pciedev *pcie_bus_dev;
|
||||
struct brcmf_bus *bus;
|
||||
- u16 domain_nr;
|
||||
- u16 bus_nr;
|
||||
|
||||
- domain_nr = pci_domain_nr(pdev->bus) + 1;
|
||||
- bus_nr = pdev->bus->number;
|
||||
- brcmf_dbg(PCIE, "Enter %x:%x (%d/%d)\n", pdev->vendor, pdev->device,
|
||||
- domain_nr, bus_nr);
|
||||
+ brcmf_dbg(PCIE, "Enter %x:%x\n", pdev->vendor, pdev->device);
|
||||
|
||||
ret = -ENOMEM;
|
||||
devinfo = kzalloc(sizeof(*devinfo), GFP_KERNEL);
|
||||
@@ -1803,33 +1823,19 @@ brcmf_pcie_probe(struct pci_dev *pdev, c
|
||||
bus->wowl_supported = pci_pme_capable(pdev, PCI_D3hot);
|
||||
dev_set_drvdata(&pdev->dev, bus);
|
||||
|
||||
- ret = brcmf_fw_map_chip_to_name(devinfo->ci->chip, devinfo->ci->chiprev,
|
||||
- brcmf_pcie_fwnames,
|
||||
- ARRAY_SIZE(brcmf_pcie_fwnames),
|
||||
- devinfo->fw_name, devinfo->nvram_name);
|
||||
- if (ret)
|
||||
- goto fail_bus;
|
||||
-
|
||||
- fwreq = kzalloc(sizeof(*fwreq) + 2 * sizeof(struct brcmf_fw_item),
|
||||
- GFP_KERNEL);
|
||||
+ fwreq = brcmf_pcie_prepare_fw_request(devinfo);
|
||||
if (!fwreq) {
|
||||
ret = -ENOMEM;
|
||||
goto fail_bus;
|
||||
}
|
||||
|
||||
- fwreq->items[BRCMF_PCIE_FW_CODE].path = devinfo->fw_name;
|
||||
- fwreq->items[BRCMF_PCIE_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
|
||||
- fwreq->items[BRCMF_PCIE_FW_NVRAM].path = devinfo->nvram_name;
|
||||
- fwreq->items[BRCMF_PCIE_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM;
|
||||
- fwreq->items[BRCMF_PCIE_FW_NVRAM].flags = BRCMF_FW_REQF_OPTIONAL;
|
||||
- fwreq->n_items = 2;
|
||||
- fwreq->domain_nr = domain_nr;
|
||||
- fwreq->bus_nr = bus_nr;
|
||||
ret = brcmf_fw_get_firmwares(bus->dev, fwreq, brcmf_pcie_setup);
|
||||
- if (ret == 0)
|
||||
- return 0;
|
||||
+ if (ret < 0) {
|
||||
+ kfree(fwreq);
|
||||
+ goto fail_bus;
|
||||
+ }
|
||||
+ return 0;
|
||||
|
||||
- kfree(fwreq);
|
||||
fail_bus:
|
||||
kfree(bus->msgbuf);
|
||||
kfree(bus);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -4155,6 +4155,28 @@ fail:
|
||||
device_release_driver(dev);
|
||||
}
|
||||
|
||||
+static struct brcmf_fw_request *
|
||||
+brcmf_sdio_prepare_fw_request(struct brcmf_sdio *bus)
|
||||
+{
|
||||
+ struct brcmf_fw_request *fwreq;
|
||||
+ struct brcmf_fw_name fwnames[] = {
|
||||
+ { ".bin", bus->sdiodev->fw_name },
|
||||
+ { ".txt", bus->sdiodev->nvram_name },
|
||||
+ };
|
||||
+
|
||||
+ fwreq = brcmf_fw_alloc_request(bus->ci->chip, bus->ci->chiprev,
|
||||
+ brcmf_sdio_fwnames,
|
||||
+ ARRAY_SIZE(brcmf_sdio_fwnames),
|
||||
+ fwnames, ARRAY_SIZE(fwnames));
|
||||
+ if (!fwreq)
|
||||
+ return NULL;
|
||||
+
|
||||
+ fwreq->items[BRCMF_SDIO_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
|
||||
+ fwreq->items[BRCMF_SDIO_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM;
|
||||
+
|
||||
+ return fwreq;
|
||||
+}
|
||||
+
|
||||
struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
|
||||
{
|
||||
int ret;
|
||||
@@ -4244,26 +4266,12 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
|
||||
|
||||
brcmf_dbg(INFO, "completed!!\n");
|
||||
|
||||
- ret = brcmf_fw_map_chip_to_name(bus->ci->chip, bus->ci->chiprev,
|
||||
- brcmf_sdio_fwnames,
|
||||
- ARRAY_SIZE(brcmf_sdio_fwnames),
|
||||
- sdiodev->fw_name, sdiodev->nvram_name);
|
||||
- if (ret)
|
||||
- goto fail;
|
||||
-
|
||||
- fwreq = kzalloc(sizeof(fwreq) + 2 * sizeof(struct brcmf_fw_item),
|
||||
- GFP_KERNEL);
|
||||
+ fwreq = brcmf_sdio_prepare_fw_request(bus);
|
||||
if (!fwreq) {
|
||||
ret = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
- fwreq->items[BRCMF_SDIO_FW_CODE].path = sdiodev->fw_name;
|
||||
- fwreq->items[BRCMF_SDIO_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
|
||||
- fwreq->items[BRCMF_SDIO_FW_NVRAM].path = sdiodev->nvram_name;
|
||||
- fwreq->items[BRCMF_SDIO_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM;
|
||||
- fwreq->n_items = 2;
|
||||
-
|
||||
ret = brcmf_fw_get_firmwares(sdiodev->dev, fwreq,
|
||||
brcmf_sdio_firmware_callback);
|
||||
if (ret != 0) {
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -1200,6 +1200,27 @@ error:
|
||||
device_release_driver(dev);
|
||||
}
|
||||
|
||||
+static struct brcmf_fw_request *
|
||||
+brcmf_usb_prepare_fw_request(struct brcmf_usbdev_info *devinfo)
|
||||
+{
|
||||
+ struct brcmf_fw_request *fwreq;
|
||||
+ struct brcmf_fw_name fwnames[] = {
|
||||
+ { ".bin", devinfo->fw_name },
|
||||
+ };
|
||||
+
|
||||
+ fwreq = brcmf_fw_alloc_request(devinfo->bus_pub.devid,
|
||||
+ devinfo->bus_pub.chiprev,
|
||||
+ brcmf_usb_fwnames,
|
||||
+ ARRAY_SIZE(brcmf_usb_fwnames),
|
||||
+ fwnames, ARRAY_SIZE(fwnames));
|
||||
+ if (!fwreq)
|
||||
+ return NULL;
|
||||
+
|
||||
+ fwreq->items[BRCMF_USB_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
|
||||
+
|
||||
+ return fwreq;
|
||||
+}
|
||||
+
|
||||
static int brcmf_usb_probe_cb(struct brcmf_usbdev_info *devinfo)
|
||||
{
|
||||
struct brcmf_bus *bus = NULL;
|
||||
@@ -1249,24 +1270,12 @@ static int brcmf_usb_probe_cb(struct brc
|
||||
bus->chip = bus_pub->devid;
|
||||
bus->chiprev = bus_pub->chiprev;
|
||||
|
||||
- ret = brcmf_fw_map_chip_to_name(bus_pub->devid, bus_pub->chiprev,
|
||||
- brcmf_usb_fwnames,
|
||||
- ARRAY_SIZE(brcmf_usb_fwnames),
|
||||
- devinfo->fw_name, NULL);
|
||||
- if (ret)
|
||||
- goto fail;
|
||||
-
|
||||
- fwreq = kzalloc(sizeof(*fwreq) + sizeof(struct brcmf_fw_item),
|
||||
- GFP_KERNEL);
|
||||
+ fwreq = brcmf_usb_prepare_fw_request(devinfo);
|
||||
if (!fwreq) {
|
||||
ret = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
- fwreq->items[BRCMF_USB_FW_CODE].path = devinfo->fw_name;
|
||||
- fwreq->items[BRCMF_USB_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
|
||||
- fwreq->n_items = 1;
|
||||
-
|
||||
/* request firmware here */
|
||||
ret = brcmf_fw_get_firmwares(dev, fwreq, brcmf_usb_probe_phase2);
|
||||
if (ret) {
|
||||
@@ -1469,15 +1478,10 @@ static int brcmf_usb_reset_resume(struct
|
||||
|
||||
brcmf_dbg(USB, "Enter\n");
|
||||
|
||||
- fwreq = kzalloc(sizeof(*fwreq) + sizeof(struct brcmf_fw_item),
|
||||
- GFP_KERNEL);
|
||||
+ fwreq = brcmf_usb_prepare_fw_request(devinfo);
|
||||
if (!fwreq)
|
||||
return -ENOMEM;
|
||||
|
||||
- fwreq->items[BRCMF_USB_FW_CODE].path = devinfo->fw_name;
|
||||
- fwreq->items[BRCMF_USB_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
|
||||
- fwreq->n_items = 1;
|
||||
-
|
||||
ret = brcmf_fw_get_firmwares(&usb->dev, fwreq, brcmf_usb_probe_phase2);
|
||||
if (ret < 0)
|
||||
kfree(fwreq);
|
@ -0,0 +1,231 @@
|
||||
From bf7a7b37f6ef5090a2bae7e7ae23cd26b741cca4 Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 22 Mar 2018 21:28:28 +0100
|
||||
Subject: [PATCH] brcmfmac: add extension to .get_fwname() callbacks
|
||||
|
||||
This changes the bus layer api by having the caller provide an
|
||||
extension. With this the callback can use brcmf_fw_alloc_request()
|
||||
to get the needed firmware name.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/bus.h | 6 +--
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/common.c | 43 +++-------------------
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/pcie.c | 27 +++++++-------
|
||||
.../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 26 +++++++------
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 27 ++++++++------
|
||||
5 files changed, 51 insertions(+), 78 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||
@@ -88,7 +88,7 @@ struct brcmf_bus_ops {
|
||||
void (*wowl_config)(struct device *dev, bool enabled);
|
||||
size_t (*get_ramsize)(struct device *dev);
|
||||
int (*get_memdump)(struct device *dev, void *data, size_t len);
|
||||
- int (*get_fwname)(struct device *dev, uint chip, uint chiprev,
|
||||
+ int (*get_fwname)(struct device *dev, const char *ext,
|
||||
unsigned char *fw_name);
|
||||
};
|
||||
|
||||
@@ -228,10 +228,10 @@ int brcmf_bus_get_memdump(struct brcmf_b
|
||||
}
|
||||
|
||||
static inline
|
||||
-int brcmf_bus_get_fwname(struct brcmf_bus *bus, uint chip, uint chiprev,
|
||||
+int brcmf_bus_get_fwname(struct brcmf_bus *bus, const char *ext,
|
||||
unsigned char *fw_name)
|
||||
{
|
||||
- return bus->ops->get_fwname(bus->dev, chip, chiprev, fw_name);
|
||||
+ return bus->ops->get_fwname(bus->dev, ext, fw_name);
|
||||
}
|
||||
|
||||
/*
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
||||
@@ -129,42 +129,9 @@ static int brcmf_c_download(struct brcmf
|
||||
return err;
|
||||
}
|
||||
|
||||
-static int brcmf_c_get_clm_name(struct brcmf_if *ifp, u8 *clm_name)
|
||||
-{
|
||||
- struct brcmf_bus *bus = ifp->drvr->bus_if;
|
||||
- u8 fw_name[BRCMF_FW_NAME_LEN];
|
||||
- u8 *ptr;
|
||||
- size_t len;
|
||||
- s32 err;
|
||||
-
|
||||
- memset(fw_name, 0, BRCMF_FW_NAME_LEN);
|
||||
- err = brcmf_bus_get_fwname(bus, bus->chip, bus->chiprev, fw_name);
|
||||
- if (err) {
|
||||
- brcmf_err("get firmware name failed (%d)\n", err);
|
||||
- goto done;
|
||||
- }
|
||||
-
|
||||
- /* generate CLM blob file name */
|
||||
- ptr = strrchr(fw_name, '.');
|
||||
- if (!ptr) {
|
||||
- err = -ENOENT;
|
||||
- goto done;
|
||||
- }
|
||||
-
|
||||
- len = ptr - fw_name + 1;
|
||||
- if (len + strlen(".clm_blob") > BRCMF_FW_NAME_LEN) {
|
||||
- err = -E2BIG;
|
||||
- } else {
|
||||
- strlcpy(clm_name, fw_name, len);
|
||||
- strlcat(clm_name, ".clm_blob", BRCMF_FW_NAME_LEN);
|
||||
- }
|
||||
-done:
|
||||
- return err;
|
||||
-}
|
||||
-
|
||||
static int brcmf_c_process_clm_blob(struct brcmf_if *ifp)
|
||||
{
|
||||
- struct device *dev = ifp->drvr->bus_if->dev;
|
||||
+ struct brcmf_bus *bus = ifp->drvr->bus_if;
|
||||
struct brcmf_dload_data_le *chunk_buf;
|
||||
const struct firmware *clm = NULL;
|
||||
u8 clm_name[BRCMF_FW_NAME_LEN];
|
||||
@@ -177,16 +144,16 @@ static int brcmf_c_process_clm_blob(stru
|
||||
|
||||
brcmf_dbg(TRACE, "Enter\n");
|
||||
|
||||
- memset(clm_name, 0, BRCMF_FW_NAME_LEN);
|
||||
- err = brcmf_c_get_clm_name(ifp, clm_name);
|
||||
+ memset(clm_name, 0, sizeof(clm_name));
|
||||
+ err = brcmf_bus_get_fwname(bus, ".clm_blob", clm_name);
|
||||
if (err) {
|
||||
brcmf_err("get CLM blob file name failed (%d)\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
- err = request_firmware(&clm, clm_name, dev);
|
||||
+ err = request_firmware(&clm, clm_name, bus->dev);
|
||||
if (err) {
|
||||
- brcmf_info("no clm_blob available(err=%d), device may have limited channels available\n",
|
||||
+ brcmf_info("no clm_blob available (err=%d), device may have limited channels available\n",
|
||||
err);
|
||||
return 0;
|
||||
}
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||
@@ -1350,23 +1350,24 @@ static int brcmf_pcie_get_memdump(struct
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int brcmf_pcie_get_fwname(struct device *dev, u32 chip, u32 chiprev,
|
||||
- u8 *fw_name)
|
||||
+static
|
||||
+int brcmf_pcie_get_fwname(struct device *dev, const char *ext, u8 *fw_name)
|
||||
{
|
||||
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||
- struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie;
|
||||
- struct brcmf_pciedev_info *devinfo = buspub->devinfo;
|
||||
- int ret = 0;
|
||||
+ struct brcmf_fw_request *fwreq;
|
||||
+ struct brcmf_fw_name fwnames[] = {
|
||||
+ { ext, fw_name },
|
||||
+ };
|
||||
|
||||
- if (devinfo->fw_name[0] != '\0')
|
||||
- strlcpy(fw_name, devinfo->fw_name, BRCMF_FW_NAME_LEN);
|
||||
- else
|
||||
- ret = brcmf_fw_map_chip_to_name(chip, chiprev,
|
||||
- brcmf_pcie_fwnames,
|
||||
- ARRAY_SIZE(brcmf_pcie_fwnames),
|
||||
- fw_name, NULL);
|
||||
+ fwreq = brcmf_fw_alloc_request(bus_if->chip, bus_if->chiprev,
|
||||
+ brcmf_pcie_fwnames,
|
||||
+ ARRAY_SIZE(brcmf_pcie_fwnames),
|
||||
+ fwnames, ARRAY_SIZE(fwnames));
|
||||
+ if (!fwreq)
|
||||
+ return -ENOMEM;
|
||||
|
||||
- return ret;
|
||||
+ kfree(fwreq);
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static const struct brcmf_bus_ops brcmf_pcie_bus_ops = {
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -4000,22 +4000,24 @@ brcmf_sdio_watchdog(unsigned long data)
|
||||
}
|
||||
}
|
||||
|
||||
-static int brcmf_sdio_get_fwname(struct device *dev, u32 chip, u32 chiprev,
|
||||
- u8 *fw_name)
|
||||
+static
|
||||
+int brcmf_sdio_get_fwname(struct device *dev, const char *ext, u8 *fw_name)
|
||||
{
|
||||
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||
- struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
|
||||
- int ret = 0;
|
||||
+ struct brcmf_fw_request *fwreq;
|
||||
+ struct brcmf_fw_name fwnames[] = {
|
||||
+ { ext, fw_name },
|
||||
+ };
|
||||
|
||||
- if (sdiodev->fw_name[0] != '\0')
|
||||
- strlcpy(fw_name, sdiodev->fw_name, BRCMF_FW_NAME_LEN);
|
||||
- else
|
||||
- ret = brcmf_fw_map_chip_to_name(chip, chiprev,
|
||||
- brcmf_sdio_fwnames,
|
||||
- ARRAY_SIZE(brcmf_sdio_fwnames),
|
||||
- fw_name, NULL);
|
||||
+ fwreq = brcmf_fw_alloc_request(bus_if->chip, bus_if->chiprev,
|
||||
+ brcmf_sdio_fwnames,
|
||||
+ ARRAY_SIZE(brcmf_sdio_fwnames),
|
||||
+ fwnames, ARRAY_SIZE(fwnames));
|
||||
+ if (!fwreq)
|
||||
+ return -ENOMEM;
|
||||
|
||||
- return ret;
|
||||
+ kfree(fwreq);
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static const struct brcmf_bus_ops brcmf_sdio_bus_ops = {
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -1128,21 +1128,24 @@ static void brcmf_usb_wowl_config(struct
|
||||
device_set_wakeup_enable(devinfo->dev, false);
|
||||
}
|
||||
|
||||
-static int brcmf_usb_get_fwname(struct device *dev, u32 chip, u32 chiprev,
|
||||
- u8 *fw_name)
|
||||
+static
|
||||
+int brcmf_usb_get_fwname(struct device *dev, const char *ext, u8 *fw_name)
|
||||
{
|
||||
- struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev);
|
||||
- int ret = 0;
|
||||
+ struct brcmf_bus *bus = dev_get_drvdata(dev);
|
||||
+ struct brcmf_fw_request *fwreq;
|
||||
+ struct brcmf_fw_name fwnames[] = {
|
||||
+ { ext, fw_name },
|
||||
+ };
|
||||
|
||||
- if (devinfo->fw_name[0] != '\0')
|
||||
- strlcpy(fw_name, devinfo->fw_name, BRCMF_FW_NAME_LEN);
|
||||
- else
|
||||
- ret = brcmf_fw_map_chip_to_name(chip, chiprev,
|
||||
- brcmf_usb_fwnames,
|
||||
- ARRAY_SIZE(brcmf_usb_fwnames),
|
||||
- fw_name, NULL);
|
||||
+ fwreq = brcmf_fw_alloc_request(bus->chip, bus->chiprev,
|
||||
+ brcmf_usb_fwnames,
|
||||
+ ARRAY_SIZE(brcmf_usb_fwnames),
|
||||
+ fwnames, ARRAY_SIZE(fwnames));
|
||||
+ if (!fwreq)
|
||||
+ return -ENOMEM;
|
||||
|
||||
- return ret;
|
||||
+ kfree(fwreq);
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static const struct brcmf_bus_ops brcmf_usb_bus_ops = {
|
@ -0,0 +1,92 @@
|
||||
From 18c2b20e276e04476a3350b4a92c1dfad725d45d Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 22 Mar 2018 21:28:29 +0100
|
||||
Subject: [PATCH] brcmfmac: get rid of brcmf_fw_map_chip_to_name()
|
||||
|
||||
The function is no longer used so removing it.
|
||||
|
||||
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../broadcom/brcm80211/brcmfmac/firmware.c | 53 ----------------------
|
||||
.../broadcom/brcm80211/brcmfmac/firmware.h | 4 --
|
||||
2 files changed, 57 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
|
||||
@@ -635,59 +635,6 @@ static void brcmf_fw_get_full_name(char
|
||||
strlcat(fw_name, extension, BRCMF_FW_NAME_LEN);
|
||||
}
|
||||
|
||||
-int brcmf_fw_map_chip_to_name(u32 chip, u32 chiprev,
|
||||
- struct brcmf_firmware_mapping mapping_table[],
|
||||
- u32 table_size, char fw_name[BRCMF_FW_NAME_LEN],
|
||||
- char nvram_name[BRCMF_FW_NAME_LEN])
|
||||
-{
|
||||
- char chipname[12];
|
||||
- u32 i;
|
||||
- char end;
|
||||
-
|
||||
- for (i = 0; i < table_size; i++) {
|
||||
- if (mapping_table[i].chipid == chip &&
|
||||
- mapping_table[i].revmask & BIT(chiprev))
|
||||
- break;
|
||||
- }
|
||||
-
|
||||
- if (i == table_size) {
|
||||
- brcmf_err("Unknown chipid %d [%d]\n", chip, chiprev);
|
||||
- return -ENODEV;
|
||||
- }
|
||||
-
|
||||
- brcmf_chip_name(chip, chiprev, chipname, sizeof(chipname));
|
||||
-
|
||||
- /* check if firmware path is provided by module parameter */
|
||||
- if (brcmf_mp_global.firmware_path[0] != '\0') {
|
||||
- if (fw_name)
|
||||
- strlcpy(fw_name, brcmf_mp_global.firmware_path,
|
||||
- BRCMF_FW_NAME_LEN);
|
||||
- if (nvram_name)
|
||||
- strlcpy(nvram_name, brcmf_mp_global.firmware_path,
|
||||
- BRCMF_FW_NAME_LEN);
|
||||
-
|
||||
- end = brcmf_mp_global.firmware_path[
|
||||
- strlen(brcmf_mp_global.firmware_path) - 1];
|
||||
- if (end != '/') {
|
||||
- if (fw_name)
|
||||
- strlcat(fw_name, "/", BRCMF_FW_NAME_LEN);
|
||||
- if (nvram_name)
|
||||
- strlcat(nvram_name, "/", BRCMF_FW_NAME_LEN);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- brcmf_info("using %s for chip %s\n",
|
||||
- mapping_table[i].fw_base, chipname);
|
||||
- if (fw_name)
|
||||
- brcmf_fw_get_full_name(fw_name,
|
||||
- mapping_table[i].fw_base, ".bin");
|
||||
- if (nvram_name)
|
||||
- brcmf_fw_get_full_name(nvram_name,
|
||||
- mapping_table[i].fw_base, ".txt");
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
struct brcmf_fw_request *
|
||||
brcmf_fw_alloc_request(u32 chip, u32 chiprev,
|
||||
struct brcmf_firmware_mapping mapping_table[],
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
|
||||
@@ -46,10 +46,6 @@ MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH fw
|
||||
#define BRCMF_FW_ENTRY(chipid, mask, name) \
|
||||
{ chipid, mask, BRCM_ ## name ## _FIRMWARE_BASENAME }
|
||||
|
||||
-int brcmf_fw_map_chip_to_name(u32 chip, u32 chiprev,
|
||||
- struct brcmf_firmware_mapping mapping_table[],
|
||||
- u32 table_size, char fw_name[BRCMF_FW_NAME_LEN],
|
||||
- char nvram_name[BRCMF_FW_NAME_LEN]);
|
||||
void brcmf_fw_nvram_free(void *nvram);
|
||||
|
||||
enum brcmf_fw_type {
|
@ -0,0 +1,44 @@
|
||||
From bf291b7247e53f52a4236c0b55a5df046d6177df Mon Sep 17 00:00:00 2001
|
||||
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||
Date: Thu, 22 Mar 2018 21:28:30 +0100
|
||||
Subject: [PATCH] brcmfmac: get rid of brcmf_fw_get_full_name()
|
||||
|
||||
The function was pretty minimal and now it is called only from one
|
||||
place so just get rid of it.
|
||||
|
||||
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
.../net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | 14 ++++----------
|
||||
1 file changed, 4 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
|
||||
@@ -628,13 +628,6 @@ int brcmf_fw_get_firmwares(struct device
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void brcmf_fw_get_full_name(char fw_name[BRCMF_FW_NAME_LEN],
|
||||
- const char *fw_base, const char *extension)
|
||||
-{
|
||||
- strlcat(fw_name, fw_base, BRCMF_FW_NAME_LEN);
|
||||
- strlcat(fw_name, extension, BRCMF_FW_NAME_LEN);
|
||||
-}
|
||||
-
|
||||
struct brcmf_fw_request *
|
||||
brcmf_fw_alloc_request(u32 chip, u32 chiprev,
|
||||
struct brcmf_firmware_mapping mapping_table[],
|
||||
@@ -685,9 +678,10 @@ brcmf_fw_alloc_request(u32 chip, u32 chi
|
||||
BRCMF_FW_NAME_LEN);
|
||||
}
|
||||
}
|
||||
- brcmf_fw_get_full_name(fwnames[j].path,
|
||||
- mapping_table[i].fw_base,
|
||||
- fwnames[j].extension);
|
||||
+ strlcat(fwnames[j].path, mapping_table[i].fw_base,
|
||||
+ BRCMF_FW_NAME_LEN);
|
||||
+ strlcat(fwnames[j].path, fwnames[j].extension,
|
||||
+ BRCMF_FW_NAME_LEN);
|
||||
fwreq->items[j].path = fwnames[j].path;
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user