net: hns3: add HNAE3_RESTORE_CLIENT interface in enet module
[platform/kernel/linux-rpi.git] / drivers / net / ethernet / hisilicon / hns3 / hnae3.h
index 055b406..d486748 100644 (file)
@@ -52,6 +52,7 @@
 #define HNAE3_UNIC_CLIENT_INITED_B             0x4
 #define HNAE3_ROCE_CLIENT_INITED_B             0x5
 #define HNAE3_DEV_SUPPORT_FD_B                 0x6
+#define HNAE3_DEV_SUPPORT_GRO_B                        0x7
 
 #define HNAE3_DEV_SUPPORT_ROCE_DCB_BITS (BIT(HNAE3_DEV_SUPPORT_DCB_B) |\
                BIT(HNAE3_DEV_SUPPORT_ROCE_B))
@@ -65,6 +66,9 @@
 #define hnae3_dev_fd_supported(hdev) \
        hnae3_get_bit((hdev)->ae_dev->flag, HNAE3_DEV_SUPPORT_FD_B)
 
+#define hnae3_dev_gro_supported(hdev) \
+       hnae3_get_bit((hdev)->ae_dev->flag, HNAE3_DEV_SUPPORT_GRO_B)
+
 #define ring_ptr_move_fw(ring, p) \
        ((ring)->p = ((ring)->p + 1) % (ring)->desc_num)
 #define ring_ptr_move_bw(ring, p) \
@@ -120,18 +124,28 @@ enum hnae3_reset_notify_type {
        HNAE3_DOWN_CLIENT,
        HNAE3_INIT_CLIENT,
        HNAE3_UNINIT_CLIENT,
+       HNAE3_RESTORE_CLIENT,
 };
 
 enum hnae3_reset_type {
        HNAE3_VF_RESET,
+       HNAE3_VF_FUNC_RESET,
+       HNAE3_VF_PF_FUNC_RESET,
        HNAE3_VF_FULL_RESET,
+       HNAE3_FLR_RESET,
        HNAE3_FUNC_RESET,
        HNAE3_CORE_RESET,
        HNAE3_GLOBAL_RESET,
        HNAE3_IMP_RESET,
+       HNAE3_UNKNOWN_RESET,
        HNAE3_NONE_RESET,
 };
 
