From: Dave Marquardt <[email protected]>

Defines the asynchronous sub-queue structure, modifies the existing
channel setup structure, adds the asynchronous sub-queue to the
channels structure, and adds flags needed to tell VIOS to use the
sub-queue.

Signed-off-by: Dave Marquardt <[email protected]>
---
 drivers/scsi/ibmvscsi/ibmvfc.h | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/ibmvscsi/ibmvfc.h b/drivers/scsi/ibmvscsi/ibmvfc.h
index adfd67e85af8..f38dfae9924c 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.h
+++ b/drivers/scsi/ibmvscsi/ibmvfc.h
@@ -182,6 +182,7 @@ struct ibmvfc_npiv_login {
 #define IBMVFC_CAN_USE_MAD_VERSION     0x008
 #define IBMVFC_CAN_SEND_VF_WWPN                0x010
 #define IBMVFC_YES_SCSI                        0x040
+#define IBMVFC_USE_ASYNC_SUBQ          0x100
 #define IBMVFC_CAN_USE_NOOP_CMD                0x200
        __be64 node_name;
        struct srp_direct_buf async;
@@ -230,6 +231,7 @@ struct ibmvfc_npiv_login_resp {
 #define IBMVFC_HANDLE_VF_WWPN          0x0040
 #define IBMVFC_CAN_SUPPORT_CHANNELS    0x0080
 #define IBMVFC_SUPPORT_SCSI            0x0200
+#define IBMVFC_SUPPORT_ASYNC_SUBQ      0x0800
 #define IBMVFC_SUPPORT_NOOP_CMD                0x1000
        __be32 max_cmds;
        __be32 scsi_id_sz;
@@ -564,7 +566,7 @@ struct ibmvfc_channel_setup_mad {
        struct srp_direct_buf buffer;
 } __packed __aligned(8);
 
-#define IBMVFC_MAX_CHANNELS    502
+#define IBMVFC_MAX_CHANNELS    501
 
 struct ibmvfc_channel_setup {
        __be32 flags;
@@ -579,6 +581,7 @@ struct ibmvfc_channel_setup {
        struct srp_direct_buf buffer;
        __be64 reserved2[5];
        __be64 channel_handles[IBMVFC_MAX_CHANNELS];
+       __be64 async_subq_handle;
 } __packed __aligned(8);
 
 struct ibmvfc_connection_info {
@@ -715,6 +718,25 @@ struct ibmvfc_async_work {
        struct work_struct async_work_s;
 };
 
+struct ibmvfc_async_subq {
+       volatile u8 valid;
+#define IBMVFC_ASYNC_ID_IS_ASSOC_ID    0x01
+#define IBMVFC_FC_EEH                  0x04
+#define IBMVFC_FC_FW_UPDATE            0x08
+#define IBMVFC_FC_FW_DUMP              0x10
+       u8 flags;
+       u8 link_state;
+       u8 fpin_status;
+       __be16 event;
+       __be16 pad;
+       volatile __be64 wwpn;
+       volatile __be64 nport_id;
+       union {
+               __be64 node_name;
+               __be64 assoc_id;
+       } id;
+} __packed __aligned(8);
+
 union ibmvfc_iu {
        struct ibmvfc_mad_common mad_common;
        struct ibmvfc_npiv_login_mad npiv_login;
@@ -854,6 +876,7 @@ struct ibmvfc_queue {
 
 struct ibmvfc_channels {
        struct ibmvfc_queue *scrqs;
+       struct ibmvfc_queue *async_scrq;
        enum ibmvfc_protocol protocol;
        unsigned int active_queues;
        unsigned int desired_queues;

-- 
2.54.0



Reply via email to