From 6e1db8a61d1de33e04a2e6d0ea24538e40c5c2de Mon Sep 17 00:00:00 2001 From: Qi Zhang Date: Mon, 25 Mar 2019 13:44:50 +0800 Subject: [PATCH] net/ice/base: increase protocol offset size OS package's format is changed, field vector's protocol offset size is changed from 8 bit to 16 bit. So base code also need to align to this, or PMD will not be able to load OS package correctly. Signed-off-by: Qi Zhang Signed-off-by: Paul M Stillwell Jr Reviewed-by: Qiming Yang Reviewed-by: Wenzhuo Lu --- drivers/net/ice/base/ice_flex_type.h | 8 +++++++- drivers/net/ice/base/ice_flow.c | 7 +++++-- drivers/net/ice/base/ice_flow.h | 2 +- drivers/net/ice/base/ice_protocol_type.h | 2 +- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/net/ice/base/ice_flex_type.h b/drivers/net/ice/base/ice_flex_type.h index 365f333909..f259e13716 100644 --- a/drivers/net/ice/base/ice_flex_type.h +++ b/drivers/net/ice/base/ice_flex_type.h @@ -5,12 +5,18 @@ #ifndef _ICE_FLEX_TYPE_H_ #define _ICE_FLEX_TYPE_H_ +#define ICE_FV_OFFSET_INVAL 0x1FF + +#pragma pack(1) /* Extraction Sequence (Field Vector) Table */ struct ice_fv_word { u8 prot_id; - u8 off; /* Offset within the protocol header */ + u16 off; /* Offset within the protocol header */ + u8 resvrd; }; +#pragma pack() + #define ICE_MAX_FV_WORDS 48 struct ice_fv { struct ice_fv_word ew[ICE_MAX_FV_WORDS]; diff --git a/drivers/net/ice/base/ice_flow.c b/drivers/net/ice/base/ice_flow.c index 98727cfeb7..be819e0e9c 100644 --- a/drivers/net/ice/base/ice_flow.c +++ b/drivers/net/ice/base/ice_flow.c @@ -516,7 +516,7 @@ ice_flow_xtract_fld(struct ice_hw *hw, struct ice_flow_prof_params *params, struct ice_flow_fld_info *flds; u16 cnt, ese_bits, i; s16 adj = 0; - u8 off; + u16 off; flds = params->prof->segs[seg].fields; @@ -956,7 +956,10 @@ ice_flow_add_prof_sync(struct ice_hw *hw, enum ice_block blk, return ICE_ERR_NO_MEMORY; /* initialize extraction sequence to all invalid (0xff) */ - ice_memset(params.es, 0xff, sizeof(params.es), ICE_NONDMA_MEM); + for (i = 0; i < ICE_MAX_FV_WORDS; i++) { + params.es[i].prot_id = ICE_PROT_INVALID; + params.es[i].off = ICE_FV_OFFSET_INVAL; + } params.blk = blk; params.prof->id = prof_id; diff --git a/drivers/net/ice/base/ice_flow.h b/drivers/net/ice/base/ice_flow.h index bad925c8c4..f0c74a348f 100644 --- a/drivers/net/ice/base/ice_flow.h +++ b/drivers/net/ice/base/ice_flow.h @@ -174,7 +174,7 @@ enum ice_flow_priority { struct ice_flow_seg_xtrct { u8 prot_id; /* Protocol ID of extracted header field */ - u8 off; /* Starting offset of the field in header in bytes */ + u16 off; /* Starting offset of the field in header in bytes */ u8 idx; /* Index of FV entry used */ u8 disp; /* Displacement of field in bits fr. FV entry's start */ }; diff --git a/drivers/net/ice/base/ice_protocol_type.h b/drivers/net/ice/base/ice_protocol_type.h index 6b3bd6542e..e572dd320e 100644 --- a/drivers/net/ice/base/ice_protocol_type.h +++ b/drivers/net/ice/base/ice_protocol_type.h @@ -223,7 +223,7 @@ struct ice_prot_lkup_ext { u16 prot_type; u8 n_val_words; /* create a buffer to hold max words per recipe */ - u8 field_off[ICE_MAX_CHAIN_WORDS]; + u16 field_off[ICE_MAX_CHAIN_WORDS]; struct ice_fv_word fv_words[ICE_MAX_CHAIN_WORDS]; -- 2.20.1