Lines Matching refs:adapter

59 	struct zfcp_adapter *adapter;  in zfcp_init_device_configure()  local
69 adapter = zfcp_ccw_adapter_by_cdev(cdev); in zfcp_init_device_configure()
70 if (!adapter) in zfcp_init_device_configure()
73 port = zfcp_get_port_by_wwpn(adapter, wwpn); in zfcp_init_device_configure()
82 zfcp_ccw_adapter_put(adapter); in zfcp_init_device_configure()
184 struct zfcp_port *zfcp_get_port_by_wwpn(struct zfcp_adapter *adapter, in zfcp_get_port_by_wwpn() argument
190 read_lock_irqsave(&adapter->port_list_lock, flags); in zfcp_get_port_by_wwpn()
191 list_for_each_entry(port, &adapter->port_list, list) in zfcp_get_port_by_wwpn()
195 read_unlock_irqrestore(&adapter->port_list_lock, flags); in zfcp_get_port_by_wwpn()
198 read_unlock_irqrestore(&adapter->port_list_lock, flags); in zfcp_get_port_by_wwpn()
202 static int zfcp_allocate_low_mem_buffers(struct zfcp_adapter *adapter) in zfcp_allocate_low_mem_buffers() argument
204 adapter->pool.erp_req = in zfcp_allocate_low_mem_buffers()
206 if (!adapter->pool.erp_req) in zfcp_allocate_low_mem_buffers()
209 adapter->pool.gid_pn_req = in zfcp_allocate_low_mem_buffers()
211 if (!adapter->pool.gid_pn_req) in zfcp_allocate_low_mem_buffers()
214 adapter->pool.scsi_req = in zfcp_allocate_low_mem_buffers()
216 if (!adapter->pool.scsi_req) in zfcp_allocate_low_mem_buffers()
219 adapter->pool.scsi_abort = in zfcp_allocate_low_mem_buffers()
221 if (!adapter->pool.scsi_abort) in zfcp_allocate_low_mem_buffers()
224 adapter->pool.status_read_req = in zfcp_allocate_low_mem_buffers()
227 if (!adapter->pool.status_read_req) in zfcp_allocate_low_mem_buffers()
230 adapter->pool.qtcb_pool = in zfcp_allocate_low_mem_buffers()
232 if (!adapter->pool.qtcb_pool) in zfcp_allocate_low_mem_buffers()
236 adapter->pool.sr_data = in zfcp_allocate_low_mem_buffers()
238 if (!adapter->pool.sr_data) in zfcp_allocate_low_mem_buffers()
241 adapter->pool.gid_pn = in zfcp_allocate_low_mem_buffers()
243 if (!adapter->pool.gid_pn) in zfcp_allocate_low_mem_buffers()
249 static void zfcp_free_low_mem_buffers(struct zfcp_adapter *adapter) in zfcp_free_low_mem_buffers() argument
251 if (adapter->pool.erp_req) in zfcp_free_low_mem_buffers()
252 mempool_destroy(adapter->pool.erp_req); in zfcp_free_low_mem_buffers()
253 if (adapter->pool.scsi_req) in zfcp_free_low_mem_buffers()
254 mempool_destroy(adapter->pool.scsi_req); in zfcp_free_low_mem_buffers()
255 if (adapter->pool.scsi_abort) in zfcp_free_low_mem_buffers()
256 mempool_destroy(adapter->pool.scsi_abort); in zfcp_free_low_mem_buffers()
257 if (adapter->pool.qtcb_pool) in zfcp_free_low_mem_buffers()
258 mempool_destroy(adapter->pool.qtcb_pool); in zfcp_free_low_mem_buffers()
259 if (adapter->pool.status_read_req) in zfcp_free_low_mem_buffers()
260 mempool_destroy(adapter->pool.status_read_req); in zfcp_free_low_mem_buffers()
261 if (adapter->pool.sr_data) in zfcp_free_low_mem_buffers()
262 mempool_destroy(adapter->pool.sr_data); in zfcp_free_low_mem_buffers()
263 if (adapter->pool.gid_pn) in zfcp_free_low_mem_buffers()
264 mempool_destroy(adapter->pool.gid_pn); in zfcp_free_low_mem_buffers()
276 int zfcp_status_read_refill(struct zfcp_adapter *adapter) in zfcp_status_read_refill() argument
278 while (atomic_read(&adapter->stat_miss) > 0) in zfcp_status_read_refill()
279 if (zfcp_fsf_status_read(adapter->qdio)) { in zfcp_status_read_refill()
280 if (atomic_read(&adapter->stat_miss) >= in zfcp_status_read_refill()
281 adapter->stat_read_buf_num) { in zfcp_status_read_refill()
282 zfcp_erp_adapter_reopen(adapter, 0, "axsref1"); in zfcp_status_read_refill()
287 atomic_dec(&adapter->stat_miss); in zfcp_status_read_refill()
299 struct zfcp_adapter *adapter = in zfcp_print_sl() local
303 dev_name(&adapter->ccw_device->dev), in zfcp_print_sl()
304 adapter->fsf_lic_version); in zfcp_print_sl()
307 static int zfcp_setup_adapter_work_queue(struct zfcp_adapter *adapter) in zfcp_setup_adapter_work_queue() argument
312 dev_name(&adapter->ccw_device->dev)); in zfcp_setup_adapter_work_queue()
313 adapter->work_queue = create_singlethread_workqueue(name); in zfcp_setup_adapter_work_queue()
315 if (adapter->work_queue) in zfcp_setup_adapter_work_queue()
320 static void zfcp_destroy_adapter_work_queue(struct zfcp_adapter *adapter) in zfcp_destroy_adapter_work_queue() argument
322 if (adapter->work_queue) in zfcp_destroy_adapter_work_queue()
323 destroy_workqueue(adapter->work_queue); in zfcp_destroy_adapter_work_queue()
324 adapter->work_queue = NULL; in zfcp_destroy_adapter_work_queue()
339 struct zfcp_adapter *adapter; in zfcp_adapter_enqueue() local
344 adapter = kzalloc(sizeof(struct zfcp_adapter), GFP_KERNEL); in zfcp_adapter_enqueue()
345 if (!adapter) { in zfcp_adapter_enqueue()
350 kref_init(&adapter->ref); in zfcp_adapter_enqueue()
353 adapter->ccw_device = ccw_device; in zfcp_adapter_enqueue()
355 INIT_WORK(&adapter->stat_work, _zfcp_status_read_scheduler); in zfcp_adapter_enqueue()
356 INIT_DELAYED_WORK(&adapter->scan_work, zfcp_fc_scan_ports); in zfcp_adapter_enqueue()
357 INIT_WORK(&adapter->ns_up_work, zfcp_fc_sym_name_update); in zfcp_adapter_enqueue()
359 adapter->next_port_scan = jiffies; in zfcp_adapter_enqueue()
361 if (zfcp_qdio_setup(adapter)) in zfcp_adapter_enqueue()
364 if (zfcp_allocate_low_mem_buffers(adapter)) in zfcp_adapter_enqueue()
367 adapter->req_list = zfcp_reqlist_alloc(); in zfcp_adapter_enqueue()
368 if (!adapter->req_list) in zfcp_adapter_enqueue()
371 if (zfcp_dbf_adapter_register(adapter)) in zfcp_adapter_enqueue()
374 if (zfcp_setup_adapter_work_queue(adapter)) in zfcp_adapter_enqueue()
377 if (zfcp_fc_gs_setup(adapter)) in zfcp_adapter_enqueue()
380 rwlock_init(&adapter->port_list_lock); in zfcp_adapter_enqueue()
381 INIT_LIST_HEAD(&adapter->port_list); in zfcp_adapter_enqueue()
383 INIT_LIST_HEAD(&adapter->events.list); in zfcp_adapter_enqueue()
384 INIT_WORK(&adapter->events.work, zfcp_fc_post_event); in zfcp_adapter_enqueue()
385 spin_lock_init(&adapter->events.list_lock); in zfcp_adapter_enqueue()
387 init_waitqueue_head(&adapter->erp_ready_wq); in zfcp_adapter_enqueue()
388 init_waitqueue_head(&adapter->erp_done_wqh); in zfcp_adapter_enqueue()
390 INIT_LIST_HEAD(&adapter->erp_ready_head); in zfcp_adapter_enqueue()
391 INIT_LIST_HEAD(&adapter->erp_running_head); in zfcp_adapter_enqueue()
393 rwlock_init(&adapter->erp_lock); in zfcp_adapter_enqueue()
394 rwlock_init(&adapter->abort_lock); in zfcp_adapter_enqueue()
396 if (zfcp_erp_thread_setup(adapter)) in zfcp_adapter_enqueue()
399 adapter->service_level.seq_print = zfcp_print_sl; in zfcp_adapter_enqueue()
401 dev_set_drvdata(&ccw_device->dev, adapter); in zfcp_adapter_enqueue()
408 adapter->dma_parms.max_segment_size = ZFCP_QDIO_SBALE_LEN; in zfcp_adapter_enqueue()
409 adapter->ccw_device->dev.dma_parms = &adapter->dma_parms; in zfcp_adapter_enqueue()
411 adapter->stat_read_buf_num = FSF_STATUS_READS_RECOM; in zfcp_adapter_enqueue()
413 if (!zfcp_scsi_adapter_register(adapter)) in zfcp_adapter_enqueue()
414 return adapter; in zfcp_adapter_enqueue()
417 zfcp_adapter_unregister(adapter); in zfcp_adapter_enqueue()
421 void zfcp_adapter_unregister(struct zfcp_adapter *adapter) in zfcp_adapter_unregister() argument
423 struct ccw_device *cdev = adapter->ccw_device; in zfcp_adapter_unregister()
425 cancel_delayed_work_sync(&adapter->scan_work); in zfcp_adapter_unregister()
426 cancel_work_sync(&adapter->stat_work); in zfcp_adapter_unregister()
427 cancel_work_sync(&adapter->ns_up_work); in zfcp_adapter_unregister()
428 zfcp_destroy_adapter_work_queue(adapter); in zfcp_adapter_unregister()
430 zfcp_fc_wka_ports_force_offline(adapter->gs); in zfcp_adapter_unregister()
431 zfcp_scsi_adapter_unregister(adapter); in zfcp_adapter_unregister()
434 zfcp_erp_thread_kill(adapter); in zfcp_adapter_unregister()
435 zfcp_dbf_adapter_unregister(adapter); in zfcp_adapter_unregister()
436 zfcp_qdio_destroy(adapter->qdio); in zfcp_adapter_unregister()
438 zfcp_ccw_adapter_put(adapter); /* final put to release */ in zfcp_adapter_unregister()
448 struct zfcp_adapter *adapter = container_of(ref, struct zfcp_adapter, in zfcp_adapter_release() local
450 struct ccw_device *cdev = adapter->ccw_device; in zfcp_adapter_release()
452 dev_set_drvdata(&adapter->ccw_device->dev, NULL); in zfcp_adapter_release()
453 zfcp_fc_gs_destroy(adapter); in zfcp_adapter_release()
454 zfcp_free_low_mem_buffers(adapter); in zfcp_adapter_release()
455 kfree(adapter->req_list); in zfcp_adapter_release()
456 kfree(adapter->fc_stats); in zfcp_adapter_release()
457 kfree(adapter->stats_reset_data); in zfcp_adapter_release()
458 kfree(adapter); in zfcp_adapter_release()
466 zfcp_ccw_adapter_put(port->adapter); in zfcp_port_release()
482 struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn, in zfcp_port_enqueue() argument
488 kref_get(&adapter->ref); in zfcp_port_enqueue()
490 port = zfcp_get_port_by_wwpn(adapter, wwpn); in zfcp_port_enqueue()
509 port->adapter = adapter; in zfcp_port_enqueue()
513 port->dev.parent = &adapter->ccw_device->dev; in zfcp_port_enqueue()
528 write_lock_irq(&adapter->port_list_lock); in zfcp_port_enqueue()
529 list_add_tail(&port->list, &adapter->port_list); in zfcp_port_enqueue()
530 write_unlock_irq(&adapter->port_list_lock); in zfcp_port_enqueue()
537 zfcp_ccw_adapter_put(adapter); in zfcp_port_enqueue()