+enum hnae3_flr_state {
+       HNAE3_FLR_DOWN,
+       HNAE3_FLR_DONE,
+};
+
 struct hnae3_vector_info {
        u8 __iomem *io_addr;
        int vector;
@@ -162,6 +176,7 @@ struct hnae3_client_ops {
        int (*setup_tc)(struct hnae3_handle *handle, u8 tc);
        int (*reset_notify)(struct hnae3_handle *handle,
                            enum hnae3_reset_notify_type type);
+       enum hnae3_reset_type (*process_hw_error)(struct hnae3_handle *handle);
 };
 
 #define HNAE3_CLIENT_NAME_LENGTH 16
@@ -197,6 +212,10 @@ struct hnae3_ae_dev {
  *   Enable the hardware
  * stop()
  *   Disable the hardware
+ * start_client()
+ *   Inform the hclge that client has been started
+ * stop_client()
+ *   Inform the hclge that client has been stopped
  * get_status()
  *   Get the carrier state of the back channel of the handle, 1 for ok, 0 for
  *   non-ok
@@ -292,17 +311,22 @@ struct hnae3_ae_dev {
  *   Set vlan filter config of vf
  * enable_hw_strip_rxvtag()
  *   Enable/disable hardware strip vlan tag of packets received
+ * set_gro_en
+ *   Enable/disable HW GRO
  */
 struct hnae3_ae_ops {
        int (*init_ae_dev)(struct hnae3_ae_dev *ae_dev);
        void (*uninit_ae_dev)(struct hnae3_ae_dev *ae_dev);
-
+       void (*flr_prepare)(struct hnae3_ae_dev *ae_dev);
+       void (*flr_done)(struct hnae3_ae_dev *ae_dev);
        int (*init_client_instance)(struct hnae3_client *client,
                                    struct hnae3_ae_dev *ae_dev);
        void (*uninit_client_instance)(struct hnae3_client *client,
                                       struct hnae3_ae_dev *ae_dev);
        int (*start)(struct hnae3_handle *handle);
        void (*stop)(struct hnae3_handle *handle);
+       int (*client_start)(struct hnae3_handle *handle);
+       void (*client_stop)(struct hnae3_handle *handle);
        int (*get_status)(struct hnae3_handle *handle);
        void (*get_ksettings_an_result)(struct hnae3_handle *handle,
                                        u8 *auto_neg, u32 *speed, u8 *duplex);
@@ -403,6 +427,8 @@ struct hnae3_ae_ops {
                                  u16 vlan, u8 qos, __be16 proto);
        int (*enable_hw_strip_rxvtag)(struct hnae3_handle *handle, bool enable);
        void (*reset_event)(struct pci_dev *pdev, struct hnae3_handle *handle);
+       void (*set_default_reset_request)(struct hnae3_ae_dev *ae_dev,
+                                         enum hnae3_reset_type rst_type);
        void (*get_channels)(struct hnae3_handle *handle,
                             struct ethtool_channels *ch);
        void (*get_tqps_and_rss_info)(struct hnae3_handle *h,
@@ -429,7 +455,14 @@ struct hnae3_ae_ops {
                                struct ethtool_rxnfc *cmd, u32 *rule_locs);
        int (*restore_fd_rules)(struct hnae3_handle *handle);
        void (*enable_fd)(struct hnae3_handle *handle, bool enable);
-       pci_ers_result_t (*process_hw_error)(struct hnae3_ae_dev *ae_dev);
+       int (*dbg_run_cmd)(struct hnae3_handle *handle, char *cmd_buf);
+       pci_ers_result_t (*handle_hw_ras_error)(struct hnae3_ae_dev *ae_dev);
+       bool (*get_hw_reset_stat)(struct hnae3_handle *handle);
+       bool (*ae_dev_resetting)(struct hnae3_handle *handle);
+       unsigned long (*ae_dev_reset_cnt)(struct hnae3_handle *handle);
+       int (*set_gro_en)(struct hnae3_handle *handle, int enable);
+       u16 (*get_global_queue_id)(struct hnae3_handle *handle, u16 queue_id);
+       void (*set_timer_task)(struct hnae3_handle *handle, bool enable);
 };
 
 struct hnae3_dcb_ops {
@@ -468,6 +501,7 @@ struct hnae3_tc_info {
 struct hnae3_knic_private_info {
        struct net_device *netdev; /* Set by KNIC client when init instance */
        u16 rss_size;              /* Allocated RSS queues */
+       u16 req_rss_size;
        u16 rx_buf_len;
        u16 num_desc;
 
@@ -488,6 +522,14 @@ struct hnae3_roce_private_info {
        void __iomem *roce_io_base;
        int base_vector;
        int num_vectors;
+
+       /* The below attributes defined for RoCE client, hnae3 gives
+        * initial values to them, and RoCE client can modify and use
+        * them.
+        */
+       unsigned long reset_state;
+       unsigned long instance_state;
+       unsigned long state;
 };
 
 struct hnae3_unic_private_info {
@@ -520,9 +562,6 @@ struct hnae3_handle {
        struct hnae3_ae_algo *ae_algo;  /* the class who provides this handle */
        u64 flags; /* Indicate the capabilities for this handle*/
 
-       unsigned long last_reset_time;
-       enum hnae3_reset_type reset_level;
-
        union {
                struct net_device *netdev; /* first member */
                struct hnae3_knic_private_info kinfo;
@@ -533,6 +572,7 @@ struct hnae3_handle {
        u32 numa_node_mask;     /* for multi-chip support */
 
        u8 netdev_flags;
+       struct dentry *hnae3_dbgfs;
 };
 
 #define hnae3_set_field(origin, mask, shift, val) \