scsi: fnic: fnic devcmd2 interface definitions
authorSatish Kharat <satishkh@cisco.com>
Fri, 18 Jan 2019 22:51:40 +0000 (14:51 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 23 Jan 2019 02:18:34 +0000 (21:18 -0500)
This patch adds the fnic devcmd2 command structre and the command result
structure definitions.

Signed-off-by: Satish Kharat <satishkh@cisco.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/fnic/vnic_devcmd.h
drivers/scsi/fnic/vnic_resource.h

index 1a2a13bd64423038cc08989aa98bbdfb162c7ceb..c5dde556dc7c548491ca7353f0e884c319692cd2 100644 (file)
@@ -170,7 +170,8 @@ enum vnic_devcmd_cmd {
 
        /* variant of CMD_INIT, with provisioning info
         *     (u64)a0=paddr of vnic_devcmd_provinfo
-        *     (u32)a1=sizeof provision info */
+        *     (u32)a1=sizeof provision info
+        */
        CMD_INIT_PROV_INFO      = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 27),
 
        /* enable virtual link */
@@ -262,7 +263,125 @@ enum vnic_devcmd_cmd {
         *             non-zero for resetting vlan to the default
         * out: (u16)a0=old default vlan
         */
-       CMD_SET_DEFAULT_VLAN = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 46)
+       CMD_SET_DEFAULT_VLAN = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 46),
+
+       /* init_prov_info2:
+        * Variant of CMD_INIT_PROV_INFO, where it will not try to enable
+        * the vnic until CMD_ENABLE2 is issued.
+        *     (u64)a0=paddr of vnic_devcmd_provinfo
+        *     (u32)a1=sizeof provision info
+        */
+       CMD_INIT_PROV_INFO2  = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 47),
+
+       /* enable2:
+        *      (u32)a0=0                  ==> standby
+        *             =CMD_ENABLE2_ACTIVE ==> active
+        */
+       CMD_ENABLE2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 48),
+
+       /*
+        * cmd_status:
+        *     Returns the status of the specified command
+        * Input:
+        *     a0 = command for which status is being queried.
+        *          Possible values are:
+        *              CMD_SOFT_RESET
+        *              CMD_HANG_RESET
+        *              CMD_OPEN
+        *              CMD_INIT
+        *              CMD_INIT_PROV_INFO
+        *              CMD_DEINIT
+        *              CMD_INIT_PROV_INFO2
+        *              CMD_ENABLE2
+        * Output:
+        *     if status == STAT_ERROR
+        *        a0 = ERR_ENOTSUPPORTED - status for command in a0 is
+        *                                 not supported
+        *     if status == STAT_NONE
+        *        a0 = status of the devcmd specified in a0 as follows.
+        *             ERR_SUCCESS   - command in a0 completed successfully
+        *             ERR_EINPROGRESS - command in a0 is still in progress
+        */
+       CMD_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 49),
+
+       /*
+        * Returns interrupt coalescing timer conversion factors.
+        * After calling this devcmd, ENIC driver can convert
+        * interrupt coalescing timer in usec into CPU cycles as follows:
+        *
+        *   intr_timer_cycles = intr_timer_usec * multiplier / divisor
+        *
+        * Interrupt coalescing timer in usecs can be be converted/obtained
+        * from CPU cycles as follows:
+        *
+        *   intr_timer_usec = intr_timer_cycles * divisor / multiplier
+        *
+        * in: none
+        * out: (u32)a0 = multiplier
+        *      (u32)a1 = divisor
+        *      (u32)a2 = maximum timer value in usec
+        */
+       CMD_INTR_COAL_CONVERT = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 50),
+
+       /*
+        * ISCSI DUMP API:
+        * in: (u64)a0=paddr of the param or param itself
+        *     (u32)a1=ISCSI_CMD_xxx
+        */
+       CMD_ISCSI_DUMP_REQ = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 51),
+
+       /*
+        * ISCSI DUMP STATUS API:
+        * in: (u32)a0=cmd tag
+        * in: (u32)a1=ISCSI_CMD_xxx
+        * out: (u32)a0=cmd status
+        */
+       CMD_ISCSI_DUMP_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 52),
+
+       /*
+        * Subvnic migration from MQ <--> VF.
+        * Enable the LIF migration from MQ to VF and vice versa. MQ and VF
+        * indexes are statically bound at the time of initialization.
+        * Based on the
+        * direction of migration, the resources of either MQ or the VF shall
+        * be attached to the LIF.
+        * in:        (u32)a0=Direction of Migration
+        *                                      0=> Migrate to VF
+        *                                      1=> Migrate to MQ
+        *            (u32)a1=VF index (MQ index)
+        */
+       CMD_MIGRATE_SUBVNIC = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 53),
+
+       /*
+        * Register / Deregister the notification block for MQ subvnics
+        * in:
+        *   (u64)a0=paddr to notify (set paddr=0 to unset)
+        *   (u32)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify)
+        *   (u16)a1 & 0x0000ffff00000000=intr num (-1 for no intr)
+        * out:
+        *   (u32)a1 = effective size
+        */
+       CMD_SUBVNIC_NOTIFY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 54),
+
+       /*
+        * Set the predefined mac address as default
+        * in:
+        *   (u48)a0=mac addr
+        */
+       CMD_SET_MAC_ADDR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 55),
+
+       /* Update the provisioning info of the given VIF
+        *     (u64)a0=paddr of vnic_devcmd_provinfo
+        *     (u32)a1=sizeof provision info
+        */
+       CMD_PROV_INFO_UPDATE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 56),
+
+       /*
+        * Initialization for the devcmd2 interface.
+        * in: (u64) a0=host result buffer physical address
+        * in: (u16) a1=number of entries in result buffer
+        */
+       CMD_INITIALIZE_DEVCMD2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 57)
 };
 
 /* flags for CMD_OPEN */
