Lines Matching refs:sa_entry

138 static int mlx5_create_ipsec_obj(struct mlx5e_ipsec_sa_entry *sa_entry)  in mlx5_create_ipsec_obj()  argument
140 struct mlx5_accel_esp_xfrm_attrs *attrs = &sa_entry->attrs; in mlx5_create_ipsec_obj()
141 struct mlx5_core_dev *mdev = mlx5e_ipsec_sa2dev(sa_entry); in mlx5_create_ipsec_obj()
165 MLX5_SET(ipsec_obj, obj, dekn, sa_entry->enc_key_id); in mlx5_create_ipsec_obj()
179 sa_entry->ipsec_obj_id = in mlx5_create_ipsec_obj()
185 static void mlx5_destroy_ipsec_obj(struct mlx5e_ipsec_sa_entry *sa_entry) in mlx5_destroy_ipsec_obj() argument
187 struct mlx5_core_dev *mdev = mlx5e_ipsec_sa2dev(sa_entry); in mlx5_destroy_ipsec_obj()
195 MLX5_SET(general_obj_in_cmd_hdr, in, obj_id, sa_entry->ipsec_obj_id); in mlx5_destroy_ipsec_obj()
200 int mlx5_ipsec_create_sa_ctx(struct mlx5e_ipsec_sa_entry *sa_entry) in mlx5_ipsec_create_sa_ctx() argument
202 struct aes_gcm_keymat *aes_gcm = &sa_entry->attrs.aes_gcm; in mlx5_ipsec_create_sa_ctx()
203 struct mlx5_core_dev *mdev = mlx5e_ipsec_sa2dev(sa_entry); in mlx5_ipsec_create_sa_ctx()
210 &sa_entry->enc_key_id); in mlx5_ipsec_create_sa_ctx()
216 err = mlx5_create_ipsec_obj(sa_entry); in mlx5_ipsec_create_sa_ctx()
225 mlx5_destroy_encryption_key(mdev, sa_entry->enc_key_id); in mlx5_ipsec_create_sa_ctx()
229 void mlx5_ipsec_free_sa_ctx(struct mlx5e_ipsec_sa_entry *sa_entry) in mlx5_ipsec_free_sa_ctx() argument
231 struct mlx5_core_dev *mdev = mlx5e_ipsec_sa2dev(sa_entry); in mlx5_ipsec_free_sa_ctx()
233 mlx5_destroy_ipsec_obj(sa_entry); in mlx5_ipsec_free_sa_ctx()
234 mlx5_destroy_encryption_key(mdev, sa_entry->enc_key_id); in mlx5_ipsec_free_sa_ctx()
237 static int mlx5_modify_ipsec_obj(struct mlx5e_ipsec_sa_entry *sa_entry, in mlx5_modify_ipsec_obj() argument
240 struct mlx5_core_dev *mdev = mlx5e_ipsec_sa2dev(sa_entry); in mlx5_modify_ipsec_obj()
255 MLX5_SET(general_obj_in_cmd_hdr, in, obj_id, sa_entry->ipsec_obj_id); in mlx5_modify_ipsec_obj()
259 sa_entry->ipsec_obj_id, err); in mlx5_modify_ipsec_obj()
284 void mlx5_accel_esp_modify_xfrm(struct mlx5e_ipsec_sa_entry *sa_entry, in mlx5_accel_esp_modify_xfrm() argument
289 err = mlx5_modify_ipsec_obj(sa_entry, attrs); in mlx5_accel_esp_modify_xfrm()
293 memcpy(&sa_entry->attrs, attrs, sizeof(sa_entry->attrs)); in mlx5_accel_esp_modify_xfrm()
296 static void mlx5e_ipsec_aso_update(struct mlx5e_ipsec_sa_entry *sa_entry, in mlx5e_ipsec_aso_update() argument
303 mlx5e_ipsec_aso_query(sa_entry, data); in mlx5e_ipsec_aso_update()
306 static void mlx5e_ipsec_update_esn_state(struct mlx5e_ipsec_sa_entry *sa_entry, in mlx5e_ipsec_update_esn_state() argument
313 sa_entry->esn_state.esn_msb++; in mlx5e_ipsec_update_esn_state()
314 sa_entry->esn_state.overlap = 0; in mlx5e_ipsec_update_esn_state()
316 sa_entry->esn_state.overlap = 1; in mlx5e_ipsec_update_esn_state()
319 mlx5e_ipsec_build_accel_xfrm_attrs(sa_entry, &attrs); in mlx5e_ipsec_update_esn_state()
328 spin_unlock_bh(&sa_entry->x->lock); in mlx5e_ipsec_update_esn_state()
329 mlx5_accel_esp_modify_xfrm(sa_entry, &attrs); in mlx5e_ipsec_update_esn_state()
330 spin_lock_bh(&sa_entry->x->lock); in mlx5e_ipsec_update_esn_state()
337 mlx5e_ipsec_aso_update(sa_entry, &data); in mlx5e_ipsec_update_esn_state()
340 static void mlx5e_ipsec_aso_update_hard(struct mlx5e_ipsec_sa_entry *sa_entry) in mlx5e_ipsec_aso_update_hard() argument
348 mlx5e_ipsec_aso_update(sa_entry, &data); in mlx5e_ipsec_aso_update_hard()
351 static void mlx5e_ipsec_aso_update_soft(struct mlx5e_ipsec_sa_entry *sa_entry, in mlx5e_ipsec_aso_update_soft() argument
360 mlx5e_ipsec_aso_update(sa_entry, &data); in mlx5e_ipsec_aso_update_soft()
363 static void mlx5e_ipsec_handle_limits(struct mlx5e_ipsec_sa_entry *sa_entry) in mlx5e_ipsec_handle_limits() argument
365 struct mlx5_accel_esp_xfrm_attrs *attrs = &sa_entry->attrs; in mlx5e_ipsec_handle_limits()
366 struct mlx5e_ipsec *ipsec = sa_entry->ipsec; in mlx5e_ipsec_handle_limits()
371 lockdep_assert_held(&sa_entry->x->lock); in mlx5e_ipsec_handle_limits()
391 xfrm_state_check_expire(sa_entry->x); in mlx5e_ipsec_handle_limits()
396 if (!sa_entry->limits.soft_limit_hit && in mlx5e_ipsec_handle_limits()
397 sa_entry->limits.round == attrs->lft.numb_rounds_soft) { in mlx5e_ipsec_handle_limits()
398 sa_entry->limits.soft_limit_hit = true; in mlx5e_ipsec_handle_limits()
400 xfrm_state_check_expire(sa_entry->x); in mlx5e_ipsec_handle_limits()
402 if (sa_entry->limits.round == attrs->lft.numb_rounds_hard) in mlx5e_ipsec_handle_limits()
417 mlx5e_ipsec_aso_update_soft(sa_entry, in mlx5e_ipsec_handle_limits()
419 sa_entry->limits.fix_limit = true; in mlx5e_ipsec_handle_limits()
423 sa_entry->limits.fix_limit = true; in mlx5e_ipsec_handle_limits()
427 if (sa_entry->limits.round == attrs->lft.numb_rounds_hard) { in mlx5e_ipsec_handle_limits()
428 mlx5e_ipsec_aso_update_soft(sa_entry, 0); in mlx5e_ipsec_handle_limits()
433 mlx5e_ipsec_aso_update_hard(sa_entry); in mlx5e_ipsec_handle_limits()
434 sa_entry->limits.round++; in mlx5e_ipsec_handle_limits()
435 if (sa_entry->limits.round == attrs->lft.numb_rounds_soft) in mlx5e_ipsec_handle_limits()
436 mlx5e_ipsec_aso_update_soft(sa_entry, in mlx5e_ipsec_handle_limits()
438 if (sa_entry->limits.fix_limit) { in mlx5e_ipsec_handle_limits()
439 sa_entry->limits.fix_limit = false; in mlx5e_ipsec_handle_limits()
440 mlx5e_ipsec_aso_update_soft(sa_entry, BIT_ULL(31) - 1); in mlx5e_ipsec_handle_limits()
448 struct mlx5e_ipsec_sa_entry *sa_entry = work->data; in mlx5e_ipsec_handle_event() local
453 aso = sa_entry->ipsec->aso; in mlx5e_ipsec_handle_event()
454 attrs = &sa_entry->attrs; in mlx5e_ipsec_handle_event()
456 spin_lock_bh(&sa_entry->x->lock); in mlx5e_ipsec_handle_event()
457 ret = mlx5e_ipsec_aso_query(sa_entry, NULL); in mlx5e_ipsec_handle_event()
465 mlx5e_ipsec_update_esn_state(sa_entry, mode_param); in mlx5e_ipsec_handle_event()
469 mlx5e_ipsec_handle_limits(sa_entry); in mlx5e_ipsec_handle_event()
472 spin_unlock_bh(&sa_entry->x->lock); in mlx5e_ipsec_handle_event()
480 struct mlx5e_ipsec_sa_entry *sa_entry; in mlx5e_ipsec_event() local
495 sa_entry = xa_load(&ipsec->sadb, be32_to_cpu(object->obj_id)); in mlx5e_ipsec_event()
496 if (!sa_entry) in mlx5e_ipsec_event()
504 work->data = sa_entry; in mlx5e_ipsec_event()
587 int mlx5e_ipsec_aso_query(struct mlx5e_ipsec_sa_entry *sa_entry, in mlx5e_ipsec_aso_query() argument
590 struct mlx5e_ipsec *ipsec = sa_entry->ipsec; in mlx5e_ipsec_aso_query()
600 lockdep_assert_held(&sa_entry->x->lock); in mlx5e_ipsec_aso_query()
607 mlx5_aso_build_wqe(aso->aso, ds_cnt, wqe, sa_entry->ipsec_obj_id, in mlx5e_ipsec_aso_query()