mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-10-30 18:07:52 +00:00
Compare commits
65 Commits
v3.0.0
...
v3.0.2-rc1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f0035a9908 | ||
|
|
0412bf03eb | ||
|
|
afcffbc418 | ||
|
|
c29c179b9e | ||
|
|
36c4008c68 | ||
|
|
07f5deefce | ||
|
|
0d21a66d0a | ||
|
|
206b4348fc | ||
|
|
f0c34c39da | ||
|
|
b85b388eb5 | ||
|
|
556f8880bc | ||
|
|
bf2ca9a9e4 | ||
|
|
b24846cce3 | ||
|
|
4bcc60934e | ||
|
|
2b4fd7911a | ||
|
|
7b0f05d11b | ||
|
|
af4c7e4ce5 | ||
|
|
bfeea74870 | ||
|
|
3b5f90b339 | ||
|
|
8870e802a7 | ||
|
|
775af3700f | ||
|
|
c95b91c399 | ||
|
|
460050a114 | ||
|
|
01adebbd6f | ||
|
|
dcdbb4f091 | ||
|
|
144c5d00f4 | ||
|
|
2826c6d487 | ||
|
|
367415663f | ||
|
|
3ce4088499 | ||
|
|
37f1ef534e | ||
|
|
1142deb3d0 | ||
|
|
922067a652 | ||
|
|
62b9c6e257 | ||
|
|
63dd51cbc4 | ||
|
|
80c55c2d82 | ||
|
|
4e2b42e95a | ||
|
|
1949f602bf | ||
|
|
84f86bfc98 | ||
|
|
ed9d29fb03 | ||
|
|
c587a12ee5 | ||
|
|
2197badcde | ||
|
|
84c8eb5ccf | ||
|
|
16ebb7cec3 | ||
|
|
75a51e3cd9 | ||
|
|
832fbb8898 | ||
|
|
4d2603b4ce | ||
|
|
6fc396682c | ||
|
|
14aa04ad10 | ||
|
|
589cdf6795 | ||
|
|
d5ffdffd8c | ||
|
|
a14df28bd6 | ||
|
|
25bec55d4a | ||
|
|
575686449a | ||
|
|
a849ad6e39 | ||
|
|
de834a7d07 | ||
|
|
d8fd2b8f39 | ||
|
|
e1745cae9b | ||
|
|
bfa3b829ee | ||
|
|
91dacf0e93 | ||
|
|
c0dcc4aea2 | ||
|
|
c97ac2da72 | ||
|
|
f21fa9ab80 | ||
|
|
9305bc609b | ||
|
|
6d81e1e587 | ||
|
|
0c55b1f97a |
2
.github/workflows/build-dev.yml
vendored
2
.github/workflows/build-dev.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
target: [ 'cig_wf186h', 'cig_wf186w', 'cig_wf188n', 'cig_wf196', 'cig_wf660a', 'cybertan_eww622-a1', 'cybertan_eww631-a1', 'cybertan_eww631-b1', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap111', 'edgecore_ecw5211', 'edgecore_oap101', 'edgecore_oap101-6e', 'edgecore_oap101e', 'edgecore_oap101e-6e', 'edgecore_oap102', 'hfcl_ion4','hfcl_ion4xi_wp', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'hfcl_ion4xi_w', 'hfcl_ion4xi_HMR', 'hfcl_ion4x_w', 'indio_um-305ax', 'indio_um-325ac', 'indio_um-510ac-v3', 'indio_um-550ac', 'indio_um-310ax-v1', 'indio_um-510axp-v1', 'indio_um-510axm-v1', 'udaya_a5-id2', 'wallys_dr40x9', 'wallys_dr6018', 'wallys_dr6018_v4', 'yuncore_ax820', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650', 'yuncore_fap655' ]
|
||||
target: [ 'cig_wf186h', 'cig_wf186w', 'cig_wf188n', 'cig_wf196', 'cig_wf189', 'cig_wf660a', 'cybertan_eww622-a1', 'cybertan_eww631-a1', 'cybertan_eww631-b1', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap111', 'edgecore_ecw5211', 'edgecore_oap101', 'edgecore_oap101-6e', 'edgecore_oap101e', 'edgecore_oap101e-6e', 'edgecore_oap102', 'hfcl_ion4','hfcl_ion4xi_wp', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'hfcl_ion4xi_w', 'hfcl_ion4xi_HMR', 'hfcl_ion4x_w', 'indio_um-305ax', 'indio_um-325ac', 'indio_um-510ac-v3', 'indio_um-550ac', 'indio_um-310ax-v1', 'indio_um-510axp-v1', 'indio_um-510axm-v1', 'sercomm_ap72tip', 'udaya_a5-id2', 'wallys_dr40x9', 'wallys_dr6018', 'wallys_dr6018-v4', 'yuncore_ax820', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650', 'yuncore_fap655' ]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
28
LICENSE
Normal file
28
LICENSE
Normal file
@@ -0,0 +1,28 @@
|
||||
BSD 3-Clause License
|
||||
|
||||
Copyright (c) 2024, Telecom Infra Project
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
@@ -83,12 +83,12 @@ platform_do_upgrade() {
|
||||
part="$(awk -F 'ubi.mtd=' '{printf $2}' /proc/cmdline | cut -d " " -f 1)"
|
||||
case "$part" in
|
||||
rootfs1)
|
||||
fw_setenv active 2 || exit 1
|
||||
CI_UBIPART="rootfs2"
|
||||
CI_FWSETENV="active 2"
|
||||
;;
|
||||
rootfs2)
|
||||
fw_setenv active 1 || exit 1
|
||||
CI_UBIPART="rootfs1"
|
||||
CI_FWSETENV="active 1"
|
||||
;;
|
||||
*)
|
||||
# legacy bootloader
|
||||
|
||||
@@ -133,7 +133,7 @@ qcom_setup_interfaces()
|
||||
ucidef_set_interface_lan ""
|
||||
;;
|
||||
cybertan,eww631-b1)
|
||||
ucidef_add_switch "switch1" "5:wan" "2:lan" "3:lan" "4:lan" "6@eth0"
|
||||
ucidef_add_switch "switch1" "5:wan" "4:lan" "3:lan" "2:lan" "6@eth0"
|
||||
;;
|
||||
wallys,dr5018)
|
||||
ucidef_set_interface_lan "eth0 eth1"
|
||||
|
||||
@@ -211,7 +211,7 @@ ath11k/IPQ5018/hw1.0/caldata.bin)
|
||||
optimcloud,d60|\
|
||||
optimcloud,d60-5g|\
|
||||
optimcloud,d50|\
|
||||
optimcloud,d50-5g|\
|
||||
optimcloud,d50-5g|\
|
||||
qcom,ipq5018-mp03.1)
|
||||
caldata_extract "0:ART" 0x1000 0x20000
|
||||
;;
|
||||
@@ -298,7 +298,7 @@ ath11k-macs)
|
||||
optimcloud,d60|\
|
||||
optimcloud,d60-5g|\
|
||||
optimcloud,d50|\
|
||||
optimcloud,d50-5g|\
|
||||
optimcloud,d50-5g|\
|
||||
cig,wf188n)
|
||||
ath11k_generate_macs
|
||||
;;
|
||||
|
||||
@@ -16,7 +16,8 @@ boot() {
|
||||
;;
|
||||
edgecore,eap101|\
|
||||
edgecore,eap102|\
|
||||
edgecore,oap102)
|
||||
edgecore,oap102|\
|
||||
edgecore.eap104)
|
||||
avail=$(fw_printenv -n upgrade_available)
|
||||
[ "${avail}" -eq 1 ] || fw_setenv upgrade_available 1
|
||||
fw_setenv bootcount 0
|
||||
|
||||
@@ -247,8 +247,8 @@ nand_do_upgrade_success() {
|
||||
local conf_tar="/tmp/sysupgrade.tgz"
|
||||
sync
|
||||
[ "$CI_BOOTCFG" = 1 ] && nand_qca_update_bootconfig
|
||||
[ -f "$conf_tar" ] && nand_restore_config "$conf_tar" && sync
|
||||
[ -n "$CI_FWSETENV" ] && fw_setenv $CI_FWSETENV
|
||||
[ -f "$conf_tar" ] && nand_restore_config "$conf_tar"
|
||||
echo "sysupgrade successful"
|
||||
umount -a
|
||||
reboot -f
|
||||
|
||||
@@ -194,8 +194,6 @@ platform_do_upgrade() {
|
||||
cig,wf194c4|\
|
||||
cig,wf196|\
|
||||
cybertan,eww622-a1|\
|
||||
cybertan,eww631-a1|\
|
||||
cybertan,eww631-b1|\
|
||||
glinet,ax1800|\
|
||||
glinet,axt1800|\
|
||||
indio,um-310ax-v1|\
|
||||
@@ -262,8 +260,8 @@ platform_do_upgrade() {
|
||||
else
|
||||
if [ -e /tmp/downgrade ]; then
|
||||
CI_UBIPART="rootfs1"
|
||||
fw_setenv active 1 || exit 1
|
||||
fw_setenv upgrade_available 0 || exit 1
|
||||
{ echo 'active 1'; echo 'upgrade_available 0'; } > /tmp/fw_setenv.txt || exit 1
|
||||
CI_FWSETENV="-s /tmp/fw_setenv.txt"
|
||||
elif grep -q rootfs1 /proc/cmdline; then
|
||||
CI_UBIPART="rootfs2"
|
||||
CI_FWSETENV="active 2"
|
||||
@@ -289,5 +287,18 @@ platform_do_upgrade() {
|
||||
}
|
||||
nand_upgrade_tar "$1"
|
||||
;;
|
||||
cybertan,eww631-a1|\
|
||||
cybertan,eww631-b1)
|
||||
boot_part=$(fw_printenv bootfrom | cut -d = -f2)
|
||||
echo "Current bootfrom is $boot_part"
|
||||
if [[ $boot_part == 1 ]]; then
|
||||
CI_UBIPART="rootfs"
|
||||
CI_FWSETENV="bootfrom 0"
|
||||
else
|
||||
CI_UBIPART="rootfs_1"
|
||||
CI_FWSETENV="bootfrom 1"
|
||||
fi
|
||||
nand_upgrade_tar "$1"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
@@ -29,9 +29,9 @@ ALLWIFIBOARDS:= \
|
||||
cig-wf660a \
|
||||
cig-wf194c \
|
||||
cig-wf194c4 \
|
||||
cig-wf196-ca \
|
||||
cig-wf196-us \
|
||||
cybertan-eww622-a1 \
|
||||
cybertan-eww631-a1 \
|
||||
cybertan-eww631-b1 \
|
||||
edgecore-eap101 \
|
||||
gl-ax1800 \
|
||||
gl-axt1800 \
|
||||
@@ -89,14 +89,9 @@ $(call Package/ath11k-wifi-default)
|
||||
TITLE:=board-2.bin for QCOM IPQ6122 eval kits
|
||||
endef
|
||||
|
||||
define Package/ath11k-wifi-cig-wf196_6g-ca
|
||||
define Package/ath11k-wifi-cig-wf196
|
||||
$(call Package/ath11k-wifi-default)
|
||||
TITLE:=cig-wf196 6G bdf CA
|
||||
endef
|
||||
|
||||
define Package/ath11k-wifi-cig-wf196_6g-us
|
||||
$(call Package/ath11k-wifi-default)
|
||||
TITLE:=cig-wf196 6G bdf US
|
||||
TITLE:=cig-wf196 bdf
|
||||
endef
|
||||
|
||||
define Package/ath11k-wifi-gl-ax1800
|
||||
@@ -134,6 +129,11 @@ $(call Package/ath11k-wifi-default)
|
||||
TITLE:=hfcl-ion4xi bdf
|
||||
endef
|
||||
|
||||
define Package/ath11k-wifi-hfcl-ion4xe
|
||||
$(call Package/ath11k-wifi-default)
|
||||
TITLE:=hfcl-ion4xe bdf
|
||||
endef
|
||||
|
||||
define Package/ath11k-wifi-hfcl-ion4xi_w
|
||||
$(call Package/ath11k-wifi-default)
|
||||
TITLE:=hfcl-ion4xi_w bdf
|
||||
@@ -170,14 +170,9 @@ $(call Package/ath11k-wifi-default)
|
||||
TITLE:=edgecore-oap101e bdf
|
||||
endef
|
||||
|
||||
define Package/ath11k-wifi-cig-wf188n-ca
|
||||
define Package/ath11k-wifi-cig-wf188n
|
||||
$(call Package/ath11k-wifi-default)
|
||||
TITLE:=cig-wf188n bdf CA
|
||||
endef
|
||||
|
||||
define Package/ath11k-wifi-cig-wf188n-us
|
||||
$(call Package/ath11k-wifi-default)
|
||||
TITLE:=cig-wf188n bdf US
|
||||
TITLE:=cig-wf188n bdf
|
||||
endef
|
||||
|
||||
define ath11k-wifi-install-one-to
|
||||
@@ -257,16 +252,12 @@ define Package/ath11k-wifi-qcom-qcn9000/install
|
||||
$(INSTALL_DATA) ./board-2.bin.QCN9000 $(1)/lib/firmware/ath11k/QCN9074/hw1.0/board-2.bin
|
||||
endef
|
||||
|
||||
define Package/ath11k-wifi-cig-wf196_6g-ca/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/QCN9074/hw1.0/
|
||||
$(INSTALL_DATA) ./board-cig-wf196_6g-ca.bin.QCN9074 $(1)/lib/firmware/ath11k/QCN9074/hw1.0/board.bin
|
||||
echo -n 'CA' > $(1)/lib/firmware/country
|
||||
endef
|
||||
|
||||
define Package/ath11k-wifi-cig-wf196_6g-us/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/QCN9074/hw1.0/
|
||||
$(INSTALL_DATA) ./board-cig-wf196_6g-us.bin.QCN9074 $(1)/lib/firmware/ath11k/QCN9074/hw1.0/board.bin
|
||||
echo -n 'US' > $(1)/lib/firmware/country
|
||||
define Package/ath11k-wifi-cig-wf196/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/QCN9074/hw1.0/ $(1)/lib/firmware/ath11k/IPQ8074/hw2.0/
|
||||
$(INSTALL_DATA) ./board-cig-wf196_6g-ca.bin.QCN9074 $(1)/lib/firmware/ath11k/QCN9074/hw1.0/board.bin.CA
|
||||
$(INSTALL_DATA) ./board-cig-wf196_6g-us.bin.QCN9074 $(1)/lib/firmware/ath11k/QCN9074/hw1.0/board.bin.US
|
||||
$(INSTALL_DATA) ./board-cig-wf196-ca.bin.IPQ8074 $(1)/lib/firmware/ath11k/IPQ8074/hw2.0/board.bin.CA
|
||||
$(INSTALL_DATA) ./board-cig-wf196-us.bin.IPQ8074 $(1)/lib/firmware/ath11k/IPQ8074/hw2.0/board.bin.US
|
||||
endef
|
||||
|
||||
define Package/ath11k-wifi-optimcloud-d50/install
|
||||
@@ -315,6 +306,11 @@ define Package/ath11k-wifi-hfcl-ion4xi/install
|
||||
$(INSTALL_DATA) ./board-hfcl-ion4xi.bin.IPQ6018 $(1)/lib/firmware/ath11k/IPQ6018/hw1.0/board-2.bin
|
||||
endef
|
||||
|
||||
define Package/ath11k-wifi-hfcl-ion4xe/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/IPQ6018/hw1.0/
|
||||
$(INSTALL_DATA) ./board-hfcl-ion4xe.bin.IPQ6018 $(1)/lib/firmware/ath11k/IPQ6018/hw1.0/board-2.bin
|
||||
endef
|
||||
|
||||
define Package/ath11k-wifi-hfcl-ion4xi_wp/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/IPQ6018/hw1.0/
|
||||
$(INSTALL_DATA) ./board-hfcl-ion4xi_wp.bin.IPQ6018 $(1)/lib/firmware/ath11k/IPQ6018/hw1.0/board.bin
|
||||
@@ -355,16 +351,10 @@ define Package/ath11k-wifi-edgecore-oap101e/install
|
||||
$(INSTALL_DATA) ./board-2-edgecore-oap101e.bin.QCN6122 $(1)/lib/firmware/ath11k/qcn6122/hw1.0/board-2.bin
|
||||
endef
|
||||
|
||||
define Package/ath11k-wifi-cig-wf188n-ca/install
|
||||
define Package/ath11k-wifi-cig-wf188n/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/IPQ6018/hw1.0/
|
||||
$(INSTALL_DATA) ./board-cig-wf188n-ca.bin.IPQ6018 $(1)/lib/firmware/ath11k/IPQ6018/hw1.0/board.bin
|
||||
echo -n 'CA MY DE' > $(1)/lib/firmware/country
|
||||
endef
|
||||
|
||||
define Package/ath11k-wifi-cig-wf188n-us/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/IPQ6018/hw1.0/
|
||||
$(INSTALL_DATA) ./board-cig-wf188n-us.bin.IPQ6018 $(1)/lib/firmware/ath11k/IPQ6018/hw1.0/board.bin
|
||||
echo -n 'US MY DE' > $(1)/lib/firmware/country
|
||||
$(INSTALL_DATA) ./board-cig-wf188n-ca.bin.IPQ6018 $(1)/lib/firmware/ath11k/IPQ6018/hw1.0/board.bin.CA
|
||||
$(INSTALL_DATA) ./board-cig-wf188n-us.bin.IPQ6018 $(1)/lib/firmware/ath11k/IPQ6018/hw1.0/board.bin.US
|
||||
endef
|
||||
|
||||
$(eval $(call generate-ath11k-wifi-package,cig-wf186w,Cigtech WF186w))
|
||||
@@ -372,9 +362,9 @@ $(eval $(call generate-ath11k-wifi-package,cig-wf186h,Cigtech WF186h))
|
||||
$(eval $(call generate-ath11k-wifi-package,cig-wf660a,Cigtech WF660a))
|
||||
$(eval $(call generate-ath11k-wifi-package,cig-wf194c,Cigtech WF194c))
|
||||
$(eval $(call generate-ath11k-wifi-package,cig-wf194c4,Cigtech WF194c4))
|
||||
$(eval $(call generate-ath11k-wifi-package,cig-wf196-ca,Cigtech WF196 CA))
|
||||
$(eval $(call generate-ath11k-wifi-package,cig-wf196-us,Cigtech WF196 US))
|
||||
$(eval $(call generate-ath11k-wifi-package,cybertan-eww622-a1,CyberTan EWW622 A1))
|
||||
$(eval $(call generate-ath11k-wifi-package,cybertan-eww631-a1,CyberTan EWW631 A1))
|
||||
$(eval $(call generate-ath11k-wifi-package,cybertan-eww631-b1,CyberTan EWW631 B1))
|
||||
$(eval $(call generate-ath11k-wifi-package,sercomm-wallaby,Sercomm Kiwi))
|
||||
$(eval $(call generate-ath11k-wifi-package,wallys-dr6018,Wallys DR6018))
|
||||
$(eval $(call generate-ath11k-wifi-package,wallys-dr6018-v4,Wallys DR6018 V4))
|
||||
@@ -400,17 +390,16 @@ $(eval $(call BuildPackage,ath11k-wifi-qcom-ipq6122))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-qcom-ipq8074))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-qcom-ipq6018))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-qcom-qcn9000))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-cig-wf196_6g-ca))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-cig-wf196_6g-us))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-cig-wf196))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-motorola-q14))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-optimcloud-d50))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-optimcloud-d60))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-hfcl-ion4xi))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-hfcl-ion4xe))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-hfcl-ion4xi_wp))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-hfcl-ion4xi_w))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-hfcl-ion4x_w))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-hfcl-ion4xi_HMR))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-edgecore-oap101))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-edgecore-oap101e))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-cig-wf188n-ca))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-cig-wf188n-us))
|
||||
$(eval $(call BuildPackage,ath11k-wifi-cig-wf188n))
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
feeds/ipq807x_v5.4/ath11k-wifi/board-hfcl-ion4xe.bin.IPQ6018
Normal file
BIN
feeds/ipq807x_v5.4/ath11k-wifi/board-hfcl-ion4xe.bin.IPQ6018
Normal file
Binary file not shown.
@@ -1958,6 +1958,9 @@ void hostapd_ubus_notify_radar_detected(struct hostapd_iface *iface, int frequen
|
||||
struct hostapd_data *hapd;
|
||||
int i;
|
||||
|
||||
if (!ctx)
|
||||
return;
|
||||
|
||||
blob_buf_init(&b, 0);
|
||||
blobmsg_add_u16(&b, "frequency", frequency);
|
||||
blobmsg_add_u16(&b, "width", chan_width);
|
||||
|
||||
@@ -20,7 +20,7 @@ DEFAULT_PACKAGES += kmod-qca-nss-dp kmod-qca-ssdk swconfig \
|
||||
kmod-usb-phy-ipq5018 kmod-usb-dwc3-qcom-internal \
|
||||
kmod-ath11k-ahb ath11k-firmware-ipq5018 \
|
||||
kmod-gpio-button-hotplug iwinfo \
|
||||
qca-ssdk-shell \
|
||||
qca-ssdk-shell kmod-bootconfig \
|
||||
uboot-envtools -procd-ujail
|
||||
|
||||
$(eval $(call BuildTarget))
|
||||
|
||||
@@ -18,6 +18,13 @@ qcom_setup_interfaces()
|
||||
cig,wf186h)
|
||||
ucidef_add_switch "switch0" "4:wan" "1:lan" "2:lan" "6@eth0"
|
||||
;;
|
||||
cybertan,eww631-a1)
|
||||
ucidef_set_interface_wan "eth0"
|
||||
ucidef_set_interface_lan ""
|
||||
;;
|
||||
cybertan,eww631-b1)
|
||||
ucidef_add_switch "switch1" "5:wan" "2:lan" "3:lan" "4:lan" "6@eth0"
|
||||
;;
|
||||
edgecore,oap101|\
|
||||
edgecore,oap101-6e|\
|
||||
edgecore,oap101e|\
|
||||
@@ -63,6 +70,18 @@ qcom_setup_macs()
|
||||
ucidef_set_network_device_mac eth0 $wan_mac
|
||||
ip link set eth0 address $wan_mac
|
||||
;;
|
||||
cybertan,eww631-a1|\
|
||||
cybertan,eww631-b1)
|
||||
mtd=$(find_mtd_chardev "0:APPSBLENV")
|
||||
[ -z "$mtd" ] && return;
|
||||
mac=$(grep BaseMacAddress= $mtd | cut -d '=' -f2)
|
||||
[ -z "$mac" ] && return;
|
||||
wan_mac=$(macaddr_canonicalize $mac)
|
||||
lan_mac=$(macaddr_add "$wan_mac" 1)
|
||||
ucidef_set_network_device_mac eth0 $wan_mac
|
||||
ip link set eth0 address $wan_mac
|
||||
ucidef_set_label_macaddr $wan_mac
|
||||
;;
|
||||
*)
|
||||
wan_mac=$(cat /sys/class/net/eth0/address)
|
||||
lan_mac=$(macaddr_add "$wan_mac" 1)
|
||||
|
||||
@@ -39,6 +39,28 @@ ath11k_generate_macs_ion4x() {
|
||||
echo -ne \\x${wifimac2//:/\\x} >> /lib/firmware/ath11k-macs
|
||||
}
|
||||
|
||||
ath11k_generate_macs_eww631_a1() {
|
||||
touch /lib/firmware/ath11k-macs
|
||||
local dev=$(find_mtd_chardev "0:APPSBLENV")
|
||||
mac=$(grep BaseMacAddress= $dev | cut -d '=' -f2)
|
||||
eth=$(macaddr_canonicalize $mac)
|
||||
mac1=$(macaddr_add $eth 1)
|
||||
mac2=$(macaddr_add $eth 2)
|
||||
echo -ne \\x${mac1//:/\\x} >> /lib/firmware/ath11k-macs
|
||||
echo -ne \\x${mac2//:/\\x} >> /lib/firmware/ath11k-macs
|
||||
}
|
||||
|
||||
ath11k_generate_macs_eww631_b1() {
|
||||
touch /lib/firmware/ath11k-macs
|
||||
local dev=$(find_mtd_chardev "0:APPSBLENV")
|
||||
mac=$(grep BaseMacAddress= $dev | cut -d '=' -f2)
|
||||
eth=$(macaddr_canonicalize $mac)
|
||||
mac1=$(macaddr_add $eth 2)
|
||||
mac2=$(macaddr_add $eth 3)
|
||||
echo -ne \\x${mac1//:/\\x} >> /lib/firmware/ath11k-macs
|
||||
echo -ne \\x${mac2//:/\\x} >> /lib/firmware/ath11k-macs
|
||||
}
|
||||
|
||||
caldata_die() {
|
||||
echo "caldata: " "$*"
|
||||
exit 1
|
||||
@@ -64,6 +86,8 @@ ath11k/IPQ5018/hw1.0/caldata.bin)
|
||||
case "$board" in
|
||||
cig,wf186w|\
|
||||
cig,wf186h|\
|
||||
cybertan,eww631-a1|\
|
||||
cybertan,eww631-b1|\
|
||||
edgecore,eap104|\
|
||||
edgecore,oap101|\
|
||||
edgecore,oap101-6e|\
|
||||
@@ -84,6 +108,8 @@ ath11k/qcn6122/hw1.0/caldata_1.bin)
|
||||
case "$board" in
|
||||
cig,wf186w|\
|
||||
cig,wf186h|\
|
||||
cybertan,eww631-a1|\
|
||||
cybertan,eww631-b1|\
|
||||
edgecore,oap101|\
|
||||
edgecore,oap101-6e|\
|
||||
edgecore,oap101e|\
|
||||
@@ -101,6 +127,10 @@ ath11k/qcn6122/hw1.0/caldata_2.bin)
|
||||
edgecore,oap101e-6e)
|
||||
caldata_extract "0:ART" 0x4c000 0x20000
|
||||
;;
|
||||
cybertan,eww631-a1|\
|
||||
cybertan,eww631-b1)
|
||||
caldata_extract "0:ART" 0x26800 0x20000
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
ath11k/QCN9074/hw1.0/caldata_1.bin)
|
||||
@@ -119,6 +149,12 @@ ath11k-macs)
|
||||
cig,wf186h)
|
||||
ath11k_generate_macs_wf186w
|
||||
;;
|
||||
cybertan,eww631-a1)
|
||||
ath11k_generate_macs_eww631_a1
|
||||
;;
|
||||
cybertan,eww631-b1)
|
||||
ath11k_generate_macs_eww631_b1
|
||||
;;
|
||||
edgecore,eap104|\
|
||||
optimcloud,d60|\
|
||||
optimcloud,d60-5g|\
|
||||
|
||||
@@ -247,8 +247,8 @@ nand_do_upgrade_success() {
|
||||
local conf_tar="/tmp/sysupgrade.tgz"
|
||||
sync
|
||||
[ "$CI_BOOTCFG" = 1 ] && nand_qca_update_bootconfig
|
||||
[ -f "$conf_tar" ] && nand_restore_config "$conf_tar" && sync
|
||||
[ -n "$CI_FWSETENV" ] && fw_setenv $CI_FWSETENV
|
||||
[ -f "$conf_tar" ] && nand_restore_config "$conf_tar"
|
||||
echo "sysupgrade successful"
|
||||
umount -a
|
||||
reboot -f
|
||||
|
||||
@@ -70,6 +70,8 @@ platform_check_image() {
|
||||
case $board in
|
||||
cig,wf186w|\
|
||||
cig,wf186h|\
|
||||
cybertan,eww631-a1|\
|
||||
cybertan,eww631-b1|\
|
||||
edgecore,eap104|\
|
||||
hfcl,ion4x_w|\
|
||||
hfcl,ion4xi_w|\
|
||||
@@ -130,5 +132,18 @@ platform_do_upgrade() {
|
||||
}
|
||||
nand_upgrade_tar "$1"
|
||||
;;
|
||||
cybertan,eww631-a1|\
|
||||
cybertan,eww631-b1)
|
||||
boot_part=$(fw_printenv bootfrom | cut -d = -f2)
|
||||
echo "Current bootfrom is $boot_part"
|
||||
if [[ $boot_part == 1 ]]; then
|
||||
CI_UBIPART="rootfs"
|
||||
CI_FWSETENV="bootfrom 0"
|
||||
else
|
||||
CI_UBIPART="rootfs_1"
|
||||
CI_FWSETENV="bootfrom 1"
|
||||
fi
|
||||
nand_upgrade_tar "$1"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
@@ -0,0 +1,915 @@
|
||||
/dts-v1/;
|
||||
/* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. 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 "ipq5018.dtsi"
|
||||
|
||||
/ {
|
||||
#address-cells = <0x2>;
|
||||
#size-cells = <0x2>;
|
||||
model = "CyberTan EWW631-A1";
|
||||
compatible = "cybertan,eww631-a1", "qcom,ipq5018-mp03.5", "qcom,ipq5018";
|
||||
interrupt-parent = <&intc>;
|
||||
|
||||
aliases {
|
||||
sdhc1 = &sdhc_1; /* SDC1 eMMC slot */
|
||||
serial0 = &blsp1_uart1;
|
||||
serial1 = &blsp1_uart2;
|
||||
ethernet0 = "/soc/dp1";
|
||||
ethernet1 = "/soc/dp2";
|
||||
};
|
||||
|
||||
chosen {
|
||||
bootargs = "console=ttyMSM0,115200,n8 rw init=/init";
|
||||
bootargs-append = " swiotlb=1 coherent_pool=2M";
|
||||
stdout-path = "serial0";
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
#ifdef __IPQ_MEM_PROFILE_256_MB__
|
||||
/* 256 MB Profile
|
||||
* +==========+==============+=========================+
|
||||
* | | | |
|
||||
* | Region | Start Offset | Size |
|
||||
* | | | |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | NSS | 0x40000000 | 8MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | Linux | 0x40800000 | Depends on total memory |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | uboot | 0x4A600000 | 4MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | SBL | 0x4AA00000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | smem | 0x4AB00000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | TZ | 0x4AC00000 | 4MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | Q6 | | |
|
||||
* | code/ | 0x4B000000 | 20MB |
|
||||
* | data | | |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | IPQ5018 | | |
|
||||
* | data | 0x4C400000 | 13MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | IPQ5018 | | |
|
||||
* | M3 Dump | 0x4D100000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | IPQ5018 | | |
|
||||
* | QDSS | 0x4D200000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_1| | |
|
||||
* | data | 0x4D300000 | 13MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_1| | |
|
||||
* | M3 Dump | 0x4E000000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_1| | |
|
||||
* | QDSS | 0x4E100000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_2| | |
|
||||
* | data | 0x4E200000 | 13MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_2| | |
|
||||
* | M3 Dump | 0x4EF00000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_2| | |
|
||||
* | QDSS | 0x4F000000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | |
|
||||
* | Rest of the memory for Linux |
|
||||
* | |
|
||||
* +===================================================+
|
||||
*/
|
||||
q6_mem_regions: q6_mem_regions@4B000000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4B000000 0x0 0x4100000>;
|
||||
};
|
||||
|
||||
q6_code_data: q6_code_data@4B000000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4B000000 0x0 0x1400000>;
|
||||
};
|
||||
|
||||
q6_ipq5018_data: q6_ipq5018_data@4C400000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4C400000 0x0 0xD00000>;
|
||||
};
|
||||
|
||||
m3_dump: m3_dump@4D100000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4D100000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_etr_region: q6_etr_dump@4D200000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4D200000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_data1: q6_qcn6122_data1@4D300000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4D300000 0x0 0xD00000>;
|
||||
};
|
||||
|
||||
m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E000000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4E000000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E100000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4E100000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_data2: q6_qcn6122_data2@4E200000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4E200000 0x0 0xD00000>;
|
||||
};
|
||||
|
||||
m3_dump_qcn6122_2: m3_dump_qcn6122_2@4EF00000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4EF00000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_etr_2: q6_qcn6122_etr_2@4F000000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4F000000 0x0 0x100000>;
|
||||
};
|
||||
#else
|
||||
/* 512MB/1GB Profiles
|
||||
* +==========+==============+=========================+
|
||||
* | | | |
|
||||
* | Region | Start Offset | Size |
|
||||
* | | | |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | NSS | 0x40000000 | 16MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | Linux | 0x41000000 | Depends on total memory |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | uboot | 0x4A600000 | 4MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | SBL | 0x4AA00000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | smem | 0x4AB00000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | TZ | 0x4AC00000 | 4MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | Q6 | | |
|
||||
* | code/ | 0x4B000000 | 20MB |
|
||||
* | data | | |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | IPQ5018 | | |
|
||||
* | data | 0x4C400000 | 13MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | IPQ5018 | | |
|
||||
* | M3 Dump | 0x4D100000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | IPQ5018 | | |
|
||||
* | QDSS | 0x4D200000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | IPQ5018 | | |
|
||||
* | Caldb | 0x4D300000 | 2MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_1| | |
|
||||
* | data | 0x4D500000 | 13MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_1| | |
|
||||
* | M3 Dump | 0x4E200000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_1| | |
|
||||
* | QDSS | 0x4E300000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_1| | |
|
||||
* | Caldb | 0x4E400000 | 5MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_2| | |
|
||||
* | data | 0x4E900000 | 13MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_2| | |
|
||||
* | M3 Dump | 0x4F600000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_2| | |
|
||||
* | QDSS | 0x4F700000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_2| | |
|
||||
* | Caldb | 0x4F800000 | 5MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | |
|
||||
* | Rest of the memory for Linux |
|
||||
* | |
|
||||
* +===================================================+
|
||||
*/
|
||||
q6_mem_regions: q6_mem_regions@4B000000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4B000000 0x0 0x4D00000>;
|
||||
};
|
||||
|
||||
q6_code_data: q6_code_data@4B000000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4B000000 0x0 01400000>;
|
||||
};
|
||||
|
||||
q6_ipq5018_data: q6_ipq5018_data@4C400000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4C400000 0x0 0xD00000>;
|
||||
};
|
||||
|
||||
m3_dump: m3_dump@4D100000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4D100000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_etr_region: q6_etr_dump@4D200000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4D200000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_caldb_region: q6_caldb_region@4D300000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4D300000 0x0 0x200000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_data1: q6_qcn6122_data1@4D500000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4D500000 0x0 0xD00000>;
|
||||
};
|
||||
|
||||
m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E200000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4E200000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E300000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4E300000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_caldb_1: q6_qcn6122_caldb_1@4E400000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4E400000 0x0 0x500000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_data2: q6_qcn6122_data2@4E900000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4E900000 0x0 0xD00000>;
|
||||
};
|
||||
|
||||
m3_dump_qcn6122_2: m3_dump_qcn6122_2@4F600000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4F600000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_etr_2: q6_qcn6122_etr_2@4F700000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4F700000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_caldb_2: q6_qcn6122_caldb_2@4F800000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4F800000 0x0 0x500000>;
|
||||
};
|
||||
|
||||
#endif
|
||||
};
|
||||
|
||||
soc {
|
||||
serial@78af000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
blsp1_uart2: serial@78b0000 {
|
||||
pinctrl-0 = <&blsp1_uart_pins>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
qpic_bam: dma@7984000{
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
nand: qpic-nand@79b0000 {
|
||||
pinctrl-0 = <&qspi_nand_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
spi_0: spi@78b5000 { /* BLSP1 QUP0 */
|
||||
pinctrl-0 = <&blsp0_spi_pins>;
|
||||
pinctrl-names = "default";
|
||||
cs-select = <0>;
|
||||
status = "ok";
|
||||
|
||||
m25p80@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0>;
|
||||
compatible = "n25q128a11";
|
||||
linux,modalias = "m25p80", "n25q128a11";
|
||||
spi-max-frequency = <50000000>;
|
||||
use-default-sizes;
|
||||
};
|
||||
};
|
||||
|
||||
mdio0: mdio@88000 {
|
||||
status = "ok";
|
||||
|
||||
ethernet-phy@0 {
|
||||
reg = <7>;
|
||||
};
|
||||
};
|
||||
|
||||
mdio1: mdio@90000 {
|
||||
status = "disabled";
|
||||
pinctrl-0 = <&mdio1_pins>;
|
||||
pinctrl-names = "default";
|
||||
phy-reset-gpio = <&tlmm 39 0>;
|
||||
|
||||
ethernet-phy@0 {
|
||||
reg = <28>;
|
||||
};
|
||||
};
|
||||
|
||||
ess-instance {
|
||||
num_devices = <0x1>;
|
||||
ess-switch@0x39c00000 {
|
||||
switch_mac_mode = <0xf>; /* mac mode for uniphy instance*/
|
||||
cmnblk_clk = "internal_96MHz"; /* cmnblk clk*/
|
||||
qcom,port_phyinfo {
|
||||
port@0 {
|
||||
port_id = <1>;
|
||||
phy_address = <7>;
|
||||
mdiobus = <&mdio0>;
|
||||
};
|
||||
/*
|
||||
port@1 {
|
||||
port_id = <2>;
|
||||
phy_address = <0x1c>;
|
||||
mdiobus = <&mdio1>;
|
||||
port_mac_sel = "QGMAC_PORT";
|
||||
};
|
||||
*/
|
||||
};
|
||||
|
||||
led_source@0 {
|
||||
source = <0>;
|
||||
mode = "normal";
|
||||
speed = "all";
|
||||
blink_en = "enable";
|
||||
active = "high";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
dp1 {
|
||||
device_type = "network";
|
||||
compatible = "qcom,nss-dp";
|
||||
clocks = <&gcc GCC_SNOC_GMAC0_AXI_CLK>;
|
||||
clock-names = "nss-snoc-gmac-axi-clk";
|
||||
qcom,id = <1>;
|
||||
reg = <0x39C00000 0x10000>;
|
||||
interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;
|
||||
qcom,mactype = <2>;
|
||||
qcom,link-poll = <1>;
|
||||
qcom,phy-mdio-addr = <7>;
|
||||
mdio-bus = <&mdio0>;
|
||||
local-mac-address = [000000000000];
|
||||
phy-mode = "sgmii";
|
||||
qcom,rx-page-mode = <0>;
|
||||
};
|
||||
/*
|
||||
dp2 {
|
||||
device_type = "network";
|
||||
compatible = "qcom,nss-dp";
|
||||
clocks = <&gcc GCC_SNOC_GMAC1_AXI_CLK>;
|
||||
clock-names = "nss-snoc-gmac-axi-clk";
|
||||
qcom,id = <2>;
|
||||
reg = <0x39D00000 0x10000>;
|
||||
interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
|
||||
qcom,mactype = <2>;
|
||||
qcom,link-poll = <1>;
|
||||
qcom,phy-mdio-addr = <28>;
|
||||
mdio-bus = <&mdio1>;
|
||||
local-mac-address = [000000000000];
|
||||
phy-mode = "sgmii";
|
||||
qcom,rx-page-mode = <0>;
|
||||
};
|
||||
*/
|
||||
|
||||
nss-macsec1 {
|
||||
compatible = "qcom,nss-macsec";
|
||||
phy_addr = <0x1c>;
|
||||
mdiobus = <&mdio1>;
|
||||
};
|
||||
};
|
||||
|
||||
qcom,test@0 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
thermal-zones {
|
||||
status = "ok";
|
||||
};
|
||||
};
|
||||
|
||||
&tlmm {
|
||||
pinctrl-0 = <&blsp0_uart_pins &phy_led_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
blsp0_uart_pins: blsp0_uart_pins {
|
||||
blsp0_uart_rx_tx {
|
||||
pins = "gpio20", "gpio21";
|
||||
function = "blsp0_uart0";
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
blsp1_uart_pins: blsp1_uart_pins {
|
||||
blsp1_uart_rx_tx {
|
||||
pins = "gpio23", "gpio25", "gpio24", "gpio26";
|
||||
function = "blsp1_uart2";
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
blsp0_spi_pins: blsp0_spi_pins {
|
||||
mux {
|
||||
pins = "gpio10", "gpio11", "gpio12", "gpio13";
|
||||
function = "blsp0_spi";
|
||||
drive-strength = <2>;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
qspi_nand_pins: qspi_nand_pins {
|
||||
qspi_clock {
|
||||
pins = "gpio9";
|
||||
function = "qspi_clk";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
|
||||
qspi_cs {
|
||||
pins = "gpio8";
|
||||
function = "qspi_cs";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
|
||||
qspi_data {
|
||||
pins = "gpio4", "gpio5", "gpio6", "gpio7";
|
||||
function = "qspi_data";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
mdio1_pins: mdio_pinmux {
|
||||
mux_0 {
|
||||
pins = "gpio36";
|
||||
function = "mdc";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
|
||||
mux_1 {
|
||||
pins = "gpio37";
|
||||
function = "mdio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
phy_led_pins: phy_led_pins {
|
||||
gephy_led_pin {
|
||||
pins = "gpio46";
|
||||
function = "led0";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
|
||||
i2c_pins: i2c_pins {
|
||||
i2c_scl {
|
||||
pins = "gpio25";
|
||||
function = "blsp2_i2c1";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
|
||||
i2c_sda {
|
||||
pins = "gpio26";
|
||||
function = "blsp2_i2c1";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
button_pins: button_pins {
|
||||
reset_button {
|
||||
pins = "gpio28";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
audio_pins: audio_pinmux {
|
||||
mux_1 {
|
||||
pins = "gpio24";
|
||||
function = "audio_rxbclk";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
mux_2 {
|
||||
pins = "gpio25";
|
||||
function = "audio_rxfsync";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
mux_3 {
|
||||
pins = "gpio26";
|
||||
function = "audio_rxd";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
mux_4 {
|
||||
pins = "gpio27";
|
||||
function = "audio_txmclk";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
mux_5 {
|
||||
pins = "gpio28";
|
||||
function = "audio_txbclk";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
mux_6 {
|
||||
pins = "gpio29";
|
||||
function = "audio_txfsync";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
mux_7 {
|
||||
pins = "gpio30";
|
||||
function = "audio_txd";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
leds_pins: leds_pinmux {
|
||||
sys_blue {
|
||||
pins = "gpio30";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
sys_red {
|
||||
pins = "gpio36";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
sys_green {
|
||||
pins = "gpio37";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&soc {
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
pinctrl-0 = <&button_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
button@1 {
|
||||
label = "reset";
|
||||
linux,code = <KEY_RESTART>;
|
||||
gpios = <&tlmm 28 GPIO_ACTIVE_LOW>;
|
||||
linux,input-type = <1>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
};
|
||||
gpio_leds {
|
||||
compatible = "gpio-leds";
|
||||
pinctrl-0 = <&leds_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
led@30 {
|
||||
label = "sys:blue";
|
||||
gpios = <&tlmm 30 GPIO_ACTIVE_HIGH>; /* GPIO_30 */
|
||||
default-state="on";
|
||||
/* linux,default-trigger = "timer";
|
||||
active-delay = <700>;
|
||||
inactive-delay = <700>;
|
||||
default-state="on"; */
|
||||
};
|
||||
led@36 {
|
||||
label = "sys:red";
|
||||
gpios = <&tlmm 36 GPIO_ACTIVE_HIGH>; /* GPIO_36 */
|
||||
default-state="off";
|
||||
/* linux,default-trigger = "timer";
|
||||
active-delay = <700>;
|
||||
inactive-delay = <700>;
|
||||
default-state="on"; */
|
||||
};
|
||||
led@37 {
|
||||
label = "sys:green";
|
||||
gpios = <&tlmm 37 GPIO_ACTIVE_HIGH>; /* GPIO_37 */
|
||||
default-state="off";
|
||||
/* linux,default-trigger = "timer";
|
||||
active-delay = <700>;
|
||||
inactive-delay = <700>;
|
||||
default-state="on"; */
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
&q6v5_wcss {
|
||||
compatible = "qcom,ipq5018-q6-mpd";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
firmware = "IPQ5018/q6_fw.mdt";
|
||||
reg = <0x0cd00000 0x4040>,
|
||||
<0x1938000 0x8>,
|
||||
<0x193d204 0x4>;
|
||||
reg-names = "qdsp6",
|
||||
"tcsr-msip",
|
||||
"tcsr-q6";
|
||||
resets = <&gcc GCC_WCSSAON_RESET>,
|
||||
<&gcc GCC_WCSS_Q6_BCR>;
|
||||
|
||||
reset-names = "wcss_aon_reset",
|
||||
"wcss_q6_reset";
|
||||
|
||||
clocks = <&gcc GCC_Q6_AXIS_CLK>,
|
||||
<&gcc GCC_WCSS_ECAHB_CLK>,
|
||||
<&gcc GCC_Q6_AXIM_CLK>,
|
||||
<&gcc GCC_Q6_AXIM2_CLK>,
|
||||
<&gcc GCC_Q6_AHB_CLK>,
|
||||
<&gcc GCC_Q6_AHB_S_CLK>,
|
||||
<&gcc GCC_WCSS_AXI_S_CLK>;
|
||||
clock-names = "gcc_q6_axis_clk",
|
||||
"gcc_wcss_ecahb_clk",
|
||||
"gcc_q6_axim_clk",
|
||||
"gcc_q6_axim2_clk",
|
||||
"gcc_q6_ahb_clk",
|
||||
"gcc_q6_ahb_s_clk",
|
||||
"gcc_wcss_axi_s_clk";
|
||||
|
||||
#ifdef __IPQ_MEM_PROFILE_256_MB__
|
||||
memory-region = <&q6_mem_regions>, <&q6_etr_region>;
|
||||
#else
|
||||
memory-region = <&q6_mem_regions>, <&q6_etr_region>,
|
||||
<&q6_caldb_region>;
|
||||
#endif
|
||||
|
||||
qcom,rproc = <&q6v5_wcss>;
|
||||
qcom,bootargs_smem = <507>;
|
||||
boot-args = <0x1 0x4 0x3 0x0F 0x0 0x0>,
|
||||
<0x2 0x4 0x2 0x12 0x0 0x0>;
|
||||
status = "ok";
|
||||
q6_wcss_pd1: remoteproc_pd1@4ab000 {
|
||||
compatible = "qcom,ipq5018-wcss-ahb-mpd";
|
||||
reg = <0x4ab000 0x20>;
|
||||
reg-names = "rmb";
|
||||
firmware = "IPQ5018/q6_fw.mdt";
|
||||
m3_firmware = "IPQ5018/m3_fw.mdt";
|
||||
interrupts-extended = <&wcss_smp2p_in 8 0>,
|
||||
<&wcss_smp2p_in 9 0>,
|
||||
<&wcss_smp2p_in 12 0>,
|
||||
<&wcss_smp2p_in 11 0>;
|
||||
interrupt-names = "fatal",
|
||||
"ready",
|
||||
"spawn-ack",
|
||||
"stop-ack";
|
||||
|
||||
resets = <&gcc GCC_WCSSAON_RESET>,
|
||||
<&gcc GCC_WCSS_BCR>,
|
||||
<&gcc GCC_CE_BCR>;
|
||||
reset-names = "wcss_aon_reset",
|
||||
"wcss_reset",
|
||||
"ce_reset";
|
||||
|
||||
clocks = <&gcc GCC_WCSS_AHB_S_CLK>,
|
||||
<&gcc GCC_WCSS_ACMT_CLK>,
|
||||
<&gcc GCC_WCSS_AXI_M_CLK>;
|
||||
clock-names = "gcc_wcss_ahb_s_clk",
|
||||
"gcc_wcss_acmt_clk",
|
||||
"gcc_wcss_axi_m_clk";
|
||||
|
||||
qcom,halt-regs = <&tcsr_q6_block 0xa000 0xd000 0x0>;
|
||||
|
||||
qcom,smem-states = <&wcss_smp2p_out 8>,
|
||||
<&wcss_smp2p_out 9>,
|
||||
<&wcss_smp2p_out 10>;
|
||||
qcom,smem-state-names = "shutdown",
|
||||
"stop",
|
||||
"spawn";
|
||||
#ifdef __IPQ_MEM_PROFILE_256_MB__
|
||||
memory-region = <&q6_ipq5018_data>, <&m3_dump>,
|
||||
<&q6_etr_region>;
|
||||
#else
|
||||
memory-region = <&q6_ipq5018_data>, <&m3_dump>,
|
||||
<&q6_etr_region>, <&q6_caldb_region>;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
q6_wcss_pd2: remoteproc_pd2 {
|
||||
compatible = "qcom,ipq5018-wcss-pcie-mpd";
|
||||
firmware = "IPQ5018/q6_fw.mdt";
|
||||
m3_firmware = "qcn6122/m3_fw.mdt";
|
||||
interrupts-extended = <&wcss_smp2p_in 16 0>,
|
||||
<&wcss_smp2p_in 17 0>,
|
||||
<&wcss_smp2p_in 20 0>,
|
||||
<&wcss_smp2p_in 19 0>;
|
||||
interrupt-names = "fatal",
|
||||
"ready",
|
||||
"spawn-ack",
|
||||
"stop-ack";
|
||||
|
||||
qcom,smem-states = <&wcss_smp2p_out 16>,
|
||||
<&wcss_smp2p_out 17>,
|
||||
<&wcss_smp2p_out 18>;
|
||||
qcom,smem-state-names = "shutdown",
|
||||
"stop",
|
||||
"spawn";
|
||||
#ifdef __IPQ_MEM_PROFILE_256_MB__
|
||||
memory-region = <&q6_qcn6122_data1>, <&m3_dump_qcn6122_1>,
|
||||
<&q6_qcn6122_etr_1>;
|
||||
#else
|
||||
memory-region = <&q6_qcn6122_data1>, <&m3_dump_qcn6122_1>,
|
||||
<&q6_qcn6122_etr_1>, <&q6_qcn6122_caldb_1>;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
q6_wcss_pd3: remoteproc_pd3 {
|
||||
compatible = "qcom,ipq5018-wcss-pcie-mpd";
|
||||
firmware = "IPQ5018/q6_fw.mdt";
|
||||
interrupts-extended = <&wcss_smp2p_in 24 0>,
|
||||
<&wcss_smp2p_in 25 0>,
|
||||
<&wcss_smp2p_in 28 0>,
|
||||
<&wcss_smp2p_in 27 0>;
|
||||
interrupt-names = "fatal",
|
||||
"ready",
|
||||
"spawn-ack",
|
||||
"stop-ack";
|
||||
|
||||
qcom,smem-states = <&wcss_smp2p_out 24>,
|
||||
<&wcss_smp2p_out 25>,
|
||||
<&wcss_smp2p_out 26>;
|
||||
qcom,smem-state-names = "shutdown",
|
||||
"stop",
|
||||
"spawn";
|
||||
#ifdef __IPQ_MEM_PROFILE_256_MB__
|
||||
memory-region = <&q6_qcn6122_data2>, <&m3_dump_qcn6122_2>,
|
||||
<&q6_qcn6122_etr_2>;
|
||||
#else
|
||||
memory-region = <&q6_qcn6122_data2>, <&m3_dump_qcn6122_2>,
|
||||
<&q6_qcn6122_etr_2>, <&q6_qcn6122_caldb_2>;
|
||||
#endif
|
||||
};
|
||||
};
|
||||
|
||||
&i2c_0 {
|
||||
pinctrl-0 = <&i2c_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&wifi0 {
|
||||
/* IPQ5018 */
|
||||
qcom,multipd_arch;
|
||||
qcom,rproc = <&q6_wcss_pd1>;
|
||||
qcom,userpd-subsys-name = "q6v5_wcss_userpd1";
|
||||
#ifdef __IPQ_MEM_PROFILE_256_MB__
|
||||
qcom,tgt-mem-mode = <2>;
|
||||
#else
|
||||
qcom,tgt-mem-mode = <1>;
|
||||
#endif
|
||||
qcom,board_id = <0x24>;
|
||||
#ifdef __CNSS2__
|
||||
qcom,bdf-addr = <0x4C400000 0x4C400000 0x4C400000 0x0 0x0>;
|
||||
qcom,caldb-addr = <0x4D300000 0x4D300000 0 0 0 0>;
|
||||
qcom,caldb-size = <0x200000>;
|
||||
mem-region = <&q6_ipq5018_data>;
|
||||
1235
|
||||
#else
|
||||
memory-region = <&q6_ipq5018_data>;
|
||||
#endif
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
&wifi1 {
|
||||
/* QCN6122 5G */
|
||||
qcom,multipd_arch;
|
||||
qcom,userpd-subsys-name = "q6v5_wcss_userpd3";
|
||||
qcom,rproc = <&q6_wcss_pd3>;
|
||||
#ifdef __IPQ_MEM_PROFILE_256_MB__
|
||||
qcom,tgt-mem-mode = <2>;
|
||||
#else
|
||||
qcom,tgt-mem-mode = <1>;
|
||||
#endif
|
||||
qcom,board_id = <0x60>;
|
||||
#ifdef __CNSS2__
|
||||
qcom,bdf-addr = <0x4E900000 0x4E900000 0x4E200000 0x0 0x0>;
|
||||
qcom,caldb-addr = <0x4F800000 0x4F800000 0 0 0>;
|
||||
qcom,caldb-size = <0x500000>;
|
||||
mem-region = <&q6_qcn6122_data2>;
|
||||
#else
|
||||
memory-region = <&q6_qcn6122_data2>;
|
||||
#endif
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
&wifi2 {
|
||||
/* QCN6122 6G */
|
||||
qcom,multipd_arch;
|
||||
qcom,userpd-subsys-name = "q6v5_wcss_userpd3";
|
||||
#ifdef __IPQ_MEM_PROFILE_256_MB__
|
||||
qcom,tgt-mem-mode = <2>;
|
||||
#else
|
||||
qcom,tgt-mem-mode = <1>;
|
||||
#endif
|
||||
qcom,board_id = <0xb0>;
|
||||
qcom,bdf-addr = <0x4ED00000 0x4ED00000 0x4E400000 0x0 0x0>;
|
||||
#ifdef __CNSS2__
|
||||
qcom,caldb-addr = <0x4FF00000 0x4FF00000 0 0 0>;
|
||||
#else
|
||||
qcom,caldb-addr = <0x4FF00000>;
|
||||
m3-dump-addr = <0x4FD00000>;
|
||||
#endif
|
||||
qcom,caldb-size = <0x500000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&usb3 {
|
||||
status = "ok";
|
||||
device-power-gpio = <&tlmm 24 1>;
|
||||
};
|
||||
|
||||
&dwc_0 {
|
||||
/delete-property/ #phy-cells;
|
||||
/delete-property/ phys;
|
||||
/delete-property/ phy-names;
|
||||
};
|
||||
|
||||
&hs_m31phy_0 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
&eud {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
&pcie_x1 {
|
||||
perst-gpio = <&tlmm 18 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
&pcie_x2 {
|
||||
perst-gpio = <&tlmm 15 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
&pcie_x1_rp {
|
||||
status = "disabled";
|
||||
|
||||
mhi_0: qcom,mhi@0 {
|
||||
reg = <0 0 0 0 0 >;
|
||||
};
|
||||
};
|
||||
|
||||
&pcie_x2_rp {
|
||||
status = "disabled";
|
||||
|
||||
mhi_1: qcom,mhi@1 {
|
||||
reg = <0 0 0 0 0 >;
|
||||
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,981 @@
|
||||
/dts-v1/;
|
||||
/* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. 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 "ipq5018.dtsi"
|
||||
|
||||
/ {
|
||||
#address-cells = <0x2>;
|
||||
#size-cells = <0x2>;
|
||||
model = "CyberTan EWW631-B1";
|
||||
compatible = "cybertan,eww631-b1", "qcom,ipq5018-mp03.5", "qcom,ipq5018";
|
||||
interrupt-parent = <&intc>;
|
||||
|
||||
aliases {
|
||||
sdhc1 = &sdhc_1; /* SDC1 eMMC slot */
|
||||
serial0 = &blsp1_uart1;
|
||||
serial1 = &blsp1_uart2;
|
||||
ethernet0 = "/soc/dp1";
|
||||
ethernet1 = "/soc/dp2";
|
||||
};
|
||||
|
||||
chosen {
|
||||
bootargs = "console=ttyMSM0,115200,n8 rw init=/init";
|
||||
bootargs-append = " swiotlb=1 coherent_pool=2M";
|
||||
stdout-path = "serial0";
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
#ifdef __IPQ_MEM_PROFILE_256_MB__
|
||||
/* 256 MB Profile
|
||||
* +==========+==============+=========================+
|
||||
* | | | |
|
||||
* | Region | Start Offset | Size |
|
||||
* | | | |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | NSS | 0x40000000 | 8MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | Linux | 0x40800000 | Depends on total memory |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | uboot | 0x4A600000 | 4MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | SBL | 0x4AA00000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | smem | 0x4AB00000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | TZ | 0x4AC00000 | 4MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | Q6 | | |
|
||||
* | code/ | 0x4B000000 | 20MB |
|
||||
* | data | | |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | IPQ5018 | | |
|
||||
* | data | 0x4C400000 | 13MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | IPQ5018 | | |
|
||||
* | M3 Dump | 0x4D100000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | IPQ5018 | | |
|
||||
* | QDSS | 0x4D200000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_1| | |
|
||||
* | data | 0x4D300000 | 13MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_1| | |
|
||||
* | M3 Dump | 0x4E000000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_1| | |
|
||||
* | QDSS | 0x4E100000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_2| | |
|
||||
* | data | 0x4E200000 | 13MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_2| | |
|
||||
* | M3 Dump | 0x4EF00000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_2| | |
|
||||
* | QDSS | 0x4F000000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | |
|
||||
* | Rest of the memory for Linux |
|
||||
* | |
|
||||
* +===================================================+
|
||||
*/
|
||||
q6_mem_regions: q6_mem_regions@4B000000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4B000000 0x0 0x4100000>;
|
||||
};
|
||||
|
||||
q6_code_data: q6_code_data@4B000000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4B000000 0x0 0x1400000>;
|
||||
};
|
||||
|
||||
q6_ipq5018_data: q6_ipq5018_data@4C400000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4C400000 0x0 0xD00000>;
|
||||
};
|
||||
|
||||
m3_dump: m3_dump@4D100000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4D100000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_etr_region: q6_etr_dump@4D200000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4D200000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_data1: q6_qcn6122_data1@4D300000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4D300000 0x0 0xD00000>;
|
||||
};
|
||||
|
||||
m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E000000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4E000000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E100000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4E100000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_data2: q6_qcn6122_data2@4E200000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4E200000 0x0 0xD00000>;
|
||||
};
|
||||
|
||||
m3_dump_qcn6122_2: m3_dump_qcn6122_2@4EF00000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4EF00000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_etr_2: q6_qcn6122_etr_2@4F000000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4F000000 0x0 0x100000>;
|
||||
};
|
||||
#else
|
||||
/* 512MB/1GB Profiles
|
||||
* +==========+==============+=========================+
|
||||
* | | | |
|
||||
* | Region | Start Offset | Size |
|
||||
* | | | |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | NSS | 0x40000000 | 16MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | Linux | 0x41000000 | Depends on total memory |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | uboot | 0x4A600000 | 4MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | SBL | 0x4AA00000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | smem | 0x4AB00000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | TZ | 0x4AC00000 | 4MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | Q6 | | |
|
||||
* | code/ | 0x4B000000 | 20MB |
|
||||
* | data | | |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | IPQ5018 | | |
|
||||
* | data | 0x4C400000 | 14MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | IPQ5018 | | |
|
||||
* | M3 Dump | 0x4D200000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | IPQ5018 | | |
|
||||
* | QDSS | 0x4D300000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | IPQ5018 | | |
|
||||
* | Caldb | 0x4D400000 | 2MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_1| | |
|
||||
* | data | 0x4D600000 | 16MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_1| | |
|
||||
* | M3 Dump | 0x4E600000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_1| | |
|
||||
* | QDSS | 0x4E700000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_1| | |
|
||||
* | Caldb | 0x4E800000 | 5MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_2| | |
|
||||
* | data | 0x4ED00000 | 16MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_2| | |
|
||||
* | M3 Dump | 0x4FD00000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_2| | |
|
||||
* | QDSS | 0x4FE00000 | 1MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | QCN6122_2| | |
|
||||
* | Caldb | 0x4FF00000 | 5MB |
|
||||
* +----------+--------------+-------------------------+
|
||||
* | |
|
||||
* | Rest of the memory for Linux |
|
||||
* | |
|
||||
* +===================================================+
|
||||
*/
|
||||
q6_mem_regions: q6_mem_regions@4B000000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4B000000 0x0 0x5400000>;
|
||||
};
|
||||
|
||||
q6_code_data: q6_code_data@4B000000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4B000000 0x0 01400000>;
|
||||
};
|
||||
|
||||
q6_ipq5018_data: q6_ipq5018_data@4C400000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4C400000 0x0 0xE00000>;
|
||||
};
|
||||
|
||||
m3_dump: m3_dump@4D200000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4D200000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_etr_region: q6_etr_dump@4D300000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4D300000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_caldb_region: q6_caldb_region@4D400000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4D400000 0x0 0x200000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_data1: q6_qcn6122_data1@4D600000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4D600000 0x0 0x1000000>;
|
||||
};
|
||||
|
||||
m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E600000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4E600000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E700000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4E700000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_caldb_1: q6_qcn6122_caldb_1@4E800000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4E800000 0x0 0x500000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_data2: q6_qcn6122_data2@4E900000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4ED00000 0x0 0x1000000>;
|
||||
};
|
||||
|
||||
m3_dump_qcn6122_2: m3_dump_qcn6122_2@4FD00000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4FD00000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_etr_2: q6_qcn6122_etr_2@4FE00000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4FE00000 0x0 0x100000>;
|
||||
};
|
||||
|
||||
q6_qcn6122_caldb_2: q6_qcn6122_caldb_2@4FF00000 {
|
||||
no-map;
|
||||
reg = <0x0 0x4FF00000 0x0 0x500000>;
|
||||
};
|
||||
|
||||
#endif
|
||||
};
|
||||
|
||||
soc {
|
||||
serial@78af000 {
|
||||
status = "ok";
|
||||
};
|
||||
/*
|
||||
blsp1_uart2: serial@78b0000 {
|
||||
pinctrl-0 = <&blsp1_uart_pins>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
*/
|
||||
qpic_bam: dma@7984000{
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
nand: qpic-nand@79b0000 {
|
||||
pinctrl-0 = <&qspi_nand_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
spi_0: spi@78b5000 { /* BLSP1 QUP0 */
|
||||
pinctrl-0 = <&blsp0_spi_pins>;
|
||||
pinctrl-names = "default";
|
||||
cs-select = <0>;
|
||||
status = "ok";
|
||||
|
||||
m25p80@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0>;
|
||||
compatible = "n25q128a11";
|
||||
linux,modalias = "m25p80", "n25q128a11";
|
||||
spi-max-frequency = <50000000>;
|
||||
use-default-sizes;
|
||||
};
|
||||
};
|
||||
|
||||
mdio0: mdio@88000 {
|
||||
status = "ok";
|
||||
|
||||
ethernet-phy@0 {
|
||||
reg = <7>;
|
||||
};
|
||||
};
|
||||
|
||||
mdio1: mdio@90000 {
|
||||
status = "ok";
|
||||
pinctrl-0 = <&mdio1_pins>;
|
||||
pinctrl-names = "default";
|
||||
phy-reset-gpio = <&tlmm 38 0>;
|
||||
|
||||
ethernet-phy@0 {
|
||||
reg = <0>;
|
||||
};
|
||||
|
||||
ethernet-phy@1 {
|
||||
reg = <1>;
|
||||
};
|
||||
|
||||
ethernet-phy@2 {
|
||||
reg = <2>;
|
||||
};
|
||||
|
||||
ethernet-phy@3 {
|
||||
reg = <3>;
|
||||
};
|
||||
|
||||
ethernet-phy@4 {
|
||||
reg = <4>;
|
||||
};
|
||||
};
|
||||
|
||||
ess-instance {
|
||||
num_devices = <0x2>;
|
||||
ess-switch@0x39c00000 {
|
||||
compatible = "qcom,ess-switch-ipq50xx";
|
||||
device_id = <0>;
|
||||
switch_mac_mode = <0xf>; /* mac mode for uniphy instance*/
|
||||
cmnblk_clk = "internal_96MHz"; /* cmnblk clk*/
|
||||
qcom,port_phyinfo {
|
||||
port@0 {
|
||||
port_id = <1>;
|
||||
phy_address = <7>;
|
||||
};
|
||||
port@1 {
|
||||
port_id = <2>;
|
||||
forced-speed = <1000>;
|
||||
forced-duplex = <1>;
|
||||
};
|
||||
};
|
||||
led_source@0 {
|
||||
source = <0>;
|
||||
mode = "normal";
|
||||
speed = "all";
|
||||
blink_en = "enable";
|
||||
active = "high";
|
||||
};
|
||||
};
|
||||
ess-switch1@1 {
|
||||
compatible = "qcom,ess-switch-qca83xx";
|
||||
device_id = <1>;
|
||||
switch_access_mode = "mdio";
|
||||
mdio-bus = <&mdio1>;
|
||||
reset_gpio = <&tlmm 0x26 0>;
|
||||
switch_cpu_bmp = <0x40>; /* cpu port bitmap (Port 6 GMAC) */
|
||||
switch_lan_bmp = <0x3c>; /* lan port bitmap */
|
||||
switch_wan_bmp = <0x0>; /* wan port bitmap */
|
||||
qca,ar8327-initvals = <
|
||||
0x00004 0x7600000 /* PAD0_MODE */
|
||||
0x00008 0x1000000 /* PAD5_MODE */
|
||||
0x0000c 0x80 /* PAD6_MODE */
|
||||
0x00010 0x2613a0 /* PORT6 FORCE MODE*/
|
||||
0x000e4 0xaa545 /* MAC_POWER_SEL */
|
||||
0x000e0 0xc74164de /* SGMII_CTRL */
|
||||
0x0007c 0x4e /* PORT0_STATUS */
|
||||
0x00094 0x4e /* PORT6_STATUS */
|
||||
>;
|
||||
qcom,port_phyinfo {
|
||||
port@0 {
|
||||
port_id = <1>;
|
||||
phy_address = <0>;
|
||||
};
|
||||
port@1 {
|
||||
port_id = <2>;
|
||||
phy_address = <1>;
|
||||
};
|
||||
port@2 {
|
||||
port_id = <3>;
|
||||
phy_address = <2>;
|
||||
};
|
||||
port@3 {
|
||||
port_id = <4>;
|
||||
phy_address = <3>;
|
||||
};
|
||||
port@4 {
|
||||
port_id = <5>;
|
||||
phy_address = <4>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
dp1 {
|
||||
device_type = "network";
|
||||
compatible = "qcom,nss-dp";
|
||||
clocks = <&gcc GCC_SNOC_GMAC1_AXI_CLK>;
|
||||
clock-names = "nss-snoc-gmac-axi-clk";
|
||||
qcom,id = <2>;
|
||||
reg = <0x39D00000 0x10000>;
|
||||
interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
|
||||
qcom,mactype = <2>;
|
||||
local-mac-address = [000000000000];
|
||||
phy-mode = "sgmii";
|
||||
};
|
||||
|
||||
dp2 {
|
||||
device_type = "network";
|
||||
compatible = "qcom,nss-dp";
|
||||
clocks = <&gcc GCC_SNOC_GMAC0_AXI_CLK>;
|
||||
clock-names = "nss-snoc-gmac-axi-clk";
|
||||
qcom,id = <1>;
|
||||
reg = <0x39C00000 0x10000>;
|
||||
interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;
|
||||
qcom,mactype = <2>;
|
||||
qcom,link-poll = <1>;
|
||||
qcom,phy-mdio-addr = <7>;
|
||||
mdio-bus = <&mdio0>;
|
||||
local-mac-address = [000000000000];
|
||||
phy-mode = "sgmii";
|
||||
};
|
||||
|
||||
qcom,test@0 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
/*
|
||||
lpass: lpass@0xA000000{
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pcm: pcm@0xA3C0000{
|
||||
pinctrl-0 = <&audio_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pcm_lb: pcm_lb@0 {
|
||||
status = "disabled";
|
||||
};
|
||||
*/
|
||||
};
|
||||
|
||||
thermal-zones {
|
||||
status = "ok";
|
||||
};
|
||||
};
|
||||
|
||||
&tlmm {
|
||||
pinctrl-0 = <&blsp0_uart_pins>; //<&blsp0_uart_pins &phy_led_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
blsp0_uart_pins: blsp0_uart_pins {
|
||||
blsp0_uart_rx_tx {
|
||||
pins = "gpio20", "gpio21";
|
||||
function = "blsp0_uart0";
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
/*
|
||||
blsp1_uart_pins: blsp1_uart_pins {
|
||||
blsp1_uart_rx_tx {
|
||||
pins = "gpio23", "gpio25", "gpio24", "gpio26";
|
||||
function = "blsp1_uart2";
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
*/
|
||||
blsp0_spi_pins: blsp0_spi_pins {
|
||||
mux {
|
||||
pins = "gpio10", "gpio11", "gpio12", "gpio13";
|
||||
function = "blsp0_spi";
|
||||
drive-strength = <2>;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
qspi_nand_pins: qspi_nand_pins {
|
||||
qspi_clock {
|
||||
pins = "gpio9";
|
||||
function = "qspi_clk";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
|
||||
qspi_cs {
|
||||
pins = "gpio8";
|
||||
function = "qspi_cs";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
|
||||
qspi_data {
|
||||
pins = "gpio4", "gpio5", "gpio6", "gpio7";
|
||||
function = "qspi_data";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
mdio1_pins: mdio_pinmux {
|
||||
mux_0 {
|
||||
pins = "gpio36";
|
||||
function = "mdc";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
|
||||
mux_1 {
|
||||
pins = "gpio37";
|
||||
function = "mdio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
/*
|
||||
phy_led_pins: phy_led_pins {
|
||||
gephy_led_pin {
|
||||
pins = "gpio46";
|
||||
function = "led0";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
*/
|
||||
i2c_pins: i2c_pins {
|
||||
i2c_scl {
|
||||
pins = "gpio25";
|
||||
function = "blsp2_i2c1";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
|
||||
i2c_sda {
|
||||
pins = "gpio26";
|
||||
function = "blsp2_i2c1";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
button_pins: button_pins {
|
||||
reset_button {
|
||||
pins = "gpio28";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
/*
|
||||
audio_pins: audio_pinmux {
|
||||
mux_1 {
|
||||
pins = "gpio24";
|
||||
function = "audio_rxbclk";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
mux_2 {
|
||||
pins = "gpio25";
|
||||
function = "audio_rxfsync";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
mux_3 {
|
||||
pins = "gpio26";
|
||||
function = "audio_rxd";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
mux_4 {
|
||||
pins = "gpio27";
|
||||
function = "audio_txmclk";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
mux_5 {
|
||||
pins = "gpio28";
|
||||
function = "audio_txbclk";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
mux_6 {
|
||||
pins = "gpio29";
|
||||
function = "audio_txfsync";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
mux_7 {
|
||||
pins = "gpio30";
|
||||
function = "audio_txd";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
*/
|
||||
poe_pins: poe_pinmux {
|
||||
/*
|
||||
LAN port PoE output enable
|
||||
H --> enable; L --> disable (Default setting to H)
|
||||
*/
|
||||
mux_0 { /* PoE_OUT_EN */
|
||||
pins = "gpio24";
|
||||
function = "gpio";
|
||||
drive-strength = <2>;
|
||||
bias-pull-up;
|
||||
output-high;
|
||||
};
|
||||
|
||||
mux_1 { /* PSE_INT_N */
|
||||
pins = "gpio27";
|
||||
function = "gpio";
|
||||
bias-pull-up;
|
||||
input;
|
||||
};
|
||||
};
|
||||
|
||||
leds_pins: leds_pinmux {
|
||||
sys_green {
|
||||
pins = "gpio1";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
sys_blue {
|
||||
pins = "gpio30";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
sys_red {
|
||||
pins = "gpio46";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&soc {
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
pinctrl-0 = <&button_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
button@1 {
|
||||
label = "reset";
|
||||
linux,code = <KEY_RESTART>;
|
||||
gpios = <&tlmm 28 GPIO_ACTIVE_LOW>;
|
||||
linux,input-type = <1>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
};
|
||||
|
||||
gpio_leds {
|
||||
compatible = "gpio-leds";
|
||||
pinctrl-0 = <&leds_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
led@1 {
|
||||
label = "sys:green";
|
||||
gpios = <&tlmm 1 GPIO_ACTIVE_HIGH>; /* GPIO_1/ATST_QP0 */
|
||||
default-state="off";
|
||||
};
|
||||
led@30 {
|
||||
label = "sys:blue";
|
||||
gpios = <&tlmm 30 GPIO_ACTIVE_HIGH>; /* GPIO_30 */
|
||||
default-state="on";
|
||||
};
|
||||
led@46 {
|
||||
label = "sys:red";
|
||||
gpios = <&tlmm 46 GPIO_ACTIVE_HIGH>; /* GPIO_46 */
|
||||
default-state="off";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&q6v5_wcss {
|
||||
compatible = "qcom,ipq5018-q6-mpd";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
firmware = "IPQ5018/q6_fw.mdt";
|
||||
reg = <0x0cd00000 0x4040>,
|
||||
<0x1938000 0x8>,
|
||||
<0x193d204 0x4>;
|
||||
reg-names = "qdsp6",
|
||||
"tcsr-msip",
|
||||
"tcsr-q6";
|
||||
resets = <&gcc GCC_WCSSAON_RESET>,
|
||||
<&gcc GCC_WCSS_Q6_BCR>;
|
||||
|
||||
reset-names = "wcss_aon_reset",
|
||||
"wcss_q6_reset";
|
||||
|
||||
clocks = <&gcc GCC_Q6_AXIS_CLK>,
|
||||
<&gcc GCC_WCSS_ECAHB_CLK>,
|
||||
<&gcc GCC_Q6_AXIM_CLK>,
|
||||
<&gcc GCC_Q6_AXIM2_CLK>,
|
||||
<&gcc GCC_Q6_AHB_CLK>,
|
||||
<&gcc GCC_Q6_AHB_S_CLK>,
|
||||
<&gcc GCC_WCSS_AXI_S_CLK>;
|
||||
clock-names = "gcc_q6_axis_clk",
|
||||
"gcc_wcss_ecahb_clk",
|
||||
"gcc_q6_axim_clk",
|
||||
"gcc_q6_axim2_clk",
|
||||
"gcc_q6_ahb_clk",
|
||||
"gcc_q6_ahb_s_clk",
|
||||
"gcc_wcss_axi_s_clk";
|
||||
|
||||
#ifdef __IPQ_MEM_PROFILE_256_MB__
|
||||
memory-region = <&q6_mem_regions>, <&q6_etr_region>;
|
||||
#else
|
||||
memory-region = <&q6_mem_regions>, <&q6_etr_region>,
|
||||
<&q6_caldb_region>;
|
||||
#endif
|
||||
|
||||
qcom,rproc = <&q6v5_wcss>;
|
||||
qcom,bootargs_smem = <507>;
|
||||
boot-args = <0x1 0x4 0x3 0x0F 0x0 0x0>,
|
||||
<0x2 0x4 0x2 0x12 0x0 0x0>;
|
||||
status = "ok";
|
||||
q6_wcss_pd1: remoteproc_pd1@4ab000 {
|
||||
compatible = "qcom,ipq5018-wcss-ahb-mpd";
|
||||
reg = <0x4ab000 0x20>;
|
||||
reg-names = "rmb";
|
||||
firmware = "IPQ5018/q6_fw.mdt";
|
||||
m3_firmware = "IPQ5018/m3_fw.mdt";
|
||||
interrupts-extended = <&wcss_smp2p_in 8 0>,
|
||||
<&wcss_smp2p_in 9 0>,
|
||||
<&wcss_smp2p_in 12 0>,
|
||||
<&wcss_smp2p_in 11 0>;
|
||||
interrupt-names = "fatal",
|
||||
"ready",
|
||||
"spawn-ack",
|
||||
"stop-ack";
|
||||
|
||||
resets = <&gcc GCC_WCSSAON_RESET>,
|
||||
<&gcc GCC_WCSS_BCR>,
|
||||
<&gcc GCC_CE_BCR>;
|
||||
reset-names = "wcss_aon_reset",
|
||||
"wcss_reset",
|
||||
"ce_reset";
|
||||
|
||||
clocks = <&gcc GCC_WCSS_AHB_S_CLK>,
|
||||
<&gcc GCC_WCSS_ACMT_CLK>,
|
||||
<&gcc GCC_WCSS_AXI_M_CLK>;
|
||||
clock-names = "gcc_wcss_ahb_s_clk",
|
||||
"gcc_wcss_acmt_clk",
|
||||
"gcc_wcss_axi_m_clk";
|
||||
|
||||
qcom,halt-regs = <&tcsr_q6_block 0xa000 0xd000 0x0>;
|
||||
|
||||
qcom,smem-states = <&wcss_smp2p_out 8>,
|
||||
<&wcss_smp2p_out 9>,
|
||||
<&wcss_smp2p_out 10>;
|
||||
qcom,smem-state-names = "shutdown",
|
||||
"stop",
|
||||
"spawn";
|
||||
#ifdef __IPQ_MEM_PROFILE_256_MB__
|
||||
memory-region = <&q6_ipq5018_data>, <&m3_dump>,
|
||||
<&q6_etr_region>;
|
||||
#else
|
||||
memory-region = <&q6_ipq5018_data>, <&m3_dump>,
|
||||
<&q6_etr_region>, <&q6_caldb_region>;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
q6_wcss_pd2: remoteproc_pd2 {
|
||||
compatible = "qcom,ipq5018-wcss-pcie-mpd";
|
||||
firmware = "IPQ5018/q6_fw.mdt";
|
||||
m3_firmware = "qcn6122/m3_fw.mdt";
|
||||
interrupts-extended = <&wcss_smp2p_in 16 0>,
|
||||
<&wcss_smp2p_in 17 0>,
|
||||
<&wcss_smp2p_in 20 0>,
|
||||
<&wcss_smp2p_in 19 0>;
|
||||
interrupt-names = "fatal",
|
||||
"ready",
|
||||
"spawn-ack",
|
||||
"stop-ack";
|
||||
|
||||
qcom,smem-states = <&wcss_smp2p_out 16>,
|
||||
<&wcss_smp2p_out 17>,
|
||||
<&wcss_smp2p_out 18>;
|
||||
qcom,smem-state-names = "shutdown",
|
||||
"stop",
|
||||
"spawn";
|
||||
#ifdef __IPQ_MEM_PROFILE_256_MB__
|
||||
memory-region = <&q6_qcn6122_data1>, <&m3_dump_qcn6122_1>,
|
||||
<&q6_qcn6122_etr_1>;
|
||||
#else
|
||||
memory-region = <&q6_qcn6122_data1>, <&m3_dump_qcn6122_1>,
|
||||
<&q6_qcn6122_etr_1>, <&q6_qcn6122_caldb_1>;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
q6_wcss_pd3: remoteproc_pd3 {
|
||||
compatible = "qcom,ipq5018-wcss-pcie-mpd";
|
||||
firmware = "IPQ5018/q6_fw.mdt";
|
||||
interrupts-extended = <&wcss_smp2p_in 24 0>,
|
||||
<&wcss_smp2p_in 25 0>,
|
||||
<&wcss_smp2p_in 28 0>,
|
||||
<&wcss_smp2p_in 27 0>;
|
||||
interrupt-names = "fatal",
|
||||
"ready",
|
||||
"spawn-ack",
|
||||
"stop-ack";
|
||||
|
||||
qcom,smem-states = <&wcss_smp2p_out 24>,
|
||||
<&wcss_smp2p_out 25>,
|
||||
<&wcss_smp2p_out 26>;
|
||||
qcom,smem-state-names = "shutdown",
|
||||
"stop",
|
||||
"spawn";
|
||||
#ifdef __IPQ_MEM_PROFILE_256_MB__
|
||||
memory-region = <&q6_qcn6122_data2>, <&m3_dump_qcn6122_2>,
|
||||
<&q6_qcn6122_etr_2>;
|
||||
#else
|
||||
memory-region = <&q6_qcn6122_data2>, <&m3_dump_qcn6122_2>,
|
||||
<&q6_qcn6122_etr_2>, <&q6_qcn6122_caldb_2>;
|
||||
#endif
|
||||
};
|
||||
};
|
||||
|
||||
&i2c_0 {
|
||||
pinctrl-0 = <&i2c_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
&wifi0 {
|
||||
/* IPQ5018 */
|
||||
qcom,multipd_arch;
|
||||
qcom,rproc = <&q6_wcss_pd1>;
|
||||
qcom,userpd-subsys-name = "q6v5_wcss_userpd1";
|
||||
#ifdef __IPQ_MEM_PROFILE_256_MB__
|
||||
qcom,tgt-mem-mode = <2>;
|
||||
#else
|
||||
qcom,tgt-mem-mode = <1>;
|
||||
#endif
|
||||
qcom,board_id = <0x24>;
|
||||
#ifdef __CNSS2__
|
||||
qcom,bdf-addr = <0x4C400000 0x4C400000 0x4C400000 0x0 0x0 0x0>;
|
||||
qcom,caldb-addr = <0x4D300000 0x4D300000 0 0 0 0>;
|
||||
qcom,caldb-size = <0x200000>;
|
||||
mem-region = <&q6_ipq5018_data>;
|
||||
#else
|
||||
memory-region = <&q6_ipq5018_data>;
|
||||
#endif
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
&wifi1 {
|
||||
/* QCN6122 5G */
|
||||
qcom,multipd_arch;
|
||||
qcom,userpd-subsys-name = "q6v5_wcss_userpd3";
|
||||
qcom,rproc = <&q6_wcss_pd3>;
|
||||
#ifdef __IPQ_MEM_PROFILE_256_MB__
|
||||
qcom,tgt-mem-mode = <2>;
|
||||
#else
|
||||
qcom,tgt-mem-mode = <1>;
|
||||
#endif
|
||||
qcom,board_id = <0x60>;
|
||||
#ifdef __CNSS2__
|
||||
qcom,bdf-addr = <0x4E900000 0x4E900000 0x4E200000 0x0 0x0>;
|
||||
qcom,caldb-addr = <0x4F800000 0x4F800000 0 0 0>;
|
||||
qcom,caldb-size = <0x500000>;
|
||||
mem-region = <&q6_qcn6122_data2>;
|
||||
#else
|
||||
memory-region = <&q6_qcn6122_data2>;
|
||||
#endif
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
&wifi2 {
|
||||
/* QCN6122 6G */
|
||||
qcom,multipd_arch;
|
||||
qcom,userpd-subsys-name = "q6v5_wcss_userpd3";
|
||||
#ifdef __IPQ_MEM_PROFILE_256_MB__
|
||||
qcom,tgt-mem-mode = <2>;
|
||||
#else
|
||||
qcom,tgt-mem-mode = <1>;
|
||||
#endif
|
||||
qcom,board_id = <0xb0>;
|
||||
qcom,bdf-addr = <0x4ED00000 0x4ED00000 0x4E400000 0x0 0x0>;
|
||||
#ifdef __CNSS2__
|
||||
qcom,caldb-addr = <0x4FF00000 0x4FF00000 0 0 0>;
|
||||
#else
|
||||
qcom,caldb-addr = <0x4FF00000>;
|
||||
m3-dump-addr = <0x4FD00000>;
|
||||
#endif
|
||||
qcom,caldb-size = <0x500000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&usb3 {
|
||||
status = "ok";
|
||||
device-power-gpio = <&tlmm 24 1>;
|
||||
};
|
||||
|
||||
&dwc_0 {
|
||||
/delete-property/ #phy-cells;
|
||||
/delete-property/ phys;
|
||||
/delete-property/ phy-names;
|
||||
};
|
||||
|
||||
&hs_m31phy_0 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
&eud {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
&pcie_x1 {
|
||||
perst-gpio = <&tlmm 18 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
&pcie_x2 {
|
||||
perst-gpio = <&tlmm 15 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
&pcie_x1_rp {
|
||||
status = "disabled";
|
||||
|
||||
mhi_0: qcom,mhi@0 {
|
||||
reg = <0 0 0 0 0 >;
|
||||
};
|
||||
};
|
||||
|
||||
&pcie_x2_rp {
|
||||
status = "disabled";
|
||||
|
||||
mhi_1: qcom,mhi@1 {
|
||||
reg = <0 0 0 0 0 >;
|
||||
|
||||
};
|
||||
};
|
||||
@@ -340,7 +340,7 @@
|
||||
status = "ok";
|
||||
pinctrl-0 = <&mdio1_pins>;
|
||||
pinctrl-names = "default";
|
||||
phy-reset-gpio = <&tlmm 39 0>;
|
||||
phy-reset-gpio = <&tlmm 16 0>;
|
||||
|
||||
ethernet-phy@0 {
|
||||
reg = <0x00>;
|
||||
|
||||
@@ -18,6 +18,28 @@ define Device/cig_wf186w
|
||||
endef
|
||||
TARGET_DEVICES += cig_wf186w
|
||||
|
||||
define Device/cybertan_eww631_a1
|
||||
DEVICE_TITLE := CyberTan EWW631-A1
|
||||
DEVICE_DTS := qcom-ipq5018-eww631-a1
|
||||
SUPPORTED_DEVICES := cybertan,eww631-a1
|
||||
DEVICE_PACKAGES := ath11k-wifi-cybertan-eww631-a1 ath11k-firmware-ipq50xx-spruce ath11k-firmware-qcn6122
|
||||
DEVICE_DTS_CONFIG := config@mp03.5-c1
|
||||
IMAGES := sysupgrade.tar nand-factory.bin nand-factory.ubi
|
||||
IMAGE/nand-factory.ubi := append-ubi
|
||||
endef
|
||||
TARGET_DEVICES += cybertan_eww631_a1
|
||||
|
||||
define Device/cybertan_eww631_b1
|
||||
DEVICE_TITLE := CyberTan EWW631-B1
|
||||
DEVICE_DTS := qcom-ipq5018-eww631-b1
|
||||
SUPPORTED_DEVICES := cybertan,eww631-b1
|
||||
DEVICE_PACKAGES := ath11k-wifi-cybertan-eww631-b1 ath11k-firmware-ipq50xx-spruce ath11k-firmware-qcn6122
|
||||
DEVICE_DTS_CONFIG := config@mp03.5-c1
|
||||
IMAGES := sysupgrade.tar nand-factory.bin nand-factory.ubi
|
||||
IMAGE/nand-factory.ubi := append-ubi
|
||||
endef
|
||||
TARGET_DEVICES += cybertan_eww631_b1
|
||||
|
||||
define Device/edgecore_eap104
|
||||
DEVICE_TITLE := EdgeCore EAP104
|
||||
DEVICE_DTS := qcom-ipq5018-eap104
|
||||
|
||||
@@ -51,3 +51,17 @@ define KernelPackage/tpm-tis-i2c/description
|
||||
within Linux.
|
||||
endef
|
||||
$(eval $(call KernelPackage,tpm-tis-i2c))
|
||||
|
||||
define KernelPackage/bootconfig
|
||||
SUBMENU:=Other modules
|
||||
TITLE:=Bootconfig partition for failsafe
|
||||
KCONFIG:=CONFIG_BOOTCONFIG_PARTITION
|
||||
FILES:=$(LINUX_DIR)/drivers/platform/ipq/bootconfig.ko@ge4.4
|
||||
AUTOLOAD:=$(call AutoLoad,56,bootconfig,1)
|
||||
endef
|
||||
|
||||
define KernelPackage/bootconfig/description
|
||||
Bootconfig partition for failsafe
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,bootconfig))
|
||||
|
||||
13
feeds/ipq807x_v5.4/ipq50xx/patches/300-bootconfig.patch
Normal file
13
feeds/ipq807x_v5.4/ipq50xx/patches/300-bootconfig.patch
Normal file
@@ -0,0 +1,13 @@
|
||||
Index: linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d/drivers/platform/ipq/bootconfig.c
|
||||
===================================================================
|
||||
--- linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d.orig/drivers/platform/ipq/bootconfig.c
|
||||
+++ linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d/drivers/platform/ipq/bootconfig.c
|
||||
@@ -366,7 +366,7 @@ static int __init bootconfig_partition_i
|
||||
continue;
|
||||
|
||||
partname_dir[i] = proc_mkdir(part_info[i].name, boot_info_dir);
|
||||
- if (partname_dir != NULL) {
|
||||
+ if (partname_dir[i] != NULL) {
|
||||
proc_create_data("primaryboot", S_IRUGO,
|
||||
partname_dir[i],
|
||||
&primaryboot_ops,
|
||||
54
feeds/ipq807x_v5.4/ipq50xx/patches/301-diag_char.patch
Normal file
54
feeds/ipq807x_v5.4/ipq50xx/patches/301-diag_char.patch
Normal file
@@ -0,0 +1,54 @@
|
||||
Index: linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d/drivers/char/diag/diagchar_core.c
|
||||
===================================================================
|
||||
--- linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d.orig/drivers/char/diag/diagchar_core.c
|
||||
+++ linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d/drivers/char/diag/diagchar_core.c
|
||||
@@ -763,11 +763,6 @@ static void diag_cmd_invalidate_polling(
|
||||
driver->polling_reg_flag = 0;
|
||||
list_for_each_safe(start, temp, &driver->cmd_reg_list) {
|
||||
item = list_entry(start, struct diag_cmd_reg_t, link);
|
||||
- if (&item->entry == NULL) {
|
||||
- pr_err("diag: In %s, unable to search command\n",
|
||||
- __func__);
|
||||
- return;
|
||||
- }
|
||||
polling = diag_cmd_chk_polling(&item->entry);
|
||||
if (polling == DIAG_CMD_POLLING) {
|
||||
driver->polling_reg_flag = 1;
|
||||
@@ -829,11 +824,6 @@ struct diag_cmd_reg_entry_t *diag_cmd_se
|
||||
|
||||
list_for_each_safe(start, temp, &driver->cmd_reg_list) {
|
||||
item = list_entry(start, struct diag_cmd_reg_t, link);
|
||||
- if (&item->entry == NULL) {
|
||||
- pr_err("diag: In %s, unable to search command\n",
|
||||
- __func__);
|
||||
- return NULL;
|
||||
- }
|
||||
temp_entry = &item->entry;
|
||||
if (temp_entry->cmd_code == entry->cmd_code &&
|
||||
temp_entry->subsys_id == entry->subsys_id &&
|
||||
@@ -907,12 +897,6 @@ void diag_cmd_remove_reg_by_pid(int pid)
|
||||
mutex_lock(&driver->cmd_reg_mutex);
|
||||
list_for_each_safe(start, temp, &driver->cmd_reg_list) {
|
||||
item = list_entry(start, struct diag_cmd_reg_t, link);
|
||||
- if (&item->entry == NULL) {
|
||||
- pr_err("diag: In %s, unable to search command\n",
|
||||
- __func__);
|
||||
- mutex_unlock(&driver->cmd_reg_mutex);
|
||||
- return;
|
||||
- }
|
||||
if (item->pid == pid) {
|
||||
list_del(&item->link);
|
||||
kfree(item);
|
||||
@@ -931,12 +915,6 @@ void diag_cmd_remove_reg_by_proc(int pro
|
||||
mutex_lock(&driver->cmd_reg_mutex);
|
||||
list_for_each_safe(start, temp, &driver->cmd_reg_list) {
|
||||
item = list_entry(start, struct diag_cmd_reg_t, link);
|
||||
- if (&item->entry == NULL) {
|
||||
- pr_err("diag: In %s, unable to search command\n",
|
||||
- __func__);
|
||||
- mutex_unlock(&driver->cmd_reg_mutex);
|
||||
- return;
|
||||
- }
|
||||
if (item->proc == proc) {
|
||||
list_del(&item->link);
|
||||
kfree(item);
|
||||
@@ -0,0 +1,16 @@
|
||||
Index: linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d.orig/mtd/nand/raw/nand_ids.c
|
||||
===================================================================
|
||||
--- linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d.orig/drivers/mtd/nand/raw/nand_ids.c
|
||||
+++ linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d/drivers/mtd/nand/raw/nand_ids.c
|
||||
@@ -79,9 +79,9 @@
|
||||
{ .id = {0xc2, 0xb7} },
|
||||
SZ_4K, SZ_512, SZ_256K, 0, 2, 256, NAND_ECC_INFO(8, SZ_512), 0},
|
||||
|
||||
- {"MX35UF2GE4AD-Z4I SPI NAND 2G 1.8V",
|
||||
+ {"MX35UF2GE4AD-Z4I SPI NAND 2G 1.8V 8-bit",
|
||||
{ .id = {0xc2, 0xa6} },
|
||||
- SZ_2K, SZ_128, SZ_128K, 0, 2, 160, NAND_ECC_INFO(4, SZ_512), 0 },
|
||||
+ SZ_2K, SZ_256, SZ_128K, 0, 2, 128, NAND_ECC_INFO(8, SZ_512), 0 },
|
||||
|
||||
{"GD5F1GQ5REYIH SPI NAND 1G 1.8V",
|
||||
{ .id = {0xc8, 0x21} },
|
||||
@@ -20,7 +20,7 @@ DEFAULT_PACKAGES += kmod-qca-nss-dp kmod-qca-ssdk swconfig \
|
||||
kmod-usb-phy-ipq807x kmod-usb-dwc3-qcom-internal \
|
||||
kmod-ath11k-ahb ath11k-firmware-ipq60xx \
|
||||
kmod-gpio-button-hotplug iwinfo \
|
||||
qca-ssdk-shell \
|
||||
qca-ssdk-shell kmod-bootconfig \
|
||||
uboot-envtools -procd-ujail
|
||||
|
||||
$(eval $(call BuildTarget))
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#!/bin/sh
|
||||
|
||||
[ -e /lib/firmware/$FIRMWARE ] && exit 0
|
||||
|
||||
. /lib/functions.sh
|
||||
@@ -98,6 +97,18 @@ ath11k-macs)
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
ath11k/IPQ6018/hw1.0/board.bin)
|
||||
case "$board" in
|
||||
cig,wf188n)
|
||||
country=`cat /etc/ucentral/country`
|
||||
if [ "$country" == "CA" ]; then
|
||||
ln -s /lib/firmware/ath11k/IPQ6018/hw1.0/board.bin.CA /lib/firmware/ath11k/IPQ6018/hw1.0/board.bin
|
||||
else
|
||||
ln -s /lib/firmware/ath11k/IPQ6018/hw1.0/board.bin.US /lib/firmware/ath11k/IPQ6018/hw1.0/board.bin
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
|
||||
@@ -10,7 +10,8 @@ boot() {
|
||||
;;
|
||||
edgecore,eap101|\
|
||||
edgecore,eap102|\
|
||||
edgecore,oap102)
|
||||
edgecore,oap102|\
|
||||
edgecore.eap104)
|
||||
avail=$(fw_printenv -n upgrade_available)
|
||||
[ ${avail} -eq 0 ] && fw_setenv upgrade_available 1
|
||||
fw_setenv bootcount 0
|
||||
|
||||
@@ -247,8 +247,8 @@ nand_do_upgrade_success() {
|
||||
local conf_tar="/tmp/sysupgrade.tgz"
|
||||
sync
|
||||
[ "$CI_BOOTCFG" = 1 ] && nand_qca_update_bootconfig
|
||||
[ -f "$conf_tar" ] && nand_restore_config "$conf_tar" && sync
|
||||
[ -n "$CI_FWSETENV" ] && fw_setenv $CI_FWSETENV
|
||||
[ -f "$conf_tar" ] && nand_restore_config "$conf_tar"
|
||||
echo "sysupgrade successful"
|
||||
umount -a
|
||||
reboot -f
|
||||
|
||||
@@ -122,10 +122,10 @@ platform_do_upgrade() {
|
||||
else
|
||||
if grep -q rootfs1 /proc/cmdline; then
|
||||
CI_UBIPART="rootfs2"
|
||||
fw_setenv active 2 || exit 1
|
||||
CI_FWSETENV="active 2"
|
||||
else
|
||||
CI_UBIPART="rootfs1"
|
||||
fw_setenv active 1 || exit 1
|
||||
CI_FWSETENV="active 1"
|
||||
fi
|
||||
fi
|
||||
nand_upgrade_tar "$1"
|
||||
|
||||
@@ -2,30 +2,21 @@ KERNEL_LOADADDR := 0x41080000
|
||||
|
||||
DEVICE_VARS += CE_TYPE
|
||||
|
||||
define Device/cig_wf188n-ca
|
||||
define Device/cig_wf188n
|
||||
DEVICE_TITLE := Cigtech WF-188n
|
||||
DEVICE_DTS := qcom-ipq6018-cig-wf188n
|
||||
DEVICE_DTS_CONFIG := config@cp03-c1
|
||||
SUPPORTED_DEVICES := cig,wf188n
|
||||
DEVICE_PACKAGES := ath11k-wifi-cig-wf188n-ca uboot-env
|
||||
DEVICE_PACKAGES := ath11k-wifi-cig-wf188n uboot-env
|
||||
endef
|
||||
TARGET_DEVICES += cig_wf188n-ca
|
||||
|
||||
define Device/cig_wf188n-us
|
||||
DEVICE_TITLE := Cigtech WF-188n
|
||||
DEVICE_DTS := qcom-ipq6018-cig-wf188n
|
||||
DEVICE_DTS_CONFIG := config@cp03-c1
|
||||
SUPPORTED_DEVICES := cig,wf188n
|
||||
DEVICE_PACKAGES := ath11k-wifi-cig-wf188n-us uboot-env
|
||||
endef
|
||||
TARGET_DEVICES += cig_wf188n-us
|
||||
TARGET_DEVICES += cig_wf188n
|
||||
|
||||
define Device/hfcl_ion4xe
|
||||
DEVICE_TITLE := HFCL ION4Xe
|
||||
DEVICE_DTS := qcom-ipq6018-hfcl-ion4xe
|
||||
DEVICE_DTS_CONFIG := config@cp01-c1
|
||||
SUPPORTED_DEVICES := hfcl,ion4xe
|
||||
DEVICE_PACKAGES := ath11k-wifi-qcom-ipq6018 uboot-envtools kmod-hwmon-lm75
|
||||
DEVICE_PACKAGES := ath11k-wifi-hfcl-ion4xe uboot-envtools kmod-hwmon-lm75
|
||||
endef
|
||||
TARGET_DEVICES += hfcl_ion4xe
|
||||
|
||||
@@ -101,14 +92,14 @@ define Device/wallys_dr6018
|
||||
endef
|
||||
TARGET_DEVICES += wallys_dr6018
|
||||
|
||||
define Device/wallys_dr6018_v4
|
||||
define Device/wallys_dr6018-v4
|
||||
DEVICE_TITLE := Wallys DR6018 V4
|
||||
DEVICE_DTS := qcom-ipq6018-wallys-dr6018-v4
|
||||
DEVICE_DTS_CONFIG := config@cp01-c4
|
||||
SUPPORTED_DEVICES := wallys,dr6018-v4
|
||||
DEVICE_PACKAGES := ath11k-wifi-wallys-dr6018-v4 uboot-envtools ath11k-firmware-qcn9000
|
||||
endef
|
||||
TARGET_DEVICES += wallys_dr6018_v4
|
||||
TARGET_DEVICES += wallys_dr6018-v4
|
||||
|
||||
define Device/glinet_ax1800
|
||||
DEVICE_TITLE := GL-iNet AX1800
|
||||
|
||||
@@ -76,3 +76,17 @@ define KernelPackage/usb-dwc3-qcom-internal/description
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,usb-dwc3-qcom-internal))
|
||||
|
||||
define KernelPackage/bootconfig
|
||||
SUBMENU:=Other modules
|
||||
TITLE:=Bootconfig partition for failsafe
|
||||
KCONFIG:=CONFIG_BOOTCONFIG_PARTITION
|
||||
FILES:=$(LINUX_DIR)/drivers/platform/ipq/bootconfig.ko@ge4.4
|
||||
AUTOLOAD:=$(call AutoLoad,56,bootconfig,1)
|
||||
endef
|
||||
|
||||
define KernelPackage/bootconfig/description
|
||||
Bootconfig partition for failsafe
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,bootconfig))
|
||||
|
||||
13
feeds/ipq807x_v5.4/ipq60xx/patches/300-bootconfig.patch
Normal file
13
feeds/ipq807x_v5.4/ipq60xx/patches/300-bootconfig.patch
Normal file
@@ -0,0 +1,13 @@
|
||||
Index: linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d/drivers/platform/ipq/bootconfig.c
|
||||
===================================================================
|
||||
--- linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d.orig/drivers/platform/ipq/bootconfig.c
|
||||
+++ linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d/drivers/platform/ipq/bootconfig.c
|
||||
@@ -366,7 +366,7 @@ static int __init bootconfig_partition_i
|
||||
continue;
|
||||
|
||||
partname_dir[i] = proc_mkdir(part_info[i].name, boot_info_dir);
|
||||
- if (partname_dir != NULL) {
|
||||
+ if (partname_dir[i] != NULL) {
|
||||
proc_create_data("primaryboot", S_IRUGO,
|
||||
partname_dir[i],
|
||||
&primaryboot_ops,
|
||||
54
feeds/ipq807x_v5.4/ipq60xx/patches/301-diag_char.patch
Normal file
54
feeds/ipq807x_v5.4/ipq60xx/patches/301-diag_char.patch
Normal file
@@ -0,0 +1,54 @@
|
||||
Index: linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d/drivers/char/diag/diagchar_core.c
|
||||
===================================================================
|
||||
--- linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d.orig/drivers/char/diag/diagchar_core.c
|
||||
+++ linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d/drivers/char/diag/diagchar_core.c
|
||||
@@ -763,11 +763,6 @@ static void diag_cmd_invalidate_polling(
|
||||
driver->polling_reg_flag = 0;
|
||||
list_for_each_safe(start, temp, &driver->cmd_reg_list) {
|
||||
item = list_entry(start, struct diag_cmd_reg_t, link);
|
||||
- if (&item->entry == NULL) {
|
||||
- pr_err("diag: In %s, unable to search command\n",
|
||||
- __func__);
|
||||
- return;
|
||||
- }
|
||||
polling = diag_cmd_chk_polling(&item->entry);
|
||||
if (polling == DIAG_CMD_POLLING) {
|
||||
driver->polling_reg_flag = 1;
|
||||
@@ -829,11 +824,6 @@ struct diag_cmd_reg_entry_t *diag_cmd_se
|
||||
|
||||
list_for_each_safe(start, temp, &driver->cmd_reg_list) {
|
||||
item = list_entry(start, struct diag_cmd_reg_t, link);
|
||||
- if (&item->entry == NULL) {
|
||||
- pr_err("diag: In %s, unable to search command\n",
|
||||
- __func__);
|
||||
- return NULL;
|
||||
- }
|
||||
temp_entry = &item->entry;
|
||||
if (temp_entry->cmd_code == entry->cmd_code &&
|
||||
temp_entry->subsys_id == entry->subsys_id &&
|
||||
@@ -907,12 +897,6 @@ void diag_cmd_remove_reg_by_pid(int pid)
|
||||
mutex_lock(&driver->cmd_reg_mutex);
|
||||
list_for_each_safe(start, temp, &driver->cmd_reg_list) {
|
||||
item = list_entry(start, struct diag_cmd_reg_t, link);
|
||||
- if (&item->entry == NULL) {
|
||||
- pr_err("diag: In %s, unable to search command\n",
|
||||
- __func__);
|
||||
- mutex_unlock(&driver->cmd_reg_mutex);
|
||||
- return;
|
||||
- }
|
||||
if (item->pid == pid) {
|
||||
list_del(&item->link);
|
||||
kfree(item);
|
||||
@@ -931,12 +915,6 @@ void diag_cmd_remove_reg_by_proc(int pro
|
||||
mutex_lock(&driver->cmd_reg_mutex);
|
||||
list_for_each_safe(start, temp, &driver->cmd_reg_list) {
|
||||
item = list_entry(start, struct diag_cmd_reg_t, link);
|
||||
- if (&item->entry == NULL) {
|
||||
- pr_err("diag: In %s, unable to search command\n",
|
||||
- __func__);
|
||||
- mutex_unlock(&driver->cmd_reg_mutex);
|
||||
- return;
|
||||
- }
|
||||
if (item->proc == proc) {
|
||||
list_del(&item->link);
|
||||
kfree(item);
|
||||
@@ -20,7 +20,7 @@ DEFAULT_PACKAGES += kmod-qca-nss-dp kmod-qca-ssdk swconfig \
|
||||
kmod-usb-phy-ipq807x kmod-usb-dwc3-qcom-internal \
|
||||
kmod-ath11k-ahb ath11k-firmware-ipq807x \
|
||||
kmod-gpio-button-hotplug iwinfo \
|
||||
qca-ssdk-shell \
|
||||
qca-ssdk-shell kmod-bootconfig \
|
||||
uboot-envtools -procd-ujail
|
||||
|
||||
$(eval $(call BuildTarget))
|
||||
|
||||
@@ -18,6 +18,9 @@ edgecore,oap102)
|
||||
ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wifi5" "phy0tpt"
|
||||
ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy1tpt"
|
||||
;;
|
||||
cybertan,eww631-b1)
|
||||
ucidef_set_led_default "power" "POWER" "sys:blue" "on"
|
||||
;;
|
||||
esac
|
||||
|
||||
board_config_flush
|
||||
|
||||
@@ -16,9 +16,9 @@ ath11k_generate_macs() {
|
||||
echo -ne \\x${mac3//:/\\x} >> /lib/firmware/ath11k-macs
|
||||
}
|
||||
|
||||
ath11k_generate_macs_wf194() {
|
||||
ath11k_generate_macs_wf196() {
|
||||
touch /lib/firmware/ath11k-macs
|
||||
mac=$(grep BaseMacAddress= /dev/mtd14 | cut -dx -f2)
|
||||
mac=$(grep BaseMacAddress= /dev/mtd18 | cut -dx -f2)
|
||||
eth=$(macaddr_canonicalize $mac)
|
||||
mac1=$(macaddr_add $eth 2)
|
||||
mac2=$(macaddr_add $eth 3)
|
||||
@@ -92,8 +92,32 @@ ath11k-macs)
|
||||
edgecore,eap106)
|
||||
ath11k_generate_macs
|
||||
;;
|
||||
cig,wf194c)
|
||||
ath11k_generate_macs_wf194
|
||||
cig,wf196)
|
||||
ath11k_generate_macs_wf196
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
ath11k/IPQ8074/hw2.0/board.bin)
|
||||
case "$board" in
|
||||
cig,wf196)
|
||||
country=`cat /etc/ucentral/country`
|
||||
if [ "$country" == "CA" ]; then
|
||||
ln -s /lib/firmware/ath11k/IPQ8074/hw2.0/board.bin.CA /lib/firmware/ath11k/IPQ8074/hw2.0/board.bin
|
||||
else
|
||||
ln -s /lib/firmware/ath11k/IPQ8074/hw2.0/board.bin.US /lib/firmware/ath11k/IPQ8074/hw2.0/board.bin
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
ath11k/QCN9074/hw1.0/board.bin)
|
||||
case "$board" in
|
||||
cig,wf196)
|
||||
country=`cat /etc/ucentral/country`
|
||||
if [ "$country" == "CA" ]; then
|
||||
ln -s /lib/firmware/ath11k/QCN9074/hw1.0/board.bin.CA /lib/firmware/ath11k/QCN9074/hw1.0/board.bin
|
||||
else
|
||||
ln -s /lib/firmware/ath11k/QCN9074/hw1.0/board.bin.US /lib/firmware/ath11k/QCN9074/hw1.0/board.bin
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
|
||||
@@ -10,7 +10,8 @@ boot() {
|
||||
;;
|
||||
edgecore,eap101|\
|
||||
edgecore,eap102|\
|
||||
edgecore,oap102)
|
||||
edgecore,oap102|\
|
||||
edgecore.eap104)
|
||||
avail=$(fw_printenv -n upgrade_available)
|
||||
[ ${avail} -eq 0 ] && fw_setenv upgrade_available 1
|
||||
fw_setenv bootcount 0
|
||||
|
||||
@@ -247,8 +247,8 @@ nand_do_upgrade_success() {
|
||||
local conf_tar="/tmp/sysupgrade.tgz"
|
||||
sync
|
||||
[ "$CI_BOOTCFG" = 1 ] && nand_qca_update_bootconfig
|
||||
[ -f "$conf_tar" ] && nand_restore_config "$conf_tar" && sync
|
||||
[ -n "$CI_FWSETENV" ] && fw_setenv $CI_FWSETENV
|
||||
[ -f "$conf_tar" ] && nand_restore_config "$conf_tar"
|
||||
echo "sysupgrade successful"
|
||||
umount -a
|
||||
reboot -f
|
||||
|
||||
@@ -61,12 +61,16 @@ platform_do_upgrade() {
|
||||
if [ "$(find_mtd_chardev rootfs)" ]; then
|
||||
CI_UBIPART="rootfs"
|
||||
else
|
||||
if grep -q rootfs1 /proc/cmdline; then
|
||||
if [ -e /tmp/downgrade ]; then
|
||||
CI_UBIPART="rootfs1"
|
||||
{ echo 'active 1'; echo 'upgrade_available 0'; } > /tmp/fw_setenv.txt || exit 1
|
||||
CI_FWSETENV="-s /tmp/fw_setenv.txt"
|
||||
elif grep -q rootfs1 /proc/cmdline; then
|
||||
CI_UBIPART="rootfs2"
|
||||
fw_setenv active 2 || exit 1
|
||||
CI_FWSETENV="active 2"
|
||||
else
|
||||
CI_UBIPART="rootfs1"
|
||||
fw_setenv active 1 || exit 1
|
||||
CI_FWSETENV="active 1"
|
||||
fi
|
||||
fi
|
||||
nand_upgrade_tar "$1"
|
||||
|
||||
@@ -29,8 +29,79 @@
|
||||
stdout-path = "serial0";
|
||||
};
|
||||
|
||||
gpio-export {
|
||||
compatible = "gpio-export";
|
||||
#size-cells = <0>;
|
||||
|
||||
mcu-enable {
|
||||
gpio-export,name = "mcu-enable";
|
||||
gpio-export,output = <0>;
|
||||
gpios = <&tlmm 54 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
usb-hub-enable {
|
||||
gpio-export,name = "usb-hub-enable";
|
||||
gpio-export,output = <1>;
|
||||
gpios = <&tlmm 55 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
usb-rear-power {
|
||||
gpio-export,name = "usb-rear-power";
|
||||
gpio-export,output = <1>;
|
||||
gpios = <&tlmm 29 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
usb-side-power {
|
||||
gpio-export,name = "usb-side-power";
|
||||
gpio-export,output = <1>;
|
||||
gpios = <&tlmm 30 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
|
||||
soc {
|
||||
pinctrl@1000000 {
|
||||
pinctrl-0 = <&mcu_rst &mcu_rsv &usb_rear_pwr &usb_side_pwr &usb_hub_rst>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
mcu_rst: mcu_rst_pins {
|
||||
pins = "gpio54";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
output-low;
|
||||
};
|
||||
|
||||
mcu_rsv: mcu_rsv_pins {
|
||||
pins = "gpio56";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
|
||||
usb_rear_pwr: usb_rear_pwr_pins {
|
||||
pins = "gpio29";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
output-high;
|
||||
};
|
||||
|
||||
usb_side_pwr: usb_side_pwr_pins {
|
||||
pins = "gpio30";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
output-high;
|
||||
};
|
||||
|
||||
usb_hub_rst: usb_hub_rst_pins {
|
||||
pins = "gpio55";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
output-high;
|
||||
};
|
||||
|
||||
button_pins: button_pins {
|
||||
reset_button {
|
||||
pins = "gpio66";
|
||||
@@ -40,30 +111,6 @@
|
||||
};
|
||||
};
|
||||
|
||||
usb_mux_sel_pins: usb_mux_pins {
|
||||
mux {
|
||||
pins = "gpio27";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
|
||||
pcie0_pins: pcie_pins {
|
||||
pcie0_rst {
|
||||
pins = "gpio58";
|
||||
function = "pcie0_rst";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
pcie0_wake {
|
||||
pins = "gpio59";
|
||||
function = "pcie0_wake";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
|
||||
mdio_pins: mdio_pinmux {
|
||||
mux_0 {
|
||||
pins = "gpio68";
|
||||
@@ -170,19 +217,6 @@
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
phy@84000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
phy@86000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
pci@20000000 {
|
||||
perst-gpio = <&tlmm 58 1>;
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
pinctrl-0 = <&button_pins>;
|
||||
|
||||
@@ -29,8 +29,79 @@
|
||||
stdout-path = "serial0";
|
||||
};
|
||||
|
||||
gpio-export {
|
||||
compatible = "gpio-export";
|
||||
#size-cells = <0>;
|
||||
|
||||
mcu-enable {
|
||||
gpio-export,name = "mcu-enable";
|
||||
gpio-export,output = <0>;
|
||||
gpios = <&tlmm 54 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
usb-hub-enable {
|
||||
gpio-export,name = "usb-hub-enable";
|
||||
gpio-export,output = <1>;
|
||||
gpios = <&tlmm 55 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
usb-rear-power {
|
||||
gpio-export,name = "usb-rear-power";
|
||||
gpio-export,output = <1>;
|
||||
gpios = <&tlmm 29 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
usb-side-power {
|
||||
gpio-export,name = "usb-side-power";
|
||||
gpio-export,output = <1>;
|
||||
gpios = <&tlmm 30 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
|
||||
soc {
|
||||
pinctrl@1000000 {
|
||||
pinctrl-0 = <&mcu_rst &mcu_rsv &usb_rear_pwr &usb_side_pwr &usb_hub_rst>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
mcu_rst: mcu_rst_pins {
|
||||
pins = "gpio54";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
output-low;
|
||||
};
|
||||
|
||||
mcu_rsv: mcu_rsv_pins {
|
||||
pins = "gpio56";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
|
||||
usb_rear_pwr: usb_rear_pwr_pins {
|
||||
pins = "gpio29";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
output-high;
|
||||
};
|
||||
|
||||
usb_side_pwr: usb_side_pwr_pins {
|
||||
pins = "gpio30";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
output-high;
|
||||
};
|
||||
|
||||
usb_hub_rst: usb_hub_rst_pins {
|
||||
pins = "gpio55";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
output-high;
|
||||
};
|
||||
|
||||
button_pins: button_pins {
|
||||
reset_button {
|
||||
pins = "gpio66";
|
||||
@@ -40,30 +111,6 @@
|
||||
};
|
||||
};
|
||||
|
||||
usb_mux_sel_pins: usb_mux_pins {
|
||||
mux {
|
||||
pins = "gpio27";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
|
||||
pcie0_pins: pcie_pins {
|
||||
pcie0_rst {
|
||||
pins = "gpio58";
|
||||
function = "pcie0_rst";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
pcie0_wake {
|
||||
pins = "gpio59";
|
||||
function = "pcie0_wake";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
|
||||
mdio_pins: mdio_pinmux {
|
||||
mux_0 {
|
||||
pins = "gpio68";
|
||||
@@ -170,19 +217,6 @@
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
phy@84000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
phy@86000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
pci@20000000 {
|
||||
perst-gpio = <&tlmm 58 1>;
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
pinctrl-0 = <&button_pins>;
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
aliases {
|
||||
serial0 = &blsp1_uart5;
|
||||
serial1 = &blsp1_uart3;
|
||||
/* Aliases as required by u-boot to patch MAC addresses */
|
||||
ethernet0 = "/soc/dp1";
|
||||
ethernet1 = "/soc/dp2";
|
||||
@@ -29,6 +30,17 @@
|
||||
stdout-path = "serial0";
|
||||
};
|
||||
|
||||
gpio-export {
|
||||
compatible = "gpio-export";
|
||||
#size-cells = <0>;
|
||||
|
||||
mcu-enable {
|
||||
gpio-export,name = "mcu-enable";
|
||||
gpio-export,output = <0>;
|
||||
gpios = <&tlmm 34 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
/* No Pine attach in 256M profile */
|
||||
#if !defined(__IPQ_MEM_PROFILE_256_MB__)
|
||||
@@ -130,6 +142,26 @@
|
||||
|
||||
soc {
|
||||
pinctrl@1000000 {
|
||||
pinctrl-0 = <&mcu_rst>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
mcu_rst: mcu_rst_pins {
|
||||
pins = "gpio34";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
output-low;
|
||||
};
|
||||
|
||||
mcu_uart: mcu_uart_pins {
|
||||
mux {
|
||||
pins = "gpio48", "gpio49";
|
||||
function = "blsp2_uart";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
button_pins: button_pins {
|
||||
wps_button {
|
||||
pins = "gpio67";
|
||||
@@ -688,6 +720,12 @@
|
||||
};
|
||||
};
|
||||
|
||||
&blsp1_uart3 {
|
||||
pinctrl-0 = <&mcu_uart>;
|
||||
pinctrl-names = "default";
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
&npu_cpr {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -9,29 +9,17 @@ define Device/cig_wf194c4
|
||||
endef
|
||||
TARGET_DEVICES += cig_wf194c4
|
||||
|
||||
define Device/cig_wf196_us
|
||||
define Device/cig_wf196
|
||||
DEVICE_TITLE := CIG WF196
|
||||
DEVICE_DTS := qcom-ipq807x-wf196
|
||||
DEVICE_DTS_CONFIG=config@hk14
|
||||
SUPPORTED_DEVICES := cig,wf196
|
||||
BLOCKSIZE := 256k
|
||||
PAGESIZE := 4096
|
||||
DEVICE_PACKAGES := ath11k-wifi-cig-wf196-us aq-fw-download uboot-envtools kmod-usb3 kmod-usb2 \
|
||||
ath11k-firmware-qcn9000 ath11k-wifi-cig-wf196_6g-us
|
||||
DEVICE_PACKAGES := ath11k-wifi-cig-wf196 aq-fw-download uboot-envtools kmod-usb3 kmod-usb2 \
|
||||
ath11k-firmware-qcn9000
|
||||
endef
|
||||
TARGET_DEVICES += cig_wf196_us
|
||||
|
||||
define Device/cig_wf196_ca
|
||||
DEVICE_TITLE := CIG WF196
|
||||
DEVICE_DTS := qcom-ipq807x-wf196
|
||||
DEVICE_DTS_CONFIG=config@hk14
|
||||
SUPPORTED_DEVICES := cig,wf196
|
||||
BLOCKSIZE := 256k
|
||||
PAGESIZE := 4096
|
||||
DEVICE_PACKAGES := ath11k-wifi-cig-wf196-ca aq-fw-download uboot-envtools kmod-usb3 kmod-usb2 \
|
||||
ath11k-firmware-qcn9000 ath11k-wifi-cig-wf196_6g-ca
|
||||
endef
|
||||
TARGET_DEVICES += cig_wf196_ca
|
||||
TARGET_DEVICES += cig_wf196
|
||||
|
||||
define Device/edgecore_eap102
|
||||
DEVICE_TITLE := Edgecore EAP102
|
||||
|
||||
@@ -56,4 +56,16 @@ endef
|
||||
|
||||
$(eval $(call KernelPackage,diag-char))
|
||||
|
||||
define KernelPackage/bootconfig
|
||||
SUBMENU:=Other modules
|
||||
TITLE:=Bootconfig partition for failsafe
|
||||
KCONFIG:=CONFIG_BOOTCONFIG_PARTITION
|
||||
FILES:=$(LINUX_DIR)/drivers/platform/ipq/bootconfig.ko@ge4.4
|
||||
AUTOLOAD:=$(call AutoLoad,56,bootconfig,1)
|
||||
endef
|
||||
|
||||
define KernelPackage/bootconfig/description
|
||||
Bootconfig partition for failsafe
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,bootconfig))
|
||||
|
||||
13
feeds/ipq807x_v5.4/ipq807x/patches/300-bootconfig.patch
Normal file
13
feeds/ipq807x_v5.4/ipq807x/patches/300-bootconfig.patch
Normal file
@@ -0,0 +1,13 @@
|
||||
Index: linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d/drivers/platform/ipq/bootconfig.c
|
||||
===================================================================
|
||||
--- linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d.orig/drivers/platform/ipq/bootconfig.c
|
||||
+++ linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d/drivers/platform/ipq/bootconfig.c
|
||||
@@ -366,7 +366,7 @@ static int __init bootconfig_partition_i
|
||||
continue;
|
||||
|
||||
partname_dir[i] = proc_mkdir(part_info[i].name, boot_info_dir);
|
||||
- if (partname_dir != NULL) {
|
||||
+ if (partname_dir[i] != NULL) {
|
||||
proc_create_data("primaryboot", S_IRUGO,
|
||||
partname_dir[i],
|
||||
&primaryboot_ops,
|
||||
54
feeds/ipq807x_v5.4/ipq807x/patches/301-diag_char.patch
Normal file
54
feeds/ipq807x_v5.4/ipq807x/patches/301-diag_char.patch
Normal file
@@ -0,0 +1,54 @@
|
||||
Index: linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d/drivers/char/diag/diagchar_core.c
|
||||
===================================================================
|
||||
--- linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d.orig/drivers/char/diag/diagchar_core.c
|
||||
+++ linux-5.4.164-qsdk-26349818b464f8c7b52d59ce73579d9f3dd6bd5d/drivers/char/diag/diagchar_core.c
|
||||
@@ -763,11 +763,6 @@ static void diag_cmd_invalidate_polling(
|
||||
driver->polling_reg_flag = 0;
|
||||
list_for_each_safe(start, temp, &driver->cmd_reg_list) {
|
||||
item = list_entry(start, struct diag_cmd_reg_t, link);
|
||||
- if (&item->entry == NULL) {
|
||||
- pr_err("diag: In %s, unable to search command\n",
|
||||
- __func__);
|
||||
- return;
|
||||
- }
|
||||
polling = diag_cmd_chk_polling(&item->entry);
|
||||
if (polling == DIAG_CMD_POLLING) {
|
||||
driver->polling_reg_flag = 1;
|
||||
@@ -829,11 +824,6 @@ struct diag_cmd_reg_entry_t *diag_cmd_se
|
||||
|
||||
list_for_each_safe(start, temp, &driver->cmd_reg_list) {
|
||||
item = list_entry(start, struct diag_cmd_reg_t, link);
|
||||
- if (&item->entry == NULL) {
|
||||
- pr_err("diag: In %s, unable to search command\n",
|
||||
- __func__);
|
||||
- return NULL;
|
||||
- }
|
||||
temp_entry = &item->entry;
|
||||
if (temp_entry->cmd_code == entry->cmd_code &&
|
||||
temp_entry->subsys_id == entry->subsys_id &&
|
||||
@@ -907,12 +897,6 @@ void diag_cmd_remove_reg_by_pid(int pid)
|
||||
mutex_lock(&driver->cmd_reg_mutex);
|
||||
list_for_each_safe(start, temp, &driver->cmd_reg_list) {
|
||||
item = list_entry(start, struct diag_cmd_reg_t, link);
|
||||
- if (&item->entry == NULL) {
|
||||
- pr_err("diag: In %s, unable to search command\n",
|
||||
- __func__);
|
||||
- mutex_unlock(&driver->cmd_reg_mutex);
|
||||
- return;
|
||||
- }
|
||||
if (item->pid == pid) {
|
||||
list_del(&item->link);
|
||||
kfree(item);
|
||||
@@ -931,12 +915,6 @@ void diag_cmd_remove_reg_by_proc(int pro
|
||||
mutex_lock(&driver->cmd_reg_mutex);
|
||||
list_for_each_safe(start, temp, &driver->cmd_reg_list) {
|
||||
item = list_entry(start, struct diag_cmd_reg_t, link);
|
||||
- if (&item->entry == NULL) {
|
||||
- pr_err("diag: In %s, unable to search command\n",
|
||||
- __func__);
|
||||
- mutex_unlock(&driver->cmd_reg_mutex);
|
||||
- return;
|
||||
- }
|
||||
if (item->proc == proc) {
|
||||
list_del(&item->link);
|
||||
kfree(item);
|
||||
27
feeds/ipq807x_v5.4/libtcmd/patches/100-compile.patch
Normal file
27
feeds/ipq807x_v5.4/libtcmd/patches/100-compile.patch
Normal file
@@ -0,0 +1,27 @@
|
||||
Index: libtcmd-11.5/libtcmd.h
|
||||
===================================================================
|
||||
--- libtcmd-11.5.orig/libtcmd.h
|
||||
+++ libtcmd-11.5/libtcmd.h
|
||||
@@ -71,7 +71,9 @@ struct tcmd_cfg {
|
||||
struct sigevent sev;
|
||||
timer_t timer;
|
||||
bool timeout;
|
||||
-} tcmd_cfg;
|
||||
+};
|
||||
+
|
||||
+extern struct tcmd_cfg tcmd_cfg;
|
||||
|
||||
/* WLAN API */
|
||||
#ifdef WLAN_API_NL80211
|
||||
Index: libtcmd-11.5/nl80211.c
|
||||
===================================================================
|
||||
--- libtcmd-11.5.orig/nl80211.c
|
||||
+++ libtcmd-11.5/nl80211.c
|
||||
@@ -23,6 +23,7 @@
|
||||
#endif
|
||||
|
||||
int cb_ret;
|
||||
+struct tcmd_cfg tcmd_cfg;
|
||||
|
||||
#ifdef LIBNL_2
|
||||
static inline struct nl_sock *nl_handle_alloc(void)
|
||||
@@ -0,0 +1,11 @@
|
||||
--- a/net/mac80211/sta_info.c
|
||||
+++ b/net/mac80211/sta_info.c
|
||||
@@ -2157,7 +2157,7 @@ static void sta_stats_decode_rate(struct
|
||||
|
||||
sband = local->hw.wiphy->bands[band];
|
||||
|
||||
- if (WARN_ON_ONCE(!sband->bitrates))
|
||||
+ if (WARN_ON_ONCE(!sband || !sband->bitrates))
|
||||
break;
|
||||
|
||||
brate = sband->bitrates[rate_idx].bitrate;
|
||||
@@ -0,0 +1,58 @@
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
||||
@@ -786,6 +786,7 @@ struct ath11k {
|
||||
u32 max_tx_power;
|
||||
u32 txpower_limit_2g;
|
||||
u32 txpower_limit_5g;
|
||||
+ u32 txpower_limit_6g;
|
||||
u32 txpower_scale;
|
||||
u32 power_scale;
|
||||
u32 chan_tx_pwr;
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -633,6 +633,7 @@ static void ath11k_pdev_caps_update(stru
|
||||
|
||||
ar->txpower_limit_2g = ar->max_tx_power;
|
||||
ar->txpower_limit_5g = ar->max_tx_power;
|
||||
+ ar->txpower_limit_6g = ar->max_tx_power;
|
||||
ar->txpower_scale = WMI_HOST_TP_SCALE_MAX;
|
||||
}
|
||||
|
||||
@@ -803,6 +804,16 @@ static int ath11k_mac_txpower_recalc(str
|
||||
ar->txpower_limit_5g = txpower;
|
||||
}
|
||||
|
||||
+ if ((ar->hw->wiphy->bands[NL80211_BAND_6GHZ]) &&
|
||||
+ ar->txpower_limit_6g != txpower) {
|
||||
+ param = WMI_PDEV_PARAM_TXPOWER_LIMIT5G;
|
||||
+ ret = ath11k_wmi_pdev_set_param(ar, param,
|
||||
+ txpower, ar->pdev->pdev_id);
|
||||
+ if (ret)
|
||||
+ goto fail;
|
||||
+ ar->txpower_limit_6g = txpower;
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
@@ -3542,18 +3553,8 @@ static void ath11k_mac_op_bss_info_chang
|
||||
ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "mac vdev_id %i txpower %d\n",
|
||||
arvif->vdev_id, info->txpower);
|
||||
|
||||
- if (ar->supports_6ghz && info->chandef.chan &&
|
||||
- info->chandef.chan->band == NL80211_BAND_6GHZ &&
|
||||
- (arvif->vdev_type == WMI_VDEV_TYPE_STA ||
|
||||
- arvif->vdev_type == WMI_VDEV_TYPE_AP) &&
|
||||
- test_bit(WMI_TLV_SERVICE_EXT_TPC_REG_SUPPORT,
|
||||
- ar->ab->wmi_ab.svc_map)) {
|
||||
- ath11k_dbg(ar->ab, ATH11K_DBG_MAC,
|
||||
- "discard tx power, change to set TPC power\n");
|
||||
- } else {
|
||||
- arvif->txpower = info->txpower;
|
||||
- ath11k_mac_txpower_recalc(ar);
|
||||
- }
|
||||
+ arvif->txpower = info->txpower;
|
||||
+ ath11k_mac_txpower_recalc(ar);
|
||||
}
|
||||
|
||||
if (changed & BSS_CHANGED_MCAST_RATE &&
|
||||
@@ -29,7 +29,6 @@ define Package/qca-diag/Description
|
||||
stack.
|
||||
endef
|
||||
|
||||
|
||||
QCASSDK_CONFIG_OPTS+= TOOL_PATH=$(TOOLCHAIN_DIR)/bin/ \
|
||||
SYS_PATH=$(LINUX_DIR) \
|
||||
TOOLPREFIX=$(TARGET_CROSS) \
|
||||
|
||||
@@ -2,7 +2,7 @@ INCLUDE_DIR += include -I src
|
||||
LIB := -lpthread -shared
|
||||
LDFLAGS += -Llib/ -ldiag -lpthread -pie
|
||||
FLAGS = -fPIC -g -DUSE_MUSL
|
||||
EXTRA_CFLAGS = $(TARGET_CFLAGS) $(TARGET_LDFLAGS) $(TARGET_CPPFLAGS) -fstack-protector-all -znow -zrelro -Werror -Wno-error=attributes
|
||||
EXTRA_CFLAGS = $(TARGET_CFLAGS) $(TARGET_LDFLAGS) $(TARGET_CPPFLAGS) -fstack-protector-all -znow -zrelro -Werror -Wno-error=address-of-packed-member -Wl,--allow-multiple-definition -Wno-error=attributes
|
||||
sample_cliobj := dci_client/diag_dci_sample.c
|
||||
klogobj := klog/diag_klog.c
|
||||
mdobj := mdlog/diag_mdlog.c
|
||||
|
||||
@@ -123,17 +123,23 @@ when who what, where, why
|
||||
|
||||
#define GUID_LEN 16
|
||||
|
||||
#ifdef ANDROID
|
||||
#if defined (ANDROID) || defined (USE_ANDROID_LOGGING)
|
||||
#define LOG_TAG "Diag_Lib"
|
||||
#define DIAG_LOGE(...) { \
|
||||
ALOGE(__VA_ARGS__); \
|
||||
if (!diag_disable_console) \
|
||||
printf(__VA_ARGS__); \
|
||||
}
|
||||
#include <cutils/log.h>
|
||||
#include "common_log.h"
|
||||
#define DIAG_LOGD(...) { \
|
||||
ALOGE(__VA_ARGS__); \
|
||||
if (!diag_disable_console) \
|
||||
printf(__VA_ARGS__); \
|
||||
}
|
||||
#include <log/log.h>
|
||||
#include "common_log.h"
|
||||
#else
|
||||
#define DIAG_LOGE(...) printf (__VA_ARGS__)
|
||||
#define DIAG_LOGD(...) printf (__VA_ARGS__)
|
||||
#endif
|
||||
#include <pthread.h>
|
||||
#include <stdio.h>
|
||||
@@ -167,6 +173,12 @@ typedef enum {
|
||||
DB_PARSER_STATE_CLOSE,
|
||||
} qsr4_db_file_parser_state;
|
||||
|
||||
/* enum to handle packet processing status */
|
||||
enum pkt_status{
|
||||
PKT_PROCESS_ONGOING,
|
||||
PKT_PROCESS_DONE
|
||||
};
|
||||
|
||||
/*
|
||||
* Structure to keep track of diag callback interface clients. Please note that
|
||||
* there can be only client communicating with an ASIC at a given time.
|
||||
|
||||
@@ -64,7 +64,7 @@ when who what, where, why
|
||||
#define PID_DIR "/root/diag_logs"
|
||||
#define MAX_CHAN 4
|
||||
|
||||
static unsigned char read_buf[4096];
|
||||
static unsigned char read_buf[MAX_CHAN][4096];
|
||||
static char ip_addr_name[FILE_NAME_LEN] = "192.168.0.10";
|
||||
static char port_number_string[FILE_NAME_LEN] = "2500";
|
||||
static int port_number = 2500;
|
||||
@@ -397,13 +397,22 @@ int open_connection(struct diag_socket *sock)
|
||||
int read_socket(struct diag_socket *socket)
|
||||
{
|
||||
int num_read;
|
||||
int status;
|
||||
|
||||
repeat:
|
||||
/* Read from the socket */
|
||||
memset(read_buf, 0, 4096);
|
||||
num_read = recv(socket->fd, (unsigned char *)read_buf, 4096, 0);
|
||||
memset(read_buf[socket->id], 0, 4096);
|
||||
num_read = recv(socket->fd, (unsigned char *)read_buf[socket->id], 4096, 0);
|
||||
if (num_read > 0) {
|
||||
/* Send the data read off of the socket to the kernel via the library */
|
||||
diag_send_socket_data(socket->id, read_buf, num_read);
|
||||
/*
|
||||
* Process socket data to make sure full command is received before send it
|
||||
* to the diag core via the library. If return value is not PKT_PROCESS_DONE
|
||||
* then this is the case of partial packet and wait for pending bytes to
|
||||
* get full diag command.
|
||||
*/
|
||||
status = diag_send_socket_data(socket->id, read_buf[socket->id], num_read);
|
||||
if (status != PKT_PROCESS_DONE)
|
||||
goto repeat;
|
||||
} else if (num_read == -1) {
|
||||
DIAG_LOGE("diag_socket_log: Read socket error: %s, errno: %d\n",
|
||||
strerror(errno), errno);
|
||||
|
||||
@@ -89,6 +89,9 @@ when who what, where, why
|
||||
|
||||
#define MAX_CHANNELS 4
|
||||
|
||||
#define MAX_USER_PKT_SIZE 16384
|
||||
#define USER_SPACE_DATA_TYPE_SIZE 4
|
||||
|
||||
#define DCI_HEADER_LENGTH sizeof(int)
|
||||
#define DCI_LEN_FIELD_LENGTH sizeof(int)
|
||||
#define DCI_EVENT_OFFSET sizeof(uint16)
|
||||
@@ -134,6 +137,13 @@ when who what, where, why
|
||||
char dir_name[FILE_NAME_LEN];
|
||||
char peripheral_name[FILE_NAME_LEN];
|
||||
|
||||
/* enum defined to handle full/partial packet case */
|
||||
typedef enum {
|
||||
PKT_START,
|
||||
PKT_HEADER,
|
||||
PKT_PAYLOAD
|
||||
} diag_pkt_states;
|
||||
|
||||
static struct diag_callback_tbl_t cb_clients[NUM_PROC];
|
||||
static int socket_inited = 0;
|
||||
static int (*socket_cb_ptr)(void *socket_cb_data_ptr, int socket_id);
|
||||
@@ -619,46 +629,246 @@ SIDE EFFECTS
|
||||
===========================================================================*/
|
||||
int diag_send_socket_data(int id, unsigned char buf[], int num_bytes)
|
||||
{
|
||||
unsigned char send_buf[4100];
|
||||
unsigned char offset = 4;
|
||||
int i;
|
||||
int start = 0;
|
||||
int end = 0;
|
||||
int copy_bytes;
|
||||
int success;
|
||||
static unsigned char send_buf[MAX_CHANNELS][MAX_USER_PKT_SIZE];
|
||||
static unsigned char extra_header = USER_SPACE_DATA_TYPE_SIZE;
|
||||
static unsigned char tmp_header[DIAG_NON_HDLC_HEADER_SIZE];
|
||||
static diag_pkt_states pkt_state = PKT_START;
|
||||
static int hdlc_pkt_pending = FALSE;
|
||||
static uint32_t total_pkt_size = 0;
|
||||
static uint32_t bytes_required = 0;
|
||||
static int s_char = 0, e_char = 0;
|
||||
static uint32_t pkt_start_off = 0;
|
||||
static uint32_t saved_bytes = 0;
|
||||
int status = PKT_PROCESS_DONE;
|
||||
int packet_len_index = 0;
|
||||
uint16_t packet_len = 0;
|
||||
int i = 0, j = 0;
|
||||
|
||||
if ((id >= 0) && (id < MAX_CHANNELS)) {
|
||||
*(int *)send_buf = USER_SPACE_DATA_TYPE;
|
||||
if (socket_token[id] != 0 ) {
|
||||
*(int *)(send_buf + offset) = socket_token[id];
|
||||
offset += 4;
|
||||
}
|
||||
|
||||
for (i = 0; i < num_bytes; i++) {
|
||||
if (hdlc_disabled) {
|
||||
if (buf[i] == CONTROL_CHAR && i == 0) {
|
||||
end = end + 1;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (buf[i] == CONTROL_CHAR) {
|
||||
copy_bytes = end-start+1;
|
||||
memcpy(send_buf+offset, buf+start, copy_bytes);
|
||||
diag_send_data(send_buf, copy_bytes+offset);
|
||||
start = i+1;
|
||||
end = i+1;
|
||||
continue;
|
||||
}
|
||||
end = end+1;
|
||||
}
|
||||
success = 1;
|
||||
} else {
|
||||
DIAG_LOGE("diag: In %s, Error sending socket data. Invalid socket id: %d\n",
|
||||
__func__, id);
|
||||
success = 0;
|
||||
if ((id < 0) || id >= MAX_CHANNELS) {
|
||||
DIAG_LOGE("diag_socket_log: %s: Error sending socket data. socket id: %d, num_bytes: %d\n",
|
||||
__func__, id, num_bytes);
|
||||
return PKT_PROCESS_DONE;
|
||||
}
|
||||
|
||||
return success;
|
||||
for (i = 0; i < num_bytes; i++) {
|
||||
status = PKT_PROCESS_ONGOING;
|
||||
switch (pkt_state)
|
||||
{
|
||||
case PKT_START:
|
||||
if (buf[i] == CONTROL_CHAR && !hdlc_pkt_pending) {
|
||||
s_char = buf[i];
|
||||
pkt_start_off = i;
|
||||
/* probably it is non-HDLC packet */
|
||||
if (num_bytes >= (pkt_start_off + DIAG_NON_HDLC_HEADER_SIZE)) {
|
||||
/* received full header */
|
||||
packet_len_index = pkt_start_off + 2;
|
||||
packet_len = (uint16_t)(*(uint16_t *)(buf + packet_len_index));
|
||||
total_pkt_size = DIAG_NON_HDLC_HEADER_SIZE + packet_len + 1;
|
||||
if (total_pkt_size <= (num_bytes - pkt_start_off)) {
|
||||
e_char = buf[total_pkt_size-1];
|
||||
if (s_char == e_char) {
|
||||
/* full non-HDLC packet received */
|
||||
memset(send_buf[id], 0, MAX_USER_PKT_SIZE);
|
||||
*(int *)send_buf[id] = USER_SPACE_DATA_TYPE;
|
||||
if (socket_token[id] != 0) {
|
||||
*(int *)(send_buf[id] + extra_header) = socket_token[id];
|
||||
extra_header += sizeof(int);
|
||||
}
|
||||
memcpy(send_buf[id] + extra_header, buf, total_pkt_size);
|
||||
/* send it diag core */
|
||||
diag_send_data(send_buf[id], total_pkt_size + extra_header);
|
||||
i += total_pkt_size - 1;
|
||||
s_char = 0;
|
||||
e_char = 0;
|
||||
total_pkt_size = 0;
|
||||
extra_header = USER_SPACE_DATA_TYPE_SIZE;
|
||||
status = PKT_PROCESS_DONE;
|
||||
}
|
||||
} else {
|
||||
/* full header + partial packet received */
|
||||
pkt_state = PKT_PAYLOAD;
|
||||
memset(send_buf[id], 0, MAX_USER_PKT_SIZE);
|
||||
*(int *)send_buf[id] = USER_SPACE_DATA_TYPE;
|
||||
if (socket_token[id] != 0) {
|
||||
*(int *)(send_buf[id] + extra_header) = socket_token[id];
|
||||
extra_header += sizeof(int);
|
||||
}
|
||||
memcpy(send_buf[id] + extra_header, (buf + pkt_start_off), (num_bytes - pkt_start_off));
|
||||
saved_bytes = (num_bytes - pkt_start_off + extra_header);
|
||||
bytes_required = total_pkt_size - (saved_bytes - extra_header);
|
||||
i += num_bytes - 1;
|
||||
DIAG_LOGD("%s:PKT_START: full header + partial pkt received, total_pkt_size %d recvd %d pending %d\n",
|
||||
__func__, total_pkt_size, (saved_bytes - extra_header), bytes_required);
|
||||
}
|
||||
} else {
|
||||
/* partial header received */
|
||||
memcpy(tmp_header, (buf + pkt_start_off), (num_bytes - pkt_start_off));
|
||||
saved_bytes = (num_bytes - pkt_start_off);
|
||||
bytes_required = DIAG_NON_HDLC_HEADER_SIZE - saved_bytes;
|
||||
i += num_bytes - 1;
|
||||
pkt_state = PKT_HEADER;
|
||||
DIAG_LOGD("%s:PKT_START: partial header received, recvd %d pending %d\n",
|
||||
__func__, saved_bytes, bytes_required);
|
||||
}
|
||||
} else {
|
||||
/* HDLC packet will enter here */
|
||||
if (!hdlc_pkt_pending) {
|
||||
hdlc_pkt_pending = TRUE;
|
||||
memset(send_buf[id], 0, MAX_USER_PKT_SIZE);
|
||||
*(int *)send_buf[id] = USER_SPACE_DATA_TYPE;
|
||||
if (socket_token[id] != 0) {
|
||||
*(int *)(send_buf[id] + extra_header) = socket_token[id];
|
||||
extra_header += sizeof(int);
|
||||
}
|
||||
saved_bytes = extra_header;
|
||||
}
|
||||
/* iterate through the packet to find the delimiter */
|
||||
for (j = 0; j < num_bytes; j++) {
|
||||
if (buf[j] == CONTROL_CHAR) {
|
||||
if (j == (num_bytes - 1)) {
|
||||
/* delimiter found at the end of current packet
|
||||
* probably this is end of HDLC packet
|
||||
*/
|
||||
if (saved_bytes + num_bytes >= MAX_USER_PKT_SIZE) {
|
||||
DIAG_LOGE("%s:hdlc: command too large, dropping pkt\n", __func__);
|
||||
hdlc_pkt_pending = FALSE;
|
||||
saved_bytes = 0;
|
||||
i += num_bytes - 1;
|
||||
break;
|
||||
}
|
||||
memcpy(send_buf[id] + saved_bytes, buf, num_bytes);
|
||||
/* send it to diag core */
|
||||
diag_send_data(send_buf[id], saved_bytes + num_bytes);
|
||||
hdlc_pkt_pending = FALSE;
|
||||
i += num_bytes - 1;
|
||||
saved_bytes = 0;
|
||||
extra_header = USER_SPACE_DATA_TYPE_SIZE;
|
||||
status = PKT_PROCESS_DONE;
|
||||
} else {
|
||||
/* delimiter character may come at the middle of packet
|
||||
* just ignore as we cant handle this case
|
||||
*/
|
||||
DIAG_LOGD("%s:hdlc: Delimiter found at the middle index %d\n", __func__, j);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* full HDLC packet has not received */
|
||||
if (hdlc_pkt_pending) {
|
||||
if (saved_bytes + num_bytes >= MAX_USER_PKT_SIZE) {
|
||||
DIAG_LOGE("%s:hdlc: command too large, dropping pkt\n", __func__);
|
||||
hdlc_pkt_pending = FALSE;
|
||||
saved_bytes = 0;
|
||||
i += num_bytes - 1;
|
||||
break;
|
||||
}
|
||||
memcpy(send_buf[id] + saved_bytes, buf, num_bytes);
|
||||
saved_bytes += num_bytes;
|
||||
i += num_bytes - 1;
|
||||
DIAG_LOGD("%s:hdlc: Partial Packet received, recvd %d\n", __func__,
|
||||
(saved_bytes - extra_header));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case PKT_HEADER:
|
||||
if(num_bytes >= bytes_required){
|
||||
/* we have full header now */
|
||||
memcpy(tmp_header+saved_bytes, buf, bytes_required);
|
||||
packet_len = (uint16_t)(*(uint16_t *)(tmp_header + 2));
|
||||
total_pkt_size = DIAG_NON_HDLC_HEADER_SIZE + packet_len + 1;
|
||||
if (total_pkt_size <= (num_bytes + saved_bytes)) {
|
||||
/* might received full packet */
|
||||
e_char = buf[total_pkt_size - saved_bytes - 1];
|
||||
if (s_char == e_char) {
|
||||
/* full non-HDLC packet received */
|
||||
memset(send_buf[id], 0, MAX_USER_PKT_SIZE);
|
||||
*(int *)send_buf[id] = USER_SPACE_DATA_TYPE;
|
||||
if (socket_token[id] != 0) {
|
||||
*(int *)(send_buf[id] + extra_header) = socket_token[id];
|
||||
extra_header += sizeof(int);
|
||||
}
|
||||
memcpy(send_buf[id] + extra_header, tmp_header, saved_bytes);
|
||||
memcpy(send_buf[id] + extra_header + saved_bytes, buf,
|
||||
total_pkt_size - saved_bytes);
|
||||
/* send it to diag core */
|
||||
diag_send_data(send_buf[id], total_pkt_size + extra_header);
|
||||
i += total_pkt_size - saved_bytes - 1;
|
||||
s_char = 0;
|
||||
e_char = 0;
|
||||
total_pkt_size = 0;
|
||||
bytes_required = 0;
|
||||
saved_bytes = 0;
|
||||
extra_header = USER_SPACE_DATA_TYPE_SIZE;
|
||||
pkt_state = PKT_START;
|
||||
status = PKT_PROCESS_DONE;
|
||||
}
|
||||
} else {
|
||||
/* full header + partial packet received */
|
||||
pkt_state = PKT_PAYLOAD;
|
||||
memset(send_buf[id], 0, MAX_USER_PKT_SIZE);
|
||||
*(int *)send_buf[id] = USER_SPACE_DATA_TYPE;
|
||||
if (socket_token[id] != 0) {
|
||||
*(int *)(send_buf[id] + extra_header) = socket_token[id];
|
||||
extra_header += sizeof(int);
|
||||
}
|
||||
/* copy partial header received */
|
||||
memcpy(send_buf[id] + extra_header, tmp_header, saved_bytes);
|
||||
memcpy(send_buf[id] + extra_header + saved_bytes, buf, num_bytes);
|
||||
bytes_required = total_pkt_size - saved_bytes - num_bytes;
|
||||
i += num_bytes - 1;
|
||||
saved_bytes += num_bytes + extra_header;
|
||||
DIAG_LOGD("%s:PKT_HEADER: full header + partial pkt received, total_pkt_size %d recvd %d pending %d\n",
|
||||
__func__, total_pkt_size, (saved_bytes - extra_header), bytes_required);
|
||||
}
|
||||
} else {
|
||||
/* still full header not yet received */
|
||||
memcpy(tmp_header + saved_bytes, buf, num_bytes);
|
||||
saved_bytes += num_bytes;
|
||||
bytes_required = DIAG_NON_HDLC_HEADER_SIZE - saved_bytes;
|
||||
i += num_bytes - 1;
|
||||
DIAG_LOGD("%s:PKT_HEADER: still partial header received, recvd %d pending %d\n",
|
||||
__func__, saved_bytes, bytes_required);
|
||||
}
|
||||
break;
|
||||
|
||||
case PKT_PAYLOAD:
|
||||
if(num_bytes >= bytes_required){
|
||||
/* received pending bytes */
|
||||
e_char = buf[bytes_required - 1];
|
||||
if (s_char == e_char) {
|
||||
/* full non-HDLC packet received */
|
||||
memcpy(send_buf[id] + saved_bytes, buf, bytes_required);
|
||||
/* send it to diag core */
|
||||
diag_send_data(send_buf[id], total_pkt_size + extra_header);
|
||||
i += bytes_required - 1;
|
||||
s_char = 0;
|
||||
e_char = 0;
|
||||
total_pkt_size = 0;
|
||||
bytes_required = 0;
|
||||
saved_bytes = 0;
|
||||
extra_header = USER_SPACE_DATA_TYPE_SIZE;
|
||||
pkt_state = PKT_START;
|
||||
status = PKT_PROCESS_DONE;
|
||||
}
|
||||
} else {
|
||||
/* still not yet received the full packet */
|
||||
memcpy(send_buf[id] + saved_bytes, buf, num_bytes);
|
||||
bytes_required = total_pkt_size - (saved_bytes -
|
||||
extra_header) - num_bytes;
|
||||
i += num_bytes - 1;
|
||||
saved_bytes += num_bytes;
|
||||
DIAG_LOGD("%s:PKT_PAYLOAD: Still waiting for full packet,saved %d pending %d\n",
|
||||
__func__, (saved_bytes - extra_header), bytes_required);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
DIAG_LOGD("%s:default: Unexpected packet state\n",
|
||||
__func__);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/*==========================================================================
|
||||
@@ -2300,6 +2510,7 @@ int diag_read_mask_file(void)
|
||||
if (!found_cmd) {
|
||||
DIAG_LOGE("Sorry, could not find valid commands in the mask file,"
|
||||
"please check the mask file again\n");
|
||||
fclose(read_mask_fp);
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
@@ -2321,6 +2532,7 @@ int diag_read_mask_file(void)
|
||||
if (mask_buf[count_mask_bytes] != CONTROL_CHAR && i == 0) {
|
||||
DIAG_LOGE("Sorry, the mask file doesn't adhere to framing definition,"
|
||||
"please check the mask file again\n");
|
||||
fclose(read_mask_fp);
|
||||
return -1;
|
||||
}
|
||||
if (count_mask_bytes > payload && mask_buf[count_mask_bytes] == CONTROL_CHAR && i != 0) {
|
||||
|
||||
@@ -34,6 +34,14 @@ when who what, where, why
|
||||
#define DIAG_MDLOG_PID_FILE_SZ 100
|
||||
#define NUM_PROC 10
|
||||
#define HDLC_DISABLE 1
|
||||
|
||||
/* Non-HDLC Header:
|
||||
* 1 byte - Control char
|
||||
* 1 byte - Version
|
||||
* 2 bytes - Packet length
|
||||
*/
|
||||
#define DIAG_NON_HDLC_HEADER_SIZE 4
|
||||
|
||||
extern int diag_fd;
|
||||
extern int fd_md[NUM_PROC];
|
||||
extern int gdwClientID;
|
||||
|
||||
@@ -249,6 +249,8 @@ static int diag_qsr4_db_file_mem_init(qsr4_db_file_list** file_entry)
|
||||
}
|
||||
if (entry->head == NULL)
|
||||
entry->head = file_block_offset;
|
||||
else
|
||||
free(file_block_offset);
|
||||
|
||||
return TRUE;
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ath12k-firmware
|
||||
PKG_MIRROR_HASH:=a325f86b1d613f713d2e015abca4a9ff86c8448d4cd540fa022866da2c5aa042
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_BRANCH:=main
|
||||
PKG_SOURCE_URL:=https://github.com/quic/upstream-wifi-fw.git
|
||||
PKG_MIRROR_HASH:=ade4287ff2935ad1d54e5dabb8e6de28f648d0974fa76238fcc1616235e6773e
|
||||
PKG_SOURCE_VERSION:=3417bb86645c5ff4c58258db7cc33e43260b4222
|
||||
PKG_SOURCE_VERSION:=e90d32aaa149800ea79760639cb5ac9ddcfc8281
|
||||
|
||||
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
|
||||
|
||||
@@ -18,20 +18,59 @@ define Package/ath12k-firmware-default
|
||||
DEPENDS:=
|
||||
endef
|
||||
|
||||
define Package/ath12k-firmware-qcn92xx-split-phy
|
||||
$(Package/ath12k-firmware-default)
|
||||
TITLE:=ath12k firmware for qcn92xx split phy devices
|
||||
DEPENDS:=@(TARGET_ipq95xx||TARGET_ipq53xx)
|
||||
endef
|
||||
|
||||
define Package/ath12k-firmware-qcn92xx
|
||||
$(Package/ath12k-firmware-default)
|
||||
TITLE:=ath12k firmware for qcn92xx devices
|
||||
DEPENDS:=@TARGET_ipq95xx
|
||||
DEPENDS:=@(TARGET_ipq95xx||TARGET_ipq53xx)
|
||||
endef
|
||||
|
||||
define Package/ath12k-firmware-ipq53xx
|
||||
$(Package/ath12k-firmware-default)
|
||||
TITLE:=ath12k firmware for ipq53xx devices
|
||||
DEPENDS:=@TARGET_ipq53xx
|
||||
endef
|
||||
|
||||
define Package/ath12k-firmware-ipq53xx-wk-wk
|
||||
$(Package/ath12k-firmware-default)
|
||||
TITLE:=ath12k firmware for ipq53xx + wk + wk devices
|
||||
DEPENDS:=@TARGET_ipq53xx
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
|
||||
endef
|
||||
|
||||
define Package/ath12k-firmware-qcn92xx-split-phy/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0
|
||||
$(CP) $(PKG_BUILD_DIR)/ath12k-firmware/QCN9274/hw2.0_split_phy/1.2.1/WLAN.WBE.1.2.1-00148-QCAHKSWPL_SILICONZ-1/* \
|
||||
$(1)/lib/firmware/ath12k/QCN92XX/hw1.0
|
||||
endef
|
||||
|
||||
define Package/ath12k-firmware-qcn92xx/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw2.0
|
||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/ath12k-firmware/QCN9274/hw2.0/1.1.1/WLAN.WBE.1.1.1-00126-QCAHKSWPL_SILICONZ-1/* \
|
||||
$(1)/lib/firmware/ath12k/QCN92XX/hw2.0
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0
|
||||
$(CP) $(PKG_BUILD_DIR)/ath12k-firmware/QCN9274/hw2.0/1.2.1/WLAN.WBE.1.2.1-00201-QCAHKSWPL_SILICONZ-1/* \
|
||||
$(1)/lib/firmware/ath12k/QCN92XX/hw1.0
|
||||
endef
|
||||
|
||||
define Package/ath12k-firmware-ipq53xx/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/IPQ5332/
|
||||
$(CP) $(PKG_BUILD_DIR)/ath12k-firmware//IPQ5322/hw1.0/1.2.1/WLAN.WBE.1.2.1-00201-QCAHKSWPL_SILICONZ-1/* \
|
||||
$(1)/lib/firmware/IPQ5332/
|
||||
endef
|
||||
|
||||
define Package/ath12k-firmware-ipq53xx-wk-wk/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/IPQ5332/
|
||||
$(CP) $(PKG_BUILD_DIR)/ath12k-firmware/IPQ5322_QCN6432_QCN6432/hw1.0/testing/1.3/WLAN.WBE.1.3-02907-QCAHKSWPL_SILICONZ-1/* \
|
||||
$(1)/lib/firmware/IPQ5332/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,ath12k-firmware-qcn92xx))
|
||||
$(eval $(call BuildPackage,ath12k-firmware-qcn92xx-split-phy))
|
||||
$(eval $(call BuildPackage,ath12k-firmware-ipq53xx))
|
||||
$(eval $(call BuildPackage,ath12k-firmware-ipq53xx-wk-wk))
|
||||
|
||||
@@ -19,7 +19,7 @@ define Package/ath12k-wifi-default
|
||||
SUBMENU:=ath12k Board-Specific Overrides
|
||||
SECTION:=firmware
|
||||
CATEGORY:=Firmware
|
||||
DEPENDS:=@TARGET_qcn9274
|
||||
DEPENDS:=@(TARGET_qcn9274||TARGET_ipq53xx)
|
||||
TITLE:=Custom Board
|
||||
endef
|
||||
|
||||
@@ -33,4 +33,32 @@ define Package/ath12k-wifi-qcom-qcn9274/install
|
||||
$(INSTALL_DATA) ./board-2.bin.QCN9274 $(1)/lib/firmware/ath12k/QCN9274/hw1.0/board-2.bin
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-cig-wf189
|
||||
$(call Package/ath12k-wifi-default)
|
||||
TITLE:=board.bin for CIG WF189
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-sercomm-ap72tip
|
||||
$(call Package/ath12k-wifi-default)
|
||||
TITLE:=board.bin for Sercomm WIFI-7
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-cig-wf189/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0
|
||||
$(INSTALL_DATA) ./regdb.bin $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/
|
||||
$(INSTALL_DATA) ./board-cig-wf189.bin.qcn9224 $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/board.bin
|
||||
$(INSTALL_DATA) ./regdb.bin $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
|
||||
$(INSTALL_DATA) ./board-cig-wf189.bin.ipq53xx $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board.bin
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-sercomm-ap72tip/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0
|
||||
$(INSTALL_DATA) ./regdb.bin $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/
|
||||
$(INSTALL_DATA) ./board-sercomm-ap72tip.bin.qcn9224 $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/board.bin
|
||||
$(INSTALL_DATA) ./regdb.bin $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
|
||||
$(INSTALL_DATA) ./board-sercomm-ap72tip.bin.ipq53xx $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board.bin
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,ath12k-wifi-qcom-qcn9274))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-cig-wf189))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-sercomm-ap72tip))
|
||||
|
||||
BIN
feeds/ipq95xx/ath12k-wifi/board-cig-wf189.bin.ipq53xx
Executable file
BIN
feeds/ipq95xx/ath12k-wifi/board-cig-wf189.bin.ipq53xx
Executable file
Binary file not shown.
BIN
feeds/ipq95xx/ath12k-wifi/board-cig-wf189.bin.qcn9224
Executable file
BIN
feeds/ipq95xx/ath12k-wifi/board-cig-wf189.bin.qcn9224
Executable file
Binary file not shown.
BIN
feeds/ipq95xx/ath12k-wifi/board-sercomm-ap72tip.bin.ipq53xx
Normal file
BIN
feeds/ipq95xx/ath12k-wifi/board-sercomm-ap72tip.bin.ipq53xx
Normal file
Binary file not shown.
BIN
feeds/ipq95xx/ath12k-wifi/board-sercomm-ap72tip.bin.qcn9224
Normal file
BIN
feeds/ipq95xx/ath12k-wifi/board-sercomm-ap72tip.bin.qcn9224
Normal file
Binary file not shown.
BIN
feeds/ipq95xx/ath12k-wifi/regdb.bin
Executable file
BIN
feeds/ipq95xx/ath12k-wifi/regdb.bin
Executable file
Binary file not shown.
@@ -5,13 +5,11 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=hostapd
|
||||
PKG_RELEASE:=$(AUTORELEASE)
|
||||
PKG_VERSION:=2023-02-21-ath12.3-cs
|
||||
|
||||
PKG_SOURCE_URL:=http://w1.fi/hostap.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_DATE:=2021-12-13
|
||||
PKG_SOURCE_VERSION:=b26f5c0fe3
|
||||
PKG_MIRROR_HASH:=2c5b72056b6efc3a16ca912118b324371527c7ac79c4b997349d94680538a7d8
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
|
||||
PKG_HASH:=6153bacd614d9bb2dfba634dd698a698e37c043e08543a0802903718238a12fa
|
||||
PKG_SOURCE_URL:=@KERNEL/software/utils/dtc
|
||||
|
||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||
PKG_LICENSE:=BSD-3-Clause
|
||||
|
||||
@@ -126,6 +126,7 @@ hostapd_common_add_device_config() {
|
||||
config_add_int airtime_mode
|
||||
|
||||
config_add_boolean multiple_bssid rnr_beacon he_co_locate ema
|
||||
config_add_boolean mlo
|
||||
|
||||
hostapd_add_log_config
|
||||
}
|
||||
@@ -140,7 +141,7 @@ hostapd_prepare_device_config() {
|
||||
acs_chan_bias local_pwr_constraint spectrum_mgmt_required airtime_mode cell_density \
|
||||
rts_threshold beacon_rate rssi_reject_assoc_rssi rssi_ignore_probe_request maxassoc \
|
||||
multiple_bssid he_co_locate rnr_beacon ema acs_exclude_dfs \
|
||||
maxassoc_ignore_probe
|
||||
maxassoc_ignore_probe mlo
|
||||
|
||||
hostapd_set_log_options base_cfg
|
||||
|
||||
@@ -155,6 +156,7 @@ hostapd_prepare_device_config() {
|
||||
set_default multiple_bssid 0
|
||||
set_default ema 0
|
||||
set_default acs_exclude_dfs 0
|
||||
set_default mlo 0
|
||||
|
||||
[ -n "$country" ] && {
|
||||
append base_cfg "country_code=$country" "$N"
|
||||
@@ -252,6 +254,7 @@ hostapd_prepare_device_config() {
|
||||
# [ "$he_co_locate" -gt 0 ] && append base_cfg "he_co_locate=$he_co_locate" "$N"
|
||||
[ "$multiple_bssid" -gt 0 ] && append base_cfg "multiple_bssid=$multiple_bssid" "$N"
|
||||
[ "$ema" -gt 0 ] && append base_cfg "ema=$ema" "$N"
|
||||
[ "$mlo" -gt 0 ] && append base_cfg "mlo=1" "$N"
|
||||
[ "$acs_exclude_dfs" -gt 0 ] && append base_cfg "acs_exclude_dfs=$acs_exclude_dfs" "$N"
|
||||
|
||||
json_get_values opts hostapd_options
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
From 21ce83b4ae2b9563175fdb4fc4312096cc399cf8 Mon Sep 17 00:00:00 2001
|
||||
From: David Bauer <mail@david-bauer.net>
|
||||
Date: Wed, 5 May 2021 00:44:34 +0200
|
||||
Subject: [PATCH] wolfssl: add RNG to EC key
|
||||
|
||||
Since upstream commit 6467de5a8840 ("Randomize z ordinates in
|
||||
scalar mult when timing resistant") WolfSSL requires a RNG for
|
||||
the EC key when built hardened which is the default.
|
||||
|
||||
Set the RNG for the EC key to fix connections for OWE clients.
|
||||
|
||||
Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||
---
|
||||
src/crypto/crypto_wolfssl.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
--- a/src/crypto/crypto_wolfssl.c
|
||||
+++ b/src/crypto/crypto_wolfssl.c
|
||||
@@ -1340,6 +1340,7 @@ int ecc_projective_add_point(ecc_point *
|
||||
|
||||
struct crypto_ec {
|
||||
ecc_key key;
|
||||
+ WC_RNG rng;
|
||||
mp_int a;
|
||||
mp_int prime;
|
||||
mp_int order;
|
||||
@@ -1394,6 +1395,8 @@ struct crypto_ec * crypto_ec_init(int gr
|
||||
return NULL;
|
||||
|
||||
if (wc_ecc_init(&e->key) != 0 ||
|
||||
+ wc_InitRng(&e->rng) != 0 ||
|
||||
+ wc_ecc_set_rng(&e->key, &e->rng) != 0 ||
|
||||
wc_ecc_set_curve(&e->key, 0, curve_id) != 0 ||
|
||||
mp_init(&e->a) != MP_OKAY ||
|
||||
mp_init(&e->prime) != MP_OKAY ||
|
||||
@@ -1425,6 +1428,7 @@ void crypto_ec_deinit(struct crypto_ec*
|
||||
mp_clear(&e->order);
|
||||
mp_clear(&e->prime);
|
||||
mp_clear(&e->a);
|
||||
+ wc_FreeRng(&e->rng);
|
||||
wc_ecc_free(&e->key);
|
||||
os_free(e);
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
--- a/src/ap/ieee802_11.c
|
||||
+++ b/src/ap/ieee802_11.c
|
||||
@@ -4621,6 +4621,13 @@ static int add_associated_sta(struct hos
|
||||
* drivers to accept the STA parameter configuration. Since this is
|
||||
* after a new FT-over-DS exchange, a new TK has been derived, so key
|
||||
* reinstallation is not a concern for this case.
|
||||
+ *
|
||||
+ * If the STA was associated and authorized earlier, but came for a new
|
||||
+ * connection (!added_unassoc + !reassoc), remove the existing STA entry
|
||||
+ * so that it can be re-added. This case is rarely seen when the AP could
|
||||
+ * not receive the deauth/disassoc frame from the STA. And the STA comes
|
||||
+ * back with new connection within a short period or before the inactive
|
||||
+ * STA entry is removed from the list.
|
||||
*/
|
||||
wpa_printf(MSG_DEBUG, "Add associated STA " MACSTR
|
||||
" (added_unassoc=%d auth_alg=%u ft_over_ds=%u reassoc=%d authorized=%d ft_tk=%d fils_tk=%d)",
|
||||
@@ -4634,7 +4641,8 @@ static int add_associated_sta(struct hos
|
||||
(!(sta->flags & WLAN_STA_AUTHORIZED) ||
|
||||
(reassoc && sta->ft_over_ds && sta->auth_alg == WLAN_AUTH_FT) ||
|
||||
(!wpa_auth_sta_ft_tk_already_set(sta->wpa_sm) &&
|
||||
- !wpa_auth_sta_fils_tk_already_set(sta->wpa_sm)))) {
|
||||
+ !wpa_auth_sta_fils_tk_already_set(sta->wpa_sm)) ||
|
||||
+ (!reassoc && (sta->flags & WLAN_STA_AUTHORIZED)))) {
|
||||
hostapd_drv_sta_remove(hapd, sta->addr);
|
||||
wpa_auth_sm_event(sta->wpa_sm, WPA_DRV_STA_REMOVED);
|
||||
set = 0;
|
||||
@@ -0,0 +1,27 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Thu, 8 Jul 2021 16:33:03 +0200
|
||||
Subject: [PATCH] hostapd: fix use of uninitialized stack variables
|
||||
|
||||
When a CSA is performed on an 80 MHz channel, hostapd_change_config_freq
|
||||
unconditionally calls hostapd_set_oper_centr_freq_seg0/1_idx with seg0/1
|
||||
filled by ieee80211_freq_to_chan.
|
||||
However, if ieee80211_freq_to_chan fails (because the freq is 0 or invalid),
|
||||
seg0/1 remains uninitialized and filled with stack garbage, causing errors
|
||||
such as "hostapd: 80 MHz: center segment 1 configured"
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
Index: hostapd-2023-02-21-ath12.3-cs/src/ap/hostapd.c
|
||||
===================================================================
|
||||
--- hostapd-2023-02-21-ath12.3-cs.orig/src/ap/hostapd.c
|
||||
+++ hostapd-2023-02-21-ath12.3-cs/src/ap/hostapd.c
|
||||
@@ -4352,7 +4352,7 @@ static int hostapd_change_config_freq(st
|
||||
struct hostapd_freq_params *old_params)
|
||||
{
|
||||
int channel;
|
||||
- u8 seg0, seg1 = 0;
|
||||
+ u8 seg0 = 0, seg1 = 0;
|
||||
struct hostapd_hw_modes *mode;
|
||||
|
||||
if (!params->channel) {
|
||||
@@ -0,0 +1,19 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Wed, 28 Jul 2021 05:43:29 +0200
|
||||
Subject: [PATCH] ndisc_snoop: call dl_list_del before freeing ipv6 addresses
|
||||
|
||||
Fixes a segmentation fault on sta disconnect
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/src/ap/ndisc_snoop.c
|
||||
+++ b/src/ap/ndisc_snoop.c
|
||||
@@ -61,6 +61,7 @@ void sta_ip6addr_del(struct hostapd_data
|
||||
dl_list_for_each_safe(ip6addr, prev, &sta->ip6addr, struct ip6addr,
|
||||
list) {
|
||||
hostapd_drv_br_delete_ip_neigh(hapd, 6, (u8 *) &ip6addr->addr);
|
||||
+ dl_list_del(&ip6addr->list);
|
||||
os_free(ip6addr);
|
||||
}
|
||||
}
|
||||
20
feeds/ipq95xx/hostapd/patches/050-build_fix.patch
Normal file
20
feeds/ipq95xx/hostapd/patches/050-build_fix.patch
Normal file
@@ -0,0 +1,20 @@
|
||||
--- a/hostapd/Makefile
|
||||
+++ b/hostapd/Makefile
|
||||
@@ -324,6 +324,7 @@ ifdef CONFIG_FILS
|
||||
CFLAGS += -DCONFIG_FILS
|
||||
OBJS += ../src/ap/fils_hlp.o
|
||||
NEED_SHA384=y
|
||||
+NEED_HMAC_SHA384_KDF=y
|
||||
NEED_AES_SIV=y
|
||||
ifdef CONFIG_FILS_SK_PFS
|
||||
CFLAGS += -DCONFIG_FILS_SK_PFS
|
||||
--- a/wpa_supplicant/Makefile
|
||||
+++ b/wpa_supplicant/Makefile
|
||||
@@ -331,6 +331,7 @@ endif
|
||||
ifdef CONFIG_FILS
|
||||
CFLAGS += -DCONFIG_FILS
|
||||
NEED_SHA384=y
|
||||
+NEED_HMAC_SHA384_KDF=y
|
||||
NEED_AES_SIV=y
|
||||
ifdef CONFIG_FILS_SK_PFS
|
||||
CFLAGS += -DCONFIG_FILS_SK_PFS
|
||||
@@ -1,97 +0,0 @@
|
||||
--- a/src/utils/os_unix.c
|
||||
+++ b/src/utils/os_unix.c
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
#include <time.h>
|
||||
#include <sys/wait.h>
|
||||
+#include <fcntl.h>
|
||||
|
||||
#ifdef ANDROID
|
||||
#include <sys/capability.h>
|
||||
@@ -188,59 +189,46 @@ int os_gmtime(os_time_t t, struct os_tm
|
||||
return 0;
|
||||
}
|
||||
|
||||
-
|
||||
-#ifdef __APPLE__
|
||||
-#include <fcntl.h>
|
||||
-static int os_daemon(int nochdir, int noclose)
|
||||
+int os_daemonize(const char *pid_file)
|
||||
{
|
||||
- int devnull;
|
||||
+ int pid = 0, i, devnull;
|
||||
|
||||
- if (chdir("/") < 0)
|
||||
- return -1;
|
||||
+#if defined(__uClinux__) || defined(__sun__)
|
||||
+ return -1;
|
||||
+#else /* defined(__uClinux__) || defined(__sun__) */
|
||||
|
||||
- devnull = open("/dev/null", O_RDWR);
|
||||
- if (devnull < 0)
|
||||
+#ifndef __APPLE__
|
||||
+ pid = fork();
|
||||
+ if (pid < 0)
|
||||
return -1;
|
||||
+#endif
|
||||
|
||||
- if (dup2(devnull, STDIN_FILENO) < 0) {
|
||||
- close(devnull);
|
||||
- return -1;
|
||||
+ if (pid > 0) {
|
||||
+ if (pid_file) {
|
||||
+ FILE *f = fopen(pid_file, "w");
|
||||
+ if (f) {
|
||||
+ fprintf(f, "%u\n", pid);
|
||||
+ fclose(f);
|
||||
+ }
|
||||
+ }
|
||||
+ _exit(0);
|
||||
}
|
||||
|
||||
- if (dup2(devnull, STDOUT_FILENO) < 0) {
|
||||
- close(devnull);
|
||||
+ if (setsid() < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
- if (dup2(devnull, STDERR_FILENO) < 0) {
|
||||
- close(devnull);
|
||||
+ if (chdir("/") < 0)
|
||||
return -1;
|
||||
- }
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-#else /* __APPLE__ */
|
||||
-#define os_daemon daemon
|
||||
-#endif /* __APPLE__ */
|
||||
|
||||
-
|
||||
-int os_daemonize(const char *pid_file)
|
||||
-{
|
||||
-#if defined(__uClinux__) || defined(__sun__)
|
||||
- return -1;
|
||||
-#else /* defined(__uClinux__) || defined(__sun__) */
|
||||
- if (os_daemon(0, 0)) {
|
||||
- perror("daemon");
|
||||
+ devnull = open("/dev/null", O_RDWR);
|
||||
+ if (devnull < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
- if (pid_file) {
|
||||
- FILE *f = fopen(pid_file, "w");
|
||||
- if (f) {
|
||||
- fprintf(f, "%u\n", getpid());
|
||||
- fclose(f);
|
||||
- }
|
||||
- }
|
||||
+ for (i = 0; i <= STDERR_FILENO; i++)
|
||||
+ dup2(devnull, i);
|
||||
+
|
||||
+ if (devnull > 2)
|
||||
+ close(devnull);
|
||||
|
||||
return -0;
|
||||
#endif /* defined(__uClinux__) || defined(__sun__) */
|
||||
File diff suppressed because it is too large
Load Diff
114
feeds/ipq95xx/hostapd/patches/120-mbedtls-fips186_2_prf.patch
Normal file
114
feeds/ipq95xx/hostapd/patches/120-mbedtls-fips186_2_prf.patch
Normal file
@@ -0,0 +1,114 @@
|
||||
From c8dba4bd750269bcc80fed3d546e2077cb4cdf0e Mon Sep 17 00:00:00 2001
|
||||
From: Glenn Strauss <gstrauss@gluelogic.com>
|
||||
Date: Tue, 19 Jul 2022 20:02:21 -0400
|
||||
Subject: [PATCH 2/7] mbedtls: fips186_2_prf()
|
||||
|
||||
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
|
||||
---
|
||||
hostapd/Makefile | 4 ---
|
||||
src/crypto/crypto_mbedtls.c | 60 +++++++++++++++++++++++++++++++++++++
|
||||
wpa_supplicant/Makefile | 4 ---
|
||||
3 files changed, 60 insertions(+), 8 deletions(-)
|
||||
|
||||
--- a/hostapd/Makefile
|
||||
+++ b/hostapd/Makefile
|
||||
@@ -759,10 +759,6 @@ endif
|
||||
OBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
|
||||
HOBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
|
||||
SOBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
|
||||
-ifdef NEED_FIPS186_2_PRF
|
||||
-OBJS += ../src/crypto/fips_prf_internal.o
|
||||
-SHA1OBJS += ../src/crypto/sha1-internal.o
|
||||
-endif
|
||||
ifeq ($(CONFIG_CRYPTO), mbedtls)
|
||||
ifdef CONFIG_DPP
|
||||
LIBS += -lmbedx509
|
||||
--- a/src/crypto/crypto_mbedtls.c
|
||||
+++ b/src/crypto/crypto_mbedtls.c
|
||||
@@ -132,6 +132,12 @@
|
||||
#define CRYPTO_MBEDTLS_HMAC_KDF_SHA512
|
||||
#endif
|
||||
|
||||
+#if defined(EAP_SIM) || defined(EAP_SIM_DYNAMIC) || defined(EAP_SERVER_SIM) \
|
||||
+ || defined(EAP_AKA) || defined(EAP_AKA_DYNAMIC) || defined(EAP_SERVER_AKA)
|
||||
+/* EAP_SIM=y EAP_AKA=y */
|
||||
+#define CRYPTO_MBEDTLS_FIPS186_2_PRF
|
||||
+#endif
|
||||
+
|
||||
#if defined(EAP_FAST) || defined(EAP_FAST_DYNAMIC) || defined(EAP_SERVER_FAST) \
|
||||
|| defined(EAP_TEAP) || defined(EAP_TEAP_DYNAMIC) || defined(EAP_SERVER_FAST)
|
||||
#define CRYPTO_MBEDTLS_SHA1_T_PRF
|
||||
@@ -813,6 +819,60 @@ int sha1_t_prf(const u8 *key, size_t key
|
||||
|
||||
#endif /* CRYPTO_MBEDTLS_SHA1_T_PRF */
|
||||
|
||||
+#ifdef CRYPTO_MBEDTLS_FIPS186_2_PRF
|
||||
+
|
||||
+/* fips_prf_internal.c sha1-internal.c */
|
||||
+
|
||||
+/* used only by src/eap_common/eap_sim_common.c:eap_sim_prf()
|
||||
+ * for eap_sim_derive_keys() and eap_sim_derive_keys_reauth()
|
||||
+ * where xlen is 160 */
|
||||
+
|
||||
+int fips186_2_prf(const u8 *seed, size_t seed_len, u8 *x, size_t xlen)
|
||||
+{
|
||||
+ /* FIPS 186-2 + change notice 1 */
|
||||
+
|
||||
+ mbedtls_sha1_context ctx;
|
||||
+ u8 * const xkey = ctx.MBEDTLS_PRIVATE(buffer);
|
||||
+ u32 * const xstate = ctx.MBEDTLS_PRIVATE(state);
|
||||
+ const u32 xstate_init[] =
|
||||
+ { 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0 };
|
||||
+
|
||||
+ mbedtls_sha1_init(&ctx);
|
||||
+ os_memcpy(xkey, seed, seed_len < 64 ? seed_len : 64);
|
||||
+
|
||||
+ /* note: does not fill extra bytes if (xlen % 20) (SHA1_MAC_LEN) */
|
||||
+ for (; xlen >= 20; xlen -= 20) {
|
||||
+ /* XSEED_j = 0 */
|
||||
+ /* XVAL = (XKEY + XSEED_j) mod 2^b */
|
||||
+
|
||||
+ /* w_i = G(t, XVAL) */
|
||||
+ os_memcpy(xstate, xstate_init, sizeof(xstate_init));
|
||||
+ mbedtls_internal_sha1_process(&ctx, xkey);
|
||||
+
|
||||
+ #if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
+ xstate[0] = host_to_be32(xstate[0]);
|
||||
+ xstate[1] = host_to_be32(xstate[1]);
|
||||
+ xstate[2] = host_to_be32(xstate[2]);
|
||||
+ xstate[3] = host_to_be32(xstate[3]);
|
||||
+ xstate[4] = host_to_be32(xstate[4]);
|
||||
+ #endif
|
||||
+ os_memcpy(x, xstate, 20);
|
||||
+ if (xlen == 20) /*(done; skip prep for next loop)*/
|
||||
+ break;
|
||||
+
|
||||
+ /* XKEY = (1 + XKEY + w_i) mod 2^b */
|
||||
+ for (u32 carry = 1, k = 20; k-- > 0; carry >>= 8)
|
||||
+ xkey[k] = (carry += xkey[k] + x[k]) & 0xff;
|
||||
+ x += 20;
|
||||
+ /* x_j = w_0|w_1 (each pair of iterations through loop)*/
|
||||
+ }
|
||||
+
|
||||
+ mbedtls_sha1_free(&ctx);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#endif /* CRYPTO_MBEDTLS_FIPS186_2_PRF */
|
||||
+
|
||||
#endif /* MBEDTLS_SHA1_C */
|
||||
|
||||
|
||||
--- a/wpa_supplicant/Makefile
|
||||
+++ b/wpa_supplicant/Makefile
|
||||
@@ -1174,10 +1174,6 @@ endif
|
||||
OBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
|
||||
OBJS_p += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
|
||||
OBJS_priv += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
|
||||
-ifdef NEED_FIPS186_2_PRF
|
||||
-OBJS += ../src/crypto/fips_prf_internal.o
|
||||
-SHA1OBJS += ../src/crypto/sha1-internal.o
|
||||
-endif
|
||||
ifeq ($(CONFIG_CRYPTO), mbedtls)
|
||||
LIBS += -lmbedcrypto
|
||||
LIBS_p += -lmbedcrypto
|
||||
@@ -0,0 +1,421 @@
|
||||
From 31bd19e0e0254b910cccfd3ddc6a6a9222bbcfc0 Mon Sep 17 00:00:00 2001
|
||||
From: Glenn Strauss <gstrauss@gluelogic.com>
|
||||
Date: Sun, 9 Oct 2022 05:12:17 -0400
|
||||
Subject: [PATCH 3/7] mbedtls: annotate with TEST_FAIL() for hwsim tests
|
||||
|
||||
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
|
||||
---
|
||||
src/crypto/crypto_mbedtls.c | 124 ++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 124 insertions(+)
|
||||
|
||||
--- a/src/crypto/crypto_mbedtls.c
|
||||
+++ b/src/crypto/crypto_mbedtls.c
|
||||
@@ -280,6 +280,9 @@ __attribute_noinline__
|
||||
static int md_vector(size_t num_elem, const u8 *addr[], const size_t *len,
|
||||
u8 *mac, mbedtls_md_type_t md_type)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
mbedtls_md_context_t ctx;
|
||||
mbedtls_md_init(&ctx);
|
||||
if (mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(md_type), 0) != 0){
|
||||
@@ -343,6 +346,9 @@ __attribute_noinline__
|
||||
static int sha384_512_vector(size_t num_elem, const u8 *addr[],
|
||||
const size_t *len, u8 *mac, int is384)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
struct mbedtls_sha512_context ctx;
|
||||
mbedtls_sha512_init(&ctx);
|
||||
#if MBEDTLS_VERSION_MAJOR >= 3
|
||||
@@ -375,6 +381,9 @@ int sha384_vector(size_t num_elem, const
|
||||
#include <mbedtls/sha256.h>
|
||||
int sha256_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
struct mbedtls_sha256_context ctx;
|
||||
mbedtls_sha256_init(&ctx);
|
||||
#if MBEDTLS_VERSION_MAJOR >= 3
|
||||
@@ -397,6 +406,9 @@ int sha256_vector(size_t num_elem, const
|
||||
#include <mbedtls/sha1.h>
|
||||
int sha1_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
struct mbedtls_sha1_context ctx;
|
||||
mbedtls_sha1_init(&ctx);
|
||||
#if MBEDTLS_VERSION_MAJOR >= 3
|
||||
@@ -419,6 +431,9 @@ int sha1_vector(size_t num_elem, const u
|
||||
#include <mbedtls/md5.h>
|
||||
int md5_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
struct mbedtls_md5_context ctx;
|
||||
mbedtls_md5_init(&ctx);
|
||||
#if MBEDTLS_VERSION_MAJOR >= 3
|
||||
@@ -441,6 +456,9 @@ int md5_vector(size_t num_elem, const u8
|
||||
#include <mbedtls/md4.h>
|
||||
int md4_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
struct mbedtls_md4_context ctx;
|
||||
mbedtls_md4_init(&ctx);
|
||||
mbedtls_md4_starts_ret(&ctx);
|
||||
@@ -460,6 +478,9 @@ static int hmac_vector(const u8 *key, si
|
||||
const u8 *addr[], const size_t *len, u8 *mac,
|
||||
mbedtls_md_type_t md_type)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
mbedtls_md_context_t ctx;
|
||||
mbedtls_md_init(&ctx);
|
||||
if (mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(md_type), 1) != 0){
|
||||
@@ -571,6 +592,9 @@ static int hmac_kdf_expand(const u8 *prk
|
||||
const char *label, const u8 *info, size_t info_len,
|
||||
u8 *okm, size_t okm_len, mbedtls_md_type_t md_type)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type(md_type);
|
||||
#ifdef MBEDTLS_HKDF_C
|
||||
if (label == NULL) /* RFC 5869 HKDF-Expand when (label == NULL) */
|
||||
@@ -663,6 +687,9 @@ static int hmac_prf_bits(const u8 *key,
|
||||
const u8 *data, size_t data_len, u8 *buf,
|
||||
size_t buf_len_bits, mbedtls_md_type_t md_type)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
mbedtls_md_context_t ctx;
|
||||
mbedtls_md_init(&ctx);
|
||||
const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type(md_type);
|
||||
@@ -938,6 +965,9 @@ int pbkdf2_sha1(const char *passphrase,
|
||||
|
||||
static void *aes_crypt_init_mode(const u8 *key, size_t len, int mode)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return NULL;
|
||||
+
|
||||
mbedtls_aes_context *aes = os_malloc(sizeof(*aes));
|
||||
if (!aes)
|
||||
return NULL;
|
||||
@@ -996,6 +1026,9 @@ void aes_decrypt_deinit(void *ctx)
|
||||
/* aes-wrap.c */
|
||||
int aes_wrap(const u8 *kek, size_t kek_len, int n, const u8 *plain, u8 *cipher)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
mbedtls_nist_kw_context ctx;
|
||||
mbedtls_nist_kw_init(&ctx);
|
||||
size_t olen;
|
||||
@@ -1010,6 +1043,9 @@ int aes_wrap(const u8 *kek, size_t kek_l
|
||||
/* aes-unwrap.c */
|
||||
int aes_unwrap(const u8 *kek, size_t kek_len, int n, const u8 *cipher, u8 *plain)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
mbedtls_nist_kw_context ctx;
|
||||
mbedtls_nist_kw_init(&ctx);
|
||||
size_t olen;
|
||||
@@ -1041,6 +1077,9 @@ int omac1_aes_vector(
|
||||
const u8 *key, size_t key_len, size_t num_elem, const u8 *addr[],
|
||||
const size_t *len, u8 *mac)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
mbedtls_cipher_type_t cipher_type;
|
||||
switch (key_len) {
|
||||
case 16: cipher_type = MBEDTLS_CIPHER_AES_128_ECB; break;
|
||||
@@ -1103,6 +1142,9 @@ int omac1_aes_256(const u8 *key, const u
|
||||
/* aes-encblock.c */
|
||||
int aes_128_encrypt_block(const u8 *key, const u8 *in, u8 *out)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
mbedtls_aes_context aes;
|
||||
mbedtls_aes_init(&aes);
|
||||
int ret = mbedtls_aes_setkey_enc(&aes, key, 128)
|
||||
@@ -1118,6 +1160,9 @@ int aes_128_encrypt_block(const u8 *key,
|
||||
int aes_ctr_encrypt(const u8 *key, size_t key_len, const u8 *nonce,
|
||||
u8 *data, size_t data_len)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
unsigned char counter[MBEDTLS_AES_BLOCK_SIZE];
|
||||
unsigned char stream_block[MBEDTLS_AES_BLOCK_SIZE];
|
||||
os_memcpy(counter, nonce, MBEDTLS_AES_BLOCK_SIZE);/*(must be writable)*/
|
||||
@@ -1160,11 +1205,17 @@ static int aes_128_cbc_oper(const u8 *ke
|
||||
|
||||
int aes_128_cbc_encrypt(const u8 *key, const u8 *iv, u8 *data, size_t data_len)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
return aes_128_cbc_oper(key, iv, data, data_len, MBEDTLS_AES_ENCRYPT);
|
||||
}
|
||||
|
||||
int aes_128_cbc_decrypt(const u8 *key, const u8 *iv, u8 *data, size_t data_len)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
return aes_128_cbc_oper(key, iv, data, data_len, MBEDTLS_AES_DECRYPT);
|
||||
}
|
||||
|
||||
@@ -1407,6 +1458,10 @@ int crypto_hash_finish(struct crypto_has
|
||||
}
|
||||
mbedtls_md_free(mctx);
|
||||
os_free(mctx);
|
||||
+
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1421,6 +1476,9 @@ int crypto_hash_finish(struct crypto_has
|
||||
|
||||
struct crypto_bignum *crypto_bignum_init(void)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return NULL;
|
||||
+
|
||||
mbedtls_mpi *bn = os_malloc(sizeof(*bn));
|
||||
if (bn)
|
||||
mbedtls_mpi_init(bn);
|
||||
@@ -1429,6 +1487,9 @@ struct crypto_bignum *crypto_bignum_init
|
||||
|
||||
struct crypto_bignum *crypto_bignum_init_set(const u8 *buf, size_t len)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return NULL;
|
||||
+
|
||||
mbedtls_mpi *bn = os_malloc(sizeof(*bn));
|
||||
if (bn) {
|
||||
mbedtls_mpi_init(bn);
|
||||
@@ -1442,6 +1503,9 @@ struct crypto_bignum *crypto_bignum_init
|
||||
|
||||
struct crypto_bignum *crypto_bignum_init_uint(unsigned int val)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return NULL;
|
||||
+
|
||||
#if 0 /*(hostap use of this interface passes int, not uint)*/
|
||||
val = host_to_be32(val);
|
||||
return crypto_bignum_init_set((const u8 *)&val, sizeof(val));
|
||||
@@ -1467,6 +1531,9 @@ void crypto_bignum_deinit(struct crypto_
|
||||
int crypto_bignum_to_bin(const struct crypto_bignum *a,
|
||||
u8 *buf, size_t buflen, size_t padlen)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
size_t n = mbedtls_mpi_size((mbedtls_mpi *)a);
|
||||
if (n < padlen)
|
||||
n = padlen;
|
||||
@@ -1477,6 +1544,9 @@ int crypto_bignum_to_bin(const struct cr
|
||||
|
||||
int crypto_bignum_rand(struct crypto_bignum *r, const struct crypto_bignum *m)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
/*assert(r != m);*//* r must not be same as m for mbedtls_mpi_random()*/
|
||||
#if MBEDTLS_VERSION_NUMBER >= 0x021B0000 /* mbedtls 2.27.0 */
|
||||
return mbedtls_mpi_random((mbedtls_mpi *)r, 0, (mbedtls_mpi *)m,
|
||||
@@ -1513,6 +1583,9 @@ int crypto_bignum_exptmod(const struct c
|
||||
const struct crypto_bignum *c,
|
||||
struct crypto_bignum *d)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
/* (check if input params match d; d is the result) */
|
||||
/* (a == d) is ok in current mbedtls implementation */
|
||||
if (b == d || c == d) { /*(not ok; store result in intermediate)*/
|
||||
@@ -1540,6 +1613,9 @@ int crypto_bignum_inverse(const struct c
|
||||
const struct crypto_bignum *b,
|
||||
struct crypto_bignum *c)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
return mbedtls_mpi_inv_mod((mbedtls_mpi *)c,
|
||||
(const mbedtls_mpi *)a,
|
||||
(const mbedtls_mpi *)b) ? -1 : 0;
|
||||
@@ -1549,6 +1625,9 @@ int crypto_bignum_sub(const struct crypt
|
||||
const struct crypto_bignum *b,
|
||||
struct crypto_bignum *c)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
return mbedtls_mpi_sub_mpi((mbedtls_mpi *)c,
|
||||
(const mbedtls_mpi *)a,
|
||||
(const mbedtls_mpi *)b) ? -1 : 0;
|
||||
@@ -1558,6 +1637,9 @@ int crypto_bignum_div(const struct crypt
|
||||
const struct crypto_bignum *b,
|
||||
struct crypto_bignum *c)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
/*(most current use of this crypto.h interface has a == c (result),
|
||||
* so store result in an intermediate to avoid overwritten input)*/
|
||||
mbedtls_mpi R;
|
||||
@@ -1575,6 +1657,9 @@ int crypto_bignum_addmod(const struct cr
|
||||
const struct crypto_bignum *c,
|
||||
struct crypto_bignum *d)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
return mbedtls_mpi_add_mpi((mbedtls_mpi *)d,
|
||||
(const mbedtls_mpi *)a,
|
||||
(const mbedtls_mpi *)b)
|
||||
@@ -1588,6 +1673,9 @@ int crypto_bignum_mulmod(const struct cr
|
||||
const struct crypto_bignum *c,
|
||||
struct crypto_bignum *d)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
return mbedtls_mpi_mul_mpi((mbedtls_mpi *)d,
|
||||
(const mbedtls_mpi *)a,
|
||||
(const mbedtls_mpi *)b)
|
||||
@@ -1600,6 +1688,9 @@ int crypto_bignum_sqrmod(const struct cr
|
||||
const struct crypto_bignum *b,
|
||||
struct crypto_bignum *c)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
#if 1
|
||||
return crypto_bignum_mulmod(a, a, b, c);
|
||||
#else
|
||||
@@ -1650,6 +1741,9 @@ int crypto_bignum_is_odd(const struct cr
|
||||
int crypto_bignum_legendre(const struct crypto_bignum *a,
|
||||
const struct crypto_bignum *p)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -2;
|
||||
+
|
||||
/* Security Note:
|
||||
* mbedtls_mpi_exp_mod() is not documented to run in constant time,
|
||||
* though mbedtls/library/bignum.c uses constant_time_internal.h funcs.
|
||||
@@ -1702,6 +1796,9 @@ int crypto_mod_exp(const u8 *base, size_
|
||||
const u8 *modulus, size_t modulus_len,
|
||||
u8 *result, size_t *result_len)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
mbedtls_mpi bn_base, bn_exp, bn_modulus, bn_result;
|
||||
mbedtls_mpi_init(&bn_base);
|
||||
mbedtls_mpi_init(&bn_exp);
|
||||
@@ -1769,6 +1866,9 @@ static int crypto_mbedtls_dh_init_public
|
||||
int crypto_dh_init(u8 generator, const u8 *prime, size_t prime_len, u8 *privkey,
|
||||
u8 *pubkey)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
#if 0 /*(crypto_dh_init() duplicated (and identical) in crypto_*.c modules)*/
|
||||
size_t pubkey_len, pad;
|
||||
|
||||
@@ -1810,6 +1910,9 @@ int crypto_dh_derive_secret(u8 generator
|
||||
const u8 *pubkey, size_t pubkey_len,
|
||||
u8 *secret, size_t *len)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
#if 0
|
||||
if (pubkey_len > prime_len ||
|
||||
(pubkey_len == prime_len &&
|
||||
@@ -2512,6 +2615,9 @@ const struct crypto_ec_point * crypto_ec
|
||||
|
||||
struct crypto_ec_point *crypto_ec_point_init(struct crypto_ec *e)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return NULL;
|
||||
+
|
||||
mbedtls_ecp_point *p = os_malloc(sizeof(*p));
|
||||
if (p != NULL)
|
||||
mbedtls_ecp_point_init(p);
|
||||
@@ -2536,6 +2642,9 @@ int crypto_ec_point_x(struct crypto_ec *
|
||||
int crypto_ec_point_to_bin(struct crypto_ec *e,
|
||||
const struct crypto_ec_point *point, u8 *x, u8 *y)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
/* crypto.h documents crypto_ec_point_to_bin() output is big-endian */
|
||||
size_t len = CRYPTO_EC_plen(e);
|
||||
if (x) {
|
||||
@@ -2563,6 +2672,9 @@ int crypto_ec_point_to_bin(struct crypto
|
||||
struct crypto_ec_point * crypto_ec_point_from_bin(struct crypto_ec *e,
|
||||
const u8 *val)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return NULL;
|
||||
+
|
||||
size_t len = CRYPTO_EC_plen(e);
|
||||
mbedtls_ecp_point *p = os_malloc(sizeof(*p));
|
||||
u8 buf[1+MBEDTLS_MPI_MAX_SIZE*2];
|
||||
@@ -2615,6 +2727,9 @@ int crypto_ec_point_add(struct crypto_ec
|
||||
const struct crypto_ec_point *b,
|
||||
struct crypto_ec_point *c)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
/* mbedtls does not provide an mbedtls_ecp_point add function */
|
||||
mbedtls_mpi one;
|
||||
mbedtls_mpi_init(&one);
|
||||
@@ -2631,6 +2746,9 @@ int crypto_ec_point_mul(struct crypto_ec
|
||||
const struct crypto_bignum *b,
|
||||
struct crypto_ec_point *res)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
return mbedtls_ecp_mul(
|
||||
(mbedtls_ecp_group *)e, (mbedtls_ecp_point *)res,
|
||||
(const mbedtls_mpi *)b, (const mbedtls_ecp_point *)p,
|
||||
@@ -2639,6 +2757,9 @@ int crypto_ec_point_mul(struct crypto_ec
|
||||
|
||||
int crypto_ec_point_invert(struct crypto_ec *e, struct crypto_ec_point *p)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return -1;
|
||||
+
|
||||
if (mbedtls_ecp_get_type((mbedtls_ecp_group *)e)
|
||||
== MBEDTLS_ECP_TYPE_MONTGOMERY) {
|
||||
/* e.g. MBEDTLS_ECP_DP_CURVE25519 and MBEDTLS_ECP_DP_CURVE448 */
|
||||
@@ -2751,6 +2872,9 @@ struct crypto_bignum *
|
||||
crypto_ec_point_compute_y_sqr(struct crypto_ec *e,
|
||||
const struct crypto_bignum *x)
|
||||
{
|
||||
+ if (TEST_FAIL())
|
||||
+ return NULL;
|
||||
+
|
||||
mbedtls_mpi *y2 = os_malloc(sizeof(*y2));
|
||||
if (y2 == NULL)
|
||||
return NULL;
|
||||
@@ -0,0 +1,91 @@
|
||||
The code for hostapd-mbedtls did not work when used for OWE association.
|
||||
|
||||
When handling association requests, the buffer offsets and length assumptions were incorrect, leading to never calculating the y point, thus denying association.
|
||||
|
||||
Also when crafting the association response, the buffer contained the trailing key-type.
|
||||
|
||||
Fix up both issues to adhere to the specification and make hostapd-mbedtls work with the OWE security type.
|
||||
|
||||
--- a/src/crypto/crypto_mbedtls.c
|
||||
+++ b/src/crypto/crypto_mbedtls.c
|
||||
@@ -2299,25 +2299,30 @@ struct crypto_ecdh * crypto_ecdh_init2(i
|
||||
struct wpabuf * crypto_ecdh_get_pubkey(struct crypto_ecdh *ecdh, int inc_y)
|
||||
{
|
||||
mbedtls_ecp_group *grp = &ecdh->grp;
|
||||
- size_t len = CRYPTO_EC_plen(grp);
|
||||
+ size_t prime_len = CRYPTO_EC_plen(grp);
|
||||
+ size_t output_len = prime_len;
|
||||
+ u8 output_offset = 0;
|
||||
+ u8 buf[256];
|
||||
+
|
||||
#ifdef MBEDTLS_ECP_MONTGOMERY_ENABLED
|
||||
/* len */
|
||||
#endif
|
||||
#ifdef MBEDTLS_ECP_SHORT_WEIERSTRASS_ENABLED
|
||||
- if (mbedtls_ecp_get_type(grp) == MBEDTLS_ECP_TYPE_SHORT_WEIERSTRASS)
|
||||
- len = inc_y ? len*2+1 : len+1;
|
||||
+ if (mbedtls_ecp_get_type(grp) == MBEDTLS_ECP_TYPE_SHORT_WEIERSTRASS) {
|
||||
+ output_len = inc_y ? prime_len * 2 + 1 : prime_len + 1;
|
||||
+ output_offset = 1;
|
||||
+ }
|
||||
#endif
|
||||
- struct wpabuf *buf = wpabuf_alloc(len);
|
||||
- if (buf == NULL)
|
||||
+
|
||||
+ if (output_len > sizeof(buf))
|
||||
return NULL;
|
||||
+
|
||||
inc_y = inc_y ? MBEDTLS_ECP_PF_UNCOMPRESSED : MBEDTLS_ECP_PF_COMPRESSED;
|
||||
- if (mbedtls_ecp_point_write_binary(grp, &ecdh->Q, inc_y, &len,
|
||||
- wpabuf_mhead_u8(buf), len) == 0) {
|
||||
- wpabuf_put(buf, len);
|
||||
- return buf;
|
||||
+ if (mbedtls_ecp_point_write_binary(grp, &ecdh->Q, inc_y, &output_len,
|
||||
+ buf, output_len) == 0) {
|
||||
+ return wpabuf_alloc_copy(buf + output_offset, output_len - output_offset);
|
||||
}
|
||||
|
||||
- wpabuf_free(buf);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -2379,10 +2384,7 @@ struct wpabuf * crypto_ecdh_set_peerkey(
|
||||
os_memcpy(buf+2, key, len);
|
||||
}
|
||||
len >>= 1; /*(repurpose len to prime_len)*/
|
||||
- }
|
||||
- else if (key[0] == 0x02 || key[0] == 0x03) { /* (inc_y == 0) */
|
||||
- --len; /*(repurpose len to prime_len)*/
|
||||
-
|
||||
+ } else { /* (inc_y == 0) */
|
||||
/* mbedtls_ecp_point_read_binary() does not currently support
|
||||
* MBEDTLS_ECP_PF_COMPRESSED format (buf[1] = 0x02 or 0x03)
|
||||
* (returns MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE) */
|
||||
@@ -2390,22 +2392,21 @@ struct wpabuf * crypto_ecdh_set_peerkey(
|
||||
/* derive y, amend buf[] with y for UNCOMPRESSED format */
|
||||
if (sizeof(buf)-2 < len*2 || len == 0)
|
||||
return NULL;
|
||||
+
|
||||
buf[0] = (u8)(1+len*2);
|
||||
buf[1] = 0x04;
|
||||
+ os_memcpy(buf+2, key, len);
|
||||
+
|
||||
mbedtls_mpi bn;
|
||||
mbedtls_mpi_init(&bn);
|
||||
- int ret = mbedtls_mpi_read_binary(&bn, key+1, len)
|
||||
- || crypto_mbedtls_short_weierstrass_derive_y(grp, &bn,
|
||||
- key[0] & 1)
|
||||
+ int ret = mbedtls_mpi_read_binary(&bn, key, len)
|
||||
+ || crypto_mbedtls_short_weierstrass_derive_y(grp, &bn, 0)
|
||||
|| mbedtls_mpi_write_binary(&bn, buf+2+len, len);
|
||||
mbedtls_mpi_free(&bn);
|
||||
if (ret != 0)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- if (key[0] == 0) /*(repurpose len to prime_len)*/
|
||||
- len = CRYPTO_EC_plen(grp);
|
||||
-
|
||||
if (mbedtls_ecdh_read_public(&ecdh->ctx, buf, buf[0]+1))
|
||||
return NULL;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,45 @@
|
||||
From 33afce36c54b0cad38643629ded10ff5d727f077 Mon Sep 17 00:00:00 2001
|
||||
From: Glenn Strauss <gstrauss@gluelogic.com>
|
||||
Date: Fri, 12 Aug 2022 05:34:47 -0400
|
||||
Subject: [PATCH 5/7] add NULL checks (encountered during tests/hwsim)
|
||||
|
||||
sae_derive_commit_element_ecc NULL pwe_ecc check
|
||||
dpp_gen_keypair() NULL curve check
|
||||
|
||||
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
|
||||
---
|
||||
src/common/dpp_crypto.c | 6 ++++++
|
||||
src/common/sae.c | 7 +++++++
|
||||
2 files changed, 13 insertions(+)
|
||||
|
||||
--- a/src/common/dpp_crypto.c
|
||||
+++ b/src/common/dpp_crypto.c
|
||||
@@ -269,6 +269,12 @@ int dpp_get_pubkey_hash(struct crypto_ec
|
||||
|
||||
struct crypto_ec_key * dpp_gen_keypair(const struct dpp_curve_params *curve)
|
||||
{
|
||||
+ if (curve == NULL) {
|
||||
+ wpa_printf(MSG_DEBUG,
|
||||
+ "DPP: %s curve must be initialized", __func__);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
struct crypto_ec_key *key;
|
||||
|
||||
wpa_printf(MSG_DEBUG, "DPP: Generating a keypair");
|
||||
--- a/src/common/sae.c
|
||||
+++ b/src/common/sae.c
|
||||
@@ -1278,6 +1278,13 @@ void sae_deinit_pt(struct sae_pt *pt)
|
||||
static int sae_derive_commit_element_ecc(struct sae_data *sae,
|
||||
struct crypto_bignum *mask)
|
||||
{
|
||||
+ if (sae->tmp->pwe_ecc == NULL) {
|
||||
+ wpa_printf(MSG_DEBUG,
|
||||
+ "SAE: %s sae->tmp->pwe_ecc must be initialized",
|
||||
+ __func__);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
/* COMMIT-ELEMENT = inverse(scalar-op(mask, PWE)) */
|
||||
if (!sae->tmp->own_commit_element_ecc) {
|
||||
sae->tmp->own_commit_element_ecc =
|
||||
@@ -0,0 +1,26 @@
|
||||
From 54211caa2e0e5163aefef390daf88a971367a702 Mon Sep 17 00:00:00 2001
|
||||
From: Glenn Strauss <gstrauss@gluelogic.com>
|
||||
Date: Tue, 4 Oct 2022 17:09:24 -0400
|
||||
Subject: [PATCH 6/7] dpp_pkex: EC point mul w/ value < prime
|
||||
|
||||
crypto_ec_point_mul() with mbedtls requires point
|
||||
be multiplied by a multiplicand with value < prime
|
||||
|
||||
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
|
||||
---
|
||||
src/common/dpp_crypto.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/src/common/dpp_crypto.c
|
||||
+++ b/src/common/dpp_crypto.c
|
||||
@@ -1588,7 +1588,9 @@ dpp_pkex_derive_Qr(const struct dpp_curv
|
||||
Pr = crypto_ec_key_get_public_key(Pr_key);
|
||||
Qr = crypto_ec_point_init(ec);
|
||||
hash_bn = crypto_bignum_init_set(hash, curve->hash_len);
|
||||
- if (!Pr || !Qr || !hash_bn || crypto_ec_point_mul(ec, Pr, hash_bn, Qr))
|
||||
+ if (!Pr || !Qr || !hash_bn ||
|
||||
+ crypto_bignum_mod(hash_bn, crypto_ec_get_prime(ec), hash_bn) ||
|
||||
+ crypto_ec_point_mul(ec, Pr, hash_bn, Qr))
|
||||
goto fail;
|
||||
|
||||
if (crypto_ec_point_is_at_infinity(ec, Qr)) {
|
||||
@@ -0,0 +1,20 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Thu, 14 Sep 2023 10:53:50 +0200
|
||||
Subject: [PATCH] driver_nl80211: fix setting QoS map on secondary BSSs
|
||||
|
||||
The setting is per-BSS, not per PHY
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/src/drivers/driver_nl80211.c
|
||||
+++ b/src/drivers/driver_nl80211.c
|
||||
@@ -11341,7 +11341,7 @@ static int nl80211_set_qos_map(void *pri
|
||||
wpa_hexdump(MSG_DEBUG, "nl80211: Setting QoS Map",
|
||||
qos_map_set, qos_map_set_len);
|
||||
|
||||
- if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_SET_QOS_MAP)) ||
|
||||
+ if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_SET_QOS_MAP)) ||
|
||||
nla_put(msg, NL80211_ATTR_QOS_MAP, qos_map_set_len, qos_map_set)) {
|
||||
nlmsg_free(msg);
|
||||
return -ENOBUFS;
|
||||
@@ -0,0 +1,18 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Thu, 14 Sep 2023 11:28:03 +0200
|
||||
Subject: [PATCH] driver_nl80211: update drv->ifindex on removing the first
|
||||
BSS
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/src/drivers/driver_nl80211.c
|
||||
+++ b/src/drivers/driver_nl80211.c
|
||||
@@ -8867,6 +8867,7 @@ static int wpa_driver_nl80211_if_remove(
|
||||
if (drv->first_bss->next) {
|
||||
drv->first_bss = drv->first_bss->next;
|
||||
drv->ctx = drv->first_bss->ctx;
|
||||
+ drv->ifindex = drv->first_bss->ifindex;
|
||||
os_free(bss);
|
||||
} else {
|
||||
wpa_printf(MSG_DEBUG, "nl80211: No second BSS to reassign context to");
|
||||
@@ -0,0 +1,34 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Mon, 18 Sep 2023 16:47:41 +0200
|
||||
Subject: [PATCH] nl80211: move nl80211_put_freq_params call outside of
|
||||
802.11ax #ifdef
|
||||
|
||||
The relevance of this call is not specific to 802.11ax, so it should be done
|
||||
even with CONFIG_IEEE80211AX disabled.
|
||||
|
||||
Fixes: b3921db426ea ("nl80211: Add frequency info in start AP command")
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/src/drivers/driver_nl80211.c
|
||||
+++ b/src/drivers/driver_nl80211.c
|
||||
@@ -5226,6 +5226,9 @@ static int wpa_driver_nl80211_set_ap(voi
|
||||
nla_nest_end(msg, ftm);
|
||||
}
|
||||
|
||||
+ if (params->freq && nl80211_put_freq_params(msg, params->freq) < 0)
|
||||
+ goto fail;
|
||||
+
|
||||
#ifdef CONFIG_IEEE80211AX
|
||||
if (params->he_spr_ctrl) {
|
||||
struct nlattr *spr;
|
||||
@@ -5260,9 +5263,6 @@ static int wpa_driver_nl80211_set_ap(voi
|
||||
nla_nest_end(msg, spr);
|
||||
}
|
||||
|
||||
- if (params->freq && nl80211_put_freq_params(msg, params->freq) < 0)
|
||||
- goto fail;
|
||||
-
|
||||
if (params->freq && params->freq->he_enabled) {
|
||||
struct nlattr *bss_color;
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Wed, 20 Sep 2023 13:41:10 +0200
|
||||
Subject: [PATCH] hostapd: cancel channel_list_update_timeout in
|
||||
hostapd_cleanup_iface_partial
|
||||
|
||||
Fixes a crash when disabling an interface during channel list update
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/src/ap/hostapd.c
|
||||
+++ b/src/ap/hostapd.c
|
||||
@@ -569,6 +569,7 @@ static void sta_track_deinit(struct host
|
||||
void hostapd_cleanup_iface_partial(struct hostapd_iface *iface)
|
||||
{
|
||||
wpa_printf(MSG_DEBUG, "%s(%p)", __func__, iface);
|
||||
+ eloop_cancel_timeout(channel_list_update_timeout, iface, NULL);
|
||||
#ifdef NEED_AP_MLME
|
||||
hostapd_stop_setup_timers(iface);
|
||||
#endif /* NEED_AP_MLME */
|
||||
@@ -598,7 +599,6 @@ void hostapd_cleanup_iface_partial(struc
|
||||
static void hostapd_cleanup_iface(struct hostapd_iface *iface)
|
||||
{
|
||||
wpa_printf(MSG_DEBUG, "%s(%p)", __func__, iface);
|
||||
- eloop_cancel_timeout(channel_list_update_timeout, iface, NULL);
|
||||
eloop_cancel_timeout(hostapd_interface_setup_failure_handler, iface,
|
||||
NULL);
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
OBJS += ../src/ap/vlan_init.o
|
||||
OBJS += ../src/ap/vlan_ifconfig.o
|
||||
OBJS += ../src/ap/vlan.o
|
||||
@@ -349,10 +351,14 @@ CFLAGS += -DCONFIG_MBO
|
||||
@@ -357,10 +359,14 @@ CFLAGS += -DCONFIG_MBO
|
||||
OBJS += ../src/ap/mbo_ap.o
|
||||
endif
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
LIBS += $(DRV_AP_LIBS)
|
||||
|
||||
ifdef CONFIG_L2_PACKET
|
||||
@@ -1277,6 +1283,12 @@ install: $(addprefix $(DESTDIR)$(BINDIR)
|
||||
@@ -1380,6 +1386,12 @@ install: $(addprefix $(DESTDIR)$(BINDIR)
|
||||
_OBJS_VAR := OBJS
|
||||
include ../src/objs.mk
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
hostapd: $(OBJS)
|
||||
$(Q)$(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS)
|
||||
@$(E) " LD " $@
|
||||
@@ -1351,6 +1363,12 @@ include ../src/objs.mk
|
||||
@@ -1460,6 +1472,12 @@ include ../src/objs.mk
|
||||
_OBJS_VAR := SOBJS
|
||||
include ../src/objs.mk
|
||||
|
||||
@@ -64,15 +64,15 @@
|
||||
@$(E) " LD " $@
|
||||
--- a/wpa_supplicant/Makefile
|
||||
+++ b/wpa_supplicant/Makefile
|
||||
@@ -17,6 +17,7 @@ endif
|
||||
@@ -10,6 +10,7 @@ ALL += dbus/fi.w1.wpa_supplicant1.servic
|
||||
EXTRA_TARGETS=dynamic_eap_methods
|
||||
|
||||
CONFIG_FILE=.config
|
||||
+-include $(if $(MULTICALL),../hostapd/.config)
|
||||
include ../src/build.rules
|
||||
|
||||
ifdef LIBS
|
||||
@@ -354,7 +355,9 @@ endif
|
||||
ifdef CONFIG_BUILD_PASN_SO
|
||||
@@ -382,7 +383,9 @@ endif
|
||||
ifdef CONFIG_IBSS_RSN
|
||||
NEED_RSN_AUTHENTICATOR=y
|
||||
CFLAGS += -DCONFIG_IBSS_RSN
|
||||
@@ -82,7 +82,7 @@
|
||||
OBJS += ibss_rsn.o
|
||||
endif
|
||||
|
||||
@@ -886,6 +889,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS
|
||||
@@ -924,6 +927,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS
|
||||
CFLAGS += -DCONFIG_DYNAMIC_EAP_METHODS
|
||||
LIBS += -ldl -rdynamic
|
||||
endif
|
||||
@@ -93,7 +93,7 @@
|
||||
endif
|
||||
|
||||
ifdef CONFIG_AP
|
||||
@@ -893,9 +900,11 @@ NEED_EAP_COMMON=y
|
||||
@@ -931,9 +938,11 @@ NEED_EAP_COMMON=y
|
||||
NEED_RSN_AUTHENTICATOR=y
|
||||
CFLAGS += -DCONFIG_AP
|
||||
OBJS += ap.o
|
||||
@@ -105,7 +105,7 @@
|
||||
OBJS += ../src/ap/hostapd.o
|
||||
OBJS += ../src/ap/wpa_auth_glue.o
|
||||
OBJS += ../src/ap/utils.o
|
||||
@@ -975,6 +984,12 @@ endif
|
||||
@@ -1022,6 +1031,12 @@ endif
|
||||
ifdef CONFIG_HS20
|
||||
OBJS += ../src/ap/hs20.o
|
||||
endif
|
||||
@@ -118,7 +118,7 @@
|
||||
endif
|
||||
|
||||
ifdef CONFIG_MBO
|
||||
@@ -983,7 +998,9 @@ CFLAGS += -DCONFIG_MBO
|
||||
@@ -1030,7 +1045,9 @@ CFLAGS += -DCONFIG_MBO
|
||||
endif
|
||||
|
||||
ifdef NEED_RSN_AUTHENTICATOR
|
||||
@@ -128,7 +128,7 @@
|
||||
NEED_AES_WRAP=y
|
||||
OBJS += ../src/ap/wpa_auth.o
|
||||
OBJS += ../src/ap/wpa_auth_ie.o
|
||||
@@ -1878,6 +1895,12 @@ wpa_priv: $(BCHECK) $(OBJS_priv)
|
||||
@@ -2010,6 +2027,12 @@ wpa_priv: $(BCHECK) $(OBJS_priv)
|
||||
|
||||
_OBJS_VAR := OBJS
|
||||
include ../src/objs.mk
|
||||
@@ -141,7 +141,7 @@
|
||||
wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs)
|
||||
$(Q)$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS)
|
||||
@$(E) " LD " $@
|
||||
@@ -1983,6 +2006,12 @@ eap_eke.so: ../src/eap_peer/eap_eke.c ..
|
||||
@@ -2142,6 +2165,12 @@ eap_gpsk.so: $(SRC_EAP_GPSK)
|
||||
$(Q)sed -e 's|\@BINDIR\@|$(BINDIR)|g' $< >$@
|
||||
@$(E) " sed" $<
|
||||
|
||||
@@ -156,7 +156,7 @@
|
||||
wpa_cli.exe: wpa_cli
|
||||
--- a/src/drivers/driver.h
|
||||
+++ b/src/drivers/driver.h
|
||||
@@ -6018,8 +6018,8 @@ union wpa_event_data {
|
||||
@@ -6667,8 +6667,8 @@ union wpa_event_data {
|
||||
* Driver wrapper code should call this function whenever an event is received
|
||||
* from the driver.
|
||||
*/
|
||||
@@ -167,7 +167,7 @@
|
||||
|
||||
/**
|
||||
* wpa_supplicant_event_global - Report a driver event for wpa_supplicant
|
||||
@@ -6031,7 +6031,7 @@ void wpa_supplicant_event(void *ctx, enu
|
||||
@@ -6680,7 +6680,7 @@ void wpa_supplicant_event(void *ctx, enu
|
||||
* Same as wpa_supplicant_event(), but we search for the interface in
|
||||
* wpa_global.
|
||||
*/
|
||||
@@ -178,7 +178,7 @@
|
||||
/*
|
||||
--- a/src/ap/drv_callbacks.c
|
||||
+++ b/src/ap/drv_callbacks.c
|
||||
@@ -1827,8 +1827,8 @@ err:
|
||||
@@ -2184,8 +2184,8 @@ err:
|
||||
#endif /* CONFIG_OWE */
|
||||
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
{
|
||||
struct hostapd_data *hapd = ctx;
|
||||
#ifndef CONFIG_NO_STDOUT_DEBUG
|
||||
@@ -2073,7 +2073,7 @@ void wpa_supplicant_event(void *ctx, enu
|
||||
@@ -2489,7 +2489,7 @@ void wpa_supplicant_event(void *ctx, enu
|
||||
}
|
||||
|
||||
|
||||
@@ -200,7 +200,7 @@
|
||||
struct hapd_interfaces *interfaces = ctx;
|
||||
--- a/wpa_supplicant/wpa_priv.c
|
||||
+++ b/wpa_supplicant/wpa_priv.c
|
||||
@@ -1038,8 +1038,8 @@ static void wpa_priv_send_ft_response(st
|
||||
@@ -1039,8 +1039,8 @@ static void wpa_priv_send_ft_response(st
|
||||
}
|
||||
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
{
|
||||
struct wpa_priv_interface *iface = ctx;
|
||||
|
||||
@@ -1102,7 +1102,7 @@ void wpa_supplicant_event(void *ctx, enu
|
||||
@@ -1103,7 +1103,7 @@ void wpa_supplicant_event(void *ctx, enu
|
||||
}
|
||||
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
union wpa_event_data *data)
|
||||
{
|
||||
struct wpa_priv_global *global = ctx;
|
||||
@@ -1215,6 +1215,8 @@ int main(int argc, char *argv[])
|
||||
@@ -1217,6 +1217,8 @@ int main(int argc, char *argv[])
|
||||
if (os_program_init())
|
||||
return -1;
|
||||
|
||||
@@ -231,7 +231,7 @@
|
||||
os_memset(&global, 0, sizeof(global));
|
||||
--- a/wpa_supplicant/events.c
|
||||
+++ b/wpa_supplicant/events.c
|
||||
@@ -4666,8 +4666,8 @@ static void wpas_event_unprot_beacon(str
|
||||
@@ -5353,8 +5353,8 @@ static void wpas_link_reconfig(struct wp
|
||||
}
|
||||
|
||||
|
||||
@@ -242,7 +242,7 @@
|
||||
{
|
||||
struct wpa_supplicant *wpa_s = ctx;
|
||||
int resched;
|
||||
@@ -5512,7 +5512,7 @@ void wpa_supplicant_event(void *ctx, enu
|
||||
@@ -6272,7 +6272,7 @@ void wpa_supplicant_event(void *ctx, enu
|
||||
}
|
||||
|
||||
|
||||
@@ -253,7 +253,7 @@
|
||||
struct wpa_supplicant *wpa_s;
|
||||
--- a/wpa_supplicant/wpa_supplicant.c
|
||||
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||
@@ -6814,7 +6814,6 @@ struct wpa_interface * wpa_supplicant_ma
|
||||
@@ -7462,7 +7462,6 @@ struct wpa_interface * wpa_supplicant_ma
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -261,7 +261,7 @@
|
||||
/**
|
||||
* wpa_supplicant_match_existing - Match existing interfaces
|
||||
* @global: Pointer to global data from wpa_supplicant_init()
|
||||
@@ -6849,6 +6848,11 @@ static int wpa_supplicant_match_existing
|
||||
@@ -7497,6 +7496,11 @@ static int wpa_supplicant_match_existing
|
||||
|
||||
#endif /* CONFIG_MATCH_IFACE */
|
||||
|
||||
@@ -273,7 +273,7 @@
|
||||
|
||||
/**
|
||||
* wpa_supplicant_add_iface - Add a new network interface
|
||||
@@ -7105,6 +7109,8 @@ struct wpa_global * wpa_supplicant_init(
|
||||
@@ -7753,6 +7757,8 @@ struct wpa_global * wpa_supplicant_init(
|
||||
#ifndef CONFIG_NO_WPA_MSG
|
||||
wpa_msg_register_ifname_cb(wpa_supplicant_msg_ifname_cb);
|
||||
#endif /* CONFIG_NO_WPA_MSG */
|
||||
@@ -284,7 +284,7 @@
|
||||
wpa_debug_open_file(params->wpa_debug_file_path);
|
||||
--- a/hostapd/main.c
|
||||
+++ b/hostapd/main.c
|
||||
@@ -590,6 +590,11 @@ fail:
|
||||
@@ -698,6 +698,11 @@ fail:
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -296,14 +296,14 @@
|
||||
|
||||
#ifdef CONFIG_WPS
|
||||
static int gen_uuid(const char *txt_addr)
|
||||
@@ -683,6 +688,8 @@ int main(int argc, char *argv[])
|
||||
@@ -791,6 +796,8 @@ int main(int argc, char *argv[])
|
||||
return -1;
|
||||
#endif /* CONFIG_DPP */
|
||||
|
||||
+ wpa_supplicant_event = hostapd_wpa_event;
|
||||
+ wpa_supplicant_event_global = hostapd_wpa_event_global;
|
||||
for (;;) {
|
||||
c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:vg:G:");
|
||||
c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:vg:G:q");
|
||||
if (c < 0)
|
||||
--- a/src/drivers/drivers.c
|
||||
+++ b/src/drivers/drivers.c
|
||||
@@ -320,7 +320,7 @@
|
||||
{
|
||||
--- a/wpa_supplicant/eapol_test.c
|
||||
+++ b/wpa_supplicant/eapol_test.c
|
||||
@@ -30,7 +30,12 @@
|
||||
@@ -31,7 +31,12 @@
|
||||
#include "ctrl_iface.h"
|
||||
#include "pcsc_funcs.h"
|
||||
#include "wpas_glue.h"
|
||||
@@ -333,7 +333,7 @@
|
||||
|
||||
const struct wpa_driver_ops *const wpa_drivers[] = { NULL };
|
||||
|
||||
@@ -1292,6 +1297,10 @@ static void usage(void)
|
||||
@@ -1303,6 +1308,10 @@ static void usage(void)
|
||||
"option several times.\n");
|
||||
}
|
||||
|
||||
@@ -344,7 +344,7 @@
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
@@ -1312,6 +1321,8 @@ int main(int argc, char *argv[])
|
||||
@@ -1323,6 +1332,8 @@ int main(int argc, char *argv[])
|
||||
if (os_program_init())
|
||||
return -1;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/hostapd/config_file.c
|
||||
+++ b/hostapd/config_file.c
|
||||
@@ -3439,6 +3439,10 @@ static int hostapd_config_fill(struct ho
|
||||
@@ -3448,6 +3448,10 @@ static int hostapd_config_fill(struct ho
|
||||
if (bss->ocv && !bss->ieee80211w)
|
||||
bss->ieee80211w = 1;
|
||||
#endif /* CONFIG_OCV */
|
||||
@@ -13,7 +13,7 @@
|
||||
} else if (os_strcmp(buf, "ht_capab") == 0) {
|
||||
--- a/src/ap/ap_config.h
|
||||
+++ b/src/ap/ap_config.h
|
||||
@@ -995,6 +995,8 @@ struct hostapd_config {
|
||||
@@ -1075,6 +1075,8 @@ struct hostapd_config {
|
||||
|
||||
int ht_op_mode_fixed;
|
||||
u16 ht_capab;
|
||||
@@ -24,7 +24,7 @@
|
||||
int no_pri_sec_switch;
|
||||
--- a/src/ap/hw_features.c
|
||||
+++ b/src/ap/hw_features.c
|
||||
@@ -517,7 +517,8 @@ static int ieee80211n_check_40mhz(struct
|
||||
@@ -546,7 +546,8 @@ static int ieee80211n_check_40mhz(struct
|
||||
int ret;
|
||||
|
||||
/* Check that HT40 is used and PRI / SEC switch is allowed */
|
||||
@@ -36,7 +36,7 @@
|
||||
hostapd_set_state(iface, HAPD_IFACE_HT_SCAN);
|
||||
--- a/src/ap/ieee802_11_ht.c
|
||||
+++ b/src/ap/ieee802_11_ht.c
|
||||
@@ -230,6 +230,9 @@ void hostapd_2040_coex_action(struct hos
|
||||
@@ -239,6 +239,9 @@ void hostapd_2040_coex_action(struct hos
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
if (len < IEEE80211_HDRLEN + 2 + sizeof(*bc_ie)) {
|
||||
wpa_printf(MSG_DEBUG,
|
||||
"Ignore too short 20/40 BSS Coexistence Management frame");
|
||||
@@ -390,6 +393,9 @@ void ht40_intolerant_add(struct hostapd_
|
||||
@@ -399,6 +402,9 @@ void ht40_intolerant_add(struct hostapd_
|
||||
if (iface->current_mode->mode != HOSTAPD_MODE_IEEE80211G)
|
||||
return;
|
||||
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
Index: hostapd-2021-12-13-b26f5c0f/wpa_supplicant/config.c
|
||||
===================================================================
|
||||
--- hostapd-2021-12-13-b26f5c0f.orig/wpa_supplicant/config.c
|
||||
+++ hostapd-2021-12-13-b26f5c0f/wpa_supplicant/config.c
|
||||
@@ -2532,6 +2532,7 @@ static const struct parse_data ssid_fiel
|
||||
#else /* CONFIG_MESH */
|
||||
{ INT_RANGE(mode, 0, 4) },
|
||||
#endif /* CONFIG_MESH */
|
||||
+ { INT_RANGE(noscan, 0, 1) },
|
||||
{ INT_RANGE(proactive_key_caching, 0, 1) },
|
||||
{ INT_RANGE(disabled, 0, 2) },
|
||||
{ STR(id_str) },
|
||||
Index: hostapd-2021-12-13-b26f5c0f/wpa_supplicant/config_file.c
|
||||
===================================================================
|
||||
--- hostapd-2021-12-13-b26f5c0f.orig/wpa_supplicant/config_file.c
|
||||
+++ hostapd-2021-12-13-b26f5c0f/wpa_supplicant/config_file.c
|
||||
@@ -769,6 +769,7 @@ static void wpa_config_write_network(FIL
|
||||
#endif /* IEEE8021X_EAPOL */
|
||||
INT(mode);
|
||||
INT(no_auto_peer);
|
||||
+ INT(noscan);
|
||||
INT(mesh_fwding);
|
||||
INT(frequency);
|
||||
INT(enable_edmg);
|
||||
Index: hostapd-2021-12-13-b26f5c0f/wpa_supplicant/mesh.c
|
||||
===================================================================
|
||||
--- hostapd-2021-12-13-b26f5c0f.orig/wpa_supplicant/mesh.c
|
||||
+++ hostapd-2021-12-13-b26f5c0f/wpa_supplicant/mesh.c
|
||||
@@ -505,6 +505,8 @@ static int wpa_supplicant_mesh_init(stru
|
||||
frequency);
|
||||
goto out_free;
|
||||
}
|
||||
+ if (ssid->noscan)
|
||||
+ conf->noscan = 1;
|
||||
|
||||
if (ssid->mesh_basic_rates == NULL) {
|
||||
/*
|
||||
Index: hostapd-2021-12-13-b26f5c0f/wpa_supplicant/wpa_supplicant.c
|
||||
===================================================================
|
||||
--- hostapd-2021-12-13-b26f5c0f.orig/wpa_supplicant/wpa_supplicant.c
|
||||
+++ hostapd-2021-12-13-b26f5c0f/wpa_supplicant/wpa_supplicant.c
|
||||
@@ -2433,7 +2433,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
||||
int ieee80211_mode = wpas_mode_to_ieee80211_mode(ssid->mode);
|
||||
enum hostapd_hw_mode hw_mode;
|
||||
struct hostapd_hw_modes *mode = NULL;
|
||||
- int ht40plus[] = { 36, 44, 52, 60, 100, 108, 116, 124, 132, 149, 157,
|
||||
+ int ht40plus[] = { 1, 2, 3, 4, 5, 6, 36, 44, 52, 60, 100, 108, 116, 124, 132, 149, 157,
|
||||
184, 192 };
|
||||
int bw80[] = { 5180, 5260, 5500, 5580, 5660, 5745, 5955,
|
||||
6035, 6115, 6195, 6275, 6355, 6435, 6515,
|
||||
@@ -2441,7 +2441,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
||||
int bw160[] = { 5955, 6115, 6275, 6435, 6595, 6755, 6915 };
|
||||
struct hostapd_channel_data *pri_chan = NULL, *sec_chan = NULL;
|
||||
u8 channel;
|
||||
- int i, chan_idx, ht40 = -1, res, obss_scan = 1;
|
||||
+ int i, chan_idx, ht40 = -1, res, obss_scan = !(ssid->noscan);
|
||||
unsigned int j, k;
|
||||
struct hostapd_freq_params vht_freq;
|
||||
int chwidth, seg0, seg1;
|
||||
@@ -2530,7 +2530,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
||||
#endif /* CONFIG_HE_OVERRIDES */
|
||||
|
||||
/* Setup higher BW only for 5 GHz */
|
||||
- if (mode->mode != HOSTAPD_MODE_IEEE80211A)
|
||||
+ if (mode->mode != HOSTAPD_MODE_IEEE80211A && !(ssid->noscan))
|
||||
return;
|
||||
|
||||
for (chan_idx = 0; chan_idx < mode->num_channels; chan_idx++) {
|
||||
Index: hostapd-2021-12-13-b26f5c0f/wpa_supplicant/config_ssid.h
|
||||
===================================================================
|
||||
--- hostapd-2021-12-13-b26f5c0f.orig/wpa_supplicant/config_ssid.h
|
||||
+++ hostapd-2021-12-13-b26f5c0f/wpa_supplicant/config_ssid.h
|
||||
@@ -974,6 +974,8 @@ struct wpa_ssid {
|
||||
*/
|
||||
int no_auto_peer;
|
||||
|
||||
+ int noscan;
|
||||
+
|
||||
/**
|
||||
* mesh_rssi_threshold - Set mesh parameter mesh_rssi_threshold (dBm)
|
||||
*
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/wpa_supplicant/wpa_supplicant.c
|
||||
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||
@@ -5147,7 +5147,7 @@ wpa_supplicant_alloc(struct wpa_supplica
|
||||
@@ -5769,7 +5769,7 @@ wpa_supplicant_alloc(struct wpa_supplica
|
||||
if (wpa_s == NULL)
|
||||
return NULL;
|
||||
wpa_s->scan_req = INITIAL_SCAN_REQ;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/src/drivers/drivers.mak
|
||||
+++ b/src/drivers/drivers.mak
|
||||
@@ -50,7 +50,6 @@ NEED_SME=y
|
||||
@@ -54,7 +54,6 @@ NEED_SME=y
|
||||
NEED_AP_MLME=y
|
||||
NEED_NETLINK=y
|
||||
NEED_LINUX_IOCTL=y
|
||||
@@ -8,7 +8,7 @@
|
||||
NEED_RADIOTAP=y
|
||||
NEED_LIBNL=y
|
||||
endif
|
||||
@@ -107,7 +106,6 @@ DRV_WPA_CFLAGS += -DCONFIG_DRIVER_WEXT
|
||||
@@ -111,7 +110,6 @@ DRV_WPA_CFLAGS += -DCONFIG_DRIVER_WEXT
|
||||
CONFIG_WIRELESS_EXTENSION=y
|
||||
NEED_NETLINK=y
|
||||
NEED_LINUX_IOCTL=y
|
||||
@@ -16,7 +16,7 @@
|
||||
endif
|
||||
|
||||
ifdef CONFIG_DRIVER_NDIS
|
||||
@@ -133,7 +131,6 @@ endif
|
||||
@@ -137,7 +135,6 @@ endif
|
||||
ifdef CONFIG_WIRELESS_EXTENSION
|
||||
DRV_WPA_CFLAGS += -DCONFIG_WIRELESS_EXTENSION
|
||||
DRV_WPA_OBJS += ../src/drivers/driver_wext.o
|
||||
@@ -24,7 +24,7 @@
|
||||
endif
|
||||
|
||||
ifdef NEED_NETLINK
|
||||
@@ -142,6 +139,7 @@ endif
|
||||
@@ -146,6 +143,7 @@ endif
|
||||
|
||||
ifdef NEED_RFKILL
|
||||
DRV_OBJS += ../src/drivers/rfkill.o
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
--- a/src/drivers/driver_nl80211.c
|
||||
+++ b/src/drivers/driver_nl80211.c
|
||||
@@ -4919,7 +4919,7 @@ static int nl80211_set_channel(struct i8
|
||||
freq->freq, freq->ht_enabled, freq->vht_enabled, freq->he_enabled,
|
||||
freq->bandwidth, freq->center_freq1, freq->center_freq2);
|
||||
@@ -5407,7 +5407,7 @@ static int nl80211_set_channel(struct i8
|
||||
freq->he_enabled, freq->eht_enabled, freq->bandwidth,
|
||||
freq->center_freq1, freq->center_freq2);
|
||||
|
||||
- msg = nl80211_drv_msg(drv, 0, set_chan ? NL80211_CMD_SET_CHANNEL :
|
||||
+ msg = nl80211_bss_msg(bss, 0, set_chan ? NL80211_CMD_SET_CHANNEL :
|
||||
|
||||
@@ -1,13 +1,18 @@
|
||||
--- a/wpa_supplicant/ap.c
|
||||
+++ b/wpa_supplicant/ap.c
|
||||
@@ -1513,15 +1513,35 @@ int ap_switch_channel(struct wpa_supplic
|
||||
Index: hostapd-2023-02-21-ath12.3-cs/wpa_supplicant/ap.c
|
||||
===================================================================
|
||||
--- hostapd-2023-02-21-ath12.3-cs.orig/wpa_supplicant/ap.c
|
||||
+++ hostapd-2023-02-21-ath12.3-cs/wpa_supplicant/ap.c
|
||||
@@ -1852,25 +1852,35 @@ int ap_switch_channel(struct wpa_supplic
|
||||
|
||||
|
||||
#ifdef CONFIG_CTRL_IFACE
|
||||
-int ap_ctrl_iface_chanswitch(struct wpa_supplicant *wpa_s, const char *pos)
|
||||
+
|
||||
+static int __ap_ctrl_iface_chanswitch(struct hostapd_iface *iface,
|
||||
+ struct csa_settings *settings)
|
||||
+{
|
||||
{
|
||||
- struct csa_settings settings;
|
||||
- int ret;
|
||||
+#ifdef NEED_AP_MLME
|
||||
+ if (!iface || !iface->bss[0])
|
||||
+ return 0;
|
||||
@@ -17,17 +22,25 @@
|
||||
+ return -1;
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+
|
||||
int ap_ctrl_iface_chanswitch(struct wpa_supplicant *wpa_s, const char *pos)
|
||||
{
|
||||
struct csa_settings settings;
|
||||
int ret = hostapd_parse_csa_settings(pos, &settings);
|
||||
|
||||
- if (wpa_s->ifmsh && wpa_s->ifmsh->conf->disable_csa_dfs == 1) {
|
||||
- wpa_printf(MSG_DEBUG, "wpa chanswitch interface %s :"
|
||||
- " cancelling radar handling timeout",
|
||||
- wpa_s->ifmsh->conf->bss[0]->iface);
|
||||
- eloop_cancel_timeout(hostapd_dfs_radar_handling_timeout,
|
||||
- wpa_s->ifmsh, NULL);
|
||||
- }
|
||||
|
||||
- ret = hostapd_parse_csa_settings(pos, &settings);
|
||||
+int ap_ctrl_iface_chanswitch(struct wpa_supplicant *wpa_s, const char *pos)
|
||||
+{
|
||||
+ struct csa_settings settings;
|
||||
+ int ret = hostapd_parse_csa_settings(pos, &settings);
|
||||
+
|
||||
+ if (!(wpa_s->ap_iface && wpa_s->ap_iface->bss[0]) &&
|
||||
+ !(wpa_s->ifmsh && wpa_s->ifmsh->bss[0]))
|
||||
+ return -1;
|
||||
+
|
||||
|
||||
+ ret = __ap_ctrl_iface_chanswitch(wpa_s->ap_iface, &settings);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
--- a/src/drivers/driver_nl80211.c
|
||||
+++ b/src/drivers/driver_nl80211.c
|
||||
@@ -2891,10 +2891,15 @@ static int wpa_driver_nl80211_del_beacon
|
||||
struct nl_msg *msg;
|
||||
struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||
|
||||
+ if (!bss->beacon_set)
|
||||
+ return 0;
|
||||
+
|
||||
+ bss->beacon_set = 0;
|
||||
+
|
||||
wpa_printf(MSG_DEBUG, "nl80211: Remove beacon (ifindex=%d)",
|
||||
- drv->ifindex);
|
||||
+ bss->ifindex);
|
||||
nl80211_put_wiphy_data_ap(bss);
|
||||
- msg = nl80211_drv_msg(drv, 0, NL80211_CMD_DEL_BEACON);
|
||||
+ msg = nl80211_bss_msg(bss, 0, NL80211_CMD_DEL_BEACON);
|
||||
return send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
@@ -5550,7 +5555,7 @@ static void nl80211_teardown_ap(struct i
|
||||
nl80211_mgmt_unsubscribe(bss, "AP teardown");
|
||||
|
||||
nl80211_put_wiphy_data_ap(bss);
|
||||
- bss->beacon_set = 0;
|
||||
+ wpa_driver_nl80211_del_beacon(bss);
|
||||
}
|
||||
|
||||
|
||||
@@ -7990,8 +7995,6 @@ static int wpa_driver_nl80211_if_remove(
|
||||
} else {
|
||||
wpa_printf(MSG_DEBUG, "nl80211: First BSS - reassign context");
|
||||
nl80211_teardown_ap(bss);
|
||||
- if (!bss->added_if && !drv->first_bss->next)
|
||||
- wpa_driver_nl80211_del_beacon(bss);
|
||||
nl80211_destroy_bss(bss);
|
||||
if (!bss->added_if)
|
||||
i802_set_iface_flags(bss, 0);
|
||||
@@ -8388,7 +8391,6 @@ static int wpa_driver_nl80211_deinit_ap(
|
||||
if (!is_ap_interface(drv->nlmode))
|
||||
return -1;
|
||||
wpa_driver_nl80211_del_beacon(bss);
|
||||
- bss->beacon_set = 0;
|
||||
|
||||
/*
|
||||
* If the P2P GO interface was dynamically added, then it is
|
||||
@@ -8408,7 +8410,6 @@ static int wpa_driver_nl80211_stop_ap(vo
|
||||
if (!is_ap_interface(drv->nlmode))
|
||||
return -1;
|
||||
wpa_driver_nl80211_del_beacon(bss);
|
||||
- bss->beacon_set = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
--- a/hostapd/Makefile
|
||||
+++ b/hostapd/Makefile
|
||||
Index: hostapd-2023-02-21-ath12.3-cs/hostapd/Makefile
|
||||
===================================================================
|
||||
--- hostapd-2023-02-21-ath12.3-cs.orig/hostapd/Makefile
|
||||
+++ hostapd-2023-02-21-ath12.3-cs/hostapd/Makefile
|
||||
@@ -221,6 +221,9 @@ endif
|
||||
ifdef CONFIG_NO_CTRL_IFACE
|
||||
CFLAGS += -DCONFIG_NO_CTRL_IFACE
|
||||
@@ -10,9 +12,11 @@
|
||||
ifeq ($(CONFIG_CTRL_IFACE), udp)
|
||||
CFLAGS += -DCONFIG_CTRL_IFACE_UDP
|
||||
else
|
||||
--- a/hostapd/ctrl_iface.c
|
||||
+++ b/hostapd/ctrl_iface.c
|
||||
@@ -3388,6 +3388,7 @@ static int hostapd_ctrl_iface_receive_pr
|
||||
Index: hostapd-2023-02-21-ath12.3-cs/hostapd/ctrl_iface.c
|
||||
===================================================================
|
||||
--- hostapd-2023-02-21-ath12.3-cs.orig/hostapd/ctrl_iface.c
|
||||
+++ hostapd-2023-02-21-ath12.3-cs/hostapd/ctrl_iface.c
|
||||
@@ -3805,6 +3805,7 @@ static int hostapd_ctrl_iface_receive_pr
|
||||
reply_size);
|
||||
} else if (os_strcmp(buf, "STATUS-DRIVER") == 0) {
|
||||
reply_len = hostapd_drv_status(hapd, reply, reply_size);
|
||||
@@ -20,7 +24,7 @@
|
||||
} else if (os_strcmp(buf, "MIB") == 0) {
|
||||
reply_len = ieee802_11_get_mib(hapd, reply, reply_size);
|
||||
if (reply_len >= 0) {
|
||||
@@ -3429,6 +3430,7 @@ static int hostapd_ctrl_iface_receive_pr
|
||||
@@ -3846,6 +3847,7 @@ static int hostapd_ctrl_iface_receive_pr
|
||||
} else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) {
|
||||
reply_len = hostapd_ctrl_iface_sta_next(hapd, buf + 9, reply,
|
||||
reply_size);
|
||||
@@ -28,9 +32,11 @@
|
||||
} else if (os_strcmp(buf, "ATTACH") == 0) {
|
||||
if (hostapd_ctrl_iface_attach(hapd, from, fromlen, NULL))
|
||||
reply_len = -1;
|
||||
--- a/wpa_supplicant/Makefile
|
||||
+++ b/wpa_supplicant/Makefile
|
||||
@@ -942,6 +942,9 @@ ifdef CONFIG_FILS
|
||||
Index: hostapd-2023-02-21-ath12.3-cs/wpa_supplicant/Makefile
|
||||
===================================================================
|
||||
--- hostapd-2023-02-21-ath12.3-cs.orig/wpa_supplicant/Makefile
|
||||
+++ hostapd-2023-02-21-ath12.3-cs/wpa_supplicant/Makefile
|
||||
@@ -987,6 +987,9 @@ ifdef CONFIG_FILS
|
||||
OBJS += ../src/ap/fils_hlp.o
|
||||
endif
|
||||
ifdef CONFIG_CTRL_IFACE
|
||||
@@ -40,9 +46,11 @@
|
||||
OBJS += ../src/ap/ctrl_iface_ap.o
|
||||
endif
|
||||
|
||||
--- a/wpa_supplicant/ctrl_iface.c
|
||||
+++ b/wpa_supplicant/ctrl_iface.c
|
||||
@@ -2294,7 +2294,7 @@ static int wpa_supplicant_ctrl_iface_sta
|
||||
Index: hostapd-2023-02-21-ath12.3-cs/wpa_supplicant/ctrl_iface.c
|
||||
===================================================================
|
||||
--- hostapd-2023-02-21-ath12.3-cs.orig/wpa_supplicant/ctrl_iface.c
|
||||
+++ hostapd-2023-02-21-ath12.3-cs/wpa_supplicant/ctrl_iface.c
|
||||
@@ -2327,7 +2327,7 @@ static int wpa_supplicant_ctrl_iface_sta
|
||||
pos += ret;
|
||||
}
|
||||
|
||||
@@ -51,7 +59,7 @@
|
||||
if (wpa_s->ap_iface) {
|
||||
pos += ap_ctrl_iface_wpa_get_status(wpa_s, pos,
|
||||
end - pos,
|
||||
@@ -10602,6 +10602,7 @@ char * wpa_supplicant_ctrl_iface_process
|
||||
@@ -11989,6 +11989,7 @@ char * wpa_supplicant_ctrl_iface_process
|
||||
reply_len = -1;
|
||||
} else if (os_strncmp(buf, "NOTE ", 5) == 0) {
|
||||
wpa_printf(MSG_INFO, "NOTE: %s", buf + 5);
|
||||
@@ -59,7 +67,7 @@
|
||||
} else if (os_strcmp(buf, "MIB") == 0) {
|
||||
reply_len = wpa_sm_get_mib(wpa_s->wpa, reply, reply_size);
|
||||
if (reply_len >= 0) {
|
||||
@@ -10614,6 +10615,7 @@ char * wpa_supplicant_ctrl_iface_process
|
||||
@@ -12001,6 +12002,7 @@ char * wpa_supplicant_ctrl_iface_process
|
||||
reply_size - reply_len);
|
||||
#endif /* CONFIG_MACSEC */
|
||||
}
|
||||
@@ -67,7 +75,7 @@
|
||||
} else if (os_strncmp(buf, "STATUS", 6) == 0) {
|
||||
reply_len = wpa_supplicant_ctrl_iface_status(
|
||||
wpa_s, buf + 6, reply, reply_size);
|
||||
@@ -11102,6 +11104,7 @@ char * wpa_supplicant_ctrl_iface_process
|
||||
@@ -12489,6 +12491,7 @@ char * wpa_supplicant_ctrl_iface_process
|
||||
reply_len = wpa_supplicant_ctrl_iface_bss(
|
||||
wpa_s, buf + 4, reply, reply_size);
|
||||
#ifdef CONFIG_AP
|
||||
@@ -75,7 +83,7 @@
|
||||
} else if (os_strcmp(buf, "STA-FIRST") == 0) {
|
||||
reply_len = ap_ctrl_iface_sta_first(wpa_s, reply, reply_size);
|
||||
} else if (os_strncmp(buf, "STA ", 4) == 0) {
|
||||
@@ -11110,12 +11113,15 @@ char * wpa_supplicant_ctrl_iface_process
|
||||
@@ -12497,12 +12500,15 @@ char * wpa_supplicant_ctrl_iface_process
|
||||
} else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) {
|
||||
reply_len = ap_ctrl_iface_sta_next(wpa_s, buf + 9, reply,
|
||||
reply_size);
|
||||
@@ -91,17 +99,19 @@
|
||||
} else if (os_strncmp(buf, "CHAN_SWITCH ", 12) == 0) {
|
||||
if (ap_ctrl_iface_chanswitch(wpa_s, buf + 12))
|
||||
reply_len = -1;
|
||||
--- a/src/ap/ctrl_iface_ap.c
|
||||
+++ b/src/ap/ctrl_iface_ap.c
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "mbo_ap.h"
|
||||
Index: hostapd-2023-02-21-ath12.3-cs/src/ap/ctrl_iface_ap.c
|
||||
===================================================================
|
||||
--- hostapd-2023-02-21-ath12.3-cs.orig/src/ap/ctrl_iface_ap.c
|
||||
+++ hostapd-2023-02-21-ath12.3-cs/src/ap/ctrl_iface_ap.c
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "taxonomy.h"
|
||||
#include "wnm_ap.h"
|
||||
|
||||
+#ifdef CONFIG_CTRL_IFACE_MIB
|
||||
|
||||
static size_t hostapd_write_ht_mcs_bitmask(char *buf, size_t buflen,
|
||||
size_t curr_len, const u8 *mcs_set)
|
||||
@@ -451,6 +452,7 @@ int hostapd_ctrl_iface_sta_next(struct h
|
||||
typedef enum {
|
||||
BAND_UNII_1 = 1,
|
||||
@@ -760,6 +761,7 @@ int hostapd_ctrl_iface_sta_next(struct h
|
||||
return hostapd_ctrl_iface_sta_mib(hapd, sta->next, buf, buflen);
|
||||
}
|
||||
|
||||
@@ -109,7 +119,7 @@
|
||||
|
||||
#ifdef CONFIG_P2P_MANAGER
|
||||
static int p2p_manager_disconnect(struct hostapd_data *hapd, u16 stype,
|
||||
@@ -807,12 +809,12 @@ int hostapd_ctrl_iface_status(struct hos
|
||||
@@ -1192,12 +1194,12 @@ int hostapd_ctrl_iface_status(struct hos
|
||||
return len;
|
||||
len += ret;
|
||||
}
|
||||
@@ -124,9 +134,11 @@
|
||||
if (iface->current_rates && iface->num_rates) {
|
||||
ret = os_snprintf(buf + len, buflen - len, "supported_rates=");
|
||||
if (os_snprintf_error(buflen - len, ret))
|
||||
--- a/src/ap/ieee802_1x.c
|
||||
+++ b/src/ap/ieee802_1x.c
|
||||
@@ -2712,6 +2712,7 @@ static const char * bool_txt(bool val)
|
||||
Index: hostapd-2023-02-21-ath12.3-cs/src/ap/ieee802_1x.c
|
||||
===================================================================
|
||||
--- hostapd-2023-02-21-ath12.3-cs.orig/src/ap/ieee802_1x.c
|
||||
+++ hostapd-2023-02-21-ath12.3-cs/src/ap/ieee802_1x.c
|
||||
@@ -2768,6 +2768,7 @@ static const char * bool_txt(bool val)
|
||||
return val ? "TRUE" : "FALSE";
|
||||
}
|
||||
|
||||
@@ -134,7 +146,7 @@
|
||||
|
||||
int ieee802_1x_get_mib(struct hostapd_data *hapd, char *buf, size_t buflen)
|
||||
{
|
||||
@@ -2898,6 +2899,7 @@ int ieee802_1x_get_mib_sta(struct hostap
|
||||
@@ -2954,6 +2955,7 @@ int ieee802_1x_get_mib_sta(struct hostap
|
||||
return len;
|
||||
}
|
||||
|
||||
@@ -142,9 +154,11 @@
|
||||
|
||||
#ifdef CONFIG_HS20
|
||||
static void ieee802_1x_wnm_notif_send(void *eloop_ctx, void *timeout_ctx)
|
||||
--- a/src/ap/wpa_auth.c
|
||||
+++ b/src/ap/wpa_auth.c
|
||||
@@ -4503,6 +4503,7 @@ static const char * wpa_bool_txt(int val
|
||||
Index: hostapd-2023-02-21-ath12.3-cs/src/ap/wpa_auth.c
|
||||
===================================================================
|
||||
--- hostapd-2023-02-21-ath12.3-cs.orig/src/ap/wpa_auth.c
|
||||
+++ hostapd-2023-02-21-ath12.3-cs/src/ap/wpa_auth.c
|
||||
@@ -5715,6 +5715,7 @@ static const char * wpa_bool_txt(int val
|
||||
return val ? "TRUE" : "FALSE";
|
||||
}
|
||||
|
||||
@@ -152,7 +166,7 @@
|
||||
|
||||
#define RSN_SUITE "%02x-%02x-%02x-%d"
|
||||
#define RSN_SUITE_ARG(s) \
|
||||
@@ -4653,7 +4654,7 @@ int wpa_get_mib_sta(struct wpa_state_mac
|
||||
@@ -5867,7 +5868,7 @@ int wpa_get_mib_sta(struct wpa_state_mac
|
||||
|
||||
return len;
|
||||
}
|
||||
@@ -161,9 +175,11 @@
|
||||
|
||||
void wpa_auth_countermeasures_start(struct wpa_authenticator *wpa_auth)
|
||||
{
|
||||
--- a/src/rsn_supp/wpa.c
|
||||
+++ b/src/rsn_supp/wpa.c
|
||||
@@ -2763,6 +2763,8 @@ static u32 wpa_key_mgmt_suite(struct wpa
|
||||
Index: hostapd-2023-02-21-ath12.3-cs/src/rsn_supp/wpa.c
|
||||
===================================================================
|
||||
--- hostapd-2023-02-21-ath12.3-cs.orig/src/rsn_supp/wpa.c
|
||||
+++ hostapd-2023-02-21-ath12.3-cs/src/rsn_supp/wpa.c
|
||||
@@ -3835,6 +3835,8 @@ static u32 wpa_key_mgmt_suite(struct wpa
|
||||
}
|
||||
|
||||
|
||||
@@ -172,7 +188,7 @@
|
||||
#define RSN_SUITE "%02x-%02x-%02x-%d"
|
||||
#define RSN_SUITE_ARG(s) \
|
||||
((s) >> 24) & 0xff, ((s) >> 16) & 0xff, ((s) >> 8) & 0xff, (s) & 0xff
|
||||
@@ -2844,6 +2846,7 @@ int wpa_sm_get_mib(struct wpa_sm *sm, ch
|
||||
@@ -3916,6 +3918,7 @@ int wpa_sm_get_mib(struct wpa_sm *sm, ch
|
||||
|
||||
return (int) len;
|
||||
}
|
||||
@@ -180,9 +196,11 @@
|
||||
#endif /* CONFIG_CTRL_IFACE */
|
||||
|
||||
|
||||
--- a/wpa_supplicant/ap.c
|
||||
+++ b/wpa_supplicant/ap.c
|
||||
@@ -1364,7 +1364,7 @@ int wpas_ap_wps_nfc_report_handover(stru
|
||||
Index: hostapd-2023-02-21-ath12.3-cs/wpa_supplicant/ap.c
|
||||
===================================================================
|
||||
--- hostapd-2023-02-21-ath12.3-cs.orig/wpa_supplicant/ap.c
|
||||
+++ hostapd-2023-02-21-ath12.3-cs/wpa_supplicant/ap.c
|
||||
@@ -1512,7 +1512,7 @@ int wpas_ap_wps_nfc_report_handover(stru
|
||||
#endif /* CONFIG_WPS */
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/hostapd/hostapd_cli.c
|
||||
+++ b/hostapd/hostapd_cli.c
|
||||
@@ -744,7 +744,7 @@ static int wpa_ctrl_command_sta(struct w
|
||||
@@ -757,7 +757,7 @@ static int wpa_ctrl_command_sta(struct w
|
||||
}
|
||||
|
||||
buf[len] = '\0';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/src/common/wpa_common.c
|
||||
+++ b/src/common/wpa_common.c
|
||||
@@ -2444,6 +2444,31 @@ u32 wpa_akm_to_suite(int akm)
|
||||
@@ -2841,6 +2841,31 @@ u32 wpa_akm_to_suite(int akm)
|
||||
}
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
int wpa_compare_rsn_ie(int ft_initial_assoc,
|
||||
const u8 *ie1, size_t ie1len,
|
||||
const u8 *ie2, size_t ie2len)
|
||||
@@ -2451,8 +2476,19 @@ int wpa_compare_rsn_ie(int ft_initial_as
|
||||
@@ -2848,8 +2873,19 @@ int wpa_compare_rsn_ie(int ft_initial_as
|
||||
if (ie1 == NULL || ie2 == NULL)
|
||||
return -1;
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
bss->wpa_pairwise |= WPA_CIPHER_TKIP;
|
||||
#endif /* CONFIG_NO_TKIP */
|
||||
bss->rsn_pairwise = bss->wpa_pairwise;
|
||||
@@ -1178,8 +1177,7 @@ int hostapd_init_wps(struct hostapd_data
|
||||
@@ -1181,8 +1180,7 @@ int hostapd_init_wps(struct hostapd_data
|
||||
WPA_CIPHER_GCMP_256)) {
|
||||
wps->encr_types |= WPS_ENCR_AES;
|
||||
wps->encr_types_rsn |= WPS_ENCR_AES;
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
#ifdef CONFIG_DEBUG_FILE
|
||||
static char *last_path = NULL;
|
||||
#endif /* CONFIG_DEBUG_FILE */
|
||||
@@ -636,7 +610,7 @@ void wpa_msg_register_ifname_cb(wpa_msg_
|
||||
@@ -644,7 +618,7 @@ void wpa_msg_register_ifname_cb(wpa_msg_
|
||||
}
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
{
|
||||
va_list ap;
|
||||
char *buf;
|
||||
@@ -674,7 +648,7 @@ void wpa_msg(void *ctx, int level, const
|
||||
@@ -682,7 +656,7 @@ void wpa_msg(void *ctx, int level, const
|
||||
}
|
||||
|
||||
|
||||
@@ -80,9 +80,9 @@
|
||||
char *buf;
|
||||
--- a/src/utils/wpa_debug.h
|
||||
+++ b/src/utils/wpa_debug.h
|
||||
@@ -50,6 +50,17 @@ int wpa_debug_reopen_file(void);
|
||||
void wpa_debug_close_file(void);
|
||||
@@ -51,6 +51,17 @@ void wpa_debug_close_file(void);
|
||||
void wpa_debug_setup_stdout(void);
|
||||
void wpa_debug_stop_log(void);
|
||||
|
||||
+/* internal */
|
||||
+void _wpa_hexdump(int level, const char *title, const u8 *buf,
|
||||
@@ -98,7 +98,7 @@
|
||||
/**
|
||||
* wpa_debug_printf_timestamp - Print timestamp for debug output
|
||||
*
|
||||
@@ -70,9 +81,15 @@ void wpa_debug_print_timestamp(void);
|
||||
@@ -71,9 +82,15 @@ void wpa_debug_print_timestamp(void);
|
||||
*
|
||||
* Note: New line '\n' is added to the end of the text when printing to stdout.
|
||||
*/
|
||||
@@ -115,7 +115,7 @@
|
||||
/**
|
||||
* wpa_hexdump - conditional hex dump
|
||||
* @level: priority level (MSG_*) of the message
|
||||
@@ -84,7 +101,13 @@ PRINTF_FORMAT(2, 3);
|
||||
@@ -85,7 +102,13 @@ PRINTF_FORMAT(2, 3);
|
||||
* output may be directed to stdout, stderr, and/or syslog based on
|
||||
* configuration. The contents of buf is printed out has hex dump.
|
||||
*/
|
||||
@@ -130,7 +130,7 @@
|
||||
|
||||
static inline void wpa_hexdump_buf(int level, const char *title,
|
||||
const struct wpabuf *buf)
|
||||
@@ -106,7 +129,13 @@ static inline void wpa_hexdump_buf(int l
|
||||
@@ -107,7 +130,13 @@ static inline void wpa_hexdump_buf(int l
|
||||
* like wpa_hexdump(), but by default, does not include secret keys (passwords,
|
||||
* etc.) in debug output.
|
||||
*/
|
||||
@@ -145,7 +145,7 @@
|
||||
|
||||
static inline void wpa_hexdump_buf_key(int level, const char *title,
|
||||
const struct wpabuf *buf)
|
||||
@@ -128,8 +157,14 @@ static inline void wpa_hexdump_buf_key(i
|
||||
@@ -129,8 +158,14 @@ static inline void wpa_hexdump_buf_key(i
|
||||
* the hex numbers and ASCII characters (for printable range) are shown. 16
|
||||
* bytes per line will be shown.
|
||||
*/
|
||||
@@ -162,7 +162,7 @@
|
||||
|
||||
/**
|
||||
* wpa_hexdump_ascii_key - conditional hex dump, hide keys
|
||||
@@ -145,8 +180,14 @@ void wpa_hexdump_ascii(int level, const
|
||||
@@ -146,8 +181,14 @@ void wpa_hexdump_ascii(int level, const
|
||||
* bytes per line will be shown. This works like wpa_hexdump_ascii(), but by
|
||||
* default, does not include secret keys (passwords, etc.) in debug output.
|
||||
*/
|
||||
@@ -179,7 +179,7 @@
|
||||
|
||||
/*
|
||||
* wpa_dbg() behaves like wpa_msg(), but it can be removed from build to reduce
|
||||
@@ -183,7 +224,12 @@ void wpa_hexdump_ascii_key(int level, co
|
||||
@@ -184,7 +225,12 @@ void wpa_hexdump_ascii_key(int level, co
|
||||
*
|
||||
* Note: New line '\n' is added to the end of the text when printing to stdout.
|
||||
*/
|
||||
@@ -193,7 +193,7 @@
|
||||
|
||||
/**
|
||||
* wpa_msg_ctrl - Conditional printf for ctrl_iface monitors
|
||||
@@ -197,8 +243,13 @@ void wpa_msg(void *ctx, int level, const
|
||||
@@ -198,8 +244,13 @@ void wpa_msg(void *ctx, int level, const
|
||||
* attached ctrl_iface monitors. In other words, it can be used for frequent
|
||||
* events that do not need to be sent to syslog.
|
||||
*/
|
||||
|
||||
@@ -1,23 +1,24 @@
|
||||
--- a/hostapd/main.c
|
||||
+++ b/hostapd/main.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "utils/common.h"
|
||||
#include "utils/eloop.h"
|
||||
#include "utils/uuid.h"
|
||||
+#include "utils/build_features.h"
|
||||
#include "crypto/random.h"
|
||||
#include "crypto/tls.h"
|
||||
#include "common/version.h"
|
||||
@@ -691,7 +692,7 @@ int main(int argc, char *argv[])
|
||||
@@ -31,7 +31,7 @@
|
||||
#include "config_file.h"
|
||||
#include "eap_register.h"
|
||||
#include "ctrl_iface.h"
|
||||
-
|
||||
+#include "build_features.h"
|
||||
|
||||
struct hapd_global {
|
||||
void **drv_priv;
|
||||
@@ -799,7 +799,7 @@ int main(int argc, char *argv[])
|
||||
wpa_supplicant_event = hostapd_wpa_event;
|
||||
wpa_supplicant_event_global = hostapd_wpa_event_global;
|
||||
for (;;) {
|
||||
- c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:vg:G:");
|
||||
+ c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:g:G:v::");
|
||||
- c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:vg:G:q");
|
||||
+ c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:g:G:qv::");
|
||||
if (c < 0)
|
||||
break;
|
||||
switch (c) {
|
||||
@@ -728,6 +729,8 @@ int main(int argc, char *argv[])
|
||||
@@ -836,6 +836,8 @@ int main(int argc, char *argv[])
|
||||
break;
|
||||
#endif /* CONFIG_DEBUG_LINUX_TRACING */
|
||||
case 'v':
|
||||
@@ -25,7 +26,7 @@
|
||||
+ exit(!has_feature(optarg));
|
||||
show_version();
|
||||
exit(1);
|
||||
break;
|
||||
case 'g':
|
||||
--- a/wpa_supplicant/main.c
|
||||
+++ b/wpa_supplicant/main.c
|
||||
@@ -12,6 +12,7 @@
|
||||
@@ -33,10 +34,10 @@
|
||||
|
||||
#include "common.h"
|
||||
+#include "build_features.h"
|
||||
#include "crypto/crypto.h"
|
||||
#include "fst/fst.h"
|
||||
#include "wpa_supplicant_i.h"
|
||||
#include "driver_i.h"
|
||||
@@ -201,7 +202,7 @@ int main(int argc, char *argv[])
|
||||
@@ -202,7 +203,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
for (;;) {
|
||||
c = getopt(argc, argv,
|
||||
@@ -45,7 +46,7 @@
|
||||
if (c < 0)
|
||||
break;
|
||||
switch (c) {
|
||||
@@ -301,8 +302,12 @@ int main(int argc, char *argv[])
|
||||
@@ -302,8 +303,12 @@ int main(int argc, char *argv[])
|
||||
break;
|
||||
#endif /* CONFIG_CTRL_IFACE_DBUS_NEW */
|
||||
case 'v':
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user