Deleted Added
full compact
2c2
< * ISP Firmware Helper Pseudo Device for FreeBSD
---
> * ISP Firmware Modules for FreeBSD
4c4
< * Copyright (c) 2000, 2001, by Matthew Jacob
---
> * Copyright (c) 2000, 2001, 2006 by Matthew Jacob
30c30
< __FBSDID("$FreeBSD: head/sys/dev/ispfw/ispfw.c 160079 2006-07-03 08:22:09Z mjacob $");
---
> __FBSDID("$FreeBSD: head/sys/dev/ispfw/ispfw.c 160212 2006-07-09 17:50:20Z mjacob $");
34d33
< #include <sys/malloc.h>
35a35,38
> #include <sys/param.h>
> #include <sys/systm.h>
> #include <sys/linker.h>
> #include <sys/firmware.h>
36a40,57
> #if defined(ISP_ALL) || !defined(KLD_MODULE)
> #define ISP_1040 1
> #define ISP_1040_IT 1
> #define ISP_1080 1
> #define ISP_1080_IT 1
> #define ISP_12160 1
> #define ISP_12160_IT 1
> #define ISP_2100 1
> #define ISP_2200 1
> #define ISP_2300 1
> #define ISP_2322 1
> #ifdef __sparc64__
> #define ISP_1000 1
> #endif
> #define MODULE_NAME "isp"
> #endif
>
> #if defined(ISP_1040) || defined(ISP_1040_IT)
37a59,60
> #endif
> #if defined(ISP_1080) || defined(ISP_1080_IT)
38a62,63
> #endif
> #if defined(ISP_12160) || defined(ISP_12160_IT)
39a65,66
> #endif
> #if defined(ISP_2100)
40a68,69
> #endif
> #if defined(ISP_2200)
41a71,72
> #endif
> #if defined(ISP_2300)
42a74,75
> #endif
> #if defined(ISP_2322)
44c77,78
< #ifdef __sparc64__
---
> #endif
> #if defined(ISP_1000)
48c82,89
< #define ISPFW_VERSION 0
---
> #define ISPFW_VERSION 1
> #define RMACRO(token) \
> if (firmware_register(#token, token##_risc_code, \
> token##_risc_code [3] << 1, ISPFW_VERSION, NULL) == NULL) { \
> printf("unable to register firmware '%s'\n", #token); \
> } else { \
> printf("registered firmware set <%s>\n", #token); \
> }
50,64c91,93
< #define PCI_PRODUCT_QLOGIC_ISP1020 0x1020
< #define PCI_PRODUCT_QLOGIC_ISP1080 0x1080
< #define PCI_PRODUCT_QLOGIC_ISP10160 0x1016
< #define PCI_PRODUCT_QLOGIC_ISP12160 0x1216
< #define PCI_PRODUCT_QLOGIC_ISP1240 0x1240
< #define PCI_PRODUCT_QLOGIC_ISP1280 0x1280
< #define PCI_PRODUCT_QLOGIC_ISP2100 0x2100
< #define PCI_PRODUCT_QLOGIC_ISP2200 0x2200
< #define PCI_PRODUCT_QLOGIC_ISP2300 0x2300
< #define PCI_PRODUCT_QLOGIC_ISP2312 0x2312
< #define PCI_PRODUCT_QLOGIC_ISP2322 0x2322
< #define PCI_PRODUCT_QLOGIC_ISP6312 0x6312
< #ifdef __sparc64__
< #define SBUS_PRODUCT_QLOGIC_ISP1000 0x1000
< #endif
---
> #define UMACRO(token) \
> firmware_unregister(#token); \
> printf("unregistered firmware set <%s>\n", #token);
66,73d94
< typedef void ispfwfunc(int, int, int, const u_int16_t **);
< extern ispfwfunc *isp_get_firmware_p;
< static void isp_get_firmware(int, int, int, const u_int16_t **);
<
< static int ncallers = 0;
< static const u_int16_t ***callp = NULL;
< static int addcaller(const u_int16_t **);
<
75c96
< addcaller(const u_int16_t **caller)
---
> do_load_fw(void)
77,95c98,131
< const u_int16_t ***newcallp;
< int i;
< for (i = 0; i < ncallers; i++) {
< if (callp[i] == caller)
< return (1);
< }
< newcallp = malloc((ncallers + 1) * sizeof (const u_int16_t ***),
< M_DEVBUF, M_NOWAIT);
< if (newcallp == NULL) {
< return (0);
< }
< for (i = 0; i < ncallers; i++) {
< newcallp[i] = callp[i];
< }
< newcallp[ncallers] = caller;
< if (ncallers++)
< free(callp, M_DEVBUF);
< callp = newcallp;
< return (1);
---
> #if defined(ISP_1000)
> RMACRO(isp_1000);
> #endif
> #if defined(ISP_1040)
> RMACRO(isp_1040);
> #endif
> #if defined(ISP_1040_IT)
> RMACRO(isp_1040_it);
> #endif
> #if defined(ISP_1080)
> RMACRO(isp_1080);
> #endif
> #if defined(ISP_1080_IT)
> RMACRO(isp_1080_it);
> #endif
> #if defined(ISP_12160)
> RMACRO(isp_12160);
> #endif
> #if defined(ISP_12160_IT)
> RMACRO(isp_12160_it);
> #endif
> #if defined(ISP_2100)
> RMACRO(isp_2100);
> #endif
> #if defined(ISP_2200)
> RMACRO(isp_2200);
> #endif
> #if defined(ISP_2300)
> RMACRO(isp_2300);
> #endif
> #if defined(ISP_2322)
> RMACRO(isp_2322);
> #endif
> return (0);
98,99c134,135
< static void
< isp_get_firmware(int version, int tgtmode, int devid, const u_int16_t **ptrp)
---
> static int
> do_unload_fw(void)
101,145c137,158
< const u_int16_t *rp = NULL;
<
< if (version == ISPFW_VERSION) {
< switch (devid) {
< case PCI_PRODUCT_QLOGIC_ISP1020:
< if (tgtmode)
< rp = isp_1040_risc_code_it;
< else
< rp = isp_1040_risc_code;
< break;
< case PCI_PRODUCT_QLOGIC_ISP1080:
< case PCI_PRODUCT_QLOGIC_ISP1240:
< case PCI_PRODUCT_QLOGIC_ISP1280:
< if (tgtmode)
< rp = isp_1080_risc_code_it;
< else
< rp = isp_1080_risc_code;
< break;
< case PCI_PRODUCT_QLOGIC_ISP10160:
< case PCI_PRODUCT_QLOGIC_ISP12160:
< if (tgtmode)
< rp = isp_12160_risc_code_it;
< else
< rp = isp_12160_risc_code;
< break;
< case PCI_PRODUCT_QLOGIC_ISP2100:
< rp = isp_2100_risc_code;
< break;
< case PCI_PRODUCT_QLOGIC_ISP2200:
< rp = isp_2200_risc_code;
< break;
< case PCI_PRODUCT_QLOGIC_ISP2300:
< case PCI_PRODUCT_QLOGIC_ISP2312:
< case PCI_PRODUCT_QLOGIC_ISP6312:
< rp = isp_2300_risc_code;
< break;
< case PCI_PRODUCT_QLOGIC_ISP2322:
< rp = isp_2322_risc_code;
< break;
< #ifdef __sparc64__
< case SBUS_PRODUCT_QLOGIC_ISP1000:
< if (tgtmode)
< break;
< rp = isp_1000_risc_code;
< break;
---
> #if defined(ISP_1000)
> UMACRO(isp_1000);
> #elif defined(ISP_1040)
> UMACRO(isp_1040);
> #elif defined(ISP_1040_IT)
> UMACRO(isp_1040_it);
> #elif defined(ISP_1080)
> UMACRO(isp_1080);
> #elif defined(ISP_1080_IT)
> UMACRO(isp_1080_it);
> #elif defined(ISP_12160)
> UMACRO(isp_12160);
> #elif defined(ISP_12160_IT)
> UMACRO(isp_12160_it);
> #elif defined(ISP_2100)
> UMACRO(isp_2100);
> #elif defined(ISP_2200)
> UMACRO(isp_2200);
> #elif defined(ISP_2300)
> UMACRO(isp_2300);
> #elif defined(ISP_2322)
> UMACRO(isp_2322);
147,153c160
< default:
< break;
< }
< }
< if (rp && addcaller(ptrp)) {
< *ptrp = rp;
< }
---
> return (0);
157c164
< isp_module_handler(module_t mod, int what, void *arg)
---
> module_handler(module_t mod, int what, void *arg)
158a166
> int r;
161c169
< isp_get_firmware_p = isp_get_firmware;
---
> r = do_load_fw();
164,171c172
< isp_get_firmware_p = NULL;
< if (ncallers) {
< int i;
< for (i = 0; i < ncallers; i++) {
< *callp[i] = NULL;
< }
< free(callp, M_DEVBUF);
< }
---
> r = do_unload_fw();
174c175
< return (EOPNOTSUPP);
---
> r = EOPNOTSUPP;
177c178
< return (0);
---
> return (r);
180c181
< "ispfw", isp_module_handler, NULL
---
> MODULE_NAME, module_handler, NULL
182,184c183,209
< DECLARE_MODULE(ispfw, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
< MODULE_VERSION(ispfw, ISPFW_VERSION);
< MODULE_DEPEND(ispfw, isp, 1, 1, 1);
---
> #ifndef KLD_MODULE
> DECLARE_MODULE(isp, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
> #else
> #if defined(ISP_1000)
> DECLARE_MODULE(isp_1000, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
> #elif defined(ISP_1040)
> DECLARE_MODULE(isp_1040, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
> #elif defined(ISP_1040_IT)
> DECLARE_MODULE(isp_1040_it, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
> #elif defined(ISP_1080)
> DECLARE_MODULE(isp_1080, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
> #elif defined(ISP_1080_IT)
> DECLARE_MODULE(isp_1080_it, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
> #elif defined(ISP_12160)
> DECLARE_MODULE(isp_12160, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
> #elif defined(ISP_12160_IT)
> DECLARE_MODULE(isp_12160_IT, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
> #elif defined(ISP_2100)
> DECLARE_MODULE(isp_2100, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
> #elif defined(ISP_2200)
> DECLARE_MODULE(isp_2200, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
> #elif defined(ISP_2300)
> DECLARE_MODULE(isp_2300, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
> #elif defined(ISP_2322)
> DECLARE_MODULE(isp_2322, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
> #endif
> #endif