summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c76
1 files changed, 75 insertions, 1 deletions
diff --git a/drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c b/drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c
index c07df76..d157f95 100644
--- a/drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c
+++ b/drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c
@@ -1626,7 +1626,7 @@ long wrp_dpa_ipsec_do_compat_ioctl(struct file *filp, unsigned int cmd,
}
- case DPA_IPSEC_IOC_SA_MODIFY: {
+ case DPA_IPSEC_IOC_SA_MODIFY_COMPAT: {
struct dpa_ipsec_sa_modify_prm modify_prm;
int sa_id, ret;
@@ -1645,6 +1645,80 @@ free:
break;
}
+
+ case DPA_IPSEC_IOC_SA_REQUEST_SEQ_NUMBER: {
+ int sa_id;
+
+ if (copy_from_user(&sa_id, (int *)args, sizeof(int))) {
+ log_err("Could not copy SA id\n");
+ return -EINVAL;
+ }
+
+ ret = dpa_ipsec_sa_request_seq_number(sa_id);
+ break;
+ }
+
+ case DPA_IPSEC_IOC_SA_GET_SEQ_NUMBER: {
+ struct ioc_dpa_ipsec_sa_get_seq_num prm;
+
+ if (copy_from_user(&prm,
+ (struct ioc_dpa_ipsec_sa_get_seq_num *)args,
+ sizeof(prm))) {
+ log_err("Could not copy from user stats params\n");
+ return -EINVAL;
+ }
+
+ if (prm.sa_id < 0) {
+ log_err("Invalid input SA id\n");
+ return -EINVAL;
+ }
+
+ ret = dpa_ipsec_sa_get_seq_number(prm.sa_id, &prm.seq);
+ if (ret < 0) {
+ log_err("Get SEQ number for SA %d failed\n", prm.sa_id);
+ break;
+ }
+
+ if (copy_to_user((struct ioc_dpa_ipsec_sa_get_seq_num *)args,
+ &prm, sizeof(prm))) {
+ log_err("Could not copy SEQ number to user for SA %d\n",
+ prm.sa_id);
+ return -EINVAL;
+ }
+ break;
+ }
+
+ case DPA_IPSEC_IOC_SA_GET_OUT_PATH: {
+ struct ioc_dpa_ipsec_sa_get_out_path prm;
+
+ if (copy_from_user(&prm,
+ (struct ioc_dpa_ipsec_sa_get_out_path *)args,
+ sizeof(prm))) {
+ log_err("Could not copy from user out_path params\n");
+ return -EINVAL;
+ }
+
+ if (prm.sa_id < 0) {
+ log_err("Invalid input SA id\n");
+ return -EINVAL;
+ }
+
+ ret = dpa_ipsec_sa_get_out_path(prm.sa_id, &prm.fqid);
+ if (ret < 0) {
+ log_err("Get out path for SA %d failed\n", prm.sa_id);
+ break;
+ }
+
+ if (copy_to_user((struct ioc_dpa_ipsec_sa_get_out_path *)args,
+ &prm, sizeof(prm))) {
+ log_err("Could not copy out_path to user for SA %d\n",
+ prm.sa_id);
+ return -EINVAL;
+ }
+
+ break;
+ }
+
default:
log_err("Invalid DPA IPsec ioctl (0x%x)\n", cmd);
ret = -EINVAL;