aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/isp/isp_sbus.c
diff options
context:
space:
mode:
authorMatt Jacob <mjacob@FreeBSD.org>2006-07-09 17:50:20 +0000
committerMatt Jacob <mjacob@FreeBSD.org>2006-07-09 17:50:20 +0000
commit9a5af41076070ffd3bd3cfd053cbed3653bb63e5 (patch)
tree02927e03d3704d09891594870139269cd8f3c287 /sys/dev/isp/isp_sbus.c
parent626b06c711c18ffa86fb92a5a966fb963a55840f (diff)
Notes
Diffstat (limited to 'sys/dev/isp/isp_sbus.c')
-rw-r--r--sys/dev/isp/isp_sbus.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/sys/dev/isp/isp_sbus.c b/sys/dev/isp/isp_sbus.c
index dc05871f4fcc6..2addae246da7b 100644
--- a/sys/dev/isp/isp_sbus.c
+++ b/sys/dev/isp/isp_sbus.c
@@ -32,6 +32,10 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/systm.h>
+#if __FreeBSD_version >= 700000
+#include <sys/linker.h>
+#include <sys/firmware.h>
+#endif
#include <sys/bus.h>
#include <sys/kernel.h>
#include <sys/module.h>
@@ -92,7 +96,6 @@ struct isp_sbussoftc {
struct resource * sbus_ires;
};
-extern ispfwfunc *isp_get_firmware_p;
static device_method_t isp_sbus_methods[] = {
/* Device interface */
@@ -107,6 +110,12 @@ static driver_t isp_sbus_driver = {
};
static devclass_t isp_devclass;
DRIVER_MODULE(isp, sbus, isp_sbus_driver, isp_devclass, 0, 0);
+#if __FreeBSD_version >= 700000
+MODULE_DEPEND(isp, firmware, 1, 1, 1);
+#else
+typedef void ispfwfunc(int, int, int, uint16_t **);
+extern ispfwfunc *isp_get_firmware_p;
+#endif
static int
isp_sbus_probe(device_t dev)
@@ -249,13 +258,24 @@ isp_sbus_attach(device_t dev)
isp->isp_confopts |= ISP_CFG_NONVRAM;
+#if __FreeBSD_version >= 700000
+ isp->isp_osinfo.fw = firmware_get("isp_1000");
+ if (isp->isp_osinfo.fw) {
+ union {
+ const void *cp;
+ uint16_t *sp;
+ } stupid;
+ stupid.cp = isp->isp_osinfo.fw->data;
+ isp->isp_mdvec->dv_ispfw = stupid.sp;
+ }
+#else
/*
* Try and find firmware for this device.
*/
-
if (isp_get_firmware_p) {
(*isp_get_firmware_p)(0, 0, 0x1000, &sbs->sbus_mdvec.dv_ispfw);
}
+#endif
iqd = 0;
sbs->sbus_ires = bus_alloc_resource_any(dev, SYS_RES_IRQ, &iqd,