Lines Matching defs:agent

34 	void (*control)(struct mlx5_hv_vhca_agent *agent,
36 void (*invalidate)(struct mlx5_hv_vhca_agent *agent,
38 void (*cleanup)(struct mlx5_hv_vhca_agent *agent);
81 struct mlx5_hv_vhca_agent *agent = hv_vhca->agents[i];
83 if (!agent || !agent->invalidate)
86 if (!(BIT(agent->type) & hwork->block_mask))
89 agent->invalidate(agent, hwork->block_mask);
120 struct mlx5_hv_vhca_agent *agent = hv_vhca->agents[i];
122 if (!agent || !agent->control)
125 if (!(AGENT_MASK(agent->type) & block->control))
128 agent->control(agent, block);
138 struct mlx5_hv_vhca_agent *agent = hv_vhca->agents[i];
140 if (agent)
141 *capabilities |= AGENT_MASK(agent->type);
146 mlx5_hv_vhca_control_agent_invalidate(struct mlx5_hv_vhca_agent *agent,
149 struct mlx5_hv_vhca *hv_vhca = agent->hv_vhca;
196 static void mlx5_hv_vhca_control_agent_destroy(struct mlx5_hv_vhca_agent *agent)
198 mlx5_hv_vhca_agent_destroy(agent);
203 struct mlx5_hv_vhca_agent *agent;
214 agent = mlx5_hv_vhca_control_agent_create(hv_vhca);
215 if (IS_ERR_OR_NULL(agent)) {
217 return IS_ERR_OR_NULL(agent);
220 hv_vhca->agents[MLX5_HV_VHCA_AGENT_CONTROL] = agent;
227 struct mlx5_hv_vhca_agent *agent;
233 agent = hv_vhca->agents[MLX5_HV_VHCA_AGENT_CONTROL];
234 if (agent)
235 mlx5_hv_vhca_control_agent_destroy(agent);
258 void (*cleaup)(struct mlx5_hv_vhca_agent *agent),
261 struct mlx5_hv_vhca_agent *agent;
276 agent = kzalloc(sizeof(*agent), GFP_KERNEL);
277 if (!agent)
280 agent->type = type;
281 agent->hv_vhca = hv_vhca;
282 agent->priv = priv;
283 agent->control = control;
284 agent->invalidate = invalidate;
285 agent->cleanup = cleaup;
288 hv_vhca->agents[type] = agent;
293 return agent;
296 void mlx5_hv_vhca_agent_destroy(struct mlx5_hv_vhca_agent *agent)
298 struct mlx5_hv_vhca *hv_vhca = agent->hv_vhca;
302 if (WARN_ON(agent != hv_vhca->agents[agent->type])) {
307 hv_vhca->agents[agent->type] = NULL;
310 if (agent->cleanup)
311 agent->cleanup(agent);
313 kfree(agent);
318 static int mlx5_hv_vhca_data_block_prepare(struct mlx5_hv_vhca_agent *agent,
324 data_block->sequence = agent->seq;
331 static void mlx5_hv_vhca_agent_seq_update(struct mlx5_hv_vhca_agent *agent)
333 agent->seq++;
336 int mlx5_hv_vhca_agent_write(struct mlx5_hv_vhca_agent *agent,
339 int offset = agent->type * HV_CONFIG_BLOCK_SIZE_MAX;
348 bytes = mlx5_hv_vhca_data_block_prepare(agent, &data_block,
354 err = mlx5_hv_write_config(agent->hv_vhca->dev, &data_block,
363 mlx5_hv_vhca_agent_seq_update(agent);
368 void *mlx5_hv_vhca_agent_priv(struct mlx5_hv_vhca_agent *agent)
370 return agent->priv;