1 include $(TOPDIR
)/rules.mk
2 include $(INCLUDE_DIR
)/version.mk
8 PKG_SOURCE_URL
=$(PROJECT_GIT
)/project
/firmware
/qca-wireless.git
9 PKG_SOURCE_DATE
:=2025-10-17
10 PKG_SOURCE_VERSION
:=a1529e183333e38bdc95dc8d9317b7af2bec0dcd
11 PKG_MIRROR_HASH
:=30ce8f808424602cba556e106cb16080ef29d6d45a9d9018e04664598460eb2f
14 include $(INCLUDE_DIR
)/package.mk
19 # Use ath10k-bdencoder from https://github.com/qca/qca-swiss-army-knife.git
20 # to generate the board-* files here.
22 # This is intended to be used on an interim basis until device-specific
23 # board data for new devices is available through the upstream compilation
25 # Please send a mail with your device-specific board files upstream.
26 # You can find instructions and examples on the linux-wireless wiki:
27 # <https://wireless.wiki.kernel.org/en/users/drivers/ath10k/boardfiles>
32 alfa-network_ap120c-ax \
36 buffalo_wxr-5950ax12 \
37 cambiumnetworks_xe34 \
47 ignitenet_ss-w2-ac2600 \
78 tplink_eap610-outdoor \
80 tplink_eap623od-hd-v1 \
81 tplink_eap625-outdoor-hd-v1 \
83 tplink_archer-c59-v1 \
85 tplink_archer-c60-v1 \
104 ALLWIFIPACKAGES
:=$(foreach BOARD
,$(ALLWIFIBOARDS
),ipq-wifi-
$(BOARD
))
106 define Package
/ipq-wifi-default
107 SUBMENU
:=ath10k Board-Specific Overrides
110 DEPENDS
:=@
(TARGET_ath79||TARGET_ipq40xx||TARGET_ipq806x||TARGET_qualcommax||TARGET_qualcommbe
)
114 define ipq-wifi-install-one-to
115 $(INSTALL_DIR
) $(2)/lib
/firmware
/ath10k
/$(3)/
116 $(INSTALL_DATA
) $(1) $(2)/lib
/firmware
/ath10k
/$(3)/board-2.bin
119 define ipq-wifi-install-ath11-one-to
120 $(INSTALL_DIR
) $(2)/lib
/firmware
/ath11k
/$(3)/
121 $(INSTALL_DATA
) $(1) $(2)/lib
/firmware
/ath11k
/$(3)/board-2.bin
124 define ipq-wifi-install-ath12-one-to
125 $(INSTALL_DIR
) $(2)/lib
/firmware
/ath12k
/$(3)/
126 $(INSTALL_DATA
) $(1) $(2)/lib
/firmware
/ath12k
/$(3)/board-2.bin
129 define ipq-wifi-install-one
130 $(if
$(filter $(suffix $(1)),.QCA4019 .qca4019
),\
131 $(call ipq-wifi-install-one-to
,$(1),$(2),QCA4019
/hw1.0
),\
132 $(if
$(filter $(suffix $(1)),.QCA9888 .qca9888
),\
133 $(call ipq-wifi-install-one-to
,$(1),$(2),QCA9888
/hw2.0
),\
134 $(if
$(filter $(suffix $(1)),.QCA9889 .qca9889
),\
135 $(call ipq-wifi-install-one-to
,$(1),$(2),QCA9887
/hw1.0
),\
136 $(if
$(filter $(suffix $(1)),.QCA9984 .qca9984
),\
137 $(call ipq-wifi-install-one-to
,$(1),$(2),QCA9984
/hw1.0
),\
138 $(if
$(filter $(suffix $(1)),.QCA9988 .qca9988
),\
139 $(call ipq-wifi-install-one-to
,$(1),$(2),QCA9984
/hw1.0
),\
140 $(if
$(filter $(suffix $(1)),.QCA99X0 .qca99x0
),\
141 $(call ipq-wifi-install-one-to
,$(1),$(2),QCA99X0
/hw2.0
),\
142 $(if
$(filter $(suffix $(1)),.IPQ5018 .ipq5018
),\
143 $(call ipq-wifi-install-ath11-one-to
,$(1),$(2),IPQ5018
/hw1.0
),\
144 $(if
$(filter $(suffix $(1)),.IPQ6018 .ipq6018
),\
145 $(call ipq-wifi-install-ath11-one-to
,$(1),$(2),IPQ6018
/hw1.0
),\
146 $(if
$(filter $(suffix $(1)),.IPQ8074 .ipq8074
),\
147 $(call ipq-wifi-install-ath11-one-to
,$(1),$(2),IPQ8074
/hw2.0
),\
148 $(if
$(filter $(suffix $(1)),.QCN6122 .qcn6122
),\
149 $(call ipq-wifi-install-ath11-one-to
,$(1),$(2),QCN6122
/hw1.0
),\
150 $(if
$(filter $(suffix $(1)),.QCN9074 .qcn9074
),\
151 $(call ipq-wifi-install-ath11-one-to
,$(1),$(2),QCN9074
/hw1.0
),\
152 $(if
$(filter $(suffix $(1)),.QCN9274 .qcn9274
),\
153 $(call ipq-wifi-install-ath12-one-to
,$(1),$(2),QCN9274
/hw2.0
),\
154 $(error Unrecognized board-file
suffix '$(suffix $(1))' for
'$(1)')\
158 # Blank line required at end of above define due to foreach context
160 define generate-ipq-wifi-package
161 define Package
/ipq-wifi-
$(1)
162 $(call Package
/ipq-wifi-default
)
163 TITLE
:=board-2.bin Overrides for
$(2)
164 CONFLICTS
:=$(PREV_BOARD
)
167 define Package
/ipq-wifi-
$(1)/description
168 The
$(2) requires board-specific
, reference
("cal") data
169 that is not yet present in the upstream wireless firmware distribution.
171 This package supplies board-2.bin file
(s
) that
, in the interim
,
172 overwrite those supplied by the ath10k-firmware-
* packages.
174 This is package is only necessary for the
$(2).
176 Do not
install it for any other device
!
179 define Package
/ipq-wifi-
$(1)/install-overlay
180 $$$$(foreach IPQ_WIFI_BOARD_FILE
,$$$$(wildcard $(PKG_BUILD_DIR
)/board-
$(1).
*),\
181 $$$$(call ipq-wifi-install-one
,$$$$(IPQ_WIFI_BOARD_FILE
),$$(1)))
184 PREV_BOARD
+=ipq-wifi-
$(1)
187 # To add local files for testing:
188 # 1. create a new directory in the ipq-wifi package directory called "files".
189 # 2. place there the needed board files.
191 # To send a board file upstream:
192 # 1. create a pull request in https://github.com/openwrt/firmware_qca-wireless or
193 # send a patch to the mailing list adding the tag firmware/qca-wireless before
195 # 2. create a pull request in the main openwrt repository bumping the ipq-wifi
196 # package to the new version and adding the required lines to add the board file.
198 # Changes needed to the ipq-wifi Makefile:
199 # 1. Add board name to ALLWIFIBOARDS
200 # 2. Add $(eval $(call generate-ipq-wifi-package,<devicename>,<display name>))
202 # Board files should follow this name structure:
203 # board-<devicename>.<qca4019|qca9888|qca9889|qca9984|qca99x0|ipq6018|ipq8074>
205 $(eval
$(call generate-ipq-wifi-package
,8devices_kiwi
,8devices Kiwi
))
206 $(eval
$(call generate-ipq-wifi-package
,8devices_mango
,8devices Mango
))
207 $(eval
$(call generate-ipq-wifi-package
,alfa-network_ap120c-ax
,ALFA Network AP120C-AX
))
208 $(eval
$(call generate-ipq-wifi-package
,aliyun_ap8220
,Aliyun AP8220
))
209 $(eval
$(call generate-ipq-wifi-package
,arcadyan_aw1000
,Arcadyan AW1000
))
210 $(eval
$(call generate-ipq-wifi-package
,asus_rt-ax89x
,Asus RT-AX89X
))
211 $(eval
$(call generate-ipq-wifi-package
,buffalo_wxr-5950ax12
,Buffalo WXR-5950AX12
))
212 $(eval
$(call generate-ipq-wifi-package
,cambiumnetworks_xe34
,Cambium Networks XE3-4
))
213 $(eval
$(call generate-ipq-wifi-package
,cmcc_rm2-6
,CMCC RM2-6
))
214 $(eval
$(call generate-ipq-wifi-package
,compex_wpq873
,Compex WPQ-873
))
215 $(eval
$(call generate-ipq-wifi-package
,dynalink_dl-wrx36
,Dynalink DL-WRX36
))
216 $(eval
$(call generate-ipq-wifi-package
,edgecore_eap102
,Edgecore EAP102
))
217 $(eval
$(call generate-ipq-wifi-package
,edimax_cax1800
,Edimax CAX1800
))
218 $(eval
$(call generate-ipq-wifi-package
,elecom_wrc-x3000gs2
,ELECOM WRC-X3000GS2
))
219 $(eval
$(call generate-ipq-wifi-package
,glinet_gl-ax1800
,GL.iNet GL-AX1800
))
220 $(eval
$(call generate-ipq-wifi-package
,glinet_gl-axt1800
,GL.iNet GL-AXT1800
))
221 $(eval
$(call generate-ipq-wifi-package
,glinet_gl-b3000
,GL.iNet GL-B3000
))
222 $(eval
$(call generate-ipq-wifi-package
,ignitenet_ss-w2-ac2600
,Ignitenet SS-W2-AC2600
))
223 $(eval
$(call generate-ipq-wifi-package
,iodata_wn-dax3000gr
,I-O DATA WN-DAX3000GR
))
224 $(eval
$(call generate-ipq-wifi-package
,linksys_homewrk
,Linksys HomeWRK
))
225 $(eval
$(call generate-ipq-wifi-package
,linksys_mr5500
,Linksys MR5500
))
226 $(eval
$(call generate-ipq-wifi-package
,linksys_mr7350
,Linksys MR7350
))
227 $(eval
$(call generate-ipq-wifi-package
,linksys_mr7500
,Linksys MR7500
))
228 $(eval
$(call generate-ipq-wifi-package
,linksys_mx2000
,Linksys MX2000
))
229 $(eval
$(call generate-ipq-wifi-package
,linksys_mx4200
,Linksys MX4200
))
230 $(eval
$(call generate-ipq-wifi-package
,linksys_mx5300
,Linksys MX5300
))
231 $(eval
$(call generate-ipq-wifi-package
,linksys_mx5500
,Linksys MX5500
))
232 $(eval
$(call generate-ipq-wifi-package
,linksys_mx8500
,Linksys MX8500
))
233 $(eval
$(call generate-ipq-wifi-package
,linksys_spnmx56
,Linksys SPNMX56
))
234 $(eval
$(call generate-ipq-wifi-package
,linksys_whw03
,Linksys WHW03
))
235 $(eval
$(call generate-ipq-wifi-package
,meraki_mr30h
,Meraki MR30H
))
236 $(eval
$(call generate-ipq-wifi-package
,meraki_z3
,Meraki Z3
))
237 $(eval
$(call generate-ipq-wifi-package
,netgear_lbr20
,Netgear LBR20
))
238 $(eval
$(call generate-ipq-wifi-package
,netgear_rax120v2
,Netgear RAX120v2
))
239 $(eval
$(call generate-ipq-wifi-package
,netgear_sxk80
,Netgear SXK80
))
240 $(eval
$(call generate-ipq-wifi-package
,netgear_wax214
,Netgear WAX214
))
241 $(eval
$(call generate-ipq-wifi-package
,netgear_wax218
,Netgear WAX218
))
242 $(eval
$(call generate-ipq-wifi-package
,netgear_wax610
,Netgear WAX610
))
243 $(eval
$(call generate-ipq-wifi-package
,netgear_wax610y
,Netgear WAX610Y
))
244 $(eval
$(call generate-ipq-wifi-package
,netgear_wax620
,Netgear WAX620
))
245 $(eval
$(call generate-ipq-wifi-package
,netgear_wax630
,Netgear WAX630
))
246 $(eval
$(call generate-ipq-wifi-package
,qihoo_360v6
,Qihoo
360V6
))
247 $(eval
$(call generate-ipq-wifi-package
,qnap_301w
,QNAP
301w
))
248 $(eval
$(call generate-ipq-wifi-package
,prpl_haze
,prpl Haze
))
249 $(eval
$(call generate-ipq-wifi-package
,redmi_ax6
,Redmi AX6
))
250 $(eval
$(call generate-ipq-wifi-package
,skspruce_wia3300-20
,SKSpruce WIA3300-20
))
251 $(eval
$(call generate-ipq-wifi-package
,spectrum_sax1v1k
,Spectrum SAX1V1K
))
252 $(eval
$(call generate-ipq-wifi-package
,tplink_deco-x80-5g
,TP-Link Deco X80-5G
))
253 $(eval
$(call generate-ipq-wifi-package
,tplink_eap610-outdoor
,TPLink EAP610-Outdoor
))
254 $(eval
$(call generate-ipq-wifi-package
,tplink_eap620hd-v1
,TP-Link EAP620 HD v1
))
255 $(eval
$(call generate-ipq-wifi-package
,tplink_eap623od-hd-v1
,TP-Link EAP623-Outdoor HD v1
))
256 $(eval
$(call generate-ipq-wifi-package
,tplink_eap625-outdoor-hd-v1
,TP-Link EAP625-Outdoor HD v1
))
257 $(eval
$(call generate-ipq-wifi-package
,tplink_eap660hd-v1
,TP-Link EAP660 HD v1
))
258 $(eval
$(call generate-ipq-wifi-package
,tplink_archer-c59-v1
,TP-Link Archer C59 V1
))
259 $(eval
$(call generate-ipq-wifi-package
,tplink_archer-c6-v2
,TP-Link Archer C6 V2
))
260 $(eval
$(call generate-ipq-wifi-package
,tplink_archer-c60-v1
,TP-Link Archer C60 V1
))
261 $(eval
$(call generate-ipq-wifi-package
,wallys_dr40x9
,Wallys DR40X9
))
262 $(eval
$(call generate-ipq-wifi-package
,xiaomi_aiot-ac2350
,Xiaomi AIoT AC2350
))
263 $(eval
$(call generate-ipq-wifi-package
,xiaomi_ax3600
,Xiaomi AX3600
))
264 $(eval
$(call generate-ipq-wifi-package
,xiaomi_ax6000
,Xiaomi AX6000
))
265 $(eval
$(call generate-ipq-wifi-package
,xiaomi_ax9000
,Xiaomi AX9000
))
266 $(eval
$(call generate-ipq-wifi-package
,yyets_le1
,YYeTs LE1
))
267 $(eval
$(call generate-ipq-wifi-package
,yuncore_ax830
,Yuncore AX830
))
268 $(eval
$(call generate-ipq-wifi-package
,yuncore_ax850
,Yuncore AX850
))
269 $(eval
$(call generate-ipq-wifi-package
,yuncore_ax880
,Yuncore AX880
))
270 $(eval
$(call generate-ipq-wifi-package
,yuncore_fap650
,Yuncore FAP650
))
271 $(eval
$(call generate-ipq-wifi-package
,zbtlink_zbt-z800ax
,Zbtlink ZBT-Z800AX
))
272 $(eval
$(call generate-ipq-wifi-package
,zte_mf269
,ZTE MF269
))
273 $(eval
$(call generate-ipq-wifi-package
,zte_mf286ar
,ZTE MF286A
/R
))
274 $(eval
$(call generate-ipq-wifi-package
,zte_mf286c
,ZTE MF286C
))
275 $(eval
$(call generate-ipq-wifi-package
,zte_mf287
,ZTE MF287
))
276 $(eval
$(call generate-ipq-wifi-package
,zte_mf287plus
,ZTE MF287Plus
))
277 $(eval
$(call generate-ipq-wifi-package
,zyxel_nbg7815
,Zyxel NBG7815
))
279 $(foreach PACKAGE
,$(ALLWIFIPACKAGES
),$(eval
$(call BuildPackage
,$(PACKAGE
))))