99 lines
3.5 KiB
Bash
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
|
|
}
|