diff mbox series

[4/4] lpfc: add support for posting FC events on FPIN reception

Message ID 20190405230423.4316-5-jsmart2021@gmail.com (mailing list archive)
State Mainlined
Commit 1a61e5486aeb90d94dd6116c9749e36edd10bf9b
Headers show
Series scsi fc FPIN event support | expand

Commit Message

James Smart April 5, 2019, 11:04 p.m. UTC
This patch adds support to recognize FPIN ELS's that are received.
When one is received, the fc transport will be called to handle the
the FPIN.

Signed-off-by: James Smart <jsmart2021@gmail.com>
---
 drivers/scsi/lpfc/lpfc_els.c | 8 ++++++++
 drivers/scsi/lpfc/lpfc_hw.h  | 4 ++++
 2 files changed, 12 insertions(+)

Comments

Ewan D. Milne April 8, 2019, 7:50 p.m. UTC | #1
On Fri, 2019-04-05 at 16:04 -0700, James Smart wrote:
> This patch adds support to recognize FPIN ELS's that are received.
> When one is received, the fc transport will be called to handle the
> the FPIN.
> 
> Signed-off-by: James Smart <jsmart2021@gmail.com>
> ---
>  drivers/scsi/lpfc/lpfc_els.c | 8 ++++++++
>  drivers/scsi/lpfc/lpfc_hw.h  | 4 ++++
>  2 files changed, 12 insertions(+)
> 
> diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
> index 61348915c942..c8fb0b455f2a 100644
> --- a/drivers/scsi/lpfc/lpfc_els.c
> +++ b/drivers/scsi/lpfc/lpfc_els.c
> @@ -8450,6 +8450,14 @@ lpfc_els_unsol_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
>  		rjt_err = LSRJT_UNABLE_TPC;
>  		rjt_exp = LSEXP_INVALID_OX_RX;
>  		break;
> +	case ELS_CMD_FPIN:
> +		/*
> +		 * Received FPIN from fabric - pass it to the
> +		 * transport FPIN handler.
> +		 */
> +		fc_host_fpin_rcv(shost, elsiocb->iocb.unsli3.rcvsli3.acc_len,
> +				(char *)payload);
> +		break;
>  	default:
>  		lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL,
>  			"RCV ELS cmd:     cmd:x%x did:x%x/ste:x%x",
> diff --git a/drivers/scsi/lpfc/lpfc_hw.h b/drivers/scsi/lpfc/lpfc_hw.h
> index ec1227018913..edd8f3982023 100644
> --- a/drivers/scsi/lpfc/lpfc_hw.h
> +++ b/drivers/scsi/lpfc/lpfc_hw.h
> @@ -560,6 +560,8 @@ struct fc_vft_header {
>  #define fc_vft_hdr_hopct_WORD		word1
>  };
>  
> +#include <uapi/scsi/fc/fc_els.h>
> +
>  /*
>   *  Extended Link Service LS_COMMAND codes (Payload Word 0)
>   */
> @@ -603,6 +605,7 @@ struct fc_vft_header {
>  #define ELS_CMD_RNID      0x78000000
>  #define ELS_CMD_LIRR      0x7A000000
>  #define ELS_CMD_LCB	  0x81000000
> +#define ELS_CMD_FPIN	  0x16000000
>  #else	/*  __LITTLE_ENDIAN_BITFIELD */
>  #define ELS_CMD_MASK      0xffff
>  #define ELS_RSP_MASK      0xff
> @@ -643,6 +646,7 @@ struct fc_vft_header {
>  #define ELS_CMD_RNID      0x78
>  #define ELS_CMD_LIRR      0x7A
>  #define ELS_CMD_LCB	  0x81
> +#define ELS_CMD_FPIN	  ELS_FPIN
>  #endif
>  
>  /*

Reviewed-by: Ewan D. Milne <emilne@redhat.com>
diff mbox series

Patch

diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index 61348915c942..c8fb0b455f2a 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -8450,6 +8450,14 @@  lpfc_els_unsol_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
 		rjt_err = LSRJT_UNABLE_TPC;
 		rjt_exp = LSEXP_INVALID_OX_RX;
 		break;
+	case ELS_CMD_FPIN:
+		/*
+		 * Received FPIN from fabric - pass it to the
+		 * transport FPIN handler.
+		 */
+		fc_host_fpin_rcv(shost, elsiocb->iocb.unsli3.rcvsli3.acc_len,
+				(char *)payload);
+		break;
 	default:
 		lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL,
 			"RCV ELS cmd:     cmd:x%x did:x%x/ste:x%x",
diff --git a/drivers/scsi/lpfc/lpfc_hw.h b/drivers/scsi/lpfc/lpfc_hw.h
index ec1227018913..edd8f3982023 100644
--- a/drivers/scsi/lpfc/lpfc_hw.h
+++ b/drivers/scsi/lpfc/lpfc_hw.h
@@ -560,6 +560,8 @@  struct fc_vft_header {
 #define fc_vft_hdr_hopct_WORD		word1
 };
 
+#include <uapi/scsi/fc/fc_els.h>
+
 /*
  *  Extended Link Service LS_COMMAND codes (Payload Word 0)
  */
@@ -603,6 +605,7 @@  struct fc_vft_header {
 #define ELS_CMD_RNID      0x78000000
 #define ELS_CMD_LIRR      0x7A000000
 #define ELS_CMD_LCB	  0x81000000
+#define ELS_CMD_FPIN	  0x16000000
 #else	/*  __LITTLE_ENDIAN_BITFIELD */
 #define ELS_CMD_MASK      0xffff
 #define ELS_RSP_MASK      0xff
@@ -643,6 +646,7 @@  struct fc_vft_header {
 #define ELS_CMD_RNID      0x78
 #define ELS_CMD_LIRR      0x7A
 #define ELS_CMD_LCB	  0x81
+#define ELS_CMD_FPIN	  ELS_FPIN
 #endif
 
 /*