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