[dpdk-dev,v2,06/12] cryptodev: move vdev functions to a separate file
Checks
Commit Message
Move all functions handling virtual devices to a separate
header file "rte_cryptodev_vdev.h", in order to leave only
generic functions for any device in the rest of the files.
Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
---
drivers/crypto/aesni_gcm/aesni_gcm_pmd.c | 1 +
drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c | 1 +
drivers/crypto/armv8/rte_armv8_pmd.c | 1 +
drivers/crypto/kasumi/rte_kasumi_pmd.c | 1 +
drivers/crypto/null/null_crypto_pmd.c | 1 +
drivers/crypto/openssl/rte_openssl_pmd.c | 1 +
drivers/crypto/scheduler/scheduler_pmd.c | 44 +-----
drivers/crypto/scheduler/scheduler_pmd_ops.c | 1 +
drivers/crypto/snow3g/rte_snow3g_pmd.c | 1 +
drivers/crypto/zuc/rte_zuc_pmd.c | 1 +
lib/librte_cryptodev/Makefile | 1 +
lib/librte_cryptodev/rte_cryptodev.c | 127 ---------------
lib/librte_cryptodev/rte_cryptodev.h | 29 ----
lib/librte_cryptodev/rte_cryptodev_pmd.h | 18 ---
lib/librte_cryptodev/rte_cryptodev_vdev.h | 210 +++++++++++++++++++++++++
lib/librte_cryptodev/rte_cryptodev_version.map | 10 +-
16 files changed, 226 insertions(+), 222 deletions(-)
create mode 100644 lib/librte_cryptodev/rte_cryptodev_vdev.h
Comments
On 21/06/2017 7:28 AM, Pablo de Lara wrote:
> Move all functions handling virtual devices to a separate
> header file "rte_cryptodev_vdev.h", in order to leave only
> generic functions for any device in the rest of the files.
>
> Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
> ---
...
>
Acked-by: Declan Doherty <declan.doherty@intel.com>
23/06/2017 14:52, Declan Doherty:
> On 21/06/2017 7:28 AM, Pablo de Lara wrote:
> > Move all functions handling virtual devices to a separate
> > header file "rte_cryptodev_vdev.h", in order to leave only
> > generic functions for any device in the rest of the files.
> >
> > Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
>
> Acked-by: Declan Doherty <declan.doherty@intel.com>
This patch is moving some code from a .c to a .h.
The consequence is that driver are now compiling new functions
from the .h and require librte_kvargs to link with.
It is a build error in shared lib mode.
Please keep the code in a .c file if possible.
> -----Original Message-----
> From: Thomas Monjalon [mailto:thomas@monjalon.net]
> Sent: Tuesday, June 27, 2017 12:31 AM
> To: Doherty, Declan <declan.doherty@intel.com>; De Lara Guarch, Pablo
> <pablo.de.lara.guarch@intel.com>
> Cc: dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v2 06/12] cryptodev: move vdev functions
> to a separate file
>
> 23/06/2017 14:52, Declan Doherty:
> > On 21/06/2017 7:28 AM, Pablo de Lara wrote:
> > > Move all functions handling virtual devices to a separate header
> > > file "rte_cryptodev_vdev.h", in order to leave only generic
> > > functions for any device in the rest of the files.
> > >
> > > Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
> >
> > Acked-by: Declan Doherty <declan.doherty@intel.com>
>
> This patch is moving some code from a .c to a .h.
> The consequence is that driver are now compiling new functions from the .h
> and require librte_kvargs to link with.
> It is a build error in shared lib mode.
>
> Please keep the code in a .c file if possible.
Sorry about this. I just fixed it in the subtree, so pull it whenever you are ready.
Also, since ethdev have separated pci and vdev functions in separate .h files,
I preferred to be consistent and do the same.
Thanks,
Pablo
27/06/2017 11:51, De Lara Guarch, Pablo:
> From: Thomas Monjalon [mailto:thomas@monjalon.net]
> > 23/06/2017 14:52, Declan Doherty:
> > > On 21/06/2017 7:28 AM, Pablo de Lara wrote:
> > > > Move all functions handling virtual devices to a separate header
> > > > file "rte_cryptodev_vdev.h", in order to leave only generic
> > > > functions for any device in the rest of the files.
> > > >
> > > > Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
> > >
> > > Acked-by: Declan Doherty <declan.doherty@intel.com>
> >
> > This patch is moving some code from a .c to a .h.
> > The consequence is that driver are now compiling new functions from the .h
> > and require librte_kvargs to link with.
> > It is a build error in shared lib mode.
> >
> > Please keep the code in a .c file if possible.
>
> Sorry about this. I just fixed it in the subtree, so pull it whenever you are ready.
> Also, since ethdev have separated pci and vdev functions in separate .h files,
> I preferred to be consistent and do the same.
There is no reason to implement these functions in .h files.
I prefer to keep them in a .c file and just export the proto in .h.
On 6/27/2017 3:28 PM, Thomas Monjalon wrote:
> 27/06/2017 11:51, De Lara Guarch, Pablo:
>> From: Thomas Monjalon [mailto:thomas@monjalon.net]
>>> 23/06/2017 14:52, Declan Doherty:
>>>> On 21/06/2017 7:28 AM, Pablo de Lara wrote:
>>>>> Move all functions handling virtual devices to a separate header
>>>>> file "rte_cryptodev_vdev.h", in order to leave only generic
>>>>> functions for any device in the rest of the files.
>>>>>
>>>>> Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
>>>>
>>>> Acked-by: Declan Doherty <declan.doherty@intel.com>
>>>
>>> This patch is moving some code from a .c to a .h.
>>> The consequence is that driver are now compiling new functions from the .h
>>> and require librte_kvargs to link with.
>>> It is a build error in shared lib mode.
>>>
>>> Please keep the code in a .c file if possible.
>>
>> Sorry about this. I just fixed it in the subtree, so pull it whenever you are ready.
>> Also, since ethdev have separated pci and vdev functions in separate .h files,
>> I preferred to be consistent and do the same.
>
> There is no reason to implement these functions in .h files.
> I prefer to keep them in a .c file and just export the proto in .h.
This is same in the eth_dev too.
These are helper functions, and implementing them in .h file has the
benefit of function goes into PMD library, and there is no dependency
from PMDs to librte_ether for these functions (there are dependencies
for other functions ..).
It looks acceptable for me for helper functions to be implemented in
header file. But if we decide to move them into .c file, .map file
should be updated to export them, and I suppose ethdev also should be
updated to be compatible.
Thanks,
ferruh
27/06/2017 17:11, Ferruh Yigit:
> On 6/27/2017 3:28 PM, Thomas Monjalon wrote:
> > 27/06/2017 11:51, De Lara Guarch, Pablo:
> >> From: Thomas Monjalon [mailto:thomas@monjalon.net]
> >>> 23/06/2017 14:52, Declan Doherty:
> >>>> On 21/06/2017 7:28 AM, Pablo de Lara wrote:
> >>>>> Move all functions handling virtual devices to a separate header
> >>>>> file "rte_cryptodev_vdev.h", in order to leave only generic
> >>>>> functions for any device in the rest of the files.
> >>>>>
> >>>>> Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
> >>>>
> >>>> Acked-by: Declan Doherty <declan.doherty@intel.com>
> >>>
> >>> This patch is moving some code from a .c to a .h.
> >>> The consequence is that driver are now compiling new functions from the .h
> >>> and require librte_kvargs to link with.
> >>> It is a build error in shared lib mode.
> >>>
> >>> Please keep the code in a .c file if possible.
> >>
> >> Sorry about this. I just fixed it in the subtree, so pull it whenever you are ready.
> >> Also, since ethdev have separated pci and vdev functions in separate .h files,
> >> I preferred to be consistent and do the same.
> >
> > There is no reason to implement these functions in .h files.
> > I prefer to keep them in a .c file and just export the proto in .h.
>
> This is same in the eth_dev too.
>
> These are helper functions, and implementing them in .h file has the
> benefit of function goes into PMD library, and there is no dependency
> from PMDs to librte_ether for these functions (there are dependencies
> for other functions ..).
>
> It looks acceptable for me for helper functions to be implemented in
> header file. But if we decide to move them into .c file, .map file
> should be updated to export them, and I suppose ethdev also should be
> updated to be compatible.
Yes we should avoid adding code in .h.
It is accepted only for performance reasons.
ethdev can be reworked later.
cryptodev can be improved now and avoid adding rte_devargs deps on PMDs.
> -----Original Message-----
> From: Thomas Monjalon [mailto:thomas@monjalon.net]
> Sent: Tuesday, June 27, 2017 5:09 PM
> To: Yigit, Ferruh <ferruh.yigit@intel.com>
> Cc: dev@dpdk.org; De Lara Guarch, Pablo
> <pablo.de.lara.guarch@intel.com>; Doherty, Declan
> <declan.doherty@intel.com>
> Subject: Re: [dpdk-dev] [PATCH v2 06/12] cryptodev: move vdev functions
> to a separate file
>
> 27/06/2017 17:11, Ferruh Yigit:
> > On 6/27/2017 3:28 PM, Thomas Monjalon wrote:
> > > 27/06/2017 11:51, De Lara Guarch, Pablo:
> > >> From: Thomas Monjalon [mailto:thomas@monjalon.net]
> > >>> 23/06/2017 14:52, Declan Doherty:
> > >>>> On 21/06/2017 7:28 AM, Pablo de Lara wrote:
> > >>>>> Move all functions handling virtual devices to a separate header
> > >>>>> file "rte_cryptodev_vdev.h", in order to leave only generic
> > >>>>> functions for any device in the rest of the files.
> > >>>>>
> > >>>>> Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
> > >>>>
> > >>>> Acked-by: Declan Doherty <declan.doherty@intel.com>
> > >>>
> > >>> This patch is moving some code from a .c to a .h.
> > >>> The consequence is that driver are now compiling new functions
> > >>> from the .h and require librte_kvargs to link with.
> > >>> It is a build error in shared lib mode.
> > >>>
> > >>> Please keep the code in a .c file if possible.
> > >>
> > >> Sorry about this. I just fixed it in the subtree, so pull it whenever you
> are ready.
> > >> Also, since ethdev have separated pci and vdev functions in
> > >> separate .h files, I preferred to be consistent and do the same.
> > >
> > > There is no reason to implement these functions in .h files.
> > > I prefer to keep them in a .c file and just export the proto in .h.
> >
> > This is same in the eth_dev too.
> >
> > These are helper functions, and implementing them in .h file has the
> > benefit of function goes into PMD library, and there is no dependency
> > from PMDs to librte_ether for these functions (there are dependencies
> > for other functions ..).
> >
> > It looks acceptable for me for helper functions to be implemented in
> > header file. But if we decide to move them into .c file, .map file
> > should be updated to export them, and I suppose ethdev also should be
> > updated to be compatible.
>
> Yes we should avoid adding code in .h.
> It is accepted only for performance reasons.
> ethdev can be reworked later.
> cryptodev can be improved now and avoid adding rte_devargs deps on
> PMDs.
Ok, will make those changes shortly.
Pablo
Hi,
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of De Lara Guarch,
> Pablo
> Sent: Tuesday, June 27, 2017 6:12 PM
> To: Thomas Monjalon <thomas@monjalon.net>; Yigit, Ferruh
> <ferruh.yigit@intel.com>
> Cc: dev@dpdk.org; Doherty, Declan <declan.doherty@intel.com>
> Subject: Re: [dpdk-dev] [PATCH v2 06/12] cryptodev: move vdev functions
> to a separate file
>
>
>
> > -----Original Message-----
> > From: Thomas Monjalon [mailto:thomas@monjalon.net]
> > Sent: Tuesday, June 27, 2017 5:09 PM
> > To: Yigit, Ferruh <ferruh.yigit@intel.com>
> > Cc: dev@dpdk.org; De Lara Guarch, Pablo
> > <pablo.de.lara.guarch@intel.com>; Doherty, Declan
> > <declan.doherty@intel.com>
> > Subject: Re: [dpdk-dev] [PATCH v2 06/12] cryptodev: move vdev
> > functions to a separate file
> >
> > 27/06/2017 17:11, Ferruh Yigit:
> > > On 6/27/2017 3:28 PM, Thomas Monjalon wrote:
> > > > 27/06/2017 11:51, De Lara Guarch, Pablo:
> > > >> From: Thomas Monjalon [mailto:thomas@monjalon.net]
> > > >>> 23/06/2017 14:52, Declan Doherty:
> > > >>>> On 21/06/2017 7:28 AM, Pablo de Lara wrote:
> > > >>>>> Move all functions handling virtual devices to a separate
> > > >>>>> header file "rte_cryptodev_vdev.h", in order to leave only
> > > >>>>> generic functions for any device in the rest of the files.
> > > >>>>>
> > > >>>>> Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
> > > >>>>
> > > >>>> Acked-by: Declan Doherty <declan.doherty@intel.com>
> > > >>>
> > > >>> This patch is moving some code from a .c to a .h.
> > > >>> The consequence is that driver are now compiling new functions
> > > >>> from the .h and require librte_kvargs to link with.
> > > >>> It is a build error in shared lib mode.
> > > >>>
> > > >>> Please keep the code in a .c file if possible.
> > > >>
> > > >> Sorry about this. I just fixed it in the subtree, so pull it
> > > >> whenever you
> > are ready.
> > > >> Also, since ethdev have separated pci and vdev functions in
> > > >> separate .h files, I preferred to be consistent and do the same.
> > > >
> > > > There is no reason to implement these functions in .h files.
> > > > I prefer to keep them in a .c file and just export the proto in .h.
> > >
> > > This is same in the eth_dev too.
> > >
> > > These are helper functions, and implementing them in .h file has the
> > > benefit of function goes into PMD library, and there is no
> > > dependency from PMDs to librte_ether for these functions (there are
> > > dependencies for other functions ..).
> > >
> > > It looks acceptable for me for helper functions to be implemented in
> > > header file. But if we decide to move them into .c file, .map file
> > > should be updated to export them, and I suppose ethdev also should
> > > be updated to be compatible.
> >
> > Yes we should avoid adding code in .h.
> > It is accepted only for performance reasons.
> > ethdev can be reworked later.
> > cryptodev can be improved now and avoid adding rte_devargs deps on
> > PMDs.
>
> Ok, will make those changes shortly.
I have implemented these functions in a separated .c file and pushed it to dpdk-next-crypto.
Pablo
>
> Pablo
@@ -35,6 +35,7 @@
#include <rte_hexdump.h>
#include <rte_cryptodev.h>
#include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
#include <rte_vdev.h>
#include <rte_malloc.h>
#include <rte_cpuflags.h>
@@ -34,6 +34,7 @@
#include <rte_hexdump.h>
#include <rte_cryptodev.h>
#include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
#include <rte_vdev.h>
#include <rte_malloc.h>
#include <rte_cpuflags.h>
@@ -36,6 +36,7 @@
#include <rte_hexdump.h>
#include <rte_cryptodev.h>
#include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
#include <rte_vdev.h>
#include <rte_malloc.h>
#include <rte_cpuflags.h>
@@ -35,6 +35,7 @@
#include <rte_hexdump.h>
#include <rte_cryptodev.h>
#include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
#include <rte_vdev.h>
#include <rte_malloc.h>
#include <rte_cpuflags.h>
@@ -33,6 +33,7 @@
#include <rte_common.h>
#include <rte_config.h>
#include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
#include <rte_vdev.h>
#include <rte_malloc.h>
@@ -34,6 +34,7 @@
#include <rte_hexdump.h>
#include <rte_cryptodev.h>
#include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
#include <rte_vdev.h>
#include <rte_malloc.h>
#include <rte_cpuflags.h>
@@ -33,6 +33,7 @@
#include <rte_hexdump.h>
#include <rte_cryptodev.h>
#include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
#include <rte_vdev.h>
#include <rte_malloc.h>
#include <rte_cpuflags.h>
@@ -221,41 +222,6 @@ cryptodev_scheduler_remove(struct rte_vdev_device *vdev)
return 0;
}
-/** Parse integer from integer argument */
-static int
-parse_integer_arg(const char *key __rte_unused,
- const char *value, void *extra_args)
-{
- int *i = (int *) extra_args;
-
- *i = atoi(value);
- if (*i < 0) {
- CS_LOG_ERR("Argument has to be positive.\n");
- return -EINVAL;
- }
-
- return 0;
-}
-
-/** Parse name */
-static int
-parse_name_arg(const char *key __rte_unused,
- const char *value, void *extra_args)
-{
- struct rte_crypto_vdev_init_params *params = extra_args;
-
- if (strlen(value) >= RTE_CRYPTODEV_NAME_MAX_LEN - 1) {
- CS_LOG_ERR("Invalid name %s, should be less than "
- "%u bytes.\n", value,
- RTE_CRYPTODEV_NAME_MAX_LEN - 1);
- return -EINVAL;
- }
-
- strncpy(params->name, value, RTE_CRYPTODEV_NAME_MAX_LEN);
-
- return 0;
-}
-
/** Parse slave */
static int
parse_slave_arg(const char *key __rte_unused,
@@ -338,26 +304,26 @@ scheduler_parse_init_params(struct scheduler_init_params *params,
ret = rte_kvargs_process(kvlist,
RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG,
- &parse_integer_arg,
+ &rte_cryptodev_vdev_parse_integer_arg,
¶ms->def_p.max_nb_queue_pairs);
if (ret < 0)
goto free_kvlist;
ret = rte_kvargs_process(kvlist,
RTE_CRYPTODEV_VDEV_MAX_NB_SESS_ARG,
- &parse_integer_arg,
+ &rte_cryptodev_vdev_parse_integer_arg,
¶ms->def_p.max_nb_sessions);
if (ret < 0)
goto free_kvlist;
ret = rte_kvargs_process(kvlist, RTE_CRYPTODEV_VDEV_SOCKET_ID,
- &parse_integer_arg,
+ &rte_cryptodev_vdev_parse_integer_arg,
¶ms->def_p.socket_id);
if (ret < 0)
goto free_kvlist;
ret = rte_kvargs_process(kvlist, RTE_CRYPTODEV_VDEV_NAME,
- &parse_name_arg,
+ &rte_cryptodev_vdev_parse_name_arg,
¶ms->def_p);
if (ret < 0)
goto free_kvlist;
@@ -37,6 +37,7 @@
#include <rte_dev.h>
#include <rte_cryptodev.h>
#include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
#include <rte_reorder.h>
#include "scheduler_pmd_private.h"
@@ -35,6 +35,7 @@
#include <rte_hexdump.h>
#include <rte_cryptodev.h>
#include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
#include <rte_vdev.h>
#include <rte_malloc.h>
#include <rte_cpuflags.h>
@@ -35,6 +35,7 @@
#include <rte_hexdump.h>
#include <rte_cryptodev.h>
#include <rte_cryptodev_pmd.h>
+#include <rte_cryptodev_vdev.h>
#include <rte_vdev.h>
#include <rte_malloc.h>
#include <rte_cpuflags.h>
@@ -48,6 +48,7 @@ SYMLINK-y-include += rte_crypto.h
SYMLINK-y-include += rte_crypto_sym.h
SYMLINK-y-include += rte_cryptodev.h
SYMLINK-y-include += rte_cryptodev_pmd.h
+SYMLINK-y-include += rte_cryptodev_vdev.h
# versioning export map
EXPORT_MAP := rte_cryptodev_version.map
@@ -101,18 +101,6 @@ struct rte_cryptodev_callback {
uint32_t active; /**< Callback is executing */
};
-#define RTE_CRYPTODEV_VDEV_NAME ("name")
-#define RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG ("max_nb_queue_pairs")
-#define RTE_CRYPTODEV_VDEV_MAX_NB_SESS_ARG ("max_nb_sessions")
-#define RTE_CRYPTODEV_VDEV_SOCKET_ID ("socket_id")
-
-static const char *cryptodev_vdev_valid_params[] = {
- RTE_CRYPTODEV_VDEV_NAME,
- RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG,
- RTE_CRYPTODEV_VDEV_MAX_NB_SESS_ARG,
- RTE_CRYPTODEV_VDEV_SOCKET_ID
-};
-
/**
* The crypto cipher algorithm strings identifiers.
* It could be used in application command line.
@@ -233,89 +221,6 @@ rte_crypto_auth_operation_strings[] = {
[RTE_CRYPTO_AUTH_OP_GENERATE] = "generate"
};
-/** Parse integer from integer argument */
-static int
-parse_integer_arg(const char *key __rte_unused,
- const char *value, void *extra_args)
-{
- int *i = extra_args;
-
- *i = atoi(value);
- if (*i < 0) {
- CDEV_LOG_ERR("Argument has to be positive.");
- return -1;
- }
-
- return 0;
-}
-
-/** Parse name */
-static int
-parse_name_arg(const char *key __rte_unused,
- const char *value, void *extra_args)
-{
- struct rte_crypto_vdev_init_params *params = extra_args;
-
- if (strlen(value) >= RTE_CRYPTODEV_NAME_MAX_LEN - 1) {
- CDEV_LOG_ERR("Invalid name %s, should be less than "
- "%u bytes", value,
- RTE_CRYPTODEV_NAME_MAX_LEN - 1);
- return -1;
- }
-
- strncpy(params->name, value, RTE_CRYPTODEV_NAME_MAX_LEN);
-
- return 0;
-}
-
-int
-rte_cryptodev_parse_vdev_init_params(struct rte_crypto_vdev_init_params *params,
- const char *input_args)
-{
- struct rte_kvargs *kvlist = NULL;
- int ret = 0;
-
- if (params == NULL)
- return -EINVAL;
-
- if (input_args) {
- kvlist = rte_kvargs_parse(input_args,
- cryptodev_vdev_valid_params);
- if (kvlist == NULL)
- return -1;
-
- ret = rte_kvargs_process(kvlist,
- RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG,
- &parse_integer_arg,
- ¶ms->max_nb_queue_pairs);
- if (ret < 0)
- goto free_kvlist;
-
- ret = rte_kvargs_process(kvlist,
- RTE_CRYPTODEV_VDEV_MAX_NB_SESS_ARG,
- &parse_integer_arg,
- ¶ms->max_nb_sessions);
- if (ret < 0)
- goto free_kvlist;
-
- ret = rte_kvargs_process(kvlist, RTE_CRYPTODEV_VDEV_SOCKET_ID,
- &parse_integer_arg,
- ¶ms->socket_id);
- if (ret < 0)
- goto free_kvlist;
-
- ret = rte_kvargs_process(kvlist, RTE_CRYPTODEV_VDEV_NAME,
- &parse_name_arg,
- params);
- if (ret < 0)
- goto free_kvlist;
- }
-
-free_kvlist:
- rte_kvargs_free(kvlist);
- return ret;
-}
-
const struct rte_cryptodev_symmetric_capability *
rte_cryptodev_sym_capability_get(uint8_t dev_id,
const struct rte_cryptodev_sym_capability_idx *idx)
@@ -645,38 +550,6 @@ rte_cryptodev_pmd_release_device(struct rte_cryptodev *cryptodev)
return 0;
}
-struct rte_cryptodev *
-rte_cryptodev_pmd_virtual_dev_init(const char *name, size_t dev_private_size,
- int socket_id, struct rte_vdev_device *vdev)
-{
- struct rte_cryptodev *cryptodev;
-
- /* allocate device structure */
- cryptodev = rte_cryptodev_pmd_allocate(name, socket_id);
- if (cryptodev == NULL)
- return NULL;
-
- /* allocate private device structure */
- if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
- cryptodev->data->dev_private =
- rte_zmalloc_socket("cryptodev device private",
- dev_private_size,
- RTE_CACHE_LINE_SIZE,
- socket_id);
-
- if (cryptodev->data->dev_private == NULL)
- rte_panic("Cannot allocate memzone for private device"
- " data");
- }
-
- cryptodev->device = &vdev->device;
-
- /* initialise user call-back tail queue */
- TAILQ_INIT(&(cryptodev->link_intr_cbs));
-
- return cryptodev;
-}
-
int
rte_cryptodev_pci_probe(struct rte_pci_driver *pci_drv,
struct rte_pci_device *pci_dev)
@@ -386,35 +386,6 @@ struct rte_cryptodev_stats {
#define RTE_CRYPTODEV_NAME_MAX_LEN (64)
/**< Max length of name of crypto PMD */
-#define RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS 8
-#define RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS 2048
-
-/**
- * @internal
- * Initialisation parameters for virtual crypto devices
- */
-struct rte_crypto_vdev_init_params {
- unsigned max_nb_queue_pairs;
- unsigned max_nb_sessions;
- uint8_t socket_id;
- char name[RTE_CRYPTODEV_NAME_MAX_LEN];
-};
-
-/**
- * Parse virtual device initialisation parameters input arguments
- * @internal
- *
- * @params params Initialisation parameters with defaults set.
- * @params input_args Command line arguments
- *
- * @return
- * 0 on successful parse
- * <0 on failure to parse
- */
-int
-rte_cryptodev_parse_vdev_init_params(
- struct rte_crypto_vdev_init_params *params,
- const char *input_args);
/**
* Create a virtual crypto device
@@ -456,24 +456,6 @@ struct rte_cryptodev *
rte_cryptodev_pmd_allocate(const char *name, int socket_id);
/**
- * Creates a new virtual crypto device and returns the pointer
- * to that device.
- *
- * @param name PMD type name
- * @param dev_private_size Size of crypto PMDs private data
- * @param socket_id Socket to allocate resources on.
- * @param vdev Pointer to virtual device structure.
- *
- * @return
- * - Cryptodev pointer if device is successfully created.
- * - NULL if device cannot be created.
- */
-struct rte_cryptodev *
-rte_cryptodev_pmd_virtual_dev_init(const char *name, size_t dev_private_size,
- int socket_id, struct rte_vdev_device *vdev);
-
-
-/**
* Function for internal use by dummy drivers primarily, e.g. ring-based
* driver.
* Release the specified cryptodev device.
new file mode 100644
@@ -0,0 +1,210 @@
+/*-
+ * BSD LICENSE
+ *
+ * Copyright(c) 2017 Intel Corporation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of the copyright holder nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RTE_CRYPTODEV_VDEV_H_
+#define _RTE_CRYPTODEV_VDEV_H_
+
+#include <rte_vdev.h>
+
+#define RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_QUEUE_PAIRS 8
+#define RTE_CRYPTODEV_VDEV_DEFAULT_MAX_NB_SESSIONS 2048
+
+#define RTE_CRYPTODEV_VDEV_NAME ("name")
+#define RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG ("max_nb_queue_pairs")
+#define RTE_CRYPTODEV_VDEV_MAX_NB_SESS_ARG ("max_nb_sessions")
+#define RTE_CRYPTODEV_VDEV_SOCKET_ID ("socket_id")
+
+static const char * const cryptodev_vdev_valid_params[] = {
+ RTE_CRYPTODEV_VDEV_NAME,
+ RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG,
+ RTE_CRYPTODEV_VDEV_MAX_NB_SESS_ARG,
+ RTE_CRYPTODEV_VDEV_SOCKET_ID
+};
+
+/**
+ * @internal
+ * Initialisation parameters for virtual crypto devices
+ */
+struct rte_crypto_vdev_init_params {
+ unsigned int max_nb_queue_pairs;
+ unsigned int max_nb_sessions;
+ uint8_t socket_id;
+ char name[RTE_CRYPTODEV_NAME_MAX_LEN];
+};
+
+/**
+ * @internal
+ * Parse name from argument
+ */
+static int
+rte_cryptodev_vdev_parse_name_arg(const char *key __rte_unused,
+ const char *value, void *extra_args)
+{
+ struct rte_crypto_vdev_init_params *params = extra_args;
+
+ if (strlen(value) >= RTE_CRYPTODEV_NAME_MAX_LEN - 1) {
+ CDEV_LOG_ERR("Invalid name %s, should be less than "
+ "%u bytes", value,
+ RTE_CRYPTODEV_NAME_MAX_LEN - 1);
+ return -1;
+ }
+
+ strncpy(params->name, value, RTE_CRYPTODEV_NAME_MAX_LEN);
+
+ return 0;
+}
+
+/**
+ * @internal
+ * Parse integer from argument
+ */
+static int
+rte_cryptodev_vdev_parse_integer_arg(const char *key __rte_unused,
+ const char *value, void *extra_args)
+{
+ int *i = extra_args;
+
+ *i = atoi(value);
+ if (*i < 0) {
+ CDEV_LOG_ERR("Argument has to be positive.");
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ * @internal
+ * Creates a new virtual crypto device and returns the pointer
+ * to that device.
+ *
+ * @param name PMD type name
+ * @param dev_private_size Size of crypto PMDs private data
+ * @param socket_id Socket to allocate resources on.
+ * @param vdev Pointer to virtual device structure.
+ *
+ * @return
+ * - Cryptodev pointer if device is successfully created.
+ * - NULL if device cannot be created.
+ */
+static inline struct rte_cryptodev *
+rte_cryptodev_pmd_virtual_dev_init(const char *name, size_t dev_private_size,
+ int socket_id, struct rte_vdev_device *vdev)
+{
+ struct rte_cryptodev *cryptodev;
+
+ /* allocate device structure */
+ cryptodev = rte_cryptodev_pmd_allocate(name, socket_id);
+ if (cryptodev == NULL)
+ return NULL;
+
+ /* allocate private device structure */
+ if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
+ cryptodev->data->dev_private =
+ rte_zmalloc_socket("cryptodev device private",
+ dev_private_size,
+ RTE_CACHE_LINE_SIZE,
+ socket_id);
+
+ if (cryptodev->data->dev_private == NULL)
+ rte_panic("Cannot allocate memzone for private device"
+ " data");
+ }
+
+ cryptodev->device = &vdev->device;
+
+ /* initialise user call-back tail queue */
+ TAILQ_INIT(&(cryptodev->link_intr_cbs));
+
+ return cryptodev;
+}
+
+/**
+ * @internal
+ * Parse virtual device initialisation parameters input arguments
+ *
+ * @params params Initialisation parameters with defaults set.
+ * @params input_args Command line arguments
+ *
+ * @return
+ * 0 on successful parse
+ * <0 on failure to parse
+ */
+static inline int
+rte_cryptodev_parse_vdev_init_params(struct rte_crypto_vdev_init_params *params,
+ const char *input_args)
+{
+ struct rte_kvargs *kvlist = NULL;
+ int ret = 0;
+
+ if (params == NULL)
+ return -EINVAL;
+
+ if (input_args) {
+ kvlist = rte_kvargs_parse(input_args,
+ cryptodev_vdev_valid_params);
+ if (kvlist == NULL)
+ return -1;
+
+ ret = rte_kvargs_process(kvlist,
+ RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG,
+ &rte_cryptodev_vdev_parse_integer_arg,
+ ¶ms->max_nb_queue_pairs);
+ if (ret < 0)
+ goto free_kvlist;
+
+ ret = rte_kvargs_process(kvlist,
+ RTE_CRYPTODEV_VDEV_MAX_NB_SESS_ARG,
+ &rte_cryptodev_vdev_parse_integer_arg,
+ ¶ms->max_nb_sessions);
+ if (ret < 0)
+ goto free_kvlist;
+
+ ret = rte_kvargs_process(kvlist, RTE_CRYPTODEV_VDEV_SOCKET_ID,
+ &rte_cryptodev_vdev_parse_integer_arg,
+ ¶ms->socket_id);
+ if (ret < 0)
+ goto free_kvlist;
+
+ ret = rte_kvargs_process(kvlist, RTE_CRYPTODEV_VDEV_NAME,
+ &rte_cryptodev_vdev_parse_name_arg,
+ params);
+ if (ret < 0)
+ goto free_kvlist;
+ }
+
+free_kvlist:
+ rte_kvargs_free(kvlist);
+ return ret;
+}
+
+#endif /* _RTE_CRYPTODEV_VDEV_H_ */
@@ -15,7 +15,6 @@ DPDK_16.04 {
rte_cryptodev_pmd_allocate;
rte_cryptodev_pmd_callback_process;
rte_cryptodev_pmd_release_device;
- rte_cryptodev_pmd_virtual_dev_init;
rte_cryptodev_sym_session_create;
rte_cryptodev_sym_session_free;
rte_cryptodev_socket_id;
@@ -32,20 +31,13 @@ DPDK_16.04 {
local: *;
};
-DPDK_16.07 {
- global:
-
- rte_cryptodev_parse_vdev_init_params;
-
-} DPDK_16.04;
-
DPDK_16.11 {
global:
rte_cryptodev_pci_probe;
rte_cryptodev_pci_remove;
-} DPDK_16.07;
+} DPDK_16.04;
DPDK_17.02 {
global: