xref: /linux/drivers/net/ethernet/qualcomm/ppe/ppe_config.h (revision 07fdad3a93756b872da7b53647715c48d0f4a2d0)
18a971df9SLuo Jie /* SPDX-License-Identifier: GPL-2.0-only
28a971df9SLuo Jie  *
38a971df9SLuo Jie  * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
48a971df9SLuo Jie  */
58a971df9SLuo Jie 
68a971df9SLuo Jie #ifndef __PPE_CONFIG_H__
78a971df9SLuo Jie #define __PPE_CONFIG_H__
88a971df9SLuo Jie 
973d05bdaSLuo Jie #include <linux/types.h>
1073d05bdaSLuo Jie 
118a971df9SLuo Jie #include "ppe.h"
128a971df9SLuo Jie 
137a23a8afSLuo Jie /* There are different table index ranges for configuring queue base ID of
147a23a8afSLuo Jie  * the destination port, CPU code and service code.
157a23a8afSLuo Jie  */
167a23a8afSLuo Jie #define PPE_QUEUE_BASE_DEST_PORT		0
177a23a8afSLuo Jie #define PPE_QUEUE_BASE_CPU_CODE			1024
187a23a8afSLuo Jie #define PPE_QUEUE_BASE_SERVICE_CODE		2048
197a23a8afSLuo Jie 
207a23a8afSLuo Jie #define PPE_QUEUE_INTER_PRI_NUM			16
217a23a8afSLuo Jie #define PPE_QUEUE_HASH_NUM			256
227a23a8afSLuo Jie 
2373d05bdaSLuo Jie /* The service code is used by EDMA port to transmit packet to PPE. */
2473d05bdaSLuo Jie #define PPE_EDMA_SC_BYPASS_ID			1
2573d05bdaSLuo Jie 
261c46c3c0SLuo Jie /* The PPE RSS hash configured for IPv4 and IPv6 packet separately. */
271c46c3c0SLuo Jie #define PPE_RSS_HASH_MODE_IPV4			BIT(0)
281c46c3c0SLuo Jie #define PPE_RSS_HASH_MODE_IPV6			BIT(1)
291c46c3c0SLuo Jie #define PPE_RSS_HASH_IP_LENGTH			4
301c46c3c0SLuo Jie #define PPE_RSS_HASH_TUPLES			5
311c46c3c0SLuo Jie 
32*fa99608aSLuo Jie /* PPE supports 300 queues, each bit presents as one queue. */
33*fa99608aSLuo Jie #define PPE_RING_TO_QUEUE_BITMAP_WORD_CNT	10
34*fa99608aSLuo Jie 
3533122798SLuo Jie /**
3633122798SLuo Jie  * enum ppe_scheduler_frame_mode - PPE scheduler frame mode.
3733122798SLuo Jie  * @PPE_SCH_WITH_IPG_PREAMBLE_FRAME_CRC: The scheduled frame includes IPG,
3833122798SLuo Jie  * preamble, Ethernet packet and CRC.
3933122798SLuo Jie  * @PPE_SCH_WITH_FRAME_CRC: The scheduled frame includes Ethernet frame and CRC
4033122798SLuo Jie  * excluding IPG and preamble.
4133122798SLuo Jie  * @PPE_SCH_WITH_L3_PAYLOAD: The scheduled frame includes layer 3 packet data.
4233122798SLuo Jie  */
4333122798SLuo Jie enum ppe_scheduler_frame_mode {
4433122798SLuo Jie 	PPE_SCH_WITH_IPG_PREAMBLE_FRAME_CRC = 0,
4533122798SLuo Jie 	PPE_SCH_WITH_FRAME_CRC = 1,
4633122798SLuo Jie 	PPE_SCH_WITH_L3_PAYLOAD = 2,
4733122798SLuo Jie };
4833122798SLuo Jie 
4933122798SLuo Jie /**
5033122798SLuo Jie  * struct ppe_scheduler_cfg - PPE scheduler configuration.
5133122798SLuo Jie  * @flow_id: PPE flow ID.
5233122798SLuo Jie  * @pri: Scheduler priority.
5333122798SLuo Jie  * @drr_node_id: Node ID for scheduled traffic.
5433122798SLuo Jie  * @drr_node_wt: Weight for scheduled traffic.
5533122798SLuo Jie  * @unit_is_packet: Packet based or byte based unit for scheduled traffic.
5633122798SLuo Jie  * @frame_mode: Packet mode to be scheduled.
5733122798SLuo Jie  *
5833122798SLuo Jie  * PPE scheduler supports commit rate and exceed rate configurations.
5933122798SLuo Jie  */
6033122798SLuo Jie struct ppe_scheduler_cfg {
6133122798SLuo Jie 	int flow_id;
6233122798SLuo Jie 	int pri;
6333122798SLuo Jie 	int drr_node_id;
6433122798SLuo Jie 	int drr_node_wt;
6533122798SLuo Jie 	bool unit_is_packet;
6633122798SLuo Jie 	enum ppe_scheduler_frame_mode frame_mode;
6733122798SLuo Jie };
6833122798SLuo Jie 
697a23a8afSLuo Jie /**
707a23a8afSLuo Jie  * enum ppe_resource_type - PPE resource type.
717a23a8afSLuo Jie  * @PPE_RES_UCAST: Unicast queue resource.
727a23a8afSLuo Jie  * @PPE_RES_MCAST: Multicast queue resource.
737a23a8afSLuo Jie  * @PPE_RES_L0_NODE: Level 0 for queue based node resource.
747a23a8afSLuo Jie  * @PPE_RES_L1_NODE: Level 1 for flow based node resource.
757a23a8afSLuo Jie  * @PPE_RES_FLOW_ID: Flow based node resource.
767a23a8afSLuo Jie  */
777a23a8afSLuo Jie enum ppe_resource_type {
787a23a8afSLuo Jie 	PPE_RES_UCAST,
797a23a8afSLuo Jie 	PPE_RES_MCAST,
807a23a8afSLuo Jie 	PPE_RES_L0_NODE,
817a23a8afSLuo Jie 	PPE_RES_L1_NODE,
827a23a8afSLuo Jie 	PPE_RES_FLOW_ID,
837a23a8afSLuo Jie };
847a23a8afSLuo Jie 
857a23a8afSLuo Jie /**
867a23a8afSLuo Jie  * struct ppe_queue_ucast_dest - PPE unicast queue destination.
877a23a8afSLuo Jie  * @src_profile: Source profile.
887a23a8afSLuo Jie  * @service_code_en: Enable service code to map the queue base ID.
897a23a8afSLuo Jie  * @service_code: Service code.
907a23a8afSLuo Jie  * @cpu_code_en: Enable CPU code to map the queue base ID.
917a23a8afSLuo Jie  * @cpu_code: CPU code.
927a23a8afSLuo Jie  * @dest_port: destination port.
937a23a8afSLuo Jie  *
947a23a8afSLuo Jie  * PPE egress queue ID is decided by the service code if enabled, otherwise
957a23a8afSLuo Jie  * by the CPU code if enabled, or by destination port if both service code
967a23a8afSLuo Jie  * and CPU code are disabled.
977a23a8afSLuo Jie  */
987a23a8afSLuo Jie struct ppe_queue_ucast_dest {
997a23a8afSLuo Jie 	int src_profile;
1007a23a8afSLuo Jie 	bool service_code_en;
1017a23a8afSLuo Jie 	int service_code;
1027a23a8afSLuo Jie 	bool cpu_code_en;
1037a23a8afSLuo Jie 	int cpu_code;
1047a23a8afSLuo Jie 	int dest_port;
1057a23a8afSLuo Jie };
1067a23a8afSLuo Jie 
10773d05bdaSLuo Jie /* Hardware bitmaps for bypassing features of the ingress packet. */
10873d05bdaSLuo Jie enum ppe_sc_ingress_type {
10973d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_VLAN_TAG_FMT_CHECK = 0,
11073d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_VLAN_MEMBER_CHECK = 1,
11173d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_VLAN_TRANSLATE = 2,
11273d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_MY_MAC_CHECK = 3,
11373d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_DIP_LOOKUP = 4,
11473d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_FLOW_LOOKUP = 5,
11573d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_FLOW_ACTION = 6,
11673d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_ACL = 7,
11773d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_FAKE_MAC_HEADER = 8,
11873d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_SERVICE_CODE = 9,
11973d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_WRONG_PKT_FMT_L2 = 10,
12073d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_WRONG_PKT_FMT_L3_IPV4 = 11,
12173d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_WRONG_PKT_FMT_L3_IPV6 = 12,
12273d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_WRONG_PKT_FMT_L4 = 13,
12373d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_FLOW_SERVICE_CODE = 14,
12473d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_ACL_SERVICE_CODE = 15,
12573d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_FAKE_L2_PROTO = 16,
12673d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_PPPOE_TERMINATION = 17,
12773d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_DEFAULT_VLAN = 18,
12873d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_DEFAULT_PCP = 19,
12973d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_VSI_ASSIGN = 20,
13073d05bdaSLuo Jie 	/* Values 21-23 are not specified by hardware. */
13173d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_VLAN_ASSIGN_FAIL = 24,
13273d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_SOURCE_GUARD = 25,
13373d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_MRU_MTU_CHECK = 26,
13473d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_FLOW_SRC_CHECK = 27,
13573d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_FLOW_QOS = 28,
13673d05bdaSLuo Jie 	/* This must be last as it determines the size of the BITMAP. */
13773d05bdaSLuo Jie 	PPE_SC_BYPASS_INGRESS_SIZE,
13873d05bdaSLuo Jie };
13973d05bdaSLuo Jie 
14073d05bdaSLuo Jie /* Hardware bitmaps for bypassing features of the egress packet. */
14173d05bdaSLuo Jie enum ppe_sc_egress_type {
14273d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_VLAN_MEMBER_CHECK = 0,
14373d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_VLAN_TRANSLATE = 1,
14473d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_VLAN_TAG_FMT_CTRL = 2,
14573d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_FDB_LEARN = 3,
14673d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_FDB_REFRESH = 4,
14773d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_L2_SOURCE_SECURITY = 5,
14873d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_MANAGEMENT_FWD = 6,
14973d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_BRIDGING_FWD = 7,
15073d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_IN_STP_FLTR = 8,
15173d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_EG_STP_FLTR = 9,
15273d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_SOURCE_FLTR = 10,
15373d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_POLICER = 11,
15473d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_L2_PKT_EDIT = 12,
15573d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_L3_PKT_EDIT = 13,
15673d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_ACL_POST_ROUTING_CHECK = 14,
15773d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_PORT_ISOLATION = 15,
15873d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_PRE_ACL_QOS = 16,
15973d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_POST_ACL_QOS = 17,
16073d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_DSCP_QOS = 18,
16173d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_PCP_QOS = 19,
16273d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_PREHEADER_QOS = 20,
16373d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_FAKE_MAC_DROP = 21,
16473d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_TUNL_CONTEXT = 22,
16573d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_FLOW_POLICER = 23,
16673d05bdaSLuo Jie 	/* This must be last as it determines the size of the BITMAP. */
16773d05bdaSLuo Jie 	PPE_SC_BYPASS_EGRESS_SIZE,
16873d05bdaSLuo Jie };
16973d05bdaSLuo Jie 
17073d05bdaSLuo Jie /* Hardware bitmaps for bypassing counter of packet. */
17173d05bdaSLuo Jie enum ppe_sc_counter_type {
17273d05bdaSLuo Jie 	PPE_SC_BYPASS_COUNTER_RX_VLAN = 0,
17373d05bdaSLuo Jie 	PPE_SC_BYPASS_COUNTER_RX = 1,
17473d05bdaSLuo Jie 	PPE_SC_BYPASS_COUNTER_TX_VLAN = 2,
17573d05bdaSLuo Jie 	PPE_SC_BYPASS_COUNTER_TX = 3,
17673d05bdaSLuo Jie 	/* This must be last as it determines the size of the BITMAP. */
17773d05bdaSLuo Jie 	PPE_SC_BYPASS_COUNTER_SIZE,
17873d05bdaSLuo Jie };
17973d05bdaSLuo Jie 
18073d05bdaSLuo Jie /* Hardware bitmaps for bypassing features of tunnel packet. */
18173d05bdaSLuo Jie enum ppe_sc_tunnel_type {
18273d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_SERVICE_CODE = 0,
18373d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_TUNNEL_HANDLE = 1,
18473d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_L3_IF_CHECK = 2,
18573d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_VLAN_CHECK = 3,
18673d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_DMAC_CHECK = 4,
18773d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_UDP_CSUM_0_CHECK = 5,
18873d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_TBL_DE_ACCE_CHECK = 6,
18973d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_PPPOE_MC_TERM_CHECK = 7,
19073d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_TTL_EXCEED_CHECK = 8,
19173d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_MAP_SRC_CHECK = 9,
19273d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_MAP_DST_CHECK = 10,
19373d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_LPM_DST_LOOKUP = 11,
19473d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_LPM_LOOKUP = 12,
19573d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_WRONG_PKT_FMT_L2 = 13,
19673d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_WRONG_PKT_FMT_L3_IPV4 = 14,
19773d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_WRONG_PKT_FMT_L3_IPV6 = 15,
19873d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_WRONG_PKT_FMT_L4 = 16,
19973d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_WRONG_PKT_FMT_TUNNEL = 17,
20073d05bdaSLuo Jie 	/* Values 18-19 are not specified by hardware. */
20173d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_PRE_IPO = 20,
20273d05bdaSLuo Jie 	/* This must be last as it determines the size of the BITMAP. */
20373d05bdaSLuo Jie 	PPE_SC_BYPASS_TUNNEL_SIZE,
20473d05bdaSLuo Jie };
20573d05bdaSLuo Jie 
20673d05bdaSLuo Jie /**
20773d05bdaSLuo Jie  * struct ppe_sc_bypass - PPE service bypass bitmaps
20873d05bdaSLuo Jie  * @ingress: Bitmap of features that can be bypassed on the ingress packet.
20973d05bdaSLuo Jie  * @egress: Bitmap of features that can be bypassed on the egress packet.
21073d05bdaSLuo Jie  * @counter: Bitmap of features that can be bypassed on the counter type.
21173d05bdaSLuo Jie  * @tunnel: Bitmap of features that can be bypassed on the tunnel packet.
21273d05bdaSLuo Jie  */
21373d05bdaSLuo Jie struct ppe_sc_bypass {
21473d05bdaSLuo Jie 	DECLARE_BITMAP(ingress, PPE_SC_BYPASS_INGRESS_SIZE);
21573d05bdaSLuo Jie 	DECLARE_BITMAP(egress, PPE_SC_BYPASS_EGRESS_SIZE);
21673d05bdaSLuo Jie 	DECLARE_BITMAP(counter, PPE_SC_BYPASS_COUNTER_SIZE);
21773d05bdaSLuo Jie 	DECLARE_BITMAP(tunnel, PPE_SC_BYPASS_TUNNEL_SIZE);
21873d05bdaSLuo Jie };
21973d05bdaSLuo Jie 
22073d05bdaSLuo Jie /**
22173d05bdaSLuo Jie  * struct ppe_sc_cfg - PPE service code configuration.
22273d05bdaSLuo Jie  * @dest_port_valid: Generate destination port or not.
22373d05bdaSLuo Jie  * @dest_port: Destination port ID.
22473d05bdaSLuo Jie  * @bitmaps: Bitmap of bypass features.
22573d05bdaSLuo Jie  * @is_src: Destination port acts as source port, packet sent to CPU.
22673d05bdaSLuo Jie  * @next_service_code: New service code generated.
22773d05bdaSLuo Jie  * @eip_field_update_bitmap: Fields updated as actions taken for EIP.
22873d05bdaSLuo Jie  * @eip_hw_service: Selected hardware functions for EIP.
22973d05bdaSLuo Jie  * @eip_offset_sel: Packet offset selection, using packet's layer 4 offset
23073d05bdaSLuo Jie  * or using packet's layer 3 offset for EIP.
23173d05bdaSLuo Jie  *
23273d05bdaSLuo Jie  * Service code is generated during the packet passing through PPE.
23373d05bdaSLuo Jie  */
23473d05bdaSLuo Jie struct ppe_sc_cfg {
23573d05bdaSLuo Jie 	bool dest_port_valid;
23673d05bdaSLuo Jie 	int dest_port;
23773d05bdaSLuo Jie 	struct ppe_sc_bypass bitmaps;
23873d05bdaSLuo Jie 	bool is_src;
23973d05bdaSLuo Jie 	int next_service_code;
24073d05bdaSLuo Jie 	int eip_field_update_bitmap;
24173d05bdaSLuo Jie 	int eip_hw_service;
24273d05bdaSLuo Jie 	int eip_offset_sel;
24373d05bdaSLuo Jie };
24473d05bdaSLuo Jie 
2458821bb0fSLuo Jie /**
2468821bb0fSLuo Jie  * enum ppe_action_type - PPE action of the received packet.
2478821bb0fSLuo Jie  * @PPE_ACTION_FORWARD: Packet forwarded per L2/L3 process.
2488821bb0fSLuo Jie  * @PPE_ACTION_DROP: Packet dropped by PPE.
2498821bb0fSLuo Jie  * @PPE_ACTION_COPY_TO_CPU: Packet copied to CPU port per multicast queue.
2508821bb0fSLuo Jie  * @PPE_ACTION_REDIRECT_TO_CPU: Packet redirected to CPU port per unicast queue.
2518821bb0fSLuo Jie  */
2528821bb0fSLuo Jie enum ppe_action_type {
2538821bb0fSLuo Jie 	PPE_ACTION_FORWARD = 0,
2548821bb0fSLuo Jie 	PPE_ACTION_DROP = 1,
2558821bb0fSLuo Jie 	PPE_ACTION_COPY_TO_CPU = 2,
2568821bb0fSLuo Jie 	PPE_ACTION_REDIRECT_TO_CPU = 3,
2578821bb0fSLuo Jie };
2588821bb0fSLuo Jie 
2591c46c3c0SLuo Jie /**
2601c46c3c0SLuo Jie  * struct ppe_rss_hash_cfg - PPE RSS hash configuration.
2611c46c3c0SLuo Jie  * @hash_mask: Mask of the generated hash value.
2621c46c3c0SLuo Jie  * @hash_fragment_mode: Hash generation mode for the first fragment of TCP,
2631c46c3c0SLuo Jie  * UDP and UDP-Lite packets, to use either 3 tuple or 5 tuple for RSS hash
2641c46c3c0SLuo Jie  * key computation.
2651c46c3c0SLuo Jie  * @hash_seed: Seed to generate RSS hash.
2661c46c3c0SLuo Jie  * @hash_sip_mix: Source IP selection.
2671c46c3c0SLuo Jie  * @hash_dip_mix: Destination IP selection.
2681c46c3c0SLuo Jie  * @hash_protocol_mix: Protocol selection.
2691c46c3c0SLuo Jie  * @hash_sport_mix: Source L4 port selection.
2701c46c3c0SLuo Jie  * @hash_dport_mix: Destination L4 port selection.
2711c46c3c0SLuo Jie  * @hash_fin_inner: RSS hash value first selection.
2721c46c3c0SLuo Jie  * @hash_fin_outer: RSS hash value second selection.
2731c46c3c0SLuo Jie  *
2741c46c3c0SLuo Jie  * PPE RSS hash value is generated for the packet based on the RSS hash
2751c46c3c0SLuo Jie  * configured.
2761c46c3c0SLuo Jie  */
2771c46c3c0SLuo Jie struct ppe_rss_hash_cfg {
2781c46c3c0SLuo Jie 	u32 hash_mask;
2791c46c3c0SLuo Jie 	bool hash_fragment_mode;
2801c46c3c0SLuo Jie 	u32 hash_seed;
2811c46c3c0SLuo Jie 	u8 hash_sip_mix[PPE_RSS_HASH_IP_LENGTH];
2821c46c3c0SLuo Jie 	u8 hash_dip_mix[PPE_RSS_HASH_IP_LENGTH];
2831c46c3c0SLuo Jie 	u8 hash_protocol_mix;
2841c46c3c0SLuo Jie 	u8 hash_sport_mix;
2851c46c3c0SLuo Jie 	u8 hash_dport_mix;
2861c46c3c0SLuo Jie 	u8 hash_fin_inner[PPE_RSS_HASH_TUPLES];
2871c46c3c0SLuo Jie 	u8 hash_fin_outer[PPE_RSS_HASH_TUPLES];
2881c46c3c0SLuo Jie };
2891c46c3c0SLuo Jie 
2908a971df9SLuo Jie int ppe_hw_config(struct ppe_device *ppe_dev);
29133122798SLuo Jie int ppe_queue_scheduler_set(struct ppe_device *ppe_dev,
29233122798SLuo Jie 			    int node_id, bool flow_level, int port,
29333122798SLuo Jie 			    struct ppe_scheduler_cfg scheduler_cfg);
2947a23a8afSLuo Jie int ppe_queue_ucast_base_set(struct ppe_device *ppe_dev,
2957a23a8afSLuo Jie 			     struct ppe_queue_ucast_dest queue_dst,
2967a23a8afSLuo Jie 			     int queue_base,
2977a23a8afSLuo Jie 			     int profile_id);
2987a23a8afSLuo Jie int ppe_queue_ucast_offset_pri_set(struct ppe_device *ppe_dev,
2997a23a8afSLuo Jie 				   int profile_id,
3007a23a8afSLuo Jie 				   int priority,
3017a23a8afSLuo Jie 				   int queue_offset);
3027a23a8afSLuo Jie int ppe_queue_ucast_offset_hash_set(struct ppe_device *ppe_dev,
3037a23a8afSLuo Jie 				    int profile_id,
3047a23a8afSLuo Jie 				    int rss_hash,
3057a23a8afSLuo Jie 				    int queue_offset);
3067a23a8afSLuo Jie int ppe_port_resource_get(struct ppe_device *ppe_dev, int port,
3077a23a8afSLuo Jie 			  enum ppe_resource_type type,
3087a23a8afSLuo Jie 			  int *res_start, int *res_end);
30973d05bdaSLuo Jie int ppe_sc_config_set(struct ppe_device *ppe_dev, int sc,
31073d05bdaSLuo Jie 		      struct ppe_sc_cfg cfg);
3118821bb0fSLuo Jie int ppe_counter_enable_set(struct ppe_device *ppe_dev, int port);
3121c46c3c0SLuo Jie int ppe_rss_hash_config_set(struct ppe_device *ppe_dev, int mode,
3131c46c3c0SLuo Jie 			    struct ppe_rss_hash_cfg hash_cfg);
314*fa99608aSLuo Jie int ppe_ring_queue_map_set(struct ppe_device *ppe_dev,
315*fa99608aSLuo Jie 			   int ring_id,
316*fa99608aSLuo Jie 			   u32 *queue_map);
3178a971df9SLuo Jie #endif
318