mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-10-29 17:42:41 +00:00
Compare commits
1 Commits
staging-WI
...
v4.0.0-rc2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4c9b22f999 |
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_wf189h', 'cig_wf189w', 'cig_wf672', 'cig_wf186h', 'cig_wf186w', 'cig_wf188n', 'cig_wf189', 'cig_wf196', 'cig_wf196', 'cybertan_eww631-a1', 'cybertan_eww631-b1', 'sonicfi_rap630w-312g', 'sonicfi_rap63xc-211g', 'sonicfi_rap630c-311g', 'sonicfi_rap630w-311g', 'sonicfi_rap630w-211g', 'sonicfi_rap650c', 'sonicfi_rap7110c-341x', 'sonicfi_rap750e-h', 'sonicfi_rap750e-s', 'sonicfi_rap750w-311a', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap105', 'edgecore_eap111', 'edgecore_eap112', 'edgecore_oap101', 'edgecore_oap101-6e', 'edgecore_oap101e', 'edgecore_oap101e-6e', 'edgecore_oap103', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'hfcl_ion4x_3', 'hfcl_ion4xi_w', 'hfcl_ion4x_w', 'indio_um-305ax', 'senao_iap4300m', 'senao_iap2300m', 'senao_jeap6500', 'udaya_a6-id2', 'udaya_a6-od2', 'yuncore_ax820', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650', 'yuncore_fap655', 'emplus_wap386v2', 'emplus_wap588m', 'zyxel_nwa130be', 'sercomm_ap72tip-v4' ]
|
||||
target: [ 'cig_wf186h', 'cig_wf186w', 'cig_wf188n', 'cig_wf189', 'cig_wf196', 'cig_wf196', 'cybertan_eww631-a1', 'cybertan_eww631-b1', 'sonicfi_rap630w-312g', 'sonicfi_rap63xc-211g', 'sonicfi_rap630c-311g', 'sonicfi_rap630w-311g', 'sonicfi_rap630w-211g', 'sonicfi_rap7110c-341x', 'sonicfi_rap750w-311a', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap105', 'edgecore_eap111', 'edgecore_eap112', 'edgecore_oap101', 'edgecore_oap101-6e', 'edgecore_oap101e', 'edgecore_oap101e-6e', 'edgecore_oap103', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'hfcl_ion4x_3', 'hfcl_ion4xi_w', 'hfcl_ion4x_w', 'indio_um-305ax', 'senao_iap4300m', 'senao_iap2300m', 'senao_jeap6500', 'udaya_a6-id2', 'udaya_a6-od2', 'yuncore_ax820', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650', 'yuncore_fap655' ]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
|
||||
@@ -41,7 +41,6 @@ ALLWIFIBOARDS:= \
|
||||
edgecore-oap102 \
|
||||
edgecore-oap103 \
|
||||
edgecore-eap104 \
|
||||
emplus-wap386v2 \
|
||||
liteon-wpx8324 \
|
||||
indio-um-310ax-v1 \
|
||||
indio-um-510axp-v1 \
|
||||
@@ -54,7 +53,6 @@ ALLWIFIBOARDS:= \
|
||||
sonicfi-rap630c-311g \
|
||||
sonicfi-rap630w-311g \
|
||||
sonicfi-rap630w-312g \
|
||||
sonicfi-rap650c \
|
||||
tplink-ex227 \
|
||||
tplink-ex447 \
|
||||
yuncore-ax840 \
|
||||
@@ -405,7 +403,6 @@ $(eval $(call generate-ath11k-wifi-package,edgecore-eap102,Edgecore EAP102))
|
||||
$(eval $(call generate-ath11k-wifi-package,edgecore-oap102,Edgecore OAP102))
|
||||
$(eval $(call generate-ath11k-wifi-package,edgecore-oap103,Edgecore OAP103))
|
||||
$(eval $(call generate-ath11k-wifi-package,edgecore-eap104,Edgecore EAP104))
|
||||
$(eval $(call generate-ath11k-wifi-package,emplus-wap386v2,Emplus WAP386 V2))
|
||||
$(eval $(call generate-ath11k-wifi-package,liteon-wpx8324,Liteon WPX8324))
|
||||
$(eval $(call generate-ath11k-wifi-package,indio-um-310ax-v1,Indio UM-310AX V1))
|
||||
$(eval $(call generate-ath11k-wifi-package,indio-um-510axp-v1,Indio UM-510AXP V1))
|
||||
@@ -413,7 +410,6 @@ $(eval $(call generate-ath11k-wifi-package,indio-um-510axm-v1,Indio UM-510AXM V1
|
||||
$(eval $(call generate-ath11k-wifi-package,sonicfi-rap630c-311g,Sonicfi RAP630C 311G))
|
||||
$(eval $(call generate-ath11k-wifi-package,sonicfi-rap630w-311g,Sonicfi RAP630W 311G))
|
||||
$(eval $(call generate-ath11k-wifi-package,sonicfi-rap630w-312g,Sonicfi RAP630W 312G))
|
||||
$(eval $(call generate-ath11k-wifi-package,sonicfi-rap650c,SonicFi RAP650C))
|
||||
$(eval $(call generate-ath11k-wifi-package,tplink-ex227,TP-Link EX227))
|
||||
$(eval $(call generate-ath11k-wifi-package,tplink-ex447,TP-Link EX447))
|
||||
$(eval $(call generate-ath11k-wifi-package,yuncore-ax840,YunCore AX840))
|
||||
|
||||
Binary file not shown.
@@ -26,12 +26,6 @@ edgecore,eap101)
|
||||
ucidef_set_led_netdev "poe" "poe" "green:wan" "eth0"
|
||||
ucidef_set_led_default "power" "POWER" "green:led_pwr" "on"
|
||||
;;
|
||||
emplus,wap386v2)
|
||||
ucidef_set_led_default "power" "POWER" "red:power" "on"
|
||||
ucidef_set_led_netdev "wan" "WAN" "blue:wan" "eth0" "tx rx link"
|
||||
ucidef_set_led_wlan "wlan2g" "WLAN2G" "blue:wifi2" "phy1tpt"
|
||||
ucidef_set_led_wlan "wlan5g" "WLAN5G" "blue:wifi5" "phy0tpt"
|
||||
;;
|
||||
hfcl,ion4xi|\
|
||||
hfcl,ion4x|\
|
||||
hfcl,ion4x_2|\
|
||||
|
||||
@@ -34,10 +34,10 @@ qcom_setup_interfaces()
|
||||
ucidef_set_interface_lan "eth1"
|
||||
ucidef_set_interface_wan "eth0"
|
||||
;;
|
||||
cig,wf660a|\
|
||||
emplus,wap386v2)
|
||||
cig,wf660a)
|
||||
ucidef_set_interface_wan "eth0"
|
||||
;;
|
||||
|
||||
yuncore,fap650)
|
||||
ucidef_set_interface_lan "eth3 eth2 eth1 eth0"
|
||||
ucidef_set_interface_wan "eth4"
|
||||
@@ -76,9 +76,6 @@ qcom_setup_macs()
|
||||
ucidef_set_network_device_mac eth0 $wan_mac
|
||||
ip link set eth0 address $wan_mac
|
||||
;;
|
||||
emplus,wap386v2)
|
||||
wan_mac=$(cat /sys/class/net/eth0/address)
|
||||
;;
|
||||
yuncore,ax840)
|
||||
wan_mac=$(cat /sys/class/net/eth1/address)
|
||||
lan_mac=$(macaddr_add "$wan_mac" 1)
|
||||
|
||||
@@ -76,7 +76,6 @@ case "$FIRMWARE" in
|
||||
cig,wf188n|\
|
||||
cig,wf660a|\
|
||||
edgecore,eap101|\
|
||||
emplus,wap386v2|\
|
||||
hfcl,ion4xi|\
|
||||
hfcl,ion4x|\
|
||||
hfcl,ion4x_2|\
|
||||
@@ -110,8 +109,7 @@ ath11k-macs)
|
||||
edgecore,eap101)
|
||||
ath11k_generate_macs_eap101
|
||||
;;
|
||||
cig,wf188n|\
|
||||
emplus,wap386v2)
|
||||
cig,wf188n)
|
||||
ath11k_generate_macs
|
||||
;;
|
||||
cig,wf660a)
|
||||
|
||||
@@ -122,7 +122,6 @@ platform_check_image() {
|
||||
wallys,dr6018|\
|
||||
wallys,dr6018-v4|\
|
||||
edgecore,eap101|\
|
||||
emplus,wap386v2|\
|
||||
hfcl,ion4xi|\
|
||||
hfcl,ion4x|\
|
||||
hfcl,ion4x_2|\
|
||||
@@ -146,8 +145,7 @@ platform_do_upgrade() {
|
||||
cig,wf660a)
|
||||
spi_nor_emmc_do_upgrade_bootconfig $1
|
||||
;;
|
||||
cig,wf188n|\
|
||||
emplus,wap386v2)
|
||||
cig,wf188n)
|
||||
[ -f /proc/boot_info/rootfs/upgradepartition ] && {
|
||||
CI_UBIPART="$(cat /proc/boot_info/rootfs/upgradepartition)"
|
||||
CI_BOOTCFG=1
|
||||
|
||||
@@ -1,356 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2019-2021, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include "ipq6018.dtsi"
|
||||
#include "ipq6018-cpr-regulator.dtsi"
|
||||
#include <dt-bindings/input/input.h>
|
||||
|
||||
/ {
|
||||
model = "Emplus WAP386 v2";
|
||||
compatible = "emplus,wap386v2", "qcom,ipq6018-cp03", "qcom,ipq6018";
|
||||
|
||||
aliases {
|
||||
/*
|
||||
* Aliases as required by u-boot
|
||||
* to patch MAC addresses
|
||||
*/
|
||||
ethernet0 = "/soc/dp1";
|
||||
|
||||
led-boot = &led_power;
|
||||
led-failsafe = &led_power;
|
||||
led-running = &led_power;
|
||||
led-upgrade = &led_power;
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
bootargs-append = " swiotlb=1 coherent_pool=2M";
|
||||
};
|
||||
|
||||
/*
|
||||
* +=========+==============+========================+
|
||||
* | | | |
|
||||
* | Region | Start Offset | Size |
|
||||
* | | | |
|
||||
* +--------+--------------+-------------------------+
|
||||
* | | | |
|
||||
* | | | |
|
||||
* | | | |
|
||||
* | | | |
|
||||
* | Linux | 0x41000000 | 139MB |
|
||||
* | | | |
|
||||
* | | | |
|
||||
* | | | |
|
||||
* +--------+--------------+-------------------------+
|
||||
* | TZ App | 0x49B00000 | 6MB |
|
||||
* +--------+--------------+-------------------------+
|
||||
*
|
||||
* From the available 145 MB for Linux in the first 256 MB,
|
||||
* we are reserving 6 MB for TZAPP.
|
||||
*
|
||||
* Refer arch/arm64/boot/dts/qcom/qcom-ipq6018-memory.dtsi
|
||||
* for memory layout.
|
||||
*/
|
||||
|
||||
/* TZAPP is enabled only in default memory profile */
|
||||
#if !defined(__IPQ_MEM_PROFILE_256_MB__) && !defined(__IPQ_MEM_PROFILE_512_MB__)
|
||||
reserved-memory {
|
||||
tzapp:tzapp@49B00000 { /* TZAPPS */
|
||||
no-map;
|
||||
reg = <0x0 0x49B00000 0x0 0x00600000>;
|
||||
};
|
||||
};
|
||||
#endif
|
||||
};
|
||||
|
||||
&tlmm {
|
||||
gpio-reserved-ranges = <20 1>;
|
||||
|
||||
uart_pins: uart_pins {
|
||||
mux {
|
||||
pins = "gpio44", "gpio45";
|
||||
function = "blsp2_uart";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
|
||||
spi_0_pins: spi_0_pins {
|
||||
mux {
|
||||
pins = "gpio38", "gpio39", "gpio40", "gpio41";
|
||||
function = "blsp0_spi";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
|
||||
button_pins: button_pins {
|
||||
reset_button {
|
||||
pins = "gpio9";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
|
||||
mdio_pins: mdio_pinmux {
|
||||
mux_0 {
|
||||
pins = "gpio64";
|
||||
function = "mdc";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
mux_1 {
|
||||
pins = "gpio65";
|
||||
function = "mdio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
mux_2 {
|
||||
pins = "gpio75";
|
||||
function = "gpio";
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
leds_pins: leds_pins {
|
||||
led_5g {
|
||||
pins = "gpio31";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
led_2g {
|
||||
pins = "gpio30";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&soc {
|
||||
mdio@90000 {
|
||||
pinctrl-0 = <&mdio_pins>;
|
||||
pinctrl-names = "default";
|
||||
phy-reset-gpio = <&tlmm 75 0>;
|
||||
status = "ok";
|
||||
phy0: ethernet-phy@0 {
|
||||
reg = <3>;
|
||||
};
|
||||
phy1: ethernet-phy@1 {
|
||||
reg = <4>;
|
||||
};
|
||||
};
|
||||
|
||||
ess-switch@3a000000 {
|
||||
switch_cpu_bmp = <0x1>; /* cpu port bitmap */
|
||||
switch_lan_bmp = <0x08>; /* lan port bitmap */
|
||||
switch_wan_bmp = <0x10>; /* wan port bitmap */
|
||||
switch_inner_bmp = <0xc0>; /*inner port bitmap*/
|
||||
switch_mac_mode = <0x0>; /* mac mode for uniphy instance0*/
|
||||
switch_mac_mode1 = <0xff>; /* mac mode for uniphy instance1*/
|
||||
switch_mac_mode2 = <0xff>; /* mac mode for uniphy instance2*/
|
||||
qcom,port_phyinfo {
|
||||
port@0 {
|
||||
port_id = <2>;
|
||||
phy_address = <3>;
|
||||
};
|
||||
port@1 {
|
||||
port_id = <3>;
|
||||
phy_address = <4>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
dp1 {
|
||||
device_type = "network";
|
||||
compatible = "qcom,nss-dp";
|
||||
qcom,id = <3>;
|
||||
reg = <0x3a001400 0x200>;
|
||||
qcom,mactype = <0>;
|
||||
local-mac-address = [000000000000];
|
||||
qcom,link-poll = <1>;
|
||||
qcom,phy-mdio-addr = <4>;
|
||||
phy-mode = "sgmii";
|
||||
};
|
||||
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
pinctrl-0 = <&button_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
button@9 {
|
||||
label = "reset";
|
||||
linux,code = <KEY_RESTART>;
|
||||
gpios = <&tlmm 9 GPIO_ACTIVE_LOW>;
|
||||
linux,input-type = <1>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
pinctrl-0 = <&leds_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
led_power: led@28 {
|
||||
label = "red:power";
|
||||
gpios = <&tlmm 28 GPIO_ACTIVE_HIGH>;
|
||||
linux,default-trigger = "wap386v2:red:power";
|
||||
default-state = "on";
|
||||
};
|
||||
led@29 {
|
||||
label = "blue:wan";
|
||||
gpios = <&tlmm 29 GPIO_ACTIVE_HIGH>;
|
||||
linux,default-trigger = "wap386v2:blue:eth";
|
||||
default-state = "on";
|
||||
};
|
||||
led@30 {
|
||||
label = "blue:wifi2";
|
||||
gpios = <&tlmm 30 GPIO_ACTIVE_HIGH>;
|
||||
linux,default-trigger = "wap386v2:blue:2g";
|
||||
default-state = "on";
|
||||
};
|
||||
led@31 {
|
||||
label = "blue:wifi5";
|
||||
gpios = <&tlmm 31 GPIO_ACTIVE_HIGH>;
|
||||
linux,default-trigger = "wap386v2:blue:5g";
|
||||
default-state = "on";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&blsp1_uart3 {
|
||||
pinctrl-0 = <&uart_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
&spi_0 {
|
||||
pinctrl-0 = <&spi_0_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;
|
||||
};
|
||||
};
|
||||
|
||||
&wifi0 {
|
||||
qcom,board_id = <0x30>;
|
||||
};
|
||||
|
||||
&pcie_phy {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
&pcie0 {
|
||||
#if defined(__CNSS2__)
|
||||
status = "ok";
|
||||
#endif
|
||||
};
|
||||
|
||||
&qpic_bam {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
&qpic_nand {
|
||||
status = "ok";
|
||||
|
||||
nand@0 {
|
||||
reg = <0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
nand-ecc-strength = <4>;
|
||||
nand-ecc-step-size = <512>;
|
||||
nand-bus-width = <8>;
|
||||
};
|
||||
};
|
||||
|
||||
&ssphy_0 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
&nss_crypto {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
&CPU0 {
|
||||
operating-points = <
|
||||
/* kHz uV (fixed) */
|
||||
864000 1100000
|
||||
1056000 1100000
|
||||
1320000 1100000
|
||||
1440000 1100000
|
||||
1608000 1100000
|
||||
1800000 1100000
|
||||
>;
|
||||
clock-latency = <200000>;
|
||||
};
|
||||
|
||||
&CPU1 {
|
||||
operating-points = <
|
||||
/* kHz uV (fixed) */
|
||||
864000 1100000
|
||||
1056000 1100000
|
||||
1320000 1100000
|
||||
1440000 1100000
|
||||
1608000 1100000
|
||||
1800000 1100000
|
||||
>;
|
||||
clock-latency = <200000>;
|
||||
};
|
||||
|
||||
&CPU2 {
|
||||
operating-points = <
|
||||
/* kHz uV (fixed) */
|
||||
864000 1100000
|
||||
1056000 1100000
|
||||
1320000 1100000
|
||||
1440000 1100000
|
||||
1608000 1100000
|
||||
1800000 1100000
|
||||
>;
|
||||
clock-latency = <200000>;
|
||||
};
|
||||
|
||||
&CPU3 {
|
||||
operating-points = <
|
||||
/* kHz uV (fixed) */
|
||||
864000 1100000
|
||||
1056000 1100000
|
||||
1320000 1100000
|
||||
1440000 1100000
|
||||
1608000 1100000
|
||||
1800000 1100000
|
||||
>;
|
||||
clock-latency = <200000>;
|
||||
};
|
||||
|
||||
&rpm_glink {
|
||||
status = "disabled";
|
||||
};
|
||||
@@ -76,15 +76,6 @@ define Device/edgecore_eap101
|
||||
endef
|
||||
TARGET_DEVICES += edgecore_eap101
|
||||
|
||||
define Device/emplus_wap386v2
|
||||
DEVICE_TITLE := Emplus WAP386v2
|
||||
DEVICE_DTS := qcom-ipq6018-emplus-wap386v2
|
||||
DEVICE_DTS_CONFIG := config@cp03-c1
|
||||
SUPPORTED_DEVICES := emplus,wap386v2
|
||||
DEVICE_PACKAGES := ath11k-wifi-qcom-ipq6018 uboot-env
|
||||
endef
|
||||
TARGET_DEVICES += emplus_wap386v2
|
||||
|
||||
define Device/indio_um-310ax-v1
|
||||
DEVICE_TITLE := Indio UM-310AX V1
|
||||
DEVICE_DTS := qcom-ipq6018-indio-um-310ax-v1
|
||||
|
||||
@@ -21,7 +21,6 @@ edgecore,oap103)
|
||||
ucidef_set_led_wlan "power" "POWER" "green:power" "default-on"
|
||||
;;
|
||||
sonicfi,rap630w-311g|\
|
||||
sonicfi,rap650c|\
|
||||
cybertan,eww631-b1)
|
||||
ucidef_set_led_default "power" "POWER" "sys:blue" "on"
|
||||
;;
|
||||
|
||||
@@ -24,7 +24,6 @@ qcom_setup_interfaces()
|
||||
edgecore,eap102|\
|
||||
edgecore,oap102|\
|
||||
edgecore,oap103|\
|
||||
sonicfi,rap650c|\
|
||||
cig,wf196)
|
||||
ucidef_set_interface_lan "eth1"
|
||||
ucidef_set_interface_wan "eth0"
|
||||
@@ -51,16 +50,6 @@ qcom_setup_macs()
|
||||
ip link set eth1 address $lan_mac
|
||||
ucidef_set_label_macaddr $wan_mac
|
||||
;;
|
||||
sonicfi,rap650c)
|
||||
mac=$(fw_printenv -n BaseMacAddress)
|
||||
[ -z "$mac" ] && return;
|
||||
wan_mac=$(macaddr_canonicalize $mac)
|
||||
lan_mac=$(macaddr_add "$wan_mac" 1)
|
||||
ucidef_set_network_device_mac eth0 $wan_mac
|
||||
ucidef_set_network_device_mac eth1 $lan_mac
|
||||
ip link set eth0 address $wan_mac
|
||||
ip link set eth1 address $lan_mac
|
||||
;;
|
||||
*)
|
||||
wan_mac=$(cat /sys/class/net/eth0/address)
|
||||
lan_mac=$(macaddr_add "$wan_mac" 1)
|
||||
|
||||
@@ -16,20 +16,6 @@ ath11k_generate_macs() {
|
||||
echo -ne \\x${mac3//:/\\x} >> /lib/firmware/ath11k-macs
|
||||
}
|
||||
|
||||
ath11k_generate_macs_sonicfi() {
|
||||
mac=$(fw_printenv -n BaseMacAddress)
|
||||
[ -z "$mac" ] && return;
|
||||
|
||||
touch /lib/firmware/ath11k-macs
|
||||
eth=$(macaddr_canonicalize $mac)
|
||||
mac1=$(macaddr_add $eth 2)
|
||||
mac2=$(macaddr_add $eth 3)
|
||||
mac3=$(macaddr_add $eth 4)
|
||||
echo -ne \\x${mac1//:/\\x} >> /lib/firmware/ath11k-macs
|
||||
echo -ne \\x${mac2//:/\\x} >> /lib/firmware/ath11k-macs
|
||||
echo -ne \\x${mac3//:/\\x} >> /lib/firmware/ath11k-macs
|
||||
}
|
||||
|
||||
ath11k_generate_macs_wf196() {
|
||||
touch /lib/firmware/ath11k-macs
|
||||
mac=$(grep BaseMacAddress= /dev/mtd18 | cut -dx -f2)
|
||||
@@ -77,7 +63,6 @@ case "$FIRMWARE" in
|
||||
tplink,ex227|\
|
||||
tplink,ex447|\
|
||||
yuncore,ax840|\
|
||||
sonicfi,rap650c|\
|
||||
sercomm,wallaby)
|
||||
caldata_extract "0:ART" 0x1000 0x20000
|
||||
;;
|
||||
@@ -112,9 +97,6 @@ ath11k-macs)
|
||||
cig,wf196)
|
||||
ath11k_generate_macs_wf196
|
||||
;;
|
||||
sonicfi*)
|
||||
ath11k_generate_macs_sonicfi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
ath11k/IPQ8074/hw2.0/board.bin)
|
||||
|
||||
@@ -10,8 +10,7 @@ case "$board" in
|
||||
ln -s /sys/kernel/debug/ath11k/ipq6018\ hw1.0/mac1/fw_stats/pdev_stats /tmp/pdev_stats_phy2g
|
||||
;;
|
||||
"edgecore,eap102"|\
|
||||
"edgecore,oap103"|\
|
||||
"sonicfi,rap650c")
|
||||
"edgecore,oap103")
|
||||
ln -s /sys/kernel/debug/ath11k/ipq8074\ hw2.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy5g
|
||||
ln -s /sys/kernel/debug/ath11k/ipq8074\ hw2.0/mac1/fw_stats/pdev_stats /tmp/pdev_stats_phy2g
|
||||
;;
|
||||
|
||||
@@ -29,7 +29,6 @@ platform_check_image() {
|
||||
edgecore,oap102|\
|
||||
edgecore,oap103|\
|
||||
edgecore,eap106|\
|
||||
sonicfi,rap650c|\
|
||||
tplink,ex227|\
|
||||
tplink,ex447)
|
||||
[ "$magic_long" = "73797375" ] && return 0
|
||||
@@ -84,17 +83,5 @@ platform_do_upgrade() {
|
||||
fi
|
||||
nand_upgrade_tar "$1"
|
||||
;;
|
||||
sonicfi,rap650c)
|
||||
boot_part=$(fw_printenv -n bootfrom)
|
||||
[ ${#boot_part} -eq 0 ] && boot_part=0
|
||||
echo "Current bootfrom is $boot_part"
|
||||
if [[ $boot_part == 1 ]]; then
|
||||
CI_UBIPART="rootfs"
|
||||
CI_FWSETENV="bootfrom 0"
|
||||
elif [[ $boot_part == 0 ]]; then
|
||||
CI_UBIPART="rootfs_1"
|
||||
CI_FWSETENV="bootfrom 1"
|
||||
fi
|
||||
nand_upgrade_tar "$1"
|
||||
esac
|
||||
}
|
||||
|
||||
@@ -1,650 +0,0 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/dts-v1/;
|
||||
/* Copyright (c) 2020 The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
#include "ipq8074.dtsi"
|
||||
#include "ipq8074-hk-cpu.dtsi"
|
||||
|
||||
/ {
|
||||
#address-cells = <0x2>;
|
||||
#size-cells = <0x2>;
|
||||
model = "SonicFi RAP650C";
|
||||
compatible = "sonicfi,rap650c", "qcom,ipq8074-ap-hk09", "qcom,ipq8074";
|
||||
qcom,msm-id = <0x157 0x0>, <0x187 0x0>;
|
||||
interrupt-parent = <&intc>;
|
||||
|
||||
aliases {
|
||||
serial0 = &blsp1_uart5;
|
||||
/* Aliases as required by u-boot to patch MAC addresses */
|
||||
ethernet0 = "/soc/dp1";
|
||||
ethernet1 = "/soc/dp2";
|
||||
|
||||
led-boot = &led_power;
|
||||
led-failsafe = &led_power;
|
||||
led-running = &led_power;
|
||||
led-upgrade = &led_power;
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0";
|
||||
};
|
||||
|
||||
soc {
|
||||
pinctrl@1000000 {
|
||||
button_pins: button_pins {
|
||||
reset_button {
|
||||
pins = "gpio57";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
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";
|
||||
function = "mdc";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
mux_1 {
|
||||
pins = "gpio69";
|
||||
function = "mdio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
mux_2 {
|
||||
pins = "gpio25";
|
||||
function = "gpio";
|
||||
bias-pull-up;
|
||||
};
|
||||
mux_3 {
|
||||
pins = "gpio44";
|
||||
function = "gpio";
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
led_pins: led_pins {
|
||||
red {
|
||||
pins = "gpio0";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
green {
|
||||
pins = "gpio2";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
blue {
|
||||
pins = "gpio9";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
|
||||
spi_3_pins: spi_3_pins {
|
||||
mux {
|
||||
pins = "gpio50", "gpio52", "gpio53";
|
||||
function = "blsp3_spi";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
spi_cs {
|
||||
pins = "gpio22";
|
||||
function = "blsp3_spi2";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
quartz_interrupt {
|
||||
pins = "gpio47";
|
||||
function = "gpio";
|
||||
input;
|
||||
bias-disable;
|
||||
};
|
||||
quartz_reset {
|
||||
pins = "gpio21";
|
||||
function = "gpio";
|
||||
output-low;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
serial@78b3000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
dp1 {
|
||||
device_type = "network";
|
||||
compatible = "qcom,nss-dp";
|
||||
qcom,id = <5>;
|
||||
reg = <0x3a001800 0x200>;
|
||||
qcom,mactype = <0>;
|
||||
local-mac-address = [000000000000];
|
||||
qcom,link-poll = <1>;
|
||||
qcom,phy-mdio-addr = <24>;
|
||||
phy-mode = "sgmii";
|
||||
};
|
||||
|
||||
dp2 {
|
||||
device_type = "network";
|
||||
compatible = "qcom,nss-dp";
|
||||
qcom,id = <6>;
|
||||
reg = <0x3a001a00 0x200>;
|
||||
qcom,mactype = <0>;
|
||||
local-mac-address = [000000000000];
|
||||
qcom,link-poll = <1>;
|
||||
qcom,phy-mdio-addr = <28>;
|
||||
phy-mode = "sgmii";
|
||||
};
|
||||
|
||||
spi@78b5000 {
|
||||
status = "ok";
|
||||
pinctrl-0 = <&spi_0_pins>;
|
||||
pinctrl-names = "default";
|
||||
cs-select = <0>;
|
||||
|
||||
m25p80@0 {
|
||||
compatible = "n25q128a11";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0>;
|
||||
spi-max-frequency = <50000000>;
|
||||
};
|
||||
};
|
||||
|
||||
spi@78b8000 {
|
||||
status = "ok";
|
||||
pinctrl-0 = <&spi_3_pins>;
|
||||
pinctrl-names = "default";
|
||||
cs-select = <2>;
|
||||
quartz-reset-gpio = <&tlmm 21 1>;
|
||||
|
||||
spidev3: spi@3 {
|
||||
compatible = "qti,spidev";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <24000000>;
|
||||
};
|
||||
};
|
||||
|
||||
dma@7984000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
nand@79b0000 {
|
||||
status = "ok";
|
||||
|
||||
nand@0 {
|
||||
reg = <0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
nand-ecc-strength = <4>;
|
||||
nand-ecc-step-size = <512>;
|
||||
nand-bus-width = <8>;
|
||||
};
|
||||
};
|
||||
|
||||
qusb@79000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
ssphy@78000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
usb3@8A00000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
qusb@59000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
ssphy@58000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
usb3@8C00000 {
|
||||
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>;
|
||||
pinctrl-names = "default";
|
||||
status = "ok";
|
||||
|
||||
button@1 {
|
||||
label = "reset";
|
||||
linux,code = <KEY_RESTART>;
|
||||
gpios = <&tlmm 57 GPIO_ACTIVE_LOW>;
|
||||
linux,input-type = <1>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
pinctrl-0 = <&led_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
red {
|
||||
label = "sys:red";
|
||||
gpio = <&tlmm 0 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "off";
|
||||
};
|
||||
|
||||
green {
|
||||
label = "sys:green";
|
||||
gpio = <&tlmm 2 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "off";
|
||||
};
|
||||
|
||||
led_power: blue {
|
||||
label = "sys:blue";
|
||||
gpio = <&tlmm 9 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "off";
|
||||
};
|
||||
};
|
||||
|
||||
mdio: mdio@90000 {
|
||||
pinctrl-0 = <&mdio_pins>;
|
||||
pinctrl-names = "default";
|
||||
phy-reset-gpio = <&tlmm 37 0 &tlmm 25 0 &tlmm 44 0>;
|
||||
phy0: ethernet-phy@0 {
|
||||
reg = <0>;
|
||||
};
|
||||
phy1: ethernet-phy@1 {
|
||||
reg = <1>;
|
||||
};
|
||||
phy2: ethernet-phy@2 {
|
||||
reg = <2>;
|
||||
};
|
||||
phy3: ethernet-phy@3 {
|
||||
reg = <3>;
|
||||
};
|
||||
phy4: ethernet-phy@4 {
|
||||
reg = <24>;
|
||||
};
|
||||
phy5: ethernet-phy@5 {
|
||||
reg = <28>;
|
||||
};
|
||||
};
|
||||
|
||||
ess-switch@3a000000 {
|
||||
switch_cpu_bmp = <0x1>; /* cpu port bitmap */
|
||||
switch_lan_bmp = <0x3e>; /* lan port bitmap */
|
||||
switch_wan_bmp = <0x40>; /* wan port bitmap */
|
||||
switch_mac_mode = <0x0>; /* mac mode for uniphy instance0*/
|
||||
switch_mac_mode1 = <0xf>; /* mac mode for uniphy instance1*/
|
||||
switch_mac_mode2 = <0xf>; /* mac mode for uniphy instance2*/
|
||||
bm_tick_mode = <0>; /* bm tick mode */
|
||||
tm_tick_mode = <0>; /* tm tick mode */
|
||||
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 = <24>;
|
||||
port_mac_sel = "QGMAC_PORT";
|
||||
};
|
||||
port@5 {
|
||||
port_id = <6>;
|
||||
phy_address = <28>;
|
||||
port_mac_sel = "QGMAC_PORT";
|
||||
};
|
||||
};
|
||||
port_scheduler_resource {
|
||||
port@0 {
|
||||
port_id = <0>;
|
||||
ucast_queue = <0 143>;
|
||||
mcast_queue = <256 271>;
|
||||
l0sp = <0 35>;
|
||||
l0cdrr = <0 47>;
|
||||
l0edrr = <0 47>;
|
||||
l1cdrr = <0 7>;
|
||||
l1edrr = <0 7>;
|
||||
};
|
||||
port@1 {
|
||||
port_id = <1>;
|
||||
ucast_queue = <144 159>;
|
||||
mcast_queue = <272 275>;
|
||||
l0sp = <36 39>;
|
||||
l0cdrr = <48 63>;
|
||||
l0edrr = <48 63>;
|
||||
l1cdrr = <8 11>;
|
||||
l1edrr = <8 11>;
|
||||
};
|
||||
port@2 {
|
||||
port_id = <2>;
|
||||
ucast_queue = <160 175>;
|
||||
mcast_queue = <276 279>;
|
||||
l0sp = <40 43>;
|
||||
l0cdrr = <64 79>;
|
||||
l0edrr = <64 79>;
|
||||
l1cdrr = <12 15>;
|
||||
l1edrr = <12 15>;
|
||||
};
|
||||
port@3 {
|
||||
port_id = <3>;
|
||||
ucast_queue = <176 191>;
|
||||
mcast_queue = <280 283>;
|
||||
l0sp = <44 47>;
|
||||
l0cdrr = <80 95>;
|
||||
l0edrr = <80 95>;
|
||||
l1cdrr = <16 19>;
|
||||
l1edrr = <16 19>;
|
||||
};
|
||||
port@4 {
|
||||
port_id = <4>;
|
||||
ucast_queue = <192 207>;
|
||||
mcast_queue = <284 287>;
|
||||
l0sp = <48 51>;
|
||||
l0cdrr = <96 111>;
|
||||
l0edrr = <96 111>;
|
||||
l1cdrr = <20 23>;
|
||||
l1edrr = <20 23>;
|
||||
};
|
||||
port@5 {
|
||||
port_id = <5>;
|
||||
ucast_queue = <208 223>;
|
||||
mcast_queue = <288 291>;
|
||||
l0sp = <52 55>;
|
||||
l0cdrr = <112 127>;
|
||||
l0edrr = <112 127>;
|
||||
l1cdrr = <24 27>;
|
||||
l1edrr = <24 27>;
|
||||
};
|
||||
port@6 {
|
||||
port_id = <6>;
|
||||
ucast_queue = <224 239>;
|
||||
mcast_queue = <292 295>;
|
||||
l0sp = <56 59>;
|
||||
l0cdrr = <128 143>;
|
||||
l0edrr = <128 143>;
|
||||
l1cdrr = <28 31>;
|
||||
l1edrr = <28 31>;
|
||||
};
|
||||
port@7 {
|
||||
port_id = <7>;
|
||||
ucast_queue = <240 255>;
|
||||
mcast_queue = <296 299>;
|
||||
l0sp = <60 63>;
|
||||
l0cdrr = <144 159>;
|
||||
l0edrr = <144 159>;
|
||||
l1cdrr = <32 35>;
|
||||
l1edrr = <32 35>;
|
||||
};
|
||||
};
|
||||
port_scheduler_config {
|
||||
port@0 {
|
||||
port_id = <0>;
|
||||
l1scheduler {
|
||||
group@0 {
|
||||
sp = <0 1>; /*L0 SPs*/
|
||||
/*cpri cdrr epri edrr*/
|
||||
cfg = <0 0 0 0>;
|
||||
};
|
||||
};
|
||||
l0scheduler {
|
||||
group@0 {
|
||||
/*unicast queues*/
|
||||
ucast_queue = <0 4 8>;
|
||||
/*multicast queues*/
|
||||
mcast_queue = <256 260>;
|
||||
/*sp cpri cdrr epri edrr*/
|
||||
cfg = <0 0 0 0 0>;
|
||||
};
|
||||
group@1 {
|
||||
ucast_queue = <1 5 9>;
|
||||
mcast_queue = <257 261>;
|
||||
cfg = <0 1 1 1 1>;
|
||||
};
|
||||
group@2 {
|
||||
ucast_queue = <2 6 10>;
|
||||
mcast_queue = <258 262>;
|
||||
cfg = <0 2 2 2 2>;
|
||||
};
|
||||
group@3 {
|
||||
ucast_queue = <3 7 11>;
|
||||
mcast_queue = <259 263>;
|
||||
cfg = <0 3 3 3 3>;
|
||||
};
|
||||
};
|
||||
};
|
||||
port@1 {
|
||||
port_id = <1>;
|
||||
l1scheduler {
|
||||
group@0 {
|
||||
sp = <36>;
|
||||
cfg = <0 8 0 8>;
|
||||
};
|
||||
group@1 {
|
||||
sp = <37>;
|
||||
cfg = <1 9 1 9>;
|
||||
};
|
||||
};
|
||||
l0scheduler {
|
||||
group@0 {
|
||||
ucast_queue = <144>;
|
||||
ucast_loop_pri = <16>;
|
||||
mcast_queue = <272>;
|
||||
mcast_loop_pri = <4>;
|
||||
cfg = <36 0 48 0 48>;
|
||||
};
|
||||
};
|
||||
};
|
||||
port@2 {
|
||||
port_id = <2>;
|
||||
l1scheduler {
|
||||
group@0 {
|
||||
sp = <40>;
|
||||
cfg = <0 12 0 12>;
|
||||
};
|
||||
group@1 {
|
||||
sp = <41>;
|
||||
cfg = <1 13 1 13>;
|
||||
};
|
||||
};
|
||||
l0scheduler {
|
||||
group@0 {
|
||||
ucast_queue = <160>;
|
||||
ucast_loop_pri = <16>;
|
||||
mcast_queue = <276>;
|
||||
mcast_loop_pri = <4>;
|
||||
cfg = <40 0 64 0 64>;
|
||||
};
|
||||
};
|
||||
};
|
||||
port@3 {
|
||||
port_id = <3>;
|
||||
l1scheduler {
|
||||
group@0 {
|
||||
sp = <44>;
|
||||
cfg = <0 16 0 16>;
|
||||
};
|
||||
group@1 {
|
||||
sp = <45>;
|
||||
cfg = <1 17 1 17>;
|
||||
};
|
||||
};
|
||||
l0scheduler {
|
||||
group@0 {
|
||||
ucast_queue = <176>;
|
||||
ucast_loop_pri = <16>;
|
||||
mcast_queue = <280>;
|
||||
mcast_loop_pri = <4>;
|
||||
cfg = <44 0 80 0 80>;
|
||||
};
|
||||
};
|
||||
};
|
||||
port@4 {
|
||||
port_id = <4>;
|
||||
l1scheduler {
|
||||
group@0 {
|
||||
sp = <48>;
|
||||
cfg = <0 20 0 20>;
|
||||
};
|
||||
group@1 {
|
||||
sp = <49>;
|
||||
cfg = <1 21 1 21>;
|
||||
};
|
||||
};
|
||||
l0scheduler {
|
||||
group@0 {
|
||||
ucast_queue = <192>;
|
||||
ucast_loop_pri = <16>;
|
||||
mcast_queue = <284>;
|
||||
mcast_loop_pri = <4>;
|
||||
cfg = <48 0 96 0 96>;
|
||||
};
|
||||
};
|
||||
};
|
||||
port@5 {
|
||||
port_id = <5>;
|
||||
l1scheduler {
|
||||
group@0 {
|
||||
sp = <52>;
|
||||
cfg = <0 24 0 24>;
|
||||
};
|
||||
group@1 {
|
||||
sp = <53>;
|
||||
cfg = <1 25 1 25>;
|
||||
};
|
||||
};
|
||||
l0scheduler {
|
||||
group@0 {
|
||||
ucast_queue = <208>;
|
||||
ucast_loop_pri = <16>;
|
||||
mcast_queue = <288>;
|
||||
mcast_loop_pri = <4>;
|
||||
cfg = <52 0 112 0 112>;
|
||||
};
|
||||
};
|
||||
};
|
||||
port@6 {
|
||||
port_id = <6>;
|
||||
l1scheduler {
|
||||
group@0 {
|
||||
sp = <56>;
|
||||
cfg = <0 28 0 28>;
|
||||
};
|
||||
group@1 {
|
||||
sp = <57>;
|
||||
cfg = <1 29 1 29>;
|
||||
};
|
||||
};
|
||||
l0scheduler {
|
||||
group@0 {
|
||||
ucast_queue = <224>;
|
||||
ucast_loop_pri = <16>;
|
||||
mcast_queue = <292>;
|
||||
mcast_loop_pri = <4>;
|
||||
cfg = <56 0 128 0 128>;
|
||||
};
|
||||
};
|
||||
};
|
||||
port@7 {
|
||||
port_id = <7>;
|
||||
l1scheduler {
|
||||
group@0 {
|
||||
sp = <60>;
|
||||
cfg = <0 32 0 32>;
|
||||
};
|
||||
group@1 {
|
||||
sp = <61>;
|
||||
cfg = <1 33 1 33>;
|
||||
};
|
||||
};
|
||||
l0scheduler {
|
||||
group@0 {
|
||||
ucast_queue = <240>;
|
||||
ucast_loop_pri = <16>;
|
||||
mcast_queue = <296>;
|
||||
cfg = <60 0 144 0 144>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
nss-macsec0 {
|
||||
compatible = "qcom,nss-macsec";
|
||||
phy_addr = <0x18>;
|
||||
phy_access_mode = <0>;
|
||||
mdiobus = <&mdio>;
|
||||
};
|
||||
nss-macsec1 {
|
||||
compatible = "qcom,nss-macsec";
|
||||
phy_addr = <0x1c>;
|
||||
phy_access_mode = <0>;
|
||||
mdiobus = <&mdio>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&wifi0 {
|
||||
qcom,board_id = <0x90>;
|
||||
};
|
||||
|
||||
&wifi1 {
|
||||
qcom,board_id = <0x290>;
|
||||
};
|
||||
@@ -57,17 +57,6 @@ define Device/edgecore_eap106
|
||||
endef
|
||||
#TARGET_DEVICES += edgecore_eap106
|
||||
|
||||
define Device/sonicfi_rap650c
|
||||
DEVICE_TITLE := SonicFi RAP650C
|
||||
DEVICE_DTS := qcom-ipq807x-rap650c
|
||||
DEVICE_DTS_CONFIG=config@hk09
|
||||
SUPPORTED_DEVICES := sonicfi,rap650c
|
||||
DEVICE_PACKAGES := ath11k-wifi-sonicfi-rap650c uboot-envtools
|
||||
IMAGES := sysupgrade.tar nand-factory.bin nand-factory.ubi
|
||||
IMAGE/nand-factory.ubi := append-ubi
|
||||
endef
|
||||
TARGET_DEVICES += sonicfi_rap650c
|
||||
|
||||
define Device/tplink_ex227
|
||||
DEVICE_TITLE := TP-Link EX227
|
||||
DEVICE_DTS := qcom-ipq807x-ex227
|
||||
|
||||
@@ -146,40 +146,6 @@ check_board_phy() {
|
||||
fi
|
||||
}
|
||||
|
||||
is_morse_phy() {
|
||||
local dev="$1"
|
||||
local morse_path="/sys/class/ieee80211/${dev}/device/morse/"
|
||||
|
||||
if [ -d "$morse_path" ]; then
|
||||
return 0 # This is a Morse PHY
|
||||
else
|
||||
return 1 # Not a Morse PHY
|
||||
fi
|
||||
}
|
||||
|
||||
# Set up Morse-specific wireless configuration
|
||||
setup_morse_wireless() {
|
||||
local dev="$1"
|
||||
local name="$2"
|
||||
|
||||
# Create Morse-specific wireless configuration with exact settings
|
||||
uci -q batch <<-EOF
|
||||
set wireless.${name}=wifi-device
|
||||
set wireless.${name}.disabled='0'
|
||||
set wireless.${name}.mode='ap'
|
||||
set wireless.${name}.type='morse'
|
||||
set wireless.${name}.path='platform/11009000.spi/spi_master/spi1/spi1.0'
|
||||
set wireless.${name}.channel='12'
|
||||
set wireless.${name}.hwmode='a'
|
||||
set wireless.${name}.band='s1g'
|
||||
set wireless.${name}.htmode='8'
|
||||
set wireless.${name}.country='US'
|
||||
set wireless.${name}.channels=''
|
||||
EOF
|
||||
|
||||
uci -q commit wireless
|
||||
}
|
||||
|
||||
detect_mac80211() {
|
||||
devidx=0
|
||||
config_load wireless
|
||||
@@ -192,6 +158,13 @@ detect_mac80211() {
|
||||
|
||||
dev="${_dev##*/}"
|
||||
|
||||
mode_band=""
|
||||
channel=""
|
||||
htmode=""
|
||||
ht_capab=""
|
||||
|
||||
get_band_defaults "$dev"
|
||||
|
||||
path="$(iwinfo nl80211 path "$dev")"
|
||||
macaddr="$(cat /sys/class/ieee80211/${dev}/macaddress)"
|
||||
|
||||
@@ -210,51 +183,35 @@ detect_mac80211() {
|
||||
|
||||
name="radio${devidx}"
|
||||
devidx=$(($devidx + 1))
|
||||
case "$dev" in
|
||||
phy*)
|
||||
if [ -n "$path" ]; then
|
||||
dev_id="set wireless.${name}.path='$path'"
|
||||
else
|
||||
dev_id="set wireless.${name}.macaddr='$macaddr'"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
dev_id="set wireless.${name}.phy='$dev'"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Check if this is a Morse PHY
|
||||
if is_morse_phy "$dev"; then
|
||||
# Use dedicated Morse configuration
|
||||
setup_morse_wireless "$dev" "$name"
|
||||
else
|
||||
# Standard wireless configuration for non-Morse devices
|
||||
mode_band=""
|
||||
channel=""
|
||||
htmode=""
|
||||
ht_capab=""
|
||||
uci -q batch <<-EOF
|
||||
set wireless.${name}=wifi-device
|
||||
set wireless.${name}.type=mac80211
|
||||
${dev_id}
|
||||
set wireless.${name}.channel=${channel}
|
||||
set wireless.${name}.band=${mode_band}
|
||||
set wireless.${name}.htmode=$htmode
|
||||
set wireless.${name}.disabled=1
|
||||
|
||||
# Get default settings for standard devices
|
||||
get_band_defaults "$dev"
|
||||
|
||||
case "$dev" in
|
||||
phy*)
|
||||
if [ -n "$path" ]; then
|
||||
dev_id="set wireless.${name}.path='$path'"
|
||||
else
|
||||
dev_id="set wireless.${name}.macaddr='$macaddr'"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
dev_id="set wireless.${name}.phy='$dev'"
|
||||
;;
|
||||
esac
|
||||
|
||||
uci -q batch <<-EOF
|
||||
set wireless.${name}=wifi-device
|
||||
set wireless.${name}.type=mac80211
|
||||
${dev_id}
|
||||
set wireless.${name}.channel=${channel}
|
||||
set wireless.${name}.band=${mode_band}
|
||||
set wireless.${name}.htmode=$htmode
|
||||
set wireless.${name}.disabled=1
|
||||
|
||||
set wireless.default_${name}=wifi-iface
|
||||
set wireless.default_${name}.device=${name}
|
||||
set wireless.default_${name}.network=lan
|
||||
set wireless.default_${name}.mode=ap
|
||||
set wireless.default_${name}.ssid=OpenWrt
|
||||
set wireless.default_${name}.encryption=none
|
||||
set wireless.default_${name}=wifi-iface
|
||||
set wireless.default_${name}.device=${name}
|
||||
set wireless.default_${name}.network=lan
|
||||
set wireless.default_${name}.mode=ap
|
||||
set wireless.default_${name}.ssid=OpenWrt
|
||||
set wireless.default_${name}.encryption=none
|
||||
EOF
|
||||
uci -q commit wireless
|
||||
fi
|
||||
uci -q commit wireless
|
||||
done
|
||||
}
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
--- a/net/mac80211/rx.c
|
||||
+++ b/net/mac80211/rx.c
|
||||
@@ -4193,8 +4196,10 @@
|
||||
case NL80211_IFTYPE_STATION:
|
||||
if (!bssid && !sdata->u.mgd.use_4addr)
|
||||
return false;
|
||||
+#if 0
|
||||
if (ieee80211_is_robust_mgmt_frame(skb) && !rx->sta)
|
||||
return false;
|
||||
+#endif
|
||||
if (multicast)
|
||||
return true;
|
||||
return ether_addr_equal(sdata->vif.addr, hdr->addr1);
|
||||
@@ -1,443 +0,0 @@
|
||||
--- a/include/linux/ieee80211.h
|
||||
+++ b/include/linux/ieee80211.h
|
||||
@@ -3434,6 +3434,9 @@
|
||||
WLAN_ACTION_ADDBA_REQ = 0,
|
||||
WLAN_ACTION_ADDBA_RESP = 1,
|
||||
WLAN_ACTION_DELBA = 2,
|
||||
+ WLAN_ACTION_NDP_ADDBA_REQ = 128,
|
||||
+ WLAN_ACTION_NDP_ADDBA_RESP = 129,
|
||||
+ WLAN_ACTION_NDP_DELBA = 130,
|
||||
};
|
||||
|
||||
/* BACK (block-ack) parties */
|
||||
|
||||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -125,6 +125,13 @@
|
||||
* via the usual ieee80211_tx_dequeue).
|
||||
*/
|
||||
|
||||
+ /** Morse Micro patches which add functionality that the driver needs to know about, can be
|
||||
+ * signalled by adding a define here.
|
||||
+ */
|
||||
+
|
||||
+ /** mac80211 has the capability to negotiate NDP block acknowledgements */
|
||||
+ #define MORSE_MAC80211_S1G_FEATURE_NDP_BLOCKACK
|
||||
+
|
||||
struct device;
|
||||
|
||||
/**
|
||||
@@ -2437,7 +2444,10 @@
|
||||
*
|
||||
* @IEEE80211_HW_DETECTS_COLOR_COLLISION: HW/driver has support for BSS color
|
||||
* collision detection and doesn't need it in software.
|
||||
- *
|
||||
+ *
|
||||
+ + @IEEE80211_HW_SUPPORTS_NDP_BLOCKACK: Hardware supports 11ah A-MPDU aggregation with NDP block
|
||||
+ + ACKs
|
||||
+ +
|
||||
* @NUM_IEEE80211_HW_FLAGS: number of hardware flags, used for sizing arrays
|
||||
*/
|
||||
enum ieee80211_hw_flags {
|
||||
@@ -2494,6 +2504,7 @@
|
||||
IEEE80211_HW_SUPPORTS_RX_DECAP_OFFLOAD,
|
||||
IEEE80211_HW_SUPPORTS_CONC_MON_RX_DECAP,
|
||||
IEEE80211_HW_DETECTS_COLOR_COLLISION,
|
||||
+ IEEE80211_HW_SUPPORTS_NDP_BLOCKACK,
|
||||
|
||||
/* keep last, obviously */
|
||||
NUM_IEEE80211_HW_FLAGS
|
||||
@@ -3315,7 +3326,8 @@
|
||||
* action is set to %IEEE80211_AMPDU_RX_START or
|
||||
* %IEEE80211_AMPDU_TX_OPERATIONAL
|
||||
* @amsdu: indicates the peer's ability to receive A-MSDU within A-MPDU.
|
||||
- * valid when the action is set to %IEEE80211_AMPDU_TX_OPERATIONAL
|
||||
+ * valid when the action is set to %IEEE80211_AMPDU_TX_OPERATIONAL
|
||||
+ * @ndp: indicates the driver has requested the session to use NDP block ACKs
|
||||
* @timeout: BA session timeout. Valid only when the action is set to
|
||||
* %IEEE80211_AMPDU_RX_START
|
||||
*/
|
||||
@@ -3326,6 +3338,7 @@
|
||||
u16 ssn;
|
||||
u16 buf_size;
|
||||
bool amsdu;
|
||||
+ bool ndp;
|
||||
u16 timeout;
|
||||
};
|
||||
|
||||
|
||||
--- a/net/mac80211/agg-rx.c
|
||||
+++ b/net/mac80211/agg-rx.c
|
||||
@@ -80,6 +80,8 @@
|
||||
RCU_INIT_POINTER(sta->ampdu_mlme.tid_rx[tid], NULL);
|
||||
__clear_bit(tid, sta->ampdu_mlme.agg_session_valid);
|
||||
|
||||
+ if (tid_rx) params.ndp = tid_rx->ndp;
|
||||
+
|
||||
ht_dbg(sta->sdata,
|
||||
"Rx BA session stop requested for %pM tid %u %s reason: %d\n",
|
||||
sta->sta.addr, tid,
|
||||
@@ -94,7 +96,7 @@
|
||||
/* check if this is a self generated aggregation halt */
|
||||
if (initiator == WLAN_BACK_RECIPIENT && tx)
|
||||
ieee80211_send_delba(sta->sdata, sta->sta.addr,
|
||||
- tid, WLAN_BACK_RECIPIENT, reason);
|
||||
+ tid, params.ndp, WLAN_BACK_RECIPIENT, reason);
|
||||
|
||||
/*
|
||||
* return here in case tid_rx is not assigned - which will happen if
|
||||
@@ -214,7 +216,7 @@
|
||||
|
||||
static void ieee80211_send_addba_resp(struct sta_info *sta, u8 *da, u16 tid,
|
||||
u8 dialog_token, u16 status, u16 policy,
|
||||
- u16 buf_size, u16 timeout,
|
||||
+ u16 buf_size, u16 timeout, bool ndp,
|
||||
const struct ieee80211_addba_ext_ie *addbaext)
|
||||
{
|
||||
struct ieee80211_sub_if_data *sdata = sta->sdata;
|
||||
@@ -248,7 +250,8 @@
|
||||
|
||||
skb_put(skb, 1 + sizeof(mgmt->u.action.u.addba_resp));
|
||||
mgmt->u.action.category = WLAN_CATEGORY_BACK;
|
||||
- mgmt->u.action.u.addba_resp.action_code = WLAN_ACTION_ADDBA_RESP;
|
||||
+ mgmt->u.action.u.addba_resp.action_code = ndp ?
|
||||
+ WLAN_ACTION_NDP_ADDBA_RESP : WLAN_ACTION_ADDBA_RESP;
|
||||
mgmt->u.action.u.addba_resp.dialog_token = dialog_token;
|
||||
|
||||
capab = 0;
|
||||
@@ -273,7 +276,7 @@
|
||||
void ___ieee80211_start_rx_ba_session(struct sta_info *sta,
|
||||
u8 dialog_token, u16 timeout,
|
||||
u16 start_seq_num, u16 ba_policy, u16 tid,
|
||||
- u16 buf_size, bool tx, bool auto_seq,
|
||||
+ u16 buf_size, bool tx, bool auto_seq, bool ndp,
|
||||
const struct ieee80211_addba_ext_ie *addbaext)
|
||||
{
|
||||
struct ieee80211_local *local = sta->sdata->local;
|
||||
@@ -284,6 +287,7 @@
|
||||
.tid = tid,
|
||||
.amsdu = false,
|
||||
.timeout = timeout,
|
||||
+ .ndp = ndp,
|
||||
.ssn = start_seq_num,
|
||||
};
|
||||
int i, ret = -EOPNOTSUPP;
|
||||
@@ -306,6 +310,12 @@
|
||||
goto end;
|
||||
}
|
||||
|
||||
+
|
||||
+ if (ndp && !ieee80211_hw_check(&local->hw, SUPPORTS_NDP_BLOCKACK)) {
|
||||
+ ht_dbg(sta->sdata, "Requested NDP BA but HW does not support it\n");
|
||||
+ goto end;
|
||||
+ }
|
||||
+
|
||||
if (test_sta_flag(sta, WLAN_STA_BLOCK_BA)) {
|
||||
ht_dbg(sta->sdata,
|
||||
"Suspend in progress - Denying ADDBA request (%pM tid %d)\n",
|
||||
@@ -438,6 +448,7 @@
|
||||
tid_agg_rx->started = false;
|
||||
tid_agg_rx->reorder_buf_filtered = 0;
|
||||
tid_agg_rx->tid = tid;
|
||||
+ tid_agg_rx->ndp = params.ndp;
|
||||
tid_agg_rx->sta = sta;
|
||||
status = WLAN_STATUS_SUCCESS;
|
||||
|
||||
@@ -459,20 +470,20 @@
|
||||
if (tx)
|
||||
ieee80211_send_addba_resp(sta, sta->sta.addr, tid,
|
||||
dialog_token, status, 1, buf_size,
|
||||
- timeout, addbaext);
|
||||
+ timeout, params.ndp, addbaext);
|
||||
}
|
||||
|
||||
static void __ieee80211_start_rx_ba_session(struct sta_info *sta,
|
||||
u8 dialog_token, u16 timeout,
|
||||
u16 start_seq_num, u16 ba_policy,
|
||||
u16 tid, u16 buf_size, bool tx,
|
||||
- bool auto_seq,
|
||||
+ bool auto_seq, bool ndp,
|
||||
const struct ieee80211_addba_ext_ie *addbaext)
|
||||
{
|
||||
mutex_lock(&sta->ampdu_mlme.mtx);
|
||||
___ieee80211_start_rx_ba_session(sta, dialog_token, timeout,
|
||||
start_seq_num, ba_policy, tid,
|
||||
- buf_size, tx, auto_seq, addbaext);
|
||||
+ buf_size, tx, auto_seq, ndp, addbaext);
|
||||
mutex_unlock(&sta->ampdu_mlme.mtx);
|
||||
}
|
||||
|
||||
@@ -485,6 +496,7 @@
|
||||
struct ieee802_11_elems *elems = NULL;
|
||||
u8 dialog_token;
|
||||
int ies_len;
|
||||
+ bool ndp_ba;
|
||||
|
||||
/* extract session parameters from addba request frame */
|
||||
dialog_token = mgmt->u.action.u.addba_req.dialog_token;
|
||||
@@ -496,6 +508,7 @@
|
||||
ba_policy = (capab & IEEE80211_ADDBA_PARAM_POLICY_MASK) >> 1;
|
||||
tid = (capab & IEEE80211_ADDBA_PARAM_TID_MASK) >> 2;
|
||||
buf_size = (capab & IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK) >> 6;
|
||||
+ ndp_ba = (mgmt->u.action.u.addba_req.action_code == WLAN_ACTION_NDP_ADDBA_REQ);
|
||||
|
||||
ies_len = len - offsetof(struct ieee80211_mgmt,
|
||||
u.action.u.addba_req.variable);
|
||||
@@ -508,7 +521,7 @@
|
||||
|
||||
__ieee80211_start_rx_ba_session(sta, dialog_token, timeout,
|
||||
start_seq_num, ba_policy, tid,
|
||||
- buf_size, true, false,
|
||||
+ buf_size, true, false, ndp_ba,
|
||||
elems ? elems->addba_ext_ie : NULL);
|
||||
free:
|
||||
kfree(elems);
|
||||
|
||||
--- a/net/mac80211/agg-tx.c
|
||||
+++ b/net/mac80211/agg-tx.c
|
||||
@@ -65,7 +65,7 @@
|
||||
*/
|
||||
|
||||
static void ieee80211_send_addba_request(struct ieee80211_sub_if_data *sdata,
|
||||
- const u8 *da, u16 tid,
|
||||
+ const u8 *da, u16 tid, bool ndp,
|
||||
u8 dialog_token, u16 start_seq_num,
|
||||
u16 agg_size, u16 timeout)
|
||||
{
|
||||
@@ -99,7 +99,8 @@
|
||||
skb_put(skb, 1 + sizeof(mgmt->u.action.u.addba_req));
|
||||
|
||||
mgmt->u.action.category = WLAN_CATEGORY_BACK;
|
||||
- mgmt->u.action.u.addba_req.action_code = WLAN_ACTION_ADDBA_REQ;
|
||||
+ mgmt->u.action.u.addba_req.action_code = ndp ? WLAN_ACTION_NDP_ADDBA_REQ :
|
||||
+ WLAN_ACTION_ADDBA_REQ;
|
||||
|
||||
mgmt->u.action.u.addba_req.dialog_token = dialog_token;
|
||||
if (amsdu)
|
||||
@@ -488,7 +489,7 @@
|
||||
}
|
||||
|
||||
/* send AddBA request */
|
||||
- ieee80211_send_addba_request(sdata, sta->sta.addr, tid,
|
||||
+ ieee80211_send_addba_request(sdata, sta->sta.addr, tid, tid_tx->ndp,
|
||||
tid_tx->dialog_token, tid_tx->ssn,
|
||||
buf_size, tid_tx->timeout);
|
||||
|
||||
@@ -506,10 +507,18 @@
|
||||
.tid = tid,
|
||||
.buf_size = 0,
|
||||
.amsdu = false,
|
||||
+ .ndp = false,
|
||||
.timeout = 0,
|
||||
};
|
||||
int ret;
|
||||
|
||||
+ /* If the HW supports NDP blockacks, try to negotiate. It's the drivers responsibility to
|
||||
+ * clear .ndp if the conditions for NDP block acks are not met for this TID.
|
||||
+ * TODO: remove driver responsibility when S1G STA caps exist in mac80211
|
||||
+ */
|
||||
+ if (ieee80211_hw_check(&local->hw, SUPPORTS_NDP_BLOCKACK))
|
||||
+ params.ndp = true;
|
||||
+
|
||||
tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
|
||||
|
||||
/*
|
||||
@@ -532,6 +541,11 @@
|
||||
params.ssn = sta->tid_seq[tid] >> 4;
|
||||
ret = drv_ampdu_action(local, sdata, ¶ms);
|
||||
tid_tx->ssn = params.ssn;
|
||||
+
|
||||
+
|
||||
+ /* driver may clear this flag if it does not want NDP for this session */
|
||||
+ tid_tx->ndp = params.ndp;
|
||||
+
|
||||
if (ret == IEEE80211_AMPDU_TX_START_DELAY_ADDBA) {
|
||||
return;
|
||||
} else if (ret == IEEE80211_AMPDU_TX_START_IMMEDIATE) {
|
||||
@@ -769,6 +783,7 @@
|
||||
tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
|
||||
params.buf_size = tid_tx->buf_size;
|
||||
params.amsdu = tid_tx->amsdu;
|
||||
+ params.ndp = tid_tx->ndp;
|
||||
|
||||
ht_dbg(sta->sdata, "Aggregation is on for %pM tid %d\n",
|
||||
sta->sta.addr, tid);
|
||||
@@ -950,7 +965,7 @@
|
||||
ieee80211_agg_start_txq(sta, tid, false);
|
||||
|
||||
if (send_delba)
|
||||
- ieee80211_send_delba(sdata, sta->sta.addr, tid,
|
||||
+ ieee80211_send_delba(sdata, sta->sta.addr, tid, tid_tx->ndp,
|
||||
WLAN_BACK_INITIATOR, WLAN_REASON_QSTA_NOT_USE);
|
||||
}
|
||||
|
||||
@@ -1009,6 +1024,13 @@
|
||||
goto out;
|
||||
}
|
||||
|
||||
+ if ((tid_tx->ndp && mgmt->u.action.u.addba_resp.action_code != WLAN_ACTION_NDP_ADDBA_RESP) ||
|
||||
+ (!tid_tx->ndp && mgmt->u.action.u.addba_resp.action_code != WLAN_ACTION_ADDBA_RESP)) {
|
||||
+ ht_dbg(sta->sdata, "wrong addBA response action code, %d ndp %d\n",
|
||||
+ mgmt->u.action.u.addba_resp.action_code, tid_tx->ndp);
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
del_timer_sync(&tid_tx->addba_resp_timer);
|
||||
|
||||
ht_dbg(sta->sdata, "switched off addBA timer for %pM tid %d\n",
|
||||
--- a/net/mac80211/debugfs.c
|
||||
+++ b/net/mac80211/debugfs.c
|
||||
@@ -543,6 +543,7 @@
|
||||
FLAG(SUPPORTS_RX_DECAP_OFFLOAD),
|
||||
FLAG(SUPPORTS_CONC_MON_RX_DECAP),
|
||||
FLAG(DETECTS_COLOR_COLLISION),
|
||||
+ FLAG(SUPPORTS_NDP_BLOCKACK),
|
||||
#undef FLAG
|
||||
};
|
||||
|
||||
--- a/net/mac80211/ht.c
|
||||
+++ b/net/mac80211/ht.c
|
||||
@@ -365,7 +365,7 @@
|
||||
sta->ampdu_mlme.tid_rx_manage_offl))
|
||||
___ieee80211_start_rx_ba_session(sta, 0, 0, 0, 1, tid,
|
||||
IEEE80211_MAX_AMPDU_BUF_HT,
|
||||
- false, true, NULL);
|
||||
+ false, true, false, NULL);
|
||||
|
||||
if (test_and_clear_bit(tid + IEEE80211_NUM_TIDS,
|
||||
sta->ampdu_mlme.tid_rx_manage_offl))
|
||||
@@ -412,7 +412,7 @@
|
||||
}
|
||||
|
||||
void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata,
|
||||
- const u8 *da, u16 tid,
|
||||
+ const u8 *da, u16 tid, bool ndp,
|
||||
u16 initiator, u16 reason_code)
|
||||
{
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
@@ -443,7 +443,7 @@
|
||||
skb_put(skb, 1 + sizeof(mgmt->u.action.u.delba));
|
||||
|
||||
mgmt->u.action.category = WLAN_CATEGORY_BACK;
|
||||
- mgmt->u.action.u.delba.action_code = WLAN_ACTION_DELBA;
|
||||
+ mgmt->u.action.u.delba.action_code = ndp ? WLAN_ACTION_NDP_DELBA : WLAN_ACTION_DELBA;
|
||||
params = (u16)(initiator << 11); /* bit 11 initiator */
|
||||
params |= (u16)(tid << 12); /* bit 15:12 TID number */
|
||||
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -1902,7 +1902,7 @@
|
||||
const struct ieee80211_ht_cap *ht_cap_ie,
|
||||
struct sta_info *sta);
|
||||
void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata,
|
||||
- const u8 *da, u16 tid,
|
||||
+ const u8 *da, u16 tid, bool ndp,
|
||||
u16 initiator, u16 reason_code);
|
||||
int ieee80211_send_smps_action(struct ieee80211_sub_if_data *sdata,
|
||||
enum ieee80211_smps_mode smps, const u8 *da,
|
||||
@@ -1919,7 +1919,7 @@
|
||||
void ___ieee80211_start_rx_ba_session(struct sta_info *sta,
|
||||
u8 dialog_token, u16 timeout,
|
||||
u16 start_seq_num, u16 ba_policy, u16 tid,
|
||||
- u16 buf_size, bool tx, bool auto_seq,
|
||||
+ u16 buf_size, bool tx, bool auto_seq, bool ndp,
|
||||
const struct ieee80211_addba_ext_ie *addbaext);
|
||||
void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta,
|
||||
enum ieee80211_agg_stop_reason reason);
|
||||
--- a/net/mac80211/iface.c
|
||||
+++ b/net/mac80211/iface.c
|
||||
@@ -1551,14 +1551,17 @@
|
||||
if (sta) {
|
||||
switch (mgmt->u.action.u.addba_req.action_code) {
|
||||
case WLAN_ACTION_ADDBA_REQ:
|
||||
+ case WLAN_ACTION_NDP_ADDBA_REQ:
|
||||
ieee80211_process_addba_request(local, sta,
|
||||
mgmt, len);
|
||||
break;
|
||||
case WLAN_ACTION_ADDBA_RESP:
|
||||
+ case WLAN_ACTION_NDP_ADDBA_RESP:
|
||||
ieee80211_process_addba_resp(local, sta,
|
||||
mgmt, len);
|
||||
break;
|
||||
case WLAN_ACTION_DELBA:
|
||||
+ case WLAN_ACTION_NDP_DELBA:
|
||||
ieee80211_process_delba(sdata, sta,
|
||||
mgmt, len);
|
||||
break;
|
||||
--- a/net/mac80211/rx.c
|
||||
+++ b/net/mac80211/rx.c
|
||||
@@ -1389,7 +1389,7 @@
|
||||
if (ack_policy == IEEE80211_QOS_CTL_ACK_POLICY_BLOCKACK &&
|
||||
!test_bit(tid, rx->sta->ampdu_mlme.agg_session_valid) &&
|
||||
!test_and_set_bit(tid, rx->sta->ampdu_mlme.unexpected_agg))
|
||||
- ieee80211_send_delba(rx->sdata, rx->sta->sta.addr, tid,
|
||||
+ ieee80211_send_delba(rx->sdata, rx->sta->sta.addr, tid, false,
|
||||
WLAN_BACK_RECIPIENT,
|
||||
WLAN_REASON_QSTA_REQUIRE_SETUP);
|
||||
goto dont_reorder;
|
||||
@@ -3101,7 +3101,7 @@
|
||||
|
||||
if (!test_bit(tid, rx->sta->ampdu_mlme.agg_session_valid) &&
|
||||
!test_and_set_bit(tid, rx->sta->ampdu_mlme.unexpected_agg))
|
||||
- ieee80211_send_delba(rx->sdata, rx->sta->sta.addr, tid,
|
||||
+ ieee80211_send_delba(rx->sdata, rx->sta->sta.addr, tid, false,
|
||||
WLAN_BACK_RECIPIENT,
|
||||
WLAN_REASON_QSTA_REQUIRE_SETUP);
|
||||
|
||||
@@ -3526,16 +3526,19 @@
|
||||
|
||||
switch (mgmt->u.action.u.addba_req.action_code) {
|
||||
case WLAN_ACTION_ADDBA_REQ:
|
||||
+ case WLAN_ACTION_NDP_ADDBA_REQ:
|
||||
if (len < (IEEE80211_MIN_ACTION_SIZE +
|
||||
sizeof(mgmt->u.action.u.addba_req)))
|
||||
goto invalid;
|
||||
break;
|
||||
case WLAN_ACTION_ADDBA_RESP:
|
||||
+ case WLAN_ACTION_NDP_ADDBA_RESP:
|
||||
if (len < (IEEE80211_MIN_ACTION_SIZE +
|
||||
sizeof(mgmt->u.action.u.addba_resp)))
|
||||
goto invalid;
|
||||
break;
|
||||
case WLAN_ACTION_DELBA:
|
||||
+ case WLAN_ACTION_NDP_DELBA:
|
||||
if (len < (IEEE80211_MIN_ACTION_SIZE +
|
||||
sizeof(mgmt->u.action.u.delba)))
|
||||
goto invalid;
|
||||
--- a/net/mac80211/sta_info.h
|
||||
+++ b/net/mac80211/sta_info.h
|
||||
@@ -170,6 +170,7 @@
|
||||
* @failed_bar_ssn: ssn of the last failed BAR tx attempt
|
||||
* @bar_pending: BAR needs to be re-sent
|
||||
* @amsdu: support A-MSDU withing A-MDPU
|
||||
+ * @ndp: this session is using NDP block ACKs
|
||||
*
|
||||
* This structure's lifetime is managed by RCU, assignments to
|
||||
* the array holding it must hold the aggregation mutex.
|
||||
@@ -198,6 +199,7 @@
|
||||
u16 failed_bar_ssn;
|
||||
bool bar_pending;
|
||||
bool amsdu;
|
||||
+ bool ndp;
|
||||
u8 tid;
|
||||
};
|
||||
|
||||
@@ -225,6 +227,7 @@
|
||||
* and ssn.
|
||||
* @removed: this session is removed (but might have been found due to RCU)
|
||||
* @started: this session has started (head ssn or higher was received)
|
||||
+ * @ndp: this session is using NDP block ACKs
|
||||
*
|
||||
* This structure's lifetime is managed by RCU, assignments to
|
||||
* the array holding it must hold the aggregation mutex.
|
||||
@@ -252,7 +255,8 @@
|
||||
u8 tid;
|
||||
u8 auto_seq:1,
|
||||
removed:1,
|
||||
- started:1;
|
||||
+ started:1,
|
||||
+ ndp:1;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -169,8 +169,7 @@
|
||||
compatible = "mediatek,eth-mac";
|
||||
reg = <0>;
|
||||
phy-mode = "sgmii";
|
||||
phy-handle = <&phy30>;
|
||||
phy-handle2 = <&phy1>;
|
||||
phy-handle = <&phy1>; // add phy handler
|
||||
mtd-mac-address = <&factory 0x24>;
|
||||
};
|
||||
|
||||
@@ -182,9 +181,9 @@
|
||||
mtd-mac-address = <&factory 0x2a>;
|
||||
};
|
||||
|
||||
mdio: mdio-bus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
mdio: mdio-bus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
phy0: ethernet-phy@0 {
|
||||
compatible = "ethernet-phy-id03a2.9461";
|
||||
@@ -194,16 +193,6 @@
|
||||
nvmem-cell-names = "phy-cal-data";
|
||||
};
|
||||
|
||||
phy30: ethernet-phy@30 { // AN8801SB
|
||||
compatible = "ethernet-phy-idc0ff.0421";
|
||||
reg = <30>; //0x1e
|
||||
phy-mode = "sgmii";
|
||||
full-duplex;
|
||||
pause;
|
||||
airoha,surge = <1>;
|
||||
airoha,polarity = <2>;
|
||||
};
|
||||
|
||||
phy1: ethernet-phy@1 {
|
||||
compatible = "ethernet-phy-id03a2.9471";
|
||||
reg = <24>; // set phy address to 0x18
|
||||
@@ -211,8 +200,9 @@
|
||||
reset-assert-us = <600>;
|
||||
reset-deassert-us = <20000>;
|
||||
phy-mode = "sgmii";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
&hnat {
|
||||
|
||||
@@ -255,21 +255,18 @@
|
||||
&spi2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&spi2_pins>;
|
||||
address-cells = <1>;
|
||||
size-cells = <0>;
|
||||
status = "okay";
|
||||
|
||||
|
||||
mm6108: mm6108@0 {
|
||||
compatible = "morse,mm610x-spi";
|
||||
reg = <0>;
|
||||
reset-gpios = <&pio 31 0>;
|
||||
power-gpios = <&pio 5 0>,<&pio 0 0>;
|
||||
spi-irq-gpios = <&pio 30 0>;
|
||||
status = "okay";
|
||||
spi-max-frequency = <52000000>;
|
||||
spi-tx-bus-width = <1>;
|
||||
spi-rx-bus-width = <1>;
|
||||
slb9670: slb9670@0 {
|
||||
compatible = "infineon,slb9670";
|
||||
reg = <0>; /* CE0 */
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
spi-cal-enable;
|
||||
spi-cal-mode = "read-data";
|
||||
spi-cal-datalen = <2>;
|
||||
spi-cal-data = /bits/ 8 <0x00 0x1b>;
|
||||
spi-max-frequency = <40000000>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -341,18 +338,6 @@
|
||||
function = "spi";
|
||||
groups = "spi2";
|
||||
};
|
||||
|
||||
conf-pu {
|
||||
pins = "SPI2_CS";
|
||||
drive-strength = <8>;
|
||||
mediatek,pull-up-adv = <3>;
|
||||
};
|
||||
|
||||
conf-pd {
|
||||
pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
|
||||
drive-strength = <8>;
|
||||
mediatek,pull-down-adv = <3>;
|
||||
};
|
||||
};
|
||||
|
||||
uart1_pins: uart1-pins-g1 {
|
||||
|
||||
@@ -1,349 +0,0 @@
|
||||
/dts-v1/;
|
||||
#include "mt7981.dtsi"
|
||||
/ {
|
||||
model = "Emplus WAP588M";
|
||||
compatible = "emplus,wap588m";
|
||||
chosen {
|
||||
bootargs = "console=ttyS0,115200n1 loglevel=8 \
|
||||
earlycon=uart8250,mmio32,0x11002000";
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0 0x40000000 0 0x10000000>;
|
||||
};
|
||||
|
||||
gpio-keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
reset {
|
||||
label = "reset";
|
||||
linux,code = <KEY_RESTART>;
|
||||
gpios = <&pio 1 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
power {
|
||||
label = "power";
|
||||
gpios = <&pio 11 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "timer";
|
||||
default-state = "on";
|
||||
|
||||
};
|
||||
wifi2g {
|
||||
label = "wifi2g";
|
||||
gpios = <&pio 9 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "ra0";
|
||||
};
|
||||
wifi5g {
|
||||
label = "wifi5g";
|
||||
gpios = <&pio 12 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "rax0";
|
||||
};
|
||||
lan {
|
||||
label = "lan";
|
||||
gpios = <&pio 10 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "eth0";
|
||||
};
|
||||
wan {
|
||||
label = "wan";
|
||||
gpios = <&pio 13 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "eth1";
|
||||
};
|
||||
};
|
||||
|
||||
nmbm_spim_nand {
|
||||
compatible = "generic,nmbm";
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
lower-mtd-device = <&spi_nand>;
|
||||
forced-create;
|
||||
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
partition@0 {
|
||||
label = "BL2";
|
||||
reg = <0x00000 0x0100000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@100000 {
|
||||
label = "u-boot-env";
|
||||
reg = <0x0100000 0x0080000>;
|
||||
};
|
||||
|
||||
factory: partition@180000 {
|
||||
label = "Factory";
|
||||
reg = <0x180000 0x0200000>;
|
||||
};
|
||||
|
||||
partition@380000 {
|
||||
label = "FIP";
|
||||
reg = <0x380000 0x0200000>;
|
||||
};
|
||||
|
||||
partition@580000 {
|
||||
label = "ubi"; //110MB
|
||||
reg = <0x580000 0x3700000>;
|
||||
};
|
||||
|
||||
partition@3C80000 {
|
||||
label = "ubi_1"; //110MB
|
||||
reg = <0x3C80000 0x3700000>;
|
||||
};
|
||||
|
||||
partition@7380000 {
|
||||
label = "cert"; //384KB
|
||||
reg = <0x7380000 0x0060000>;
|
||||
};
|
||||
|
||||
partition@73E0000 {
|
||||
label = "userconfig"; //640KB
|
||||
reg = <0x73E0000 0x00a0000>;
|
||||
};
|
||||
|
||||
partition@7480000 {
|
||||
label = "crashdump"; //384KB
|
||||
reg = <0x7480000 0x0060000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
sound_wm8960 {
|
||||
compatible = "mediatek,mt79xx-wm8960-machine";
|
||||
mediatek,platform = <&afe>;
|
||||
audio-routing = "Headphone", "HP_L",
|
||||
"Headphone", "HP_R",
|
||||
"LINPUT1", "AMIC",
|
||||
"RINPUT1", "AMIC";
|
||||
mediatek,audio-codec = <&wm8960>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sound_si3218x {
|
||||
compatible = "mediatek,mt79xx-si3218x-machine";
|
||||
mediatek,platform = <&afe>;
|
||||
mediatek,ext-codec = <&proslic_spi>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
&afe {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pcm_pins>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c_pins>;
|
||||
status = "disabled";
|
||||
|
||||
wm8960: wm8960@1a {
|
||||
compatible = "wlf,wm8960";
|
||||
reg = <0x1a>;
|
||||
};
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&watchdog {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ð {
|
||||
status = "okay";
|
||||
|
||||
gmac0: mac@0 {
|
||||
compatible = "mediatek,eth-mac";
|
||||
reg = <0>;
|
||||
phy-mode = "sgmii";
|
||||
phy-handle = <&phy1>;
|
||||
};
|
||||
|
||||
gmac1: mac@1 {
|
||||
compatible = "mediatek,eth-mac";
|
||||
reg = <1>;
|
||||
phy-mode = "gmii";
|
||||
phy-handle = <&phy0>;
|
||||
};
|
||||
|
||||
mdio: mdio-bus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
// MT7981 internal PHY
|
||||
phy0: ethernet-phy@0 {
|
||||
compatible = "ethernet-phy-id03a2.9461";
|
||||
reg = <0>;
|
||||
phy-mode = "gmii";
|
||||
nvmem-cells = <&phy_calibration>;
|
||||
nvmem-cell-names = "phy-cal-data";
|
||||
};
|
||||
|
||||
|
||||
// RTL8211FS PHY
|
||||
phy1: ethernet-phy@1 {
|
||||
compatible = "ethernet-phy-id001c.c916";
|
||||
reg = <1>;
|
||||
reset-gpios = <&pio 39 GPIO_ACTIVE_LOW>;
|
||||
reset-assert-us = <120000>;
|
||||
reset-deassert-us = <120000>;
|
||||
phy-mode = "sgmii";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&hnat {
|
||||
mtketh-wan = "eth1";
|
||||
mtketh-lan = "eth0";
|
||||
mtketh-max-gmac = <2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&spi0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&spi0_flash_pins>;
|
||||
status = "okay";
|
||||
spi_nand: spi_nand@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "spi-nand";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <52000000>;
|
||||
spi-tx-bus-width = <4>;
|
||||
spi-rx-bus-width = <4>;
|
||||
};
|
||||
};
|
||||
|
||||
&spi1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&spic_pins>;
|
||||
status = "okay";
|
||||
|
||||
proslic_spi: proslic_spi@0 {
|
||||
compatible = "silabs,proslic_spi";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <10000000>;
|
||||
spi-cpha = <1>;
|
||||
spi-cpol = <1>;
|
||||
channel_count = <1>;
|
||||
debug_level = <4>; /* 1 = TRC, 2 = DBG, 4 = ERR */
|
||||
reset_gpio = <&pio 15 0>;
|
||||
ig,enable-spi = <1>; /* 1: Enable, 0: Disable */
|
||||
};
|
||||
};
|
||||
|
||||
&wbsys {
|
||||
mediatek,mtd-eeprom = <&factory 0x0000>;
|
||||
status = "okay";
|
||||
pinctrl-names = "dbdc";
|
||||
pinctrl-0 = <&wf_dbdc_pins>;
|
||||
};
|
||||
|
||||
&pio {
|
||||
|
||||
i2c_pins: i2c-pins-g0 {
|
||||
mux {
|
||||
function = "i2c";
|
||||
groups = "i2c0_0";
|
||||
};
|
||||
};
|
||||
|
||||
pcm_pins: pcm-pins-g0 {
|
||||
mux {
|
||||
function = "pcm";
|
||||
groups = "pcm";
|
||||
};
|
||||
};
|
||||
|
||||
pwm0_pin: pwm0-pin-g0 {
|
||||
mux {
|
||||
function = "pwm";
|
||||
groups = "pwm0_0";
|
||||
};
|
||||
};
|
||||
|
||||
pwm1_pin: pwm1-pin-g0 {
|
||||
mux {
|
||||
function = "pwm";
|
||||
groups = "pwm1_0";
|
||||
};
|
||||
};
|
||||
|
||||
pwm2_pin: pwm2-pin {
|
||||
mux {
|
||||
function = "pwm";
|
||||
groups = "pwm2";
|
||||
};
|
||||
};
|
||||
|
||||
spi0_flash_pins: spi0-pins {
|
||||
mux {
|
||||
function = "spi";
|
||||
groups = "spi0", "spi0_wp_hold";
|
||||
};
|
||||
|
||||
conf-pu {
|
||||
pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP";
|
||||
drive-strength = <MTK_DRIVE_8mA>;
|
||||
bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
|
||||
};
|
||||
|
||||
conf-pd {
|
||||
pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO";
|
||||
drive-strength = <MTK_DRIVE_8mA>;
|
||||
bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
|
||||
};
|
||||
};
|
||||
|
||||
spic_pins: spi1-pins {
|
||||
mux {
|
||||
function = "spi";
|
||||
groups = "spi1_1";
|
||||
};
|
||||
};
|
||||
|
||||
uart1_pins: uart1-pins-g1 {
|
||||
mux {
|
||||
function = "uart";
|
||||
groups = "uart1_1";
|
||||
};
|
||||
};
|
||||
|
||||
uart2_pins: uart2-pins-g1 {
|
||||
mux {
|
||||
function = "uart";
|
||||
groups = "uart2_1";
|
||||
};
|
||||
};
|
||||
wf_dbdc_pins: wf_dbdc-pins {
|
||||
mux {
|
||||
function = "eth";
|
||||
groups = "wf0_mode1";
|
||||
};
|
||||
conf {
|
||||
pins = "WF_HB1", "WF_HB2", "WF_HB3", "WF_HB4",
|
||||
"WF_HB0", "WF_HB0_B", "WF_HB5", "WF_HB6",
|
||||
"WF_HB7", "WF_HB8", "WF_HB9", "WF_HB10",
|
||||
"WF_TOP_CLK", "WF_TOP_DATA", "WF_XO_REQ",
|
||||
"WF_CBA_RESETB", "WF_DIG_RESETB";
|
||||
drive-strength = <MTK_DRIVE_4mA>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&xhci {
|
||||
mediatek,u3p-dis-msk = <0x0>;
|
||||
phys = <&u2port0 PHY_TYPE_USB2>,
|
||||
<&u3port0 PHY_TYPE_USB3>;
|
||||
status = "disabled";
|
||||
};
|
||||
@@ -113,6 +113,7 @@ static const struct AIR_LED_CFG_T led_cfg_dlt[MAX_LED_SIZE] = {
|
||||
/* LED2 */
|
||||
{LED_ENABLE, AIR_LED_GPIO9, AIR_ACTIVE_LOW, AIR_LED2_ON, AIR_LED2_BLK},
|
||||
};
|
||||
|
||||
static const u16 led_blink_cfg_dlt = AIR_LED_BLK_DUR_64M;
|
||||
/* RGMII delay */
|
||||
static const u8 rxdelay_force = FALSE;
|
||||
@@ -139,6 +140,7 @@ static int __air_buckpbus_reg_write(struct phy_device *phydev, u32 addr,
|
||||
err |= mbus->write(mbus, phy_addr, 0x13, (u16)(data >> 16));
|
||||
err |= mbus->write(mbus, phy_addr, 0x14, (u16)(data & 0xffff));
|
||||
err |= mbus->write(mbus, phy_addr, 0x1F, 0);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -165,41 +167,6 @@ static u32 __air_buckpbus_reg_read(struct phy_device *phydev, u32 addr)
|
||||
return data;
|
||||
}
|
||||
|
||||
static u32 __air_buckpbus_reg_modify(struct phy_device *phydev, u32 addr,
|
||||
u32 mask, u32 set)
|
||||
{
|
||||
int err = 0;
|
||||
u32 data_h, data_l, data_old, data_new;
|
||||
int phy_addr = phydev_phy_addr(phydev);
|
||||
struct mii_bus *mbus = phydev_mdiobus(phydev);
|
||||
|
||||
err = mbus->write(mbus, phy_addr, 0x1F, 4);
|
||||
err |= mbus->write(mbus, phy_addr, 0x10, 0);
|
||||
err |= mbus->write(mbus, phy_addr, 0x15, (u16)(addr >> 16));
|
||||
err |= mbus->write(mbus, phy_addr, 0x16, (u16)(addr & 0xffff));
|
||||
data_h = mbus->read(mbus, phy_addr, 0x17);
|
||||
data_l = mbus->read(mbus, phy_addr, 0x18);
|
||||
if (err < 0) {
|
||||
mbus->write(mbus, phy_addr, 0x1F, 0);
|
||||
return INVALID_DATA;
|
||||
}
|
||||
|
||||
data_old = ((data_h & 0xffff) << 16) | (data_l & 0xffff);
|
||||
data_new = (data_old & ~mask) | set;
|
||||
if (data_new == data_old) {
|
||||
mbus->write(mbus, phy_addr, 0x1F, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
err |= mbus->write(mbus, phy_addr, 0x11, (u16)(addr >> 16));
|
||||
err |= mbus->write(mbus, phy_addr, 0x12, (u16)(addr & 0xffff));
|
||||
err |= mbus->write(mbus, phy_addr, 0x13, (u16)(data_new >> 16));
|
||||
err |= mbus->write(mbus, phy_addr, 0x14, (u16)(data_new & 0xffff));
|
||||
err |= mbus->write(mbus, phy_addr, 0x1F, 0);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int air_buckpbus_reg_write(struct phy_device *phydev, u32 addr, u32 data)
|
||||
{
|
||||
int err = 0;
|
||||
@@ -222,18 +189,82 @@ static u32 air_buckpbus_reg_read(struct phy_device *phydev, u32 addr)
|
||||
return data;
|
||||
}
|
||||
|
||||
static int air_buckpbus_reg_modify(struct phy_device *phydev, u32 addr,
|
||||
u32 mask, u32 set)
|
||||
static int __an8801_cl45_write(struct phy_device *phydev, int devad, u16 reg,
|
||||
u16 val)
|
||||
{
|
||||
u32 addr = (AN8801_EPHY_ADDR | AN8801_CL22 | (devad << 18) |
|
||||
(reg << 2));
|
||||
|
||||
return __air_buckpbus_reg_write(phydev, addr, val);
|
||||
}
|
||||
|
||||
static int __an8801_cl45_read(struct phy_device *phydev, int devad, u16 reg)
|
||||
{
|
||||
u32 addr = (AN8801_EPHY_ADDR | AN8801_CL22 | (devad << 18) |
|
||||
(reg << 2));
|
||||
|
||||
return __air_buckpbus_reg_read(phydev, addr);
|
||||
}
|
||||
|
||||
int __an8801_modify_cl45_changed(struct phy_device *phydev, int devad, u32 regnum,
|
||||
u16 mask, u16 set)
|
||||
{
|
||||
int new, ret;
|
||||
|
||||
ret = __an8801_cl45_read(phydev, devad, regnum);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
new = (ret & ~mask) | set;
|
||||
if (new == ret)
|
||||
return 0;
|
||||
|
||||
ret = __an8801_cl45_write(phydev, devad, regnum, new);
|
||||
|
||||
return ret < 0 ? ret : 1;
|
||||
}
|
||||
|
||||
static int an8801_modify_cl45_changed(struct phy_device *phydev, int devad,
|
||||
u32 regnum, u16 mask, u16 set)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
mdiobus_lock(phydev);
|
||||
err = __air_buckpbus_reg_modify(phydev, addr, mask, set);
|
||||
err = __an8801_modify_cl45_changed(phydev, devad, regnum, mask, set);
|
||||
mdiobus_unlock(phydev);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int an8801_cl45_write(struct phy_device *phydev, int devad, u16 reg,
|
||||
u16 val)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
mdiobus_lock(phydev);
|
||||
err = __an8801_cl45_write(phydev, devad, reg, val);
|
||||
mdiobus_unlock(phydev);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int an8801_cl45_read(struct phy_device *phydev, int devad, u16 reg,
|
||||
u16 *read_data)
|
||||
{
|
||||
int data = 0;
|
||||
|
||||
mdiobus_lock(phydev);
|
||||
data = __an8801_cl45_read(phydev, devad, reg);
|
||||
mdiobus_unlock(phydev);
|
||||
|
||||
if (data == INVALID_DATA)
|
||||
return -EINVAL;
|
||||
|
||||
*read_data = data;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int air_sw_reset(struct phy_device *phydev)
|
||||
{
|
||||
u32 reg_value;
|
||||
@@ -267,36 +298,50 @@ static int an8801_led_set_usr_def(struct phy_device *phydev, u8 entity,
|
||||
|
||||
on_evt |= LED_ON_EN;
|
||||
|
||||
err = phy_write_mmd(phydev, 0x1f, LED_ON_CTRL(entity), on_evt);
|
||||
err = an8801_cl45_write(phydev, 0x1f, LED_ON_CTRL(entity), on_evt);
|
||||
if (err)
|
||||
return -1;
|
||||
|
||||
return phy_write_mmd(phydev, 0x1f, LED_BLK_CTRL(entity), blk_evt);
|
||||
return an8801_cl45_write(phydev, 0x1f, LED_BLK_CTRL(entity), blk_evt);
|
||||
}
|
||||
|
||||
static int an8801_led_set_mode(struct phy_device *phydev, u8 mode)
|
||||
{
|
||||
int err;
|
||||
u16 data;
|
||||
|
||||
err = an8801_cl45_read(phydev, 0x1f, LED_BCR, &data);
|
||||
if (err)
|
||||
return -1;
|
||||
|
||||
switch (mode) {
|
||||
case AIR_LED_MODE_DISABLE:
|
||||
return phy_modify_mmd(phydev, 0x1f, LED_BCR,
|
||||
(LED_BCR_EXT_CTRL | LED_BCR_CLK_EN),
|
||||
0x0);
|
||||
data &= ~LED_BCR_EXT_CTRL;
|
||||
data &= ~LED_BCR_MODE_MASK;
|
||||
data |= LED_BCR_MODE_DISABLE;
|
||||
break;
|
||||
case AIR_LED_MODE_USER_DEFINE:
|
||||
return phy_modify_mmd(phydev, 0x1f, LED_BCR,
|
||||
(LED_BCR_EXT_CTRL | LED_BCR_CLK_EN),
|
||||
(LED_BCR_EXT_CTRL | LED_BCR_CLK_EN));
|
||||
default:
|
||||
data |= (LED_BCR_EXT_CTRL | LED_BCR_CLK_EN);
|
||||
break;
|
||||
}
|
||||
dev_err(phydev_dev(phydev),
|
||||
"LED mode %d is not supported\n", mode);
|
||||
return -EINVAL;
|
||||
return an8801_cl45_write(phydev, 0x1f, LED_BCR, data);
|
||||
}
|
||||
|
||||
static int an8801_led_set_state(struct phy_device *phydev, u8 entity, u8 state)
|
||||
{
|
||||
return phy_modify_mmd(phydev, 0x1f, LED_ON_CTRL(entity), LED_ON_EN,
|
||||
(state) ? LED_ON_EN : 0x0);
|
||||
u16 data;
|
||||
int err;
|
||||
|
||||
err = an8801_cl45_read(phydev, 0x1f, LED_ON_CTRL(entity), &data);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (state)
|
||||
data |= LED_ON_EN;
|
||||
else
|
||||
data &= ~LED_ON_EN;
|
||||
|
||||
return an8801_cl45_write(phydev, 0x1f, LED_ON_CTRL(entity), data);
|
||||
}
|
||||
|
||||
static int an8801_led_init(struct phy_device *phydev)
|
||||
@@ -307,12 +352,12 @@ static int an8801_led_init(struct phy_device *phydev)
|
||||
u32 data;
|
||||
u16 led_blink_cfg = priv->led_blink_cfg;
|
||||
|
||||
ret = phy_write_mmd(phydev, 0x1f, LED_BLK_DUR,
|
||||
ret = an8801_cl45_write(phydev, 0x1f, LED_BLK_DUR,
|
||||
LED_BLINK_DURATION(led_blink_cfg));
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = phy_write_mmd(phydev, 0x1f, LED_ON_DUR,
|
||||
ret = an8801_cl45_write(phydev, 0x1f, LED_ON_DUR,
|
||||
(LED_BLINK_DURATION(led_blink_cfg) >> 1));
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
@@ -361,56 +406,6 @@ static int an8801_led_init(struct phy_device *phydev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int an8801_ack_interrupt(struct phy_device *phydev)
|
||||
{
|
||||
u32 reg_val = 0;
|
||||
|
||||
air_buckpbus_reg_write(phydev, 0x10285404, 0x102);
|
||||
reg_val = air_buckpbus_reg_read(phydev, 0x10285400);
|
||||
air_buckpbus_reg_write(phydev, 0x10285400, 0x0);
|
||||
air_buckpbus_reg_write(phydev, 0x10285400, reg_val | 0x10);
|
||||
air_buckpbus_reg_write(phydev, 0x10285404, 0x12);
|
||||
air_buckpbus_reg_write(phydev, 0x10285704, 0x1f);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int an8801_config_intr(struct phy_device *phydev)
|
||||
{
|
||||
if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
|
||||
air_buckpbus_reg_write(phydev, 0x1000007c, BIT(AIR_INTERRUPT_GPIO) << 16);
|
||||
air_buckpbus_reg_modify(phydev, 0x10285700, 0x1, 0x1);
|
||||
} else {
|
||||
air_buckpbus_reg_write(phydev, 0x1000007c, 0x0);
|
||||
air_buckpbus_reg_modify(phydev, 0x10285700, 0x1, 0x0);
|
||||
}
|
||||
an8801_ack_interrupt(phydev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int an8801_did_interrupt(struct phy_device *phydev)
|
||||
{
|
||||
u32 reg_val = 0;
|
||||
|
||||
reg_val = air_buckpbus_reg_read(phydev, 0x10285704);
|
||||
|
||||
if (reg_val & 0x11)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if (KERNEL_VERSION(5, 11, 0) < LINUX_VERSION_CODE)
|
||||
static irqreturn_t an8801_handle_interrupt(struct phy_device *phydev)
|
||||
{
|
||||
if (!an8801_did_interrupt(phydev))
|
||||
return IRQ_NONE;
|
||||
|
||||
an8801_ack_interrupt(phydev);
|
||||
phy_trigger_machine(phydev);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int findClosestNumber(const u16 *arr, u16 size, u16 target)
|
||||
{
|
||||
int left = 0, right = size - 1;
|
||||
@@ -436,77 +431,77 @@ static int findClosestNumber(const u16 *arr, u16 size, u16 target)
|
||||
static int an8801sb_i2mpb_config(struct phy_device *phydev)
|
||||
{
|
||||
int ret = 0;
|
||||
u16 cl45_value = 0, temp_cl45 = 0;
|
||||
u16 cl45_value = 0, temp_cl45 = 0, set = 0;
|
||||
u16 mask = 0;
|
||||
|
||||
cl45_value = phy_read_mmd(phydev, MMD_DEV_VSPEC1, 0x12);
|
||||
ret = an8801_cl45_read(phydev, MMD_DEV_VSPEC1, 0x12, &cl45_value);
|
||||
dev_dbg(phydev_dev(phydev), "%s:%d cl45_value 0x%x!\n", __func__, __LINE__, cl45_value);
|
||||
cl45_value = (cl45_value & GENMASK(15, 10)) + (6 << 10);
|
||||
ret = phy_modify_mmd(phydev, MMD_DEV_VSPEC1, 0x12, GENMASK(15, 10), cl45_value);
|
||||
ret = an8801_modify_cl45_changed(phydev, MMD_DEV_VSPEC1, 0x12, GENMASK(15, 10), cl45_value);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
temp_cl45 = phy_read_mmd(phydev, MMD_DEV_VSPEC1, 0x16);
|
||||
ret = an8801_cl45_read(phydev, MMD_DEV_VSPEC1, 0x16, &temp_cl45);
|
||||
dev_dbg(phydev_dev(phydev), "%s:%d cl45_value 0x%x!\n", __func__, __LINE__, temp_cl45);
|
||||
mask = GENMASK(15, 10) | GENMASK(5, 0);
|
||||
cl45_value = (temp_cl45 & GENMASK(15, 10)) + (9 << 10);
|
||||
cl45_value = ((temp_cl45 & GENMASK(5, 0)) + 6) | cl45_value;
|
||||
ret = phy_modify_mmd(phydev, MMD_DEV_VSPEC1, 0x16, mask, cl45_value);
|
||||
ret = an8801_modify_cl45_changed(phydev, MMD_DEV_VSPEC1, 0x16, mask, cl45_value);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
cl45_value = phy_read_mmd(phydev, MMD_DEV_VSPEC1, 0x17);
|
||||
ret = an8801_cl45_read(phydev, MMD_DEV_VSPEC1, 0x17, &cl45_value);
|
||||
dev_dbg(phydev_dev(phydev), "%s:%d cl45_value 0x%x!\n", __func__, __LINE__, cl45_value);
|
||||
cl45_value = (cl45_value & GENMASK(13, 8)) + (6 << 8);
|
||||
ret = phy_modify_mmd(phydev, MMD_DEV_VSPEC1, 0x17, GENMASK(13, 8), cl45_value);
|
||||
ret = an8801_modify_cl45_changed(phydev, MMD_DEV_VSPEC1, 0x17, GENMASK(13, 8), cl45_value);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
temp_cl45 = phy_read_mmd(phydev, MMD_DEV_VSPEC1, 0x18);
|
||||
ret = an8801_cl45_read(phydev, MMD_DEV_VSPEC1, 0x18, &temp_cl45);
|
||||
dev_dbg(phydev_dev(phydev), "%s:%d cl45_value 0x%x!\n", __func__, __LINE__, temp_cl45);
|
||||
mask = GENMASK(13, 8) | GENMASK(5, 0);
|
||||
cl45_value = (temp_cl45 & GENMASK(13, 8)) + (9 << 8);
|
||||
cl45_value = ((temp_cl45 & GENMASK(5, 0)) + 6) | cl45_value;
|
||||
ret = phy_modify_mmd(phydev, MMD_DEV_VSPEC1, 0x18, mask, cl45_value);
|
||||
ret = an8801_modify_cl45_changed(phydev, MMD_DEV_VSPEC1, 0x18, mask, cl45_value);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
cl45_value = phy_read_mmd(phydev, MMD_DEV_VSPEC1, 0x19);
|
||||
ret = an8801_cl45_read(phydev, MMD_DEV_VSPEC1, 0x19, &cl45_value);
|
||||
dev_dbg(phydev_dev(phydev), "%s:%d cl45_value 0x%x!\n", __func__, __LINE__, cl45_value);
|
||||
cl45_value = (cl45_value & GENMASK(13, 8)) + (6 << 8);
|
||||
ret = phy_modify_mmd(phydev, MMD_DEV_VSPEC1, 0x19, GENMASK(13, 8), cl45_value);
|
||||
ret = an8801_modify_cl45_changed(phydev, MMD_DEV_VSPEC1, 0x19, GENMASK(13, 8), cl45_value);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
cl45_value = phy_read_mmd(phydev, MMD_DEV_VSPEC1, 0x20);
|
||||
ret = an8801_cl45_read(phydev, MMD_DEV_VSPEC1, 0x20, &cl45_value);
|
||||
dev_dbg(phydev_dev(phydev), "%s:%d cl45_value 0x%x!\n", __func__, __LINE__, cl45_value);
|
||||
cl45_value = (cl45_value & GENMASK(5, 0)) + 6;
|
||||
ret = phy_modify_mmd(phydev, MMD_DEV_VSPEC1, 0x20, GENMASK(5, 0), cl45_value);
|
||||
ret = an8801_modify_cl45_changed(phydev, MMD_DEV_VSPEC1, 0x20, GENMASK(5, 0), cl45_value);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
cl45_value = phy_read_mmd(phydev, MMD_DEV_VSPEC1, 0x21);
|
||||
ret = an8801_cl45_read(phydev, MMD_DEV_VSPEC1, 0x21, &cl45_value);
|
||||
dev_dbg(phydev_dev(phydev), "%s:%d cl45_value 0x%x!\n", __func__, __LINE__, cl45_value);
|
||||
cl45_value = (cl45_value & GENMASK(13, 8)) + (6 << 8);
|
||||
ret = phy_modify_mmd(phydev, MMD_DEV_VSPEC1, 0x21, GENMASK(13, 8), cl45_value);
|
||||
ret = an8801_modify_cl45_changed(phydev, MMD_DEV_VSPEC1, 0x21, GENMASK(13, 8), cl45_value);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
cl45_value = phy_read_mmd(phydev, MMD_DEV_VSPEC1, 0x22);
|
||||
ret = an8801_cl45_read(phydev, MMD_DEV_VSPEC1, 0x22, &cl45_value);
|
||||
dev_dbg(phydev_dev(phydev), "%s:%d cl45_value 0x%x!\n", __func__, __LINE__, cl45_value);
|
||||
cl45_value = (cl45_value & GENMASK(5, 0)) + 6;
|
||||
ret = phy_modify_mmd(phydev, MMD_DEV_VSPEC1, 0x22, GENMASK(5, 0), cl45_value);
|
||||
ret = an8801_modify_cl45_changed(phydev, MMD_DEV_VSPEC1, 0x22, GENMASK(5, 0), cl45_value);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
ret = phy_write_mmd(phydev, MMD_DEV_VSPEC1, 0x23, 0x883);
|
||||
ret |= phy_write_mmd(phydev, MMD_DEV_VSPEC1, 0x24, 0x883);
|
||||
ret |= phy_write_mmd(phydev, MMD_DEV_VSPEC1, 0x25, 0x883);
|
||||
ret |= phy_write_mmd(phydev, MMD_DEV_VSPEC1, 0x26, 0x883);
|
||||
ret |= phy_write_mmd(phydev, MMD_DEV_VSPEC1, 0x0, 0x100);
|
||||
ret |= phy_write_mmd(phydev, MMD_DEV_VSPEC1, 0x1, 0x1bc);
|
||||
ret |= phy_write_mmd(phydev, MMD_DEV_VSPEC1, 0x2, 0x1d0);
|
||||
ret |= phy_write_mmd(phydev, MMD_DEV_VSPEC1, 0x3, 0x186);
|
||||
ret |= phy_write_mmd(phydev, MMD_DEV_VSPEC1, 0x4, 0x202);
|
||||
ret |= phy_write_mmd(phydev, MMD_DEV_VSPEC1, 0x5, 0x20e);
|
||||
ret |= phy_write_mmd(phydev, MMD_DEV_VSPEC1, 0x6, 0x300);
|
||||
ret |= phy_write_mmd(phydev, MMD_DEV_VSPEC1, 0x7, 0x3c0);
|
||||
ret |= phy_write_mmd(phydev, MMD_DEV_VSPEC1, 0x8, 0x3d0);
|
||||
ret |= phy_write_mmd(phydev, MMD_DEV_VSPEC1, 0x9, 0x317);
|
||||
ret |= phy_write_mmd(phydev, MMD_DEV_VSPEC1, 0xa, 0x206);
|
||||
ret |= phy_write_mmd(phydev, MMD_DEV_VSPEC1, 0xb, 0xe);
|
||||
ret = an8801_cl45_write(phydev, MMD_DEV_VSPEC1, 0x23, 0x883);
|
||||
ret |= an8801_cl45_write(phydev, MMD_DEV_VSPEC1, 0x24, 0x883);
|
||||
ret |= an8801_cl45_write(phydev, MMD_DEV_VSPEC1, 0x25, 0x883);
|
||||
ret |= an8801_cl45_write(phydev, MMD_DEV_VSPEC1, 0x26, 0x883);
|
||||
ret |= an8801_cl45_write(phydev, MMD_DEV_VSPEC1, 0x0, 0x100);
|
||||
ret |= an8801_cl45_write(phydev, MMD_DEV_VSPEC1, 0x1, 0x1bc);
|
||||
ret |= an8801_cl45_write(phydev, MMD_DEV_VSPEC1, 0x2, 0x1d0);
|
||||
ret |= an8801_cl45_write(phydev, MMD_DEV_VSPEC1, 0x3, 0x186);
|
||||
ret |= an8801_cl45_write(phydev, MMD_DEV_VSPEC1, 0x4, 0x202);
|
||||
ret |= an8801_cl45_write(phydev, MMD_DEV_VSPEC1, 0x5, 0x20e);
|
||||
ret |= an8801_cl45_write(phydev, MMD_DEV_VSPEC1, 0x6, 0x300);
|
||||
ret |= an8801_cl45_write(phydev, MMD_DEV_VSPEC1, 0x7, 0x3c0);
|
||||
ret |= an8801_cl45_write(phydev, MMD_DEV_VSPEC1, 0x8, 0x3d0);
|
||||
ret |= an8801_cl45_write(phydev, MMD_DEV_VSPEC1, 0x9, 0x317);
|
||||
ret |= an8801_cl45_write(phydev, MMD_DEV_VSPEC1, 0xa, 0x206);
|
||||
ret |= an8801_cl45_write(phydev, MMD_DEV_VSPEC1, 0xb, 0xe);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
@@ -515,14 +510,14 @@ static int an8801sb_i2mpb_config(struct phy_device *phydev)
|
||||
}
|
||||
|
||||
void update_r50_value(struct phy_device *phydev,
|
||||
u16 *cl45_value, int pos1, int pos2)
|
||||
u16 *cl45_value, int pos1, int pos2)
|
||||
{
|
||||
*cl45_value &= ~(0x007f << 8);
|
||||
*cl45_value |= ((r50ohm_table[pos1]) & 0x007f) << 8;
|
||||
*cl45_value &= ~(0x007f);
|
||||
*cl45_value |= (r50ohm_table[pos2]) & 0x007f;
|
||||
dev_dbg(phydev_dev(phydev), "Read: r50ohm_tx_1=%d r50ohm_tx_2=%d\n",
|
||||
r50ohm_table[pos1], r50ohm_table[pos2]);
|
||||
r50ohm_table[pos1], r50ohm_table[pos2]);
|
||||
}
|
||||
|
||||
int calculate_position(int pos, int shift, int table_size)
|
||||
@@ -534,7 +529,7 @@ int calculate_position(int pos, int shift, int table_size)
|
||||
}
|
||||
|
||||
int process_r50(struct phy_device *phydev, int reg,
|
||||
u16 *cl45_value, u16 *r50ohm_tx_a, u16 *r50ohm_tx_b)
|
||||
u16 *cl45_value, u16 *r50ohm_tx_a, u16 *r50ohm_tx_b)
|
||||
{
|
||||
int pos1 = findClosestNumber(r50ohm_table, r50ohm_table_size, *r50ohm_tx_a);
|
||||
int pos2 = findClosestNumber(r50ohm_table, r50ohm_table_size, *r50ohm_tx_b);
|
||||
@@ -544,7 +539,7 @@ int process_r50(struct phy_device *phydev, int reg,
|
||||
pos2 = calculate_position(pos2, R50_SHIFT, r50ohm_table_size);
|
||||
|
||||
update_r50_value(phydev, cl45_value, pos1, pos2);
|
||||
return phy_write_mmd(phydev, 0x1e, reg, *cl45_value);
|
||||
return an8801_cl45_write(phydev, 0x1e, reg, *cl45_value);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -563,10 +558,10 @@ static int an8801r_of_init(struct phy_device *phydev)
|
||||
return -1;
|
||||
}
|
||||
if (val < AIR_RGMII_DELAY_NOSTEP ||
|
||||
val > AIR_RGMII_DELAY_STEP_7) {
|
||||
val > AIR_RGMII_DELAY_STEP_7) {
|
||||
dev_err(phydev_dev(phydev),
|
||||
"airoha,rxclk-delay value %u out of range.",
|
||||
val);
|
||||
"airoha,rxclk-delay value %u out of range.",
|
||||
val);
|
||||
return -1;
|
||||
}
|
||||
priv->rxdelay_force = TRUE;
|
||||
@@ -579,14 +574,14 @@ static int an8801r_of_init(struct phy_device *phydev)
|
||||
if (of_property_read_u32(of_node, "airoha,txclk-delay",
|
||||
&val) != 0) {
|
||||
dev_err(phydev_dev(phydev),
|
||||
"airoha,txclk-delay value is invalid.");
|
||||
"airoha,txclk-delay value is invalid.");
|
||||
return -1;
|
||||
}
|
||||
if (val < AIR_RGMII_DELAY_NOSTEP ||
|
||||
val > AIR_RGMII_DELAY_STEP_7) {
|
||||
val > AIR_RGMII_DELAY_STEP_7) {
|
||||
dev_err(phydev_dev(phydev),
|
||||
"airoha,txclk-delay value %u out of range.",
|
||||
val);
|
||||
"airoha,txclk-delay value %u out of range.",
|
||||
val);
|
||||
return -1;
|
||||
}
|
||||
priv->txdelay_force = TRUE;
|
||||
@@ -608,10 +603,10 @@ static int an8801sb_of_init(struct phy_device *phydev)
|
||||
return -1;
|
||||
}
|
||||
if (val < AIR_POL_TX_NOR_RX_REV ||
|
||||
val > AIR_POL_TX_REV_RX_NOR) {
|
||||
val > AIR_POL_TX_REV_RX_NOR) {
|
||||
dev_err(phydev_dev(phydev),
|
||||
"airoha,polarity value %u out of range.",
|
||||
val);
|
||||
"airoha,polarity value %u out of range.",
|
||||
val);
|
||||
return -1;
|
||||
}
|
||||
priv->pol = val;
|
||||
@@ -620,15 +615,15 @@ static int an8801sb_of_init(struct phy_device *phydev)
|
||||
|
||||
if (of_find_property(of_node, "airoha,surge", NULL)) {
|
||||
if (of_property_read_u32(of_node, "airoha,surge",
|
||||
&val) != 0) {
|
||||
&val) != 0) {
|
||||
dev_err(phydev_dev(phydev), "airoha,surge value is invalid.");
|
||||
return -1;
|
||||
}
|
||||
if (val < AIR_SURGE_0R ||
|
||||
val > AIR_SURGE_5R) {
|
||||
dev_err(phydev_dev(phydev),
|
||||
"airoha,surge value %u out of range.",
|
||||
val);
|
||||
"airoha,surge value %u out of range.",
|
||||
val);
|
||||
return -1;
|
||||
}
|
||||
priv->surge = val;
|
||||
@@ -698,19 +693,23 @@ int an8801sb_surge_protect_cfg(struct phy_device *phydev)
|
||||
u16 cl45_value = 0;
|
||||
|
||||
if (priv->surge) {
|
||||
cl45_value = phy_read_mmd(phydev, 0x1e, 0x174);
|
||||
ret = an8801_cl45_read(phydev, 0x1e, 0x174, &cl45_value);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
r50ohm_tx_a = (cl45_value >> 8) & 0x007f;
|
||||
r50ohm_tx_b = cl45_value & 0x007f;
|
||||
dev_dbg(phydev_dev(phydev), "Read: (0x174) value=0x%04x r50ohm_tx_a=%d r50ohm_tx_b=%d\n",
|
||||
cl45_value, r50ohm_tx_a, r50ohm_tx_b);
|
||||
cl45_value, r50ohm_tx_a, r50ohm_tx_b);
|
||||
ret = process_r50(phydev, 0x174, &cl45_value, &r50ohm_tx_a, &r50ohm_tx_b);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
cl45_value = phy_read_mmd(phydev, 0x1e, 0x175);
|
||||
ret = an8801_cl45_read(phydev, 0x1e, 0x175, &cl45_value);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
r50ohm_tx_c = (cl45_value >> 8) & 0x007f;
|
||||
r50ohm_tx_d = cl45_value & 0x007f;
|
||||
dev_dbg(phydev_dev(phydev), "Read: (0x175) value=0x%04x r50ohm_tx_c=%d r50ohm_tx_d=%d\n",
|
||||
cl45_value, r50ohm_tx_c, r50ohm_tx_d);
|
||||
cl45_value, r50ohm_tx_c, r50ohm_tx_d);
|
||||
ret = process_r50(phydev, 0x175, &cl45_value, &r50ohm_tx_c, &r50ohm_tx_d);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
@@ -765,10 +764,10 @@ static int an8801sb_config_init(struct phy_device *phydev)
|
||||
dev_info(phydev_dev(phydev),
|
||||
"Tx, Rx Polarity : %08x\n", pbus_value);
|
||||
|
||||
ret = phy_write_mmd(phydev, MMD_DEV_VSPEC2, 0x600, 0x1e);
|
||||
ret |= phy_write_mmd(phydev, MMD_DEV_VSPEC2, 0x601, 0x02);
|
||||
ret = an8801_cl45_write(phydev, MMD_DEV_VSPEC2, 0x600, 0x1e);
|
||||
ret |= an8801_cl45_write(phydev, MMD_DEV_VSPEC2, 0x601, 0x02);
|
||||
|
||||
ret |= phy_write_mmd(phydev, 7, 60, 0x0);
|
||||
ret |= an8801_cl45_write(phydev, 7, 60, 0x0);
|
||||
if (ret != 0) {
|
||||
dev_err(phydev_dev(phydev),
|
||||
"AN8801SB initialize fail, ret %d !\n", ret);
|
||||
@@ -941,7 +940,7 @@ static ssize_t an8801_polarity_write(struct file *file, const char __user *ptr,
|
||||
}
|
||||
|
||||
static ssize_t an8801_mdio_write(struct file *file, const char __user *ptr,
|
||||
size_t len, loff_t *off)
|
||||
size_t len, loff_t *off)
|
||||
{
|
||||
struct phy_device *phydev = file->private_data;
|
||||
char buf[64], param1[32], param2[32];
|
||||
@@ -956,7 +955,7 @@ static ssize_t an8801_mdio_write(struct file *file, const char __user *ptr,
|
||||
if (count > sizeof(buf) - 1)
|
||||
return -EINVAL;
|
||||
if (copy_from_user(buf, ptr, len))
|
||||
return -EFAULT;
|
||||
return -EFAULT;
|
||||
|
||||
ret = sscanf(buf, "%s %s", param1, param2);
|
||||
if (ret < 0)
|
||||
@@ -992,16 +991,16 @@ static ssize_t an8801_mdio_write(struct file *file, const char __user *ptr,
|
||||
pr_notice("\nphy=0x%x, devad=0x%x, reg=0x%x, val=0x%x\n",
|
||||
phydev_phy_addr(phydev), devad, reg, val);
|
||||
|
||||
ret = phy_write_mmd(phydev, devad, reg, val);
|
||||
ret = an8801_cl45_write(phydev, devad, reg, val);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
reg_val = phy_read_mmd(phydev, devad, reg);
|
||||
an8801_cl45_read(phydev, devad, reg, ®_val);
|
||||
pr_notice("\nphy=0x%x, devad=0x%x, reg=0x%x, val=0x%x confirm..\n",
|
||||
phydev_phy_addr(phydev), devad, reg, reg_val);
|
||||
} else if (!strncmp("r", param2, strlen("r"))) {
|
||||
if (sscanf(buf, "cl45 r %x %x", &devad, ®) == -1)
|
||||
return -EFAULT;
|
||||
reg_val = phy_read_mmd(phydev, devad, reg);
|
||||
an8801_cl45_read(phydev, devad, reg, ®_val);
|
||||
pr_notice("\nphy=0x%x, devad=0x%x, reg=0x%x, val=0x%x\n",
|
||||
phydev_phy_addr(phydev), devad, reg, reg_val);
|
||||
} else {
|
||||
@@ -1021,6 +1020,7 @@ static int an8801_counter_show(struct seq_file *seq, void *v)
|
||||
struct phy_device *phydev = seq->private;
|
||||
int ret = 0;
|
||||
u32 pkt_cnt = 0;
|
||||
struct mii_bus *mbus = phydev_mdiobus(phydev);
|
||||
|
||||
seq_puts(seq, "==========AIR PHY COUNTER==========\n");
|
||||
seq_puts(seq, "|\t<<SERDES COUNTER>>\n");
|
||||
@@ -1143,9 +1143,8 @@ static ssize_t an8801_debugfs_pbus(struct file *file,
|
||||
if (buf[0] == 'w') {
|
||||
if (sscanf(buf, "w %x %x", ®, &val) == -1)
|
||||
return -EFAULT;
|
||||
|
||||
pr_notice("\nphy=0x%x, reg=0x%x, val=0x%x\n",
|
||||
phydev_phy_addr(phydev), reg, val);
|
||||
phydev_phy_addr(phydev), reg, val);
|
||||
|
||||
ret = air_buckpbus_reg_write(phydev, reg, val);
|
||||
if (ret < 0)
|
||||
@@ -1189,9 +1188,10 @@ int an8801_info_show(struct seq_file *seq, void *v)
|
||||
for (reg = MII_BMCR; reg <= MII_STAT1000; reg++) {
|
||||
if ((reg <= MII_LPA) || (reg >= MII_CTRL1000))
|
||||
seq_printf(seq, "| RG_MII 0x%02x : 0x%08x\n",
|
||||
reg, phy_read(phydev, reg));
|
||||
reg, phy_read(phydev, reg));
|
||||
}
|
||||
seq_puts(seq, "\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1231,10 +1231,10 @@ static const struct file_operations an8801_polarity_fops = {
|
||||
};
|
||||
|
||||
static const struct file_operations an8801_mdio_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = simple_open,
|
||||
.write = an8801_mdio_write,
|
||||
.llseek = noop_llseek,
|
||||
.owner = THIS_MODULE,
|
||||
.open = simple_open,
|
||||
.write = an8801_mdio_write,
|
||||
.llseek = noop_llseek,
|
||||
};
|
||||
|
||||
int an8801_debugfs_init(struct phy_device *phydev)
|
||||
@@ -1354,22 +1354,13 @@ static int an8801sb_read_status(struct phy_device *phydev)
|
||||
if (phydev->link == LINK_DOWN) {
|
||||
prespeed = 0;
|
||||
phydev->speed = 0;
|
||||
ret |= phy_write_mmd(
|
||||
ret |= an8801_cl45_write(
|
||||
phydev, MMD_DEV_VSPEC2, PHY_PRE_SPEED_REG, prespeed);
|
||||
|
||||
mdelay(10); /* delay 10 ms */
|
||||
reg_value = air_buckpbus_reg_read(phydev, 0x10220010);
|
||||
reg_value &= 0x7fff;
|
||||
air_buckpbus_reg_write(phydev, 0x10220010, reg_value);
|
||||
|
||||
reg_value = air_buckpbus_reg_read(phydev, 0x10220000);
|
||||
reg_value |= AN8801SB_SGMII_AN0_ANRESTART;
|
||||
air_buckpbus_reg_write(phydev, 0x10220000, reg_value);
|
||||
}
|
||||
|
||||
if (prespeed != phydev->speed && phydev->link == LINK_UP) {
|
||||
prespeed = phydev->speed;
|
||||
ret |= phy_write_mmd(
|
||||
ret |= an8801_cl45_write(
|
||||
phydev, MMD_DEV_VSPEC2, PHY_PRE_SPEED_REG, prespeed);
|
||||
dev_info(phydev_dev(phydev), "AN8801SB SPEED %d\n", prespeed);
|
||||
while (an_retry > 0) {
|
||||
@@ -1383,19 +1374,28 @@ static int an8801sb_read_status(struct phy_device *phydev)
|
||||
mdelay(10); /* delay 10 ms */
|
||||
|
||||
|
||||
if (prespeed == SPEED_1000) {
|
||||
air_buckpbus_reg_write(
|
||||
phydev, 0x10220010, 0xd801);
|
||||
} else if (prespeed == SPEED_100) {
|
||||
air_buckpbus_reg_write(
|
||||
phydev, 0x10220010, 0xd401);
|
||||
} else {
|
||||
air_buckpbus_reg_write(
|
||||
phydev, 0x10220010, 0xd001);
|
||||
}
|
||||
if (phydev->autoneg == AUTONEG_DISABLE) {
|
||||
dev_info(phydev_dev(phydev),
|
||||
"AN8801SB force speed = %d\n", prespeed);
|
||||
if (prespeed == SPEED_1000) {
|
||||
air_buckpbus_reg_write(
|
||||
phydev, 0x10220010, 0xd801);
|
||||
} else if (prespeed == SPEED_100) {
|
||||
air_buckpbus_reg_write(
|
||||
phydev, 0x10220010, 0xd401);
|
||||
} else {
|
||||
air_buckpbus_reg_write(
|
||||
phydev, 0x10220010, 0xd001);
|
||||
}
|
||||
|
||||
reg_value = air_buckpbus_reg_read(
|
||||
phydev, 0x10220000);
|
||||
reg_value |= AN8801SB_SGMII_AN0_ANRESTART;
|
||||
air_buckpbus_reg_write(
|
||||
phydev, 0x10220000, reg_value);
|
||||
}
|
||||
reg_value = air_buckpbus_reg_read(phydev, 0x10220000);
|
||||
reg_value |= (AN8801SB_SGMII_AN0_RESET | AN8801SB_SGMII_AN0_ANRESTART);
|
||||
reg_value |= AN8801SB_SGMII_AN0_RESET;
|
||||
air_buckpbus_reg_write(phydev, 0x10220000, reg_value);
|
||||
}
|
||||
return ret;
|
||||
@@ -1451,12 +1451,9 @@ static struct phy_driver airoha_driver[] = {
|
||||
.probe = an8801_phy_probe,
|
||||
.remove = an8801_phy_remove,
|
||||
.read_status = an8801_read_status,
|
||||
.config_intr = an8801_config_intr,
|
||||
#if (KERNEL_VERSION(5, 11, 0) < LINUX_VERSION_CODE)
|
||||
.handle_interrupt = an8801_handle_interrupt,
|
||||
#else
|
||||
.did_interrupt = an8801_did_interrupt,
|
||||
.ack_interrupt = an8801_ack_interrupt,
|
||||
#if (KERNEL_VERSION(4, 5, 0) < LINUX_VERSION_CODE)
|
||||
.read_mmd = __an8801_cl45_read,
|
||||
.write_mmd = __an8801_cl45_write,
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
@@ -12,10 +12,10 @@
|
||||
|
||||
/* NAMING DECLARATIONS
|
||||
*/
|
||||
#define AN8801_DRIVER_VERSION "1.1.6"
|
||||
#define AN8801_DRIVER_VERSION "1.1.4"
|
||||
|
||||
#define DEBUGFS_COUNTER "counter"
|
||||
#define DEBUGFS_INFO "driver_info"
|
||||
#define DEBUGFS_INFO "driver_info"
|
||||
#define DEBUGFS_PBUS_OP "pbus_op"
|
||||
#define DEBUGFS_POLARITY "polarity"
|
||||
#define DEBUGFS_MDIO "mdio"
|
||||
@@ -88,7 +88,7 @@
|
||||
#define LED_BLK_EVT_1000M_RX BIT(1)
|
||||
#define LED_BLK_EVT_1000M_TX BIT(0)
|
||||
|
||||
#define UNIT_LED_BLINK_DURATION 780
|
||||
#define UNIT_LED_BLINK_DURATION 1024
|
||||
|
||||
/* Serdes auto negotation restart */
|
||||
#define AN8801SB_SGMII_AN0_ANRESTART (0x0200)
|
||||
@@ -135,9 +135,6 @@ For reference only
|
||||
#define LED_BLINK_DURATION(f) (UNIT_LED_BLINK_DURATION << (f))
|
||||
#define LED_GPIO_SEL(led, gpio) ((led) << ((gpio) * 3))
|
||||
|
||||
/* Interrupt GPIO number, should not conflict with LED */
|
||||
#define AIR_INTERRUPT_GPIO 3
|
||||
|
||||
/* DATA TYPE DECLARATIONS
|
||||
*/
|
||||
enum AIR_LED_GPIO_PIN_T {
|
||||
|
||||
@@ -587,7 +587,7 @@ static int en8801s_phase1_init(struct phy_device *phydev)
|
||||
|
||||
phydev->dev_flags = PHY_STATE_INIT;
|
||||
|
||||
dev_info(dev, "Phase1 initialize OK ! (%s) 10Te TP_IDL fixed.\n", EN8801S_DRIVER_VERSION);
|
||||
dev_info(dev, "Phase1 initialize OK ! (%s)\n", EN8801S_DRIVER_VERSION);
|
||||
if (priv->pro_version == 4) {
|
||||
ret = en8801s_phase2_init(phydev);
|
||||
if (ret != 0) {
|
||||
@@ -811,7 +811,14 @@ static int en8801s_phase2_init(struct phy_device *phydev)
|
||||
retry--;
|
||||
}
|
||||
pbus_data = airoha_pbus_read(mbus, pbus_addr, 0x1C38); /* RAW#2 */
|
||||
ret = airoha_cl45_write(mbus, phy_addr, 0x1E, 0x12, 0xA018);
|
||||
ret = airoha_cl45_read(mbus, phy_addr, 0x1E, 0x12, &cl45_value);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
GPHY_RG_1E_012.DATA = cl45_value;
|
||||
GPHY_RG_1E_012.DataBitField.da_tx_i2mpb_a_tbt =
|
||||
(u16)(pbus_data & 0x03f);
|
||||
ret = airoha_cl45_write(mbus, phy_addr, 0x1E, 0x12,
|
||||
GPHY_RG_1E_012.DATA);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
ret = airoha_cl45_read(mbus, phy_addr, 0x1E, 0x17, &cl45_value);
|
||||
@@ -886,17 +893,6 @@ static int en8801s_phase2_init(struct phy_device *phydev)
|
||||
}
|
||||
}
|
||||
|
||||
//Fix 10Te TP_IDL
|
||||
ret = airoha_cl45_read(mbus, phy_addr, 0x1E,
|
||||
0x1A3, &cl45_value);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
cl45_value &= ~0xf0;
|
||||
ret = airoha_cl45_write(mbus, phy_addr, 0x1E,
|
||||
0x1A3, cl45_value);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
priv->first_init = false;
|
||||
dev_info(phydev_dev(phydev), "Phase2 initialize OK !\n");
|
||||
return 0;
|
||||
|
||||
@@ -307,28 +307,3 @@ define Device/senao_jeap6500
|
||||
endef
|
||||
TARGET_DEVICES += senao_jeap6500
|
||||
DEFAULT_DEVICE_VARS += FIT_KEY_DIR FIT_KEY_NAME
|
||||
|
||||
define Device/emplus_wap588m
|
||||
DEVICE_VENDOR := EMPLUS
|
||||
DEVICE_MODEL := WAP588M
|
||||
DEVICE_DTS := mt7981-emplus-wap588m
|
||||
DEVICE_DTS_DIR := $(DTS_DIR)/mediatek
|
||||
SUPPORTED_DEVICES := emplus,wap588m
|
||||
DEVICE_PACKAGES := kmod-mt7981-firmware kmod-mt7915e uboot-envtools -procd-ujail
|
||||
UBINIZE_OPTS := -E 5
|
||||
BLOCKSIZE := 128k
|
||||
PAGESIZE := 2048
|
||||
IMAGE_SIZE := 65536k
|
||||
KERNEL_IN_UBI := 1
|
||||
FIT_KEY_DIR := $(DTS_DIR)/mediatek/keys/emplus_wap588m
|
||||
FIT_KEY_NAME := fit_key
|
||||
IMAGES += factory.bin
|
||||
IMAGE/factory.bin := append-ubi | check-size $$$$(IMAGE_SIZE)
|
||||
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
|
||||
KERNEL = kernel-bin | lzma | \
|
||||
fit-sign lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb
|
||||
KERNEL_INITRAMFS = kernel-bin | lzma | \
|
||||
fit-sign lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd
|
||||
endef
|
||||
TARGET_DEVICES += emplus_wap588m
|
||||
DEFAULT_DEVICE_VARS += FIT_KEY_DIR FIT_KEY_NAME
|
||||
|
||||
@@ -31,10 +31,7 @@ mediatek_setup_interfaces()
|
||||
;;
|
||||
sonicfi,rap630w-211g)
|
||||
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" eth1
|
||||
;;
|
||||
emplus,wap588m)
|
||||
ucidef_set_interfaces_lan_wan "eth0" "eth1"
|
||||
;;
|
||||
;;
|
||||
*)
|
||||
ucidef_set_interfaces_lan_wan "eth1" "eth0"
|
||||
;;
|
||||
|
||||
@@ -18,7 +18,6 @@ case "$board" in
|
||||
edgecore,eap111|\
|
||||
edgecore,eap112|\
|
||||
senao,iap2300m|\
|
||||
emplus,wap588m|\
|
||||
senao,jeap6500)
|
||||
ubootenv_add_uci_config "/dev/mtd2" "0x0" "0x20000" "0x20000"
|
||||
;;
|
||||
|
||||
@@ -2,13 +2,13 @@ REQUIRE_IMAGE_METADATA=1
|
||||
|
||||
senao_swap_active_fw() {
|
||||
echo "Doing swap active_fw" > /dev/console
|
||||
tmp_active_fw=$(fw_printenv | grep active_fw | awk -F= {'print $2'})
|
||||
tmp_active_fw=$(fw_printenv -n active_fw)
|
||||
if [ $tmp_active_fw == "0" ]; then
|
||||
fw_setenv active_fw 1
|
||||
fw_setenv mtdparts nmbm0:1024k\(bl2\),512k\(u-boot-env\),2048k\(factory\),2048k\(fip\),56320k\(ubi_1\),56320k\(ubi\),384k\(cert\),640k\(userconfig\),384k\(crashdump\)
|
||||
fw_setenv mtdparts nmbm0:1024k\(bl2\),512k\(u-boot-env\),2048k\(factory\),2048k\(fip\),112640k\(ubi_1\),112640k\(ubi\),384k\(cert\),640k\(userconfig\),384k\(crashdump\)
|
||||
else
|
||||
fw_setenv active_fw 0
|
||||
fw_setenv mtdparts nmbm0:1024k\(bl2\),512k\(u-boot-env\),2048k\(factory\),2048k\(fip\),56320k\(ubi\),56320k\(ubi_1\),384k\(cert\),640k\(userconfig\),384k\(crashdump\)
|
||||
fw_setenv mtdparts nmbm0:1024k\(bl2\),512k\(u-boot-env\),2048k\(factory\),2048k\(fip\),112640k\(ubi\),112640k\(ubi_1\),384k\(cert\),640k\(userconfig\),384k\(crashdump\)
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -47,7 +47,6 @@ platform_do_upgrade() {
|
||||
nand_do_upgrade "$1"
|
||||
;;
|
||||
senao,iap2300m|\
|
||||
emplus,wap588m|\
|
||||
senao,jeap6500)
|
||||
CI_UBIPART="ubi_1"
|
||||
nand_do_upgrade "$1"
|
||||
@@ -69,7 +68,6 @@ platform_check_image() {
|
||||
edgecore,eap111|\
|
||||
edgecore,eap112|\
|
||||
senao,iap2300m|\
|
||||
emplus,wap588m|\
|
||||
senao,jeap6500)
|
||||
nand_do_platform_check "$board" "$1"
|
||||
return $?
|
||||
|
||||
@@ -2,6 +2,7 @@ CONFIG_64BIT=y
|
||||
CONFIG_AHCI_MTK=y
|
||||
CONFIG_AIROHA_EN8801SC_PHY=y
|
||||
# CONFIG_AIROHA_EN8811H_PHY is not set
|
||||
# CONFIG_AIROHA_AN8801_PHY is not set
|
||||
CONFIG_AN8855_GSW=y
|
||||
CONFIG_ARCH_CLOCKSOURCE_DATA=y
|
||||
CONFIG_ARCH_DMA_ADDR_T_64BIT=y
|
||||
|
||||
@@ -1,3 +1,15 @@
|
||||
From 535fdc6dfce7def996a5188819ffc96231c36f98 Mon Sep 17 00:00:00 2001
|
||||
From: Bo-Cun Chen <bc-bocun.chen@mediatek.com>
|
||||
Date: Tue, 2 Jan 2024 18:13:43 +0800
|
||||
Subject: [PATCH] [networking][999-2738-an8801sb-gphy-support.patch]
|
||||
|
||||
---
|
||||
drivers/net/phy/Kconfig | 5 +
|
||||
drivers/net/phy/Makefile | 1 +
|
||||
2 files changed, 6 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
|
||||
index ccd3f3f..5dbfb17 100644
|
||||
--- a/drivers/net/phy/Kconfig
|
||||
+++ b/drivers/net/phy/Kconfig
|
||||
@@ -345,6 +345,11 @@ config SFP
|
||||
@@ -12,6 +24,8 @@
|
||||
config AIROHA_EN8801SC_PHY
|
||||
tristate "Drivers for Airoha EN8801S Gigabit PHYs for MediaTek SoC."
|
||||
---help---
|
||||
diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile
|
||||
index 1e8d67b..d39e54b 100644
|
||||
--- a/drivers/net/phy/Makefile
|
||||
+++ b/drivers/net/phy/Makefile
|
||||
@@ -74,6 +74,7 @@ endif
|
||||
@@ -22,64 +36,6 @@
|
||||
obj-$(CONFIG_AIROHA_EN8801SC_PHY) += en8801sc.o
|
||||
air_en8811h-y := air_en8811h_main.o air_en8811h_api.o
|
||||
obj-$(CONFIG_AIROHA_EN8811H_PHY) += air_en8811h.o
|
||||
--- a/drivers/net/phy/phylink.c
|
||||
+++ b/drivers/net/phy/phylink.c
|
||||
@@ -870,12 +870,17 @@
|
||||
of_node_put(phy_node);
|
||||
|
||||
if (!phy_dev)
|
||||
- return -ENODEV;
|
||||
-
|
||||
+ {
|
||||
+ phylink_info(pl, "[phylink] reload phy-handle2. %s %d\n",__func__, __LINE__);
|
||||
+ phy_node = of_parse_phandle(dn, "phy-handle2", 0);
|
||||
+ phy_dev = of_phy_attach(pl->netdev, phy_node, flags, pl->link_interface);
|
||||
+ if (!phy_dev)
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
ret = phylink_bringup_phy(pl, phy_dev, pl->link_config.interface);
|
||||
if (ret)
|
||||
phy_detach(phy_dev);
|
||||
-
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(phylink_of_phy_connect);
|
||||
--- a/drivers/of/of_mdio.c
|
||||
+++ b/drivers/of/of_mdio.c
|
||||
@@ -226,7 +226,9 @@
|
||||
return rc;
|
||||
|
||||
/* Loop over the child nodes and register a phy_device for each phy */
|
||||
+ int an8801=0;
|
||||
for_each_available_child_of_node(np, child) {
|
||||
+ if(an8801==1)break;
|
||||
addr = of_mdio_parse_addr(&mdio->dev, child);
|
||||
if (addr < 0) {
|
||||
scanphys = true;
|
||||
@@ -234,7 +236,25 @@
|
||||
}
|
||||
|
||||
if (of_mdiobus_child_is_phy(child))
|
||||
+ {
|
||||
+ if(addr==30)
|
||||
+ {
|
||||
+ int phy_id ;
|
||||
+
|
||||
+ phy_id = mdiobus_read(mdio, addr, MII_PHYSID1) << 16 ;
|
||||
+ phy_id = phy_id + mdiobus_read(mdio, addr, MII_PHYSID2);
|
||||
+ dev_info(&mdio->dev, "[of_mdio] %s %d addr:%d phy_id:0x%x \n",__func__, __LINE__, addr, phy_id);
|
||||
+
|
||||
+ if (phy_id==0 || phy_id==0x1a750000)
|
||||
+ {
|
||||
+ dev_info(&mdio->dev, "[of_mdio] %s %d continue \n",__func__, __LINE__);
|
||||
+ continue;
|
||||
+ }
|
||||
+ else
|
||||
+ an8801=1;
|
||||
+ }
|
||||
rc = of_mdiobus_register_phy(mdio, child, addr);
|
||||
+ }
|
||||
else
|
||||
rc = of_mdiobus_register_device(mdio, child, addr);
|
||||
|
||||
--
|
||||
2.18.0
|
||||
|
||||
|
||||
@@ -1,125 +0,0 @@
|
||||
MORSE MICRO
|
||||
BINARY DISTRIBUTION LICENSE AGREEMENT
|
||||
|
||||
1. Parties.
|
||||
This Software License Agreement (SLA) is between Morse Micro Pty. Ltd. and the
|
||||
user of the Software set forth (“you”, “user”, “customer”), and is effective as
|
||||
of the date of first access or download of the software by you. Morse Micro is
|
||||
licensing this software to you free of charge upon the condition that you
|
||||
accept all the terms of this SLA and only use this Software in conjunction with
|
||||
Morse Micro products. ANY USE, REPRODUCTION, OR DISTRIBUTION OF THE SOFTWARE
|
||||
CONSTITUTES YOUR ACCEPTANCE OF THIS AGREEMENT.
|
||||
|
||||
2. Definitions.
|
||||
"Software" means any binary or source code that you have received from Morse
|
||||
Micro or its authorized licensees and/or those portions of such software
|
||||
produced by Program’s code within the Software, as well as any other machine
|
||||
readable materials (including, but not limited to, libraries, source files,
|
||||
header files, and data files), any updates or error corrections provided by
|
||||
Morse Micro, and any user manuals, programming guides and other documentation
|
||||
provided to you by Morse Micro under this SLA.
|
||||
|
||||
3. License and Restrictions.
|
||||
Morse Micro grants you a non-exclusive, non-transferable, limited license
|
||||
without license fees to:
|
||||
|
||||
a. use the software solely with a hardware product that includes one of the
|
||||
Morse Micro Wi-Fi HaLow chips, including
|
||||
wireless modules or evaluation kits;
|
||||
|
||||
b. to reproduce and distribute the Software complete, unmodified, and as
|
||||
provided by Morse Micro, solely for use with a hardware product that
|
||||
includes one of the Morse Micro Wi-Fi HaLow chips, including wireless
|
||||
modules or evaluation kits.
|
||||
|
||||
4. Reservation of Rights.
|
||||
You should distribute Software with a copy of this SLA. Software is
|
||||
copyrighted. Title to Software and all associated intellectual property rights
|
||||
is retained by Morse Micro. Except as expressly provided herein, no license or
|
||||
right, express or implied, is hereby conveyed or granted to you by Morse Micro.
|
||||
You must retain all copyright notices on all Software, derivative works and
|
||||
documentation. The intellectual property and proprietary rights of whatever
|
||||
nature in the Software and derivative works are and will remain the exclusive
|
||||
property of Morse Micro or its suppliers. Nothing in this Agreement should be
|
||||
construed as transferring any aspects of such rights to you or any third party.
|
||||
Morse Micro and its suppliers reserve any and all rights not expressly granted
|
||||
in this Agreement. You may not sell, assign, sublicense, lease, or otherwise
|
||||
transfer any part of this license. You must not:
|
||||
|
||||
a. use, license, sell or otherwise distribute the Software except as
|
||||
provided in this SLA;
|
||||
|
||||
b. attempt to modify in any way, reverse engineer, decompile or disassemble
|
||||
any portion of the Software;
|
||||
|
||||
c. use the Software or other material in violation of any applicable law or
|
||||
regulation, including but not limited to any regulatory agency.
|
||||
|
||||
5. Ownership.
|
||||
The Software is licensed and not sold. Title to and ownership of the Software,
|
||||
including all intellectual property rights thereto, and any portion thereof
|
||||
remain with Morse Micro or its licensors. You hereby covenant that you will not
|
||||
assert any claim that the Software created by or for Morse Micro infringe any
|
||||
intellectual property right owned or controlled by you.
|
||||
|
||||
6. Termination.
|
||||
This SLA will terminate immediately without notice from Morse Micro if you fail
|
||||
to comply with any of its provisions, including the export laws provisions and
|
||||
Section 10 that may govern the export of the Software from certain
|
||||
jurisdictions, including technical data.
|
||||
|
||||
7. Disclaimer and Limitation of Liability.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MORSE MICRO
|
||||
FURTHER DISCLAIMS ALL WARRANTIES, EXPRESS AND IMPLIED, INCLUDING WITHOUT
|
||||
LIMITATION, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE OR NON-INFRINGEMENT. IN NO EVENT SHALL MORSE MICRO BE LIABLE FOR ANY
|
||||
INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, OR DAMAGES
|
||||
FOR LOSS OF PROFITS, REVENUE, DATA OR DATA USE, INCURRED BY YOU OR ANY THIRD
|
||||
PARTY, WHETHER IN AN ACTION IN CONTRACT OR TORT, EVEN IF MORSE MICRO HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THE SOFTWARE IS NOT INTENDED FOR
|
||||
USE IN ENVIRONMENTS OR APPLICATIONS WHERE EXTRAORDINARILY HIGH LEVELS OF
|
||||
QUALITY, RELIABILITY, AND FAILURE TOLERANCE ARE DEMANDED, AND/OR WHERE A
|
||||
MALFUNCTION OR FAILURE COULD LEAD TO SIGNIFICANT HARM TO LIFE, HEALTH,
|
||||
PROPERTY, OR RESULT IN SEVERE SOCIETAL REPERCUSSIONS ("CRITICAL APPLICATIONS").
|
||||
CRITICAL APPLICATIONS ENCOMPASS, BUT ARE NOT LIMITED TO, EQUIPMENT UTILIZED IN
|
||||
NUCLEAR FACILITIES, AVIATION AND SPACE EQUIPMENT, MEDICAL DEVICES, AUTOMOTIVE,
|
||||
TRAIN, MARINE, AND OTHER TRANSPORTATION EQUIPMENT, DEVICES INVOLVED IN
|
||||
CONTROLLING COMBUSTION OR EXPLOSIONS, SAFETY DEVICES, ELEVATORS AND ESCALATORS,
|
||||
DEVICES ASSOCIATED WITH ELECTRIC POWER, AND EQUIPMENT USED IN FINANCE-RELATED
|
||||
FIELDS.
|
||||
|
||||
8. Survival.
|
||||
Sections 4, 5, 6, 7 and 10 will survive termination or expiration of this SLA.
|
||||
|
||||
9. Privacy.
|
||||
Some features of the Software, if activated, may transmit a limited amount of
|
||||
data to Morse Micro (or its service provider) about the status of the system
|
||||
before a crash event. Morse Micro does not associate the data with personally
|
||||
identifiable information.
|
||||
|
||||
10. Export Laws.
|
||||
YOU UNDERSTAND AND AGREE THAT THE SOFTWARE IS SUBJECT TO ALL APPLICABLE EXPORT-
|
||||
RELATED LAWS AND REGULATIONS AND THAT YOU MAY NOT EXPORT, RE-EXPORT OR TRANSFER
|
||||
THE SOFTWARE OR ANY DIRECT PRODUCT OF THE SOFTWARE EXCEPT AS PERMITTED UNDER
|
||||
THOSE LAWS. WITHOUT LIMITING THE FOREGOING, EXPORT, RE-EXPORT, OR TRANSFER OF
|
||||
THE SOFTWARE TO CUBA, IRAN, NORTH KOREA, SUDAN, AND SYRIA IS PROHIBITED.
|
||||
|
||||
11. Governing Law.
|
||||
The laws of New South Wales, Australia, govern all matters arising out of or
|
||||
relating to this SLA without giving effect to any conflict of law principles.
|
||||
If any provision of this SLA is held to be unenforceable, this SLA will remain
|
||||
in effect with the provision omitted, unless omission would frustrate the
|
||||
intent of the parties, in which case this Agreement will immediately terminate.
|
||||
|
||||
12. Entire Agreement.
|
||||
This Agreement constitutes the entire agreement between the parties and
|
||||
supersedes all prior and contemporaneous agreements, proposals or
|
||||
representations, written or oral, concerning its subject matter. No
|
||||
modification, amendment, or waiver of any provision of this Agreement will be
|
||||
effective unless in writing and either signed or accepted electronically by the
|
||||
party against whom the modification, amendment or waiver is to be asserted. A
|
||||
waiver of any breach under this Agreement does not constitute a waiver of any
|
||||
other breach or future breach.
|
||||
|
||||
|
||||
MORSE MICRO
|
||||
@@ -1,86 +0,0 @@
|
||||
#
|
||||
# Copyright 2022 Morse Micro
|
||||
#
|
||||
# This is free software, licensed under the MIT License.
|
||||
#
|
||||
# This package installs Morse Micro board configuration binaries, which are
|
||||
# distributed under the Morse Micro Binary Distribution License.
|
||||
# This license is available in LICENSE.binaries.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=morse-board-config
|
||||
PKG_RELEASE=6
|
||||
|
||||
PKG_VERSION:=rel_1_12_4_2024_Jun_11
|
||||
|
||||
PKG_SOURCE:=morsemicro-bcf-rel_1_12_4_2024_Jun_11.tar
|
||||
PKG_SOURCE_URL:=https://github.com/MorseMicro/bcf_binaries/releases/download/v1.12.4/
|
||||
PKG_HASH:=e403764730aa149e78874135da154bab2a24574308d3f2df88c9b4c125766ae3
|
||||
|
||||
PKG_MAINTAINER:=Morse Micro <info@morsemicro.com>
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
RSTRIP:=:
|
||||
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/morse-board-config
|
||||
SECTION:=firmware
|
||||
CATEGORY:=Firmware
|
||||
URL:=$(PKG_SOURCE_URL)
|
||||
TITLE:=Morse Micro WIFI HaLow Board Config File
|
||||
PROVIDES:=morse-board-config
|
||||
endef
|
||||
|
||||
define Package/morse-board-config-hotplug-model
|
||||
SECTION:=firmware
|
||||
CATEGORY:=Firmware
|
||||
TITLE:=Hotplug scripts for module type reporting
|
||||
DEPENDS:=+morse-board-config
|
||||
endef
|
||||
|
||||
define Package/morse-board-config-hotplug-model/description
|
||||
When enabled, a hotplug script will be installed to
|
||||
append a relevant module type suffix based on the value
|
||||
programmed into the Morse chips OTP bits.
|
||||
endef
|
||||
|
||||
TAR_CMD=$(HOST_TAR) -C $(1) $(TAR_OPTIONS)
|
||||
|
||||
define Build/Compile
|
||||
|
||||
endef
|
||||
|
||||
define Package/morse-board-config/install
|
||||
$(INSTALL_DIR) $(1)/usr/share/morse-bcf
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/morse
|
||||
|
||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/lib/firmware/morse/* $(1)/lib/firmware/morse/
|
||||
|
||||
# Install all files from override folder, including failsafe.
|
||||
$(INSTALL_DATA) ./files/lib/firmware/morse/* $(1)/lib/firmware/morse/
|
||||
|
||||
ifeq ($(CONFIG_TARGET_PROFILE), "DEVICE_edgecore_eap112")
|
||||
ln -s /lib/firmware/morse/bcf_edgecore_eap112_fcc.bin $(1)/lib/firmware/morse/bcf_default.bin
|
||||
else
|
||||
# Link the failsafe bcf by default so userspace can query the driver.
|
||||
ln -s /lib/firmware/morse/bcf_failsafe.bin $(1)/lib/firmware/morse/bcf_default.bin
|
||||
endif
|
||||
# Create symlinks for the production programmed otp devices
|
||||
while IFS=, read -r board_type suffix serial; do \
|
||||
ln -s /lib/firmware/morse/bcf_$$$${serial}.bin $(1)/lib/firmware/morse/bcf_boardtype_$$$${board_type}.bin; \
|
||||
done < ./files/usr/share/morse-bcf/db.txt
|
||||
|
||||
$(INSTALL_DATA) ./files/usr/share/morse-bcf/db.txt $(1)/usr/share/morse-bcf/db.txt
|
||||
endef
|
||||
|
||||
define Package/morse-board-config-hotplug-model/install
|
||||
$(INSTALL_DIR) $(1)/etc/hotplug.d/ieee80211
|
||||
$(INSTALL_DATA) ./files/etc/hotplug.d/ieee80211/20-module-type $(1)/etc/hotplug.d/ieee80211/20-module-type
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,morse-board-config))
|
||||
$(eval $(call BuildPackage,morse-board-config-hotplug-model))
|
||||
@@ -1,19 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
[ "${ACTION}" = "add" ] && {
|
||||
basename "$(readlink -f "/sys/${DEVPATH}/device/driver")" | grep '^morse_' || return;
|
||||
|
||||
board_type=$(printf "%04x" "$(cat /sys/${DEVPATH}/device/board_type)");
|
||||
|
||||
# Avoid mutating model information when OTP is not burnt, ie 0000.
|
||||
[ "$board_type" = "0000" ] && return;
|
||||
|
||||
module_id=$(awk -F, '$1==b{print toupper($2)}' b="$board_type" /usr/share/morse-bcf/db.txt)
|
||||
|
||||
model=$(cat /tmp/sysinfo/model)
|
||||
|
||||
# Don't append a module id if that module id already exists in the model
|
||||
[ "${model%-"$module_id"}" != "${model}" ] && return;
|
||||
|
||||
echo "$model-$module_id" > /tmp/sysinfo/model
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +0,0 @@
|
||||
0801,05us,mf08651_us
|
||||
@@ -1,183 +0,0 @@
|
||||
#
|
||||
# Copyright 2022 Morse Micro
|
||||
#
|
||||
# This is free software, licensed under the GPL 2 license.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=morse_driver
|
||||
PKG_RELEASE=3
|
||||
|
||||
PKG_VERSION:=1.11.4
|
||||
|
||||
PKG_LICENSE:=GPLv2
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
PKG_SOURCE_VERSION:=$(PKG_VERSION)
|
||||
PKG_SOURCE_URL:=https://github.com/MorseMicro/morse_driver.git
|
||||
PKG_HASH:=159d018a92e0cf742795ed49bd94fb6ed324163012bb91c2a2e4e0f6037bbf23
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=b2ab42a5f22527422adf6afab73f2d019c16f162
|
||||
|
||||
PKG_MAINTAINER:=Morse Micro
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
DTC=$(wildcard $(LINUX_DIR)/scripts/dtc/dtc)
|
||||
|
||||
define KernelPackage/morse
|
||||
SUBMENU:=Wireless Drivers
|
||||
TITLE:=Morse Micro WIFI HaLow driver
|
||||
DEPENDS:= +kmod-mmc +kmod-mac80211 +kmod-trelay +kmod-lib-crc7 +morse-fw +morse-board-config
|
||||
FILES:=\
|
||||
$(PKG_BUILD_DIR)/morse.ko \
|
||||
$(PKG_BUILD_DIR)/dot11ah/dot11ah.ko
|
||||
AUTOLOAD:=$(call AutoProbe,morse)
|
||||
MODPARAMS.morse:=country=US
|
||||
PROVIDES:=kmod-morse
|
||||
endef
|
||||
|
||||
define KernelPackage/morse/config
|
||||
|
||||
config MORSE_SDIO
|
||||
bool "SDIO support "
|
||||
default n
|
||||
depends on PACKAGE_kmod-morse
|
||||
|
||||
config MORSE_SPI
|
||||
bool "SPI support "
|
||||
default y
|
||||
depends on PACKAGE_kmod-morse
|
||||
|
||||
config MORSE_USER_ACCESS
|
||||
bool "User space access support "
|
||||
default y
|
||||
depends on PACKAGE_kmod-morse
|
||||
|
||||
config MORSE_VENDOR_COMMAND
|
||||
bool "Vendor command support "
|
||||
default y
|
||||
depends on PACKAGE_kmod-morse
|
||||
|
||||
config MORSE_MONITOR
|
||||
bool "Monitor mode support "
|
||||
default n
|
||||
depends on PACKAGE_kmod-morse
|
||||
|
||||
config MORSE_DEBUG
|
||||
bool "Enable debug "
|
||||
default n
|
||||
depends on PACKAGE_kmod-morse
|
||||
help
|
||||
Compiles the driver with debug info and some additional debug features.
|
||||
|
||||
config MORSE_DEBUG_LOGGING
|
||||
bool "Enable debug logging"
|
||||
default n
|
||||
depends on PACKAGE_kmod-morse
|
||||
select KERNEL_DYNAMIC_DEBUG_CORE
|
||||
help
|
||||
Enables debug level logging from the driver. Logging must be enabled at run time.
|
||||
There may be a binary size and performance impact when this is y.
|
||||
|
||||
config MORSE_RC
|
||||
bool "Enable MMRC (Morse Micro Rate Control) "
|
||||
default y
|
||||
depends on PACKAGE_kmod-morse
|
||||
|
||||
config MORSE_SDIO_ALIGNMENT
|
||||
int "Required alignment for bulk SDIO reads/writes"
|
||||
default 2
|
||||
range 2 8
|
||||
depends on MORSE_SDIO
|
||||
help
|
||||
Number of bytes to align data buffers for bulk SDIO transactions. Some hosts have
|
||||
specific alignment requirements for DMA, use this setting to
|
||||
adjust the alignment required.
|
||||
|
||||
Must be a power of 2.
|
||||
|
||||
endef
|
||||
|
||||
ifeq ($(CONFIG_MORSE_SDIO),y)
|
||||
NOSTDINC_FLAGS += -DCONFIG_MORSE_SDIO
|
||||
MORSE_MAKEDEFS += CONFIG_MORSE_SDIO=y
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_MORSE_SPI),y)
|
||||
MORSE_MAKEDEFS += CONFIG_MORSE_SPI=y
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_MORSE_USER_ACCESS),y)
|
||||
NOSTDINC_FLAGS += -DCONFIG_MORSE_USER_ACCESS
|
||||
MORSE_MAKEDEFS += CONFIG_MORSE_USER_ACCESS=y
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_MORSE_VENDOR_COMMAND),y)
|
||||
NOSTDINC_FLAGS += -DCONFIG_MORSE_VENDOR_COMMAND
|
||||
MORSE_MAKEDEFS += CONFIG_MORSE_VENDOR_COMMAND=y
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_MORSE_MONITOR),y)
|
||||
NOSTDINC_FLAGS += -DCONFIG_MORSE_MONITOR
|
||||
MORSE_MAKEDEFS += CONFIG_MORSE_MONITOR=y
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_MORSE_DEBUG),y)
|
||||
# This DEBUG (used by the driver Makefile) should not be confused with
|
||||
# -DDEBUG (used by the kernel build system).
|
||||
MORSE_MAKEDEFS += DEBUG=y
|
||||
MORSE_MAKEDEFS += CONFIG_MORSE_DEBUGFS=y
|
||||
MORSE_MAKEDEFS += CONFIG_MORSE_ENABLE_TEST_MODES=y
|
||||
else
|
||||
MORSE_MAKEDEFS += DEBUG=n
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_MORSE_RC),y)
|
||||
NOSTDINC_FLAGS += -DCONFIG_MORSE_RC
|
||||
MORSE_MAKEDEFS += CONFIG_MORSE_RC=y
|
||||
endif
|
||||
|
||||
MORSE_MAKEDEFS += \
|
||||
MORSE_VERSION=0-$(PKG_VERSION) \
|
||||
KERNEL_SRC=$(LINUX_DIR) \
|
||||
CONFIG_MORSE_SDIO_ALIGNMENT=$(CONFIG_MORSE_SDIO_ALIGNMENT) \
|
||||
CONFIG_BACKPORT_VERSION=v5.18.1
|
||||
# This refers to the version of mac80211 backported to OpenWrt
|
||||
# Occasionally patches are required to remove some parts of the driver
|
||||
# as OpenWrt may sometimes pull in further patches from later kernel versions
|
||||
# than that of the mac80211 backport.
|
||||
|
||||
NOSTDINC_FLAGS = \
|
||||
-I$(PKG_BUILD_DIR) \
|
||||
-I$(STAGING_DIR)/usr/include/mac80211-backport/uapi \
|
||||
-I$(STAGING_DIR)/usr/include/mac80211-backport \
|
||||
-I$(STAGING_DIR)/usr/include/mac80211/uapi \
|
||||
-I$(STAGING_DIR)/usr/include/mac80211 \
|
||||
-include backport/autoconf.h \
|
||||
-include backport/backport.h
|
||||
|
||||
ifeq ($(CONFIG_MORSE_DEBUG_LOGGING),y)
|
||||
NOSTDINC_FLAGS += -DDYNAMIC_DEBUG_MODULE
|
||||
NOSTDINC_FLAGS += -DDEBUG
|
||||
endif
|
||||
|
||||
MORSE_MAKEDEFS += CONFIG_WLAN_VENDOR_MORSE=m
|
||||
MORSE_MAKEDEFS += V=1
|
||||
|
||||
NOSTDINC_FLAGS += -DMORSE_TRACE_PATH=.
|
||||
|
||||
include $(INCLUDE_DIR)/kernel-defaults.mk
|
||||
|
||||
define Build/Compile
|
||||
$(MAKE) $(MORSE_MAKEDEFS) $(PKG_JOBS) -C "$(LINUX_DIR)" \
|
||||
$(KERNEL_MAKE_FLAGS) \
|
||||
M="$(PKG_BUILD_DIR)" \
|
||||
NOSTDINC_FLAGS="$(NOSTDINC_FLAGS)" \
|
||||
modules
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,morse))
|
||||
@@ -1,15 +0,0 @@
|
||||
--- a/watchdog.c
|
||||
+++ b/watchdog.c
|
||||
@@ -54,12 +54,7 @@ static enum hrtimer_restart morse_watchd
|
||||
static void watchdog_timer_start(struct morse *mors)
|
||||
{
|
||||
ktime_t interval = ktime_set(mors->watchdog.interval_secs, 0);
|
||||
-
|
||||
-#if defined(MAC80211_BACKPORT_VERSION_CODE) && (KERNEL_VERSION(4, 10, 0) <= MAC80211_VERSION_CODE)
|
||||
- hrtimer_start(&mors->watchdog.timer, interval.tv64, HRTIMER_MODE_REL);
|
||||
-#else
|
||||
hrtimer_start(&mors->watchdog.timer, interval, HRTIMER_MODE_REL);
|
||||
-#endif
|
||||
}
|
||||
|
||||
int morse_watchdog_start(struct morse *mors)
|
||||
@@ -1,60 +0,0 @@
|
||||
--- a/spi.c
|
||||
+++ b/spi.c
|
||||
@@ -175,10 +175,12 @@ static int morse_spi_setup(struct spi_de
|
||||
spi->bits_per_word = 8;
|
||||
spi->max_speed_hz = max_speed_hz;
|
||||
|
||||
+#if 0
|
||||
if (spi->max_speed_hz > MAX_SPI_CLK_SPEED) {
|
||||
dev_err(&spi->dev, "SPI clocks above 50MHz are not supported by Morse chip\n");
|
||||
return -EPERM;
|
||||
}
|
||||
+#endif
|
||||
|
||||
ret = spi_setup(spi);
|
||||
if (ret < 0) {
|
||||
@@ -432,7 +434,7 @@ static u8 *morse_spi_find_data_ack(struc
|
||||
{
|
||||
u8 *cp = data;
|
||||
|
||||
- while (cp < end && *cp == 0xff)
|
||||
+ while (cp < end && (SPI_MMC_RESPONSE_CODE(*cp) != SPI_RESPONSE_ACCEPTED))
|
||||
cp++;
|
||||
|
||||
if (cp == end)
|
||||
@@ -529,13 +531,10 @@ static int morse_spi_cmd53_read(struct m
|
||||
cp += 4;
|
||||
|
||||
if (!block) {
|
||||
- /* Scale bytes delay to block */
|
||||
- u32 extra_bytes = (count * mspi->inter_block_delay_bytes) / MMC_SPI_BLOCKSIZE;
|
||||
-
|
||||
/* Allow 4 bytes for CRC and another 10 bytes for start block token & chip delays
|
||||
* (usually comes in 2).
|
||||
*/
|
||||
- data_size = count + 4 + 4 + extra_bytes;
|
||||
+ data_size = count + 4 + 4 + mspi->inter_block_delay_bytes;
|
||||
if (is_rk3288)
|
||||
/* Short transactions are sometimes delayed. These extra bytes give enough
|
||||
* cycles to receive all the data. This could be optimised to a lower
|
||||
@@ -601,6 +600,7 @@ static int morse_spi_cmd53_write(struct
|
||||
u8 *resp;
|
||||
u8 *end;
|
||||
u8 *ack = cp;
|
||||
+ u8 *test_ack;
|
||||
u32 data_size;
|
||||
int i;
|
||||
|
||||
@@ -656,10 +656,11 @@ static int morse_spi_cmd53_write(struct
|
||||
/* crc */
|
||||
*cp = (crc & 0xFF00) >> 8;
|
||||
*(cp + 1) = (crc & 0xFF);
|
||||
+ test_ack = cp + 2;
|
||||
cp += sizeof(crc);
|
||||
|
||||
/* Allow more bytes for status and chip processing (depends on CLK) */
|
||||
- cp += block ? mspi->inter_block_delay_bytes : 4;
|
||||
+ cp += mspi->inter_block_delay_bytes;
|
||||
}
|
||||
|
||||
/* Do the actual transfer */
|
||||
@@ -1,13 +0,0 @@
|
||||
Index: morse_driver-rel_1_12_3_2024_May_23/sdio.c
|
||||
===================================================================
|
||||
--- morse_driver-rel_1_12_3_2024_May_23.orig/sdio.c
|
||||
+++ morse_driver-rel_1_12_3_2024_May_23/sdio.c
|
||||
@@ -572,7 +572,7 @@ static int morse_sdio_reset(int reset_pi
|
||||
|
||||
sdio_claim_host(func);
|
||||
sdio_disable_func(func);
|
||||
-#if KERNEL_VERSION(5, 18, 0) > LINUX_VERSION_CODE
|
||||
+#if KERNEL_VERSION(5, 18, 0) > MAC80211_VERSION_CODE
|
||||
mmc_hw_reset(func->card->host);
|
||||
#else
|
||||
mmc_hw_reset(func->card);
|
||||
@@ -1,160 +0,0 @@
|
||||
From 9ebc9a01e90f65f058ed21d3190800dc130b6ef4 Mon Sep 17 00:00:00 2001
|
||||
From: Arien Judge <arien.judge@morsemicro.com>
|
||||
Date: Wed, 28 Feb 2024 13:29:28 +1100
|
||||
Subject: [PATCH] sysfs: add sysfs to export board type as a device attribute
|
||||
|
||||
The driver reads the board type from OTP to decide which bcf file to load,
|
||||
but doesn't report this information anywhere useful.
|
||||
|
||||
Read the value read from OTP as a sysfs device attribute to allow userspace
|
||||
applications to reliably report the module type on chip.
|
||||
|
||||
Opted for creating a proper sysfs device attribute here instead of using
|
||||
debugfs as we shouldn't expect user tooling to have such a hard dependency
|
||||
|
||||
cache board id on firmware init for sysfs reporting
|
||||
---
|
||||
Makefile | 1 +
|
||||
firmware.c | 3 +++
|
||||
mac.c | 6 ++++++
|
||||
morse.h | 1 +
|
||||
sysfs.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||
sysfs.h | 9 +++++++++
|
||||
6 files changed, 66 insertions(+)
|
||||
create mode 100644 sysfs.c
|
||||
create mode 100644 sysfs.h
|
||||
|
||||
Index: morse_driver-rel_1_12_3_2024_May_23/Makefile
|
||||
===================================================================
|
||||
--- morse_driver-rel_1_12_3_2024_May_23.orig/Makefile
|
||||
+++ morse_driver-rel_1_12_3_2024_May_23/Makefile
|
||||
@@ -96,6 +96,7 @@ endif
|
||||
obj-$(CONFIG_WLAN_VENDOR_MORSE) += morse.o dot11ah/
|
||||
|
||||
morse-y = mac.o
|
||||
+morse-y += sysfs.o
|
||||
morse-y += init.o
|
||||
morse-y += skbq.o
|
||||
morse-y += debug.o
|
||||
Index: morse_driver-rel_1_12_3_2024_May_23/firmware.c
|
||||
===================================================================
|
||||
--- morse_driver-rel_1_12_3_2024_May_23.orig/firmware.c
|
||||
+++ morse_driver-rel_1_12_3_2024_May_23/firmware.c
|
||||
@@ -881,6 +881,9 @@ int morse_firmware_init(struct morse *mo
|
||||
if (mors->cfg->get_board_type && enable_otp_check)
|
||||
board_id = mors->cfg->get_board_type(mors);
|
||||
|
||||
+ /* store the board id for sysfs reporting. Propagate the error */
|
||||
+ mors->board_id = board_id;
|
||||
+
|
||||
if (strlen(board_config_file) > 0) {
|
||||
n = snprintf(bcf_path, sizeof(bcf_path), "%s/%s", MORSE_FW_DIR, board_config_file);
|
||||
} else if (strlen(mors->board_serial) > 0) {
|
||||
Index: morse_driver-rel_1_12_3_2024_May_23/mac.c
|
||||
===================================================================
|
||||
--- morse_driver-rel_1_12_3_2024_May_23.orig/mac.c
|
||||
+++ morse_driver-rel_1_12_3_2024_May_23/mac.c
|
||||
@@ -14,6 +14,7 @@
|
||||
#include "mac.h"
|
||||
#include "s1g_ies.h"
|
||||
#include "bus.h"
|
||||
+#include "sysfs.h"
|
||||
#include "debug.h"
|
||||
#include "command.h"
|
||||
#include "vendor.h"
|
||||
@@ -6422,6 +6423,10 @@ int morse_mac_register(struct morse *mor
|
||||
INIT_WORK(&mors->driver_restart, morse_mac_restart_work);
|
||||
INIT_WORK(&mors->health_check, morse_health_check_work);
|
||||
|
||||
+ ret = morse_sysfs_init(mors);
|
||||
+ if (ret)
|
||||
+ MORSE_ERR(mors, "Unable to initialise sysfs\n");
|
||||
+
|
||||
ret = morse_init_debug(mors);
|
||||
if (ret)
|
||||
MORSE_ERR(mors, "Unable to create debugfs files\n");
|
||||
@@ -6593,6 +6598,7 @@ static void morse_mac_deinit(struct mors
|
||||
|
||||
void morse_mac_unregister(struct morse *mors)
|
||||
{
|
||||
+ morse_sysfs_free(mors);
|
||||
morse_deinit_debug(mors);
|
||||
morse_ps_disable(mors);
|
||||
|
||||
Index: morse_driver-rel_1_12_3_2024_May_23/morse.h
|
||||
===================================================================
|
||||
--- morse_driver-rel_1_12_3_2024_May_23.orig/morse.h
|
||||
+++ morse_driver-rel_1_12_3_2024_May_23/morse.h
|
||||
@@ -979,6 +979,7 @@ struct morse {
|
||||
struct morse_debug debug;
|
||||
|
||||
char *board_serial;
|
||||
+ int board_id;
|
||||
|
||||
/* Stored Channel Information, sta_type, enc_mode, RAW */
|
||||
struct morse_custom_configs custom_configs;
|
||||
Index: morse_driver-rel_1_12_3_2024_May_23/sysfs.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ morse_driver-rel_1_12_3_2024_May_23/sysfs.c
|
||||
@@ -0,0 +1,46 @@
|
||||
+/*
|
||||
+ * Copyright 2024 Morse Micro
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#include <linux/sysfs.h>
|
||||
+#include "morse.h"
|
||||
+#include "sysfs.h"
|
||||
+#include "debug.h"
|
||||
+
|
||||
+static ssize_t board_type_show(struct device *dev,
|
||||
+ struct device_attribute *attr,
|
||||
+ char *buf)
|
||||
+{
|
||||
+ struct morse *mors = dev_get_drvdata(dev);
|
||||
+
|
||||
+ if (!mors)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ if (mors->board_id < 0)
|
||||
+ return mors->board_id;
|
||||
+
|
||||
+#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE
|
||||
+ return sysfs_emit(buf, "%d\n", mors->board_id);
|
||||
+#else
|
||||
+ return snprintf(buf, PAGE_SIZE, "%d\n", mors->board_id);
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+static DEVICE_ATTR_RO(board_type);
|
||||
+
|
||||
+int morse_sysfs_init(struct morse *mors)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = device_create_file(mors->dev, &dev_attr_board_type);
|
||||
+ if (ret < 0)
|
||||
+ MORSE_ERR(mors, "failed to create sysfs file board_type");
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+void morse_sysfs_free(struct morse *mors)
|
||||
+{
|
||||
+ device_remove_file(mors->dev, &dev_attr_board_type);
|
||||
+}
|
||||
Index: morse_driver-rel_1_12_3_2024_May_23/sysfs.h
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ morse_driver-rel_1_12_3_2024_May_23/sysfs.h
|
||||
@@ -0,0 +1,9 @@
|
||||
+/*
|
||||
+ * Copyright 2024 Morse Micro
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#pragma once
|
||||
+
|
||||
+int morse_sysfs_init(struct morse *mors);
|
||||
+void morse_sysfs_free(struct morse *mors);
|
||||
@@ -1,13 +0,0 @@
|
||||
--- a/sdio.c
|
||||
+++ b/sdio.c
|
||||
@@ -587,9 +587,5 @@ static int morse_sdio_reset(int reset_pi
|
||||
sdio_claim_host(func);
|
||||
sdio_disable_func(func);
|
||||
-#if KERNEL_VERSION(5, 18, 0) > MAC80211_VERSION_CODE
|
||||
mmc_hw_reset(func->card->host);
|
||||
-#else
|
||||
- mmc_hw_reset(func->card);
|
||||
-#endif
|
||||
sdio_enable_func(func);
|
||||
sdio_release_host(func);
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
--- a/spi.c 2025-01-10 18:08:57.753837165 +0800
|
||||
+++ b/spi.c 2025-01-13 14:17:01.746850459 +0800
|
||||
@@ -1057,7 +1057,7 @@ static irqreturn_t morse_spi_irq_handler
|
||||
struct morse *mors = spi_get_drvdata(mspi->spi);
|
||||
|
||||
MORSE_WARN_ON(FEATURE_ID_SPI, !mors);
|
||||
- if (irq == gpio_to_irq(mors->cfg->mm_spi_irq_gpio)) {
|
||||
+
|
||||
/*
|
||||
* If we are using edge interrupts, we need to continuously service the IRQ until
|
||||
* either the chip has cleared all its IRQ bits, or the pin goes high again.
|
||||
@@ -1067,8 +1067,7 @@ static irqreturn_t morse_spi_irq_handler
|
||||
} while (spi_use_edge_irq && ret && !gpio_get_value(mors->cfg->mm_spi_irq_gpio));
|
||||
|
||||
return IRQ_HANDLED;
|
||||
- }
|
||||
- return IRQ_NONE;
|
||||
+
|
||||
}
|
||||
|
||||
static void morse_spi_enable_irq(struct morse_spi *mspi)
|
||||
@@ -1311,10 +1310,15 @@ static int morse_spi_probe(struct spi_de
|
||||
ret = morse_spi_cmd(mspi, SD_IO_MORSE_INIT, 0x00000000);
|
||||
if (!ret)
|
||||
break;
|
||||
- pr_info("%s: SD_IO_RESET\n", __func__);
|
||||
+ MORSE_DBG(mors, "%s: SD_IO_RESET\n", __func__);
|
||||
morse_spi_cmd(mspi, SD_IO_RESET, 0x00000000);
|
||||
}
|
||||
|
||||
+ if (ret) {
|
||||
+ MORSE_SPI_ERR(mors, "failed initialise SPI: %d\n", ret);
|
||||
+ goto err_cfg;
|
||||
+ }
|
||||
+
|
||||
ret = morse_chip_cfg_detect_and_init(mors, mors_chip_series);
|
||||
if (ret) {
|
||||
MORSE_SPI_ERR(mors, "morse_chip_cfg_detect_and_init failed: %d\n", ret);
|
||||
@@ -1327,7 +1331,11 @@ static int morse_spi_probe(struct spi_de
|
||||
mors->cfg->mm_ps_gpios_supported = true;
|
||||
ret = morse_spi_reg32_read(mors, MORSE_REG_CHIP_ID(mors), &mors->chip_id);
|
||||
|
||||
- if (!ret) {
|
||||
+ if (ret) {
|
||||
+ MORSE_SPI_ERR(mors, "failed to read chip id: %d\n", ret);
|
||||
+ goto err_cfg;
|
||||
+ }
|
||||
+
|
||||
/* Find out if the chip id matches our records */
|
||||
if (!morse_hw_is_valid_chip_id(mors->chip_id, mors->cfg->valid_chip_ids)) {
|
||||
MORSE_SPI_ERR(mors, "%s Morse chip (ChipId=0x%x) not supported\n",
|
||||
@@ -1357,9 +1365,6 @@ static int morse_spi_probe(struct spi_de
|
||||
mspi->inter_block_delay_bytes);
|
||||
}
|
||||
}
|
||||
- } else {
|
||||
- goto err_cfg;
|
||||
- }
|
||||
|
||||
MORSE_SPI_INFO(mors, "Morse Micro SPI device found, chip ID=0x%04x\n", mors->chip_id);
|
||||
MORSE_SPI_INFO(mors, "Board serial: %s\n", mors->board_serial);
|
||||
@@ -1442,6 +1447,11 @@ static int morse_spi_probe(struct spi_de
|
||||
#ifdef CONFIG_MORSE_ENABLE_TEST_MODES
|
||||
if (test_mode == MORSE_CONFIG_TEST_MODE_BUS)
|
||||
ret = morse_bus_test(mors, "SPI");
|
||||
+
|
||||
+ if (test_mode == MORSE_CONFIG_TEST_MODE_BUS_PROFILE) {
|
||||
+ morse_bus_throughput_profiler(mors);
|
||||
+ morse_spi_disable_irq(mspi);
|
||||
+ }
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
@@ -1,125 +0,0 @@
|
||||
MORSE MICRO
|
||||
BINARY DISTRIBUTION LICENSE AGREEMENT
|
||||
|
||||
1. Parties.
|
||||
This Software License Agreement (SLA) is between Morse Micro Pty. Ltd. and the
|
||||
user of the Software set forth (“you”, “user”, “customer”), and is effective as
|
||||
of the date of first access or download of the software by you. Morse Micro is
|
||||
licensing this software to you free of charge upon the condition that you
|
||||
accept all the terms of this SLA and only use this Software in conjunction with
|
||||
Morse Micro products. ANY USE, REPRODUCTION, OR DISTRIBUTION OF THE SOFTWARE
|
||||
CONSTITUTES YOUR ACCEPTANCE OF THIS AGREEMENT.
|
||||
|
||||
2. Definitions.
|
||||
"Software" means any binary or source code that you have received from Morse
|
||||
Micro or its authorized licensees and/or those portions of such software
|
||||
produced by Program’s code within the Software, as well as any other machine
|
||||
readable materials (including, but not limited to, libraries, source files,
|
||||
header files, and data files), any updates or error corrections provided by
|
||||
Morse Micro, and any user manuals, programming guides and other documentation
|
||||
provided to you by Morse Micro under this SLA.
|
||||
|
||||
3. License and Restrictions.
|
||||
Morse Micro grants you a non-exclusive, non-transferable, limited license
|
||||
without license fees to:
|
||||
|
||||
a. use the software solely with a hardware product that includes one of the
|
||||
Morse Micro Wi-Fi HaLow chips, including
|
||||
wireless modules or evaluation kits;
|
||||
|
||||
b. to reproduce and distribute the Software complete, unmodified, and as
|
||||
provided by Morse Micro, solely for use with a hardware product that
|
||||
includes one of the Morse Micro Wi-Fi HaLow chips, including wireless
|
||||
modules or evaluation kits.
|
||||
|
||||
4. Reservation of Rights.
|
||||
You should distribute Software with a copy of this SLA. Software is
|
||||
copyrighted. Title to Software and all associated intellectual property rights
|
||||
is retained by Morse Micro. Except as expressly provided herein, no license or
|
||||
right, express or implied, is hereby conveyed or granted to you by Morse Micro.
|
||||
You must retain all copyright notices on all Software, derivative works and
|
||||
documentation. The intellectual property and proprietary rights of whatever
|
||||
nature in the Software and derivative works are and will remain the exclusive
|
||||
property of Morse Micro or its suppliers. Nothing in this Agreement should be
|
||||
construed as transferring any aspects of such rights to you or any third party.
|
||||
Morse Micro and its suppliers reserve any and all rights not expressly granted
|
||||
in this Agreement. You may not sell, assign, sublicense, lease, or otherwise
|
||||
transfer any part of this license. You must not:
|
||||
|
||||
a. use, license, sell or otherwise distribute the Software except as
|
||||
provided in this SLA;
|
||||
|
||||
b. attempt to modify in any way, reverse engineer, decompile or disassemble
|
||||
any portion of the Software;
|
||||
|
||||
c. use the Software or other material in violation of any applicable law or
|
||||
regulation, including but not limited to any regulatory agency.
|
||||
|
||||
5. Ownership.
|
||||
The Software is licensed and not sold. Title to and ownership of the Software,
|
||||
including all intellectual property rights thereto, and any portion thereof
|
||||
remain with Morse Micro or its licensors. You hereby covenant that you will not
|
||||
assert any claim that the Software created by or for Morse Micro infringe any
|
||||
intellectual property right owned or controlled by you.
|
||||
|
||||
6. Termination.
|
||||
This SLA will terminate immediately without notice from Morse Micro if you fail
|
||||
to comply with any of its provisions, including the export laws provisions and
|
||||
Section 10 that may govern the export of the Software from certain
|
||||
jurisdictions, including technical data.
|
||||
|
||||
7. Disclaimer and Limitation of Liability.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MORSE MICRO
|
||||
FURTHER DISCLAIMS ALL WARRANTIES, EXPRESS AND IMPLIED, INCLUDING WITHOUT
|
||||
LIMITATION, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE OR NON-INFRINGEMENT. IN NO EVENT SHALL MORSE MICRO BE LIABLE FOR ANY
|
||||
INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, OR DAMAGES
|
||||
FOR LOSS OF PROFITS, REVENUE, DATA OR DATA USE, INCURRED BY YOU OR ANY THIRD
|
||||
PARTY, WHETHER IN AN ACTION IN CONTRACT OR TORT, EVEN IF MORSE MICRO HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THE SOFTWARE IS NOT INTENDED FOR
|
||||
USE IN ENVIRONMENTS OR APPLICATIONS WHERE EXTRAORDINARILY HIGH LEVELS OF
|
||||
QUALITY, RELIABILITY, AND FAILURE TOLERANCE ARE DEMANDED, AND/OR WHERE A
|
||||
MALFUNCTION OR FAILURE COULD LEAD TO SIGNIFICANT HARM TO LIFE, HEALTH,
|
||||
PROPERTY, OR RESULT IN SEVERE SOCIETAL REPERCUSSIONS ("CRITICAL APPLICATIONS").
|
||||
CRITICAL APPLICATIONS ENCOMPASS, BUT ARE NOT LIMITED TO, EQUIPMENT UTILIZED IN
|
||||
NUCLEAR FACILITIES, AVIATION AND SPACE EQUIPMENT, MEDICAL DEVICES, AUTOMOTIVE,
|
||||
TRAIN, MARINE, AND OTHER TRANSPORTATION EQUIPMENT, DEVICES INVOLVED IN
|
||||
CONTROLLING COMBUSTION OR EXPLOSIONS, SAFETY DEVICES, ELEVATORS AND ESCALATORS,
|
||||
DEVICES ASSOCIATED WITH ELECTRIC POWER, AND EQUIPMENT USED IN FINANCE-RELATED
|
||||
FIELDS.
|
||||
|
||||
8. Survival.
|
||||
Sections 4, 5, 6, 7 and 10 will survive termination or expiration of this SLA.
|
||||
|
||||
9. Privacy.
|
||||
Some features of the Software, if activated, may transmit a limited amount of
|
||||
data to Morse Micro (or its service provider) about the status of the system
|
||||
before a crash event. Morse Micro does not associate the data with personally
|
||||
identifiable information.
|
||||
|
||||
10. Export Laws.
|
||||
YOU UNDERSTAND AND AGREE THAT THE SOFTWARE IS SUBJECT TO ALL APPLICABLE EXPORT-
|
||||
RELATED LAWS AND REGULATIONS AND THAT YOU MAY NOT EXPORT, RE-EXPORT OR TRANSFER
|
||||
THE SOFTWARE OR ANY DIRECT PRODUCT OF THE SOFTWARE EXCEPT AS PERMITTED UNDER
|
||||
THOSE LAWS. WITHOUT LIMITING THE FOREGOING, EXPORT, RE-EXPORT, OR TRANSFER OF
|
||||
THE SOFTWARE TO CUBA, IRAN, NORTH KOREA, SUDAN, AND SYRIA IS PROHIBITED.
|
||||
|
||||
11. Governing Law.
|
||||
The laws of New South Wales, Australia, govern all matters arising out of or
|
||||
relating to this SLA without giving effect to any conflict of law principles.
|
||||
If any provision of this SLA is held to be unenforceable, this SLA will remain
|
||||
in effect with the provision omitted, unless omission would frustrate the
|
||||
intent of the parties, in which case this Agreement will immediately terminate.
|
||||
|
||||
12. Entire Agreement.
|
||||
This Agreement constitutes the entire agreement between the parties and
|
||||
supersedes all prior and contemporaneous agreements, proposals or
|
||||
representations, written or oral, concerning its subject matter. No
|
||||
modification, amendment, or waiver of any provision of this Agreement will be
|
||||
effective unless in writing and either signed or accepted electronically by the
|
||||
party against whom the modification, amendment or waiver is to be asserted. A
|
||||
waiver of any breach under this Agreement does not constitute a waiver of any
|
||||
other breach or future breach.
|
||||
|
||||
|
||||
MORSE MICRO
|
||||
@@ -1,53 +0,0 @@
|
||||
#
|
||||
# Copyright 2022 Morse Micro
|
||||
#
|
||||
# This is free software, licensed under the MIT License.
|
||||
#
|
||||
# This package installs Morse Micro firmware binaries, which are
|
||||
# distributed under the Morse Micro Binary Distribution License.
|
||||
# This license is available in LICENSE.binaries.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=morse-fw
|
||||
PKG_RELEASE=2
|
||||
|
||||
PKG_VERSION:=rel_1_11_4_2024_Jul_09
|
||||
|
||||
PKG_SOURCE:=morsemicro-fw-rel_1_11_4_2024_Jul_09.tar
|
||||
PKG_SOURCE_URL:=https://github.com/MorseMicro/firmware_binaries/releases/download/v1.11.4/
|
||||
PKG_HASH:=6df1e39655278adf140776b3e76b8faced41828a9d482363aed0795e96f5d241
|
||||
|
||||
PKG_MAINTAINER:=Morse Micro <info@morsemicro.com>
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
RSTRIP:=:
|
||||
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/morse-fw
|
||||
SECTION:=firmware
|
||||
CATEGORY:=Firmware
|
||||
URL:=$(PKG_SOURCE_URL)
|
||||
TITLE:=Morse Micro WIFI HaLow firmware
|
||||
PROVIDES:=morse-fw
|
||||
endef
|
||||
|
||||
TAR_CMD=$(HOST_TAR) -C $(1) $(TAR_OPTIONS)
|
||||
|
||||
define Build/Compile
|
||||
|
||||
endef
|
||||
|
||||
define Package/morse-fw/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/morse/.
|
||||
if [ -e ./files/lib/firmware/morse/mm6108.bin ]; then \
|
||||
$(INSTALL_DATA) ./files/lib/firmware/morse/mm6108.bin $(1)/lib/firmware/morse/; \
|
||||
else \
|
||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/lib/firmware/morse/mm6108.bin $(1)/lib/firmware/morse/; \
|
||||
fi
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,morse-fw))
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,68 +0,0 @@
|
||||
#
|
||||
# Copyright 2023 Morse Micro
|
||||
#
|
||||
# This is free software, licensed under the 3-Clause BSD License.
|
||||
#
|
||||
|
||||
# Because the contents of morse_regdb are private, this package does
|
||||
# some tricky things to _avoid_ downloading under normal circumstances,
|
||||
# instead using a cached file stored in this repository. If you'd like
|
||||
# to regenerate the cached file, do:
|
||||
#
|
||||
# make package/morse-regdb/clean package/morse-regdb/download package/morse-regdb/compile V=sc REGENERATE=1
|
||||
#
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
|
||||
PKG_NAME:=morse-regdb
|
||||
PKG_RELEASE:=1
|
||||
PKG_BUILD_DEPENDS:=python3/host
|
||||
|
||||
PKG_SOURCE_VERSION:=v2.1.1
|
||||
PKG_SOURCE_URL:=https://github.com/MorseMicro/morse_regdb.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_MIRROR_HASH:=0d074d2810f520c138427ab63ce0b8ab61f0f073cf7cd91177ad840a3322540a
|
||||
|
||||
PKG_VERSION:=$(PKG_SOURCE_VERSION)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
# Skip download unless REGENERATE is on.
|
||||
# This must occur after including package.mk, as PKG_SKIP_DOWNLOAD is defined there.
|
||||
PKG_SKIP_DOWNLOAD=$(USE_SOURCE_DIR)$(USE_GIT_TREE)$(USE_GIT_SRC_CHECKOUT)$(if $(REGENERATE),,1)
|
||||
|
||||
define Package/morse-regdb
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=Regulatory data for 802.11ah
|
||||
URL:=https://bitbucket.org/morsemicro/morse_regdb/src/master/
|
||||
PKGARCH:=all
|
||||
endef
|
||||
|
||||
define Package/morse-regdb/description
|
||||
Regulatory data for 802.11ah in a csv.
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
$(if $(REGENERATE),$(call Build/Prepare/Default))
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
$(if $(REGENERATE),
|
||||
mkdir -p artefacts
|
||||
python3 $(PKG_BUILD_DIR)/regdbconverter.py -v -f csv $(PKG_BUILD_DIR)/regdb_Sub-1_GHz.tsv > artefacts/repo_channels.csv
|
||||
)
|
||||
mkdir -p $(PKG_BUILD_DIR)/artefacts
|
||||
# Mash the 5g shim channels in.
|
||||
python3 add_5g_shim_channels.py < artefacts/repo_channels.csv > $(PKG_BUILD_DIR)/artefacts/channels.csv
|
||||
endef
|
||||
|
||||
define Package/morse-regdb/install
|
||||
$(INSTALL_DIR) $(1)/usr/share/morse-regdb
|
||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/artefacts/* $(1)/usr/share/morse-regdb
|
||||
# Make channels.csv accessible from the web.
|
||||
$(INSTALL_DIR) $(1)/www
|
||||
ln -sf /usr/share/morse-regdb/channels.csv $(1)/www/halow-channels.csv
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,morse-regdb))
|
||||
@@ -1,88 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
|
||||
import csv
|
||||
import sys
|
||||
|
||||
# Fake 5g channels reported by netlink instead of 1g channels.
|
||||
S1G_TO_5G= {
|
||||
1: 132,
|
||||
2: 134,
|
||||
3: 136,
|
||||
4: 'NA',
|
||||
5: 36,
|
||||
6: 38,
|
||||
7: 40,
|
||||
8: 42,
|
||||
9: 44,
|
||||
10: 46,
|
||||
11: 48,
|
||||
12: 50,
|
||||
13: 52,
|
||||
14: 54,
|
||||
15: 56,
|
||||
16: 58,
|
||||
17: 60,
|
||||
18: 62,
|
||||
19: 64,
|
||||
20: 'NA',
|
||||
21: 100,
|
||||
22: 102,
|
||||
23: 104,
|
||||
24: 106,
|
||||
25: 108,
|
||||
26: 110,
|
||||
27: 112,
|
||||
28: 114,
|
||||
29: 116,
|
||||
30: 118,
|
||||
31: 120,
|
||||
32: 122,
|
||||
33: 124,
|
||||
34: 126,
|
||||
35: 128,
|
||||
36: 'NA',
|
||||
37: 149,
|
||||
38: 151,
|
||||
39: 153,
|
||||
40: 155,
|
||||
41: 157,
|
||||
42: 159,
|
||||
43: 161,
|
||||
44: 163,
|
||||
45: 165,
|
||||
46: 167,
|
||||
47: 169,
|
||||
48: 171,
|
||||
49: 173,
|
||||
50: 175,
|
||||
51: 177,
|
||||
}
|
||||
|
||||
# Japanese channels are... different.
|
||||
JAPAN_S1G_TO_5G = {
|
||||
9: 108,
|
||||
13: 36,
|
||||
15: 40,
|
||||
17: 44,
|
||||
19: 48,
|
||||
21: 64,
|
||||
2: 38,
|
||||
6: 46,
|
||||
4: 54,
|
||||
8: 62,
|
||||
36: 42,
|
||||
38: 58,
|
||||
}
|
||||
|
||||
|
||||
dr = csv.DictReader(sys.stdin)
|
||||
dw = csv.DictWriter(sys.stdout, dr.fieldnames + ['5g_chan'], lineterminator='\n')
|
||||
dw.writeheader()
|
||||
for row in dr:
|
||||
m = JAPAN_S1G_TO_5G if row['country_code'] == 'JP' else S1G_TO_5G
|
||||
row['5g_chan'] = m.get(int(row['s1g_chan']))
|
||||
|
||||
assert row['5g_chan'], f'Missing 5G chan map for Channel {row["s1g_chan"]} in {row["country_code"]}'
|
||||
|
||||
dw.writerow(row)
|
||||
@@ -1,473 +0,0 @@
|
||||
country_code,bw,s1g_chan,s1g_op_class,global_op_class,centre_freq_mhz,duty_cycle_ap,duty_cycle_sta,country,tx_power_max,duty_cycle_omit_ctrl_resp,pkt_spacing_ms,airtime_min_ms,airtime_max_ms,usable_banff_c
|
||||
AL,1,1,6,66,863.5,10.0,2.8,Albania,16.13,False,0.0,0.0,0.0,1
|
||||
AL,1,3,6,66,864.5,10.0,2.8,Albania,16.13,False,0.0,0.0,0.0,1
|
||||
AL,1,5,6,66,865.5,10.0,2.8,Albania,16.13,False,0.0,0.0,0.0,1
|
||||
AL,1,7,6,66,866.5,10.0,2.8,Albania,16.13,False,0.0,0.0,0.0,1
|
||||
AL,1,9,6,66,867.5,10.0,2.8,Albania,16.13,False,0.0,0.0,0.0,1
|
||||
AR,1,27,1,68,915.5,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,1,29,1,68,916.5,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,1,31,1,68,917.5,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,1,33,1,68,918.5,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,1,35,1,68,919.5,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,1,37,1,68,920.5,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,1,39,1,68,921.5,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,1,41,1,68,922.5,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,1,43,1,68,923.5,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,1,45,1,68,924.5,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,1,47,1,68,925.5,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,1,49,1,68,926.5,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,1,51,1,68,927.5,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,2,30,2,69,917.0,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,2,34,2,69,919.0,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,2,38,2,69,921.0,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,2,42,2,69,923.0,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,2,46,2,69,925.0,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,2,50,2,69,927.0,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,4,32,3,70,918.0,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,4,40,3,70,922.0,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,4,48,3,70,926.0,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AR,8,44,4,71,924.0,100.0,100.0,Argentina,36.0,False,0.0,0.0,0.0,1
|
||||
AT,1,1,6,66,863.5,10.0,2.8,Austria,16.13,False,0.0,0.0,0.0,1
|
||||
AT,1,3,6,66,864.5,10.0,2.8,Austria,16.13,False,0.0,0.0,0.0,1
|
||||
AT,1,5,6,66,865.5,10.0,2.8,Austria,16.13,False,0.0,0.0,0.0,1
|
||||
AT,1,7,6,66,866.5,10.0,2.8,Austria,16.13,False,0.0,0.0,0.0,1
|
||||
AT,1,9,6,66,867.5,10.0,2.8,Austria,16.13,False,0.0,0.0,0.0,1
|
||||
AU,1,27,22,68,915.5,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,1,29,22,68,916.5,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,1,31,22,68,917.5,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,1,33,22,68,918.5,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,1,35,22,68,919.5,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,1,37,22,68,920.5,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,1,39,22,68,921.5,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,1,41,22,68,922.5,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,1,43,22,68,923.5,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,1,45,22,68,924.5,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,1,47,22,68,925.5,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,1,49,22,68,926.5,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,1,51,22,68,927.5,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,2,30,23,69,917.0,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,2,34,23,69,919.0,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,2,38,23,69,921.0,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,2,42,23,69,923.0,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,2,46,23,69,925.0,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,2,50,23,69,927.0,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,4,32,24,70,918.0,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,4,40,24,70,922.0,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,4,48,24,70,926.0,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
AU,8,44,25,71,924.0,100.0,100.0,Australia,30.0,False,0.0,0.0,0.0,1
|
||||
BA,1,1,6,66,863.5,10.0,2.8,Bosnia and Herzegovina,16.13,False,0.0,0.0,0.0,1
|
||||
BA,1,3,6,66,864.5,10.0,2.8,Bosnia and Herzegovina,16.13,False,0.0,0.0,0.0,1
|
||||
BA,1,5,6,66,865.5,10.0,2.8,Bosnia and Herzegovina,16.13,False,0.0,0.0,0.0,1
|
||||
BA,1,7,6,66,866.5,10.0,2.8,Bosnia and Herzegovina,16.13,False,0.0,0.0,0.0,1
|
||||
BA,1,9,6,66,867.5,10.0,2.8,Bosnia and Herzegovina,16.13,False,0.0,0.0,0.0,1
|
||||
BE,1,1,6,66,863.5,10.0,2.8,Belgium,16.13,False,0.0,0.0,0.0,1
|
||||
BE,1,3,6,66,864.5,10.0,2.8,Belgium,16.13,False,0.0,0.0,0.0,1
|
||||
BE,1,5,6,66,865.5,10.0,2.8,Belgium,16.13,False,0.0,0.0,0.0,1
|
||||
BE,1,7,6,66,866.5,10.0,2.8,Belgium,16.13,False,0.0,0.0,0.0,1
|
||||
BE,1,9,6,66,867.5,10.0,2.8,Belgium,16.13,False,0.0,0.0,0.0,1
|
||||
BE,1,31,30,77,916.9,10.0,2.8,Belgium,16.13,False,0.0,0.0,0.0,1
|
||||
BE,1,33,30,77,917.9,10.0,2.8,Belgium,16.13,False,0.0,0.0,0.0,1
|
||||
BE,1,35,30,77,918.9,10.0,2.8,Belgium,16.13,False,0.0,0.0,0.0,1
|
||||
BG,1,1,6,66,863.5,10.0,2.8,Bulgaria,16.13,False,0.0,0.0,0.0,1
|
||||
BG,1,3,6,66,864.5,10.0,2.8,Bulgaria,16.13,False,0.0,0.0,0.0,1
|
||||
BG,1,5,6,66,865.5,10.0,2.8,Bulgaria,16.13,False,0.0,0.0,0.0,1
|
||||
BG,1,7,6,66,866.5,10.0,2.8,Bulgaria,16.13,False,0.0,0.0,0.0,1
|
||||
BG,1,9,6,66,867.5,10.0,2.8,Bulgaria,16.13,False,0.0,0.0,0.0,1
|
||||
BG,1,33,30,77,917.9,10.0,2.8,Bulgaria,16.13,False,0.0,0.0,0.0,1
|
||||
BG,1,35,30,77,918.9,10.0,2.8,Bulgaria,16.13,False,0.0,0.0,0.0,1
|
||||
BR,1,1,1,68,902.5,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,0
|
||||
BR,1,3,1,68,903.5,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,1,5,1,68,904.5,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,1,7,1,68,905.5,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,1,9,1,68,906.5,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,2,2,2,69,903.0,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,0
|
||||
BR,2,6,2,69,905.0,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,1,27,1,68,915.5,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,1,29,1,68,916.5,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,1,31,1,68,917.5,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,1,33,1,68,918.5,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,1,35,1,68,919.5,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,1,37,1,68,920.5,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,1,39,1,68,921.5,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,1,41,1,68,922.5,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,1,43,1,68,923.5,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,1,45,1,68,924.5,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,1,47,1,68,925.5,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,1,49,1,68,926.5,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,1,51,1,68,927.5,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,2,30,2,69,917.0,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,2,34,2,69,919.0,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,2,38,2,69,921.0,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,2,42,2,69,923.0,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,2,46,2,69,925.0,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,2,50,2,69,927.0,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,4,32,3,70,918.0,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,4,40,3,70,922.0,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,4,48,3,70,926.0,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
BR,8,44,4,71,924.0,100.0,100.0,Brazil,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,1,1,68,902.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,0
|
||||
CA,1,3,1,68,903.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,5,1,68,904.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,7,1,68,905.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,9,1,68,906.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,11,1,68,907.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,13,1,68,908.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,15,1,68,909.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,17,1,68,910.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,19,1,68,911.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,21,1,68,912.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,23,1,68,913.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,25,1,68,914.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,27,1,68,915.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,29,1,68,916.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,31,1,68,917.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,33,1,68,918.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,35,1,68,919.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,37,1,68,920.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,39,1,68,921.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,41,1,68,922.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,43,1,68,923.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,45,1,68,924.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,47,1,68,925.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,49,1,68,926.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,1,51,1,68,927.5,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,2,2,2,69,903.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,0
|
||||
CA,2,6,2,69,905.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,2,10,2,69,907.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,2,14,2,69,909.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,2,18,2,69,911.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,2,22,2,69,913.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,2,26,2,69,915.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,2,30,2,69,917.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,2,34,2,69,919.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,2,38,2,69,921.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,2,42,2,69,923.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,2,46,2,69,925.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,2,50,2,69,927.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,4,8,3,70,906.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,4,16,3,70,910.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,4,24,3,70,914.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,4,32,3,70,918.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,4,40,3,70,922.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,4,48,3,70,926.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,8,12,4,71,908.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,8,28,4,71,916.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CA,8,44,4,71,924.0,100.0,100.0,Canada,36.0,False,0.0,0.0,0.0,1
|
||||
CH,1,1,6,66,863.5,10.0,2.8,Switzerland,16.13,False,0.0,0.0,0.0,1
|
||||
CH,1,3,6,66,864.5,10.0,2.8,Switzerland,16.13,False,0.0,0.0,0.0,1
|
||||
CH,1,5,6,66,865.5,10.0,2.8,Switzerland,16.13,False,0.0,0.0,0.0,1
|
||||
CH,1,7,6,66,866.5,10.0,2.8,Switzerland,16.13,False,0.0,0.0,0.0,1
|
||||
CH,1,9,6,66,867.5,10.0,2.8,Switzerland,16.13,False,0.0,0.0,0.0,1
|
||||
CY,1,1,6,66,863.5,10.0,2.8,Cypress,16.13,False,0.0,0.0,0.0,1
|
||||
CY,1,3,6,66,864.5,10.0,2.8,Cypress,16.13,False,0.0,0.0,0.0,1
|
||||
CY,1,5,6,66,865.5,10.0,2.8,Cypress,16.13,False,0.0,0.0,0.0,1
|
||||
CY,1,7,6,66,866.5,10.0,2.8,Cypress,16.13,False,0.0,0.0,0.0,1
|
||||
CY,1,9,6,66,867.5,10.0,2.8,Cypress,16.13,False,0.0,0.0,0.0,1
|
||||
CZ,1,1,6,66,863.5,10.0,2.8,Czech Republic,16.13,False,0.0,0.0,0.0,1
|
||||
CZ,1,3,6,66,864.5,10.0,2.8,Czech Republic,16.13,False,0.0,0.0,0.0,1
|
||||
CZ,1,5,6,66,865.5,10.0,2.8,Czech Republic,16.13,False,0.0,0.0,0.0,1
|
||||
CZ,1,7,6,66,866.5,10.0,2.8,Czech Republic,16.13,False,0.0,0.0,0.0,1
|
||||
CZ,1,9,6,66,867.5,10.0,2.8,Czech Republic,16.13,False,0.0,0.0,0.0,1
|
||||
DD,1,1,6,66,863.5,10.0,2.8,Germany,16.13,False,0.0,0.0,0.0,1
|
||||
DD,1,3,6,66,864.5,10.0,2.8,Germany,16.13,False,0.0,0.0,0.0,1
|
||||
DD,1,5,6,66,865.5,10.0,2.8,Germany,16.13,False,0.0,0.0,0.0,1
|
||||
DD,1,7,6,66,866.5,10.0,2.8,Germany,16.13,False,0.0,0.0,0.0,1
|
||||
DD,1,9,6,66,867.5,10.0,2.8,Germany,16.13,False,0.0,0.0,0.0,1
|
||||
DK,1,1,6,66,863.5,10.0,2.8,Denmark,16.13,False,0.0,0.0,0.0,1
|
||||
DK,1,3,6,66,864.5,10.0,2.8,Denmark,16.13,False,0.0,0.0,0.0,1
|
||||
DK,1,5,6,66,865.5,10.0,2.8,Denmark,16.13,False,0.0,0.0,0.0,1
|
||||
DK,1,7,6,66,866.5,10.0,2.8,Denmark,16.13,False,0.0,0.0,0.0,1
|
||||
DK,1,9,6,66,867.5,10.0,2.8,Denmark,16.13,False,0.0,0.0,0.0,1
|
||||
EE,1,1,6,66,863.5,10.0,2.8,Estonia,16.13,False,0.0,0.0,0.0,1
|
||||
EE,1,3,6,66,864.5,10.0,2.8,Estonia,16.13,False,0.0,0.0,0.0,1
|
||||
EE,1,5,6,66,865.5,10.0,2.8,Estonia,16.13,False,0.0,0.0,0.0,1
|
||||
EE,1,7,6,66,866.5,10.0,2.8,Estonia,16.13,False,0.0,0.0,0.0,1
|
||||
EE,1,9,6,66,867.5,10.0,2.8,Estonia,16.13,False,0.0,0.0,0.0,1
|
||||
ES,1,1,6,66,863.5,10.0,2.8,Spain,16.13,False,0.0,0.0,0.0,1
|
||||
ES,1,3,6,66,864.5,10.0,2.8,Spain,16.13,False,0.0,0.0,0.0,1
|
||||
ES,1,5,6,66,865.5,10.0,2.8,Spain,16.13,False,0.0,0.0,0.0,1
|
||||
ES,1,7,6,66,866.5,10.0,2.8,Spain,16.13,False,0.0,0.0,0.0,1
|
||||
ES,1,9,6,66,867.5,10.0,2.8,Spain,16.13,False,0.0,0.0,0.0,1
|
||||
EU,1,1,6,66,863.5,10.0,2.8,EU,16.13,False,0.0,0.0,0.0,1
|
||||
EU,1,3,6,66,864.5,10.0,2.8,EU,16.13,False,0.0,0.0,0.0,1
|
||||
EU,1,5,6,66,865.5,10.0,2.8,EU,16.13,False,0.0,0.0,0.0,1
|
||||
EU,1,7,6,66,866.5,10.0,2.8,EU,16.13,False,0.0,0.0,0.0,1
|
||||
EU,1,9,6,66,867.5,10.0,2.8,EU,16.13,False,0.0,0.0,0.0,1
|
||||
FI,1,1,6,66,863.5,10.0,2.8,Finland,16.13,False,0.0,0.0,0.0,1
|
||||
FI,1,3,6,66,864.5,10.0,2.8,Finland,16.13,False,0.0,0.0,0.0,1
|
||||
FI,1,5,6,66,865.5,10.0,2.8,Finland,16.13,False,0.0,0.0,0.0,1
|
||||
FI,1,7,6,66,866.5,10.0,2.8,Finland,16.13,False,0.0,0.0,0.0,1
|
||||
FI,1,9,6,66,867.5,10.0,2.8,Finland,16.13,False,0.0,0.0,0.0,1
|
||||
FI,1,33,30,77,917.9,10.0,2.8,Finland,16.13,False,0.0,0.0,0.0,1
|
||||
FI,1,35,30,77,918.9,10.0,2.8,Finland,16.13,False,0.0,0.0,0.0,1
|
||||
FL,1,1,6,66,863.5,10.0,2.8,Liechtenstein,16.13,False,0.0,0.0,0.0,1
|
||||
FL,1,3,6,66,864.5,10.0,2.8,Liechtenstein,16.13,False,0.0,0.0,0.0,1
|
||||
FL,1,5,6,66,865.5,10.0,2.8,Liechtenstein,16.13,False,0.0,0.0,0.0,1
|
||||
FL,1,7,6,66,866.5,10.0,2.8,Liechtenstein,16.13,False,0.0,0.0,0.0,1
|
||||
FL,1,9,6,66,867.5,10.0,2.8,Liechtenstein,16.13,False,0.0,0.0,0.0,1
|
||||
FR,1,1,6,66,863.5,10.0,2.8,France,16.13,False,0.0,0.0,0.0,1
|
||||
FR,1,3,6,66,864.5,10.0,2.8,France,16.13,False,0.0,0.0,0.0,1
|
||||
FR,1,5,6,66,865.5,10.0,2.8,France,16.13,False,0.0,0.0,0.0,1
|
||||
FR,1,7,6,66,866.5,10.0,2.8,France,16.13,False,0.0,0.0,0.0,1
|
||||
FR,1,9,6,66,867.5,10.0,2.8,France,16.13,False,0.0,0.0,0.0,1
|
||||
FR,1,33,30,77,917.9,10.0,2.8,France,16.13,False,0.0,0.0,0.0,1
|
||||
FR,1,35,30,77,918.9,10.0,2.8,France,16.13,False,0.0,0.0,0.0,1
|
||||
GR,1,1,6,66,863.5,10.0,2.8,Greece,16.13,False,0.0,0.0,0.0,1
|
||||
GR,1,3,6,66,864.5,10.0,2.8,Greece,16.13,False,0.0,0.0,0.0,1
|
||||
GR,1,5,6,66,865.5,10.0,2.8,Greece,16.13,False,0.0,0.0,0.0,1
|
||||
GR,1,7,6,66,866.5,10.0,2.8,Greece,16.13,False,0.0,0.0,0.0,1
|
||||
GR,1,9,6,66,867.5,10.0,2.8,Greece,16.13,False,0.0,0.0,0.0,1
|
||||
HR,1,1,6,66,863.5,10.0,2.8,Croatia,16.13,False,0.0,0.0,0.0,1
|
||||
HR,1,3,6,66,864.5,10.0,2.8,Croatia,16.13,False,0.0,0.0,0.0,1
|
||||
HR,1,5,6,66,865.5,10.0,2.8,Croatia,16.13,False,0.0,0.0,0.0,1
|
||||
HR,1,7,6,66,866.5,10.0,2.8,Croatia,16.13,False,0.0,0.0,0.0,1
|
||||
HR,1,9,6,66,867.5,10.0,2.8,Croatia,16.13,False,0.0,0.0,0.0,1
|
||||
HU,1,1,6,66,863.5,10.0,2.8,Hungary,16.13,False,0.0,0.0,0.0,1
|
||||
HU,1,3,6,66,864.5,10.0,2.8,Hungary,16.13,False,0.0,0.0,0.0,1
|
||||
HU,1,5,6,66,865.5,10.0,2.8,Hungary,16.13,False,0.0,0.0,0.0,1
|
||||
HU,1,7,6,66,866.5,10.0,2.8,Hungary,16.13,False,0.0,0.0,0.0,1
|
||||
HU,1,9,6,66,867.5,10.0,2.8,Hungary,16.13,False,0.0,0.0,0.0,1
|
||||
IE,1,1,6,66,863.5,10.0,2.8,Ireland,16.13,False,0.0,0.0,0.0,1
|
||||
IE,1,3,6,66,864.5,10.0,2.8,Ireland,16.13,False,0.0,0.0,0.0,1
|
||||
IE,1,5,6,66,865.5,10.0,2.8,Ireland,16.13,False,0.0,0.0,0.0,1
|
||||
IE,1,7,6,66,866.5,10.0,2.8,Ireland,16.13,False,0.0,0.0,0.0,1
|
||||
IE,1,9,6,66,867.5,10.0,2.8,Ireland,16.13,False,0.0,0.0,0.0,1
|
||||
IE,1,31,30,77,916.9,10.0,2.8,Ireland,16.13,False,0.0,0.0,0.0,1
|
||||
IE,1,33,30,77,917.9,10.0,2.8,Ireland,16.13,False,0.0,0.0,0.0,1
|
||||
IE,1,35,30,77,918.9,10.0,2.8,Ireland,16.13,False,0.0,0.0,0.0,1
|
||||
IN,1,5,6,66,865.5,10.0,2.8,India,16.13,False,0.0,0.0,0.0,1
|
||||
IN,1,7,6,66,866.5,10.0,2.8,India,16.13,False,0.0,0.0,0.0,1
|
||||
IN,1,9,6,66,867.5,10.0,2.8,India,16.13,False,0.0,0.0,0.0,1
|
||||
IS,1,1,6,66,863.5,10.0,2.8,Iceland,16.13,False,0.0,0.0,0.0,1
|
||||
IS,1,3,6,66,864.5,10.0,2.8,Iceland,16.13,False,0.0,0.0,0.0,1
|
||||
IS,1,5,6,66,865.5,10.0,2.8,Iceland,16.13,False,0.0,0.0,0.0,1
|
||||
IS,1,7,6,66,866.5,10.0,2.8,Iceland,16.13,False,0.0,0.0,0.0,1
|
||||
IS,1,9,6,66,867.5,10.0,2.8,Iceland,16.13,False,0.0,0.0,0.0,1
|
||||
IS,1,31,30,77,916.9,10.0,2.8,Iceland,16.13,False,0.0,0.0,0.0,1
|
||||
IS,1,33,30,77,917.9,10.0,2.8,Iceland,16.13,False,0.0,0.0,0.0,1
|
||||
IS,1,35,30,77,918.9,10.0,2.8,Iceland,16.13,False,0.0,0.0,0.0,1
|
||||
IT,1,1,6,66,863.5,10.0,2.8,Italy,16.13,False,0.0,0.0,0.0,1
|
||||
IT,1,3,6,66,864.5,10.0,2.8,Italy,16.13,False,0.0,0.0,0.0,1
|
||||
IT,1,5,6,66,865.5,10.0,2.8,Italy,16.13,False,0.0,0.0,0.0,1
|
||||
IT,1,7,6,66,866.5,10.0,2.8,Italy,16.13,False,0.0,0.0,0.0,1
|
||||
IT,1,9,6,66,867.5,10.0,2.8,Italy,16.13,False,0.0,0.0,0.0,1
|
||||
IT,1,33,30,77,917.9,10.0,2.8,Italy,16.13,False,0.0,0.0,0.0,1
|
||||
IT,1,35,30,77,918.9,10.0,2.8,Italy,16.13,False,0.0,0.0,0.0,1
|
||||
JP,1,9,8,73,921.0,10.0,10.0,Japan,16.0,True,2.0,2.0,100.0,1
|
||||
JP,1,13,8,73,923.0,10.0,10.0,Japan,16.0,True,2.0,2.0,100.0,1
|
||||
JP,1,15,8,73,924.0,10.0,10.0,Japan,16.0,True,2.0,2.0,100.0,1
|
||||
JP,1,17,8,73,925.0,10.0,10.0,Japan,16.0,True,2.0,2.0,100.0,1
|
||||
JP,1,19,8,73,926.0,10.0,10.0,Japan,16.0,True,2.0,2.0,100.0,1
|
||||
JP,1,21,8,73,927.0,10.0,10.0,Japan,16.0,True,2.0,2.0,100.0,1
|
||||
JP,2,2,9,64,923.5,10.0,10.0,Japan,16.0,True,2.0,2.0,100.0,1
|
||||
JP,2,4,10,64,924.5,10.0,10.0,Japan,16.0,True,2.0,2.0,100.0,1
|
||||
JP,2,6,9,64,925.5,10.0,10.0,Japan,16.0,True,2.0,2.0,100.0,1
|
||||
JP,2,8,10,64,926.5,10.0,10.0,Japan,16.0,True,2.0,2.0,100.0,1
|
||||
JP,4,36,11,65,924.5,10.0,10.0,Japan,16.0,True,2.0,2.0,100.0,1
|
||||
JP,4,38,12,65,925.5,10.0,10.0,Japan,16.0,True,2.0,2.0,100.0,1
|
||||
KE,1,1,6,66,863.5,10.0,2.8,Kenya,16.13,False,0.0,0.0,0.0,1
|
||||
KE,1,3,6,66,864.5,10.0,2.8,Kenya,16.13,False,0.0,0.0,0.0,1
|
||||
KE,1,5,6,66,865.5,10.0,2.8,Kenya,16.13,False,0.0,0.0,0.0,1
|
||||
KE,1,7,6,66,866.5,10.0,2.8,Kenya,16.13,False,0.0,0.0,0.0,1
|
||||
KE,1,9,6,66,867.5,10.0,2.8,Kenya,16.13,False,0.0,0.0,0.0,1
|
||||
KR,1,1,14,74,918.0,100.0,100.0,South Korea,4.77,False,50.0,0.0,4000.0,1
|
||||
KR,1,3,14,74,919.0,100.0,100.0,South Korea,4.77,False,50.0,0.0,4000.0,1
|
||||
KR,1,5,14,74,920.0,100.0,100.0,South Korea,4.77,False,50.0,0.0,4000.0,1
|
||||
KR,1,7,14,74,921.0,100.0,100.0,South Korea,4.77,False,50.0,0.0,4000.0,1
|
||||
KR,1,9,14,74,922.0,100.0,100.0,South Korea,10.0,False,50.0,0.0,4000.0,1
|
||||
KR,1,11,14,74,923.0,100.0,100.0,South Korea,10.0,False,50.0,0.0,4000.0,1
|
||||
KR,2,2,15,75,918.5,100.0,100.0,South Korea,4.77,False,50.0,0.0,4000.0,1
|
||||
KR,2,6,15,75,920.5,100.0,100.0,South Korea,4.77,False,50.0,0.0,4000.0,1
|
||||
KR,2,10,15,75,922.5,100.0,100.0,South Korea,10.0,False,50.0,0.0,4000.0,1
|
||||
KR,4,8,16,76,921.5,100.0,100.0,South Korea,4.77,False,50.0,0.0,4000.0,1
|
||||
KR,1,18,14,74,926.5,100.0,100.0,South Korea,17.0,False,0.264,0.0,220.0,0
|
||||
KR,1,20,14,74,927.5,100.0,100.0,South Korea,17.0,False,0.264,0.0,220.0,0
|
||||
KR,1,22,14,74,928.5,100.0,100.0,South Korea,17.0,False,0.264,0.0,220.0,0
|
||||
KR,1,24,14,74,929.5,100.0,100.0,South Korea,17.0,False,0.264,0.0,220.0,0
|
||||
KR,2,19,15,75,927.0,100.0,100.0,South Korea,20.0,False,0.264,0.0,220.0,0
|
||||
KR,2,23,15,75,929.0,100.0,100.0,South Korea,20.0,False,0.264,0.0,220.0,0
|
||||
LT,1,1,6,66,863.5,10.0,2.8,Lithuania,16.13,False,0.0,0.0,0.0,1
|
||||
LT,1,3,6,66,864.5,10.0,2.8,Lithuania,16.13,False,0.0,0.0,0.0,1
|
||||
LT,1,5,6,66,865.5,10.0,2.8,Lithuania,16.13,False,0.0,0.0,0.0,1
|
||||
LT,1,7,6,66,866.5,10.0,2.8,Lithuania,16.13,False,0.0,0.0,0.0,1
|
||||
LT,1,9,6,66,867.5,10.0,2.8,Lithuania,16.13,False,0.0,0.0,0.0,1
|
||||
LT,1,31,30,77,916.9,10.0,2.8,Lithuania,16.13,False,0.0,0.0,0.0,1
|
||||
LT,1,33,30,77,917.9,10.0,2.8,Lithuania,16.13,False,0.0,0.0,0.0,1
|
||||
LT,1,35,30,77,918.9,10.0,2.8,Lithuania,16.13,False,0.0,0.0,0.0,1
|
||||
LU,1,1,6,66,863.5,10.0,2.8,Luxembourg,16.13,False,0.0,0.0,0.0,1
|
||||
LU,1,3,6,66,864.5,10.0,2.8,Luxembourg,16.13,False,0.0,0.0,0.0,1
|
||||
LU,1,5,6,66,865.5,10.0,2.8,Luxembourg,16.13,False,0.0,0.0,0.0,1
|
||||
LU,1,7,6,66,866.5,10.0,2.8,Luxembourg,16.13,False,0.0,0.0,0.0,1
|
||||
LU,1,9,6,66,867.5,10.0,2.8,Luxembourg,16.13,False,0.0,0.0,0.0,1
|
||||
LV,1,1,6,66,863.5,10.0,2.8,Latvia,16.13,False,0.0,0.0,0.0,1
|
||||
LV,1,3,6,66,864.5,10.0,2.8,Latvia,16.13,False,0.0,0.0,0.0,1
|
||||
LV,1,5,6,66,865.5,10.0,2.8,Latvia,16.13,False,0.0,0.0,0.0,1
|
||||
LV,1,7,6,66,866.5,10.0,2.8,Latvia,16.13,False,0.0,0.0,0.0,1
|
||||
LV,1,9,6,66,867.5,10.0,2.8,Latvia,16.13,False,0.0,0.0,0.0,1
|
||||
MD,1,1,6,66,863.5,10.0,2.8,Moldova,16.13,False,0.0,0.0,0.0,1
|
||||
MD,1,3,6,66,864.5,10.0,2.8,Moldova,16.13,False,0.0,0.0,0.0,1
|
||||
MD,1,5,6,66,865.5,10.0,2.8,Moldova,16.13,False,0.0,0.0,0.0,1
|
||||
MD,1,7,6,66,866.5,10.0,2.8,Moldova,16.13,False,0.0,0.0,0.0,1
|
||||
MD,1,9,6,66,867.5,10.0,2.8,Moldova,16.13,False,0.0,0.0,0.0,1
|
||||
MD,1,31,30,77,916.9,10.0,2.8,Moldova,16.13,False,0.0,0.0,0.0,1
|
||||
MD,1,33,30,77,917.9,10.0,2.8,Moldova,16.13,False,0.0,0.0,0.0,1
|
||||
MD,1,35,30,77,918.9,10.0,2.8,Moldova,16.13,False,0.0,0.0,0.0,1
|
||||
MK,1,1,6,66,863.5,10.0,2.8,North Macedonia,16.13,False,0.0,0.0,0.0,1
|
||||
MK,1,3,6,66,864.5,10.0,2.8,North Macedonia,16.13,False,0.0,0.0,0.0,1
|
||||
MK,1,5,6,66,865.5,10.0,2.8,North Macedonia,16.13,False,0.0,0.0,0.0,1
|
||||
MK,1,7,6,66,866.5,10.0,2.8,North Macedonia,16.13,False,0.0,0.0,0.0,1
|
||||
MK,1,9,6,66,867.5,10.0,2.8,North Macedonia,16.13,False,0.0,0.0,0.0,1
|
||||
MK,1,31,30,77,916.9,10.0,2.8,North Macedonia,16.13,False,0.0,0.0,0.0,1
|
||||
MK,1,33,30,77,917.9,10.0,2.8,North Macedonia,16.13,False,0.0,0.0,0.0,1
|
||||
MK,1,35,30,77,918.9,10.0,2.8,North Macedonia,16.13,False,0.0,0.0,0.0,1
|
||||
MT,1,1,6,66,863.5,10.0,2.8,Malta,16.13,False,0.0,0.0,0.0,1
|
||||
MT,1,3,6,66,864.5,10.0,2.8,Malta,16.13,False,0.0,0.0,0.0,1
|
||||
MT,1,5,6,66,865.5,10.0,2.8,Malta,16.13,False,0.0,0.0,0.0,1
|
||||
MT,1,7,6,66,866.5,10.0,2.8,Malta,16.13,False,0.0,0.0,0.0,1
|
||||
MT,1,9,6,66,867.5,10.0,2.8,Malta,16.13,False,0.0,0.0,0.0,1
|
||||
NL,1,1,6,66,863.5,10.0,2.8,Netherlands,16.13,False,0.0,0.0,0.0,1
|
||||
NL,1,3,6,66,864.5,10.0,2.8,Netherlands,16.13,False,0.0,0.0,0.0,1
|
||||
NL,1,5,6,66,865.5,10.0,2.8,Netherlands,16.13,False,0.0,0.0,0.0,1
|
||||
NL,1,7,6,66,866.5,10.0,2.8,Netherlands,16.13,False,0.0,0.0,0.0,1
|
||||
NL,1,9,6,66,867.5,10.0,2.8,Netherlands,16.13,False,0.0,0.0,0.0,1
|
||||
NO,1,1,6,66,863.5,10.0,2.8,Norway,16.13,False,0.0,0.0,0.0,1
|
||||
NO,1,3,6,66,864.5,10.0,2.8,Norway,16.13,False,0.0,0.0,0.0,1
|
||||
NO,1,5,6,66,865.5,10.0,2.8,Norway,16.13,False,0.0,0.0,0.0,1
|
||||
NO,1,7,6,66,866.5,10.0,2.8,Norway,16.13,False,0.0,0.0,0.0,1
|
||||
NO,1,9,6,66,867.5,10.0,2.8,Norway,16.13,False,0.0,0.0,0.0,1
|
||||
NZ,1,27,26,68,915.5,100.0,100.0,New Zealand,30.0,False,0.0,0.0,0.0,1
|
||||
NZ,1,29,26,68,916.5,100.0,100.0,New Zealand,30.0,False,0.0,0.0,0.0,1
|
||||
NZ,1,31,26,68,917.5,100.0,100.0,New Zealand,30.0,False,0.0,0.0,0.0,1
|
||||
NZ,1,33,26,68,918.5,100.0,100.0,New Zealand,30.0,False,0.0,0.0,0.0,1
|
||||
NZ,1,35,26,68,919.5,100.0,100.0,New Zealand,30.0,False,0.0,0.0,0.0,1
|
||||
NZ,1,37,26,68,920.5,100.0,100.0,New Zealand,36.0,False,0.0,0.0,0.0,1
|
||||
NZ,1,39,26,68,921.5,100.0,100.0,New Zealand,36.0,False,0.0,0.0,0.0,1
|
||||
NZ,1,41,26,68,922.5,100.0,100.0,New Zealand,36.0,False,0.0,0.0,0.0,1
|
||||
NZ,1,43,26,68,923.5,100.0,100.0,New Zealand,36.0,False,0.0,0.0,0.0,1
|
||||
NZ,1,45,26,68,924.5,100.0,100.0,New Zealand,36.0,False,0.0,0.0,0.0,1
|
||||
NZ,1,47,26,68,925.5,100.0,100.0,New Zealand,36.0,False,0.0,0.0,0.0,1
|
||||
NZ,1,49,26,68,926.5,100.0,100.0,New Zealand,36.0,False,0.0,0.0,0.0,1
|
||||
NZ,1,51,26,68,927.5,100.0,100.0,New Zealand,36.0,False,0.0,0.0,0.0,1
|
||||
NZ,2,30,27,69,917.0,100.0,100.0,New Zealand,30.0,False,0.0,0.0,0.0,1
|
||||
NZ,2,34,27,69,919.0,100.0,100.0,New Zealand,30.0,False,0.0,0.0,0.0,1
|
||||
NZ,2,38,27,69,921.0,100.0,100.0,New Zealand,36.0,False,0.0,0.0,0.0,1
|
||||
NZ,2,42,27,69,923.0,100.0,100.0,New Zealand,36.0,False,0.0,0.0,0.0,1
|
||||
NZ,2,46,27,69,925.0,100.0,100.0,New Zealand,36.0,False,0.0,0.0,0.0,1
|
||||
NZ,2,50,27,69,927.0,100.0,100.0,New Zealand,36.0,False,0.0,0.0,0.0,1
|
||||
NZ,4,32,28,70,918.0,100.0,100.0,New Zealand,30.0,False,0.0,0.0,0.0,1
|
||||
NZ,4,40,28,70,922.0,100.0,100.0,New Zealand,36.0,False,0.0,0.0,0.0,1
|
||||
NZ,4,48,28,70,926.0,100.0,100.0,New Zealand,36.0,False,0.0,0.0,0.0,1
|
||||
NZ,8,44,29,71,924.0,100.0,100.0,New Zealand,36.0,False,0.0,0.0,0.0,1
|
||||
PL,1,1,6,66,863.5,10.0,2.8,Poland,16.13,False,0.0,0.0,0.0,1
|
||||
PL,1,3,6,66,864.5,10.0,2.8,Poland,16.13,False,0.0,0.0,0.0,1
|
||||
PL,1,5,6,66,865.5,10.0,2.8,Poland,16.13,False,0.0,0.0,0.0,1
|
||||
PL,1,7,6,66,866.5,10.0,2.8,Poland,16.13,False,0.0,0.0,0.0,1
|
||||
PL,1,9,6,66,867.5,10.0,2.8,Poland,16.13,False,0.0,0.0,0.0,1
|
||||
PT,1,1,6,66,863.5,10.0,2.8,Portugal,16.13,False,0.0,0.0,0.0,1
|
||||
PT,1,3,6,66,864.5,10.0,2.8,Portugal,16.13,False,0.0,0.0,0.0,1
|
||||
PT,1,5,6,66,865.5,10.0,2.8,Portugal,16.13,False,0.0,0.0,0.0,1
|
||||
PT,1,7,6,66,866.5,10.0,2.8,Portugal,16.13,False,0.0,0.0,0.0,1
|
||||
PT,1,9,6,66,867.5,10.0,2.8,Portugal,16.13,False,0.0,0.0,0.0,1
|
||||
PT,1,31,30,77,916.9,10.0,2.8,Portugal,16.13,False,0.0,0.0,0.0,1
|
||||
PT,1,33,30,77,917.9,10.0,2.8,Portugal,16.13,False,0.0,0.0,0.0,1
|
||||
PT,1,35,30,77,918.9,10.0,2.8,Portugal,16.13,False,0.0,0.0,0.0,1
|
||||
RO,1,1,6,66,863.5,10.0,2.8,Romania,16.13,False,0.0,0.0,0.0,1
|
||||
RO,1,3,6,66,864.5,10.0,2.8,Romania,16.13,False,0.0,0.0,0.0,1
|
||||
RO,1,5,6,66,865.5,10.0,2.8,Romania,16.13,False,0.0,0.0,0.0,1
|
||||
RO,1,7,6,66,866.5,10.0,2.8,Romania,16.13,False,0.0,0.0,0.0,1
|
||||
RO,1,9,6,66,867.5,10.0,2.8,Romania,16.13,False,0.0,0.0,0.0,1
|
||||
SE,1,1,6,66,863.5,10.0,2.8,Sweden,16.13,False,0.0,0.0,0.0,1
|
||||
SE,1,3,6,66,864.5,10.0,2.8,Sweden,16.13,False,0.0,0.0,0.0,1
|
||||
SE,1,5,6,66,865.5,10.0,2.8,Sweden,16.13,False,0.0,0.0,0.0,1
|
||||
SE,1,7,6,66,866.5,10.0,2.8,Sweden,16.13,False,0.0,0.0,0.0,1
|
||||
SE,1,9,6,66,867.5,10.0,2.8,Sweden,16.13,False,0.0,0.0,0.0,1
|
||||
SE,1,31,30,77,916.9,10.0,2.8,Sweden,16.13,False,0.0,0.0,0.0,1
|
||||
SE,1,33,30,77,917.9,10.0,2.8,Sweden,16.13,False,0.0,0.0,0.0,1
|
||||
SE,1,35,30,77,918.9,10.0,2.8,Sweden,16.13,False,0.0,0.0,0.0,1
|
||||
SG,1,7,17,66,866.5,2.77,2.77,Singapore,29.14,False,100.0,0.0,1000.0,1
|
||||
SG,1,9,17,66,867.5,2.77,2.77,Singapore,29.14,False,100.0,0.0,1000.0,1
|
||||
SG,1,11,17,66,868.5,2.77,2.77,Singapore,29.14,False,100.0,0.0,1000.0,1
|
||||
SG,2,10,19,67,868.0,2.77,2.77,Singapore,29.14,False,100.0,0.0,1000.0,1
|
||||
SG,1,37,18,68,920.5,100.0,100.0,Singapore,22.15,False,0.0,0.0,0.0,1
|
||||
SG,1,39,18,68,921.5,100.0,100.0,Singapore,22.15,False,0.0,0.0,0.0,1
|
||||
SG,1,41,18,68,922.5,100.0,100.0,Singapore,22.15,False,0.0,0.0,0.0,1
|
||||
SG,1,43,18,68,923.5,100.0,100.0,Singapore,22.15,False,0.0,0.0,0.0,1
|
||||
SG,1,45,18,68,924.5,100.0,100.0,Singapore,22.15,False,0.0,0.0,0.0,1
|
||||
SG,2,38,20,69,921.0,100.0,100.0,Singapore,22.15,False,0.0,0.0,0.0,1
|
||||
SG,2,42,20,69,923.0,100.0,100.0,Singapore,22.15,False,0.0,0.0,0.0,1
|
||||
SG,4,40,21,70,922.0,100.0,100.0,Singapore,22.15,False,0.0,0.0,0.0,1
|
||||
SI,1,1,6,66,863.5,10.0,2.8,Slovenia,16.13,False,0.0,0.0,0.0,1
|
||||
SI,1,3,6,66,864.5,10.0,2.8,Slovenia,16.13,False,0.0,0.0,0.0,1
|
||||
SI,1,5,6,66,865.5,10.0,2.8,Slovenia,16.13,False,0.0,0.0,0.0,1
|
||||
SI,1,7,6,66,866.5,10.0,2.8,Slovenia,16.13,False,0.0,0.0,0.0,1
|
||||
SI,1,9,6,66,867.5,10.0,2.8,Slovenia,16.13,False,0.0,0.0,0.0,1
|
||||
SI,1,31,30,77,916.9,10.0,2.8,Slovenia,16.13,False,0.0,0.0,0.0,1
|
||||
SI,1,33,30,77,917.9,10.0,2.8,Slovenia,16.13,False,0.0,0.0,0.0,1
|
||||
SI,1,35,30,77,918.9,10.0,2.8,Slovenia,16.13,False,0.0,0.0,0.0,1
|
||||
SK,1,1,6,66,863.5,10.0,2.8,Slovakia,16.13,False,0.0,0.0,0.0,1
|
||||
SK,1,3,6,66,864.5,10.0,2.8,Slovakia,16.13,False,0.0,0.0,0.0,1
|
||||
SK,1,5,6,66,865.5,10.0,2.8,Slovakia,16.13,False,0.0,0.0,0.0,1
|
||||
SK,1,7,6,66,866.5,10.0,2.8,Slovakia,16.13,False,0.0,0.0,0.0,1
|
||||
SK,1,9,6,66,867.5,10.0,2.8,Slovakia,16.13,False,0.0,0.0,0.0,1
|
||||
TR,1,1,6,66,863.5,10.0,2.8,Turkey,16.13,False,0.0,0.0,0.0,1
|
||||
TR,1,3,6,66,864.5,10.0,2.8,Turkey,16.13,False,0.0,0.0,0.0,1
|
||||
TR,1,5,6,66,865.5,10.0,2.8,Turkey,16.13,False,0.0,0.0,0.0,1
|
||||
TR,1,7,6,66,866.5,10.0,2.8,Turkey,16.13,False,0.0,0.0,0.0,1
|
||||
TR,1,9,6,66,867.5,10.0,2.8,Turkey,16.13,False,0.0,0.0,0.0,1
|
||||
TR,1,33,30,77,917.9,10.0,2.8,Turkey,16.13,False,0.0,0.0,0.0,1
|
||||
TR,1,35,30,77,918.9,10.0,2.8,Turkey,16.13,False,0.0,0.0,0.0,1
|
||||
UK,1,1,6,66,863.5,10.0,2.8,United Kingdom,16.13,False,0.0,0.0,0.0,1
|
||||
UK,1,3,6,66,864.5,10.0,2.8,United Kingdom,16.13,False,0.0,0.0,0.0,1
|
||||
UK,1,5,6,66,865.5,10.0,2.8,United Kingdom,16.13,False,0.0,0.0,0.0,1
|
||||
UK,1,7,6,66,866.5,10.0,2.8,United Kingdom,16.13,False,0.0,0.0,0.0,1
|
||||
UK,1,9,6,66,867.5,10.0,2.8,United Kingdom,16.13,False,0.0,0.0,0.0,1
|
||||
UK,1,33,30,77,917.9,10.0,2.8,United Kingdom,16.13,False,0.0,0.0,0.0,1
|
||||
UK,1,35,30,77,918.9,10.0,2.8,United Kingdom,16.13,False,0.0,0.0,0.0,1
|
||||
US,1,1,1,68,902.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,0
|
||||
US,1,3,1,68,903.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,5,1,68,904.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,7,1,68,905.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,9,1,68,906.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,11,1,68,907.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,13,1,68,908.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,15,1,68,909.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,17,1,68,910.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,19,1,68,911.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,21,1,68,912.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,23,1,68,913.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,25,1,68,914.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,27,1,68,915.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,29,1,68,916.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,31,1,68,917.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,33,1,68,918.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,35,1,68,919.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,37,1,68,920.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,39,1,68,921.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,41,1,68,922.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,43,1,68,923.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,45,1,68,924.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,47,1,68,925.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,49,1,68,926.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,1,51,1,68,927.5,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,2,2,2,69,903.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,0
|
||||
US,2,6,2,69,905.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,2,10,2,69,907.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,2,14,2,69,909.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,2,18,2,69,911.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,2,22,2,69,913.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,2,26,2,69,915.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,2,30,2,69,917.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,2,34,2,69,919.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,2,38,2,69,921.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,2,42,2,69,923.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,2,46,2,69,925.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,2,50,2,69,927.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,4,8,3,70,906.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,4,16,3,70,910.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,4,24,3,70,914.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,4,32,3,70,918.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,4,40,3,70,922.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,4,48,3,70,926.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,8,12,4,71,908.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,8,28,4,71,916.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
US,8,44,4,71,924.0,100.0,100.0,USA,36.0,False,0.0,0.0,0.0,1
|
||||
|
@@ -1,36 +0,0 @@
|
||||
From 6c0733b125434b846bec2a744a812c890c82518d Mon Sep 17 00:00:00 2001
|
||||
From: Takura Mapani <takura.mapani@morsemicro.com>
|
||||
Date: Tue, 19 Sep 2023 03:25:45 +0000
|
||||
Subject: [PATCH] Merged in APP-1819_add_usable_by_bannf_column (pull request
|
||||
#17)
|
||||
|
||||
APP-1819 add a new column usable bannfC for the csv output
|
||||
|
||||
* added new column usable bannfC for the csv output
|
||||
|
||||
|
||||
Approved-by: Arien Judge
|
||||
Approved-by: David Goodall
|
||||
Approved-by: Matthew Forgie
|
||||
Approved-by: Thomas Flynn
|
||||
Approved-by: Matt Jervis
|
||||
---
|
||||
regdbconverter.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/regdbconverter.py b/regdbconverter.py
|
||||
index 883f281..4bd44b1 100755
|
||||
--- a/regdbconverter.py
|
||||
+++ b/regdbconverter.py
|
||||
@@ -311,7 +311,7 @@ def _output_channels_python(channels, out_file, args):
|
||||
|
||||
def _output_channels_csv(channels, out_file, args):
|
||||
fields = ['country_code', 'bw', 's1g_chan', 's1g_op_class', 'global_op_class', 'centre_freq_mhz', 'duty_cycle_ap', 'duty_cycle_sta',
|
||||
- 'country', 'tx_power_max', 'duty_cycle_omit_ctrl_resp', 'pkt_spacing_ms', 'airtime_min_ms', 'airtime_max_ms']
|
||||
+ 'country', 'tx_power_max', 'duty_cycle_omit_ctrl_resp', 'pkt_spacing_ms', 'airtime_min_ms', 'airtime_max_ms', 'usable_banff_c']
|
||||
|
||||
dw = DictWriter(out_file, fields, extrasaction='ignore', lineterminator='\n')
|
||||
dw.writeheader()
|
||||
--
|
||||
2.25.1
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
#
|
||||
# Copyright 2022 Morse Micro
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=netifd-morse
|
||||
PKG_RELEASE=1
|
||||
|
||||
PKG_LICENSE:=GPLv2
|
||||
PKG_LICENSE_FILES:=
|
||||
|
||||
PKG_MAINTAINER:=Morse Micro <info@morsemicro.com>
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/netifd-morse
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=Morse Micro HaLow support for netifd
|
||||
DEPENDS:= netifd \
|
||||
+@BUSYBOX_CONFIG_USLEEP +@BUSYBOX_CONFIG_BASE64 +@BUSYBOX_CONFIG_XXD \
|
||||
+kmod-morse +kmod-cfg80211 \
|
||||
+morse-regdb +wpa_event_listener +wpa_supplicant_s1g +hostapd_s1g +morsecli
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
endef
|
||||
|
||||
define Package/netifd-morse/install
|
||||
$(INSTALL_DIR) $(1)/lib/
|
||||
$(INSTALL_DIR) $(1)/etc/uci-defaults
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(CP) ./lib/* $(1)/lib/
|
||||
$(INSTALL_BIN) ./etc/init.d/halow-gpio-reset $(1)/etc/init.d/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,netifd-morse))
|
||||
@@ -1,28 +0,0 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2006-2011 OpenWrt.org
|
||||
|
||||
START=09
|
||||
|
||||
. /lib/functions.sh
|
||||
. /lib/functions/uci-defaults.sh
|
||||
. /lib/functions/system.sh
|
||||
|
||||
boot() {
|
||||
. /lib/functions.sh
|
||||
. /lib/functions/uci-defaults.sh
|
||||
. /lib/functions/system.sh
|
||||
|
||||
board=$(board_name)
|
||||
|
||||
case "$board" in
|
||||
edgecore,eap112)
|
||||
|
||||
echo 486 > /sys/class/gpio/export
|
||||
echo "out" > /sys/class/gpio/gpio486/direction
|
||||
echo 0 > /sys/class/gpio/gpio486/value
|
||||
sleep 1
|
||||
echo "in" > /sys/class/gpio/gpio486/direction
|
||||
echo 486 > /sys/class/gpio/unexport
|
||||
|
||||
esac
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,161 +0,0 @@
|
||||
kill_wait()
|
||||
{
|
||||
local names=$*
|
||||
local count=30
|
||||
|
||||
for pid in $(pidof $names)
|
||||
do
|
||||
kill $pid &> /dev/null
|
||||
done
|
||||
|
||||
while pidof $names &> /dev/null;
|
||||
do
|
||||
usleep 100000
|
||||
let "count--"
|
||||
if [ $count -eq 0 ]
|
||||
then
|
||||
echo "$names failed to terminate normally, force quitting" >&2
|
||||
kill -9 $(pidof $names)
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
return 0
|
||||
}
|
||||
|
||||
_list_phy_interfaces() {
|
||||
local phy="$1"
|
||||
if [ -d "/sys/class/ieee80211/${phy}/device/net" ]; then
|
||||
ls "/sys/class/ieee80211/${phy}/device/net" 2>/dev/null;
|
||||
else
|
||||
ls "/sys/class/ieee80211/${phy}/device" 2>/dev/null | grep net: | sed -e 's,net:,,g'
|
||||
fi
|
||||
}
|
||||
|
||||
list_phy_interfaces() {
|
||||
local phy="$1"
|
||||
|
||||
for dev in $(_list_phy_interfaces "$phy"); do
|
||||
readlink "/sys/class/net/${dev}/phy80211" | grep -q "/${phy}\$" || continue
|
||||
done
|
||||
}
|
||||
|
||||
num_test()
|
||||
{
|
||||
case $1 in
|
||||
''|*[!0-9]*)
|
||||
return 1
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
return 0
|
||||
}
|
||||
|
||||
_get_regulatory() {
|
||||
local _mode=$1
|
||||
local _country=$2
|
||||
local _channel=$3
|
||||
local _op_class=$4
|
||||
|
||||
local dc_min="0.01"
|
||||
local dc_max="100.00"
|
||||
local cc; local bw; local l_op; local g_op;
|
||||
local freq; local dc_ap; local dc_sta;
|
||||
|
||||
oIFS=$IFS
|
||||
HEADER=1
|
||||
while IFS=, read -r cc bw ch l_op g_op freq remainder; do
|
||||
if [ $HEADER = 1 ]; then
|
||||
HEADER=0
|
||||
continue
|
||||
fi
|
||||
num_test $bw
|
||||
[ $? -eq 1 ] && continue
|
||||
num_test $ch
|
||||
[ $? -eq 1 ] && continue
|
||||
num_test $l_op
|
||||
[ $? -eq 1 ] && continue
|
||||
num_test $g_op
|
||||
[ $? -eq 1 ] && continue
|
||||
|
||||
if [ "$cc" == "$_country" ] && [ "$ch" -eq "$_channel" ]; then
|
||||
if [ -z "$_op_class" ]; then
|
||||
halow_bw=$bw
|
||||
center_freq=$freq
|
||||
# If you didn't pass op_class, set it from this data.
|
||||
op_class="$g_op"
|
||||
IFS=$oIFS
|
||||
return 0;
|
||||
elif [ "$l_op" -eq "$_op_class" ] || [ "$g_op" -eq "$_op_class" ]; then
|
||||
halow_bw=$bw
|
||||
center_freq=$freq
|
||||
IFS=$oIFS
|
||||
return 0;
|
||||
fi
|
||||
fi
|
||||
done < /usr/share/morse-regdb/channels.csv
|
||||
|
||||
IFS=$oIFS
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
morse_find_ifname()
|
||||
{
|
||||
for file in "/sys/class/net/wlan"*;
|
||||
do
|
||||
if [ -d "$file"/device/morse ]
|
||||
then
|
||||
ifname=$(basename $file)
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# this function checks if an macaddr is burnt into the device.
|
||||
# if so, returns it, otherwise returns an empty string
|
||||
morse_get_chip_macaddr()
|
||||
{
|
||||
ifname=
|
||||
morse_find_ifname
|
||||
local state=$(cat /sys/class/net/${ifname}/operstate 2>/dev/null)
|
||||
[ $? -ne 0 ] && return
|
||||
|
||||
if [ "$state" == "down" ]; then
|
||||
ip link set ${ifname} up
|
||||
[ $? -ne 0 ] && return
|
||||
fi
|
||||
|
||||
local chip_macaddr="$(morse_cli -i ${ifname} macaddr 2>/dev/null)"
|
||||
[ $? -ne 0 ] && printf ""
|
||||
chip_macaddr=${chip_macaddr##"Chip MAC address: "}
|
||||
|
||||
#make sure (using regex) that the we got a macaddr
|
||||
if [[ "$chip_macaddr" =~ ^\([0-9A-Fa-f]{2}[:]\){5}\([0-9A-Fa-f]{2}\)$ ]]; then
|
||||
[ "$chip_macaddr" = "00:00:00:00:00:00" ] && printf "" || printf "$chip_macaddr"
|
||||
else
|
||||
printf ""
|
||||
fi
|
||||
|
||||
if [ "$state" == "down" ]; then
|
||||
ip link set ${ifname} down
|
||||
fi
|
||||
}
|
||||
|
||||
update_dpp_qrcode()
|
||||
{
|
||||
local uci_changes_path="$(mktemp -d)"
|
||||
local private_key_path=$1
|
||||
#remove ':' from the macaddress
|
||||
local mac_address=$(echo "$2" | sed -r 's/://g')
|
||||
#generate the public key string from the private key.
|
||||
#unfortunately, there is no way to quiet the 'read EC key' messages without redirecting stderr.
|
||||
local pubkey=$(openssl ec -in $private_key_path -pubout -conv_form compressed -outform DER 2> /dev/null | hexdump -e '16/1 "%02x " "\n"' | xxd -r -p | base64 -w0)
|
||||
#save qrcode string into /www
|
||||
qrencode --inline --8bit --type=SVG --output=/tmp/dpp_qrcode.svg "DPP:V:2;M:$mac_address;K:$pubkey;;"
|
||||
#only write if necessary
|
||||
if ! cmp -s /tmp/dpp_qrcode.svg /www/dpp_qrcode.svg; then
|
||||
cp /tmp/dpp_qrcode.svg /www/dpp_qrcode.svg
|
||||
fi
|
||||
rm /tmp/dpp_qrcode.svg
|
||||
}
|
||||
@@ -1,111 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
|
||||
. /lib/functions.sh
|
||||
. /usr/share/libubox/jshn.sh
|
||||
. /lib/netifd/netifd-wireless.sh
|
||||
. /etc/diag.sh
|
||||
|
||||
#returns 0 if config is complete
|
||||
is_config_complete()
|
||||
{
|
||||
[ -z "$encryption" ] && return 1
|
||||
|
||||
#if encryption is sae, check if we have psk
|
||||
if [ "$encryption" = "sae" ]; then
|
||||
[ -z "$psk" ] && return 1
|
||||
fi
|
||||
|
||||
#check if we have ssid
|
||||
[ -z "$ssid" ] && return 1
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
get_uci_section()
|
||||
{
|
||||
local target_iface=$1
|
||||
local dpp_wifi_iface=
|
||||
|
||||
check_interface() {
|
||||
json_get_vars section ifname
|
||||
[ "$ifname" = "$target_iface" ] && [ -n "$section" ] && [ -z "$dpp_wifi_iface" ] && dpp_wifi_iface=$section
|
||||
}
|
||||
|
||||
wireless_status=$(ubus call network.wireless status)
|
||||
|
||||
json_init
|
||||
json_load "$wireless_status"
|
||||
json_get_keys radios
|
||||
|
||||
for radio in $radios; do
|
||||
json_select $radio
|
||||
for_each_interface "sta" check_interface
|
||||
json_select ..
|
||||
done
|
||||
echo "$dpp_wifi_iface"
|
||||
}
|
||||
|
||||
save_and_reload()
|
||||
{
|
||||
logger "Saving Received AP Credentials."
|
||||
local uci_section=$(get_uci_section $iface_name)
|
||||
if [ -z "$uci_section" ]; then
|
||||
logger "FATAL: unable to find the correct wifi interface in configs."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
uci set wireless.$uci_section.encryption="$encryption"
|
||||
|
||||
#if encryption is sae, check if we have psk
|
||||
if [ "$encryption" = "sae" ]; then
|
||||
uci set wireless.$uci_section.key="$psk"
|
||||
fi
|
||||
|
||||
uci set wireless.$uci_section.ssid="$ssid"
|
||||
|
||||
uci set wireless.$uci_section.dpp='0'
|
||||
|
||||
uci commit
|
||||
ubus call service event "{ \"type\": \"config.change\", \"data\": { \"package\": \"wireless\" }}"
|
||||
}
|
||||
|
||||
# Do not name 'config'; will clash with uci functions.
|
||||
do_config() {
|
||||
# convert password from hex string to string.
|
||||
psk="$(echo "$psk" | xxd -r -p)"
|
||||
|
||||
# if the file contains all the necessary stuff, then save and reload.
|
||||
is_config_complete && save_and_reload
|
||||
}
|
||||
|
||||
failed() {
|
||||
set_state dpp_failed
|
||||
}
|
||||
|
||||
finished() {
|
||||
set_state done
|
||||
}
|
||||
|
||||
started() {
|
||||
set_state dpp_started
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
config)
|
||||
do_config
|
||||
;;
|
||||
failed)
|
||||
failed
|
||||
;;
|
||||
finished)
|
||||
finished
|
||||
;;
|
||||
started)
|
||||
started
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {config|failed|finished|started}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,139 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This script is copied and modified from
|
||||
# package/kernel/mac80211/files/lib/wifi/mac80211.sh
|
||||
# and modified (simplified) to work with morse devices.
|
||||
|
||||
append DRIVERS "morse"
|
||||
|
||||
# Find and set $phy for this $device (a wifi-device section name)
|
||||
lookup_phy() {
|
||||
[ -n "$phy" ] && {
|
||||
[ -d /sys/class/ieee80211/$phy ] && return
|
||||
}
|
||||
|
||||
local devpath
|
||||
config_get devpath "$device" path
|
||||
[ -n "$devpath" ] && {
|
||||
phy="$(iwinfo dot11ah phyname "path=$devpath")"
|
||||
[ -n "$phy" ] && return
|
||||
}
|
||||
|
||||
local macaddr="$(config_get "$device" macaddr | tr 'A-Z' 'a-z')"
|
||||
[ -n "$macaddr" ] && {
|
||||
for _phy in /sys/class/ieee80211/*; do
|
||||
[ -e "$_phy" ] || continue
|
||||
|
||||
[ "$macaddr" = "$(cat ${_phy}/macaddress)" ] || continue
|
||||
phy="${_phy##*/}"
|
||||
return
|
||||
done
|
||||
}
|
||||
phy=
|
||||
return
|
||||
}
|
||||
|
||||
# Find and save the phy and macaddr for this $device (a wifi-device section name)
|
||||
find_morse_phy() {
|
||||
local device="$1"
|
||||
|
||||
config_get phy "$device" phy
|
||||
lookup_phy
|
||||
[ -n "$phy" -a -d "/sys/class/ieee80211/$phy" ] || {
|
||||
echo "PHY for wifi device $1 not found"
|
||||
return 1
|
||||
}
|
||||
config_set "$device" phy "$phy"
|
||||
|
||||
config_get macaddr "$device" macaddr
|
||||
[ -z "$macaddr" ] && {
|
||||
config_set "$device" macaddr "$(cat /sys/class/ieee80211/${phy}/macaddress)"
|
||||
}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Set found=1 if the $phy for this $device (a wifi-device section name) is the same as $dev
|
||||
check_morse_device() {
|
||||
config_get phy "$1" phy
|
||||
[ -z "$phy" ] && {
|
||||
find_morse_phy "$1" >/dev/null || return 0
|
||||
config_get phy "$1" phy
|
||||
}
|
||||
[ "$phy" = "$dev" ] && found=1
|
||||
}
|
||||
|
||||
detect_morse() {
|
||||
devidx=0
|
||||
config_load wireless
|
||||
while :; do
|
||||
config_get type "radio$devidx" type
|
||||
[ -n "$type" ] || break
|
||||
devidx=$(($devidx + 1))
|
||||
done
|
||||
|
||||
for _dev in /sys/class/ieee80211/*; do
|
||||
[ -e "$_dev" ] || continue
|
||||
|
||||
# Only configure morse devices.
|
||||
basename "$(readlink -f "$_dev/device/driver/")" | grep '^morse_' || continue
|
||||
|
||||
dev="${_dev##*/}"
|
||||
|
||||
# Skip already configured devices.
|
||||
# The path or macaddr are used to find the corresponding phy.
|
||||
found=0
|
||||
config_foreach check_morse_device wifi-device
|
||||
[ "$found" -gt 0 ] && continue
|
||||
|
||||
path="$(iwinfo dot11ah path "$dev")"
|
||||
if [ -n "$path" ]; then
|
||||
dev_id="set wireless.radio${devidx}.path='$path'"
|
||||
else
|
||||
dev_id="set wireless.radio${devidx}.macaddr=$(cat /sys/class/ieee80211/${dev}/macaddress)"
|
||||
fi
|
||||
|
||||
uci -q batch <<-EOF
|
||||
set wireless.radio${devidx}=wifi-device
|
||||
set wireless.radio${devidx}.type=morse
|
||||
${dev_id}
|
||||
set wireless.radio${devidx}.band=s1g
|
||||
set wireless.radio${devidx}.hwmode=11ah
|
||||
set wireless.radio${devidx}.reconf=0
|
||||
set wireless.radio${devidx}.disabled=1
|
||||
|
||||
set wireless.default_radio${devidx}=wifi-iface
|
||||
set wireless.default_radio${devidx}.mode=ap
|
||||
set wireless.default_radio${devidx}.wds=1
|
||||
set wireless.default_radio${devidx}.device=radio${devidx}
|
||||
set wireless.default_radio${devidx}.network=lan
|
||||
set wireless.default_radio${devidx}.ssid=MorseMicro
|
||||
set wireless.default_radio${devidx}.encryption=sae
|
||||
set wireless.default_radio${devidx}.key=12345678
|
||||
EOF
|
||||
|
||||
board=$(board_name)
|
||||
|
||||
case "$board" in
|
||||
morse,ekh01-03 |\
|
||||
morse,ekh03v3)
|
||||
bcf=bcf_mf08551.bin
|
||||
;;
|
||||
morse,ekh01v1)
|
||||
bcf=bcf_mf03120.bin
|
||||
;;
|
||||
morse,ekh01v2)
|
||||
bcf=bcf_mf08251.bin
|
||||
;;
|
||||
morse,ekh04v4)
|
||||
bcf=bcf_ekh04_v4.bin
|
||||
;;
|
||||
esac
|
||||
|
||||
[ -n "${bcf}" ] && uci -q set wireless.radio${devidx}.bcf="${bcf}"
|
||||
|
||||
uci -q commit wireless
|
||||
|
||||
devidx=$(($devidx + 1))
|
||||
done
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
if PACKAGE_hostapd_s1g
|
||||
|
||||
config MORSE_HOSTAPD_S1G_EAP
|
||||
bool
|
||||
default n
|
||||
prompt "Enable Extensible Authentication Protocol (EAP) support"
|
||||
|
||||
config MORSE_HOSTAPD_S1G_ACS
|
||||
bool
|
||||
default n
|
||||
prompt "Enable automatic channel selection (ACS) support"
|
||||
help
|
||||
This will allow hostapd to pick the channel automatically when channel is set
|
||||
to "acs_survey" or "0". Eventually, other ACS algorithms can be added in
|
||||
similar way.
|
||||
|
||||
endif
|
||||
@@ -1,167 +0,0 @@
|
||||
#
|
||||
# Copyright 2022 Morse Micro
|
||||
#
|
||||
# This is free software, licensed under the 3-Clause BSD License.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=hostapd_s1g
|
||||
PKG_RELEASE=2
|
||||
|
||||
PKG_VERSION:=1.12.4
|
||||
|
||||
PKG_LICENSE:=BSD-3-Clause
|
||||
|
||||
PKG_SOURCE_VERSION:=$(PKG_VERSION)
|
||||
PKG_SOURCE_URL:=https://github.com/MorseMicro/hostap.git
|
||||
PKG_HASH:=a2f17ce3d2fe25d45cc2d6869e9ea644bcac441ec9b541972034768d4fc63608
|
||||
PKG_SOURCE_PROTO:=git
|
||||
|
||||
PKG_MAINTAINER:=Morse Micro <info@morsemicro.com>
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
PKG_CONFIG_DEPENDS:= \
|
||||
CONFIG_PACKAGE_kmod-morse \
|
||||
CONFIG_PACKAGE_kmod-cfg80211 \
|
||||
CONFIG_PACKAGE_hostapd \
|
||||
CONFIG_PACKAGE_hostapd-basic \
|
||||
CONFIG_PACKAGE_hostapd-mini \
|
||||
CONFIG_WPA_RFKILL_SUPPORT \
|
||||
CONFIG_DRIVER_WEXT_SUPPORT \
|
||||
CONFIG_DRIVER_11N_SUPPORT \
|
||||
CONFIG_DRIVER_11AC_SUPPORT \
|
||||
CONFIG_DRIVER_11AX_SUPPORT \
|
||||
CONFIG_WPA_ENABLE_WEP
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
MAKE_FLAGS += \
|
||||
MORSEHOSTAPD_VERSION_STRING=$(PKG_VERSION)
|
||||
|
||||
MMHOSTAPD_CONFIG_ENABLE = \
|
||||
CONFIG_INTERNAL_LIBTOMMATH \
|
||||
CONFIG_DEBUG_FILE \
|
||||
CONFIG_DEBUG_SYSLOG \
|
||||
CONFIG_PMKSA_CACHE_EXTERNAL \
|
||||
CONFIG_SAE \
|
||||
CONFIG_TESTING_OPTIONS \
|
||||
CONFIG_WNM \
|
||||
CONFIG_DRIVER_ACS \
|
||||
CONFIG_DRIVER_HOSTAP \
|
||||
CONFIG_DRIVER_NL80211 \
|
||||
CONFIG_HS20 \
|
||||
CONFIG_IEEE80211AC \
|
||||
CONFIG_IEEE80211N \
|
||||
CONFIG_IEEE80211AH \
|
||||
CONFIG_IEEE80211R \
|
||||
CONFIG_INTERWORKING \
|
||||
CONFIG_FULL_DYNAMIC_VLAN \
|
||||
CONFIG_VLAN_NETLINK \
|
||||
CONFIG_OWE \
|
||||
CONFIG_LIBNL32 \
|
||||
CONFIG_DPP \
|
||||
CONFIG_DPP2 \
|
||||
CONFIG_WPS
|
||||
|
||||
MMHOSTAPD_CONFIG_SET = \
|
||||
NEED_LINUX_IOCTL \
|
||||
CONFIG_DPP \
|
||||
CONFIG_SAE
|
||||
|
||||
MMHOSTAPD_CONFIG_DISABLE = \
|
||||
CONFIG_DRIVER_NONE \
|
||||
CONFIG_DRIVER_RTW \
|
||||
CONFIG_DRIVER_WIRED
|
||||
|
||||
MMHOSTAPD_CONFIG_EDITS += 's/\#\(CONFIG_TLS=openssl\)/\1/'
|
||||
|
||||
ifeq ($(CONFIG_MORSE_HOSTAPD_S1G_ACS),y)
|
||||
MMHOSTAPD_CONFIG_ENABLE += CONFIG_ACS
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_MORSE_HOSTAPD_S1G_EAP),y)
|
||||
MMHOSTAPD_CONFIG_ENABLE += \
|
||||
CONFIG_EAP \
|
||||
CONFIG_RADIUS_SERVER \
|
||||
CONFIG_TLSV1
|
||||
else
|
||||
MMHOSTAPD_CONFIG_DISABLE += CONFIG_HOSTAPD_EAP
|
||||
MMHOSTAPD_CONFIG_ENABLE += \
|
||||
CONFIG_NO_ACCOUNTING \
|
||||
CONFIG_NO_RADIUS
|
||||
endif
|
||||
|
||||
define Package/hostapd_s1g
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=WirelessAPD
|
||||
TITLE:=Morse Micro HaLow hostapd
|
||||
DEPENDS:= +kmod-morse +libnl +libopenssl +libubus
|
||||
USERID:=network=101:network=101
|
||||
PROVIDES:=hostapd_s1g
|
||||
endef
|
||||
|
||||
define Package/hostapd_s1g/description
|
||||
This package contains a full featured Morse Micro patched
|
||||
Authenticator.
|
||||
endef
|
||||
|
||||
define Package/hostapd_s1g/config
|
||||
source "$(SOURCE)/Config.in"
|
||||
endef
|
||||
|
||||
MMHOSTAPD_CONFIG = $(PKG_BUILD_DIR)/hostapd/.config
|
||||
|
||||
define Build/Prepare
|
||||
$(call Build/Prepare/Default)
|
||||
$(CP) $(PKG_BUILD_DIR)/hostapd/defconfig $(MMHOSTAPD_CONFIG)
|
||||
sed -i $(patsubst %,-e 's/^#\(%\)/\1/',$(MMHOSTAPD_CONFIG_ENABLE)) \
|
||||
$(patsubst %,-e 's/^\(%\)/#\1/',$(MMHOSTAPD_CONFIG_DISABLE)) \
|
||||
$(patsubst %,-e '1i%=y',$(MMHOSTAPD_CONFIG_SET)) \
|
||||
$(patsubst %,-e %,$(MMHOSTAPD_CONFIG_EDITS)) \
|
||||
$(MMHOSTAPD_CONFIG)
|
||||
endef
|
||||
|
||||
TARGET_CPPFLAGS := \
|
||||
-I$(STAGING_DIR)/usr/include/libnl3 \
|
||||
-I$(PKG_BUILD_DIR)/src/crypto \
|
||||
$(TARGET_CPPFLAGS) \
|
||||
-DCONFIG_LIBNL20 \
|
||||
-D_GNU_SOURCE
|
||||
|
||||
TARGET_LDFLAGS += -lnl-3 -lnl-genl-3 -lnl-route-3
|
||||
TARGET_LDFLAGS += -lm -lpthread -lcrypto -lssl
|
||||
|
||||
TARGET_LDFLAGS += -lrt
|
||||
TARGET_LDFLAGS_C += -lrt
|
||||
|
||||
define Build/RunMake
|
||||
CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" \
|
||||
$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)/$(1) \
|
||||
$(TARGET_CONFIGURE_OPTS) \
|
||||
$(DRIVER_MAKEOPTS) \
|
||||
LIBS="$(TARGET_LDFLAGS)" \
|
||||
LIBS_c="$(TARGET_LDFLAGS_C)" \
|
||||
AR="$(TARGET_CROSS)gcc-ar" \
|
||||
BCHECK= \
|
||||
$(2)
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
+$(call Build/RunMake,hostapd, \
|
||||
hostapd_s1g hostapd_cli_s1g \
|
||||
)
|
||||
endef
|
||||
|
||||
#Ian
|
||||
define Package/hostapd_s1g/install
|
||||
$(INSTALL_DIR) $(1)/sbin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/hostapd/hostapd_s1g $(1)/sbin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/hostapd/hostapd_cli_s1g $(1)/sbin
|
||||
$(INSTALL_DIR) $(1)/lib/netifd
|
||||
$(INSTALL_DATA) ./files/lib/netifd/hostapd_s1g.sh $(1)/lib/netifd
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,hostapd_s1g))
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,45 +0,0 @@
|
||||
From 5433351ed5ab62c2d4fbd15a2c4d8c4aeacb93dc Mon Sep 17 00:00:00 2001
|
||||
From: Evan Benn <evan.benn@morsemicro.com>
|
||||
Date: Thu, 29 Feb 2024 11:09:38 +1100
|
||||
Subject: [PATCH] APP-2573: Emit a DPP PB_STATUS event when push button starts
|
||||
|
||||
---
|
||||
src/ap/dpp_hostapd.c | 1 +
|
||||
wpa_supplicant/dpp_supplicant.c | 2 ++
|
||||
2 files changed, 3 insertions(+)
|
||||
|
||||
diff --git a/src/ap/dpp_hostapd.c b/src/ap/dpp_hostapd.c
|
||||
index b7cca47c714b..3025eef204d2 100644
|
||||
--- a/src/ap/dpp_hostapd.c
|
||||
+++ b/src/ap/dpp_hostapd.c
|
||||
@@ -3960,6 +3960,7 @@ int hostapd_dpp_push_button(struct hostapd_data *hapd, const char *cmd)
|
||||
eloop_register_timeout(100, 0, hostapd_dpp_push_button_expire,
|
||||
hapd, NULL);
|
||||
|
||||
+ wpa_msg(hapd->msg_ctx, MSG_INFO, DPP_EVENT_PB_STATUS "started");
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/wpa_supplicant/dpp_supplicant.c b/wpa_supplicant/dpp_supplicant.c
|
||||
index ab06ff8d32c1..24e4bb3c444d 100644
|
||||
--- a/wpa_supplicant/dpp_supplicant.c
|
||||
+++ b/wpa_supplicant/dpp_supplicant.c
|
||||
@@ -5676,6 +5676,7 @@ static int wpas_dpp_push_button_configurator(struct wpa_supplicant *wpa_s,
|
||||
eloop_register_timeout(100, 0, wpas_dpp_push_button_expire,
|
||||
wpa_s, NULL);
|
||||
|
||||
+ wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_PB_STATUS "started");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -5749,6 +5750,7 @@ int wpas_dpp_push_button(struct wpa_supplicant *wpa_s, const char *cmd)
|
||||
wpa_supplicant_req_scan(wpa_s, 0, 0);
|
||||
|
||||
res = 0;
|
||||
+ wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_PB_STATUS "started");
|
||||
out:
|
||||
|
||||
/* If push button mode failed to start, restart the chirp forever timer */
|
||||
--
|
||||
2.42.0.530.g692be87cbba5
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
From 25631fa387af430b8d7f03302218c66dc161cc6f Mon Sep 17 00:00:00 2001
|
||||
From: Andrew Pope <andrew.pope@morsemicro.com>
|
||||
Date: Tue, 4 Jun 2024 23:12:37 +0000
|
||||
Subject: [PATCH] Merged in SW-11943-dpp-does-not-associate-in-us-regdom (pull
|
||||
request #213)
|
||||
|
||||
SW-11943: DPP does not associate in US regdom
|
||||
|
||||
Two problems contributed to the originally reported issue:
|
||||
|
||||
1. The DPP-PB state machine function will unconditionally cancel any pending off-channel actions - even if the DPP PB discovery phase is over. To fix this, avoid unconditionally completing offchannel actions from DPP-PB state machine function if DPP PB discovery phase is over.
|
||||
|
||||
2. Logic around PKEX retries will manually attempt to complete the exchange on adjacent non-S1G channels. These retries inevitably fail, leading to a quicker collapse of the PKEX exchange attempts and eventual downgrade from v2 to v1 (bad). To fix this, remove non-S1G frequency hopping logic from DPP PB discovery and PKEX exchange phases.
|
||||
|
||||
Approved-by: Neville Young
|
||||
Approved-by: Simon Wadsworth
|
||||
Approved-by: Ayman Grais
|
||||
Approved-by: James Herbert
|
||||
---
|
||||
src/ap/dpp_hostapd.c | 6 ++++++
|
||||
wpa_supplicant/dpp_supplicant.c | 17 +++++++++++++++--
|
||||
2 files changed, 21 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/ap/dpp_hostapd.c b/src/ap/dpp_hostapd.c
|
||||
index b7cca47c7..282581fe5 100644
|
||||
--- a/src/ap/dpp_hostapd.c
|
||||
+++ b/src/ap/dpp_hostapd.c
|
||||
@@ -260,6 +260,12 @@ static int hostapd_dpp_allow_ir(struct hostapd_data *hapd, unsigned int freq)
|
||||
static int hostapd_dpp_pkex_next_channel(struct hostapd_data *hapd,
|
||||
struct dpp_pkex *pkex)
|
||||
{
|
||||
+ /* Following logic is not S1G compatible. Attempting PKEX on non-adjacent S1G channels
|
||||
+ * results in guaranteed failure.
|
||||
+ */
|
||||
+ if (hapd->iconf->ieee80211ah)
|
||||
+ return -1;
|
||||
+
|
||||
if (pkex->freq == 2437)
|
||||
pkex->freq = 5745;
|
||||
else if (pkex->freq == 5745)
|
||||
diff --git a/wpa_supplicant/dpp_supplicant.c b/wpa_supplicant/dpp_supplicant.c
|
||||
index ab06ff8d3..e90e4a163 100644
|
||||
--- a/wpa_supplicant/dpp_supplicant.c
|
||||
+++ b/wpa_supplicant/dpp_supplicant.c
|
||||
@@ -2840,6 +2840,12 @@ static int wpas_dpp_allow_ir(struct wpa_supplicant *wpa_s, unsigned int freq)
|
||||
static int wpas_dpp_pkex_next_channel(struct wpa_supplicant *wpa_s,
|
||||
struct dpp_pkex *pkex)
|
||||
{
|
||||
+#if defined(CONFIG_IEEE80211AH)
|
||||
+ /* Following logic is not S1G compatible. Attempting PKEX on non-adjacent S1G channels
|
||||
+ * results in guaranteed failure.
|
||||
+ */
|
||||
+ return -1;
|
||||
+#endif
|
||||
if (pkex->freq == 2437)
|
||||
pkex->freq = 5745;
|
||||
else if (pkex->freq == 5745)
|
||||
@@ -5113,10 +5119,16 @@ static int * wpas_dpp_presence_ann_channels(struct wpa_supplicant *wpa_s,
|
||||
|
||||
if (chan->flag & (HOSTAPD_CHAN_DISABLED | HOSTAPD_CHAN_RADAR))
|
||||
continue;
|
||||
+#if defined(CONFIG_IEEE80211AH)
|
||||
+ /* Adding channels 44 and 149 at end of scan list is not required
|
||||
+ * for HaLow
|
||||
+ */
|
||||
+#else
|
||||
if (chan->freq == 5220)
|
||||
chan44 = 1;
|
||||
if (chan->freq == 5745)
|
||||
chan149 = 1;
|
||||
+#endif
|
||||
|
||||
/* Morse - All 5GHz channels that are mapped to 1 MHz and 2 MHz.
|
||||
* Channels that aren't relevant to a regulatory domain will be
|
||||
@@ -5573,9 +5585,10 @@ static void wpas_dpp_pb_next(void *eloop_ctx, void *timeout_ctx)
|
||||
if (!wpa_s->dpp_pb_freqs)
|
||||
return;
|
||||
|
||||
- os_get_reltime(&now);
|
||||
- offchannel_send_action_done(wpa_s);
|
||||
+ if (!wpa_s->dpp_pb_discovery_done)
|
||||
+ offchannel_send_action_done(wpa_s);
|
||||
|
||||
+ os_get_reltime(&now);
|
||||
if (os_reltime_expired(&now, &wpa_s->dpp_pb_time, 100)) {
|
||||
wpa_printf(MSG_DEBUG, "DPP: Push button wait time expired");
|
||||
wpas_dpp_push_button_stop(wpa_s);
|
||||
--
|
||||
2.25.1
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
From 591ec24748525171d5647d2a35cd1da1445e7a0b Mon Sep 17 00:00:00 2001
|
||||
From: James Haggerty <james.haggerty@morsemicro.com>
|
||||
Date: Fri, 26 Jul 2024 09:55:03 +1000
|
||||
Subject: [PATCH] Hack out channel 50 (and typo for 51)
|
||||
|
||||
If we use these channels on a board with those channels disabled,
|
||||
the DPP presence announcement fails.
|
||||
|
||||
This is rubbish: see SW-12450
|
||||
---
|
||||
wpa_supplicant/dpp_supplicant.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/wpa_supplicant/dpp_supplicant.c b/wpa_supplicant/dpp_supplicant.c
|
||||
index 09f8ceb07..46e4add95 100644
|
||||
--- a/wpa_supplicant/dpp_supplicant.c
|
||||
+++ b/wpa_supplicant/dpp_supplicant.c
|
||||
@@ -5199,12 +5199,12 @@ static int * wpas_dpp_presence_ann_channels(struct wpa_supplicant *wpa_s,
|
||||
static const int s1g_chirp_channels[] = {
|
||||
/* 2MHz channels */
|
||||
5190, 5230, 5270, 5310, 5510, 5550,
|
||||
- 5630, 5670, 5755, 5795, 5835, 5875,
|
||||
+ 5630, 5670, 5755, 5795, 5835,
|
||||
/* 1MHz channels */
|
||||
5660, 5680, 5180, 5200, 5240, 5260,
|
||||
5280, 5300, 5320, 5500, 5520, 5540,
|
||||
5560, 5580, 5600, 5620, 5640, 5765,
|
||||
- 5785, 5805, 5825, 5845, 5865, 5855
|
||||
+ 5785, 5805, 5825, 5845, 5865
|
||||
};
|
||||
|
||||
if (chan->flag & (HOSTAPD_CHAN_DISABLED | HOSTAPD_CHAN_RADAR))
|
||||
--
|
||||
2.25.1
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
#The mesh11sd dameon is designed in such a way that all configuration done to 11s mesh can be directly set to the
|
||||
#mac80211 via iw utility and does not require any re-configuration of interfaces. Considering the MorseMicro design and
|
||||
#implementation of 802.11s mesh, most of the configuration needs to be applied to the wpa_supplicant.conf which requires
|
||||
#re-configuration of the interface.
|
||||
#Thus we need a reload_service section to mesh11sd that will re-configure wifi via wifi down and up.
|
||||
#
|
||||
#Openwrt provided Mesh11sd package is found in: https://github.com/openwrt/routing/tree/master/mesh11sd
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
# Copyright (C) 2022 BlueWave Projects and Services <licence@blue-wave.net>
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=morse_mesh11sd
|
||||
PKG_VERSION:=1.2.0
|
||||
PKG_RELEASE:=$(AUTORELEASE)
|
||||
|
||||
PKG_MAINTAINER:=Rob White <rob@blue-wave.net>
|
||||
PKG_LICENSE:=GPL-2.0-or-later
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/opennds/mesh11sd/tar.gz/v$(PKG_VERSION)?
|
||||
PKG_HASH:=b719eaacf63eb3684d0cd6a026f4357a4f400f2339f5d5a6cf74ba3744fe30d8
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/mesh11sd-$(PKG_VERSION)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/morse_mesh11sd
|
||||
SUBMENU:=Captive Portals
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=Dynamic 802.11s Mesh Configuration Daemon
|
||||
PKGARCH:=all
|
||||
URL:=https://github.com/opennds/mesh11sd
|
||||
PROVIDES:=mesh11sd
|
||||
endef
|
||||
|
||||
define Package/morse_mesh11sd/description
|
||||
Mesh11sd is a dynamic parameter configuration daemon for 802.11s mesh networks.
|
||||
It was originally designed to leverage 802.11s mesh networking at Captive Portal venues.
|
||||
This is the open source version and it enables easy and automated mesh network operation with multiple mesh nodes.
|
||||
It allows all mesh parameters supported by the wireless driver to be set in the uci config file.
|
||||
Settings take effect immediately without having to restart the wireless network.
|
||||
Default settings give rapid and reliable layer 2 mesh convergence.
|
||||
Without mesh11sd, many mesh parameters cannot be set in the uci wireless config file as the mesh interface must be up before the parameters can be set.
|
||||
Some of those that are supported, would fail to be implemented when the network is (re)started resulting in errors or dropped nodes.
|
||||
The mesh11sd daemon dynamically checks configured parameters and sets them as required.
|
||||
This version does not require a Captive Portal to be running.
|
||||
The modified morse_mesh11sd would allow reconfiguring the wpa supplicant everytime there is 11sMesh config modification.
|
||||
endef
|
||||
|
||||
define Package/morse_mesh11sd/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/mesh11sd $(1)/usr/sbin
|
||||
$(INSTALL_CONF) ./files/etc/config/mesh11sd $(1)/etc/config/
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/linux_openwrt/mesh11sd/files/etc/init.d/mesh11sd $(1)/etc/init.d/
|
||||
endef
|
||||
|
||||
define Package/morse_mesh11sd/conffiles
|
||||
/etc/config/mesh11sd
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,morse_mesh11sd))
|
||||
@@ -1,28 +0,0 @@
|
||||
config mesh11sd 'setup'
|
||||
option debuglevel '1'
|
||||
option checkinterval '10'
|
||||
option interface_timeout '10'
|
||||
option enabled '0'
|
||||
|
||||
config mesh11sd 'mesh_params'
|
||||
option mesh_fwding '1'
|
||||
option mesh_max_peer_links '10'
|
||||
option mesh_rssi_threshold '-85'
|
||||
option mesh_ttl '31'
|
||||
option mesh_hwmp_rootmode '0'
|
||||
option mesh_gate_announcements '0'
|
||||
|
||||
config mesh11sd 'mbca'
|
||||
option mbca_config '1'
|
||||
option mesh_beacon_timing_report_int '10'
|
||||
option mbss_start_scan_duration_ms '2048'
|
||||
option mbca_min_beacon_gap_ms '25'
|
||||
option mbca_tbtt_adj_interval_sec '60'
|
||||
|
||||
config mesh11sd 'mesh_beaconless'
|
||||
option mesh_beacon_less_mode '0'
|
||||
|
||||
config mesh11sd 'mesh_dynamic_peering'
|
||||
option enabled '0'
|
||||
option mesh_rssi_margin '5'
|
||||
option mesh_blacklist_timeout '60'
|
||||
@@ -1,16 +0,0 @@
|
||||
Index: mesh11sd-1.2.0/linux_openwrt/mesh11sd/files/etc/init.d/mesh11sd
|
||||
===================================================================
|
||||
--- mesh11sd-1.2.0.orig/linux_openwrt/mesh11sd/files/etc/init.d/mesh11sd
|
||||
+++ mesh11sd-1.2.0/linux_openwrt/mesh11sd/files/etc/init.d/mesh11sd
|
||||
@@ -11,3 +11,11 @@ start_service() {
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
+reload_service() {
|
||||
+ wifi down
|
||||
+ sleep 5
|
||||
+ wifi up
|
||||
+}
|
||||
+service_triggers() {
|
||||
+ procd_add_reload_trigger "mesh11sd"
|
||||
+}
|
||||
@@ -1,107 +0,0 @@
|
||||
# Description: The Mesh11sd daemon expects the mesh interface name to follow the format 'mesh<index>'.
|
||||
# If it doesn't find this format, it attempts to set it in the UCI wireless configuration.
|
||||
# However, when operating in other modes such as AP, STA, or Ad-Hoc, the script was patched to remove
|
||||
# the mesh interface name from UCI. This process can lead to a race condition between the UI and Mesh11sd,
|
||||
# resulting in stale interface name values.
|
||||
# This patch resolves the issue by removing the setting of the interface name from the script, as it is
|
||||
# now managed through the UI, ensuring consistency and eliminating the race condition.
|
||||
|
||||
--- a/src/mesh11sd
|
||||
+++ b/src/mesh11sd
|
||||
@@ -387,45 +387,45 @@ elif [ "$1" = "daemon" ]; then
|
||||
|
||||
if [ $mode -eq 5 ]; then
|
||||
# startup=4, statusmode=0, enabled=1
|
||||
+ syslogmessage="mesh11sd v$version has started: mesh management mode $mode"
|
||||
startup=0
|
||||
statusmode=0
|
||||
mode=1
|
||||
- syslogmessage="mesh11sd v$version has started: mesh management mode $mode"
|
||||
|
||||
elif [ $mode -eq 4 ]; then
|
||||
# startup=4, statusmode=0, enabled=0
|
||||
+ syslogmessage="mesh11sd v$version has started: mesh status mode $mode"
|
||||
startup=0
|
||||
statusmode=2
|
||||
mode=0
|
||||
- syslogmessage="mesh11sd v$version has started: mesh status mode $mode"
|
||||
|
||||
elif [ $mode -eq 3 ]; then
|
||||
# startup=0, statusmode=2, enabled=1
|
||||
+ syslogmessage="mesh11sd v$version has started: mesh management mode $mode"
|
||||
startup=0
|
||||
statusmode=0
|
||||
mode=1
|
||||
- syslogmessage="mesh11sd v$version has started: mesh management mode $mode"
|
||||
|
||||
elif [ $mode -eq 2 ]; then
|
||||
# startup=0, statusmode=2, enabled=0
|
||||
+ syslogmessage="mesh11sd v$version has started: mesh status mode $mode"
|
||||
startup=0
|
||||
statusmode=2
|
||||
mode=0
|
||||
- syslogmessage="mesh11sd v$version has started: mesh status mode $mode"
|
||||
|
||||
elif [ $mode -eq 1 ]; then
|
||||
# startup=0, statusmode=0, enabled=1
|
||||
+ syslogmessage="mesh11sd v$version has started, mesh management mode $mode"
|
||||
startup=0
|
||||
statusmode=0
|
||||
mode=1
|
||||
- syslogmessage="mesh11sd v$version has started, mesh management mode $mode"
|
||||
|
||||
elif [ $mode -eq 0 ]; then
|
||||
# startup=0, statusmode=0, enabled=0
|
||||
+ syslogmessage="mesh11sd v$version has started: mesh status mode $mode"
|
||||
startup=0
|
||||
statusmode=2
|
||||
mode=0
|
||||
- syslogmessage="mesh11sd v$version has started: mesh status mode $mode"
|
||||
fi
|
||||
|
||||
if [ $mode -ne $lastmode ]; then
|
||||
@@ -441,26 +441,6 @@ elif [ "$1" = "daemon" ]; then
|
||||
meshconfigs=$(uci show wireless 2> /dev/null | grep "mode='mesh'" | awk -F ".mode='mesh'" '{printf "%s " $1}')
|
||||
|
||||
if [ ! -z "$meshconfigs" ]; then
|
||||
- for meshconfig in $meshconfigs; do
|
||||
- ifname=$(uci get $meshconfig.ifname 2> /dev/null)
|
||||
-
|
||||
- if [ -z "$ifname" ] || [ "$ifname" != "mesh$meshindex" ]; then
|
||||
- # No interface name in config, so add one
|
||||
- ucibatch="set $meshconfig.ifname='mesh$meshindex'"
|
||||
- echo "$ucibatch" | uci batch
|
||||
- changed=1
|
||||
- syslogmessage="Setting mesh interface name to [ mesh$meshindex ]"
|
||||
- write_to_syslog
|
||||
- fi
|
||||
- meshindex=$(($meshindex+1))
|
||||
- done
|
||||
-
|
||||
- if [ "$changed" -eq 1 ]; then
|
||||
- changed=0
|
||||
- restart_mesh
|
||||
- continue
|
||||
- fi
|
||||
-
|
||||
# get a list of interfaces
|
||||
get_mesh_iflist
|
||||
|
||||
@@ -482,13 +462,13 @@ elif [ "$1" = "daemon" ]; then
|
||||
# this is not a mesh interface
|
||||
continue
|
||||
else
|
||||
- # Check if this interface has a uci ifname
|
||||
- uciname=$(uci show wireless | grep "ifname='$iface'" | awk -F "." '{printf "wireless.%s" $2}')
|
||||
+ # Check if this interface mode is 'mesh'
|
||||
+ uciname=$(uci show wireless | grep "mode='mesh'" | awk -F "." '{printf "wireless.%s" $2}')
|
||||
|
||||
if [ -z "$uciname" ]; then
|
||||
- # Error - No interface name in config, we should have added one
|
||||
+ # Error - No interface with mode as mesh
|
||||
debugtype="err"
|
||||
- syslogmessage="Error getting mesh interface name"
|
||||
+ syslogmessage="Error getting mesh interface section"
|
||||
write_to_syslog
|
||||
continue
|
||||
fi
|
||||
@@ -1,49 +0,0 @@
|
||||
#
|
||||
# Copyright 2023 Morse Micro
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=morsecli
|
||||
PKG_RELEASE=5
|
||||
|
||||
PKG_VERSION:=1.12.4
|
||||
|
||||
PKG_LICENSE:=GPLv2
|
||||
PKG_LICENSE_FILES:=
|
||||
|
||||
PKG_SOURCE_VERSION:=$(PKG_VERSION)
|
||||
PKG_SOURCE_URL:=https://github.com/MorseMicro/morse_cli.git
|
||||
PKG_HASH:=04c88a3aea99082a29eb1f84a9b62dcbb85980fa040e0e34901c1826f33ae74c
|
||||
PKG_SOURCE_PROTO:=git
|
||||
|
||||
PKG_MAINTAINER:=Morse Micro <info@morsemicro.com>
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/morsecli
|
||||
SECTION:=utils
|
||||
CATEGORY:=Network
|
||||
TITLE:=Morse Micro WIFI HaLow driver command line tool
|
||||
DEPENDS:= +kmod-morse +libnl
|
||||
FILES:=\
|
||||
$(PKG_BUILD_DIR)/morse_cli
|
||||
PROVIDES:=morsectrl
|
||||
endef
|
||||
|
||||
MAKE_FLAGS += \
|
||||
MORSECTRL_VERSION_STRING=$(PKG_VERSION) \
|
||||
CONFIG_MORSE_TRANS_NL80211=1 \
|
||||
|
||||
TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include/libnl3
|
||||
|
||||
define Package/morsecli/install
|
||||
$(INSTALL_DIR) $(1)/sbin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/morse_cli $(1)/sbin/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,morsecli))
|
||||
@@ -1,33 +0,0 @@
|
||||
#
|
||||
# Copyright 2023 Morse Micro
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=wpa_event_listener
|
||||
PKG_RELEASE:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/wpa_event_listener
|
||||
SECTION:=utils
|
||||
CATEGORY:=Base system
|
||||
TITLE:= WPA supplicant s1g event listener
|
||||
MAINTAINER:=Morse Micro
|
||||
DEPENDS:= wpa_supplicant_s1g +libwpa_client
|
||||
endef
|
||||
|
||||
define Package/wpa_event_listener/description
|
||||
A Daemon to listen to wpa supplicant s1g events.
|
||||
endef
|
||||
|
||||
define Package/wpa_event_listener/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/wpa_event_listener $(1)/usr/sbin
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,wpa_event_listener))
|
||||
@@ -1,24 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2023-2024 Morse Micro Pty Ltd. All rights reserved
|
||||
#
|
||||
APP=wpa_event_listener
|
||||
|
||||
LDFLAGS+=-lwpa_client -lubox
|
||||
|
||||
ODIR=build
|
||||
|
||||
_OBJ = wpa_event_listener.o
|
||||
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
|
||||
|
||||
|
||||
$(ODIR)/%.o: %.c
|
||||
mkdir $(ODIR) -p
|
||||
$(CC) -c -o $@ $< $(CFLAGS)
|
||||
|
||||
$(APP): $(OBJ)
|
||||
$(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)
|
||||
|
||||
.PHONY: clean
|
||||
|
||||
clean:
|
||||
rm -rf $(ODIR) $(APP)
|
||||
@@ -1,401 +0,0 @@
|
||||
/*
|
||||
* copyright (C) 2023-2024 Morse Micro Pty Ltd. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <dirent.h>
|
||||
#include <errno.h>
|
||||
#include <libubox/uloop.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
#include <wpa_ctrl.h>
|
||||
|
||||
#define CONFIG_CTRL_IFACE_DIR "/var/run/wpa_supplicant_s1g"
|
||||
#define wpa_el_version "V1.0.0"
|
||||
|
||||
enum event_value_types {
|
||||
TYPE_CONF_RECEIVED,
|
||||
TYPE_ENCRYPTION,
|
||||
TYPE_SSID,
|
||||
TYPE_PSK,
|
||||
TYPE_CONNECTOR,
|
||||
TYPE_C_SIGN_KEY,
|
||||
TYPE_PP_KEY,
|
||||
TYPE_NET_ACCESS_KEY,
|
||||
TYPE_CTRL_EVENT_TERMINATING,
|
||||
TYPE_PB_RESULT,
|
||||
TYPE_PB_STATUS,
|
||||
};
|
||||
|
||||
struct event {
|
||||
const char *const event_title;
|
||||
const enum event_value_types event_type;
|
||||
};
|
||||
|
||||
/* dpp connector, c-sign-key, pp-key and net access key will be received after
|
||||
* qrcode provisionning but they are ignored by now.
|
||||
*/
|
||||
static struct event interresting_events[] = {
|
||||
{"DPP-CONF-RECEIVED", TYPE_CONF_RECEIVED},
|
||||
{"DPP-CONFOBJ-AKM", TYPE_ENCRYPTION},
|
||||
{"DPP-CONFOBJ-SSID", TYPE_SSID},
|
||||
{"DPP-CONFOBJ-PASS", TYPE_PSK},
|
||||
// { "DPP-CONNECTOR" , TYPE_CONNECTOR },
|
||||
// { "DPP-C-SIGN-KEY" , TYPE_C_SIGN_KEY },
|
||||
// { "DPP-PP-KEY" , TYPE_PP_KEY },
|
||||
// { "DPP-NET-ACCESS-KEY" , TYPE_NET_ACCESS_KEY },
|
||||
{"DPP-PB-STATUS", TYPE_PB_STATUS},
|
||||
{"DPP-PB-RESULT", TYPE_PB_RESULT},
|
||||
{"CTRL-EVENT-TERMINATING", TYPE_CTRL_EVENT_TERMINATING},
|
||||
};
|
||||
|
||||
static struct {
|
||||
char *encryption;
|
||||
char *ssid;
|
||||
char *psk;
|
||||
// char* connector;
|
||||
// char* c_sign_key;
|
||||
// char* pp_key;
|
||||
// char* net_access_key;
|
||||
} cached_confs;
|
||||
|
||||
static struct wpa_ctrl *ctrl_conn;
|
||||
static struct uloop_fd listener;
|
||||
|
||||
static void led_timeout_cb(struct uloop_timeout*);
|
||||
static struct uloop_timeout led_timeout = {
|
||||
.cb = led_timeout_cb,
|
||||
};
|
||||
static void led_failed_cb(struct uloop_timeout *);
|
||||
static struct uloop_timeout failed_timeout = {
|
||||
.cb = led_failed_cb,
|
||||
};
|
||||
|
||||
static char *ctrl_ifname = NULL;
|
||||
static char *action_script = NULL;
|
||||
static const char *ctrl_iface_dir = CONFIG_CTRL_IFACE_DIR;
|
||||
static const char *pid_file = NULL;
|
||||
static int exit_on_config_receive = 1;
|
||||
|
||||
void cache_received_confs(char **config, const char *const value) {
|
||||
// check if the config is already allocated.
|
||||
if (*config)
|
||||
free(*config);
|
||||
*config = strdup(value);
|
||||
}
|
||||
|
||||
void clean_pointer(char **ptr) {
|
||||
if (*ptr) {
|
||||
free(*ptr);
|
||||
*ptr = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void clear_cached_confs() {
|
||||
clean_pointer(&cached_confs.encryption);
|
||||
clean_pointer(&cached_confs.ssid);
|
||||
clean_pointer(&cached_confs.psk);
|
||||
}
|
||||
|
||||
void clear_env() {
|
||||
unsetenv("iface_name");
|
||||
unsetenv("encryption");
|
||||
unsetenv("ssid");
|
||||
unsetenv("psk");
|
||||
}
|
||||
|
||||
void apply_cached_confs() {
|
||||
// make sure that all needed configs are cached.
|
||||
if (!cached_confs.encryption || !cached_confs.ssid || !cached_confs.psk)
|
||||
return;
|
||||
|
||||
printf("Configs: \n");
|
||||
printf(" encryption: %s\n", cached_confs.encryption);
|
||||
printf(" ssid: %s\n", cached_confs.ssid);
|
||||
printf(" psk: %s\n", cached_confs.psk);
|
||||
|
||||
pid_t pid = 0;
|
||||
// only fork if we don't want to exit after receiving configs.
|
||||
if (exit_on_config_receive == 0) {
|
||||
pid = fork();
|
||||
if (pid == -1) {
|
||||
printf("Unable to fork action script\n");
|
||||
return;
|
||||
}
|
||||
// forked process will have pid=0.
|
||||
if (pid > 0)
|
||||
return;
|
||||
}
|
||||
|
||||
setenv("iface_name", ctrl_ifname, 1);
|
||||
setenv("encryption", cached_confs.encryption, 1);
|
||||
setenv("ssid", cached_confs.ssid, 1);
|
||||
setenv("psk", cached_confs.psk, 1);
|
||||
if (execl(action_script, action_script, "config", (char *)NULL) == -1) {
|
||||
perror("Could not execv");
|
||||
clear_env();
|
||||
return;
|
||||
}
|
||||
clear_env();
|
||||
}
|
||||
|
||||
void call_action_script(const char *arg) {
|
||||
pid_t pid = fork();
|
||||
if (pid == -1) {
|
||||
printf("Unable to fork action script");
|
||||
return;
|
||||
}
|
||||
if (pid > 0) {
|
||||
int status;
|
||||
waitpid(pid, &status, 0);
|
||||
} else if (execl(action_script, action_script, arg, (char *)NULL) == -1) {
|
||||
perror("Could not execv");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
static void led_timeout_cb(struct uloop_timeout *t) {
|
||||
printf("led timeout\n");
|
||||
call_action_script("finished");
|
||||
}
|
||||
|
||||
static void led_finished() {
|
||||
// Stop the blink.
|
||||
printf("Stopping led blink\n");
|
||||
uloop_timeout_cancel(&led_timeout);
|
||||
call_action_script("finished");
|
||||
}
|
||||
|
||||
static void led_failed_cb(struct uloop_timeout *t) {
|
||||
// Start the fail blink with a short timeout.
|
||||
printf("Starting led fail blink\n");
|
||||
uloop_timeout_set(&led_timeout, 5000);
|
||||
call_action_script("failed");
|
||||
}
|
||||
|
||||
static void led_failed() {
|
||||
// Issue the failed command after a small delay. This is because
|
||||
// wpa_supplicant emits back to back failed and started events when a
|
||||
// dpp_push_button occurs while another is still running, so save some time
|
||||
// for led_started to cancel the failed_timeout.
|
||||
uloop_timeout_set(&failed_timeout, 1000);
|
||||
}
|
||||
|
||||
static void led_started() {
|
||||
// Start the blink. Set a long timeout for the blink in case we don't see hostapd PB_RESULT event.
|
||||
printf("Starting led blink\n");
|
||||
uloop_timeout_cancel(&failed_timeout);
|
||||
uloop_timeout_set(&led_timeout, 120000);
|
||||
call_action_script("started");
|
||||
}
|
||||
|
||||
static void message_process(char *const message) {
|
||||
const int good_events_count = sizeof(interresting_events) / sizeof(struct event);
|
||||
|
||||
for (int i = 0; i < good_events_count; i++) {
|
||||
char *ptr = strstr(message, interresting_events[i].event_title);
|
||||
if (ptr) {
|
||||
const char *const value = ptr + strlen(interresting_events[i].event_title) +
|
||||
1; // 1 for the space between title and value
|
||||
switch (interresting_events[i].event_type) {
|
||||
case TYPE_CONF_RECEIVED:
|
||||
clear_cached_confs();
|
||||
break;
|
||||
case TYPE_ENCRYPTION:
|
||||
cache_received_confs(&cached_confs.encryption, value);
|
||||
break;
|
||||
case TYPE_SSID:
|
||||
cache_received_confs(&cached_confs.ssid, value);
|
||||
break;
|
||||
case TYPE_PSK:
|
||||
cache_received_confs(&cached_confs.psk, value);
|
||||
break;
|
||||
case TYPE_PB_RESULT:
|
||||
// AP side we wont have confs, so apply_cached_confs does nothing.
|
||||
if (strstr(value, "success")) {
|
||||
led_finished();
|
||||
apply_cached_confs();
|
||||
clear_cached_confs();
|
||||
} else if (strstr(value, "failed")) {
|
||||
led_failed();
|
||||
}
|
||||
break;
|
||||
case TYPE_PB_STATUS:
|
||||
if (strcmp(value, "started") == 0) {
|
||||
led_started();
|
||||
}
|
||||
break;
|
||||
case TYPE_CTRL_EVENT_TERMINATING:
|
||||
printf("Connection to wpa_supplicant lost - exiting\n");
|
||||
uloop_end();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void listener_cb(struct uloop_fd *fd, unsigned int events) {
|
||||
while (wpa_ctrl_pending(ctrl_conn) > 0) {
|
||||
char buf[4096];
|
||||
size_t len = sizeof(buf) - 1;
|
||||
if (wpa_ctrl_recv(ctrl_conn, buf, &len) == 0) {
|
||||
buf[len] = '\0';
|
||||
printf("New Message:%s\n", buf);
|
||||
message_process(buf);
|
||||
} else {
|
||||
printf("Could not read pending message.\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (wpa_ctrl_pending(ctrl_conn) < 0) {
|
||||
printf("Connection to wpa_supplicant lost - exiting\n");
|
||||
uloop_end();
|
||||
}
|
||||
}
|
||||
|
||||
static char *wpa_cli_get_default_ifname(void) {
|
||||
char *ifname = NULL;
|
||||
|
||||
struct dirent *dent;
|
||||
DIR *dir = opendir(ctrl_iface_dir);
|
||||
if (!dir) {
|
||||
return NULL;
|
||||
}
|
||||
while ((dent = readdir(dir))) {
|
||||
#ifdef _DIRENT_HAVE_D_TYPE
|
||||
/*
|
||||
* Skip the file if it is not a socket. Also accept
|
||||
* DT_UNKNOWN (0) in case the C library or underlying
|
||||
* file system does not support d_type.
|
||||
*/
|
||||
if (dent->d_type != DT_SOCK && dent->d_type != DT_UNKNOWN)
|
||||
continue;
|
||||
#endif /* _DIRENT_HAVE_D_TYPE */
|
||||
/* Skip current/previous directory and special P2P Device
|
||||
* interfaces. */
|
||||
if (strcmp(dent->d_name, ".") == 0 || strcmp(dent->d_name, "..") == 0 ||
|
||||
strncmp(dent->d_name, "p2p-dev-", 8) == 0)
|
||||
continue;
|
||||
printf("Selected interface '%s'\n", dent->d_name);
|
||||
ifname = strdup(dent->d_name);
|
||||
break;
|
||||
}
|
||||
closedir(dir);
|
||||
|
||||
return ifname;
|
||||
}
|
||||
|
||||
static void usage(void) {
|
||||
printf("wpa_event_listener [-p<path to ctrl socket dir>] -i<ifname> [-hvBN] "
|
||||
"-a<action file> \\\n"
|
||||
" [-P<pid file>] "
|
||||
"\\\n"
|
||||
" "
|
||||
" -h = help (show this usage text)\n"
|
||||
" -v = shown version information\n"
|
||||
" -N = No Exit: don't exit after the configs are received.\n"
|
||||
" -a = run in daemon mode executing the action file based on "
|
||||
"events from\n"
|
||||
" -B = run a daemon in the background\n"
|
||||
" default path: " CONFIG_CTRL_IFACE_DIR "\n"
|
||||
" default interface: first interface found in socket path\n");
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
int c;
|
||||
int daemonize = 0;
|
||||
for (;;) {
|
||||
c = getopt(argc, argv, "a:Bg:G:hNi:p:P:rs:v");
|
||||
if (c < 0)
|
||||
break;
|
||||
switch (c) {
|
||||
case 'a':
|
||||
action_script = optarg;
|
||||
break;
|
||||
case 'B':
|
||||
daemonize = 1;
|
||||
break;
|
||||
case 'h':
|
||||
usage();
|
||||
return 0;
|
||||
case 'v':
|
||||
printf("%s\n", wpa_el_version);
|
||||
return 0;
|
||||
case 'i':
|
||||
ctrl_ifname = strdup(optarg);
|
||||
break;
|
||||
case 'p':
|
||||
ctrl_iface_dir = optarg;
|
||||
break;
|
||||
case 'P':
|
||||
pid_file = optarg;
|
||||
break;
|
||||
case 'N':
|
||||
printf("No exit after receive config.\n");
|
||||
exit_on_config_receive = 0;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (ctrl_ifname == NULL)
|
||||
ctrl_ifname = wpa_cli_get_default_ifname();
|
||||
if (ctrl_ifname == NULL) {
|
||||
printf("No WPA supplicant ctrl interface found.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (daemonize) {
|
||||
if (!action_script) {
|
||||
printf("Daemonizing requires an action script.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (daemon(0, 0)) {
|
||||
perror("daemon");
|
||||
return -1;
|
||||
}
|
||||
if (pid_file) {
|
||||
FILE *f = fopen(pid_file, "w");
|
||||
if (f) {
|
||||
fprintf(f, "%u\n", getpid());
|
||||
fclose(f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
char *path = malloc(strlen(ctrl_iface_dir) + strlen(ctrl_ifname) + 2);
|
||||
sprintf(path, "%s/%s", ctrl_iface_dir, ctrl_ifname);
|
||||
|
||||
if (!(ctrl_conn = wpa_ctrl_open(path))) {
|
||||
printf("unable to open control interface on %s.\n", path);
|
||||
return -1;
|
||||
}
|
||||
|
||||
uloop_init();
|
||||
|
||||
if (wpa_ctrl_attach(ctrl_conn) == 0) {
|
||||
listener.cb = listener_cb;
|
||||
listener.fd = wpa_ctrl_get_fd(ctrl_conn);
|
||||
uloop_fd_add(&listener, ULOOP_READ);
|
||||
listener_cb(NULL, 0);
|
||||
} else {
|
||||
printf("Failed to attach to wpa_supplicant.\n");
|
||||
wpa_ctrl_close(ctrl_conn);
|
||||
return -1;
|
||||
}
|
||||
|
||||
uloop_run();
|
||||
printf("Exiting\n");
|
||||
if (pid_file)
|
||||
remove(pid_file);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
if PACKAGE_wpa_supplicant_s1g
|
||||
|
||||
config MORSE_WPA_SUPPLICANT_S1G_MESH_NETWORKING
|
||||
bool
|
||||
default n
|
||||
prompt "Enable mesh networking support"
|
||||
|
||||
config MORSE_WPA_SUPPLICANT_S1G_EAP
|
||||
bool
|
||||
default n
|
||||
prompt "Enable Extensible Authentication Protocol (EAP) support"
|
||||
|
||||
endif
|
||||
@@ -1,178 +0,0 @@
|
||||
#
|
||||
# Copyright 2022 Morse Micro
|
||||
#
|
||||
# This is free software, licensed under the 3-Clause BSD License.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=wpa_supplicant_s1g
|
||||
PKG_RELEASE=2
|
||||
|
||||
PKG_VERSION:=1.12.4
|
||||
|
||||
PKG_LICENSE:=BSD-3-Clause
|
||||
|
||||
PKG_SOURCE_VERSION:=$(PKG_VERSION)
|
||||
PKG_SOURCE_URL:=https://github.com/MorseMicro/hostap.git
|
||||
PKG_HASH:=c342d1489d03363b79b5b4e185ccbceca53aab9e634daefb81180ad1012b77b7
|
||||
PKG_SOURCE_PROTO:=git
|
||||
|
||||
PKG_MAINTAINER:=Morse Micro <info@morsemicro.com>
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
MAKE_FLAGS += \
|
||||
MORSEWPA_SUPPLICANT_VERSION_STRING=$(PKG_VERSION)
|
||||
|
||||
# Add support for simple background scan
|
||||
MMWPA_SUPPLICANT_CONFIG_SET = \
|
||||
CONFIG_UBUS
|
||||
|
||||
|
||||
MMWPA_SUPPLICANT_CONFIG_ENABLE = \
|
||||
CONFIG_IEEE80211AC \
|
||||
CONFIG_IEEE80211N \
|
||||
CONFIG_IEEE80211R \
|
||||
CONFIG_INTERNAL_LIBTOMMATH \
|
||||
CONFIG_DEBUG_FILE \
|
||||
CONFIG_MATCH_IFACE \
|
||||
CONFIG_LIBNL32 \
|
||||
CONFIG_DRIVER_WEXT \
|
||||
CONFIG_DRIVER_NL80211 \
|
||||
CONFIG_DRIVER_WIRED \
|
||||
CONFIG_IEEE8021X_EAPOL \
|
||||
CONFIG_WPS \
|
||||
CONFIG_PKCS12 \
|
||||
CONFIG_CTRL_IFACE \
|
||||
CONFIG_READLINE \
|
||||
CONFIG_IEEE80211W \
|
||||
CONFIG_INTERNAL_LIBTOMMATH_FAST \
|
||||
CONFIG_CTRL_IFACE_DBUS_INTRO \
|
||||
CONFIG_DEBUG_SYSLOG \
|
||||
CONFIG_INTERWORKING \
|
||||
CONFIG_HS20 \
|
||||
CONFIG_MATCH_IFACE \
|
||||
CONFIG_AP \
|
||||
CONFIG_P2P \
|
||||
CONFIG_IBSS_RSN \
|
||||
CONFIG_OWE \
|
||||
CONFIG_DPP \
|
||||
CONFIG_SAE \
|
||||
CONFIG_TESTING_OPTIONS \
|
||||
CONFIG_PMKSA_CACHE_EXTERNAL \
|
||||
CONFIG_WNM
|
||||
|
||||
MMWPA_SUPPLICANT_CONFIG_DISABLE = \
|
||||
CONFIG_BGSCAN_SIMPLE \
|
||||
CONFIG_SMARTCARD \
|
||||
CONFIG_CTRL_IFACE_DBUS_NEW \
|
||||
CONFIG_CTRL_IFACE_DBUS_INTRO \
|
||||
CONFIG_READLINE
|
||||
|
||||
MMWPA_SUPPLICANT_CONFIG_EDITS += 's/\#\(CONFIG_TLS=openssl\)/\1/'
|
||||
|
||||
ifeq ($(CONFIG_MORSE_WPA_SUPPLICANT_S1G_MESH_NETWORKING),y)
|
||||
MMWPA_SUPPLICANT_CONFIG_ENABLE += CONFIG_MESH
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_MORSE_WPA_SUPPLICANT_S1G_EAP),y)
|
||||
MMWPA_SUPPLICANT_CONFIG_ENABLE += \
|
||||
CONFIG_EAP_PEAP \
|
||||
CONFIG_EAP_MD5 \
|
||||
CONFIG_EAP_MSCHAPV2 \
|
||||
CONFIG_EAP_TLS \
|
||||
CONFIG_EAP_TTLS \
|
||||
CONFIG_EAP_GTC \
|
||||
CONFIG_EAP_PWD
|
||||
endif
|
||||
|
||||
define Package/wpa_supplicant_s1g
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=WirelessAPD
|
||||
TITLE:=Morse Micro HaLow wpa_supplicant
|
||||
DEPENDS:= +kmod-morse +libnl +libopenssl +libubus
|
||||
USERID:=network=101:network=101
|
||||
PROVIDES:=wpa_supplicant_s1g
|
||||
endef
|
||||
|
||||
define Package/libwpa_client
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=WirelessAPD
|
||||
TITLE:=libwpa_client
|
||||
DEPENDS:=wpa_supplicant_s1g
|
||||
endef
|
||||
|
||||
define Package/libwpa_client/description
|
||||
wpa_supplicant_s1g client liberary
|
||||
endef
|
||||
|
||||
define Package/wpa_supplicant_s1g/config
|
||||
source "$(SOURCE)/Config.in"
|
||||
endef
|
||||
|
||||
MMWPA_SUPPLICANT_CONFIG = $(PKG_BUILD_DIR)/wpa_supplicant/.config
|
||||
|
||||
define Build/Prepare
|
||||
$(call Build/Prepare/Default)
|
||||
$(CP) $(PKG_BUILD_DIR)/wpa_supplicant/defconfig $(MMWPA_SUPPLICANT_CONFIG)
|
||||
sed -i $(patsubst %,-e 's/^#\(%\)/\1/',$(MMWPA_SUPPLICANT_CONFIG_ENABLE)) \
|
||||
$(patsubst %,-e 's/^\(%\)/#\1/',$(MMWPA_SUPPLICANT_CONFIG_DISABLE)) \
|
||||
$(patsubst %,-e '1i%=y',$(MMWPA_SUPPLICANT_CONFIG_SET)) \
|
||||
$(patsubst %,-e %,$(MMWPA_SUPPLICANT_CONFIG_EDITS)) \
|
||||
$(MMWPA_SUPPLICANT_CONFIG)
|
||||
endef
|
||||
|
||||
TARGET_CPPFLAGS := \
|
||||
-I$(STAGING_DIR)/usr/include/libnl3 \
|
||||
-I$(PKG_BUILD_DIR)/src/crypto \
|
||||
$(TARGET_CPPFLAGS) \
|
||||
-DCONFIG_LIBNL20 \
|
||||
-D_GNU_SOURCE
|
||||
|
||||
TARGET_LDFLAGS += -lnl-3 -lnl-genl-3 -lnl-route-3
|
||||
TARGET_LDFLAGS += -lm -lpthread -lcrypto -lssl
|
||||
|
||||
define Build/RunMake
|
||||
CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" \
|
||||
$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)/$(1) \
|
||||
$(TARGET_CONFIGURE_OPTS) \
|
||||
$(DRIVER_MAKEOPTS) \
|
||||
LIBS="$(TARGET_LDFLAGS)" \
|
||||
LIBS_c="$(TARGET_LDFLAGS_C)" \
|
||||
AR="$(TARGET_CROSS)gcc-ar" \
|
||||
BCHECK= \
|
||||
$(2)
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
+$(call Build/RunMake,wpa_supplicant, \
|
||||
wpa_supplicant_s1g wpa_cli_s1g \
|
||||
)
|
||||
+$(call Build/RunMake,wpa_supplicant, libwpa_client.so)
|
||||
endef
|
||||
|
||||
define Package/wpa_supplicant_s1g/install
|
||||
$(INSTALL_DIR) $(1)/sbin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/wpa_supplicant/wpa_supplicant_s1g $(1)/sbin/
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/wpa_supplicant/wpa_cli_s1g $(1)/sbin/
|
||||
endef
|
||||
|
||||
define Package/libwpa_client/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib/
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/wpa_supplicant/libwpa_client.so $(1)/usr/lib/
|
||||
endef
|
||||
|
||||
define Build/InstallDev
|
||||
$(INSTALL_DIR) $(1)/usr/lib/
|
||||
$(INSTALL_DIR) $(1)/usr/include/
|
||||
$(CP) $(PKG_BUILD_DIR)/wpa_supplicant/libwpa_client.so $(1)/usr/lib/
|
||||
$(CP) $(PKG_BUILD_DIR)/src/common/wpa_ctrl.h $(1)/usr/include/wpa_ctrl.h
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,wpa_supplicant_s1g))
|
||||
$(eval $(call BuildPackage,libwpa_client))
|
||||
@@ -1,45 +0,0 @@
|
||||
From 5433351ed5ab62c2d4fbd15a2c4d8c4aeacb93dc Mon Sep 17 00:00:00 2001
|
||||
From: Evan Benn <evan.benn@morsemicro.com>
|
||||
Date: Thu, 29 Feb 2024 11:09:38 +1100
|
||||
Subject: [PATCH] APP-2573: Emit a DPP PB_STATUS event when push button starts
|
||||
|
||||
---
|
||||
src/ap/dpp_hostapd.c | 1 +
|
||||
wpa_supplicant/dpp_supplicant.c | 2 ++
|
||||
2 files changed, 3 insertions(+)
|
||||
|
||||
diff --git a/src/ap/dpp_hostapd.c b/src/ap/dpp_hostapd.c
|
||||
index b7cca47c714b..3025eef204d2 100644
|
||||
--- a/src/ap/dpp_hostapd.c
|
||||
+++ b/src/ap/dpp_hostapd.c
|
||||
@@ -3960,6 +3960,7 @@ int hostapd_dpp_push_button(struct hostapd_data *hapd, const char *cmd)
|
||||
eloop_register_timeout(100, 0, hostapd_dpp_push_button_expire,
|
||||
hapd, NULL);
|
||||
|
||||
+ wpa_msg(hapd->msg_ctx, MSG_INFO, DPP_EVENT_PB_STATUS "started");
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/wpa_supplicant/dpp_supplicant.c b/wpa_supplicant/dpp_supplicant.c
|
||||
index ab06ff8d32c1..24e4bb3c444d 100644
|
||||
--- a/wpa_supplicant/dpp_supplicant.c
|
||||
+++ b/wpa_supplicant/dpp_supplicant.c
|
||||
@@ -5676,6 +5676,7 @@ static int wpas_dpp_push_button_configurator(struct wpa_supplicant *wpa_s,
|
||||
eloop_register_timeout(100, 0, wpas_dpp_push_button_expire,
|
||||
wpa_s, NULL);
|
||||
|
||||
+ wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_PB_STATUS "started");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -5749,6 +5750,7 @@ int wpas_dpp_push_button(struct wpa_supplicant *wpa_s, const char *cmd)
|
||||
wpa_supplicant_req_scan(wpa_s, 0, 0);
|
||||
|
||||
res = 0;
|
||||
+ wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_PB_STATUS "started");
|
||||
out:
|
||||
|
||||
/* If push button mode failed to start, restart the chirp forever timer */
|
||||
--
|
||||
2.42.0.530.g692be87cbba5
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
From 25631fa387af430b8d7f03302218c66dc161cc6f Mon Sep 17 00:00:00 2001
|
||||
From: Andrew Pope <andrew.pope@morsemicro.com>
|
||||
Date: Tue, 4 Jun 2024 23:12:37 +0000
|
||||
Subject: [PATCH] Merged in SW-11943-dpp-does-not-associate-in-us-regdom (pull
|
||||
request #213)
|
||||
|
||||
SW-11943: DPP does not associate in US regdom
|
||||
|
||||
Two problems contributed to the originally reported issue:
|
||||
|
||||
1. The DPP-PB state machine function will unconditionally cancel any pending off-channel actions - even if the DPP PB discovery phase is over. To fix this, avoid unconditionally completing offchannel actions from DPP-PB state machine function if DPP PB discovery phase is over.
|
||||
|
||||
2. Logic around PKEX retries will manually attempt to complete the exchange on adjacent non-S1G channels. These retries inevitably fail, leading to a quicker collapse of the PKEX exchange attempts and eventual downgrade from v2 to v1 (bad). To fix this, remove non-S1G frequency hopping logic from DPP PB discovery and PKEX exchange phases.
|
||||
|
||||
Approved-by: Neville Young
|
||||
Approved-by: Simon Wadsworth
|
||||
Approved-by: Ayman Grais
|
||||
Approved-by: James Herbert
|
||||
---
|
||||
src/ap/dpp_hostapd.c | 6 ++++++
|
||||
wpa_supplicant/dpp_supplicant.c | 17 +++++++++++++++--
|
||||
2 files changed, 21 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/ap/dpp_hostapd.c b/src/ap/dpp_hostapd.c
|
||||
index b7cca47c7..282581fe5 100644
|
||||
--- a/src/ap/dpp_hostapd.c
|
||||
+++ b/src/ap/dpp_hostapd.c
|
||||
@@ -260,6 +260,12 @@ static int hostapd_dpp_allow_ir(struct hostapd_data *hapd, unsigned int freq)
|
||||
static int hostapd_dpp_pkex_next_channel(struct hostapd_data *hapd,
|
||||
struct dpp_pkex *pkex)
|
||||
{
|
||||
+ /* Following logic is not S1G compatible. Attempting PKEX on non-adjacent S1G channels
|
||||
+ * results in guaranteed failure.
|
||||
+ */
|
||||
+ if (hapd->iconf->ieee80211ah)
|
||||
+ return -1;
|
||||
+
|
||||
if (pkex->freq == 2437)
|
||||
pkex->freq = 5745;
|
||||
else if (pkex->freq == 5745)
|
||||
diff --git a/wpa_supplicant/dpp_supplicant.c b/wpa_supplicant/dpp_supplicant.c
|
||||
index ab06ff8d3..e90e4a163 100644
|
||||
--- a/wpa_supplicant/dpp_supplicant.c
|
||||
+++ b/wpa_supplicant/dpp_supplicant.c
|
||||
@@ -2840,6 +2840,12 @@ static int wpas_dpp_allow_ir(struct wpa_supplicant *wpa_s, unsigned int freq)
|
||||
static int wpas_dpp_pkex_next_channel(struct wpa_supplicant *wpa_s,
|
||||
struct dpp_pkex *pkex)
|
||||
{
|
||||
+#if defined(CONFIG_IEEE80211AH)
|
||||
+ /* Following logic is not S1G compatible. Attempting PKEX on non-adjacent S1G channels
|
||||
+ * results in guaranteed failure.
|
||||
+ */
|
||||
+ return -1;
|
||||
+#endif
|
||||
if (pkex->freq == 2437)
|
||||
pkex->freq = 5745;
|
||||
else if (pkex->freq == 5745)
|
||||
@@ -5113,10 +5119,16 @@ static int * wpas_dpp_presence_ann_channels(struct wpa_supplicant *wpa_s,
|
||||
|
||||
if (chan->flag & (HOSTAPD_CHAN_DISABLED | HOSTAPD_CHAN_RADAR))
|
||||
continue;
|
||||
+#if defined(CONFIG_IEEE80211AH)
|
||||
+ /* Adding channels 44 and 149 at end of scan list is not required
|
||||
+ * for HaLow
|
||||
+ */
|
||||
+#else
|
||||
if (chan->freq == 5220)
|
||||
chan44 = 1;
|
||||
if (chan->freq == 5745)
|
||||
chan149 = 1;
|
||||
+#endif
|
||||
|
||||
/* Morse - All 5GHz channels that are mapped to 1 MHz and 2 MHz.
|
||||
* Channels that aren't relevant to a regulatory domain will be
|
||||
@@ -5573,9 +5585,10 @@ static void wpas_dpp_pb_next(void *eloop_ctx, void *timeout_ctx)
|
||||
if (!wpa_s->dpp_pb_freqs)
|
||||
return;
|
||||
|
||||
- os_get_reltime(&now);
|
||||
- offchannel_send_action_done(wpa_s);
|
||||
+ if (!wpa_s->dpp_pb_discovery_done)
|
||||
+ offchannel_send_action_done(wpa_s);
|
||||
|
||||
+ os_get_reltime(&now);
|
||||
if (os_reltime_expired(&now, &wpa_s->dpp_pb_time, 100)) {
|
||||
wpa_printf(MSG_DEBUG, "DPP: Push button wait time expired");
|
||||
wpas_dpp_push_button_stop(wpa_s);
|
||||
--
|
||||
2.25.1
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
From 591ec24748525171d5647d2a35cd1da1445e7a0b Mon Sep 17 00:00:00 2001
|
||||
From: James Haggerty <james.haggerty@morsemicro.com>
|
||||
Date: Fri, 26 Jul 2024 09:55:03 +1000
|
||||
Subject: [PATCH] Hack out channel 50 (and typo for 51)
|
||||
|
||||
If we use these channels on a board with those channels disabled,
|
||||
the DPP presence announcement fails.
|
||||
|
||||
This is rubbish: see SW-12450
|
||||
---
|
||||
wpa_supplicant/dpp_supplicant.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/wpa_supplicant/dpp_supplicant.c b/wpa_supplicant/dpp_supplicant.c
|
||||
index 09f8ceb07..46e4add95 100644
|
||||
--- a/wpa_supplicant/dpp_supplicant.c
|
||||
+++ b/wpa_supplicant/dpp_supplicant.c
|
||||
@@ -5199,12 +5199,12 @@ static int * wpas_dpp_presence_ann_channels(struct wpa_supplicant *wpa_s,
|
||||
static const int s1g_chirp_channels[] = {
|
||||
/* 2MHz channels */
|
||||
5190, 5230, 5270, 5310, 5510, 5550,
|
||||
- 5630, 5670, 5755, 5795, 5835, 5875,
|
||||
+ 5630, 5670, 5755, 5795, 5835,
|
||||
/* 1MHz channels */
|
||||
5660, 5680, 5180, 5200, 5240, 5260,
|
||||
5280, 5300, 5320, 5500, 5520, 5540,
|
||||
5560, 5580, 5600, 5620, 5640, 5765,
|
||||
- 5785, 5805, 5825, 5845, 5865, 5855
|
||||
+ 5785, 5805, 5825, 5845, 5865
|
||||
};
|
||||
|
||||
if (chan->flag & (HOSTAPD_CHAN_DISABLED | HOSTAPD_CHAN_RADAR))
|
||||
--
|
||||
2.25.1
|
||||
|
||||
@@ -48,51 +48,16 @@ $(call Package/ath12k-wifi-default)
|
||||
TITLE:=board-2.bin for RAP7710c_341x
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-sonicfi-rap750e-h
|
||||
$(call Package/ath12k-wifi-default)
|
||||
TITLE:=board-2.bin for RAP750e_h
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-sonicfi-rap750e-s
|
||||
$(call Package/ath12k-wifi-default)
|
||||
TITLE:=board-2.bin for RAP750E-S
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-sonicfi-rap750w-311a
|
||||
$(call Package/ath12k-wifi-default)
|
||||
TITLE:=board-2.bin for RAP750W_311a
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-cig-wf189h
|
||||
$(call Package/ath12k-wifi-default)
|
||||
TITLE:=board-2.bin for WF189H
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-cig-wf189w
|
||||
$(call Package/ath12k-wifi-default)
|
||||
TITLE:=board-2.bin for WF189W
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-sercomm-ap72tip
|
||||
$(call Package/ath12k-wifi-default)
|
||||
TITLE:=board-2.bin for AP72TIP
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-sercomm-ap72tip-v4
|
||||
$(call Package/ath12k-wifi-default)
|
||||
TITLE:=board-2.bin for AP72TIP-v4
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-zyxel-nwa130be
|
||||
$(call Package/ath12k-wifi-default)
|
||||
TITLE:=board-2.bin for NWA130BE
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-cig-wf672
|
||||
$(call Package/ath12k-wifi-default)
|
||||
TITLE:=board-2.bin for WF672
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-cig-wf189/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
|
||||
@@ -114,24 +79,6 @@ define Package/ath12k-wifi-sonicfi-rap7110c-341x/install
|
||||
$(INSTALL_DATA) ./board-2.bin.rap7110c_341x.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-sonicfi-rap750e-h/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN6432/hw1.0/
|
||||
$(INSTALL_DATA) ./board-2.bin.rap750e_h.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin
|
||||
$(INSTALL_DATA) ./board-2.bin.rap750e_h.QCN6432 $(1)/lib/firmware/ath12k/QCN6432/hw1.0/board-2.bin
|
||||
# $(INSTALL_DATA) ./ipq5332_qcn6432.regdb $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/regdb.bin
|
||||
$(INSTALL_DATA) ./ipq5332_qcn6432.regdb $(1)/lib/firmware/ath12k/QCN6432/hw1.0/regdb.bin
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-sonicfi-rap750e-s/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN6432/hw1.0/
|
||||
$(INSTALL_DATA) ./board-2.bin.rap750e_s.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin
|
||||
$(INSTALL_DATA) ./board-2.bin.rap750e_s.QCN6432 $(1)/lib/firmware/ath12k/QCN6432/hw1.0/board-2.bin
|
||||
# $(INSTALL_DATA) ./ipq5332_qcn6432.regdb $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/regdb.bin
|
||||
$(INSTALL_DATA) ./ipq5332_qcn6432.regdb $(1)/lib/firmware/ath12k/QCN6432/hw1.0/regdb.bin
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-sonicfi-rap750w-311a/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN6432/hw1.0/
|
||||
@@ -149,52 +96,8 @@ define Package/ath12k-wifi-cig-wf189w/install
|
||||
$(INSTALL_DATA) ./ipq5332_qcn6432.regdb $(1)/lib/firmware/ath12k/QCN6432/hw1.0/regdb.bin
|
||||
endef
|
||||
|
||||
|
||||
define Package/ath12k-wifi-cig-wf189h/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN6432/hw1.0/
|
||||
$(INSTALL_DATA) ./board-2.bin.189h.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin
|
||||
$(INSTALL_DATA) ./board-2.bin.189h.QCN6432 $(1)/lib/firmware/ath12k/QCN6432/hw1.0/board-2.bin
|
||||
$(INSTALL_DATA) ./ipq5332_qcn6432.regdb $(1)/lib/firmware/ath12k/QCN6432/hw1.0/regdb.bin
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-sercomm-ap72tip/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
|
||||
$(INSTALL_DATA) ./board-2.bin.ap72tip.QCN92XX $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/board-2.bin
|
||||
$(INSTALL_DATA) ./board-2.bin.ap72tip.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-sercomm-ap72tip-v4/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
|
||||
$(INSTALL_DATA) ./board-2.bin.ap72tip-v4.QCN92XX $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/board-2.bin
|
||||
$(INSTALL_DATA) ./board-2.bin.ap72tip-v4.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-zyxel-nwa130be/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
|
||||
$(INSTALL_DATA) ./board-2.bin.nwa130be.QCN92XX $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/board-2.bin
|
||||
$(INSTALL_DATA) ./board-2.bin.nwa130be.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-cig-wf672/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
|
||||
$(INSTALL_DATA) ./board-2.bin.wf672.QCN92XX $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/board-2.bin
|
||||
$(INSTALL_DATA) ./board-2.bin.wf672.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,ath12k-wifi-cig-wf189))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-edgecore-eap105))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-sonicfi-rap7110c-341x))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-sonicfi-rap750e-h))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-sonicfi-rap750e-s))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-sonicfi-rap750w-311a))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-cig-wf189w))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-cig-wf189h))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-sercomm-ap72tip))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-sercomm-ap72tip-v4))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-zyxel-nwa130be))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-cig-wf672))
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,20 +0,0 @@
|
||||
[
|
||||
{
|
||||
"board": [
|
||||
{
|
||||
"names": [
|
||||
"bus=ahb,qmi-chip-id=0,qmi-board-id=255"
|
||||
],
|
||||
"data": "ap72tip-IPQ5332.bin"
|
||||
}
|
||||
],
|
||||
"regdb": [
|
||||
{
|
||||
"names": [
|
||||
"bus=ahb,qmi-chip-id=0,qmi-board-id=255"
|
||||
],
|
||||
"data": "ipq5332.regdb"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -1,20 +0,0 @@
|
||||
[
|
||||
{
|
||||
"board": [
|
||||
{
|
||||
"names": [
|
||||
"bus=pci,qmi-chip-id=0,qmi-board-id=255"
|
||||
],
|
||||
"data": "ap72tip-QCN92XX.bin"
|
||||
}
|
||||
],
|
||||
"regdb": [
|
||||
{
|
||||
"names": [
|
||||
"bus=pci,qmi-chip-id=0,qmi-board-id=255"
|
||||
],
|
||||
"data": "qcn92xx.regdb"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -1,20 +0,0 @@
|
||||
[
|
||||
{
|
||||
"board": [
|
||||
{
|
||||
"names": [
|
||||
"bus=ahb,qmi-chip-id=0,qmi-board-id=255"
|
||||
],
|
||||
"data": "ap72tip-v4-IPQ5332.bin"
|
||||
}
|
||||
],
|
||||
"regdb": [
|
||||
{
|
||||
"names": [
|
||||
"bus=ahb,qmi-chip-id=0,qmi-board-id=255"
|
||||
],
|
||||
"data": "ipq5332.regdb"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -1,20 +0,0 @@
|
||||
[
|
||||
{
|
||||
"board": [
|
||||
{
|
||||
"names": [
|
||||
"bus=pci,qmi-chip-id=0,qmi-board-id=255"
|
||||
],
|
||||
"data": "ap72tip-v4-QCN92XX.bin"
|
||||
}
|
||||
],
|
||||
"regdb": [
|
||||
{
|
||||
"names": [
|
||||
"bus=pci,qmi-chip-id=0,qmi-board-id=255"
|
||||
],
|
||||
"data": "qcn92xx.regdb"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user