xref: /dpdk/drivers/net/intel/cpfl/cpfl_rules.h (revision c1d145834f287aa8cf53de914618a7312f2c360e)
1*c1d14583SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
2*c1d14583SBruce Richardson  * Copyright(c) 2001-2023 Intel Corporation
3*c1d14583SBruce Richardson  */
4*c1d14583SBruce Richardson 
5*c1d14583SBruce Richardson #ifndef _CPFL_RULES_API_H_
6*c1d14583SBruce Richardson #define _CPFL_RULES_API_H_
7*c1d14583SBruce Richardson 
8*c1d14583SBruce Richardson #include <base/idpf_controlq_api.h>
9*c1d14583SBruce Richardson #include "cpfl_actions.h"
10*c1d14583SBruce Richardson #include "cpfl_controlq.h"
11*c1d14583SBruce Richardson 
12*c1d14583SBruce Richardson /* Common Bit Mask Macros */
13*c1d14583SBruce Richardson #define CPFL_BIT(b)			(1 << (b))
14*c1d14583SBruce Richardson 
15*c1d14583SBruce Richardson #define MAKE_MASK(type, mask, shift)	((u##type) (mask) << (shift))
16*c1d14583SBruce Richardson #define SHIFT_VAL_LT(type, val, field)		\
17*c1d14583SBruce Richardson 		(((u##type)(val) << field##_S) & field##_M)
18*c1d14583SBruce Richardson #define SHIFT_VAL_RT(type, val, field)		\
19*c1d14583SBruce Richardson 		(((u##type)(val) & field##_M) >> field##_S)
20*c1d14583SBruce Richardson 
21*c1d14583SBruce Richardson #define MAKE_MASK_VAL(type, bit_len)	(((u##type)0x01 << (bit_len)) - 1)
22*c1d14583SBruce Richardson #define MAKE_MASK_VAL16(bit_len)	MAKE_MASK_VAL(16, bit_len)
23*c1d14583SBruce Richardson #define MAKE_MASK_VAL64(bit_len)	MAKE_MASK_VAL(64, bit_len)
24*c1d14583SBruce Richardson 
25*c1d14583SBruce Richardson #define MAKE_MASK64(mask, shift)	MAKE_MASK(64, mask, shift)
26*c1d14583SBruce Richardson #define MAKE_MASK16(mask, shift)	MAKE_MASK(16, mask, shift)
27*c1d14583SBruce Richardson #define MAKE_MASK32(mask, shift)	MAKE_MASK(32, mask, shift)
28*c1d14583SBruce Richardson 
29*c1d14583SBruce Richardson /* Make masks with bit length and left-shifting count */
30*c1d14583SBruce Richardson #define MAKE_SMASK(type, bits, shift)	\
31*c1d14583SBruce Richardson 	((((u##type)1 << (bits)) - 1) << (shift))
32*c1d14583SBruce Richardson #define MAKE_SMASK64(bits, shift)	MAKE_SMASK(64, bits, shift)
33*c1d14583SBruce Richardson #define MAKE_SMASK32(bits, shift)	MAKE_SMASK(32, bits, shift)
34*c1d14583SBruce Richardson #define MAKE_SMASK16(bits, shift)	MAKE_SMASK(16, bits, shift)
35*c1d14583SBruce Richardson 
36*c1d14583SBruce Richardson #define SHIFT_VAL64(val, field)		SHIFT_VAL_LT(64, val, field)
37*c1d14583SBruce Richardson #define SHIFT_VAL32(val, field)		SHIFT_VAL_LT(32, val, field)
38*c1d14583SBruce Richardson #define SHIFT_VAL16(val, field)		SHIFT_VAL_LT(16, val, field)
39*c1d14583SBruce Richardson 
40*c1d14583SBruce Richardson /* Rule Config queue opcodes */
41*c1d14583SBruce Richardson enum cpfl_ctlq_rule_cfg_opc {
42*c1d14583SBruce Richardson 	cpfl_ctlq_sem_add_rule				= 0x1303,
43*c1d14583SBruce Richardson 	cpfl_ctlq_sem_update_rule			= 0x1304,
44*c1d14583SBruce Richardson 	cpfl_ctlq_sem_del_rule				= 0x1305,
45*c1d14583SBruce Richardson 	cpfl_ctlq_sem_query_rule			= 0x1306,
46*c1d14583SBruce Richardson 	cpfl_ctlq_sem_query_rule_hash_addr		= 0x1307,
47*c1d14583SBruce Richardson 	cpfl_ctlq_sem_query_del_rule_hash_addr		= 0x1308,
48*c1d14583SBruce Richardson 
49*c1d14583SBruce Richardson 	cpfl_ctlq_mod_add_update_rule			= 0x1360,
50*c1d14583SBruce Richardson 	cpfl_ctlq_mod_query_rule			= 0x1361,
51*c1d14583SBruce Richardson };
52*c1d14583SBruce Richardson 
53*c1d14583SBruce Richardson enum cpfl_cfg_pkt_error_code {
54*c1d14583SBruce Richardson 	CPFL_CFG_PKT_ERR_OK = 0,
55*c1d14583SBruce Richardson 	CPFL_CFG_PKT_ERR_ESRCH = 1,     /* Bad opcode */
56*c1d14583SBruce Richardson 	CPFL_CFG_PKT_ERR_EEXIST = 2,    /* Entry Already exists */
57*c1d14583SBruce Richardson 	CPFL_CFG_PKT_ERR_ENOSPC = 4,    /* No space left in the table*/
58*c1d14583SBruce Richardson 	CPFL_CFG_PKT_ERR_ERANGE = 5,    /* Parameter out of range */
59*c1d14583SBruce Richardson 	CPFL_CFG_PKT_ERR_ESBCOMP = 6,   /* Completion Error */
60*c1d14583SBruce Richardson 	CPFL_CFG_PKT_ERR_ENOPIN = 7,    /* Entry cannot be pinned in cache */
61*c1d14583SBruce Richardson 	CPFL_CFG_PKT_ERR_ENOTFND = 8,   /* Entry Not exists */
62*c1d14583SBruce Richardson 	CPFL_CFG_PKT_ERR_EMAXCOL = 9    /* Max Hash Collision */
63*c1d14583SBruce Richardson };
64*c1d14583SBruce Richardson 
65*c1d14583SBruce Richardson static const char * const cpfl_cfg_pkt_errormsg[] = {
66*c1d14583SBruce Richardson 	[CPFL_CFG_PKT_ERR_ESRCH] = "Bad opcode",
67*c1d14583SBruce Richardson 	[CPFL_CFG_PKT_ERR_EEXIST] = "The rule conflicts with already existed one",
68*c1d14583SBruce Richardson 	[CPFL_CFG_PKT_ERR_ENOSPC] = "No space left in the table",
69*c1d14583SBruce Richardson 	[CPFL_CFG_PKT_ERR_ERANGE] = "Parameter out of range",
70*c1d14583SBruce Richardson 	[CPFL_CFG_PKT_ERR_ESBCOMP] = "Completion error",
71*c1d14583SBruce Richardson 	[CPFL_CFG_PKT_ERR_ENOPIN] = "Entry cannot be pinned in cache",
72*c1d14583SBruce Richardson 	[CPFL_CFG_PKT_ERR_ENOTFND] = "Entry does not exist",
73*c1d14583SBruce Richardson 	[CPFL_CFG_PKT_ERR_EMAXCOL] = "Maximum Hash Collisions reached",
74*c1d14583SBruce Richardson };
75*c1d14583SBruce Richardson 
76*c1d14583SBruce Richardson /* macros for creating context for rule descriptor */
77*c1d14583SBruce Richardson #define MEV_RULE_VSI_ID_S		0
78*c1d14583SBruce Richardson #define MEV_RULE_VSI_ID_M		\
79*c1d14583SBruce Richardson 		MAKE_MASK64(0x7FF, MEV_RULE_VSI_ID_S)
80*c1d14583SBruce Richardson 
81*c1d14583SBruce Richardson #define MEV_RULE_TIME_SEL_S		13
82*c1d14583SBruce Richardson #define MEV_RULE_TIME_SEL_M		\
83*c1d14583SBruce Richardson 		MAKE_MASK64(0x3, MEV_RULE_TIME_SEL_S)
84*c1d14583SBruce Richardson 
85*c1d14583SBruce Richardson #define MEV_RULE_TIME_SEL_VAL_S		15
86*c1d14583SBruce Richardson #define MEV_RULE_TIME_SEL_VAL_M		\
87*c1d14583SBruce Richardson 		MAKE_MASK64(0x1, MEV_RULE_TIME_SEL_VAL_S)
88*c1d14583SBruce Richardson 
89*c1d14583SBruce Richardson #define MEV_RULE_PORT_NUM_S		16
90*c1d14583SBruce Richardson #define MEV_RULE_HOST_ID_S		18
91*c1d14583SBruce Richardson #define MEV_RULE_PORT_NUM_M		\
92*c1d14583SBruce Richardson 		MAKE_MASK64(0x3, MEV_RULE_PORT_NUM_S)
93*c1d14583SBruce Richardson #define MEV_RULE_HOST_ID_M		\
94*c1d14583SBruce Richardson 		MAKE_MASK64(0x7, MEV_RULE_HOST_ID_S)
95*c1d14583SBruce Richardson 
96*c1d14583SBruce Richardson #define MEV_RULE_CACHE_WR_THRU_S	21
97*c1d14583SBruce Richardson #define MEV_RULE_CACHE_WR_THRU_M	\
98*c1d14583SBruce Richardson 		MAKE_MASK64(0x1, MEV_RULE_CACHE_WR_THRU_S)
99*c1d14583SBruce Richardson 
100*c1d14583SBruce Richardson #define MEV_RULE_RESP_REQ_S		22
101*c1d14583SBruce Richardson #define MEV_RULE_RESP_REQ_M		\
102*c1d14583SBruce Richardson 		MAKE_MASK64(0x3, MEV_RULE_RESP_REQ_S)
103*c1d14583SBruce Richardson #define MEV_RULE_OBJ_ADDR_S		24
104*c1d14583SBruce Richardson #define MEV_RULE_OBJ_ADDR_M		\
105*c1d14583SBruce Richardson 		MAKE_MASK64(0x7FFFFFF, MEV_RULE_OBJ_ADDR_S)
106*c1d14583SBruce Richardson #define MEV_RULE_OBJ_ID_S		59
107*c1d14583SBruce Richardson #define MEV_RULE_OBJ_ID_M		\
108*c1d14583SBruce Richardson 		MAKE_MASK64((uint64_t)0x3, MEV_RULE_OBJ_ID_S)
109*c1d14583SBruce Richardson 
110*c1d14583SBruce Richardson /* macros for creating CFG_CTRL for sem/lem rule blob */
111*c1d14583SBruce Richardson #define MEV_RULE_CFG_CTRL_PROF_ID_S			0
112*c1d14583SBruce Richardson #define MEV_RULE_CFG_CTRL_PROF_ID_M			\
113*c1d14583SBruce Richardson 		MAKE_MASK16(0x7FF, MEV_RULE_CFG_CTRL_PROF_ID_S)
114*c1d14583SBruce Richardson 
115*c1d14583SBruce Richardson #define MEV_RULE_CFG_CTRL_SUB_PROF_ID_S		11
116*c1d14583SBruce Richardson #define MEV_RULE_CFG_CTRL_SUB_PROF_ID_M		\
117*c1d14583SBruce Richardson 		MAKE_MASK16(0x3, MEV_RULE_CFG_CTRL_SUB_PROF_ID_S)
118*c1d14583SBruce Richardson #define MEV_RULE_CFG_CTRL_PIN_CACHE_S		13
119*c1d14583SBruce Richardson #define MEV_RULE_CFG_CTRL_PIN_CACHE_M		\
120*c1d14583SBruce Richardson 		MAKE_MASK16(0x1, MEV_RULE_CFG_CTRL_PIN_CACHE_S)
121*c1d14583SBruce Richardson #define MEV_RULE_CFG_CTRL_CLEAR_MIRROR_S	14
122*c1d14583SBruce Richardson #define MEV_RULE_CFG_CTRL_CLEAR_MIRROR_M	\
123*c1d14583SBruce Richardson 		MAKE_MASK16(0x1, MEV_RULE_CFG_CTRL_CLEAR_MIRROR_S)
124*c1d14583SBruce Richardson #define MEV_RULE_CFG_CTRL_FIXED_FETCH_S		15
125*c1d14583SBruce Richardson #define MEV_RULE_CFG_CTRL_FIXED_FETCH_M		\
126*c1d14583SBruce Richardson 		MAKE_MASK16(0x1, MEV_RULE_CFG_CTRL_FIXED_FETCH_S)
127*c1d14583SBruce Richardson 
128*c1d14583SBruce Richardson /**
129*c1d14583SBruce Richardson  * macro to build the CFG_CTRL for rule packet data, which is one of
130*c1d14583SBruce Richardson  * cpfl_prep_sem_rule_blob()'s input parameter.
131*c1d14583SBruce Richardson  */
132*c1d14583SBruce Richardson  /* build SEM CFG_CTRL*/
133*c1d14583SBruce Richardson #define CPFL_GET_MEV_SEM_RULE_CFG_CTRL(prof_id, sub_prof_id,		       \
134*c1d14583SBruce Richardson 				       pin_to_cache, fixed_fetch)	       \
135*c1d14583SBruce Richardson 		(SHIFT_VAL16((prof_id), MEV_RULE_CFG_CTRL_PROF_ID)	     | \
136*c1d14583SBruce Richardson 		 SHIFT_VAL16((sub_prof_id), MEV_RULE_CFG_CTRL_SUB_PROF_ID)   | \
137*c1d14583SBruce Richardson 		 SHIFT_VAL16((pin_to_cache), MEV_RULE_CFG_CTRL_PIN_CACHE)    | \
138*c1d14583SBruce Richardson 		 SHIFT_VAL16((fixed_fetch), MEV_RULE_CFG_CTRL_FIXED_FETCH))
139*c1d14583SBruce Richardson 
140*c1d14583SBruce Richardson /* build LEM CFG_CTRL*/
141*c1d14583SBruce Richardson #define CPFL_GET_MEV_LEM_RULE_CFG_CTRL(prof_id, pin_to_cache, clear_mirror)    \
142*c1d14583SBruce Richardson 		(SHIFT_VAL16(prof_id, MEV_RULE_CFG_CTRL_PROF_ID)             | \
143*c1d14583SBruce Richardson 		 SHIFT_VAL16(pin_to_cache, MEV_RULE_CFG_CTRL_PIN_CACHE)      | \
144*c1d14583SBruce Richardson 		 SHIFT_VAL16(clear_mirror, MEV_RULE_CFG_CTRL_CLEAR_MIRROR))
145*c1d14583SBruce Richardson 
146*c1d14583SBruce Richardson /* macros for creating mod content config packets */
147*c1d14583SBruce Richardson #define MEV_RULE_MOD_INDEX_S		24
148*c1d14583SBruce Richardson #define MEV_RULE_MOD_INDEX_M		\
149*c1d14583SBruce Richardson 		MAKE_MASK64(0xFFFFFFFF, MEV_RULE_MOD_INDEX_S)
150*c1d14583SBruce Richardson 
151*c1d14583SBruce Richardson #define MEV_RULE_PIN_MOD_CONTENT_S	62
152*c1d14583SBruce Richardson #define MEV_RULE_PIN_MOD_CONTENT_M	\
153*c1d14583SBruce Richardson 		MAKE_MASK64((uint64_t)0x1, MEV_RULE_PIN_MOD_CONTENT_S)
154*c1d14583SBruce Richardson #define MEV_RULE_MOD_OBJ_SIZE_S		63
155*c1d14583SBruce Richardson #define MEV_RULE_MOD_OBJ_SIZE_M		\
156*c1d14583SBruce Richardson 		MAKE_MASK64((uint64_t)0x1, MEV_RULE_MOD_OBJ_SIZE_S)
157*c1d14583SBruce Richardson 
158*c1d14583SBruce Richardson /**
159*c1d14583SBruce Richardson  * struct cpfl_sem_rule_cfg_pkt - Describes rule information for SEM
160*c1d14583SBruce Richardson  * note: The key may be in mixed big/little endian format, the rest of members
161*c1d14583SBruce Richardson  * are in little endian
162*c1d14583SBruce Richardson  */
163*c1d14583SBruce Richardson struct cpfl_sem_rule_cfg_pkt {
164*c1d14583SBruce Richardson #define MEV_SEM_RULE_KEY_SIZE 128
165*c1d14583SBruce Richardson 	uint8_t key[MEV_SEM_RULE_KEY_SIZE];
166*c1d14583SBruce Richardson 
167*c1d14583SBruce Richardson #define MEV_SEM_RULE_ACT_SIZE 72
168*c1d14583SBruce Richardson 	uint8_t actions[MEV_SEM_RULE_ACT_SIZE];
169*c1d14583SBruce Richardson 
170*c1d14583SBruce Richardson 	/* Bit(s):
171*c1d14583SBruce Richardson 	 * 10:0 : PROFILE_ID
172*c1d14583SBruce Richardson 	 * 12:11: SUB_PROF_ID (used for SEM only)
173*c1d14583SBruce Richardson 	 * 13   : pin the SEM key content into the cache
174*c1d14583SBruce Richardson 	 * 14   : Reserved
175*c1d14583SBruce Richardson 	 * 15   : Fixed_fetch
176*c1d14583SBruce Richardson 	 */
177*c1d14583SBruce Richardson 	uint8_t cfg_ctrl[2];
178*c1d14583SBruce Richardson 
179*c1d14583SBruce Richardson 	/* Bit(s):
180*c1d14583SBruce Richardson 	 * 0:     valid
181*c1d14583SBruce Richardson 	 * 15:1:  Hints
182*c1d14583SBruce Richardson 	 * 26:16: PROFILE_ID, the profile associated with the entry
183*c1d14583SBruce Richardson 	 * 31:27: PF
184*c1d14583SBruce Richardson 	 * 55:32: FLOW ID (assigned by HW)
185*c1d14583SBruce Richardson 	 * 63:56: EPOCH
186*c1d14583SBruce Richardson 	 */
187*c1d14583SBruce Richardson 	uint8_t ctrl_word[8];
188*c1d14583SBruce Richardson 	uint8_t padding[46];
189*c1d14583SBruce Richardson };
190*c1d14583SBruce Richardson 
191*c1d14583SBruce Richardson /**
192*c1d14583SBruce Richardson  * union cpfl_rule_cfg_pkt_record - Describes rule data blob
193*c1d14583SBruce Richardson  */
194*c1d14583SBruce Richardson union cpfl_rule_cfg_pkt_record {
195*c1d14583SBruce Richardson 	struct cpfl_sem_rule_cfg_pkt sem_rule;
196*c1d14583SBruce Richardson 	uint8_t pkt_data[256];
197*c1d14583SBruce Richardson 	uint8_t mod_blob[256];
198*c1d14583SBruce Richardson };
199*c1d14583SBruce Richardson 
200*c1d14583SBruce Richardson /**
201*c1d14583SBruce Richardson  * cpfl_rule_query_addr - LEM/SEM Rule Query Address structure
202*c1d14583SBruce Richardson  */
203*c1d14583SBruce Richardson struct cpfl_rule_query_addr {
204*c1d14583SBruce Richardson 	uint8_t	obj_id;
205*c1d14583SBruce Richardson 	uint32_t	obj_addr;
206*c1d14583SBruce Richardson };
207*c1d14583SBruce Richardson 
208*c1d14583SBruce Richardson /**
209*c1d14583SBruce Richardson  * cpfl_rule_query_del_addr - Rule Query and Delete Address
210*c1d14583SBruce Richardson  */
211*c1d14583SBruce Richardson struct cpfl_rule_query_del_addr {
212*c1d14583SBruce Richardson 	uint8_t	obj_id;
213*c1d14583SBruce Richardson 	uint32_t	obj_addr;
214*c1d14583SBruce Richardson };
215*c1d14583SBruce Richardson 
216*c1d14583SBruce Richardson /**
217*c1d14583SBruce Richardson  * cpfl_rule_mod_content - MOD Rule Content
218*c1d14583SBruce Richardson  */
219*c1d14583SBruce Richardson struct cpfl_rule_mod_content {
220*c1d14583SBruce Richardson 	uint8_t	obj_size;
221*c1d14583SBruce Richardson 	uint8_t	pin_content;
222*c1d14583SBruce Richardson 	uint32_t	index;
223*c1d14583SBruce Richardson };
224*c1d14583SBruce Richardson 
225*c1d14583SBruce Richardson /**
226*c1d14583SBruce Richardson  * cpfl_rule_cfg_data_common - data struct for all rule opcodes
227*c1d14583SBruce Richardson  *note: some rules may only require part of structure
228*c1d14583SBruce Richardson  */
229*c1d14583SBruce Richardson struct cpfl_rule_cfg_data_common {
230*c1d14583SBruce Richardson 	enum cpfl_ctlq_rule_cfg_opc opc;
231*c1d14583SBruce Richardson 	uint64_t	cookie;
232*c1d14583SBruce Richardson 	uint16_t	vsi_id;
233*c1d14583SBruce Richardson 	uint8_t	port_num;
234*c1d14583SBruce Richardson 	uint8_t	host_id;
235*c1d14583SBruce Richardson 	uint8_t	time_sel;
236*c1d14583SBruce Richardson 	uint8_t	time_sel_val;
237*c1d14583SBruce Richardson 	uint8_t	cache_wr_thru;
238*c1d14583SBruce Richardson 	uint8_t	resp_req;
239*c1d14583SBruce Richardson 	uint32_t	ret_val;
240*c1d14583SBruce Richardson 	uint16_t	buf_len;
241*c1d14583SBruce Richardson 	struct idpf_dma_mem *payload;
242*c1d14583SBruce Richardson };
243*c1d14583SBruce Richardson 
244*c1d14583SBruce Richardson /**
245*c1d14583SBruce Richardson  * cpfl_rule_cfg_data - rule config data
246*c1d14583SBruce Richardson  * note: Before sending rule to HW, caller needs to fill
247*c1d14583SBruce Richardson  *       in this struct then call cpfl_prep_rule_desc().
248*c1d14583SBruce Richardson  */
249*c1d14583SBruce Richardson struct cpfl_rule_cfg_data {
250*c1d14583SBruce Richardson 	struct cpfl_rule_cfg_data_common common;
251*c1d14583SBruce Richardson 	union {
252*c1d14583SBruce Richardson 		struct cpfl_rule_query_addr query_addr;
253*c1d14583SBruce Richardson 		struct cpfl_rule_query_del_addr query_del_addr;
254*c1d14583SBruce Richardson 		struct cpfl_rule_mod_content mod_content;
255*c1d14583SBruce Richardson 	} ext;
256*c1d14583SBruce Richardson };
257*c1d14583SBruce Richardson 
258*c1d14583SBruce Richardson /**
259*c1d14583SBruce Richardson  * cpfl_fill_rule_mod_content - fill info for mod content
260*c1d14583SBruce Richardson  */
261*c1d14583SBruce Richardson static inline void
262*c1d14583SBruce Richardson cpfl_fill_rule_mod_content(uint8_t mod_obj_size,
263*c1d14583SBruce Richardson 			   uint8_t pin_mod_content,
264*c1d14583SBruce Richardson 			   uint32_t mod_index,
265*c1d14583SBruce Richardson 			   struct cpfl_rule_mod_content *mod_content)
266*c1d14583SBruce Richardson {
267*c1d14583SBruce Richardson 	mod_content->obj_size = mod_obj_size;
268*c1d14583SBruce Richardson 	mod_content->pin_content = pin_mod_content;
269*c1d14583SBruce Richardson 	mod_content->index = mod_index;
270*c1d14583SBruce Richardson }
271*c1d14583SBruce Richardson 
272*c1d14583SBruce Richardson /**
273*c1d14583SBruce Richardson  * cpfl_fill_rule_cfg_data_common - fill in rule config data for all opcodes
274*c1d14583SBruce Richardson  * note: call this function before calls cpfl_prep_rule_desc()
275*c1d14583SBruce Richardson  */
276*c1d14583SBruce Richardson static inline void
277*c1d14583SBruce Richardson cpfl_fill_rule_cfg_data_common(enum cpfl_ctlq_rule_cfg_opc opc,
278*c1d14583SBruce Richardson 			       uint64_t cookie,
279*c1d14583SBruce Richardson 			       uint16_t vsi_id,
280*c1d14583SBruce Richardson 			       uint8_t port_num,
281*c1d14583SBruce Richardson 			       uint8_t host_id,
282*c1d14583SBruce Richardson 			       uint8_t time_sel,
283*c1d14583SBruce Richardson 			       uint8_t time_sel_val,
284*c1d14583SBruce Richardson 			       uint8_t cache_wr_thru,
285*c1d14583SBruce Richardson 			       uint8_t resp_req,
286*c1d14583SBruce Richardson 			       uint16_t payload_len,
287*c1d14583SBruce Richardson 			       struct idpf_dma_mem *payload,
288*c1d14583SBruce Richardson 			       struct cpfl_rule_cfg_data_common *cfg_cmn)
289*c1d14583SBruce Richardson {
290*c1d14583SBruce Richardson 	cfg_cmn->opc = opc;
291*c1d14583SBruce Richardson 	cfg_cmn->cookie = cookie;
292*c1d14583SBruce Richardson 	cfg_cmn->vsi_id = vsi_id;
293*c1d14583SBruce Richardson 	cfg_cmn->port_num = port_num;
294*c1d14583SBruce Richardson 	cfg_cmn->resp_req = resp_req;
295*c1d14583SBruce Richardson 	cfg_cmn->ret_val = 0;
296*c1d14583SBruce Richardson 	cfg_cmn->host_id = host_id;
297*c1d14583SBruce Richardson 	cfg_cmn->time_sel = time_sel;
298*c1d14583SBruce Richardson 	cfg_cmn->time_sel_val = time_sel_val;
299*c1d14583SBruce Richardson 	cfg_cmn->cache_wr_thru = cache_wr_thru;
300*c1d14583SBruce Richardson 
301*c1d14583SBruce Richardson 	cfg_cmn->buf_len = payload_len;
302*c1d14583SBruce Richardson 	cfg_cmn->payload = payload;
303*c1d14583SBruce Richardson }
304*c1d14583SBruce Richardson 
305*c1d14583SBruce Richardson void
306*c1d14583SBruce Richardson cpfl_prep_rule_desc(struct cpfl_rule_cfg_data *cfg_data,
307*c1d14583SBruce Richardson 		    struct idpf_ctlq_msg *ctlq_msg);
308*c1d14583SBruce Richardson 
309*c1d14583SBruce Richardson void
310*c1d14583SBruce Richardson cpfl_prep_sem_rule_blob(const uint8_t *key,
311*c1d14583SBruce Richardson 			uint8_t key_byte_len,
312*c1d14583SBruce Richardson 			const uint8_t *act_bytes,
313*c1d14583SBruce Richardson 			uint8_t act_byte_len,
314*c1d14583SBruce Richardson 			uint16_t cfg_ctrl,
315*c1d14583SBruce Richardson 			union cpfl_rule_cfg_pkt_record *rule_blob);
316*c1d14583SBruce Richardson 
317*c1d14583SBruce Richardson #endif /* _CPFL_RULES_API_H_ */
318