@@ -347,4 +466,39 @@ struct vnic_devcmd {
        u64 args[VNIC_DEVCMD_NARGS];    /* RW cmd args (little-endian) */
 };
 
+/*
+ * Version 2 of the interface.
+ *
+ * Some things are carried over, notably the vnic_devcmd_cmd enum.
+ */
+
+/*
+ * Flags for vnic_devcmd2.flags
+ */
+
+#define DEVCMD2_FNORESULT      0x1 /* Don't copy result to host */
+
+#define VNIC_DEVCMD2_NARGS                     VNIC_DEVCMD_NARGS
+
+struct vnic_devcmd2 {
+       u16 pad;
+       u16 flags;
+       u32 cmd;                /* same command #defines as original */
+       u64 args[VNIC_DEVCMD2_NARGS];
+};
+
+#define VNIC_DEVCMD2_NRESULTS                  VNIC_DEVCMD_NARGS
+struct devcmd2_result {
+       u64 results[VNIC_DEVCMD2_NRESULTS];
+       u32 pad;
+       u16 completed_index;    /* into copy WQ */
+       u8  error;              /* same error codes as original */
+       u8  color;              /* 0 or 1 as with completion queues */
+};
+
+#define DEVCMD2_RING_SIZE                      32
+#define DEVCMD2_DESC_SIZE                      128
+
+#define DEVCMD2_RESULTS_SIZE_MAX               ((1 << 16) - 1)
+
 #endif /* _VNIC_DEVCMD_H_ */
index 2d842f79d41a5790b859b9dfb420644099215031..7c6163f73bd36db4ce745d686710521ff563f13d 100644 (file)
@@ -41,6 +41,13 @@ enum vnic_res_type {
        RES_TYPE_RSVD7,
        RES_TYPE_DEVCMD,                /* Device command region */
        RES_TYPE_PASS_THRU_PAGE,        /* Pass-thru page */
+       RES_TYPE_SUBVNIC,               /* subvnic resource type */
+       RES_TYPE_MQ_WQ,                 /* MQ Work queues */
+       RES_TYPE_MQ_RQ,                 /* MQ Receive queues */
+       RES_TYPE_MQ_CQ,                 /* MQ Completion queues */
+       RES_TYPE_DEPRECATED1,           /* Old version of devcmd 2 */
+       RES_TYPE_DEPRECATED2,           /* Old version of devcmd 2 */
+       RES_TYPE_DEVCMD2,               /* Device control region */
 
        RES_TYPE_MAX,                   /* Count of resource types */
 };