diff options
author | Krishna Gudipati <kgudipat@brocade.com> | 2011-06-24 23:25:15 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2011-06-29 18:16:54 -0400 |
commit | 601380669baa2ba6427b821a14e5c91afb580dfc (patch) | |
tree | 61eb7c58f09a91161db9d28be195335bcf7cef7c /drivers/scsi/bfa/bfa_fcpim.c | |
parent | d7be54cc5c5f6f9cb9ac67462aadda57813698b8 (diff) |
[SCSI] bfa: Extend BSG interface.
- Added support to collect driver/fw stats.
- Added support to perform adapter/ioc enable, disable operations.
Signed-off-by: Krishna Gudipati <kgudipat@brocade.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/bfa/bfa_fcpim.c')
-rw-r--r-- | drivers/scsi/bfa/bfa_fcpim.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/drivers/scsi/bfa/bfa_fcpim.c b/drivers/scsi/bfa/bfa_fcpim.c index 27eab36f89a5..a4e7951c6063 100644 --- a/drivers/scsi/bfa/bfa_fcpim.c +++ b/drivers/scsi/bfa/bfa_fcpim.c | |||
@@ -365,6 +365,78 @@ bfa_fcpim_path_tov_get(struct bfa_s *bfa) | |||
365 | return fcpim->path_tov / 1000; | 365 | return fcpim->path_tov / 1000; |
366 | } | 366 | } |
367 | 367 | ||
368 | #define bfa_fcpim_add_iostats(__l, __r, __stats) \ | ||
369 | (__l->__stats += __r->__stats) | ||
370 | |||
371 | void | ||
372 | bfa_fcpim_add_stats(struct bfa_itnim_iostats_s *lstats, | ||
373 | struct bfa_itnim_iostats_s *rstats) | ||
374 | { | ||
375 | bfa_fcpim_add_iostats(lstats, rstats, total_ios); | ||
376 | bfa_fcpim_add_iostats(lstats, rstats, qresumes); | ||
377 | bfa_fcpim_add_iostats(lstats, rstats, no_iotags); | ||
378 | bfa_fcpim_add_iostats(lstats, rstats, io_aborts); | ||
379 | bfa_fcpim_add_iostats(lstats, rstats, no_tskims); | ||
380 | bfa_fcpim_add_iostats(lstats, rstats, iocomp_ok); | ||
381 | bfa_fcpim_add_iostats(lstats, rstats, iocomp_underrun); | ||
382 | bfa_fcpim_add_iostats(lstats, rstats, iocomp_overrun); | ||
383 | bfa_fcpim_add_iostats(lstats, rstats, iocomp_aborted); | ||
384 | bfa_fcpim_add_iostats(lstats, rstats, iocomp_timedout); | ||
385 | bfa_fcpim_add_iostats(lstats, rstats, iocom_nexus_abort); | ||
386 | bfa_fcpim_add_iostats(lstats, rstats, iocom_proto_err); | ||
387 | bfa_fcpim_add_iostats(lstats, rstats, iocom_dif_err); | ||
388 | bfa_fcpim_add_iostats(lstats, rstats, iocom_sqer_needed); | ||
389 | bfa_fcpim_add_iostats(lstats, rstats, iocom_res_free); | ||
390 | bfa_fcpim_add_iostats(lstats, rstats, iocom_hostabrts); | ||
391 | bfa_fcpim_add_iostats(lstats, rstats, iocom_utags); | ||
392 | bfa_fcpim_add_iostats(lstats, rstats, io_cleanups); | ||
393 | bfa_fcpim_add_iostats(lstats, rstats, io_tmaborts); | ||
394 | bfa_fcpim_add_iostats(lstats, rstats, onlines); | ||
395 | bfa_fcpim_add_iostats(lstats, rstats, offlines); | ||
396 | bfa_fcpim_add_iostats(lstats, rstats, creates); | ||
397 | bfa_fcpim_add_iostats(lstats, rstats, deletes); | ||
398 | bfa_fcpim_add_iostats(lstats, rstats, create_comps); | ||
399 | bfa_fcpim_add_iostats(lstats, rstats, delete_comps); | ||
400 | bfa_fcpim_add_iostats(lstats, rstats, sler_events); | ||
401 | bfa_fcpim_add_iostats(lstats, rstats, fw_create); | ||
402 | bfa_fcpim_add_iostats(lstats, rstats, fw_delete); | ||
403 | bfa_fcpim_add_iostats(lstats, rstats, ioc_disabled); | ||
404 | bfa_fcpim_add_iostats(lstats, rstats, cleanup_comps); | ||
405 | bfa_fcpim_add_iostats(lstats, rstats, tm_cmnds); | ||
406 | bfa_fcpim_add_iostats(lstats, rstats, tm_fw_rsps); | ||
407 | bfa_fcpim_add_iostats(lstats, rstats, tm_success); | ||
408 | bfa_fcpim_add_iostats(lstats, rstats, tm_failures); | ||
409 | bfa_fcpim_add_iostats(lstats, rstats, tm_io_comps); | ||
410 | bfa_fcpim_add_iostats(lstats, rstats, tm_qresumes); | ||
411 | bfa_fcpim_add_iostats(lstats, rstats, tm_iocdowns); | ||
412 | bfa_fcpim_add_iostats(lstats, rstats, tm_cleanups); | ||
413 | bfa_fcpim_add_iostats(lstats, rstats, tm_cleanup_comps); | ||
414 | bfa_fcpim_add_iostats(lstats, rstats, io_comps); | ||
415 | bfa_fcpim_add_iostats(lstats, rstats, input_reqs); | ||
416 | bfa_fcpim_add_iostats(lstats, rstats, output_reqs); | ||
417 | bfa_fcpim_add_iostats(lstats, rstats, rd_throughput); | ||
418 | bfa_fcpim_add_iostats(lstats, rstats, wr_throughput); | ||
419 | } | ||
420 | |||
421 | bfa_status_t | ||
422 | bfa_fcpim_port_iostats(struct bfa_s *bfa, | ||
423 | struct bfa_itnim_iostats_s *stats, u8 lp_tag) | ||
424 | { | ||
425 | struct bfa_fcpim_s *fcpim = BFA_FCPIM(bfa); | ||
426 | struct list_head *qe, *qen; | ||
427 | struct bfa_itnim_s *itnim; | ||
428 | |||
429 | /* accumulate IO stats from itnim */ | ||
430 | memset(stats, 0, sizeof(struct bfa_itnim_iostats_s)); | ||
431 | list_for_each_safe(qe, qen, &fcpim->itnim_q) { | ||
432 | itnim = (struct bfa_itnim_s *) qe; | ||
433 | if (itnim->rport->rport_info.lp_tag != lp_tag) | ||
434 | continue; | ||
435 | bfa_fcpim_add_stats(stats, &(itnim->stats)); | ||
436 | } | ||
437 | return BFA_STATUS_OK; | ||
438 | } | ||
439 | |||
368 | u16 | 440 | u16 |
369 | bfa_fcpim_qdepth_get(struct bfa_s *bfa) | 441 | bfa_fcpim_qdepth_get(struct bfa_s *bfa) |
370 | { | 442 | { |