Files

99 lines
3.5 KiB
Bash

#!/bin/sh
#
# Copyright (C) 2023, hanwckf <hanwckf@vip.qq.com>
#
# 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
}