net/enic: fix L4 Rx ptype comparison
[dpdk.git] / drivers / net / i40e / rte_pmd_i40e.h
index f18251b..7ca37b1 100644 (file)
@@ -1,33 +1,5 @@
-/*-
- *   BSD LICENSE
- *
- *   Copyright (c) 2017 Intel Corporation. All rights reserved.
- *
- *   Redistribution and use in source and binary forms, with or without
- *   modification, are permitted provided that the following conditions
- *   are met:
- *
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in
- *       the documentation and/or other materials provided with the
- *       distribution.
- *     * Neither the name of Intel Corporation nor the names of its
- *       contributors may be used to endorse or promote products derived
- *       from this software without specific prior written permission.
- *
- *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2017 Intel Corporation
  */
 
 #ifndef _PMD_I40E_H_
@@ -250,6 +222,93 @@ struct rte_pmd_i40e_queue_regions {
                region[RTE_PMD_I40E_REGION_MAX_NUM];
 };
 
+/**
+ * Behavior will be taken if raw packet template is matched.
+ */
+enum rte_pmd_i40e_pkt_template_behavior {
+       RTE_PMD_I40E_PKT_TEMPLATE_ACCEPT,
+       RTE_PMD_I40E_PKT_TEMPLATE_REJECT,
+       RTE_PMD_I40E_PKT_TEMPLATE_PASSTHRU,
+};
+
+/**
+ * Flow director report status
+ * It defines what will be reported if raw packet template is matched.
+ */
+enum rte_pmd_i40e_pkt_template_status {
+       /** report nothing */
+       RTE_PMD_I40E_PKT_TEMPLATE_NO_REPORT_STATUS,
+       /** only report FD ID */
+       RTE_PMD_I40E_PKT_TEMPLATE_REPORT_ID,
+       /** report FD ID and 4 flex bytes */
+       RTE_PMD_I40E_PKT_TEMPLATE_REPORT_ID_FLEX_4,
+       /** report 8 flex bytes */
+       RTE_PMD_I40E_PKT_TEMPLATE_REPORT_FLEX_8,
+};
+
+/**
+ * A structure used to define an action when raw packet template is matched.
+ */
+struct rte_pmd_i40e_pkt_template_action {
+       /** queue assigned to if raw packet template match */
+       uint16_t rx_queue;
+       /** behavior will be taken */
+       enum rte_pmd_i40e_pkt_template_behavior behavior;
+       /** status report option */
+       enum rte_pmd_i40e_pkt_template_status report_status;
+       /**
+        * If report_status is RTE_PMD_I40E_PKT_TEMPLATE_REPORT_ID_FLEX_4 or
+        * RTE_PMD_I40E_PKT_TEMPLATE_REPORT_FLEX_8, flex_off specifies
+        * where the reported flex bytes start from in flexible payload.
+        */
+       uint8_t flex_off;
+};
+
+/**
+ * A structure used to define the input for raw packet template.
+ */
+struct rte_pmd_i40e_pkt_template_input {
+       /** the pctype used for raw packet template */
+       uint16_t pctype;
+       /** the buffer conatining raw packet template */
+       void *packet;
+       /** the length of buffer with raw packet template */
+       uint32_t length;
+};
+
+/**
+ * A structure used to define the configuration parameters
+ * for raw packet template.
+ */
+struct rte_pmd_i40e_pkt_template_conf {
+       /** the input for raw packet template. */
+       struct rte_pmd_i40e_pkt_template_input input;
+       /** the action to be taken when raw packet template is matched */
+       struct rte_pmd_i40e_pkt_template_action action;
+       /** ID, an unique software index for the raw packet template filter */
+       uint32_t soft_id;
+};
+
+/**
+ * Add or remove raw packet template filter to Flow Director.
+ *
+ * @param port
+ *   The port identifier of the Ethernet device.
+ * @param conf
+ *   Specifies configuration parameters of raw packet template filter.
+ * @param add
+ *   Speicifes an action to be taken - add or remove raw packet template filter.
+ * @return
+ *   - (0) if successful.
+ *   - (-ENODEV) if *port* invalid.
+ *   - (-EINVAL) if *conf* invalid.
+ *   - (-ENOTSUP) not supported by firmware.
+ */
+int rte_pmd_i40e_flow_add_del_packet_template(
+                       uint16_t port,
+                       const struct rte_pmd_i40e_pkt_template_conf *conf,
+                       uint8_t add);
+
 /**
  * Notify VF when PF link status changes.
  *
@@ -759,7 +818,7 @@ int rte_pmd_i40e_ptype_mapping_replace(uint16_t port,
  *   - (-ENODEV) if *port* invalid.
  *   - (-EINVAL) if *vf* or *mac_addr* is invalid.
  */
-int rte_pmd_i40e_add_vf_mac_addr(uint8_t port, uint16_t vf_id,
+int rte_pmd_i40e_add_vf_mac_addr(uint16_t port, uint16_t vf_id,
                                 struct ether_addr *mac_addr);
 
 #define RTE_PMD_I40E_PCTYPE_MAX                64
@@ -788,7 +847,7 @@ struct rte_pmd_i40e_flow_type_mapping {
  *     set other PCTYPEs maps to PCTYPE_INVALID.
  */
 int rte_pmd_i40e_flow_type_mapping_update(
-                       uint8_t port,
+                       uint16_t port,
                        struct rte_pmd_i40e_flow_type_mapping *mapping_items,
                        uint16_t count,
                        uint8_t exclusive);
@@ -805,7 +864,7 @@ int rte_pmd_i40e_flow_type_mapping_update(
  *    RTE_PMD_I40E_FLOW_TYPE_MAX items
  */
 int rte_pmd_i40e_flow_type_mapping_get(
-                       uint8_t port,
+                       uint16_t port,
                        struct rte_pmd_i40e_flow_type_mapping *mapping_items);
 
 /**
@@ -815,7 +874,7 @@ int rte_pmd_i40e_flow_type_mapping_get(
  * @param port
  *    pointer to port identifier of the device
  */
-int rte_pmd_i40e_flow_type_mapping_reset(uint8_t port);
+int rte_pmd_i40e_flow_type_mapping_reset(uint16_t port);
 
 /**
  * On the PF, find VF index based on VF MAC address