malta: Remove kernel 5.15 configuration
[openwrt/staging/wigyori.git] / package / kernel / mac80211 / files / lib / wifi / mac80211.sh
1 #!/bin/sh
2
3 append DRIVERS "mac80211"
4
5 check_mac80211_device() {
6 local device="$1"
7 local path="$2"
8 local macaddr="$3"
9
10 [ -n "$found" ] && return 0
11
12 phy_path=
13 config_get phy "$device" phy
14 json_select wlan
15 [ -n "$phy" ] && case "$phy" in
16 phy*)
17 [ -d /sys/class/ieee80211/$phy ] && \
18 phy_path="$(iwinfo nl80211 path "$dev")"
19 ;;
20 *)
21 if json_is_a "$phy" object; then
22 json_select "$phy"
23 json_get_var phy_path path
24 json_select ..
25 elif json_is_a "${phy%.*}" object; then
26 json_select "${phy%.*}"
27 json_get_var phy_path path
28 json_select ..
29 phy_path="$phy_path+${phy##*.}"
30 fi
31 ;;
32 esac
33 json_select ..
34 [ -n "$phy_path" ] || config_get phy_path "$device" path
35 [ -n "$path" -a "$phy_path" = "$path" ] && {
36 found=1
37 return 0
38 }
39
40 config_get dev_macaddr "$device" macaddr
41
42 [ -n "$macaddr" -a "$dev_macaddr" = "$macaddr" ] && found=1
43
44 return 0
45 }
46
47
48 __get_band_defaults() {
49 local phy="$1"
50
51 ( iw phy "$phy" info; echo ) | awk '
52 BEGIN {
53 bands = ""
54 }
55
56 ($1 == "Band" || $1 == "") && band {
57 if (channel) {
58 mode="NOHT"
59 if (ht) mode="HT20"
60 if (vht && band != "1:") mode="VHT80"
61 if (he) mode="HE80"
62 if (he && band == "1:") mode="HE20"
63 sub("\\[", "", channel)
64 sub("\\]", "", channel)
65 bands = bands band channel ":" mode " "
66 }
67 band=""
68 }
69
70 $1 == "Band" {
71 band = $2
72 channel = ""
73 vht = ""
74 ht = ""
75 he = ""
76 }
77
78 $0 ~ "Capabilities:" {
79 ht=1
80 }
81
82 $0 ~ "VHT Capabilities" {
83 vht=1
84 }
85
86 $0 ~ "HE Iftypes" {
87 he=1
88 }
89
90 $1 == "*" && $3 == "MHz" && $0 !~ /disabled/ && band && !channel {
91 channel = $4
92 }
93
94 END {
95 print bands
96 }'
97 }
98
99 get_band_defaults() {
100 local phy="$1"
101
102 for c in $(__get_band_defaults "$phy"); do
103 local band="${c%%:*}"
104 c="${c#*:}"
105 local chan="${c%%:*}"
106 c="${c#*:}"
107 local mode="${c%%:*}"
108
109 case "$band" in
110 1) band=2g;;
111 2) band=5g;;
112 3) band=60g;;
113 4) band=6g;;
114 *) band="";;
115 esac
116
117 [ -n "$band" ] || continue
118 [ -n "$mode_band" -a "$band" = "6g" ] && return
119
120 mode_band="$band"
121 channel="$chan"
122 htmode="$mode"
123 done
124 }
125
126 check_devidx() {
127 case "$1" in
128 radio[0-9]*)
129 local idx="${1#radio}"
130 [ "$devidx" -ge "${1#radio}" ] && devidx=$((idx + 1))
131 ;;
132 esac
133 }
134
135 check_board_phy() {
136 local name="$2"
137
138 json_select "$name"
139 json_get_var phy_path path
140 json_select ..
141
142 if [ "$path" = "$phy_path" ]; then
143 board_dev="$name"
144 elif [ "${path%+*}" = "$phy_path" ]; then
145 fallback_board_dev="$name.${path#*+}"
146 fi
147 }
148
149 detect_mac80211() {
150 devidx=0
151 config_load wireless
152 config_foreach check_devidx wifi-device
153
154 json_load_file /etc/board.json
155
156 for _dev in /sys/class/ieee80211/*; do
157 [ -e "$_dev" ] || continue
158
159 dev="${_dev##*/}"
160
161 mode_band=""
162 channel=""
163 htmode=""
164 ht_capab=""
165
166 get_band_defaults "$dev"
167
168 path="$(iwinfo nl80211 path "$dev")"
169 macaddr="$(cat /sys/class/ieee80211/${dev}/macaddress)"
170
171 # work around phy rename related race condition
172 [ -n "$path" -o -n "$macaddr" ] || continue
173
174 board_dev=
175 fallback_board_dev=
176 json_for_each_item check_board_phy wlan
177 [ -n "$board_dev" ] || board_dev="$fallback_board_dev"
178 [ -n "$board_dev" ] && dev="$board_dev"
179
180 found=
181 config_foreach check_mac80211_device wifi-device "$path" "$macaddr"
182 [ -n "$found" ] && continue
183
184 name="radio${devidx}"
185 devidx=$(($devidx + 1))
186 case "$dev" in
187 phy*)
188 if [ -n "$path" ]; then
189 dev_id="set wireless.${name}.path='$path'"
190 else
191 dev_id="set wireless.${name}.macaddr='$macaddr'"
192 fi
193 ;;
194 *)
195 dev_id="set wireless.${name}.phy='$dev'"
196 ;;
197 esac
198
199 uci -q batch <<-EOF
200 set wireless.${name}=wifi-device
201 set wireless.${name}.type=mac80211
202 ${dev_id}
203 set wireless.${name}.channel=${channel}
204 set wireless.${name}.band=${mode_band}
205 set wireless.${name}.htmode=$htmode
206 set wireless.${name}.disabled=1
207
208 set wireless.default_${name}=wifi-iface
209 set wireless.default_${name}.device=${name}
210 set wireless.default_${name}.network=lan
211 set wireless.default_${name}.mode=ap
212 set wireless.default_${name}.ssid=OpenWrt
213 set wireless.default_${name}.encryption=none
214 EOF
215 uci -q commit wireless
216 done
217 }