summaryrefslogtreecommitdiff
path: root/net/wifi-firmware-kmod
diff options
context:
space:
mode:
Diffstat (limited to 'net/wifi-firmware-kmod')
-rw-r--r--net/wifi-firmware-kmod/Makefile43
-rw-r--r--net/wifi-firmware-kmod/Makefile.inc96
-rw-r--r--net/wifi-firmware-kmod/files/Makefile.inc.in26
-rw-r--r--net/wifi-firmware-kmod/files/WHENCE.awk.in24
4 files changed, 154 insertions, 35 deletions
diff --git a/net/wifi-firmware-kmod/Makefile b/net/wifi-firmware-kmod/Makefile
index 53a4ff214678..22249ab82c6f 100644
--- a/net/wifi-firmware-kmod/Makefile
+++ b/net/wifi-firmware-kmod/Makefile
@@ -1,5 +1,5 @@
PORTNAME= wifi-firmware-kmod
-PORTVERSION= 20230508
+PORTVERSION= 20240513
CATEGORIES= net
MAINTAINER= bz@FreeBSD.org
@@ -7,11 +7,42 @@ COMMENT= Firmware modules for WiFi NIC drivers
WWW= https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/
RUN_DEPENDS= \
- wifi-firmware-ath10k-kmod>0:net/wifi-firmware-ath10k-kmod \
- wifi-firmware-ath11k-kmod>0:net/wifi-firmware-ath11k-kmod \
- wifi-firmware-mt76-kmod>0:net/wifi-firmware-mt76-kmod \
- wifi-firmware-rtw88-kmod>0:net/wifi-firmware-rtw88-kmod \
- wifi-firmware-rtw89-kmod>0:net/wifi-firmware-rtw89-kmod
+ wifi-firmware-ath10k-kmod-qca988x_hw20>0:net/wifi-firmware-ath10k-kmod@qca988x_hw20 \
+ wifi-firmware-ath10k-kmod-qca6174_hw21>0:net/wifi-firmware-ath10k-kmod@qca6174_hw21 \
+ wifi-firmware-ath10k-kmod-qca6174_hw30>0:net/wifi-firmware-ath10k-kmod@qca6174_hw30 \
+ wifi-firmware-ath10k-kmod-qca99x0_hw20>0:net/wifi-firmware-ath10k-kmod@qca99x0_hw20 \
+ wifi-firmware-ath10k-kmod-qca9377_hw10>0:net/wifi-firmware-ath10k-kmod@qca9377_hw10 \
+ wifi-firmware-ath10k-kmod-qca9984_hw10>0:net/wifi-firmware-ath10k-kmod@qca9984_hw10 \
+ wifi-firmware-ath10k-kmod-qca9887_hw10>0:net/wifi-firmware-ath10k-kmod@qca9887_hw10 \
+ wifi-firmware-ath10k-kmod-qca9888_hw20>0:net/wifi-firmware-ath10k-kmod@qca9888_hw20 \
+ \
+ wifi-firmware-ath11k-kmod-qca6390_hw20>0:net/wifi-firmware-ath11k-kmod@qca6390_hw20 \
+ wifi-firmware-ath11k-kmod-qcn9074_hw10>0:net/wifi-firmware-ath11k-kmod@qcn9074_hw10 \
+ wifi-firmware-ath11k-kmod-wcn6855_hw20>0:net/wifi-firmware-ath11k-kmod@wcn6855_hw20 \
+ \
+ wifi-firmware-ath12k-kmod-wcn7850_hw20>0:net/wifi-firmware-ath12k-kmod@wcn7850_hw20 \
+ \
+ wifi-firmware-iwlwifi-kmod-7000>0:net/wifi-firmware-iwlwifi-kmod@7000 \
+ wifi-firmware-iwlwifi-kmod-8000>0:net/wifi-firmware-iwlwifi-kmod@8000 \
+ wifi-firmware-iwlwifi-kmod-9000>0:net/wifi-firmware-iwlwifi-kmod@9000 \
+ wifi-firmware-iwlwifi-kmod-22000>0:net/wifi-firmware-iwlwifi-kmod@22000 \
+ wifi-firmware-iwlwifi-kmod-ax210>0:net/wifi-firmware-iwlwifi-kmod@ax210 \
+ wifi-firmware-iwlwifi-kmod-bz>0:net/wifi-firmware-iwlwifi-kmod@bz \
+ \
+ wifi-firmware-mt76-kmod-mt7915>0:net/wifi-firmware-mt76-kmod@mt7915 \
+ wifi-firmware-mt76-kmod-mt792x>0:net/wifi-firmware-mt76-kmod@mt792x \
+ wifi-firmware-mt76-kmod-mt7996>0:net/wifi-firmware-mt76-kmod@mt7996 \
+ \
+ wifi-firmware-rtw88-kmod-rtw8723d>0:net/wifi-firmware-rtw88-kmod@rtw8723d \
+ wifi-firmware-rtw88-kmod-rtw8821c>0:net/wifi-firmware-rtw88-kmod@rtw8821c \
+ wifi-firmware-rtw88-kmod-rtw8822b>0:net/wifi-firmware-rtw88-kmod@rtw8822b \
+ wifi-firmware-rtw88-kmod-rtw8822c>0:net/wifi-firmware-rtw88-kmod@rtw8822c \
+ \
+ wifi-firmware-rtw89-kmod-rtw8851b>0:net/wifi-firmware-rtw89-kmod@rtw8851b \
+ wifi-firmware-rtw89-kmod-rtw8852a>0:net/wifi-firmware-rtw89-kmod@rtw8852a \
+ wifi-firmware-rtw89-kmod-rtw8852b>0:net/wifi-firmware-rtw89-kmod@rtw8852b \
+ wifi-firmware-rtw89-kmod-rtw8852c>0:net/wifi-firmware-rtw89-kmod@rtw8852c \
+ wifi-firmware-rtw89-kmod-rtw8922a>0:net/wifi-firmware-rtw89-kmod@rtw8922a
USES= metaport
diff --git a/net/wifi-firmware-kmod/Makefile.inc b/net/wifi-firmware-kmod/Makefile.inc
index 8177bd045e51..e6d57564f4f2 100644
--- a/net/wifi-firmware-kmod/Makefile.inc
+++ b/net/wifi-firmware-kmod/Makefile.inc
@@ -2,39 +2,56 @@ PORTNAME= wifi-firmware-${FWDRV}-kmod
PORTVERSION= ${FWDRV_VERSION}
CATEGORIES= net
MASTER_SITES= https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/
-MASTER_SITES+= LOCAL/bz:mkbuild
MAINTAINER= bz@FreeBSD.org
-COMMENT= Firmware modules for ${FWDRV} ${FLAVOR} WiFi NIC
+COMMENT= Firmware modules for the ${FWDRV} (${FLAVOR}) WiFi NIC driver
WWW?= https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/${FWSUBDIR}
FWDRV_VERSION?= 0
FWDRV?= base
LICENSE_NAME?= firmware license (${FWDRV})
-LICENSE_FILE?= ${WRKSRC}/${LICENSE}
+LICENSE_FILE?= ${WRKSRC}/${FLAVOR}/${LICENSE}
LICENSE_PERMS?= dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept
EXTRACT_SUFX=
-DISTURL_SUFFIX= ?h=${PORTVERSION}
+DISTURL_SUFFIX?= ?h=${PORTVERSION}
# Sanity checks
.if !defined(FWDRV) || !defined(FWSUBDIR) || !defined(FWSUBS) || \
!defined(FWDRV_VERSION) || !defined(LICENSE) || \
- !defined(DISTFILES_fw) || !defined(DISTFILES_lic)
+ !defined(DISTFILES_${FWDRV}) || !defined(DISTFILES_${FWDRV}_lic) || \
+ !defined(BASEDIR) || !defined(WHENCE_REGEX)
IGNORE= is a metaport or misconfigured child port; there is nothing to build
.endif
-# Split things up in case we decide to make this flavors once we add support for more drivers.
+FILESDIR= ${BASEDIR}/files
+
+# Split things into the full package (driver name) and more specific flavors.
+FLAVORS= ${FWDRV} \
+ ${FWSUBS}
+
+# What a kludge.... thanks https://docs.freebsd.org/en/books/porters-handbook/flavors/ !
+FLAVOR?= ${FLAVORS:[1]}
+
+# Generate the conflicts list.
+.for f in ${FWSUBS}
+${FWDRV}_CONFLICTS_INSTALL+= ${PORTNAME}-${f}
+${f}_PKGNAMESUFFIX= -${f}
+${f}_CONFLICTS_INSTALL= ${PORTNAME}
+.endfor
+
+DISTFILES_FLAVOR:= ${DISTFILES_${FLAVOR}}
+DISTFILES_FLAVOR_lic:= ${DISTFILES_${FLAVOR}_lic}
+
DISTFILES= \
- ${DISTFILES_fw} \
- ${DISTFILES_lic} \
+ ${DISTFILES_FLAVOR} \
+ ${DISTFILES_FLAVOR_lic} \
${LICENSE}${DISTURL_SUFFIX} \
- WHENCE${DISTURL_SUFFIX} \
- modules_${FWDRV}fw_${PORTVERSION}.tar.gz:mkbuild
+ WHENCE${DISTURL_SUFFIX}
DIST_SUBDIR= linux-firmware/${FWDRV}fw
-EXTRACT_ONLY= modules_${FWDRV}fw_${PORTVERSION}.tar.gz
+EXTRACT_ONLY=
ONLY_FOR_ARCHS= aarch64 amd64 i386
ONLY_FOR_ARCHS_REASON= LinuxKPI driver only available for these architectures
@@ -42,41 +59,62 @@ ONLY_FOR_ARCHS_REASON= LinuxKPI driver only available for these architectures
USES= kmod uidfix
post-extract:
- @${MV} ${WRKDIR}/${FWDRV}fw ${WRKSRC}
- @${CP} ${DISTDIR}/${DIST_SUBDIR}/${LICENSE}${DISTURL_SUFFIX} ${WRKSRC}/${LICENSE}
- @${CP} ${DISTDIR}/${DIST_SUBDIR}/WHENCE${DISTURL_SUFFIX} ${WRKSRC}/WHENCE.in
- @${AWK} -f ${WRKSRC}/WHENCE.awk ${WRKSRC}/WHENCE.in > ${WRKSRC}/WHENCE
- @${MKDIR} ${WRKSRC}/fw
-.for _f in ${DISTFILES_fw}
- @${MKDIR} ${WRKSRC}/fw/${_f:H}
- ${CP} ${DISTDIR}/${DIST_SUBDIR}/${_f} ${WRKSRC}/fw/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@}
+ @${MKDIR} ${WRKSRC}/${FLAVOR}/fw
+ # Deal with supplementary licenses files.
+ @${CP} ${DISTDIR}/${DIST_SUBDIR}/${LICENSE}${DISTURL_SUFFIX} ${WRKSRC}/${FLAVOR}/${LICENSE}
+ @${CP} ${DISTDIR}/${DIST_SUBDIR}/WHENCE${DISTURL_SUFFIX} ${WRKSRC}/${FLAVOR}/WHENCE.in
+ @${SED} -e "s@%%XXX%%@${WHENCE_REGEX:Q}@g" ${FILESDIR}/WHENCE.awk.in > ${WRKSRC}/${FLAVOR}/WHENCE.awk
+ @${AWK} -f ${WRKSRC}/${FLAVOR}/WHENCE.awk ${WRKSRC}/${FLAVOR}/WHENCE.in > ${WRKSRC}/${FLAVOR}/WHENCE
+ # Prepare toplevel Makefile and Makefile.inc.
+ @${ECHO_CMD} "SUBDIR=" > ${WRKSRC}/${FLAVOR}/Makefile
+ @${SED} -e "s@%%FWDRV%%@${FWDRV}@g" \
+ -e "s@%%FWSUBDIR%%@${FWSUBDIR}@g" \
+ ${FILESDIR}/Makefile.inc.in > ${WRKSRC}/${FLAVOR}/Makefile.inc
+.for _f in ${DISTFILES_FLAVOR}
+ # We remove '.' and '-' as well as '/' as they don't work well in loader.conf.
+ @${MKDIR} ${WRKSRC}/${FLAVOR}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}
+ # Create subdir (firmware file) Makefile.
+ @${ECHO_CMD} "FWNAME=${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:T}" > ${WRKSRC}/${FLAVOR}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}/Makefile
+.if (${_f:H:C,^[^/]*,,1:C,^/,,} != "")
+ @${ECHO_CMD} "FWSUBSUBDIR=${_f:H:C,^[^/]*,,1:C,^/,,}" >> ${WRKSRC}/${FLAVOR}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}/Makefile
+.endif
+ # XXX-BZ recover firmware versions later again from somewhere? Pain to keep track though, else use 0 or ${FWDRV_VERSION}?
+ @${ECHO_CMD} "VERSION=0" >> ${WRKSRC}/${FLAVOR}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}/Makefile
+ @${ECHO_CMD} '.include <bsd.kmod.mk>' >> ${WRKSRC}/${FLAVOR}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}/Makefile
+ # Add subdir to top-level Makefile.
+ @${ECHO_CMD} "SUBDIR+=${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}" >> ${WRKSRC}/${FLAVOR}/Makefile
+ # Create firmware source directory and copy in distfile.
+ @${MKDIR} ${WRKSRC}/${FLAVOR}/fw/${_f:H}
+ ${CP} ${DISTDIR}/${DIST_SUBDIR}/${_f} ${WRKSRC}/${FLAVOR}/fw/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@}
.endfor
-.for _f in ${DISTFILES_lic}
- ${CP} ${DISTDIR}/${DIST_SUBDIR}/${_f} ${WRKSRC}/fw/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,/,_,g}
+ @${ECHO_CMD} '.include <bsd.subdir.mk>' >> ${WRKSRC}/${FLAVOR}/Makefile
+ # Copy in additional licenses files.
+.for _f in ${DISTFILES_FLAVOR_lic}
+ ${CP} ${DISTDIR}/${DIST_SUBDIR}/${_f} ${WRKSRC}/${FLAVOR}/fw/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,/,_,g}
.endfor
# Internal hack we should probably upstream.
# Add WHENCE file next to license where it makes sense despite not being a license.
_USES_stage+= 881:post-install-license
post-install-license:
- ${INSTALL_DATA} ${WRKSRC}/WHENCE ${STAGEDIR}${_LICENSE_DIR}/
-.for _f in ${DISTFILES_lic}
- ${INSTALL_DATA} ${WRKSRC}/fw/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,/,_,g} \
+ ${INSTALL_DATA} ${WRKSRC}/${FLAVOR}/WHENCE ${STAGEDIR}${_LICENSE_DIR}/
+.for _f in ${DISTFILES_FLAVOR_lic}
+ ${INSTALL_DATA} ${WRKSRC}/${FLAVOR}/fw/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,/,_,g} \
${STAGEDIR}${_LICENSE_DIR}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,/,_,g}
.endfor
.include <bsd.port.pre.mk>
-MAKE_ENV+= FWSRCDIR=${WRKSRC}/fw/${FWSUBDIR}
+MAKE_ENV+= FWSRCDIR=${WRKSRC}/${FLAVOR}/fw
MAKE_FLAGS+= -C ${WRKSRC}/${FLAVOR}
-# Add firmware files.
-.for _f in ${DISTFILES_fw}
+# Add firmware files to plist.
+.for _f in ${DISTFILES_FLAVOR}
PLIST_FILES+= ${KMODDIR}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}.ko
.endfor
-# Record extra license files.
+# Record extra licenses files in plist.
PLIST_FILES+= ${_LICENSE_DIR}/WHENCE
-.for _f in ${DISTFILES_lic}
+.for _f in ${DISTFILES_FLAVOR_lic}
PLIST_FILES+= ${_LICENSE_DIR}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,/,_,g}
.endfor
diff --git a/net/wifi-firmware-kmod/files/Makefile.inc.in b/net/wifi-firmware-kmod/files/Makefile.inc.in
new file mode 100644
index 000000000000..4fd8a079583c
--- /dev/null
+++ b/net/wifi-firmware-kmod/files/Makefile.inc.in
@@ -0,0 +1,26 @@
+# $FreeBSD$
+
+# We remove '.' and '-' as well as '/' as they don't work well in laoder.conf.
+# If (counter part) set, prefix name part with '_' separator.
+_KOFWSUBDIR= ${FWSUBSUBDIR:S,.,_,g:S,-,_,g:S,/,_,g}
+KOFWSUBDIR= ${"${_KOFWSUBDIR}" != "":?_${_KOFWSUBDIR}:}
+
+_FWNAME= ${FWNAME:S,.,_,g:S,-,_,g}
+KOFWNAME= ${"%%FWSUBDIR%%" != "":?_${_FWNAME}:${_FWNAME}}
+
+_NAME?= %%FWSUBDIR%%${KOFWSUBDIR}${KOFWNAME}
+
+IMG= ${_NAME}
+KMOD= ${_NAME}
+
+CLEANFILES+= ${IMG}
+
+FIRMWS= ${IMG}:${IMG}:${VERSION}
+
+#FIRMWARE_LICENSE=
+
+# If we build from ports let us overwrite this.
+FWSRCDIR?= ${SRCTOP}/sys/contrib/dev/%%FWDRV%%fw
+
+${IMG}: ${FWSRCDIR}/%%FWSUBDIR%%/${FWSUBSUBDIR}/${FWNAME}
+ cp ${.ALLSRC} ${.TARGET}
diff --git a/net/wifi-firmware-kmod/files/WHENCE.awk.in b/net/wifi-firmware-kmod/files/WHENCE.awk.in
new file mode 100644
index 000000000000..38a7c27a97a2
--- /dev/null
+++ b/net/wifi-firmware-kmod/files/WHENCE.awk.in
@@ -0,0 +1,24 @@
+BEGIN {
+ start=1;
+ block=0;
+}
+{
+ if (start == 1) {
+ print;
+ if (/^----/) {
+ start=0;
+ }
+ }
+ if (block == 0) {
+ if (/^Driver: %%XXX%%/) {
+ block=1;
+ printf "\n";
+ print;
+ }
+ } else {
+ print;
+ if (/^----/) {
+ block=0;
+ }
+ }
+}