scsi: fc: Update formal FPIN descriptor definitions
authorShyam Sundar <ssundar@marvell.com>
Wed, 21 Oct 2020 09:27:11 +0000 (02:27 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Mon, 26 Oct 2020 22:06:45 +0000 (18:06 -0400)
Add Fabric Performance Impact Notification (FPIN) descriptor definitions
for the following FPINs:

 - Delivery Notification Descriptor

 - Peer Congestion Notification Descriptor

 - Congestion Notification Descriptor

Link: https://lore.kernel.org/r/20201021092715.22669-2-njavali@marvell.com
Reviewed-by: James Smart <james.smart@broadcom.com>
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Shyam Sundar <ssundar@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
include/uapi/scsi/fc/fc_els.h

index 8c704e5..91d4be9 100644 (file)
@@ -916,7 +916,9 @@ enum fc_els_clid_ic {
        ELS_CLID_IC_LIP =       8,      /* receiving LIP */
 };
 
-
+/*
+ * Link Integrity event types
+ */
 enum fc_fpin_li_event_types {
        FPIN_LI_UNKNOWN =               0x0,
        FPIN_LI_LINK_FAILURE =          0x1,
@@ -943,6 +945,54 @@ enum fc_fpin_li_event_types {
        { FPIN_LI_DEVICE_SPEC,          "Device Specific" },            \
 }
 
+/*
+ * Delivery event types
+ */
+enum fc_fpin_deli_event_types {
+       FPIN_DELI_UNKNOWN =             0x0,
+       FPIN_DELI_TIMEOUT =             0x1,
+       FPIN_DELI_UNABLE_TO_ROUTE =     0x2,
+       FPIN_DELI_DEVICE_SPEC =         0xF,
+};
+
+/*
+ * Initializer useful for decoding table.
+ * Please keep this in sync with the above definitions.
+ */
+#define FC_FPIN_DELI_EVT_TYPES_INIT {                                  \
+       { FPIN_DELI_UNKNOWN,            "Unknown" },                    \
+       { FPIN_DELI_TIMEOUT,            "Timeout" },                    \
+       { FPIN_DELI_UNABLE_TO_ROUTE,    "Unable to Route" },            \
+       { FPIN_DELI_DEVICE_SPEC,        "Device Specific" },            \
+}
+
+/*
+ * Congestion event types
+ */
+enum fc_fpin_congn_event_types {
+       FPIN_CONGN_CLEAR =              0x0,
+       FPIN_CONGN_LOST_CREDIT =        0x1,
+       FPIN_CONGN_CREDIT_STALL =       0x2,
+       FPIN_CONGN_OVERSUBSCRIPTION =   0x3,
+       FPIN_CONGN_DEVICE_SPEC =        0xF,
+};
+
+/*
+ * Initializer useful for decoding table.
+ * Please keep this in sync with the above definitions.
+ */
+#define FC_FPIN_CONGN_EVT_TYPES_INIT {                                 \
+       { FPIN_CONGN_CLEAR,             "Clear" },                      \
+       { FPIN_CONGN_LOST_CREDIT,       "Lost Credit" },                \
+       { FPIN_CONGN_CREDIT_STALL,      "Credit Stall" },               \
+       { FPIN_CONGN_OVERSUBSCRIPTION,  "Oversubscription" },           \
+       { FPIN_CONGN_DEVICE_SPEC,       "Device Specific" },            \
+}
+
+enum fc_fpin_congn_severity_types {
+       FPIN_CONGN_SEVERITY_WARNING =   0xF1,
+       FPIN_CONGN_SEVERITY_ERROR =     0xF7,
+};
 
 /*
  * Link Integrity Notification Descriptor
@@ -974,6 +1024,68 @@ struct fc_fn_li_desc {
                                         */
 };
 
+/*
+ * Delivery Notification Descriptor
+ */
+struct fc_fn_deli_desc {
+       __be32          desc_tag;       /* Descriptor Tag (0x00020002) */
+       __be32          desc_len;       /* Length of Descriptor (in bytes).
+                                        * Size of descriptor excluding
+                                        * desc_tag and desc_len fields.
+                                        */
+       __be64          detecting_wwpn; /* Port Name that detected event */
+       __be64          attached_wwpn;  /* Port Name of device attached to
+                                        * detecting Port Name
+                                        */
+       __be32          deli_reason_code;/* see enum fc_fpin_deli_event_types */
+};
+
+/*
+ * Peer Congestion Notification Descriptor
+ */
+struct fc_fn_peer_congn_desc {
+       __be32          desc_tag;       /* Descriptor Tag (0x00020003) */
+       __be32          desc_len;       /* Length of Descriptor (in bytes).
+                                        * Size of descriptor excluding
+                                        * desc_tag and desc_len fields.
+                                        */
+       __be64          detecting_wwpn; /* Port Name that detected event */
+       __be64          attached_wwpn;  /* Port Name of device attached to
+                                        * detecting Port Name
+                                        */
+       __be16          event_type;     /* see enum fc_fpin_congn_event_types */
+       __be16          event_modifier; /* Implementation specific value
+                                        * describing the event type
+                                        */
+       __be32          event_period;   /* duration (ms) of the detected
+                                        * congestion event
+                                        */
+       __be32          pname_count;    /* number of portname_list elements */
+       __be64          pname_list[0];  /* list of N_Port_Names accessible
+                                        * through the attached port
+                                        */
+};
+
+/*
+ * Congestion Notification Descriptor
+ */
+struct fc_fn_congn_desc {
+       __be32          desc_tag;       /* Descriptor Tag (0x00020004) */
+       __be32          desc_len;       /* Length of Descriptor (in bytes).
+                                        * Size of descriptor excluding
+                                        * desc_tag and desc_len fields.
+                                        */
+       __be16          event_type;     /* see enum fc_fpin_congn_event_types */
+       __be16          event_modifier; /* Implementation specific value
+                                        * describing the event type
+                                        */
+       __be32          event_period;   /* duration (ms) of the detected
+                                        * congestion event
+                                        */
+       __u8            severity;       /* command */
+       __u8            resv[3];        /* reserved - must be zero */
+};
+
 /*
  * ELS_FPIN - Fabric Performance Impact Notification
  */