Compare commits

...

21 Commits

Author SHA1 Message Date
John Crispin
4b07afe59f ucentral-schema: update to latest HEAD
19fcc8d update schemareader
bef2a8f state: add the upstream dhcp servers ip to the state message

Signed-off-by: John Crispin <john@phrozen.org>
2022-03-02 15:12:50 +01:00
John Crispin
5d53d138b0 maverick: add the last 3 bytes of the serial to the Maverick ssid
Fixes: WIFI-7202
Signed-off-by: John Crispin <john@phrozen.org>
2022-03-02 15:12:21 +01:00
John Crispin
e40631b8cd ucentral-schema: update to latest HEAD
ba41897 radio: enable 'allow-dfs' by default

Signed-off-by: John Crispin <john@phrozen.org>
2022-03-01 17:36:54 +01:00
John Crispin
22135129bd treewide: fix pkg hashes
Signed-off-by: John Crispin <john@phrozen.org>
2022-03-01 17:36:52 +01:00
John Crispin
de4b3c4edc ucentral-wifi: update to latest HEAD
40d0eb9 use the real usec value for tx/rx duration

Signed-off-by: John Crispin <john@phrozen.org>
2022-03-01 17:36:48 +01:00
John Crispin
e3b1fe36e5 hostapd: enable CONFIG_ERP
This caused local EAP to not work on wifi-qsdk targets.

Fixes: WIFI-7203
Signed-off-by: John Crispin <john@phrozen.org>
2022-02-28 11:16:02 +01:00
John Crispin
5af7e1e7d8 ucode: add tool to read out the max clients an AP can handle per phy
Fixes: WIFI-7197
Signed-off-by: John Crispin <john@phrozen.org>
2022-02-28 10:52:40 +01:00
John Crispin
057ebb8660 ucentral-schema: update to latest HEAD
1c46544 5G was not allowing specific 20MHz channels and would fall back to ACS

Fixes: WIFI-7179
Signed-off-by: John Crispin <john@phrozen.org>
2022-02-28 10:08:43 +01:00
John Crispin
17fe72c6e9 wifi: revert some tweaks that are causing stability issues
this will come back in 2.6 once stability is restored

Signed-off-by: John Crispin <john@phrozen.org>
2022-02-25 17:34:27 +01:00
John Crispin
834ff2fe4f certificates: improve the code loading sqsh certificates
Signed-off-by: John Crispin <john@phrozen.org>
2022-02-23 07:54:22 +01:00
John Crispin
ce3849e131 ipq40xx: revert an upstream patch causing problem with ea8300 eth ports
Signed-off-by: John Crispin <john@phrozen.org>
2022-02-23 07:54:00 +01:00
John Crispin
66640cdd1a ipq807x: add cig wf196 to the CI builds
Signed-off-by: John Crispin <john@phrozen.org>
2022-02-22 16:33:52 +01:00
John Crispin
300924a4be hostapd: fix syntax error inside hostapd.sh
Signed-off-by: John Crispin <john@phrozen.org>
2022-02-22 15:13:28 +01:00
John Crispin
8fb088bcc8 ucentral-schema: update to latest HEAD
b3ce69e wifiscan: allow bandwith override
6d59acc trace: improve tracing code

Fixes: WIFI-7167
Fixes: WIFI-7168
Signed-off-by: John Crispin <john@phrozen.org>
2022-02-22 08:59:48 +01:00
John Crispin
b08455228f ipq807x: point edgecore eap104 profile at the correct image
Signed-off-by: John Crispin <john@phrozen.org>
2022-02-18 15:09:18 +01:00
John Crispin
09563eadaf ipq807x: do not enable bridge-vlan in maverick mode
Signed-off-by: John Crispin <john@phrozen.org>
2022-02-18 10:29:25 +01:00
John Crispin
2df46a2c77 ipq807x: fix LEDs on wf196
Signed-off-by: John Crispin <john@phrozen.org>
2022-02-18 10:29:25 +01:00
John Crispin
e4fa57b4d0 proxy_arp: backport skb->cb fix from upstream kernel
this caused proxy_arp to misbehave

Signed-off-by: John Crispin <john@phrozen.org>
2022-02-17 08:28:21 +01:00
John Crispin
48677a6943 ipq807x: add edgecore eap104 support
Fixes: WIFI-7117
Signed-off-by: John Crispin <john@phrozen.org>
2022-02-16 15:44:24 +01:00
John Crispin
e79970ce04 ath11k: disable napi threading
The code causes 15% softirq in idle causing issue, drop until resolved.

Signed-off-by: John Crispin <john@phrozen.org>
2022-02-15 20:46:06 +01:00
John Crispin
b4d1d58fc9 hostapd: improve acs_exclude_dfs support
Fixes: WIFI-6933
Signed-off-by: John Crispin <john@phrozen.org>
2022-02-15 17:06:22 +01:00
88 changed files with 1414 additions and 844 deletions

View File

@@ -11,7 +11,7 @@ jobs:
strategy:
fail-fast: false
matrix:
target: ['actiontec_web7200', 'cig_wf188n', 'cig_wf194c', 'cig_wf194c4', 'cig_wf160d', 'cig_wf808', 'cybertan_eww622-a1', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_ecs4100-12ph', 'edgecore_ecw5211', 'edgecore_ecw5410', 'edgecore_oap100', 'edgecore_ssw2ac2600', 'edgecore_spw2ac1200', 'edgecore_spw2ac1200-lan-poe', 'hfcl_ion4', 'hfcl_ion4xe', 'hfcl_ion4xi', 'indio_um-305ac', 'linksys_ea6350-v4', 'linksys_e8450-ubi', 'linksys_ea8300', 'tp-link_ec420-g1', 'tplink_ex227', 'tplink_ex228', 'tplink_ex447', 'wallys_dr40x9', 'wallys_dr6018', 'wallys_dr6018_v4' ]
target: ['actiontec_web7200', 'cig_wf188n', 'cig_wf194c', 'cig_wf194c4', 'cig_wf196', 'cig_wf160d', 'cig_wf808', 'cybertan_eww622-a1', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_ecs4100-12ph', 'edgecore_ecw5211', 'edgecore_ecw5410', 'edgecore_oap100', 'edgecore_ssw2ac2600', 'edgecore_spw2ac1200', 'edgecore_spw2ac1200-lan-poe', 'hfcl_ion4', 'hfcl_ion4xe', 'hfcl_ion4xi', 'indio_um-305ac', 'linksys_ea6350-v4', 'linksys_e8450-ubi', 'linksys_ea8300', 'tp-link_ec420-g1', 'tplink_ex227', 'tplink_ex228', 'tplink_ex447', 'wallys_dr40x9', 'wallys_dr6018', 'wallys_dr6018_v4' ]
steps:
- uses: actions/checkout@v2

View File

@@ -37,6 +37,9 @@ define Package/cc2652/install
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_BIN) ./files/tisbl.config $(1)/etc/config/tisbl
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_BIN) ./files/tisbl.defaults $(1)/etc/uci-defaults
endef
$(eval $(call BuildPackage,cc2652))

View File

@@ -1,9 +1,7 @@
config tisbl 'tisbl'
option firmware '/etc/tifirmware/ble5_host_test_bd9.bin'
option tty '/dev/ttyMSM1' # for EAP101 board
# option tty '/dev/ttyACM0' # for virtualbox openwrt 19.07 with TI CC26X2R launchpad
option tichip '2652'
option baudrate '115200'
option resetpin '79'
option backdoorpin '34' #EAP101-R1
# option backdoorpin '67' #EAP101-R0A-HW-modification
option firmware '/etc/tifirmware/ble5_host_test_bd9.bin'
option tty '/dev/ttyMSM1'
option tichip '2652'
option baudrate '115200'
option resetpin '79'
option backdoorpin '34'

View File

@@ -0,0 +1,13 @@
#!/bin/sh
. /lib/functions.sh
. /lib/functions/system.sh
board=$(board_name)
case $board in
edgecore,eap104)
uci set tisbl.tisbl.backdoorpin=31
uci set tisbl.tisbl.resetpin=35
;;
esac

View File

@@ -17,9 +17,6 @@ cig,wf194c4)
ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wifi5" "phy0tpt"
ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy1tpt"
;;
esac
case "$board" in
edgecore,eap101)
ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wifi5" "phy0tpt"
ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy1tpt"
@@ -32,6 +29,11 @@ edgecore,eap102)
ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wifi5" "phy0tpt"
ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy1tpt"
;;
edgecore,eap104)
ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy0tpt"
ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wifi5" "phy1tpt"
ucidef_set_led_netdev "wan" "wan" "yellow:uplink" "eth0"
;;
hfcl,ion4xi|\
hfcl,ion4xe)
ucidef_set_led_wlan "wlan5g" "WLAN5G" "blue:wifi5" "phy0tpt"

