#!/bin/sh # # Copyright (C) 2023, hanwckf # # v21 2026-07-21: HONEST labels (UCI now matches physical reality). # Driver binds profiles by MacAddress match, NOT by l1profile order: # b0.dat (MacAddress=2.4G eeprom MAC) -> rax0 netdev (2.4G HW) # b1.dat (MacAddress=5G eeprom MAC) -> ra0 netdev (5G HW) # v21 additionally swaps INDEX0_profile_path in l1profile.dat to # "b1.dat;b0.dat", so l1dat_parser maps: idx=1 (ra0) -> b1.dat, # idx=2 (rax0) -> b0.dat. Result: each UCI section writes the DAT that # the driver actually binds to its phy, so UCI band/ssid can be honest: # idx=1 (ra0, 5G HW): band=5g HE160 ch 36 ssid=ImmortalWrt-5G # idx=2 (rax0, 2.4G HW): band=2g HE40 ch auto ssid=ImmortalWrt-2.4G # Kernel DBDC merge quirk (unchanged): VHT_BW / VHT_Sec80_Channel for # ra0's slot are taken from b0.dat, so mtwifi_cfg still forces # VHT_BW=2 + VHT_Sec80_Channel=155 into the band==2g profile. # Validated live on v20 2026-07-21: ra0 2401Mbps HE160 ch36, # rax0 HE40, DBDC_card0.dat identical to v20 working state. append DRIVERS "mtwifi" detect_mtwifi() { local idx ifname local band hwmode htmode htbsscoex ssid dbdc_main channel if [ -d "/sys/module/mt_wifi" ]; then dev_list="$(l1util list)" for dev in $dev_list; do ifname="$(l1util get ${dev} main_ifname)" idx="$(l1util get ${dev} subidx)" if [ $idx -eq 1 ]; then # v29: UCI idx=1 is the 5G config. Driver maps band=5g content # to the 5G PHY (whichever netdev it is this boot). dbdc_main="1" band="5g" hwmode="11a" htmode="HE160" htbsscoex="0" ssid="ImmortalWrt-5G" txpower="100" channel="36" else # v29: UCI idx=2 is the 2.4G config. dbdc_main="0" band="2g" hwmode="11g" htmode="HE40" htbsscoex="1" ssid="ImmortalWrt-2.4G" txpower="100" channel="auto" fi config_get type ${dev//./_} type if [ "$type" != "mtwifi" ]; then uci -q batch <<-EOF set wireless.${dev//./_}=wifi-device set wireless.${dev//./_}.type=mtwifi set wireless.${dev//./_}.phy=${ifname} set wireless.${dev//./_}.hwmode=${hwmode} set wireless.${dev//./_}.band=${band} set wireless.${dev//./_}.dbdc_main=${dbdc_main} set wireless.${dev//./_}.channel=${channel} set wireless.${dev//./_}.txpower=${txpower} set wireless.${dev//./_}.htmode=${htmode} set wireless.${dev//./_}.country=CN set wireless.${dev//./_}.mu_beamformer=1 set wireless.${dev//./_}.noscan=${htbsscoex} set wireless.${dev//./_}.serialize=1 set wireless.default_${dev//./_}=wifi-iface set wireless.default_${dev//./_}.device=${dev//./_} set wireless.default_${dev//./_}.network=lan set wireless.default_${dev//./_}.mode=ap set wireless.default_${dev//./_}.ssid=${ssid} set wireless.default_${dev//./_}.encryption=none set wireless.default_${dev//./_}.uapsd=0 EOF else uci -q batch <<-EOF set wireless.${dev//./_}.phy=${ifname} set wireless.${dev//./_}.hwmode=${hwmode} set wireless.${dev//./_}.band=${band} set wireless.${dev//./_}.dbdc_main=${dbdc_main} set wireless.${dev//./_}.channel=${channel} set wireless.${dev//./_}.htmode=${htmode} set wireless.${dev//./_}.country=CN set wireless.${dev//./_}.mu_beamformer=1 set wireless.${dev//./_}.noscan=${htbsscoex} set wireless.${dev//./_}.serialize=1 set wireless.default_${dev//./_}.device=${dev//./_} set wireless.default_${dev//./_}.network=lan set wireless.default_${dev//./_}.mode=ap EOF fi uci -q commit wireless done fi }