From: Dave Marquardt <[email protected]>

Adds 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.
---
 drivers/scsi/ibmvscsi/ibmvfc.h | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/ibmvscsi/ibmvfc.h b/drivers/scsi/ibmvscsi/ibmvfc.h
index c996b36d335d..f026f30f98d3 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.h
+++ b/drivers/scsi/ibmvscsi/ibmvfc.h
@@ -181,6 +181,8 @@ struct ibmvfc_npiv_login {
 #define IBMVFC_CAN_HANDLE_FPIN         0x04
 #define IBMVFC_CAN_USE_MAD_VERSION     0x08
 #define IBMVFC_CAN_SEND_VF_WWPN                0x10
+#define IBMVFC_YES_SCSI                        0x40
+#define IBMVFC_USE_ASYNC_SUBQ          0x100
 #define IBMVFC_CAN_USE_NOOP_CMD                0x200
        __be64 node_name;
        struct srp_direct_buf async;
@@ -229,6 +231,7 @@ struct ibmvfc_npiv_login_resp {
 #define IBMVFC_HANDLE_VF_WWPN          0x40
 #define IBMVFC_CAN_SUPPORT_CHANNELS    0x80
 #define IBMVFC_SUPPORT_SCSI            0x200
+#define IBMVFC_SUPPORT_ASYNC_SUBQ      0x800
 #define IBMVFC_SUPPORT_NOOP_CMD                0x1000
        __be32 max_cmds;
        __be32 scsi_id_sz;
@@ -563,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;
@@ -578,6 +581,7 @@ struct ibmvfc_channel_setup {
        struct srp_direct_buf buffer;
        __be64 reserved2[5];
        __be64 channel_handles[IBMVFC_MAX_CHANNELS];
+       __be64 asyncSubqHandle;
 } __packed __aligned(8);
 
 struct ibmvfc_connection_info {
@@ -714,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;
@@ -853,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