28 #define KMSG_COMPONENT "zfcp"
29 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
33 #include <linux/slab.h>
34 #include <linux/module.h>
39 #define ZFCP_BUS_ID_SIZE 20
45 static char *init_device;
87 static void __init zfcp_init_device_setup(
char *devstr)
90 char *
str, *str_saved;
100 token =
strsep(&str,
",");
105 token =
strsep(&str,
",");
109 token =
strsep(&str,
",");
114 zfcp_init_device_configure(busid, wwpn, lun);
119 pr_err(
"%s is not a valid SCSI device\n", devstr);
122 static int __init zfcp_module_init(
void)
132 sizeof(
struct zfcp_fc_req));
146 pr_err(
"Registering the misc device zfcp_cfdc failed\n");
152 pr_err(
"The zfcp device driver could not register with "
153 "the common I/O layer\n");
154 goto out_ccw_register;
158 zfcp_init_device_setup(init_device);
175 static void __exit zfcp_module_exit(
void)
201 if (port->
wwpn == wwpn) {
211 static int zfcp_allocate_low_mem_buffers(
struct zfcp_adapter *adapter)
213 adapter->
pool.erp_req =
214 mempool_create_kmalloc_pool(1,
sizeof(
struct zfcp_fsf_req));
215 if (!adapter->
pool.erp_req)
218 adapter->
pool.gid_pn_req =
219 mempool_create_kmalloc_pool(1,
sizeof(
struct zfcp_fsf_req));
220 if (!adapter->
pool.gid_pn_req)
223 adapter->
pool.scsi_req =
224 mempool_create_kmalloc_pool(1,
sizeof(
struct zfcp_fsf_req));
225 if (!adapter->
pool.scsi_req)
228 adapter->
pool.scsi_abort =
229 mempool_create_kmalloc_pool(1,
sizeof(
struct zfcp_fsf_req));
230 if (!adapter->
pool.scsi_abort)
233 adapter->
pool.status_read_req =
236 if (!adapter->
pool.status_read_req)
239 adapter->
pool.qtcb_pool =
241 if (!adapter->
pool.qtcb_pool)
245 adapter->
pool.sr_data =
247 if (!adapter->
pool.sr_data)
250 adapter->
pool.gid_pn =
252 if (!adapter->
pool.gid_pn)
258 static void zfcp_free_low_mem_buffers(
struct zfcp_adapter *adapter)
260 if (adapter->
pool.erp_req)
262 if (adapter->
pool.scsi_req)
264 if (adapter->
pool.scsi_abort)
266 if (adapter->
pool.qtcb_pool)
268 if (adapter->
pool.status_read_req)
270 if (adapter->
pool.sr_data)
272 if (adapter->
pool.gid_pn)
311 seq_printf(m,
"zfcp: %s microcode level %x\n",
316 static int zfcp_setup_adapter_work_queue(
struct zfcp_adapter *adapter)
320 snprintf(name,
sizeof(name),
"zfcp_q_%s",
329 static void zfcp_destroy_adapter_work_queue(
struct zfcp_adapter *adapter)
359 kref_init(&adapter->
ref);
371 if (zfcp_allocate_low_mem_buffers(adapter))
374 adapter->
req_list = zfcp_reqlist_alloc();
381 if (zfcp_setup_adapter_work_queue(adapter))
390 INIT_LIST_HEAD(&adapter->
events.list);
433 zfcp_destroy_adapter_work_queue(adapter);
459 zfcp_free_low_mem_buffers(adapter);
481 static void zfcp_port_release(
struct device *
dev)
507 kref_get(&adapter->
ref);
533 port->
dev.release = zfcp_port_release;
562 return ERR_PTR(retval);
575 for (i = 0; i <
count; i++, sg++)
596 for (i = 0; i <
count; i++, sg++) {