diff options
author | gallatin <gallatin@FreeBSD.org> | 2007-07-19 16:16:00 +0000 |
---|---|---|
committer | gallatin <gallatin@FreeBSD.org> | 2007-07-19 16:16:00 +0000 |
commit | 6c7e29b98e2f08fd5d7c418a92bcd85eed99d951 (patch) | |
tree | 561ff88641fa7c5f079548d8847609a88202dc8d /sys/dev/mxge/mxge_eth_z8e.c | |
parent | 5088f3d698499e1b1b63fe063d2482b45daf5031 (diff) | |
download | FreeBSD-src-6c7e29b98e2f08fd5d7c418a92bcd85eed99d951.zip FreeBSD-src-6c7e29b98e2f08fd5d7c418a92bcd85eed99d951.tar.gz |
- Enable static building of mxge(4) and its firmware.
- Add custom .c wrappers for the firmware, rather than the standard
firmware(9) generated firmware objects to work around toolchain
problems on ia64 involving linking objects produced by
ld -b -binary into the kernel.
- Move from using Myricom's ".dat" firmware blobs to using Myricom's
zlib compressed ".h" firmware header files. This is done to
facilitate the custom wrappers, and saves a fair amount of wired
memory in the case where the firmware is built in, or preloaded.
- Fix two compile issues in mxge which only appear on non-i386/amd64.
Reviewed by: mlaier, mav (earlier version with just zlib support)
Glanced at by: sam
Approved by: re (kensmith)
Diffstat (limited to 'sys/dev/mxge/mxge_eth_z8e.c')
-rw-r--r-- | sys/dev/mxge/mxge_eth_z8e.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/sys/dev/mxge/mxge_eth_z8e.c b/sys/dev/mxge/mxge_eth_z8e.c new file mode 100644 index 0000000..570f654 --- /dev/null +++ b/sys/dev/mxge/mxge_eth_z8e.c @@ -0,0 +1,47 @@ +/* + * from: FreeBSD: src/sys/tools/fw_stub.awk,v 1.6 2007/03/02 11:42:53 flz + */ +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); +#include <sys/param.h> +#include <sys/errno.h> +#include <sys/kernel.h> +#include <sys/module.h> +#include <sys/linker.h> +#include <sys/firmware.h> +#include <sys/systm.h> +#include <dev/mxge/eth_z8e.h> + +static int +mxge_eth_z8e_fw_modevent(module_t mod, int type, void *unused) +{ + const struct firmware *fp, *parent; + int error; + switch (type) { + case MOD_LOAD: + + fp = firmware_register("mxge_eth_z8e", eth_z8e, + (size_t)eth_z8e_length, + eth_z8e_uncompressed_length, NULL); + if (fp == NULL) + goto fail_0; + parent = fp; + return (0); + fail_0: + return (ENXIO); + case MOD_UNLOAD: + error = firmware_unregister("mxge_eth_z8e"); + return (error); + } + return (EINVAL); +} + +static moduledata_t mxge_eth_z8e_fw_mod = { + "mxge_eth_z8e_fw", + mxge_eth_z8e_fw_modevent, + 0 +}; +DECLARE_MODULE(mxge_eth_z8e_fw, mxge_eth_z8e_fw_mod, SI_SUB_DRIVERS, SI_ORDER_FIRST); +MODULE_VERSION(mxge_eth_z8e_fw, 1); +MODULE_DEPEND(mxge_eth_z8e_fw, firmware, 1, 1, 1); + |