1c1870f65SAkhil Goyal /* SPDX-License-Identifier: BSD-3-Clause 2274fd921SRohit Raj * Copyright 2018-2024 NXP 3c1870f65SAkhil Goyal */ 4c1870f65SAkhil Goyal 5c1870f65SAkhil Goyal #ifndef _RTE_PMD_DPAA2_H 6c1870f65SAkhil Goyal #define _RTE_PMD_DPAA2_H 7c1870f65SAkhil Goyal 8c1870f65SAkhil Goyal /** 9c1870f65SAkhil Goyal * @file rte_pmd_dpaa2.h 10c1870f65SAkhil Goyal * 11c1870f65SAkhil Goyal * NXP dpaa2 PMD specific functions. 12c1870f65SAkhil Goyal */ 13c1870f65SAkhil Goyal 141094dd94SDavid Marchand #include <rte_compat.h> 15c1870f65SAkhil Goyal #include <rte_flow.h> 16c1870f65SAkhil Goyal 171def64c2SNipun Gupta /** 181def64c2SNipun Gupta * Create a flow rule to demultiplex ethernet traffic to separate network 191def64c2SNipun Gupta * interfaces. 201def64c2SNipun Gupta * 211def64c2SNipun Gupta * @param dpdmux_id 221def64c2SNipun Gupta * ID of the DPDMUX MC object. 231def64c2SNipun Gupta * @param[in] pattern 241def64c2SNipun Gupta * Pattern specification. 251def64c2SNipun Gupta * @param[in] actions 261def64c2SNipun Gupta * Associated actions. 271def64c2SNipun Gupta * 281def64c2SNipun Gupta * @return 29*25e5845bSJun Yang * 0 in case of success, otherwise failure. 301def64c2SNipun Gupta */ 31*25e5845bSJun Yang int 321def64c2SNipun Gupta rte_pmd_dpaa2_mux_flow_create(uint32_t dpdmux_id, 33*25e5845bSJun Yang struct rte_flow_item pattern[], 34*25e5845bSJun Yang struct rte_flow_action actions[]); 35274fd921SRohit Raj int 36274fd921SRohit Raj rte_pmd_dpaa2_mux_flow_destroy(uint32_t dpdmux_id, 37274fd921SRohit Raj uint16_t entry_index); 38cfe96771SVanshika Shukla int 39cfe96771SVanshika Shukla rte_pmd_dpaa2_mux_flow_l2(uint32_t dpdmux_id, 40cfe96771SVanshika Shukla uint8_t mac_addr[6], uint16_t vlan_id, int dest_if); 411def64c2SNipun Gupta 425f822962SNipun Gupta /** 435f822962SNipun Gupta * @warning 445f822962SNipun Gupta * @b EXPERIMENTAL: this API may change, or be removed, without prior notice 455f822962SNipun Gupta * 4617eda10dSHemant Agrawal * Dump demultiplex ethernet traffic counters 4717eda10dSHemant Agrawal * 4817eda10dSHemant Agrawal * @param f 4917eda10dSHemant Agrawal * output stream 5017eda10dSHemant Agrawal * @param dpdmux_id 5117eda10dSHemant Agrawal * ID of the DPDMUX MC object. 5217eda10dSHemant Agrawal * @param num_if 5317eda10dSHemant Agrawal * number of interface in dpdmux object 5417eda10dSHemant Agrawal * 5517eda10dSHemant Agrawal */ 5617eda10dSHemant Agrawal __rte_experimental 5717eda10dSHemant Agrawal void 5817eda10dSHemant Agrawal rte_pmd_dpaa2_mux_dump_counter(FILE *f, uint32_t dpdmux_id, int num_if); 5917eda10dSHemant Agrawal 6017eda10dSHemant Agrawal /** 6117eda10dSHemant Agrawal * @warning 6217eda10dSHemant Agrawal * @b EXPERIMENTAL: this API may change, or be removed, without prior notice 6317eda10dSHemant Agrawal * 6466c64eb2SHemant Agrawal * demultiplex interface max rx frame length configure 6566c64eb2SHemant Agrawal * 6666c64eb2SHemant Agrawal * @param dpdmux_id 6766c64eb2SHemant Agrawal * ID of the DPDMUX MC object. 6866c64eb2SHemant Agrawal * @param max_rx_frame_len 6966c64eb2SHemant Agrawal * maximum receive frame length (will be checked to be minimux of all dpnis) 7066c64eb2SHemant Agrawal * 7166c64eb2SHemant Agrawal */ 7266c64eb2SHemant Agrawal __rte_experimental 7366c64eb2SHemant Agrawal int 7466c64eb2SHemant Agrawal rte_pmd_dpaa2_mux_rx_frame_len(uint32_t dpdmux_id, uint16_t max_rx_frame_len); 7566c64eb2SHemant Agrawal 7666c64eb2SHemant Agrawal /** 775f822962SNipun Gupta * Create a custom hash key on basis of offset of start of packet and size. 785f822962SNipun Gupta * for e.g. if we need GRE packets (non-vlan and without any extra headers) 795f822962SNipun Gupta * to be hashed on basis of inner IP header, we will provide offset as: 805f822962SNipun Gupta * 14 (eth) + 20 (IP) + 4 (GRE) + 12 (Inner Src offset) = 50 and size 815f822962SNipun Gupta * as 8 bytes. 825f822962SNipun Gupta * 835f822962SNipun Gupta * @param port_id 845f822962SNipun Gupta * The port identifier of the Ethernet device. 855f822962SNipun Gupta * @param offset 865f822962SNipun Gupta * Offset from the start of packet which needs to be included to 875f822962SNipun Gupta * calculate hash 885f822962SNipun Gupta * @param size 895f822962SNipun Gupta * Size of the hash input key 905f822962SNipun Gupta * 915f822962SNipun Gupta * @return 925f822962SNipun Gupta * - 0 if successful. 935f822962SNipun Gupta * - Negative in case of failure. 945f822962SNipun Gupta */ 955f822962SNipun Gupta int 965f822962SNipun Gupta rte_pmd_dpaa2_set_custom_hash(uint16_t port_id, 975f822962SNipun Gupta uint16_t offset, 985f822962SNipun Gupta uint8_t size); 995f822962SNipun Gupta 100a5b375edSNipun Gupta /** 101a5b375edSNipun Gupta * @warning 102a5b375edSNipun Gupta * @b EXPERIMENTAL: this API may change, or be removed, without prior notice 103a5b375edSNipun Gupta * 104a5b375edSNipun Gupta * Do thread specific initialization 105a5b375edSNipun Gupta */ 106a5b375edSNipun Gupta __rte_experimental 107a5b375edSNipun Gupta void 108a5b375edSNipun Gupta rte_pmd_dpaa2_thread_init(void); 109a5b375edSNipun Gupta 1100b83e8b1SHemant Agrawal /** 1110b83e8b1SHemant Agrawal * @warning 1120b83e8b1SHemant Agrawal * @b EXPERIMENTAL: this API may change, or be removed, without prior notice 1130b83e8b1SHemant Agrawal * 1140b83e8b1SHemant Agrawal * Generate the DPAA2 WRIOP based hash value 1150b83e8b1SHemant Agrawal * 1160b83e8b1SHemant Agrawal * @param key 1170b83e8b1SHemant Agrawal * Array of key data 1180b83e8b1SHemant Agrawal * @param size 1190b83e8b1SHemant Agrawal * Size of the hash input key in bytes 1200b83e8b1SHemant Agrawal * 1210b83e8b1SHemant Agrawal * @return 1220b83e8b1SHemant Agrawal * - 0 if successful. 1230b83e8b1SHemant Agrawal * - Negative in case of failure. 1240b83e8b1SHemant Agrawal */ 1250b83e8b1SHemant Agrawal 1260b83e8b1SHemant Agrawal __rte_experimental 1270b83e8b1SHemant Agrawal uint32_t 1280b83e8b1SHemant Agrawal rte_pmd_dpaa2_get_tlu_hash(uint8_t *key, int size); 1292013e308SVanshika Shukla 13072cd5a48SJun Yang __rte_experimental 13172cd5a48SJun Yang int 13272cd5a48SJun Yang rte_pmd_dpaa2_dev_is_dpaa2(uint32_t eth_id); 133a0f8ddc4SJun Yang __rte_experimental 134a0f8ddc4SJun Yang const char * 135a0f8ddc4SJun Yang rte_pmd_dpaa2_ep_name(uint32_t eth_id); 13672cd5a48SJun Yang 1372013e308SVanshika Shukla #if defined(RTE_LIBRTE_IEEE1588) 1382013e308SVanshika Shukla __rte_experimental 1392013e308SVanshika Shukla int 1402013e308SVanshika Shukla rte_pmd_dpaa2_set_one_step_ts(uint16_t port_id, uint16_t offset, uint8_t ch_update); 1412013e308SVanshika Shukla 1422013e308SVanshika Shukla __rte_experimental 1432013e308SVanshika Shukla int 1442013e308SVanshika Shukla rte_pmd_dpaa2_get_one_step_ts(uint16_t port_id, bool mc_query); 1452013e308SVanshika Shukla #endif 146c1870f65SAkhil Goyal #endif /* _RTE_PMD_DPAA2_H */ 147