New upstream version 18.08
[deb_dpdk.git] / drivers / net / qede / base / ecore_sriov.h
index ed6ddc4..50c7d2c 100644 (file)
@@ -1,9 +1,7 @@
-/*
- * Copyright (c) 2016 QLogic Corporation.
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2016 - 2018 Cavium Inc.
  * All rights reserved.
- * www.qlogic.com
- *
- * See LICENSE.qede_pmd for copyright and licensing details.
+ * www.cavium.com
  */
 
 #ifndef __ECORE_SRIOV_H__
 #include "ecore_vfpf_if.h"
 #include "ecore_iov_api.h"
 #include "ecore_hsi_common.h"
+#include "ecore_l2.h"
 
 #define ECORE_ETH_MAX_VF_NUM_VLAN_FILTERS \
-       (MAX_NUM_VFS * ECORE_ETH_VF_NUM_VLAN_FILTERS)
+       (MAX_NUM_VFS_E4 * ECORE_ETH_VF_NUM_VLAN_FILTERS)
 
 /* Represents a full message. Both the request filled by VF
  * and the response filled by the PF. The VF needs one copy
@@ -44,6 +43,9 @@ struct ecore_iov_vf_mbx {
        /* Address in VF where a pending message is located */
        dma_addr_t              pending_req;
 
+       /* Message from VF awaits handling */
+       bool                    b_pending_msg;
+
        u8 *offset;
 
 #ifdef CONFIG_ECORE_SW_CHANNEL
@@ -62,12 +64,22 @@ struct ecore_iov_vf_mbx {
                                         */
 };
 
-struct ecore_vf_q_info {
+#define ECORE_IOV_LEGACY_QID_RX (0)
+#define ECORE_IOV_LEGACY_QID_TX (1)
+#define ECORE_IOV_QID_INVALID (0xFE)
+
+struct ecore_vf_queue_cid {
+       bool b_is_tx;
+       struct ecore_queue_cid *p_cid;
+};
+
+/* Describes a qzone associated with the VF */
+struct ecore_vf_queue {
+       /* Input from upper-layer, mapping relateive queue to queue-zone */
        u16 fw_rx_qid;
        u16 fw_tx_qid;
-       u8 fw_cid;
-       u8 rxq_active;
-       u8 txq_active;
+
+       struct ecore_vf_queue_cid cids[MAX_QUEUES_PER_QZONE];
 };
 
 enum vf_state {
@@ -97,11 +109,17 @@ struct ecore_vf_info {
        struct ecore_iov_vf_mbx vf_mbx;
        enum vf_state state;
        bool b_init;
+       bool b_malicious;
        u8                      to_disable;
 
        struct ecore_bulletin   bulletin;
        dma_addr_t              vf_bulletin;
 
+#ifdef CONFIG_ECORE_SW_CHANNEL
+       /* Determine whether PF communicate with VF using HW/SW channel */
+       bool    b_hw_channel;
+#endif
+
        /* PF saves a copy of the last VF acquire message */
        struct vfpf_acquire_tlv acquire;
 
@@ -110,6 +128,7 @@ struct ecore_vf_info {
        u16                     mtu;
 
        u8                      vport_id;
+       u8                      rss_eng_id;
        u8                      relative_vf_id;
        u8                      abs_vf_id;
 #define ECORE_VF_ABS_ID(p_hwfn, p_vf)  (ECORE_PATH_ID(p_hwfn) ? \
@@ -120,12 +139,15 @@ struct ecore_vf_info {
        u8                      num_rxqs;
        u8                      num_txqs;
 
+       u16                     rx_coal;
+       u16                     tx_coal;
+
        u8                      num_sbs;
 
        u8                      num_mac_filters;
        u8                      num_vlan_filters;
 
-       struct ecore_vf_q_info  vf_queues[ECORE_MAX_VF_CHAINS_PER_PF];
+       struct ecore_vf_queue   vf_queues[ECORE_MAX_VF_CHAINS_PER_PF];
        u16                     igu_sbs[ECORE_MAX_VF_CHAINS_PER_PF];
 
        /* TODO - Only windows is using it - should be removed */
@@ -151,10 +173,8 @@ struct ecore_vf_info {
  * capability enabled.
  */
 struct ecore_pf_iov {
-       struct ecore_vf_info    vfs_array[MAX_NUM_VFS];
-       u64                     pending_events[ECORE_VF_ARRAY_LENGTH];
+       struct ecore_vf_info    vfs_array[MAX_NUM_VFS_E4];
        u64                     pending_flr[ECORE_VF_ARRAY_LENGTH];
-       u16                     base_vport_id;
 
 #ifndef REMOVE_DBG
        /* This doesn't serve anything functionally, but it makes windows
@@ -189,17 +209,13 @@ enum _ecore_status_t ecore_iov_hw_info(struct ecore_hwfn *p_hwfn);
 /**
  * @brief ecore_add_tlv - place a given tlv on the tlv buffer at next offset
  *
- * @param p_hwfn
- * @param p_iov
+ * @param offset
  * @param type
  * @param length
  *
  * @return pointer to the newly placed tlv
  */
-void *ecore_add_tlv(struct ecore_hwfn  *p_hwfn,
-                   u8                  **offset,
-                   u16                 type,
-                   u16                 length);
+void *ecore_add_tlv(u8 **offset, u16 type, u16 length);
 
 /**
  * @brief list the types and lengths of the tlvs on the buffer
@@ -223,10 +239,8 @@ enum _ecore_status_t ecore_iov_alloc(struct ecore_hwfn *p_hwfn);
  * @brief ecore_iov_setup - setup sriov related resources
  *
  * @param p_hwfn
- * @param p_ptt
  */
-void ecore_iov_setup(struct ecore_hwfn *p_hwfn,
-                    struct ecore_ptt   *p_ptt);
+void ecore_iov_setup(struct ecore_hwfn *p_hwfn);
 
 /**
  * @brief ecore_iov_free - free sriov related resources
@@ -242,42 +256,16 @@ void ecore_iov_free(struct ecore_hwfn *p_hwfn);
  */
 void ecore_iov_free_hw_info(struct ecore_dev *p_dev);
 
-/**
- * @brief ecore_sriov_eqe_event - handle async sriov event arrived on eqe.
- *
- * @param p_hwfn
- * @param opcode
- * @param echo
- * @param data
- */
-enum _ecore_status_t ecore_sriov_eqe_event(struct ecore_hwfn    *p_hwfn,
-                                          u8                    opcode,
-                                          __le16                echo,
-                                          union event_ring_data *data);
-
-/**
- * @brief calculate CRC for bulletin board validation
- *
- * @param basic crc seed
- * @param ptr to beginning of buffer
- * @length in bytes of buffer
- *
- * @return calculated crc over buffer [with respect to seed].
- */
-u32 ecore_crc32(u32 crc,
-               u8  *ptr,
-               u32 length);
-
 /**
  * @brief Mark structs of vfs that have been FLR-ed.
  *
  * @param p_hwfn
  * @param disabled_vfs - bitmask of all VFs on path that were FLRed
  *
- * @return 1 iff one of the PF's vfs got FLRed. 0 otherwise.
+ * @return true iff one of the PF's vfs got FLRed. false otherwise.
  */
-int ecore_iov_mark_vf_flr(struct ecore_hwfn *p_hwfn,
-                         u32 *disabled_vfs);
+bool ecore_iov_mark_vf_flr(struct ecore_hwfn *p_hwfn,
+                          u32 *disabled_vfs);
 
 /**
  * @brief Search extended TLVs in request/reply buffer.