Lines Matching full:adapter

58 	struct zfcp_adapter *adapter;  in zfcp_init_device_configure()  local
68 adapter = zfcp_ccw_adapter_by_cdev(cdev); in zfcp_init_device_configure()
69 if (!adapter) in zfcp_init_device_configure()
72 port = zfcp_get_port_by_wwpn(adapter, wwpn); in zfcp_init_device_configure()
81 zfcp_ccw_adapter_put(adapter); in zfcp_init_device_configure()
187 * zfcp_get_port_by_wwpn - find port in port list of adapter by wwpn
188 * @adapter: pointer to adapter to search for port
193 struct zfcp_port *zfcp_get_port_by_wwpn(struct zfcp_adapter *adapter, in zfcp_get_port_by_wwpn() argument
199 read_lock_irqsave(&adapter->port_list_lock, flags); in zfcp_get_port_by_wwpn()
200 list_for_each_entry(port, &adapter->port_list, list) in zfcp_get_port_by_wwpn()
204 read_unlock_irqrestore(&adapter->port_list_lock, flags); in zfcp_get_port_by_wwpn()
207 read_unlock_irqrestore(&adapter->port_list_lock, flags); in zfcp_get_port_by_wwpn()
211 static int zfcp_allocate_low_mem_buffers(struct zfcp_adapter *adapter) in zfcp_allocate_low_mem_buffers() argument
213 adapter->pool.erp_req = in zfcp_allocate_low_mem_buffers()
215 if (!adapter->pool.erp_req) in zfcp_allocate_low_mem_buffers()
218 adapter->pool.gid_pn_req = in zfcp_allocate_low_mem_buffers()
220 if (!adapter->pool.gid_pn_req) in zfcp_allocate_low_mem_buffers()
223 adapter->pool.scsi_req = in zfcp_allocate_low_mem_buffers()
225 if (!adapter->pool.scsi_req) in zfcp_allocate_low_mem_buffers()
228 adapter->pool.scsi_abort = in zfcp_allocate_low_mem_buffers()
230 if (!adapter->pool.scsi_abort) in zfcp_allocate_low_mem_buffers()
233 adapter->pool.status_read_req = in zfcp_allocate_low_mem_buffers()
236 if (!adapter->pool.status_read_req) in zfcp_allocate_low_mem_buffers()
239 adapter->pool.qtcb_pool = in zfcp_allocate_low_mem_buffers()
241 if (!adapter->pool.qtcb_pool) in zfcp_allocate_low_mem_buffers()
245 adapter->pool.sr_data = in zfcp_allocate_low_mem_buffers()
247 if (!adapter->pool.sr_data) in zfcp_allocate_low_mem_buffers()
250 adapter->pool.gid_pn = in zfcp_allocate_low_mem_buffers()
252 if (!adapter->pool.gid_pn) in zfcp_allocate_low_mem_buffers()
258 static void zfcp_free_low_mem_buffers(struct zfcp_adapter *adapter) in zfcp_free_low_mem_buffers() argument
260 if (adapter->pool.erp_req) in zfcp_free_low_mem_buffers()
261 mempool_destroy(adapter->pool.erp_req); in zfcp_free_low_mem_buffers()
262 if (adapter->pool.scsi_req) in zfcp_free_low_mem_buffers()
263 mempool_destroy(adapter->pool.scsi_req); in zfcp_free_low_mem_buffers()
264 if (adapter->pool.scsi_abort) in zfcp_free_low_mem_buffers()
265 mempool_destroy(adapter->pool.scsi_abort); in zfcp_free_low_mem_buffers()
266 if (adapter->pool.qtcb_pool) in zfcp_free_low_mem_buffers()
267 mempool_destroy(adapter->pool.qtcb_pool); in zfcp_free_low_mem_buffers()
268 if (adapter->pool.status_read_req) in zfcp_free_low_mem_buffers()
269 mempool_destroy(adapter->pool.status_read_req); in zfcp_free_low_mem_buffers()
270 if (adapter->pool.sr_data) in zfcp_free_low_mem_buffers()
271 mempool_destroy(adapter->pool.sr_data); in zfcp_free_low_mem_buffers()
272 if (adapter->pool.gid_pn) in zfcp_free_low_mem_buffers()
273 mempool_destroy(adapter->pool.gid_pn); in zfcp_free_low_mem_buffers()
278 * @adapter: ptr to struct zfcp_adapter for which the buffers should be refilled
285 int zfcp_status_read_refill(struct zfcp_adapter *adapter) in zfcp_status_read_refill() argument
287 while (atomic_read(&adapter->stat_miss) > 0) in zfcp_status_read_refill()
288 if (zfcp_fsf_status_read(adapter->qdio)) { in zfcp_status_read_refill()
289 if (atomic_read(&adapter->stat_miss) >= in zfcp_status_read_refill()
290 adapter->stat_read_buf_num) { in zfcp_status_read_refill()
291 zfcp_erp_adapter_reopen(adapter, 0, "axsref1"); in zfcp_status_read_refill()
296 atomic_dec(&adapter->stat_miss); in zfcp_status_read_refill()
308 struct zfcp_adapter *adapter = in zfcp_print_sl() local
312 dev_name(&adapter->ccw_device->dev), in zfcp_print_sl()
313 adapter->fsf_lic_version); in zfcp_print_sl()
316 static int zfcp_setup_adapter_work_queue(struct zfcp_adapter *adapter) in zfcp_setup_adapter_work_queue() argument
321 dev_name(&adapter->ccw_device->dev)); in zfcp_setup_adapter_work_queue()
322 adapter->work_queue = create_singlethread_workqueue(name); in zfcp_setup_adapter_work_queue()
324 if (adapter->work_queue) in zfcp_setup_adapter_work_queue()
329 static void zfcp_destroy_adapter_work_queue(struct zfcp_adapter *adapter) in zfcp_destroy_adapter_work_queue() argument
331 if (adapter->work_queue) in zfcp_destroy_adapter_work_queue()
332 destroy_workqueue(adapter->work_queue); in zfcp_destroy_adapter_work_queue()
333 adapter->work_queue = NULL; in zfcp_destroy_adapter_work_queue()
338 * zfcp_adapter_enqueue - enqueue a new adapter to the list
342 * Enqueues an adapter at the end of the adapter list in the driver data.
343 * All adapter internal structures are set up.
348 struct zfcp_adapter *adapter; in zfcp_adapter_enqueue() local
353 adapter = kzalloc(sizeof(struct zfcp_adapter), GFP_KERNEL); in zfcp_adapter_enqueue()
354 if (!adapter) { in zfcp_adapter_enqueue()
359 kref_init(&adapter->ref); in zfcp_adapter_enqueue()
362 adapter->ccw_device = ccw_device; in zfcp_adapter_enqueue()
364 INIT_WORK(&adapter->stat_work, _zfcp_status_read_scheduler); in zfcp_adapter_enqueue()
365 INIT_WORK(&adapter->scan_work, zfcp_fc_scan_ports); in zfcp_adapter_enqueue()
366 INIT_WORK(&adapter->ns_up_work, zfcp_fc_sym_name_update); in zfcp_adapter_enqueue()
368 if (zfcp_qdio_setup(adapter)) in zfcp_adapter_enqueue()
371 if (zfcp_allocate_low_mem_buffers(adapter)) in zfcp_adapter_enqueue()
374 adapter->req_list = zfcp_reqlist_alloc(); in zfcp_adapter_enqueue()
375 if (!adapter->req_list) in zfcp_adapter_enqueue()
378 if (zfcp_dbf_adapter_register(adapter)) in zfcp_adapter_enqueue()
381 if (zfcp_setup_adapter_work_queue(adapter)) in zfcp_adapter_enqueue()
384 if (zfcp_fc_gs_setup(adapter)) in zfcp_adapter_enqueue()
387 rwlock_init(&adapter->port_list_lock); in zfcp_adapter_enqueue()
388 INIT_LIST_HEAD(&adapter->port_list); in zfcp_adapter_enqueue()
390 INIT_LIST_HEAD(&adapter->events.list); in zfcp_adapter_enqueue()
391 INIT_WORK(&adapter->events.work, zfcp_fc_post_event); in zfcp_adapter_enqueue()
392 spin_lock_init(&adapter->events.list_lock); in zfcp_adapter_enqueue()
394 init_waitqueue_head(&adapter->erp_ready_wq); in zfcp_adapter_enqueue()
395 init_waitqueue_head(&adapter->erp_done_wqh); in zfcp_adapter_enqueue()
397 INIT_LIST_HEAD(&adapter->erp_ready_head); in zfcp_adapter_enqueue()
398 INIT_LIST_HEAD(&adapter->erp_running_head); in zfcp_adapter_enqueue()
400 rwlock_init(&adapter->erp_lock); in zfcp_adapter_enqueue()
401 rwlock_init(&adapter->abort_lock); in zfcp_adapter_enqueue()
403 if (zfcp_erp_thread_setup(adapter)) in zfcp_adapter_enqueue()
406 adapter->service_level.seq_print = zfcp_print_sl; in zfcp_adapter_enqueue()
408 dev_set_drvdata(&ccw_device->dev, adapter); in zfcp_adapter_enqueue()
415 adapter->dma_parms.max_segment_size = ZFCP_QDIO_SBALE_LEN; in zfcp_adapter_enqueue()
416 adapter->ccw_device->dev.dma_parms = &adapter->dma_parms; in zfcp_adapter_enqueue()
418 if (!zfcp_scsi_adapter_register(adapter)) in zfcp_adapter_enqueue()
419 return adapter; in zfcp_adapter_enqueue()
422 zfcp_adapter_unregister(adapter); in zfcp_adapter_enqueue()
426 void zfcp_adapter_unregister(struct zfcp_adapter *adapter) in zfcp_adapter_unregister() argument
428 struct ccw_device *cdev = adapter->ccw_device; in zfcp_adapter_unregister()
430 cancel_work_sync(&adapter->scan_work); in zfcp_adapter_unregister()
431 cancel_work_sync(&adapter->stat_work); in zfcp_adapter_unregister()
432 cancel_work_sync(&adapter->ns_up_work); in zfcp_adapter_unregister()
433 zfcp_destroy_adapter_work_queue(adapter); in zfcp_adapter_unregister()
435 zfcp_fc_wka_ports_force_offline(adapter->gs); in zfcp_adapter_unregister()
436 zfcp_scsi_adapter_unregister(adapter); in zfcp_adapter_unregister()
439 zfcp_erp_thread_kill(adapter); in zfcp_adapter_unregister()
440 zfcp_dbf_adapter_unregister(adapter); in zfcp_adapter_unregister()
441 zfcp_qdio_destroy(adapter->qdio); in zfcp_adapter_unregister()
443 zfcp_ccw_adapter_put(adapter); /* final put to release */ in zfcp_adapter_unregister()
447 * zfcp_adapter_release - remove the adapter from the resource list
449 * locks: adapter list write lock is assumed to be held by caller
453 struct zfcp_adapter *adapter = container_of(ref, struct zfcp_adapter, in zfcp_adapter_release() local
455 struct ccw_device *cdev = adapter->ccw_device; in zfcp_adapter_release()
457 dev_set_drvdata(&adapter->ccw_device->dev, NULL); in zfcp_adapter_release()
458 zfcp_fc_gs_destroy(adapter); in zfcp_adapter_release()
459 zfcp_free_low_mem_buffers(adapter); in zfcp_adapter_release()
460 kfree(adapter->req_list); in zfcp_adapter_release()
461 kfree(adapter->fc_stats); in zfcp_adapter_release()
462 kfree(adapter->stats_reset_data); in zfcp_adapter_release()
463 kfree(adapter); in zfcp_adapter_release()
485 zfcp_ccw_adapter_put(port->adapter); in zfcp_port_release()
490 * zfcp_port_enqueue - enqueue port to port list of adapter
491 * @adapter: adapter where remote port is added
501 struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn, in zfcp_port_enqueue() argument
507 kref_get(&adapter->ref); in zfcp_port_enqueue()
509 port = zfcp_get_port_by_wwpn(adapter, wwpn); in zfcp_port_enqueue()
527 port->adapter = adapter; in zfcp_port_enqueue()
531 port->dev.parent = &adapter->ccw_device->dev; in zfcp_port_enqueue()
549 write_lock_irq(&adapter->port_list_lock); in zfcp_port_enqueue()
550 list_add_tail(&port->list, &adapter->port_list); in zfcp_port_enqueue()
551 write_unlock_irq(&adapter->port_list_lock); in zfcp_port_enqueue()
560 zfcp_ccw_adapter_put(adapter); in zfcp_port_enqueue()