aboutsummaryrefslogtreecommitdiff
path: root/sys/conf
diff options
context:
space:
mode:
authorMax Laier <mlaier@FreeBSD.org>2006-01-29 02:52:42 +0000
committerMax Laier <mlaier@FreeBSD.org>2006-01-29 02:52:42 +0000
commit6aec1278dc6fd4790208608ee99bdc84dcf0b3da (patch)
tree079b229b1f501b3c6590ffcfca8239fa263fc270 /sys/conf
parent69e99c5d4c348234b9a40ff14d4586e44e74eb63 (diff)
firmware(9) is a subsystem to load binary data into the kernel via a
specially crafted module. There are several handrolled sollutions to this problem in the tree already which will be replaced with this. They include iwi(4), ipw(4), ispfw(4) and digi(4). No objection from: arch MFC after: 2 weeks X-MFC after: some drivers have been converted
Notes
Notes: svn path=/head/; revision=154974
Diffstat (limited to 'sys/conf')
-rw-r--r--sys/conf/NOTES1
-rw-r--r--sys/conf/files1
-rw-r--r--sys/conf/kmod.mk28
3 files changed, 30 insertions, 0 deletions
diff --git a/sys/conf/NOTES b/sys/conf/NOTES
index 65284c33a883..e6b139bd6c20 100644
--- a/sys/conf/NOTES
+++ b/sys/conf/NOTES
@@ -1187,6 +1187,7 @@ device nmdm #back-to-back tty devices
device md #Memory/malloc disk
device snp #Snoop device - to look at pty/vty/etc..
device ccd #Concatenated disk driver
+device firmware #firmware(9) support
# Kernel side iconv library
options LIBICONV
diff --git a/sys/conf/files b/sys/conf/files
index b8832bfac782..243f110b4b19 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -1298,6 +1298,7 @@ kern/subr_clock.c optional genclock
kern/subr_devstat.c standard
kern/subr_disk.c standard
kern/subr_eventhandler.c standard
+kern/subr_firmware.c optional firmware
kern/subr_hints.c standard
kern/subr_kdb.c standard
kern/subr_kobj.c standard
diff --git a/sys/conf/kmod.mk b/sys/conf/kmod.mk
index 90b79d841b74..5f90d0bcdbfc 100644
--- a/sys/conf/kmod.mk
+++ b/sys/conf/kmod.mk
@@ -36,6 +36,8 @@
#
# SRCS List of source files.
#
+# FIRMWS List of firmware images in format filename:shortname:version
+#
# DESTDIR The tree where the module gets installed. [not set]
#
# +++ targets +++
@@ -119,6 +121,32 @@ CFLAGS+= -fno-omit-frame-pointer
CFLAGS+= -mlongcall -fno-omit-frame-pointer
.endif
+.if defined(FIRMWS)
+.if !exists(@)
+${KMOD:S/$/.c/}: @
+.else
+${KMOD:S/$/.c/}: @/tools/fw_stub.awk
+.endif
+ ${AWK} -f @/tools/fw_stub.awk ${FIRMWS} -m${KMOD} -c${KMOD:S/$/.c/g}
+
+SRCS+= ${KMOD:S/$/.c/}
+CLEANFILES+= ${KMOD:S/$/.c/}
+
+.for _firmw in ${FIRMWS}
+${_firmw:C/\:.*$/.fwo/}: ${_firmw:C/\:.*$//}
+ @${ECHO} ${_firmw:C/\:.*$//} ${.ALLSRC:M*${_firmw:C/\:.*$//}}
+.if !exists(${.CURDIR}/${_firmw:C/\:.*$//})
+ ln -s ${.ALLSRC:M*${_firmw:C/\:.*$//}} ${_firmw:C/\:.*$//}
+ ${LD} -b binary ${LDFLAGS} -r -d -o ${.TARGET} ${_firmw:C/\:.*$//}
+ rm -f ${_firmw:C/\:.*$//}
+.else
+ ${LD} -b binary ${LDFLAGS} -r -d -o ${.TARGET} ${_firmw:C/\:.*$//}
+.endif
+
+OBJS+= ${_firmw:C/\:.*$/.fwo/}
+.endfor
+.endif
+
OBJS+= ${SRCS:N*.h:R:S/$/.o/g}
.if !defined(PROG)