diff options
author | Robert Love <robert.w.love@intel.com> | 2009-02-27 13:55:39 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2009-03-06 16:45:32 -0500 |
commit | 0ae4d4ae47d2ccbcad813b0d6d8fe12590c7d648 (patch) | |
tree | a58434d723ef74a7282c29835dec8496326a14a9 /include/scsi/libfc.h | |
parent | efaf5c085dd2d31757b0ff7886970dfddd8d1808 (diff) |
[SCSI] libfc: Cleanup libfc_function_template comments
Made the comments more like the comments for struct scsi_host_template.
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'include/scsi/libfc.h')
-rw-r--r-- | include/scsi/libfc.h | 107 |
1 files changed, 66 insertions, 41 deletions
diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h index 37df48e13b97..282829cdf352 100644 --- a/include/scsi/libfc.h +++ b/include/scsi/libfc.h | |||
@@ -336,31 +336,17 @@ struct fc_exch { | |||
336 | 336 | ||
337 | struct libfc_function_template { | 337 | struct libfc_function_template { |
338 | 338 | ||
339 | /** | ||
340 | * Mandatory Fields | ||
341 | * | ||
342 | * These handlers must be implemented by the LLD. | ||
343 | */ | ||
344 | |||
345 | /* | 339 | /* |
346 | * Interface to send a FC frame | 340 | * Interface to send a FC frame |
347 | */ | ||
348 | int (*frame_send)(struct fc_lport *lp, struct fc_frame *fp); | ||
349 | |||
350 | /** | ||
351 | * Optional Fields | ||
352 | * | 341 | * |
353 | * The LLD may choose to implement any of the following handlers. | 342 | * STATUS: REQUIRED |
354 | * If LLD doesn't specify hander and leaves its pointer NULL then | ||
355 | * the default libfc function will be used for that handler. | ||
356 | */ | ||
357 | |||
358 | /** | ||
359 | * ELS/CT interfaces | ||
360 | */ | 343 | */ |
344 | int (*frame_send)(struct fc_lport *lp, struct fc_frame *fp); | ||
361 | 345 | ||
362 | /* | 346 | /* |
363 | * elsct_send - sends ELS/CT frame | 347 | * Interface to send ELS/CT frames |
348 | * | ||
349 | * STATUS: OPTIONAL | ||
364 | */ | 350 | */ |
365 | struct fc_seq *(*elsct_send)(struct fc_lport *lport, | 351 | struct fc_seq *(*elsct_send)(struct fc_lport *lport, |
366 | struct fc_rport *rport, | 352 | struct fc_rport *rport, |
@@ -370,9 +356,6 @@ struct libfc_function_template { | |||
370 | struct fc_frame *fp, | 356 | struct fc_frame *fp, |
371 | void *arg), | 357 | void *arg), |
372 | void *arg, u32 timer_msec); | 358 | void *arg, u32 timer_msec); |
373 | /** | ||
374 | * Exhance Manager interfaces | ||
375 | */ | ||
376 | 359 | ||
377 | /* | 360 | /* |
378 | * Send the FC frame payload using a new exchange and sequence. | 361 | * Send the FC frame payload using a new exchange and sequence. |
@@ -404,6 +387,8 @@ struct libfc_function_template { | |||
404 | * timer_msec argument is specified. The timer is canceled when | 387 | * timer_msec argument is specified. The timer is canceled when |
405 | * it fires or when the exchange is done. The exchange timeout handler | 388 | * it fires or when the exchange is done. The exchange timeout handler |
406 | * is registered by EM layer. | 389 | * is registered by EM layer. |
390 | * | ||
391 | * STATUS: OPTIONAL | ||
407 | */ | 392 | */ |
408 | struct fc_seq *(*exch_seq_send)(struct fc_lport *lp, | 393 | struct fc_seq *(*exch_seq_send)(struct fc_lport *lp, |
409 | struct fc_frame *fp, | 394 | struct fc_frame *fp, |
@@ -415,14 +400,18 @@ struct libfc_function_template { | |||
415 | void *arg, unsigned int timer_msec); | 400 | void *arg, unsigned int timer_msec); |
416 | 401 | ||
417 | /* | 402 | /* |
418 | * send a frame using existing sequence and exchange. | 403 | * Send a frame using an existing sequence and exchange. |
404 | * | ||
405 | * STATUS: OPTIONAL | ||
419 | */ | 406 | */ |
420 | int (*seq_send)(struct fc_lport *lp, struct fc_seq *sp, | 407 | int (*seq_send)(struct fc_lport *lp, struct fc_seq *sp, |
421 | struct fc_frame *fp); | 408 | struct fc_frame *fp); |
422 | 409 | ||
423 | /* | 410 | /* |
424 | * Send ELS response using mainly infomation | 411 | * Send an ELS response using infomation from a previous |
425 | * in exchange and sequence in EM layer. | 412 | * exchange and sequence. |
413 | * | ||
414 | * STATUS: OPTIONAL | ||
426 | */ | 415 | */ |
427 | void (*seq_els_rsp_send)(struct fc_seq *sp, enum fc_els_cmd els_cmd, | 416 | void (*seq_els_rsp_send)(struct fc_seq *sp, enum fc_els_cmd els_cmd, |
428 | struct fc_seq_els_data *els_data); | 417 | struct fc_seq_els_data *els_data); |
@@ -434,6 +423,8 @@ struct libfc_function_template { | |||
434 | * A timer_msec can be specified for abort timeout, if non-zero | 423 | * A timer_msec can be specified for abort timeout, if non-zero |
435 | * timer_msec value is specified then exchange resp handler | 424 | * timer_msec value is specified then exchange resp handler |
436 | * will be called with timeout error if no response to abort. | 425 | * will be called with timeout error if no response to abort. |
426 | * | ||
427 | * STATUS: OPTIONAL | ||
437 | */ | 428 | */ |
438 | int (*seq_exch_abort)(const struct fc_seq *req_sp, | 429 | int (*seq_exch_abort)(const struct fc_seq *req_sp, |
439 | unsigned int timer_msec); | 430 | unsigned int timer_msec); |
@@ -441,6 +432,8 @@ struct libfc_function_template { | |||
441 | /* | 432 | /* |
442 | * Indicate that an exchange/sequence tuple is complete and the memory | 433 | * Indicate that an exchange/sequence tuple is complete and the memory |
443 | * allocated for the related objects may be freed. | 434 | * allocated for the related objects may be freed. |
435 | * | ||
436 | * STATUS: OPTIONAL | ||
444 | */ | 437 | */ |
445 | void (*exch_done)(struct fc_seq *sp); | 438 | void (*exch_done)(struct fc_seq *sp); |
446 | 439 | ||
@@ -448,6 +441,8 @@ struct libfc_function_template { | |||
448 | * Assigns a EM and a free XID for an new exchange and then | 441 | * Assigns a EM and a free XID for an new exchange and then |
449 | * allocates a new exchange and sequence pair. | 442 | * allocates a new exchange and sequence pair. |
450 | * The fp can be used to determine free XID. | 443 | * The fp can be used to determine free XID. |
444 | * | ||
445 | * STATUS: OPTIONAL | ||
451 | */ | 446 | */ |
452 | struct fc_exch *(*exch_get)(struct fc_lport *lp, struct fc_frame *fp); | 447 | struct fc_exch *(*exch_get)(struct fc_lport *lp, struct fc_frame *fp); |
453 | 448 | ||
@@ -455,12 +450,16 @@ struct libfc_function_template { | |||
455 | * Release previously assigned XID by exch_get API. | 450 | * Release previously assigned XID by exch_get API. |
456 | * The LLD may implement this if XID is assigned by LLD | 451 | * The LLD may implement this if XID is assigned by LLD |
457 | * in exch_get(). | 452 | * in exch_get(). |
453 | * | ||
454 | * STATUS: OPTIONAL | ||
458 | */ | 455 | */ |
459 | void (*exch_put)(struct fc_lport *lp, struct fc_exch_mgr *mp, | 456 | void (*exch_put)(struct fc_lport *lp, struct fc_exch_mgr *mp, |
460 | u16 ex_id); | 457 | u16 ex_id); |
461 | 458 | ||
462 | /* | 459 | /* |
463 | * Start a new sequence on the same exchange/sequence tuple. | 460 | * Start a new sequence on the same exchange/sequence tuple. |
461 | * | ||
462 | * STATUS: OPTIONAL | ||
464 | */ | 463 | */ |
465 | struct fc_seq *(*seq_start_next)(struct fc_seq *sp); | 464 | struct fc_seq *(*seq_start_next)(struct fc_seq *sp); |
466 | 465 | ||
@@ -468,26 +467,33 @@ struct libfc_function_template { | |||
468 | * Reset an exchange manager, completing all sequences and exchanges. | 467 | * Reset an exchange manager, completing all sequences and exchanges. |
469 | * If s_id is non-zero, reset only exchanges originating from that FID. | 468 | * If s_id is non-zero, reset only exchanges originating from that FID. |
470 | * If d_id is non-zero, reset only exchanges sending to that FID. | 469 | * If d_id is non-zero, reset only exchanges sending to that FID. |
470 | * | ||
471 | * STATUS: OPTIONAL | ||
471 | */ | 472 | */ |
472 | void (*exch_mgr_reset)(struct fc_lport *, | 473 | void (*exch_mgr_reset)(struct fc_lport *, |
473 | u32 s_id, u32 d_id); | 474 | u32 s_id, u32 d_id); |
474 | 475 | ||
475 | void (*rport_flush_queue)(void); | 476 | /* |
476 | /** | 477 | * Flush the rport work queue. Generally used before shutdown. |
477 | * Local Port interfaces | 478 | * |
479 | * STATUS: OPTIONAL | ||
478 | */ | 480 | */ |
481 | void (*rport_flush_queue)(void); | ||
479 | 482 | ||
480 | /* | 483 | /* |
481 | * Receive a frame to a local port. | 484 | * Receive a frame for a local port. |
485 | * | ||
486 | * STATUS: OPTIONAL | ||
482 | */ | 487 | */ |
483 | void (*lport_recv)(struct fc_lport *lp, struct fc_seq *sp, | 488 | void (*lport_recv)(struct fc_lport *lp, struct fc_seq *sp, |
484 | struct fc_frame *fp); | 489 | struct fc_frame *fp); |
485 | 490 | ||
486 | int (*lport_reset)(struct fc_lport *); | 491 | /* |
487 | 492 | * Reset the local port. | |
488 | /** | 493 | * |
489 | * Remote Port interfaces | 494 | * STATUS: OPTIONAL |
490 | */ | 495 | */ |
496 | int (*lport_reset)(struct fc_lport *); | ||
491 | 497 | ||
492 | /* | 498 | /* |
493 | * Create a remote port | 499 | * Create a remote port |
@@ -502,26 +508,33 @@ struct libfc_function_template { | |||
502 | * - PLOGI | 508 | * - PLOGI |
503 | * - PRLI | 509 | * - PRLI |
504 | * - RTV | 510 | * - RTV |
511 | * | ||
512 | * STATUS: OPTIONAL | ||
505 | */ | 513 | */ |
506 | int (*rport_login)(struct fc_rport *rport); | 514 | int (*rport_login)(struct fc_rport *rport); |
507 | 515 | ||
508 | /* | 516 | /* |
509 | * Logoff, and remove the rport from the transport if | 517 | * Logoff, and remove the rport from the transport if |
510 | * it had been added. This will send a LOGO to the target. | 518 | * it had been added. This will send a LOGO to the target. |
519 | * | ||
520 | * STATUS: OPTIONAL | ||
511 | */ | 521 | */ |
512 | int (*rport_logoff)(struct fc_rport *rport); | 522 | int (*rport_logoff)(struct fc_rport *rport); |
513 | 523 | ||
514 | /* | 524 | /* |
515 | * Recieve a request from a remote port. | 525 | * Recieve a request from a remote port. |
526 | * | ||
527 | * STATUS: OPTIONAL | ||
516 | */ | 528 | */ |
517 | void (*rport_recv_req)(struct fc_seq *, struct fc_frame *, | 529 | void (*rport_recv_req)(struct fc_seq *, struct fc_frame *, |
518 | struct fc_rport *); | 530 | struct fc_rport *); |
519 | 531 | ||
520 | struct fc_rport *(*rport_lookup)(const struct fc_lport *, u32); | 532 | /* |
521 | 533 | * lookup an rport by it's port ID. | |
522 | /** | 534 | * |
523 | * FCP interfaces | 535 | * STATUS: OPTIONAL |
524 | */ | 536 | */ |
537 | struct fc_rport *(*rport_lookup)(const struct fc_lport *, u32); | ||
525 | 538 | ||
526 | /* | 539 | /* |
527 | * Send a fcp cmd from fsp pkt. | 540 | * Send a fcp cmd from fsp pkt. |
@@ -529,30 +542,38 @@ struct libfc_function_template { | |||
529 | * | 542 | * |
530 | * The resp handler is called when FCP_RSP received. | 543 | * The resp handler is called when FCP_RSP received. |
531 | * | 544 | * |
545 | * STATUS: OPTIONAL | ||
532 | */ | 546 | */ |
533 | int (*fcp_cmd_send)(struct fc_lport *lp, struct fc_fcp_pkt *fsp, | 547 | int (*fcp_cmd_send)(struct fc_lport *lp, struct fc_fcp_pkt *fsp, |
534 | void (*resp)(struct fc_seq *, struct fc_frame *fp, | 548 | void (*resp)(struct fc_seq *, struct fc_frame *fp, |
535 | void *arg)); | 549 | void *arg)); |
536 | 550 | ||
537 | /* | 551 | /* |
538 | * Used at least durring linkdown and reset | 552 | * Cleanup the FCP layer, used durring link down and reset |
553 | * | ||
554 | * STATUS: OPTIONAL | ||
539 | */ | 555 | */ |
540 | void (*fcp_cleanup)(struct fc_lport *lp); | 556 | void (*fcp_cleanup)(struct fc_lport *lp); |
541 | 557 | ||
542 | /* | 558 | /* |
543 | * Abort all I/O on a local port | 559 | * Abort all I/O on a local port |
560 | * | ||
561 | * STATUS: OPTIONAL | ||
544 | */ | 562 | */ |
545 | void (*fcp_abort_io)(struct fc_lport *lp); | 563 | void (*fcp_abort_io)(struct fc_lport *lp); |
546 | 564 | ||
547 | /** | 565 | /* |
548 | * Discovery interfaces | 566 | * Receive a request for the discovery layer. |
567 | * | ||
568 | * STATUS: OPTIONAL | ||
549 | */ | 569 | */ |
550 | |||
551 | void (*disc_recv_req)(struct fc_seq *, | 570 | void (*disc_recv_req)(struct fc_seq *, |
552 | struct fc_frame *, struct fc_lport *); | 571 | struct fc_frame *, struct fc_lport *); |
553 | 572 | ||
554 | /* | 573 | /* |
555 | * Start discovery for a local port. | 574 | * Start discovery for a local port. |
575 | * | ||
576 | * STATUS: OPTIONAL | ||
556 | */ | 577 | */ |
557 | void (*disc_start)(void (*disc_callback)(struct fc_lport *, | 578 | void (*disc_start)(void (*disc_callback)(struct fc_lport *, |
558 | enum fc_disc_event), | 579 | enum fc_disc_event), |
@@ -561,6 +582,8 @@ struct libfc_function_template { | |||
561 | /* | 582 | /* |
562 | * Stop discovery for a given lport. This will remove | 583 | * Stop discovery for a given lport. This will remove |
563 | * all discovered rports | 584 | * all discovered rports |
585 | * | ||
586 | * STATUS: OPTIONAL | ||
564 | */ | 587 | */ |
565 | void (*disc_stop) (struct fc_lport *); | 588 | void (*disc_stop) (struct fc_lport *); |
566 | 589 | ||
@@ -568,6 +591,8 @@ struct libfc_function_template { | |||
568 | * Stop discovery for a given lport. This will block | 591 | * Stop discovery for a given lport. This will block |
569 | * until all discovered rports are deleted from the | 592 | * until all discovered rports are deleted from the |
570 | * FC transport class | 593 | * FC transport class |
594 | * | ||
595 | * STATUS: OPTIONAL | ||
571 | */ | 596 | */ |
572 | void (*disc_stop_final) (struct fc_lport *); | 597 | void (*disc_stop_final) (struct fc_lport *); |
573 | }; | 598 | }; |