net/bnxt: add HWRM VNIC configure
[dpdk.git] / drivers / net / bnxt / hsi_struct_def_dpdk.h
index 8b30787..ef0b37a 100644 (file)
@@ -83,11 +83,15 @@ struct ctx_hw_stats64 {
  * Request types
  */
 #define HWRM_VER_GET                   (UINT32_C(0x0))
+#define HWRM_FUNC_RESET                        (UINT32_C(0x11))
 #define HWRM_FUNC_QCAPS                        (UINT32_C(0x15))
 #define HWRM_FUNC_DRV_UNRGTR           (UINT32_C(0x1a))
 #define HWRM_FUNC_DRV_RGTR             (UINT32_C(0x1d))
 #define HWRM_PORT_PHY_CFG              (UINT32_C(0x20))
 #define HWRM_QUEUE_QPORTCFG            (UINT32_C(0x30))
+#define HWRM_VNIC_ALLOC                        (UINT32_C(0x40))
+#define HWRM_VNIC_FREE                 (UINT32_C(0x41))
+#define HWRM_VNIC_CFG                  (UINT32_C(0x42))
 #define HWRM_CFA_L2_FILTER_ALLOC       (UINT32_C(0x90))
 #define HWRM_CFA_L2_FILTER_FREE                (UINT32_C(0x91))
 #define HWRM_CFA_L2_FILTER_CFG         (UINT32_C(0x92))
@@ -2048,6 +2052,134 @@ struct hwrm_func_qcaps_output {
        uint8_t valid;
 } __attribute__((packed));
 
+/* hwrm_func_reset */
+/*
+ * Description: This command resets a hardware function (PCIe function) and
+ * frees any resources used by the function. This command shall be initiated by
+ * the driver after an FLR has occurred to prepare the function for re-use. This
+ * command may also be initiated by a driver prior to doing it's own
+ * configuration. This command puts the function into the reset state. In the
+ * reset state, global and port related features of the chip are not available.
+ */
+/*
+ * Note: This command will reset a function that has already been disabled or
+ * idled. The command returns all the resources owned by the function so a new
+ * driver may allocate and configure resources normally.
+ */
+
+/* Input (24 bytes) */
+struct hwrm_func_reset_input {
+       /*
+        * This value indicates what type of request this is. The format for the
+        * rest of the command is determined by this field.
+        */
+       uint16_t req_type;
+
+       /*
+        * This value indicates the what completion ring the request will be
+        * optionally completed on. If the value is -1, then no CR completion
+        * will be generated. Any other value must be a valid CR ring_id value
+        * for this function.
+        */
+       uint16_t cmpl_ring;
+
+       /* This value indicates the command sequence number. */
+       uint16_t seq_id;
+
+       /*
+        * Target ID of this command. 0x0 - 0xFFF8 - Used for function ids
+        * 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF - HWRM
+        */
+       uint16_t target_id;
+
+       /*
+        * This is the host address where the response will be written when the
+        * request is complete. This area must be 16B aligned and must be
+        * cleared to zero before the request is made.
+        */
+       uint64_t resp_addr;
+
+       /* This bit must be '1' for the vf_id_valid field to be configured. */
+       #define HWRM_FUNC_RESET_INPUT_ENABLES_VF_ID_VALID \
+                                                       UINT32_C(0x1)
+       uint32_t enables;
+
+       /*
+        * The ID of the VF that this PF is trying to reset. Only the parent PF
+        * shall be allowed to reset a child VF. A parent PF driver shall use
+        * this field only when a specific child VF is requested to be reset.
+        */
+       uint16_t vf_id;
+
+       /* This value indicates the level of a function reset. */
+               /*
+                * Reset the caller function and its children VFs (if any). If
+                * no children functions exist, then reset the caller function
+                * only.
+                */
+       #define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETALL \
+                                                       (UINT32_C(0x0) << 0)
+               /* Reset the caller function only */
+       #define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETME \
+                                                       (UINT32_C(0x1) << 0)
+               /*
+                * Reset all children VFs of the caller function driver if the
+                * caller is a PF driver. It is an error to specify this level
+                * by a VF driver. It is an error to specify this level by a PF
+                * driver with no children VFs.
+                */
+       #define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETCHILDREN \
+                                                       (UINT32_C(0x2) << 0)
+               /*
+                * Reset a specific VF of the caller function driver if the
+                * caller is the parent PF driver. It is an error to specify
+                * this level by a VF driver. It is an error to specify this
+                * level by a PF driver that is not the parent of the VF that is
+                * being requested to reset.
+                */
+       #define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETVF \
+                                                       (UINT32_C(0x3) << 0)
+       uint8_t func_reset_level;
+
+       uint8_t unused_0;
+} __attribute__((packed));
+
+/* Output (16 bytes) */
+struct hwrm_func_reset_output {
+       /*
+        * Pass/Fail or error type Note: receiver to verify the in parameters,
+        * and fail the call with an error when appropriate
+        */
+       uint16_t error_code;
+
+       /* This field returns the type of original request. */
+       uint16_t req_type;
+
+       /* This field provides original sequence number of the command. */
+       uint16_t seq_id;
+
+       /*
+        * This field is the length of the response in bytes. The last byte of
+        * the response is a valid flag that will read as '1' when the command
+        * has been completely written to memory.
+        */
+       uint16_t resp_len;
+
+       uint32_t unused_0;
+       uint8_t unused_1;
+       uint8_t unused_2;
+       uint8_t unused_3;
+
+       /*
+        * This field is used in Output records to indicate that the output is
+        * completely written to RAM. This field should be read as '1' to
+        * indicate that the output has been completely written. When writing a
+        * command completion or response to an internal processor, the order of
+        * writes has to be such that this field is written last.
+        */
+       uint8_t valid;
+} __attribute__((packed));
+
 /* hwrm_port_phy_cfg */
 /*
  * Description: This command configures the PHY device for the port. It allows
@@ -2990,6 +3122,339 @@ struct hwrm_stat_ctx_clr_stats_output {
        uint8_t valid;
 } __attribute__((packed));
 
+/* hwrm_vnic_alloc */
+/*
+ * Description: This VNIC is a resource in the RX side of the chip that is used
+ * to represent a virtual host "interface". # At the time of VNIC allocation or
+ * configuration, the function can specify whether it wants the requested VNIC
+ * to be the default VNIC for the function or not. # If a function requests
+ * allocation of a VNIC for the first time and a VNIC is successfully allocated
+ * by the HWRM, then the HWRM shall make the allocated VNIC as the default VNIC
+ * for that function. # The default VNIC shall be used for the default action
+ * for a partition or function. # For each VNIC allocated on a function, a
+ * mapping on the RX side to map the allocated VNIC to source virtual interface
+ * shall be performed by the HWRM. This should be hidden to the function driver
+ * requesting the VNIC allocation. This enables broadcast/multicast replication
+ * with source knockout. # If multicast replication with source knockout is
+ * enabled, then the internal VNIC to SVIF mapping data structures shall be
+ * programmed at the time of VNIC allocation.
+ */
+
+/* Input (24 bytes) */
+struct hwrm_vnic_alloc_input {
+       /*
+        * This value indicates what type of request this is. The format for the
+        * rest of the command is determined by this field.
+        */
+       uint16_t req_type;
+
+       /*
+        * This value indicates the what completion ring the request will be
+        * optionally completed on. If the value is -1, then no CR completion
+        * will be generated. Any other value must be a valid CR ring_id value
+        * for this function.
+        */
+       uint16_t cmpl_ring;
+
+       /* This value indicates the command sequence number. */
+       uint16_t seq_id;
+
+       /*
+        * Target ID of this command. 0x0 - 0xFFF8 - Used for function ids
+        * 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF - HWRM
+        */
+       uint16_t target_id;
+
+       /*
+        * This is the host address where the response will be written when the
+        * request is complete. This area must be 16B aligned and must be
+        * cleared to zero before the request is made.
+        */
+       uint64_t resp_addr;
+
+       /*
+        * When this bit is '1', this VNIC is requested to be the default VNIC
+        * for this function.
+        */
+       #define HWRM_VNIC_ALLOC_INPUT_FLAGS_DEFAULT                UINT32_C(0x1)
+       uint32_t flags;
+
+       uint32_t unused_0;
+} __attribute__((packed));
+
+/* Output (16 bytes) */
+struct hwrm_vnic_alloc_output {
+       /*
+        * Pass/Fail or error type Note: receiver to verify the in parameters,
+        * and fail the call with an error when appropriate
+        */
+       uint16_t error_code;
+
+       /* This field returns the type of original request. */
+       uint16_t req_type;
+
+       /* This field provides original sequence number of the command. */
+       uint16_t seq_id;
+
+       /*
+        * This field is the length of the response in bytes. The last byte of
+        * the response is a valid flag that will read as '1' when the command
+        * has been completely written to memory.
+        */
+       uint16_t resp_len;
+
+       /* Logical vnic ID */
+       uint32_t vnic_id;
+
+       uint8_t unused_0;
+       uint8_t unused_1;
+       uint8_t unused_2;
+
+       /*
+        * This field is used in Output records to indicate that the output is
+        * completely written to RAM. This field should be read as '1' to
+        * indicate that the output has been completely written. When writing a
+        * command completion or response to an internal processor, the order of
+        * writes has to be such that this field is written last.
+        */
+       uint8_t valid;
+} __attribute__((packed));
+
+/* hwrm_vnic_cfg */
+/* Description: Configure the RX VNIC structure. */
+
+/* Input (40 bytes) */
+struct hwrm_vnic_cfg_input {
+       /*
+        * This value indicates what type of request this is. The format for the
+        * rest of the command is determined by this field.
+        */
+       uint16_t req_type;
+
+       /*
+        * This value indicates the what completion ring the request will be
+        * optionally completed on. If the value is -1, then no CR completion
+        * will be generated. Any other value must be a valid CR ring_id value
+        * for this function.
+        */
+       uint16_t cmpl_ring;
+
+       /* This value indicates the command sequence number. */
+       uint16_t seq_id;
+
+       /*
+        * Target ID of this command. 0x0 - 0xFFF8 - Used for function ids
+        * 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF - HWRM
+        */
+       uint16_t target_id;
+
+       /*
+        * This is the host address where the response will be written when the
+        * request is complete. This area must be 16B aligned and must be
+        * cleared to zero before the request is made.
+        */
+       uint64_t resp_addr;
+
+       /*
+        * When this bit is '1', the VNIC is requested to be the default VNIC
+        * for the function.
+        */
+       #define HWRM_VNIC_CFG_INPUT_FLAGS_DEFAULT               UINT32_C(0x1)
+       /*
+        * When this bit is '1', the VNIC is being configured to strip VLAN in
+        * the RX path. If set to '0', then VLAN stripping is disabled on this
+        * VNIC.
+        */
+       #define HWRM_VNIC_CFG_INPUT_FLAGS_VLAN_STRIP_MODE       UINT32_C(0x2)
+       /*
+        * When this bit is '1', the VNIC is being configured to buffer receive
+        * packets in the hardware until the host posts new receive buffers. If
+        * set to '0', then bd_stall is being configured to be disabled on this
+        * VNIC.
+        */
+       #define HWRM_VNIC_CFG_INPUT_FLAGS_BD_STALL_MODE         UINT32_C(0x4)
+       /*
+        * When this bit is '1', the VNIC is being configured to receive both
+        * RoCE and non-RoCE traffic. If set to '0', then this VNIC is not
+        * configured to be operating in dual VNIC mode.
+        */
+       #define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_DUAL_VNIC_MODE   UINT32_C(0x8)
+       /*
+        * When this flag is set to '1', the VNIC is requested to be configured
+        * to receive only RoCE traffic. If this flag is set to '0', then this
+        * flag shall be ignored by the HWRM. If roce_dual_vnic_mode flag is set
+        * to '1', then the HWRM client shall not set this flag to '1'.
+        */
+       #define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_ONLY_VNIC_MODE   UINT32_C(0x10)
+       uint32_t flags;
+
+       /* This bit must be '1' for the dflt_ring_grp field to be configured. */
+       #define HWRM_VNIC_CFG_INPUT_ENABLES_DFLT_RING_GRP       UINT32_C(0x1)
+       /* This bit must be '1' for the rss_rule field to be configured. */
+       #define HWRM_VNIC_CFG_INPUT_ENABLES_RSS_RULE            UINT32_C(0x2)
+       /* This bit must be '1' for the cos_rule field to be configured. */
+       #define HWRM_VNIC_CFG_INPUT_ENABLES_COS_RULE            UINT32_C(0x4)
+       /* This bit must be '1' for the lb_rule field to be configured. */
+       #define HWRM_VNIC_CFG_INPUT_ENABLES_LB_RULE             UINT32_C(0x8)
+       /* This bit must be '1' for the mru field to be configured. */
+       #define HWRM_VNIC_CFG_INPUT_ENABLES_MRU                 UINT32_C(0x10)
+       uint32_t enables;
+
+       /* Logical vnic ID */
+       uint16_t vnic_id;
+
+       /*
+        * Default Completion ring for the VNIC. This ring will be chosen if
+        * packet does not match any RSS rules and if there is no COS rule.
+        */
+       uint16_t dflt_ring_grp;
+
+       /*
+        * RSS ID for RSS rule/table structure. 0xFF... (All Fs) if there is no
+        * RSS rule.
+        */
+       uint16_t rss_rule;
+
+       /*
+        * RSS ID for COS rule/table structure. 0xFF... (All Fs) if there is no
+        * COS rule.
+        */
+       uint16_t cos_rule;
+
+       /*
+        * RSS ID for load balancing rule/table structure. 0xFF... (All Fs) if
+        * there is no LB rule.
+        */
+       uint16_t lb_rule;
+
+       /*
+        * The maximum receive unit of the vnic. Each vnic is associated with a
+        * function. The vnic mru value overwrites the mru setting of the
+        * associated function. The HWRM shall make sure that vnic mru does not
+        * exceed the mru of the port the function is associated with.
+        */
+       uint16_t mru;
+
+       uint32_t unused_0;
+} __attribute__((packed));
+
+/* Output (16 bytes) */
+struct hwrm_vnic_cfg_output {
+       /*
+        * Pass/Fail or error type Note: receiver to verify the in parameters,
+        * and fail the call with an error when appropriate
+        */
+       uint16_t error_code;
+
+       /* This field returns the type of original request. */
+       uint16_t req_type;
+
+       /* This field provides original sequence number of the command. */
+       uint16_t seq_id;
+
+       /*
+        * This field is the length of the response in bytes. The last byte of
+        * the response is a valid flag that will read as '1' when the command
+        * has been completely written to memory.
+        */
+       uint16_t resp_len;
+
+       uint32_t unused_0;
+       uint8_t unused_1;
+       uint8_t unused_2;
+       uint8_t unused_3;
+
+       /*
+        * This field is used in Output records to indicate that the output is
+        * completely written to RAM. This field should be read as '1' to
+        * indicate that the output has been completely written. When writing a
+        * command completion or response to an internal processor, the order of
+        * writes has to be such that this field is written last.
+        */
+       uint8_t valid;
+} __attribute__((packed));
+
+/* hwrm_vnic_free */
+/*
+ * Description: Free a VNIC resource. Idle any resources associated with the
+ * VNIC as well as the VNIC. Reset and release all resources associated with the
+ * VNIC.
+ */
+
+/* Input (24 bytes) */
+struct hwrm_vnic_free_input {
+       /*
+        * This value indicates what type of request this is. The format for the
+        * rest of the command is determined by this field.
+        */
+       uint16_t req_type;
+
+       /*
+        * This value indicates the what completion ring the request will be
+        * optionally completed on. If the value is -1, then no CR completion
+        * will be generated. Any other value must be a valid CR ring_id value
+        * for this function.
+        */
+       uint16_t cmpl_ring;
+
+       /* This value indicates the command sequence number. */
+       uint16_t seq_id;
+
+       /*
+        * Target ID of this command. 0x0 - 0xFFF8 - Used for function ids
+        * 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF - HWRM
+        */
+       uint16_t target_id;
+
+       /*
+        * This is the host address where the response will be written when the
+        * request is complete. This area must be 16B aligned and must be
+        * cleared to zero before the request is made.
+        */
+       uint64_t resp_addr;
+
+       /* Logical vnic ID */
+       uint32_t vnic_id;
+
+       uint32_t unused_0;
+} __attribute__((packed));
+
+/* Output (16 bytes) */
+struct hwrm_vnic_free_output {
+       /*
+        * Pass/Fail or error type Note: receiver to verify the in parameters,
+        * and fail the call with an error when appropriate
+        */
+       uint16_t error_code;
+
+       /* This field returns the type of original request. */
+       uint16_t req_type;
+
+       /* This field provides original sequence number of the command. */
+       uint16_t seq_id;
+
+       /*
+        * This field is the length of the response in bytes. The last byte of
+        * the response is a valid flag that will read as '1' when the command
+        * has been completely written to memory.
+        */
+       uint16_t resp_len;
+
+       uint32_t unused_0;
+       uint8_t unused_1;
+       uint8_t unused_2;
+       uint8_t unused_3;
+
+       /*
+        * This field is used in Output records to indicate that the output is
+        * completely written to RAM. This field should be read as '1' to
+        * indicate that the output has been completely written. When writing a
+        * command completion or response to an internal processor, the order of
+        * writes has to be such that this field is written last.
+        */
+       uint8_t valid;
+} __attribute__((packed));
+
 /* hwrm_vnic_rss_cfg */
 /* Description: This function is used to enable RSS configuration. */