@@ -91,7 +91,7 @@ struct ena_com_stats_ctx {
9191 struct ena_admin_acq_get_stats_resp get_resp ;
9292};
9393
94- static inline int ena_com_mem_addr_set (struct ena_com_dev * ena_dev ,
94+ static int ena_com_mem_addr_set (struct ena_com_dev * ena_dev ,
9595 struct ena_common_mem_addr * ena_addr ,
9696 dma_addr_t addr )
9797{
@@ -190,7 +190,7 @@ static int ena_com_admin_init_aenq(struct ena_com_dev *dev,
190190 return 0 ;
191191}
192192
193- static inline void comp_ctxt_release (struct ena_com_admin_queue * queue ,
193+ static void comp_ctxt_release (struct ena_com_admin_queue * queue ,
194194 struct ena_comp_ctx * comp_ctx )
195195{
196196 comp_ctx -> occupied = false;
@@ -277,7 +277,7 @@ static struct ena_comp_ctx *__ena_com_submit_admin_cmd(struct ena_com_admin_queu
277277 return comp_ctx ;
278278}
279279
280- static inline int ena_com_init_comp_ctxt (struct ena_com_admin_queue * queue )
280+ static int ena_com_init_comp_ctxt (struct ena_com_admin_queue * queue )
281281{
282282 size_t size = queue -> q_depth * sizeof (struct ena_comp_ctx );
283283 struct ena_comp_ctx * comp_ctx ;
@@ -978,7 +978,8 @@ static int ena_com_get_feature_ex(struct ena_com_dev *ena_dev,
978978 struct ena_admin_get_feat_resp * get_resp ,
979979 enum ena_admin_aq_feature_id feature_id ,
980980 dma_addr_t control_buf_dma_addr ,
981- u32 control_buff_size )
981+ u32 control_buff_size ,
982+ u8 feature_ver )
982983{
983984 struct ena_com_admin_queue * admin_queue ;
984985 struct ena_admin_get_feat_cmd get_cmd ;
@@ -1009,7 +1010,7 @@ static int ena_com_get_feature_ex(struct ena_com_dev *ena_dev,
10091010 }
10101011
10111012 get_cmd .control_buffer .length = control_buff_size ;
1012-
1013+ get_cmd . feat_common . feature_version = feature_ver ;
10131014 get_cmd .feat_common .feature_id = feature_id ;
10141015
10151016 ret = ena_com_execute_admin_command (admin_queue ,
@@ -1029,13 +1030,15 @@ static int ena_com_get_feature_ex(struct ena_com_dev *ena_dev,
10291030
10301031static int ena_com_get_feature (struct ena_com_dev * ena_dev ,
10311032 struct ena_admin_get_feat_resp * get_resp ,
1032- enum ena_admin_aq_feature_id feature_id )
1033+ enum ena_admin_aq_feature_id feature_id ,
1034+ u8 feature_ver )
10331035{
10341036 return ena_com_get_feature_ex (ena_dev ,
10351037 get_resp ,
10361038 feature_id ,
10371039 0 ,
1038- 0 );
1040+ 0 ,
1041+ feature_ver );
10391042}
10401043
10411044static int ena_com_hash_key_allocate (struct ena_com_dev * ena_dev )
@@ -1095,7 +1098,7 @@ static int ena_com_indirect_table_allocate(struct ena_com_dev *ena_dev,
10951098 int ret ;
10961099
10971100 ret = ena_com_get_feature (ena_dev , & get_resp ,
1098- ENA_ADMIN_RSS_REDIRECTION_TABLE_CONFIG );
1101+ ENA_ADMIN_RSS_REDIRECTION_TABLE_CONFIG , 0 );
10991102 if (unlikely (ret ))
11001103 return ret ;
11011104
@@ -1515,7 +1518,7 @@ int ena_com_set_aenq_config(struct ena_com_dev *ena_dev, u32 groups_flag)
15151518 struct ena_admin_get_feat_resp get_resp ;
15161519 int ret ;
15171520
1518- ret = ena_com_get_feature (ena_dev , & get_resp , ENA_ADMIN_AENQ_CONFIG );
1521+ ret = ena_com_get_feature (ena_dev , & get_resp , ENA_ADMIN_AENQ_CONFIG , 0 );
15191522 if (ret ) {
15201523 pr_info ("Can't get aenq configuration\n" );
15211524 return ret ;
@@ -1890,7 +1893,7 @@ void ena_com_destroy_io_queue(struct ena_com_dev *ena_dev, u16 qid)
18901893int ena_com_get_link_params (struct ena_com_dev * ena_dev ,
18911894 struct ena_admin_get_feat_resp * resp )
18921895{
1893- return ena_com_get_feature (ena_dev , resp , ENA_ADMIN_LINK_CONFIG );
1896+ return ena_com_get_feature (ena_dev , resp , ENA_ADMIN_LINK_CONFIG , 0 );
18941897}
18951898
18961899int ena_com_extra_properties_strings_init (struct ena_com_dev * ena_dev )
@@ -1916,7 +1919,7 @@ int ena_com_extra_properties_strings_init(struct ena_com_dev *ena_dev)
19161919 rc = ena_com_get_feature_ex (ena_dev , & resp ,
19171920 ENA_ADMIN_EXTRA_PROPERTIES_STRINGS ,
19181921 extra_properties_strings -> dma_addr ,
1919- extra_properties_strings -> size );
1922+ extra_properties_strings -> size , 0 );
19201923 if (rc ) {
19211924 pr_debug ("Failed to get extra properties strings\n" );
19221925 goto err ;
@@ -1946,7 +1949,7 @@ int ena_com_get_extra_properties_flags(struct ena_com_dev *ena_dev,
19461949 struct ena_admin_get_feat_resp * resp )
19471950{
19481951 return ena_com_get_feature (ena_dev , resp ,
1949- ENA_ADMIN_EXTRA_PROPERTIES_FLAGS );
1952+ ENA_ADMIN_EXTRA_PROPERTIES_FLAGS , 0 );
19501953}
19511954
19521955int ena_com_get_dev_attr_feat (struct ena_com_dev * ena_dev ,
@@ -1956,33 +1959,50 @@ int ena_com_get_dev_attr_feat(struct ena_com_dev *ena_dev,
19561959 int rc ;
19571960
19581961 rc = ena_com_get_feature (ena_dev , & get_resp ,
1959- ENA_ADMIN_DEVICE_ATTRIBUTES );
1962+ ENA_ADMIN_DEVICE_ATTRIBUTES , 0 );
19601963 if (rc )
19611964 return rc ;
19621965
19631966 memcpy (& get_feat_ctx -> dev_attr , & get_resp .u .dev_attr ,
19641967 sizeof (get_resp .u .dev_attr ));
19651968 ena_dev -> supported_features = get_resp .u .dev_attr .supported_features ;
19661969
1967- rc = ena_com_get_feature (ena_dev , & get_resp ,
1968- ENA_ADMIN_MAX_QUEUES_NUM );
1969- if (rc )
1970- return rc ;
1970+ if (ena_dev -> supported_features & BIT (ENA_ADMIN_MAX_QUEUES_EXT )) {
1971+ rc = ena_com_get_feature (ena_dev , & get_resp ,
1972+ ENA_ADMIN_MAX_QUEUES_EXT ,
1973+ ENA_FEATURE_MAX_QUEUE_EXT_VER );
1974+ if (rc )
1975+ return rc ;
19711976
1972- memcpy (& get_feat_ctx -> max_queues , & get_resp .u .max_queue ,
1973- sizeof (get_resp .u .max_queue ));
1974- ena_dev -> tx_max_header_size = get_resp .u .max_queue .max_header_size ;
1977+ if (get_resp .u .max_queue_ext .version != ENA_FEATURE_MAX_QUEUE_EXT_VER )
1978+ return - EINVAL ;
1979+
1980+ memcpy (& get_feat_ctx -> max_queue_ext , & get_resp .u .max_queue_ext ,
1981+ sizeof (get_resp .u .max_queue_ext ));
1982+ ena_dev -> tx_max_header_size =
1983+ get_resp .u .max_queue_ext .max_queue_ext .max_tx_header_size ;
1984+ } else {
1985+ rc = ena_com_get_feature (ena_dev , & get_resp ,
1986+ ENA_ADMIN_MAX_QUEUES_NUM , 0 );
1987+ memcpy (& get_feat_ctx -> max_queues , & get_resp .u .max_queue ,
1988+ sizeof (get_resp .u .max_queue ));
1989+ ena_dev -> tx_max_header_size =
1990+ get_resp .u .max_queue .max_header_size ;
1991+
1992+ if (rc )
1993+ return rc ;
1994+ }
19751995
19761996 rc = ena_com_get_feature (ena_dev , & get_resp ,
1977- ENA_ADMIN_AENQ_CONFIG );
1997+ ENA_ADMIN_AENQ_CONFIG , 0 );
19781998 if (rc )
19791999 return rc ;
19802000
19812001 memcpy (& get_feat_ctx -> aenq , & get_resp .u .aenq ,
19822002 sizeof (get_resp .u .aenq ));
19832003
19842004 rc = ena_com_get_feature (ena_dev , & get_resp ,
1985- ENA_ADMIN_STATELESS_OFFLOAD_CONFIG );
2005+ ENA_ADMIN_STATELESS_OFFLOAD_CONFIG , 0 );
19862006 if (rc )
19872007 return rc ;
19882008
@@ -1992,7 +2012,7 @@ int ena_com_get_dev_attr_feat(struct ena_com_dev *ena_dev,
19922012 /* Driver hints isn't mandatory admin command. So in case the
19932013 * command isn't supported set driver hints to 0
19942014 */
1995- rc = ena_com_get_feature (ena_dev , & get_resp , ENA_ADMIN_HW_HINTS );
2015+ rc = ena_com_get_feature (ena_dev , & get_resp , ENA_ADMIN_HW_HINTS , 0 );
19962016
19972017 if (!rc )
19982018 memcpy (& get_feat_ctx -> hw_hints , & get_resp .u .hw_hints ,
@@ -2003,7 +2023,7 @@ int ena_com_get_dev_attr_feat(struct ena_com_dev *ena_dev,
20032023 else
20042024 return rc ;
20052025
2006- rc = ena_com_get_feature (ena_dev , & get_resp , ENA_ADMIN_LLQ );
2026+ rc = ena_com_get_feature (ena_dev , & get_resp , ENA_ADMIN_LLQ , 0 );
20072027 if (!rc )
20082028 memcpy (& get_feat_ctx -> llq , & get_resp .u .llq ,
20092029 sizeof (get_resp .u .llq ));
@@ -2240,7 +2260,7 @@ int ena_com_get_offload_settings(struct ena_com_dev *ena_dev,
22402260 struct ena_admin_get_feat_resp resp ;
22412261
22422262 ret = ena_com_get_feature (ena_dev , & resp ,
2243- ENA_ADMIN_STATELESS_OFFLOAD_CONFIG );
2263+ ENA_ADMIN_STATELESS_OFFLOAD_CONFIG , 0 );
22442264 if (unlikely (ret )) {
22452265 pr_err ("Failed to get offload capabilities %d\n" , ret );
22462266 return ret ;
@@ -2269,7 +2289,7 @@ int ena_com_set_hash_function(struct ena_com_dev *ena_dev)
22692289
22702290 /* Validate hash function is supported */
22712291 ret = ena_com_get_feature (ena_dev , & get_resp ,
2272- ENA_ADMIN_RSS_HASH_FUNCTION );
2292+ ENA_ADMIN_RSS_HASH_FUNCTION , 0 );
22732293 if (unlikely (ret ))
22742294 return ret ;
22752295
@@ -2329,7 +2349,7 @@ int ena_com_fill_hash_function(struct ena_com_dev *ena_dev,
23292349 rc = ena_com_get_feature_ex (ena_dev , & get_resp ,
23302350 ENA_ADMIN_RSS_HASH_FUNCTION ,
23312351 rss -> hash_key_dma_addr ,
2332- sizeof (* rss -> hash_key ));
2352+ sizeof (* rss -> hash_key ), 0 );
23332353 if (unlikely (rc ))
23342354 return rc ;
23352355
@@ -2381,7 +2401,7 @@ int ena_com_get_hash_function(struct ena_com_dev *ena_dev,
23812401 rc = ena_com_get_feature_ex (ena_dev , & get_resp ,
23822402 ENA_ADMIN_RSS_HASH_FUNCTION ,
23832403 rss -> hash_key_dma_addr ,
2384- sizeof (* rss -> hash_key ));
2404+ sizeof (* rss -> hash_key ), 0 );
23852405 if (unlikely (rc ))
23862406 return rc ;
23872407
@@ -2406,7 +2426,7 @@ int ena_com_get_hash_ctrl(struct ena_com_dev *ena_dev,
24062426 rc = ena_com_get_feature_ex (ena_dev , & get_resp ,
24072427 ENA_ADMIN_RSS_HASH_INPUT ,
24082428 rss -> hash_ctrl_dma_addr ,
2409- sizeof (* rss -> hash_ctrl ));
2429+ sizeof (* rss -> hash_ctrl ), 0 );
24102430 if (unlikely (rc ))
24112431 return rc ;
24122432
@@ -2642,7 +2662,7 @@ int ena_com_indirect_table_get(struct ena_com_dev *ena_dev, u32 *ind_tbl)
26422662 rc = ena_com_get_feature_ex (ena_dev , & get_resp ,
26432663 ENA_ADMIN_RSS_REDIRECTION_TABLE_CONFIG ,
26442664 rss -> rss_ind_tbl_dma_addr ,
2645- tbl_size );
2665+ tbl_size , 0 );
26462666 if (unlikely (rc ))
26472667 return rc ;
26482668
@@ -2857,7 +2877,7 @@ int ena_com_init_interrupt_moderation(struct ena_com_dev *ena_dev)
28572877 int rc ;
28582878
28592879 rc = ena_com_get_feature (ena_dev , & get_resp ,
2860- ENA_ADMIN_INTERRUPT_MODERATION );
2880+ ENA_ADMIN_INTERRUPT_MODERATION , 0 );
28612881
28622882 if (rc ) {
28632883 if (rc == - EOPNOTSUPP ) {
0 commit comments