1 /*- 2 * BSD LICENSE 3 * 4 * Copyright (c) 2015-2016 Freescale Semiconductor, Inc. All rights reserved. 5 * Copyright 2016 NXP. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * * Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * * Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * * Neither the name of Freescale Semiconductor, Inc nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 #ifndef _DPAA2_ETHDEV_H 35 #define _DPAA2_ETHDEV_H 36 37 #include <rte_event_eth_rx_adapter.h> 38 39 #include <mc/fsl_dpni.h> 40 #include <mc/fsl_mc_sys.h> 41 42 #define DPAA2_MIN_RX_BUF_SIZE 512 43 #define DPAA2_MAX_RX_PKT_LEN 10240 /*WRIOP support*/ 44 45 #define MAX_TCS DPNI_MAX_TC 46 #define MAX_RX_QUEUES 16 47 #define MAX_TX_QUEUES 16 48 49 /*default tc to be used for ,congestion, distribution etc configuration. */ 50 #define DPAA2_DEF_TC 0 51 52 /* Threshold for a Tx queue to *Enter* Congestion state. 53 */ 54 #define CONG_ENTER_TX_THRESHOLD 512 55 56 /* Threshold for a queue to *Exit* Congestion state. 57 */ 58 #define CONG_EXIT_TX_THRESHOLD 480 59 60 #define CONG_RETRY_COUNT 18000 61 62 /* RX queue tail drop threshold 63 * currently considering 32 KB packets 64 */ 65 #define CONG_THRESHOLD_RX_Q (64 * 1024) 66 #define CONG_RX_OAL 128 67 68 /* Size of the input SMMU mapped memory required by MC */ 69 #define DIST_PARAM_IOVA_SIZE 256 70 71 /* Enable TX Congestion control support 72 * default is disable 73 */ 74 #define DPAA2_TX_CGR_OFF 0x01 75 76 /* Disable RX tail drop, default is enable */ 77 #define DPAA2_RX_TAILDROP_OFF 0x04 78 79 struct dpaa2_dev_priv { 80 void *hw; 81 int32_t hw_id; 82 int32_t qdid; 83 uint16_t token; 84 uint8_t nb_tx_queues; 85 uint8_t nb_rx_queues; 86 void *rx_vq[MAX_RX_QUEUES]; 87 void *tx_vq[MAX_TX_QUEUES]; 88 89 struct dpaa2_bp_list *bp_list; /**<Attached buffer pool list */ 90 uint32_t options; 91 uint8_t max_mac_filters; 92 uint8_t max_vlan_filters; 93 uint8_t num_rx_tc; 94 uint8_t flags; /*dpaa2 config flags */ 95 }; 96 97 int dpaa2_setup_flow_dist(struct rte_eth_dev *eth_dev, 98 uint64_t req_dist_set); 99 100 int dpaa2_remove_flow_dist(struct rte_eth_dev *eth_dev, 101 uint8_t tc_index); 102 103 int dpaa2_attach_bp_list(struct dpaa2_dev_priv *priv, void *blist); 104 105 int dpaa2_eth_eventq_attach(const struct rte_eth_dev *dev, 106 int eth_rx_queue_id, 107 uint16_t dpcon_id, 108 const struct rte_event_eth_rx_adapter_queue_conf *queue_conf); 109 110 int dpaa2_eth_eventq_detach(const struct rte_eth_dev *dev, 111 int eth_rx_queue_id); 112 113 uint16_t dpaa2_dev_prefetch_rx(void *queue, struct rte_mbuf **bufs, 114 uint16_t nb_pkts); 115 void dpaa2_dev_process_parallel_event(struct qbman_swp *swp, 116 const struct qbman_fd *fd, 117 const struct qbman_result *dq, 118 struct dpaa2_queue *rxq, 119 struct rte_event *ev); 120 uint16_t dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts); 121 uint16_t dummy_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts); 122 #endif /* _DPAA2_ETHDEV_H */ 123