View File

@@ -41,6 +41,7 @@ qcom_setup_interfaces()
ucidef_set_interface_wan "eth0"
;;
edgecore,eap102|\
edgecore,eap104|\
wallys,dr6018|\
cig,wf188n|\
cig,wf196)
@@ -91,7 +92,6 @@ qcom_setup_macs()
board_config_update
board=$(board_name)
ucidef_set_bridge_device bridge
qcom_setup_interfaces $board
qcom_setup_macs $board
board_config_flush

View File

@@ -104,11 +104,19 @@ case "$FIRMWARE" in
ath11k/IPQ5018/hw1.0/caldata.bin)
case "$board" in
cybertan,eww622-a1|\
edgecore,eap104|\
qcom,ipq5018-mp03.1)
caldata_extract "0:ART" 0x1000 0x20000
;;
esac
;;
ath11k/qcn6122/hw1.0/caldata_2.bin)
case "$board" in
edgecore,eap104)
caldata_extract "0:ART" 0x4c000 0x20000
;;
esac
;;
ath11k/QCN9074/hw1.0/caldata_1.bin)
case "$board" in
cig,wf196|\

View File

@@ -1,67 +0,0 @@
#!/bin/sh
[ "$ACTION" = add ] || exit
NPROCS="$(grep -c "^processor.*:" /proc/cpuinfo)"
[ "$NPROCS" -gt 1 ] || exit
PROC_MASK="$(( (1 << $NPROCS) - 1 ))"
find_irq_cpu() {
local dev="$1"
local match="$(grep -m 1 "$dev\$" /proc/interrupts)"
local cpu=0
[ -n "$match" ] && {
set -- $match
shift
for cur in `seq 1 $NPROCS`; do
[ "$1" -gt 0 ] && {
cpu=$(($cur - 1))
break
}
shift
done
}
echo "$cpu"
}
set_hex_val() {
local file="$1"
local val="$2"
val="$(printf %x "$val")"
[ -n "$DEBUG" ] && echo "$file = $val"
echo "$val" > "$file"
}
default_ps="$(uci get "network.@globals[0].default_ps")"
[ -n "$default_ps" -a "$default_ps" != 1 ] && exit 0
exec 512>/var/lock/smp_tune.lock
flock 512 || exit 1
for dev in /sys/class/net/*; do
[ -d "$dev" ] || continue
# ignore virtual interfaces
[ -n "$(ls "${dev}/" | grep '^lower_')" ] && continue
[ -d "${dev}/device" ] || continue
device="$(readlink "${dev}/device")"
device="$(basename "$device")"
irq_cpu="$(find_irq_cpu "$device")"
irq_cpu_mask="$((1 << $irq_cpu))"
for q in ${dev}/queues/rx-*; do
set_hex_val "$q/rps_cpus" "$(($PROC_MASK & ~$irq_cpu_mask))"
done
ntxq="$(ls -d ${dev}/queues/tx-* | wc -l)"
idx=$(($irq_cpu + 1))
for q in ${dev}/queues/tx-*; do
set_hex_val "$q/xps_cpus" "$((1 << $idx))"
let "idx = idx + 1"
[ "$idx" -ge "$NPROCS" ] && idx=0
done
done

View File

@@ -1,58 +0,0 @@
#!/bin/sh /etc/rc.common
START=80
set_affinity() {
local affinity=$1
local name=$2
local irq=`grep -E -m1 $name /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq" ] && {
logger ath11k setting affinity for $name/$irq to $affinity
echo $affinity > /proc/irq/$irq/smp_affinity
}
}
boot() {
. /lib/functions/system.sh
board=$(board_name)
case $board in
cig,wf196)
set_affinity 1 reo2host-destination-ring2
set_affinity 2 reo2host-destination-ring1
;;
*)
set_affinity 2 reo2host-destination-ring2
set_affinity 1 reo2host-destination-ring1
;;
esac
case $board in
maple)
;;
*)
set_affinity 8 reo2host-destination-ring4
set_affinity 4 reo2host-destination-ring3
set_affinity 8 wbm2host-tx-completions-ring3
set_affinity 4 wbm2host-tx-completions-ring2
set_affinity 2 wbm2host-tx-completions-ring1
set_affinity 8 ppdu-end-interrupts-mac1
set_affinity 8 rxdma2host-monitor-status-ring-mac1
set_affinity 8 rxdma2host-monitor-destination-mac1
set_affinity 8 host2rxdma-monitor-ring1
;;
esac
set_affinity 4 ppdu-end-interrupts-mac2
set_affinity 4 rxdma2host-monitor-status-ring-mac2
set_affinity 4 rxdma2host-monitor-destination-mac2
set_affinity 4 host2rxdma-monitor-ring2
set_affinity 2 ppdu-end-interrupts-mac3
set_affinity 2 rxdma2host-monitor-status-ring-mac3
set_affinity 2 rxdma2host-monitor-destination-mac3
set_affinity 2 host2rxdma-monitor-ring3
}

View File

@@ -30,6 +30,7 @@ platform_check_image() {
wallys,dr6018-v4|\
edgecore,eap101|\
edgecore,eap102|\
edgecore,eap104|\
edgecore,eap106|\
hfcl,ion4xi|\
hfcl,ion4xe|\
@@ -60,6 +61,7 @@ platform_do_upgrade() {
cig,wf194c4|\
cig,wf196|\
cybertan,eww622-a1|\
edgecore,eap104|\
hfcl,ion4xi|\
hfcl,ion4xe|\
qcom,ipq6018-cp01|\

View File

@@ -0,0 +1,23 @@
/*
* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include "../../../arm64/boot/dts/qcom/qcom-ipq5018-eap104.dts"
/ {
pmuv8: pmu {
compatible = "arm,cortex-a7-pmu";
};
};

File diff suppressed because it is too large Load Diff

View File

@@ -39,6 +39,11 @@
ethernet3 = "/soc/dp4";
ethernet4 = "/soc/dp5";
ethernet5 = "/soc/dp6";
led-boot = &led_power;
led-failsafe = &led_power;
led-running = &led_power;
led-upgrade = &led_power;
};
chosen {
@@ -325,15 +330,22 @@
};
led_pins: led_pins {
led_2g {
pins = "gpio42";
led_red {
pins = "gpio25";
function = "gpio";
drive-strength = <8>;
bias-pull-down;
};
led_5g {
pins = "gpio43";
led_green {
pins = "gpio26";
function = "gpio";
drive-strength = <8>;
bias-pull-down;
};
led_blue {
pins = "gpio27";
function = "gpio";
drive-strength = <8>;
bias-pull-down;
@@ -379,7 +391,7 @@
pinctrl-0 = <&pwm_pins>;
pinctrl-names = "default";
used-pwm-indices = <1>, <1>, <1>, <0>;
status = "ok";
// status = "ok";
};
gpio_keys {
compatible = "gpio-keys";
@@ -810,15 +822,21 @@
pinctrl-0 = <&led_pins>;
pinctrl-names = "default";
led_2g {
label = "led_2g";
gpio = <&tlmm 42 GPIO_ACTIVE_HIGH>;
led_red {
label = "red:status";
gpio = <&tlmm 25 GPIO_ACTIVE_HIGH>;
default-state = "off";
};
led_5g {
label = "led_5g";
gpio = <&tlmm 43 GPIO_ACTIVE_HIGH>;
led_power: led_green {
label = "green:status";
gpio = <&tlmm 26 GPIO_ACTIVE_HIGH>;
default-state = "on";
};
led_blue {
label = "blue:status";
gpio = <&tlmm 27 GPIO_ACTIVE_HIGH>;
default-state = "off";
};
};

View File

@@ -9,6 +9,15 @@ define Device/cybertan_eww622_a1
endef
TARGET_DEVICES += cybertan_eww622_a1
define Device/edgecore_eap104
DEVICE_TITLE := EdgeCore EAP104
DEVICE_DTS := qcom-ipq5018-eap104
SUPPORTED_DEVICES := edgecore,eap104
DEVICE_PACKAGES := ath11k-wifi-edgecore-eap104 ath11k-firmware-ipq50xx-spruce ath11k-firmware-qcn6122
DEVICE_DTS_CONFIG := config@mp03.5-c1
endef
TARGET_DEVICES += edgecore_eap104
define Device/qcom_mp03_1
DEVICE_TITLE := Qualcomm Maple 03.1
DEVICE_DTS := qcom-ipq5018-mp03.1

View File

@@ -3,7 +3,7 @@ SUBTARGET:=ipq50xx
BOARDNAME:=IPQ50XX
CPU_TYPE:=cortex-a7
DEFAULT_PACKAGES += ath11k-firmware-ipq50xx qca-nss-fw-ipq50xx
DEFAULT_PACKAGES += qca-nss-fw-ipq50xx
define Target/Description
Build firmware image for IPQ50xx SoC devices.

View File

@@ -0,0 +1,14 @@
Index: linux-4.4.60-qsdk-11f09717303ecd83c3a64e9efe23f25921dc1016/drivers/mtd/nand/qcom_nandc.c
===================================================================
--- linux-4.4.60-qsdk-11f09717303ecd83c3a64e9efe23f25921dc1016.orig/drivers/mtd/nand/qcom_nandc.c
+++ linux-4.4.60-qsdk-11f09717303ecd83c3a64e9efe23f25921dc1016/drivers/mtd/nand/qcom_nandc.c
@@ -405,6 +405,9 @@ struct nand_flash_dev qspinand_flash_ids
{"MX35UF1GE4AC SPI NAND 1G 1.8V",
{ .id = {0xc2, 0x92} },
SZ_2K, SZ_128, SZ_128K, 0, 2, 64, NAND_ECC_INFO(4, SZ_512), 0},
+ {"W25N01GW SPI NAND 1.8V 1G-BIT",
+ { .id = {0xef, 0xba} },
+ SZ_2K, SZ_128, SZ_128K, 0, 2, 64, NAND_ECC_INFO(4, SZ_512), 0},
{NULL}
};

View File

@@ -1,88 +0,0 @@
From: Felix Fietkau <nbd@nbd.name>
Date: Mon, 8 Feb 2021 11:34:08 -0800
Subject: [PATCH] net: extract napi poll functionality to __napi_poll()
This commit introduces a new function __napi_poll() which does the main
logic of the existing napi_poll() function, and will be called by other
functions in later commits.
This idea and implementation is done by Felix Fietkau <nbd@nbd.name> and
is proposed as part of the patch to move napi work to work_queue
context.
This commit by itself is a code restructure.
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: Wei Wang <weiwan@google.com>
Reviewed-by: Alexander Duyck <alexanderduyck@fb.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
---
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -6322,15 +6322,10 @@ void netif_napi_del(struct napi_struct *
}
EXPORT_SYMBOL(netif_napi_del);
-static int napi_poll(struct napi_struct *n, struct list_head *repoll)
+static int __napi_poll(struct napi_struct *n, bool *repoll)
{
- void *have;
int work, weight;
- list_del_init(&n->poll_list);
-
- have = netpoll_poll_lock(n);
-
weight = n->weight;
/* This NAPI_STATE_SCHED test is for avoiding a race
@@ -6348,7 +6343,7 @@ static int napi_poll(struct napi_struct
WARN_ON_ONCE(work > weight);
if (likely(work < weight))
- goto out_unlock;
+ return work;
/* Drivers must not modify the NAPI state if they
* consume the entire weight. In such cases this code
@@ -6357,7 +6352,7 @@ static int napi_poll(struct napi_struct
*/
if (unlikely(napi_disable_pending(n))) {
napi_complete(n);
- goto out_unlock;
+ return work;
}
if (n->gro_bitmask) {
@@ -6375,12 +6370,29 @@ static int napi_poll(struct napi_struct
if (unlikely(!list_empty(&n->poll_list))) {
pr_warn_once("%s: Budget exhausted after napi rescheduled\n",
n->dev ? n->dev->name : "backlog");
- goto out_unlock;
+ return work;
}
- list_add_tail(&n->poll_list, repoll);
+ *repoll = true;
+
+ return work;
+}
+
+static int napi_poll(struct napi_struct *n, struct list_head *repoll)
+{
+ bool do_repoll = false;
+ void *have;
+ int work;
+
+ list_del_init(&n->poll_list);
+
+ have = netpoll_poll_lock(n);
+
+ work = __napi_poll(n, &do_repoll);
+
+ if (do_repoll)
+ list_add_tail(&n->poll_list, repoll);
-out_unlock:
netpoll_poll_unlock(have);
return work;

View File

@@ -1,245 +0,0 @@
From: Wei Wang <weiwan@google.com>
Date: Mon, 8 Feb 2021 11:34:09 -0800
Subject: [PATCH] net: implement threaded-able napi poll loop support
This patch allows running each napi poll loop inside its own
kernel thread.
The kthread is created during netif_napi_add() if dev->threaded
is set. And threaded mode is enabled in napi_enable(). We will
provide a way to set dev->threaded and enable threaded mode
without a device up/down in the following patch.
Once that threaded mode is enabled and the kthread is
started, napi_schedule() will wake-up such thread instead
of scheduling the softirq.
The threaded poll loop behaves quite likely the net_rx_action,
but it does not have to manipulate local irqs and uses
an explicit scheduling point based on netdev_budget.
Co-developed-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Co-developed-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Co-developed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Wei Wang <weiwan@google.com>
Reviewed-by: Alexander Duyck <alexanderduyck@fb.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
---
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -319,6 +319,7 @@ struct napi_struct {
struct list_head dev_list;
struct hlist_node napi_hash_node;
unsigned int napi_id;
+ struct task_struct *thread;
};
enum {
@@ -326,6 +327,7 @@ enum {
NAPI_STATE_DISABLE, /* Disable pending */
NAPI_STATE_NPSVC, /* Netpoll - don't dequeue from poll_list */
NAPI_STATE_HASHED, /* In NAPI hash */
+ NAPI_STATE_THREADED, /* The poll is performed inside its own thread*/
};
enum gro_result {
@@ -501,13 +503,7 @@ void napi_disable(struct napi_struct *n)
* Resume NAPI from being scheduled on this context.
* Must be paired with napi_disable.
*/
-static inline void napi_enable(struct napi_struct *n)
-{
- BUG_ON(!test_bit(NAPI_STATE_SCHED, &n->state));
- smp_mb__before_atomic();
- clear_bit(NAPI_STATE_SCHED, &n->state);
- clear_bit(NAPI_STATE_NPSVC, &n->state);
-}
+void napi_enable(struct napi_struct *n);
/**
* napi_synchronize - wait until NAPI is not running
@@ -1573,6 +1569,8 @@ enum netdev_priv_flags_ext {
* switch driver and used to set the phys state of the
* switch port.
*
+ * @threaded: napi threaded mode is enabled
+ *
* FIXME: cleanup struct net_device such that network protocol info
* moves out.
*/
@@ -1852,6 +1850,7 @@ struct net_device {
struct phy_device *phydev;
struct lock_class_key *qdisc_tx_busylock;
bool proto_down;
+ unsigned threaded:1;
};
#define to_net_dev(d) container_of(d, struct net_device, dev)
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -94,6 +94,7 @@
#include <linux/ethtool.h>
#include <linux/notifier.h>
#include <linux/skbuff.h>
+#include <linux/kthread.h>
#include <net/net_namespace.h>
#include <net/sock.h>
#include <linux/rtnetlink.h>
@@ -1304,6 +1305,27 @@ void netdev_notify_peers(struct net_devi
}
EXPORT_SYMBOL(netdev_notify_peers);
+static int napi_threaded_poll(void *data);
+
+static int napi_kthread_create(struct napi_struct *n)
+{
+ int err = 0;
+
+ /* Create and wake up the kthread once to put it in
+ * TASK_INTERRUPTIBLE mode to avoid the blocked task
+ * warning and work with loadavg.
+ */
+ n->thread = kthread_run(napi_threaded_poll, n, "napi/%s-%d",
+ n->dev->name, n->napi_id);
+ if (IS_ERR(n->thread)) {
+ err = PTR_ERR(n->thread);
+ pr_err("kthread_run failed with err %d\n", err);
+ n->thread = NULL;
+ }
+
+ return err;
+}
+
static int __dev_open(struct net_device *dev)
{
const struct net_device_ops *ops = dev->netdev_ops;
@@ -3248,6 +3270,21 @@ int weight_p __read_mostly = 64;
static inline void ____napi_schedule(struct softnet_data *sd,
struct napi_struct *napi)
{
+ struct task_struct *thread;
+
+ if (test_bit(NAPI_STATE_THREADED, &napi->state)) {
+ /* Paired with smp_mb__before_atomic() in
+ * napi_enable(). Use READ_ONCE() to guarantee
+ * a complete read on napi->thread. Only call
+ * wake_up_process() when it's not NULL.
+ */
+ thread = READ_ONCE(napi->thread);
+ if (thread) {
+ wake_up_process(thread);
+ return;
+ }
+ }
+
list_add_tail(&napi->poll_list, &sd->poll_list);
__raise_softirq_irqoff(NET_RX_SOFTIRQ);
}
@@ -4828,9 +4865,33 @@ void netif_napi_add(struct net_device *d
napi->poll_owner = -1;
#endif
set_bit(NAPI_STATE_SCHED, &napi->state);
+ /* Create kthread for this napi if dev->threaded is set.
+ * Clear dev->threaded if kthread creation failed so that
+ * threaded mode will not be enabled in napi_enable().
+ */
+ if (dev->threaded && napi_kthread_create(napi))
+ dev->threaded = 0;
}
EXPORT_SYMBOL(netif_napi_add);
+/**
+ * napi_enable - enable NAPI scheduling
+ * @n: NAPI context
+ *
+ * Resume NAPI from being scheduled on this context.
+ * Must be paired with napi_disable.
+ */
+void napi_enable(struct napi_struct *n)
+{
+ BUG_ON(!test_bit(NAPI_STATE_SCHED, &n->state));
+ smp_mb__before_atomic();
+ clear_bit(NAPI_STATE_SCHED, &n->state);
+ clear_bit(NAPI_STATE_NPSVC, &n->state);
+ if (n->dev->threaded && n->thread)
+ set_bit(NAPI_STATE_THREADED, &n->state);
+}
+EXPORT_SYMBOL(napi_enable);
+
void napi_disable(struct napi_struct *n)
{
might_sleep();
@@ -4844,6 +4905,7 @@ void napi_disable(struct napi_struct *n)
hrtimer_cancel(&n->timer);
clear_bit(NAPI_STATE_DISABLE, &n->state);
+ clear_bit(NAPI_STATE_THREADED, &n->state);
}
EXPORT_SYMBOL(napi_disable);
@@ -4855,6 +4917,11 @@ void netif_napi_del(struct napi_struct *
kfree_skb_list(napi->gro_list);
napi->gro_list = NULL;
napi->gro_count = 0;
+
+ if (napi->thread) {
+ kthread_stop(napi->thread);
+ napi->thread = NULL;
+ }
}
EXPORT_SYMBOL(netif_napi_del);
@@ -4940,6 +5007,50 @@ static int napi_poll(struct napi_struct
return work;
}
+static int napi_thread_wait(struct napi_struct *napi)
+{
+ set_current_state(TASK_INTERRUPTIBLE);
+
+ while (!kthread_should_stop() && !napi_disable_pending(napi)) {
+ if (test_bit(NAPI_STATE_SCHED, &napi->state)) {
+ WARN_ON(!list_empty(&napi->poll_list));
+ __set_current_state(TASK_RUNNING);
+ return 0;
+ }
+
+ schedule();
+ set_current_state(TASK_INTERRUPTIBLE);
+ }
+ __set_current_state(TASK_RUNNING);
+ return -1;
+}
+
+static int napi_threaded_poll(void *data)
+{
+ struct napi_struct *napi = data;
+ void *have;
+
+ while (!napi_thread_wait(napi)) {
+ for (;;) {
+ bool repoll = false;
+
+ local_bh_disable();
+
+ have = netpoll_poll_lock(napi);
+ __napi_poll(napi, &repoll);
+ netpoll_poll_unlock(have);
+
+ local_bh_enable();
+
+ if (!repoll)
+ break;
+
+ cond_resched();
+ }
+ }
+ return 0;
+}
+
static void net_rx_action(struct softirq_action *h)
{
struct softnet_data *sd = this_cpu_ptr(&softnet_data);

View File

@@ -1,156 +0,0 @@
From: Wei Wang <weiwan@google.com>
Date: Mon, 8 Feb 2021 11:34:10 -0800
Subject: [PATCH] net: add sysfs attribute to control napi threaded mode
This patch adds a new sysfs attribute to the network device class.
Said attribute provides a per-device control to enable/disable the
threaded mode for all the napi instances of the given network device,
without the need for a device up/down.
User sets it to 1 or 0 to enable or disable threaded mode.
Note: when switching between threaded and the current softirq based mode
for a napi instance, it will not immediately take effect if the napi is
currently being polled. The mode switch will happen for the next time
napi_schedule() is called.
Co-developed-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Co-developed-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Co-developed-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: Wei Wang <weiwan@google.com>
Reviewed-by: Alexander Duyck <alexanderduyck@fb.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
---
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -496,6 +496,8 @@ void napi_hash_del(struct napi_struct *n
*/
void napi_disable(struct napi_struct *n);
+int dev_set_threaded(struct net_device *dev, bool threaded);
+
/**
* napi_enable - enable NAPI scheduling
* @n: napi context
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -3274,8 +3274,9 @@ static inline void ____napi_schedule(str
if (test_bit(NAPI_STATE_THREADED, &napi->state)) {
/* Paired with smp_mb__before_atomic() in
- * napi_enable(). Use READ_ONCE() to guarantee
- * a complete read on napi->thread. Only call
+ * napi_enable()/dev_set_threaded().
+ * Use READ_ONCE() to guarantee a complete
+ * read on napi->thread. Only call
* wake_up_process() when it's not NULL.
*/
thread = READ_ONCE(napi->thread);
@@ -4844,6 +4845,49 @@ static enum hrtimer_restart napi_watchdo
return HRTIMER_NORESTART;
}
+int dev_set_threaded(struct net_device *dev, bool threaded)
+{
+ struct napi_struct *napi;
+ int err = 0;
+
+ if (dev->threaded == threaded)
+ return 0;
+
+ if (threaded) {
+ list_for_each_entry(napi, &dev->napi_list, dev_list) {
+ if (!napi->thread) {
+ err = napi_kthread_create(napi);
+ if (err) {
+ threaded = false;
+ break;
+ }
+ }
+ }
+ }
+
+ dev->threaded = threaded;
+
+ /* Make sure kthread is created before THREADED bit
+ * is set.
+ */
+ smp_mb__before_atomic();
+
+ /* Setting/unsetting threaded mode on a napi might not immediately
+ * take effect, if the current napi instance is actively being
+ * polled. In this case, the switch between threaded mode and
+ * softirq mode will happen in the next round of napi_schedule().
+ * This should not cause hiccups/stalls to the live traffic.
+ */
+ list_for_each_entry(napi, &dev->napi_list, dev_list) {
+ if (threaded)
+ set_bit(NAPI_STATE_THREADED, &napi->state);
+ else
+ clear_bit(NAPI_STATE_THREADED, &napi->state);
+ }
+
+ return err;
+}
+
void netif_napi_add(struct net_device *dev, struct napi_struct *napi,
int (*poll)(struct napi_struct *, int), int weight)
{
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -486,6 +486,45 @@ static ssize_t phys_switch_id_show(struc
}
static DEVICE_ATTR_RO(phys_switch_id);
+static ssize_t threaded_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct net_device *netdev = to_net_dev(dev);
+ ssize_t ret = -EINVAL;
+
+ if (!rtnl_trylock())
+ return restart_syscall();
+
+ if (dev_isalive(netdev))
+ ret = sprintf(buf, fmt_dec, netdev->threaded);
+
+ rtnl_unlock();
+ return ret;
+}
+
+static int modify_napi_threaded(struct net_device *dev, unsigned long val)
+{
+ int ret;
+
+ if (list_empty(&dev->napi_list))
+ return -EOPNOTSUPP;
+
+ if (val != 0 && val != 1)
+ return -EOPNOTSUPP;
+
+ ret = dev_set_threaded(dev, val);
+
+ return ret;
+}
+
+static ssize_t threaded_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t len)
+{
+ return netdev_store(dev, attr, buf, len, modify_napi_threaded);
+}
+static DEVICE_ATTR_RW(threaded);
+
static struct attribute *net_class_attrs[] = {
&dev_attr_netdev_group.attr,
&dev_attr_type.attr,
@@ -514,6 +553,7 @@ static struct attribute *net_class_attrs
&dev_attr_phys_port_name.attr,
&dev_attr_phys_switch_id.attr,
&dev_attr_proto_down.attr,
+ &dev_attr_threaded.attr,
NULL,
};
ATTRIBUTE_GROUPS(net_class);

View File

@@ -1,75 +0,0 @@
From: Wei Wang <weiwan@google.com>
Date: Mon, 1 Mar 2021 17:21:13 -0800
Subject: [PATCH] net: fix race between napi kthread mode and busy poll
Currently, napi_thread_wait() checks for NAPI_STATE_SCHED bit to
determine if the kthread owns this napi and could call napi->poll() on
it. However, if socket busy poll is enabled, it is possible that the
busy poll thread grabs this SCHED bit (after the previous napi->poll()
invokes napi_complete_done() and clears SCHED bit) and tries to poll
on the same napi. napi_disable() could grab the SCHED bit as well.
This patch tries to fix this race by adding a new bit
NAPI_STATE_SCHED_THREADED in napi->state. This bit gets set in
____napi_schedule() if the threaded mode is enabled, and gets cleared
in napi_complete_done(), and we only poll the napi in kthread if this
bit is set. This helps distinguish the ownership of the napi between
kthread and other scenarios and fixes the race issue.
Fixes: 29863d41bb6e ("net: implement threaded-able napi poll loop support")
Reported-by: Martin Zaharinov <micron10@gmail.com>
Suggested-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Wei Wang <weiwan@google.com>
Cc: Alexander Duyck <alexanderduyck@fb.com>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
---
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -328,6 +328,7 @@ enum {
NAPI_STATE_NPSVC, /* Netpoll - don't dequeue from poll_list */
NAPI_STATE_HASHED, /* In NAPI hash */
NAPI_STATE_THREADED, /* The poll is performed inside its own thread*/
+ NAPI_STATE_SCHED_THREADED, /* Napi is currently scheduled in threaded mode */
};
enum gro_result {
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -3281,6 +3281,8 @@ static inline void ____napi_schedule(str
*/
thread = READ_ONCE(napi->thread);
if (thread) {
+ if (thread->state != TASK_INTERRUPTIBLE)
+ set_bit(NAPI_STATE_SCHED_THREADED, &napi->state);
wake_up_process(thread);
return;
}
@@ -5053,16 +5055,25 @@ static int napi_poll(struct napi_struct
static int napi_thread_wait(struct napi_struct *napi)
{
+ bool woken = false;
+
set_current_state(TASK_INTERRUPTIBLE);
while (!kthread_should_stop() && !napi_disable_pending(napi)) {
- if (test_bit(NAPI_STATE_SCHED, &napi->state)) {
+ /* Testing SCHED_THREADED bit here to make sure the current
+ * kthread owns this napi and could poll on this napi.
+ * Testing SCHED bit is not enough because SCHED bit might be
+ * set by some other busy poll thread or by napi_disable().
+ */
+ if (test_bit(NAPI_STATE_SCHED_THREADED, &napi->state) || woken) {
WARN_ON(!list_empty(&napi->poll_list));
__set_current_state(TASK_RUNNING);
return 0;
}
schedule();
+ /* woken being true indicates this thread owns this napi. */
+ woken = true;
set_current_state(TASK_INTERRUPTIBLE);
}
__set_current_state(TASK_RUNNING);

View File

@@ -1,53 +0,0 @@
From: Paolo Abeni <pabeni@redhat.com>
Date: Fri, 9 Apr 2021 17:24:17 +0200
Subject: [PATCH] net: fix hangup on napi_disable for threaded napi
napi_disable() is subject to an hangup, when the threaded
mode is enabled and the napi is under heavy traffic.
If the relevant napi has been scheduled and the napi_disable()
kicks in before the next napi_threaded_wait() completes - so
that the latter quits due to the napi_disable_pending() condition,
the existing code leaves the NAPI_STATE_SCHED bit set and the
napi_disable() loop waiting for such bit will hang.
This patch addresses the issue by dropping the NAPI_STATE_DISABLE
bit test in napi_thread_wait(). The later napi_threaded_poll()
iteration will take care of clearing the NAPI_STATE_SCHED.
This also addresses a related problem reported by Jakub:
before this patch a napi_disable()/napi_enable() pair killed
the napi thread, effectively disabling the threaded mode.
On the patched kernel napi_disable() simply stops scheduling
the relevant thread.
v1 -> v2:
- let the main napi_thread_poll() loop clear the SCHED bit
Reported-by: Jakub Kicinski <kuba@kernel.org>
Fixes: 29863d41bb6e ("net: implement threaded-able napi poll loop support")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://lore.kernel.org/r/883923fa22745a9589e8610962b7dc59df09fb1f.1617981844.git.pabeni@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5059,7 +5059,7 @@ static int napi_thread_wait(struct napi_
set_current_state(TASK_INTERRUPTIBLE);
- while (!kthread_should_stop() && !napi_disable_pending(napi)) {
+ while (!kthread_should_stop()) {
/* Testing SCHED_THREADED bit here to make sure the current
* kthread owns this napi and could poll on this napi.
* Testing SCHED bit is not enough because SCHED bit might be
@@ -5077,6 +5077,7 @@ static int napi_thread_wait(struct napi_
set_current_state(TASK_INTERRUPTIBLE);
}
__set_current_state(TASK_RUNNING);
+
return -1;
}

View File

@@ -13,6 +13,7 @@ PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/dtaht/sch_cake.git
PKG_MIRROR_HASH:=8bb4fa43368be5b5839a350419701b0bb3881b1641e037affea42630d75e56e6
PKG_SOURCE_DATE:=2021-07-09
PKG_SOURCE_VERSION:=d9e1398cc9091e9e7c7a740361e4617b75c24427
#PKG_MIRROR_HASH:=5bf06a804824db36ae393fc174aeec7b12633176e05a765c0931b39df5bd34df

View File

@@ -6,6 +6,7 @@ PKG_SOURCE_PROTO:=git
PKG_BRANCH:=master
PKG_RELEASE:=2
PKG_SOURCE_URL:=https://source.codeaurora.org/quic/qsdk/oss/lklm/nss-clients/
PKG_MIRROR_HASH:=802bf8b2dac8da0549e108b873afd982d127370c07d6574ece71f902eafe7698
PKG_VERSION:=153998d70fdba508a59a28c13a606032cbf32686
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz

View File

@@ -7,12 +7,15 @@ boot() {
. /lib/functions.sh
mkdir -p /certificates /etc/ucentral/
local mtd=$(find_mtd_index certificates)
[ -n "$mtd" -a -f /sys/class/mtd/mtd$mtd/oobsize ] && ubiattach -p /dev/mtd$mtd
if [ -n "$(ubinfo -a | grep certificates)" ]; then
[ -e /dev/ubi0 ] && mount -t ubifs ubi0:certificates /certificates
[ -e /dev/ubi1 ] && mount -t ubifs ubi1:certificates /certificates
else
if [ "$(head -c 4 /dev/mtd$mtd)" == "hsqs" ]; then
mount -t squashfs /dev/mtdblock$mtd /certificates
else
[ -n "$mtd" -a -f /sys/class/mtd/mtd$mtd/oobsize ] && ubiattach -p /dev/mtd$mtd
if [ -n "$(ubinfo -a | grep certificates)" ]; then
[ -e /dev/ubi0 ] && mount -t ubifs ubi0:certificates /certificates
[ -e /dev/ubi1 ] && mount -t ubifs ubi1:certificates /certificates
fi
fi
[ -f /certificates/dev-id ] && {
cp /certificates/*.pem /etc/ucentral/

View File

@@ -16,12 +16,14 @@ wifi config
. /lib/functions.sh
SUFFIX=$(uci get system.@system[0].hostname | tail -c 7 | tr a-f A-F | tr -d '\n')
radio_enable() {
uci set wireless.$1.disabled=0
}
ssid_set() {
uci set wireless.$1.ssid='Maverick'
uci set wireless.$1.ssid=Maverick-${SUFFIX}
}
delete_forwarding() {

View File

@@ -4,6 +4,7 @@ PKG_NAME:=dynamic-vlan
PKG_RELEASE:=1
PKG_SOURCE_URL=https://github.com/blogic/dynamic-vlan.git
PKG_MIRROR_HASH:=448890cdf182bd1b47edffca242e607594d0d17f6f5017a6fd021aab79f3c351
PKG_SOURCE_PROTO:=git
PKG_SOURCE_DATE:=2021-06-04
PKG_SOURCE_VERSION:=55d78d3e7215b601084980d922349bcfdcf9cf20

View File

@@ -7,6 +7,7 @@ PKG_LICENSE:=GPL-2.0
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
PKG_SOURCE_URL=https://github.com/blogic/ieee8021x.git
PKG_MIRROR_HASH:=7e14e320714b4759f5c393f90165a69d133633612b57d408b3ab6535710bf53c
PKG_SOURCE_PROTO:=git
PKG_SOURCE_DATE:=2021-04-12
PKG_SOURCE_VERSION:=c1f36559dc0ed2deeac0531a3d5854f1955ae928

View File

@@ -4,6 +4,7 @@ PKG_NAME:=ucentral-client
PKG_RELEASE:=1
PKG_SOURCE_URL=https://github.com/blogic/ucentral-client.git
PKG_MIRROR_HASH:=f00e800d97335d088281670aa1b459da1fdd5e4a2927ce280b7d9cb369ebc21a
PKG_SOURCE_PROTO:=git
PKG_SOURCE_DATE:=2022-01-10
PKG_SOURCE_VERSION:=e3b71c61e1a07bb3b5fa34fe835fd8f6f708caa3

View File

@@ -4,6 +4,7 @@ PKG_NAME:=ucentral-event
PKG_RELEASE:=1
PKG_SOURCE_URL=https://github.com/blogic/ucentral-event.git
PKG_MIRROR_HASH:=615563b31f55b18b8900f8614c6c8add0d6a812da57d220a7632109b06795036
PKG_SOURCE_PROTO:=git
PKG_SOURCE_DATE:=2021-04-13
PKG_SOURCE_VERSION:=7b0d136e8556bb099d7032823139d275448714cb

View File

@@ -6,7 +6,7 @@ PKG_RELEASE:=1
PKG_SOURCE_URL=https://github.com/blogic/ucentral-schema.git
PKG_SOURCE_PROTO:=git
PKG_SOURCE_DATE:=2022-01-17
PKG_SOURCE_VERSION:=07cb6e9fc7a4a8f9868e6efd29edcaf1f3245716
PKG_SOURCE_VERSION:=19fcc8d8163e84734d34dc7dd9767c2fa133fa16
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
PKG_LICENSE:=BSD-3-Clause

View File

@@ -3,12 +3,12 @@
"radios": [
{
"band": "2G",
"country": "CA",
"country": "US",
"channel-mode": "HE",
"channel-width": 40
}, {
"band": "5G",
"country": "CA",
"country": "US",
"channel-mode": "HE",
"channel-width": 80
}

View File

@@ -0,0 +1,13 @@
#!/bin/sh
n=$1
shift
if [ $n -eq 0]; then
tcpdump $@
else
tcpdump $@ &
x=$!
sleep $n
kill $x
fi

View File

@@ -0,0 +1,16 @@
#!/usr/bin/ucode -R
let nl = require("nl80211");
let def = nl.const;
function phy_get() {
let res = nl.request(def.NL80211_CMD_GET_WIPHY, def.NLM_F_DUMP, { split_wiphy_dump: true });
if (res === false)
warn("Unable to lookup phys: " + nl.error() + "\n");
return res;
}
let phys = phy_get();
printf("%d\n", phys[0].max_ap_assoc);

View File

@@ -4,6 +4,7 @@ PKG_NAME:=ucentral-tools
PKG_RELEASE:=1
PKG_SOURCE_URL=https://github.com/blogic/ucentral-tools.git
PKG_MIRROR_HASH:=9ae6a0cd431595871c233550427c4043c2ba7ddb3c5d87e46ab74a03b2b5a947
PKG_SOURCE_PROTO:=git
PKG_SOURCE_DATE:=2021-01-28
PKG_SOURCE_VERSION:=b013fc636e48d407870a46aaa68a09ed74de8d6f

View File

@@ -4,9 +4,10 @@ PKG_NAME:=ucentral-wifi
PKG_RELEASE:=1
PKG_SOURCE_URL=https://github.com/blogic/ucentral-wifi.git
PKG_MIRROR_HASH:=b6a3bfbd0823c54bb6fb3899e583db8580474a24c1b238d97be152ea8eccf6e5
PKG_SOURCE_PROTO:=git
PKG_SOURCE_DATE:=2022-01-10
PKG_SOURCE_VERSION:=955fed125e0597dda14cf52fb7224991072d6146
PKG_SOURCE_VERSION:=40d0eb9d6f36f558d14d6a1783711c3cf07638c5
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
PKG_LICENSE:=BSD-3-Clause

View File

@@ -1,15 +1,15 @@
From 1c89014c7c0e68e1eeb851ea538fb67a57988dd4 Mon Sep 17 00:00:00 2001
From eac420899717e2d23f6d13304bd67278a7e91730 Mon Sep 17 00:00:00 2001
From: John Crispin <john@phrozen.org>
Date: Thu, 20 Jan 2022 10:48:35 +0100
Subject: [PATCH 1/2] fixes
---
lib/nl80211.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++----
lib/nl80211.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++----
lib/rtnl.c | 1 +
2 files changed, 69 insertions(+), 5 deletions(-)
2 files changed, 71 insertions(+), 6 deletions(-)
diff --git a/lib/nl80211.c b/lib/nl80211.c
index fc24fb8..e308ebc 100644
index fc24fb8..1d0871a 100644
--- a/lib/nl80211.c
+++ b/lib/nl80211.c
@@ -45,6 +45,8 @@ limitations under the License.
@@ -132,7 +132,7 @@ index fc24fb8..e308ebc 100644
.attrs = {
{ NL80211_STA_INFO_INACTIVE_TIME, "inactive_time", DT_U32, 0, NULL },
{ NL80211_STA_INFO_RX_BYTES, "rx_bytes", DT_U32, 0, NULL },
@@ -724,15 +783,16 @@ static const uc_nl_nested_spec_t nl80211_sta_info_nla = {
@@ -724,21 +783,22 @@ static const uc_nl_nested_spec_t nl80211_sta_info_nla = {
{ NL80211_STA_INFO_NONPEER_PM, "nonpeer_pm", DT_U32, 0, NULL },
{ NL80211_STA_INFO_CHAIN_SIGNAL, "chain_signal", DT_S8, DF_MULTIPLE|DF_AUTOIDX, NULL },
{ NL80211_STA_INFO_CHAIN_SIGNAL_AVG, "chain_signal_avg", DT_S8, DF_MULTIPLE|DF_AUTOIDX, NULL },
@@ -152,7 +152,22 @@ index fc24fb8..e308ebc 100644
}
};
@@ -1044,6 +1104,9 @@ uc_nl_parse_attrs(struct nl_msg *msg, char *base, const uc_nl_attr_spec_t *attrs
static const uc_nl_nested_spec_t nl80211_msg = {
.headsize = 0,
- .nattrs = 124,
+ .nattrs = 125,
.attrs = {
{ NL80211_ATTR_4ADDR, "4addr", DT_U8, 0, NULL },
{ NL80211_ATTR_AIRTIME_WEIGHT, "airtime_weight", DT_U16, 0, NULL },
@@ -864,6 +924,7 @@ static const uc_nl_nested_spec_t nl80211_msg = {
{ NL80211_ATTR_WPA_VERSIONS, "wpa_versions", DT_U32, 0, NULL },
{ NL80211_ATTR_SUPPORTED_IFTYPES, "supported_iftypes", DT_NESTED, 0, &nl80211_ifcomb_limit_types_nla },
{ NL80211_ATTR_SOFTWARE_IFTYPES, "software_iftypes", DT_NESTED, 0, &nl80211_ifcomb_limit_types_nla },
+ { NL80211_ATTR_MAX_AP_ASSOC_STA, "max_ap_assoc", DT_U16, 0, NULL },
}
};
@@ -1044,6 +1105,9 @@ uc_nl_parse_attrs(struct nl_msg *msg, char *base, const uc_nl_attr_spec_t *attrs
bool exists;
for (i = 0; i < nattrs; i++) {

View File

@@ -5,6 +5,7 @@ PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=https://github.com/blogic/udevmand.git
PKG_MIRROR_HASH:=25e47c7f3d454cc5eba4e9c19fc9da8431e3c2b1b97b8f0f49798f51c2722df7
PKG_SOURCE_DATE:=20220112
PKG_SOURCE_VERSION:=065f75cb88aa317441adffeddc8d5302cfaafc8a
CMAKE_INSTALL:=1

View File

@@ -7,6 +7,7 @@ PKG_LICENSE:=GPL-2.0
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
PKG_SOURCE_URL=https://github.com/blogic/udhcpsnoop.git
PKG_MIRROR_HASH:=721f005e51c46b9381f3e5a6576b8a31afd3903ddb0e7b569d7337a57ca33dd2
PKG_SOURCE_PROTO:=git
PKG_SOURCE_DATE:=2021-04-12
PKG_SOURCE_VERSION:=b86639904147a40be32ac43cd89c21109ffc3543

View File

@@ -7,6 +7,7 @@ PKG_LICENSE:=GPL-2.0
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
PKG_SOURCE_URL=https://github.com/blogic/udnssnoop.git
PKG_MIRROR_HASH:=afd17cc6aed4a151bc0f437b84491d751932a39f93f429418200e9e8be53dfad
PKG_SOURCE_PROTO:=git
PKG_SOURCE_DATE:=2021-04-12
PKG_SOURCE_VERSION:=67e1e5f0bfc12222aa59c54e7066b1c00a680e56

View File

@@ -4,6 +4,7 @@ PKG_NAME:=usteer
PKG_RELEASE:=1
PKG_SOURCE_URL=https://git.openwrt.org/project/usteer.git
PKG_MIRROR_HASH:=34a9f2867b3e9050d4707b986481681f97f6fad71bc3fb3276fa3c3b26e2ab67
PKG_SOURCE_PROTO:=git
PKG_SOURCE_DATE:=2021-04-19
PKG_SOURCE_VERSION:=f42bf2962edd0199e4c96ebf19933b2846bcce27

View File

@@ -20,6 +20,12 @@ $(Package/ath11k-firmware-default)
DEPENDS:=@TARGET_ipq807x_ipq50xx
endef
define Package/ath11k-firmware-ipq50xx-spruce
$(Package/ath11k-firmware-default)
TITLE:=ath11k firmware for IPQ50xx devices with spruce
DEPENDS:=@TARGET_ipq807x_ipq50xx
endef
define Package/ath11k-firmware-ipq60xx
$(Package/ath11k-firmware-default)
TITLE:=ath11k firmware for IPQ60xx devices
@@ -48,6 +54,10 @@ define Package/ath11k-firmware-ipq50xx/description
Standard ath11k firmware for IPQ50xx from QCA
endef
define Package/ath11k-firmware-ipq50xx-spruce/description
Standard ath11k firmware for IPQ50xx/spruce from QCA
endef
define Package/ath11k-firmware-ipq60xx/description
Standard ath11k firmware for IPQ60xx from QCA
endef
@@ -74,6 +84,12 @@ define Package/ath11k-firmware-ipq50xx/install
$(1)/lib/firmware/IPQ5018/
endef
define Package/ath11k-firmware-ipq50xx-spruce/install
$(INSTALL_DIR) $(1)/lib/firmware/IPQ5018
$(INSTALL_DATA) ./files/IPQ5018_spruce/* \
$(1)/lib/firmware/IPQ5018/
endef
define Package/ath11k-firmware-ipq60xx/install
$(INSTALL_DIR) $(1)/lib/firmware/IPQ6018
$(INSTALL_DATA) ./files/IPQ6018/* \
@@ -87,6 +103,7 @@ define Package/ath11k-firmware-ipq807x/install
endef
define Package/ath11k-firmware-qcn6122/install
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/qcn6122
$(INSTALL_DIR) $(1)/lib/firmware/qcn6122
$(INSTALL_DATA) ./files/QCN6122/* \
$(1)/lib/firmware/qcn6122/
@@ -99,6 +116,7 @@ define Package/ath11k-firmware-qcn9000/install
endef
$(eval $(call BuildPackage,ath11k-firmware-ipq50xx))
$(eval $(call BuildPackage,ath11k-firmware-ipq50xx-spruce))
$(eval $(call BuildPackage,ath11k-firmware-ipq60xx))
$(eval $(call BuildPackage,ath11k-firmware-ipq807x))
$(eval $(call BuildPackage,ath11k-firmware-qcn6122))

View File

@@ -0,0 +1 @@
WLAN.HK.2.5.r4-00745-QCAHKSWPL_SILICONZ-1 v1

View File

@@ -0,0 +1,3 @@
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/m3_fw.b00
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/m3_fw.b01
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/m3_fw.b02

View File

@@ -0,0 +1,23 @@
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b00
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b01
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b02
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b03
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b04
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b05
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b07
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b08
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b09
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b10
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b11
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b13
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b14
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b15
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b16
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b17
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b18
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b20
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b21
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b22
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b23
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b25
build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/PIL_IMAGES/q6_fw.b26

View File

@@ -33,6 +33,7 @@ ALLWIFIBOARDS:= \
edgecore-eap101 \
sercomm-wallaby \
edgecore-eap102 \
edgecore-eap104 \
wallys-dr6018 \
wallys-dr6018-v4 \
tplink-ex227 \
@@ -96,6 +97,9 @@ define ath11k-wifi-install-one
$(if $(filter $(suffix $(1)),.QCN9074),\
$(call ath11k-wifi-install-one-to,$(1),$(2),ath11k/QCN9074/hw1.0/),\
)
$(if $(filter $(suffix $(1)),.QCN6122),\
$(call ath11k-wifi-install-one-to,$(1),$(2),ath11k/qcn6122/hw1.0/),\
)
endef
# Blank line required at end of above define due to foreach context
@@ -168,6 +172,7 @@ $(eval $(call generate-ath11k-wifi-package,wallys-dr6018,Wallys DR6018))
$(eval $(call generate-ath11k-wifi-package,wallys-dr6018-v4,Wallys DR6018 V4))
$(eval $(call generate-ath11k-wifi-package,edgecore-eap101,EdgeCore EAP101))
$(eval $(call generate-ath11k-wifi-package,edgecore-eap102,Edgecore EAP102))
$(eval $(call generate-ath11k-wifi-package,edgecore-eap104,Edgecore EAP104))
$(eval $(call generate-ath11k-wifi-package,tplink-ex227,TP-Link EX227))
$(eval $(call generate-ath11k-wifi-package,tplink-ex447,TP-Link EX447))

View File

@@ -60,7 +60,7 @@ CONFIG_RSN_PREAUTH=y
CONFIG_EAP=y
# EAP Re-authentication Protocol (ERP) in integrated EAP server
#CONFIG_ERP=y
CONFIG_ERP=y
# EAP-MD5 for the integrated EAP server
CONFIG_EAP_MD5=y

View File

@@ -727,7 +727,7 @@ hostapd_set_bss_options() {
wps_not_configured=1
[ "$macfilter" = radius ] && {
append_radius_server
vlan_possible = 1
vlan_possible=1
}
;;
psk|sae|psk-sae)

View File

@@ -0,0 +1,15 @@
Index: hostapd-2021-02-20-59e9794c/src/ap/acs.c
===================================================================
--- hostapd-2021-02-20-59e9794c.orig/src/ap/acs.c
+++ hostapd-2021-02-20-59e9794c/src/ap/acs.c
@@ -672,6 +672,10 @@ acs_find_ideal_chan_mode(struct hostapd_
continue;
}
+ if (iface->conf->acs_exclude_dfs &&
+ (chan->flag & HOSTAPD_CHAN_RADAR))
+ continue;
+
/* HT40 on 5 GHz has a limited set of primary channels as per
* 11n Annex J */
if (mode->mode == HOSTAPD_MODE_IEEE80211A &&

View File

@@ -13,7 +13,7 @@ PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://www.kernel.org/pub/software/network/iw
PKG_MD5SUM:=7a47d6f749ec69afcaf351166fd12f6f
PKG_HASH:=293a07109aeb7e36267cf59e3ce52857e9ffae3a6666eb8ac77894b1839fe1f2
PKG_MAINTAINER:=Felix Fietkau <nbd@openwrt.org>
PKG_LICENSE:=GPL-2.0

View File

@@ -0,0 +1,21 @@
Index: backports-20210222_001-4.4.60-b157d2276/drivers/net/wireless/ath/ath11k/mac.c
===================================================================
--- backports-20210222_001-4.4.60-b157d2276.orig/drivers/net/wireless/ath/ath11k/mac.c
+++ backports-20210222_001-4.4.60-b157d2276/drivers/net/wireless/ath/ath11k/mac.c
@@ -6590,6 +6590,7 @@ static int ath11k_mac_op_update_vif_offl
u32 param_id, param_value;
int ret;
+ return 0;
if (ab->nss.enabled && vif->type == NL80211_IFTYPE_AP_VLAN)
return 0;
@@ -6835,6 +6836,8 @@ static int ath11k_mac_op_add_interface(s
else
param_value = ATH11K_HW_TXRX_NATIVE_WIFI;
+ param_value = ATH11K_HW_TXRX_NATIVE_WIFI;
+
ret = ath11k_nss_vdev_set_cmd(arvif, NSS_WIFI_VDEV_ENCAP_TYPE_CMD, param_value);
if(ret) {

View File

@@ -1,57 +0,0 @@
--- a/drivers/net/wireless/ath/ath11k/ahb.c
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
@@ -526,6 +526,7 @@ static int ath11k_ahb_ext_irq_config(str
int irq;
int ret;
bool nss_offload;
+ static int devidx = 0;
/* TCL Completion, REO Dest, ERR, Exception and h2rxdma rings are offloaded
* to nss when its enabled, hence don't enable these interrupts
@@ -539,6 +540,9 @@ static int ath11k_ahb_ext_irq_config(str
irq_grp->ab = ab;
irq_grp->grp_id = i;
init_dummy_netdev(&irq_grp->napi_ndev);
+ snprintf(irq_grp->napi_ndev.name, sizeof(irq_grp->napi_ndev.name), "%s%d:%d",
+ "ath11k_ahb", devidx, i);
+ irq_grp->napi_ndev.threaded = 1;
netif_napi_add(&irq_grp->napi_ndev, &irq_grp->napi,
ath11k_ahb_ext_grp_napi_poll, NAPI_POLL_WEIGHT);
@@ -604,6 +608,8 @@ static int ath11k_ahb_ext_irq_config(str
}
}
+ devidx++;
+
return 0;
}
--- a/drivers/net/wireless/ath/ath11k/pci.c
+++ b/drivers/net/wireless/ath/ath11k/pci.c
@@ -806,6 +806,7 @@ static int ath11k_pci_ext_irq_config(str
int i, j, ret, num_vectors = 0;
u32 user_base_data = 0, base_vector = 0, base_idx;
u8 domain_id;
+ static int devidx = 0;
domain_id = ath11k_pci_get_domain_id(ab);
base_idx = ATH11K_PCI_IRQ_CE0_OFFSET + CE_COUNT_MAX;
@@ -822,6 +823,9 @@ static int ath11k_pci_ext_irq_config(str
irq_grp->ab = ab;
irq_grp->grp_id = i;
init_dummy_netdev(&irq_grp->napi_ndev);
+ snprintf(irq_grp->napi_ndev.name, sizeof(irq_grp->napi_ndev.name), "%s%d:%d",
+ "ath11k_pci", devidx, i);
+ irq_grp->napi_ndev.threaded = 1;
netif_napi_add(&irq_grp->napi_ndev, &irq_grp->napi,
ath11k_pci_ext_grp_napi_poll, NAPI_POLL_WEIGHT);
@@ -868,6 +872,7 @@ static int ath11k_pci_ext_irq_config(str
}
}
+ devidx++;
return 0;
}

View File

@@ -0,0 +1,30 @@
From a3598bcbc83224faf0d2ecb55761d048a1beb6d1 Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@nbd.name>
Date: Fri, 10 Dec 2021 10:16:18 +0100
Subject: [PATCH] netifd: on dhcp interfaces, store the dhcp server in
interface data
Among other things, this can be used to auto-configure the DHCP server
address for wireless APs using FILS, if the bridged interface is
configured to DHCP
Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
package/network/config/netifd/files/lib/netifd/dhcp.script | 1 +
1 file changed, 1 insertion(+)
diff --git a/package/network/config/netifd/files/lib/netifd/dhcp.script b/package/network/config/netifd/files/lib/netifd/dhcp.script
index e46005d84c..6fcf139beb 100755
--- a/package/network/config/netifd/files/lib/netifd/dhcp.script
+++ b/package/network/config/netifd/files/lib/netifd/dhcp.script
@@ -60,6 +60,7 @@ setup_interface () {
[ -n "$message" ] && json_add_string message "$message"
[ -n "$timezone" ] && json_add_int timezone "$timezone"
[ -n "$lease" ] && json_add_int leasetime "$lease"
+ [ -n "$serverid" ] && json_add_string dhcpserver "$serverid"
proto_close_data
proto_send_update "$INTERFACE"
--
2.25.1

View File

@@ -0,0 +1,32 @@
From d8d342c6d0c4076b509faf1ae1a87df24814abe0 Mon Sep 17 00:00:00 2001
From: John Crispin <john@phrozen.org>
Date: Wed, 23 Feb 2022 07:44:56 +0100
Subject: [PATCH] Revert "ipq40xx: ar40xx: reset port status register"
This reverts commit 88151b8303f29f18e8b037076628fd82eda0978a.
This actually causes several boards to have bad eth connectivity
after reboot.
Signed-off-by: John Crispin <john@phrozen.org>
---
target/linux/ipq40xx/files/drivers/net/phy/ar40xx.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/target/linux/ipq40xx/files/drivers/net/phy/ar40xx.c b/target/linux/ipq40xx/files/drivers/net/phy/ar40xx.c
index 8b3ae53bd9..9758f013f0 100644
--- a/target/linux/ipq40xx/files/drivers/net/phy/ar40xx.c
+++ b/target/linux/ipq40xx/files/drivers/net/phy/ar40xx.c
@@ -1198,7 +1198,8 @@ ar40xx_init_port(struct ar40xx_priv *priv, int port)
{
u32 t;
- ar40xx_write(priv, AR40XX_REG_PORT_STATUS(port), 0);
+ ar40xx_rmw(priv, AR40XX_REG_PORT_STATUS(port),
+ AR40XX_PORT_AUTO_LINK_EN, 0);
/* CPU port is setting headers to limit output ports */
if (port == 0)
--
2.25.1

View File

@@ -89,7 +89,7 @@ index 209ae3dc46..c8e1eca88b 100644
wps_not_configured=1
+ [ "$macfilter" = radius ] && {
+ append_radius_server
+ vlan_possible = 1
+ vlan_possible=1
+ }
;;
psk|sae|psk-sae)

View File

@@ -0,0 +1,35 @@
From adaea813b53d2f3cbbaefb9dffa19faf58d670a2 Mon Sep 17 00:00:00 2001
From: John Crispin <john@phrozen.org>
Date: Tue, 15 Feb 2022 17:05:18 +0100
Subject: [PATCH] hostapd: add acs_exclude_dfs support for SW ACS
Signed-off-by: John Crispin <john@phrozen.org>
---
.../hostapd/patches/760-acs_exclude_dfs.patch | 15 +++++++++++++++
1 file changed, 15 insertions(+)
create mode 100644 package/network/services/hostapd/patches/760-acs_exclude_dfs.patch
diff --git a/package/network/services/hostapd/patches/760-acs_exclude_dfs.patch b/package/network/services/hostapd/patches/760-acs_exclude_dfs.patch
new file mode 100644
index 0000000000..52d63c5ff9
--- /dev/null
+++ b/package/network/services/hostapd/patches/760-acs_exclude_dfs.patch
@@ -0,0 +1,15 @@
+Index: hostapd-2021-02-20-59e9794c/src/ap/acs.c
+===================================================================
+--- hostapd-2021-02-20-59e9794c.orig/src/ap/acs.c
++++ hostapd-2021-02-20-59e9794c/src/ap/acs.c
+@@ -672,6 +672,10 @@ acs_find_ideal_chan_mode(struct hostapd_
+ continue;
+ }
+
++ if (iface->conf->acs_exclude_dfs &&
++ (chan->flag & HOSTAPD_CHAN_RADAR))
++ continue;
++
+ /* HT40 on 5 GHz has a limited set of primary channels as per
+ * 11n Annex J */
+ if (mode->mode == HOSTAPD_MODE_IEEE80211A &&
--
2.25.1

View File

@@ -0,0 +1,20 @@
---
profile: edgecore_eap104
target: ipq807x
subtarget: ipq50xx
description: Build image for the EdgeCore EAP104
image: bin/targets/ipq807x/ipq50xx/openwrt-ipq807x-edgecore_eap104-squashfs-sysupgrade.tar
feeds:
- name: ipq807x
path: ../../feeds/ipq807x
- name: bluetooth_cc2652
path: ../../feeds/bluetooth-cc2652
include:
- wifi-ax
- ucentral-ap
packages:
- cc2652
diffconfig: |
CONFIG_KERNEL_IPQ_MEM_PROFILE=512
CONFIG_BUSYBOX_CUSTOM=y
CONFIG_BUSYBOX_CONFIG_STTY=y