Lines Matching refs:data
86 struct rss_reply_data *data, const struct genl_info *info) in rss_prepare_flow_hash() argument
90 data->has_flow_hash = false; in rss_prepare_flow_hash()
105 data->flow_hash[i] = -1; /* Unsupported */ in rss_prepare_flow_hash()
109 data->flow_hash[i] = fields.data; in rss_prepare_flow_hash()
110 data->has_flow_hash = true; in rss_prepare_flow_hash()
116 rss_get_data_alloc(struct net_device *dev, struct rss_reply_data *data) in rss_get_data_alloc() argument
122 data->indir_size = 0; in rss_get_data_alloc()
123 data->hkey_size = 0; in rss_get_data_alloc()
125 data->indir_size = ops->get_rxfh_indir_size(dev); in rss_get_data_alloc()
127 data->hkey_size = ops->get_rxfh_key_size(dev); in rss_get_data_alloc()
129 indir_bytes = data->indir_size * sizeof(u32); in rss_get_data_alloc()
130 total_size = indir_bytes + data->hkey_size; in rss_get_data_alloc()
135 if (data->indir_size) in rss_get_data_alloc()
136 data->indir_table = (u32 *)rss_config; in rss_get_data_alloc()
137 if (data->hkey_size) in rss_get_data_alloc()
138 data->hkey = rss_config + indir_bytes; in rss_get_data_alloc()
143 static void rss_get_data_free(const struct rss_reply_data *data) in rss_get_data_free() argument
145 kfree(data->indir_table); in rss_get_data_free()
150 struct rss_reply_data *data, const struct genl_info *info) in rss_prepare_get() argument
161 ret = rss_get_data_alloc(dev, data); in rss_prepare_get()
165 rxfh.indir_size = data->indir_size; in rss_prepare_get()
166 rxfh.indir = data->indir_table; in rss_prepare_get()
167 rxfh.key_size = data->hkey_size; in rss_prepare_get()
168 rxfh.key = data->hkey; in rss_prepare_get()
174 data->hfunc = rxfh.hfunc; in rss_prepare_get()
175 data->input_xfrm = rxfh.input_xfrm; in rss_prepare_get()
183 __rss_prepare_ctx(struct net_device *dev, struct rss_reply_data *data, in __rss_prepare_ctx() argument
186 if (WARN_ON_ONCE(data->indir_size != ctx->indir_size || in __rss_prepare_ctx()
187 data->hkey_size != ctx->key_size)) in __rss_prepare_ctx()
190 data->no_key_fields = !dev->ethtool_ops->rxfh_per_ctx_key; in __rss_prepare_ctx()
192 data->hfunc = ctx->hfunc; in __rss_prepare_ctx()
193 data->input_xfrm = ctx->input_xfrm; in __rss_prepare_ctx()
194 memcpy(data->indir_table, ethtool_rxfh_context_indir(ctx), in __rss_prepare_ctx()
195 data->indir_size * sizeof(u32)); in __rss_prepare_ctx()
196 if (data->hkey_size) in __rss_prepare_ctx()
197 memcpy(data->hkey, ethtool_rxfh_context_key(ctx), in __rss_prepare_ctx()
198 data->hkey_size); in __rss_prepare_ctx()
203 struct rss_reply_data *data, const struct genl_info *info) in rss_prepare_ctx() argument
217 data->indir_size = ctx->indir_size; in rss_prepare_ctx()
218 data->hkey_size = ctx->key_size; in rss_prepare_ctx()
220 indir_bytes = data->indir_size * sizeof(u32); in rss_prepare_ctx()
221 total_size = indir_bytes + data->hkey_size; in rss_prepare_ctx()
228 data->indir_table = (u32 *)rss_config; in rss_prepare_ctx()
229 if (data->hkey_size) in rss_prepare_ctx()
230 data->hkey = rss_config + indir_bytes; in rss_prepare_ctx()
232 __rss_prepare_ctx(dev, data, ctx); in rss_prepare_ctx()
242 struct rss_reply_data *data, const struct genl_info *info) in rss_prepare() argument
244 rss_prepare_flow_hash(request, dev, data, info); in rss_prepare()
251 return rss_prepare_ctx(request, dev, data, info); in rss_prepare()
252 return rss_prepare_get(request, dev, data, info); in rss_prepare()
260 struct rss_reply_data *data = RSS_REPDATA(reply_base); in rss_prepare_data() local
273 return rss_prepare(request, dev, data, info); in rss_prepare_data()
280 const struct rss_reply_data *data = RSS_REPDATA(reply_base); in rss_reply_size() local
286 nla_total_size(sizeof(u32) * data->indir_size) + /* _RSS_INDIR */ in rss_reply_size()
287 nla_total_size(data->hkey_size) + /* _RSS_HKEY */ in rss_reply_size()
299 const struct rss_reply_data *data = RSS_REPDATA(reply_base); in rss_fill_reply() local
306 if ((data->indir_size && in rss_fill_reply()
308 sizeof(u32) * data->indir_size, data->indir_table))) in rss_fill_reply()
311 if (!data->no_key_fields && in rss_fill_reply()
312 ((data->hfunc && in rss_fill_reply()
313 nla_put_u32(skb, ETHTOOL_A_RSS_HFUNC, data->hfunc)) || in rss_fill_reply()
314 (data->input_xfrm && in rss_fill_reply()
315 nla_put_u32(skb, ETHTOOL_A_RSS_INPUT_XFRM, data->input_xfrm)) || in rss_fill_reply()
316 (data->hkey_size && in rss_fill_reply()
317 nla_put(skb, ETHTOOL_A_RSS_HKEY, data->hkey_size, data->hkey)))) in rss_fill_reply()
320 if (data->has_flow_hash) { in rss_fill_reply()
329 if (data->flow_hash[i] >= 0 && in rss_fill_reply()
330 nla_put_uint(skb, i, data->flow_hash[i])) { in rss_fill_reply()
344 const struct rss_reply_data *data = RSS_REPDATA(reply_base); in rss_cleanup_data() local
346 rss_get_data_free(data); in rss_cleanup_data()
402 struct rss_reply_data data = {}; in rss_dump_one_ctx() local
417 ret = rss_prepare(&req, dev, &data, info); in rss_dump_one_ctx()
421 ret = rss_fill_reply(skb, &req.base, &data.base); in rss_dump_one_ctx()
426 rss_cleanup_data(&data.base); in rss_dump_one_ctx()
430 rss_cleanup_data(&data.base); in rss_dump_one_ctx()
619 struct rss_reply_data *data, struct ethtool_rxfh_param *rxfh, in rss_set_prep_indir() argument
632 if (!data->indir_size || !ops->get_rxnfc) in rss_set_prep_indir()
652 } else if (data->indir_size % user_size) { in rss_set_prep_indir()
655 user_size, data->indir_size); in rss_set_prep_indir()
659 rxfh->indir_size = data->indir_size; in rss_set_prep_indir()
660 alloc_size = array_size(data->indir_size, sizeof(rxfh->indir[0])); in rss_set_prep_indir()
667 if (rxfh->indir[i] < rx_rings.data) in rss_set_prep_indir()
679 for (i = user_size; i < data->indir_size; i++) in rss_set_prep_indir()
682 for (i = 0; i < data->indir_size; i++) in rss_set_prep_indir()
684 ethtool_rxfh_indir_default(i, rx_rings.data); in rss_set_prep_indir()
687 *mod |= memcmp(rxfh->indir, data->indir_table, data->indir_size); in rss_set_prep_indir()
699 struct rss_reply_data *data, struct ethtool_rxfh_param *rxfh, in rss_set_prep_hkey() argument
707 if (nla_len(tb[ETHTOOL_A_RSS_HKEY]) != data->hkey_size) { in rss_set_prep_hkey()
712 rxfh->key_size = data->hkey_size; in rss_set_prep_hkey()
713 rxfh->key = kmemdup(data->hkey, data->hkey_size, GFP_KERNEL); in rss_set_prep_hkey()
724 struct rss_reply_data *data, bool xfrm_sym) in rss_check_rxfh_fields_sym() argument
731 if (!data->has_flow_hash) { in rss_check_rxfh_fields_sym()
738 if (data->flow_hash[i] >= 0 && in rss_check_rxfh_fields_sym()
739 !ethtool_rxfh_config_is_sym(data->flow_hash[i])) { in rss_check_rxfh_fields_sym()
751 u32 rss_context, struct rss_reply_data *data, in ethnl_set_rss_fields() argument
761 ret = rss_check_rxfh_fields_sym(dev, info, data, xfrm_sym); in ethnl_set_rss_fields()
782 fields.data = nla_get_u32(flows[i]); in ethnl_set_rss_fields()
783 if (data->has_flow_hash && data->flow_hash[i] == fields.data) in ethnl_set_rss_fields()
786 if (xfrm_sym && !ethtool_rxfh_config_is_sym(fields.data)) { in ethnl_set_rss_fields()
804 struct rss_reply_data *data, struct ethtool_rxfh_param *rxfh) in rss_set_ctx_update() argument
809 for (i = 0; i < data->indir_size; i++) in rss_set_ctx_update()
815 data->hkey_size); in rss_set_ctx_update()
834 struct rss_reply_data data = {}; in ethnl_rss_set() local
839 data.base.dev = dev; in ethnl_rss_set()
841 ret = rss_prepare(request, dev, &data, info); in ethnl_rss_set()
847 ret = rss_set_prep_indir(dev, info, &data, &rxfh, &indir_reset, &mod); in ethnl_rss_set()
852 rxfh.hfunc = data.hfunc; in ethnl_rss_set()
854 if (rxfh.hfunc == data.hfunc) in ethnl_rss_set()
857 ret = rss_set_prep_hkey(dev, info, &data, &rxfh, &mod); in ethnl_rss_set()
861 rxfh.input_xfrm = data.input_xfrm; in ethnl_rss_set()
868 xfrm_sym = rxfh.input_xfrm || data.input_xfrm; in ethnl_rss_set()
869 if (rxfh.input_xfrm == data.input_xfrm) in ethnl_rss_set()
882 &data, xfrm_sym, &fields_mod); in ethnl_rss_set()
898 rss_set_ctx_update(ctx, tb, &data, &rxfh); in ethnl_rss_set()
910 rss_cleanup_data(&data.base); in ethnl_rss_set()
984 struct nlmsghdr *nlh = (void *)rsp->data; in ethnl_rss_create_send_ntf()
1003 struct rss_reply_data data = {}; in ethnl_rss_create_doit() local
1038 ret = rss_get_data_alloc(dev, &data); in ethnl_rss_create_doit()
1042 ret = rss_set_prep_indir(dev, info, &data, &rxfh, &indir_dflt, &mod); in ethnl_rss_create_doit()
1048 ret = rss_set_prep_hkey(dev, info, &data, &rxfh, &mod); in ethnl_rss_create_doit()
1055 ctx = ethtool_rxfh_ctx_alloc(ops, data.indir_size, data.hkey_size); in ethnl_rss_create_doit()
1087 rss_set_ctx_update(ctx, tb, &data, &rxfh); in ethnl_rss_create_doit()
1089 __rss_prepare_ctx(dev, &data, ctx); in ethnl_rss_create_doit()
1094 ntf_fail |= rss_fill_reply(rsp, &req.base, &data.base); in ethnl_rss_create_doit()
1117 rss_get_data_free(&data); in ethnl_rss_create_doit()