From b55f64207ab4370943a8e78583ea5bff10a1740c Mon Sep 17 00:00:00 2001 From: Gonzalo Ruiz Date: Mon, 30 Jun 2025 11:32:54 +0200 Subject: [PATCH] kernel-module-nxp-wlan: add watch-regdomain service Add service to automatically detect changes in the global regulatory domain and force a PHY regulatory domain change. This allows detecting regulatory domain changes based on beacon information when 802.11d is enabled and instructing the wireless driver to download the rgpower firmware file corresponding to the selected country. If the selected country is not one of the supported ones, Worldwide rgpower_WW.bin file will be downloaded by default. Run the check service every 5 seconds through a systemd timer. https://onedigi.atlassian.net/browse/DEL-8974 Signed-off-by: Gonzalo Ruiz --- .../watch-regdomain.service | 7 +++++++ .../kernel-module-nxp-wlan/watch-regdomain.timer | 11 +++++++++++ .../kernel-module-nxp-wlan/watch_regdomain.sh | 14 ++++++++++++++ .../kernel-module-nxp-wlan_git.bbappend | 15 +++++++++++++++ 4 files changed, 47 insertions(+) create mode 100644 meta-digi-arm/dynamic-layers/freescale-layer/recipes-kernel/kernel-modules/kernel-module-nxp-wlan/watch-regdomain.service create mode 100644 meta-digi-arm/dynamic-layers/freescale-layer/recipes-kernel/kernel-modules/kernel-module-nxp-wlan/watch-regdomain.timer create mode 100755 meta-digi-arm/dynamic-layers/freescale-layer/recipes-kernel/kernel-modules/kernel-module-nxp-wlan/watch_regdomain.sh diff --git a/meta-digi-arm/dynamic-layers/freescale-layer/recipes-kernel/kernel-modules/kernel-module-nxp-wlan/watch-regdomain.service b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-kernel/kernel-modules/kernel-module-nxp-wlan/watch-regdomain.service new file mode 100644 index 000000000..91916656c --- /dev/null +++ b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-kernel/kernel-modules/kernel-module-nxp-wlan/watch-regdomain.service @@ -0,0 +1,7 @@ +[Unit] +Description=Monitor for global regulatory domain changes +After=network.target + +[Service] +Type=oneshot +ExecStart=/usr/sbin/watch_regdomain.sh diff --git a/meta-digi-arm/dynamic-layers/freescale-layer/recipes-kernel/kernel-modules/kernel-module-nxp-wlan/watch-regdomain.timer b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-kernel/kernel-modules/kernel-module-nxp-wlan/watch-regdomain.timer new file mode 100644 index 000000000..0d67a6f3f --- /dev/null +++ b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-kernel/kernel-modules/kernel-module-nxp-wlan/watch-regdomain.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Check regdomain every 5 seconds + +[Timer] +OnBootSec=5sec +OnUnitInactiveSec=5sec +AccuracySec=1s +Unit=watch-regdomain.service + +[Install] +WantedBy=timers.target diff --git a/meta-digi-arm/dynamic-layers/freescale-layer/recipes-kernel/kernel-modules/kernel-module-nxp-wlan/watch_regdomain.sh b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-kernel/kernel-modules/kernel-module-nxp-wlan/watch_regdomain.sh new file mode 100755 index 000000000..2724dec29 --- /dev/null +++ b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-kernel/kernel-modules/kernel-module-nxp-wlan/watch_regdomain.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +REGDOMAIN_FILE="/var/run/regdomain" + +previous=$(cat "${REGDOMAIN_FILE}" 2>/dev/null) + +# Extract the 'global' regulatory domain +current=$(iw reg get | grep -m1 '^country' | cut -d' ' -f2 | tr -d ':') + +if [ -n "${current}" ] && [ "${current}" != "${previous}" ]; then + echo "Global regulatory domain changed to '${current}'" + echo "${current}" > "${REGDOMAIN_FILE}" + iw reg set ${current} +fi diff --git a/meta-digi-arm/dynamic-layers/freescale-layer/recipes-kernel/kernel-modules/kernel-module-nxp-wlan_git.bbappend b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-kernel/kernel-modules/kernel-module-nxp-wlan_git.bbappend index 4c5b73ed1..c71130c87 100644 --- a/meta-digi-arm/dynamic-layers/freescale-layer/recipes-kernel/kernel-modules/kernel-module-nxp-wlan_git.bbappend +++ b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-kernel/kernel-modules/kernel-module-nxp-wlan_git.bbappend @@ -5,6 +5,9 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI:append = " \ file://81-iw612-wifi.rules \ file://load_iw612.sh \ + file://watch_regdomain.sh \ + file://watch-regdomain.service \ + file://watch-regdomain.timer \ " do_install:append () { @@ -12,11 +15,23 @@ do_install:append () { install -m 0644 ${WORKDIR}/81-iw612-wifi.rules ${D}${sysconfdir}/udev/rules.d/ install -d ${D}${sysconfdir}/udev/scripts install -m 0777 ${WORKDIR}/load_iw612.sh ${D}${sysconfdir}/udev/scripts/ + + if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then + install -d ${D}${systemd_system_unitdir} + install -m 0644 ${WORKDIR}/watch-regdomain.service ${D}${systemd_system_unitdir}/watch-regdomain.service + install -m 0644 ${WORKDIR}/watch-regdomain.timer ${D}${systemd_system_unitdir}/watch-regdomain.timer + fi + + install -d ${D}${sbindir} + install -m 0755 ${WORKDIR}/watch_regdomain.sh ${D}${sbindir}/ } FILES:${PN}:append = " \ ${sysconfdir}/udev/rules.d \ ${sysconfdir}/udev/scripts \ + ${sbindir}/watch_regdomain.sh \ + ${systemd_system_unitdir}/watch-regdomain.service \ + ${systemd_system_unitdir}/watch-regdomain.timer \ " RDEPENDS:${PN}:append = " firmware-murata-nxp"