DPDK  18.08.1
rte_cryptodev_pmd.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2015-2016 Intel Corporation.
3  */
4 
5 #ifndef _RTE_CRYPTODEV_PMD_H_
6 #define _RTE_CRYPTODEV_PMD_H_
7 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19 
20 #include <string.h>
21 
22 #include <rte_config.h>
23 #include <rte_dev.h>
24 #include <rte_malloc.h>
25 #include <rte_mbuf.h>
26 #include <rte_mempool.h>
27 #include <rte_log.h>
28 #include <rte_common.h>
29 
30 #include "rte_crypto.h"
31 #include "rte_cryptodev.h"
32 
33 
34 #define RTE_CRYPTODEV_PMD_DEFAULT_MAX_NB_QUEUE_PAIRS 8
35 
36 #define RTE_CRYPTODEV_PMD_NAME_ARG ("name")
37 #define RTE_CRYPTODEV_PMD_MAX_NB_QP_ARG ("max_nb_queue_pairs")
38 #define RTE_CRYPTODEV_PMD_SOCKET_ID_ARG ("socket_id")
39 
40 
41 static const char * const cryptodev_pmd_valid_params[] = {
42  RTE_CRYPTODEV_PMD_NAME_ARG,
43  RTE_CRYPTODEV_PMD_MAX_NB_QP_ARG,
44  RTE_CRYPTODEV_PMD_SOCKET_ID_ARG
45 };
46 
51 struct rte_cryptodev_pmd_init_params {
52  char name[RTE_CRYPTODEV_NAME_MAX_LEN];
53  size_t private_data_size;
54  int socket_id;
55  unsigned int max_nb_queue_pairs;
56 };
57 
60  struct rte_cryptodev *devs;
61  struct rte_cryptodev_data *data[RTE_CRYPTO_MAX_DEVS];
63  uint8_t nb_devs;
64  uint8_t max_devs;
65 };
66 
67 /* Cryptodev driver, containing the driver ID */
68 struct cryptodev_driver {
69  TAILQ_ENTRY(cryptodev_driver) next;
70  const struct rte_driver *driver;
71  uint8_t id;
72 };
73 
76 
86 struct rte_cryptodev *
87 rte_cryptodev_pmd_get_dev(uint8_t dev_id);
88 
97 struct rte_cryptodev *
98 rte_cryptodev_pmd_get_named_dev(const char *name);
99 
108 unsigned int
109 rte_cryptodev_pmd_is_valid_dev(uint8_t dev_id);
110 
114 extern struct rte_cryptodev *rte_cryptodevs;
115 
116 
131 typedef int (*cryptodev_configure_t)(struct rte_cryptodev *dev,
132  struct rte_cryptodev_config *config);
133 
141 typedef int (*cryptodev_start_t)(struct rte_cryptodev *dev);
142 
148 typedef void (*cryptodev_stop_t)(struct rte_cryptodev *dev);
149 
158 typedef int (*cryptodev_close_t)(struct rte_cryptodev *dev);
159 
160 
167 typedef void (*cryptodev_stats_get_t)(struct rte_cryptodev *dev,
168  struct rte_cryptodev_stats *stats);
169 
170 
176 typedef void (*cryptodev_stats_reset_t)(struct rte_cryptodev *dev);
177 
178 
184 typedef void (*cryptodev_info_get_t)(struct rte_cryptodev *dev,
185  struct rte_cryptodev_info *dev_info);
186 
198 typedef int (*cryptodev_queue_pair_setup_t)(struct rte_cryptodev *dev,
199  uint16_t qp_id, const struct rte_cryptodev_qp_conf *qp_conf,
200  int socket_id, struct rte_mempool *session_pool);
201 
213  uint16_t qp_id);
214 
222 typedef uint32_t (*cryptodev_queue_pair_count_t)(struct rte_cryptodev *dev);
223 
237  struct rte_cryptodev *dev, unsigned nb_objs,
238  unsigned obj_cache_size, int socket_id);
239 
240 
251  struct rte_cryptodev *dev);
262  struct rte_cryptodev *dev);
263 
279  struct rte_crypto_sym_xform *xform,
280  struct rte_cryptodev_sym_session *session,
281  struct rte_mempool *mp);
297  struct rte_crypto_asym_xform *xform,
298  struct rte_cryptodev_asym_session *session,
299  struct rte_mempool *mp);
306 typedef void (*cryptodev_sym_free_session_t)(struct rte_cryptodev *dev,
307  struct rte_cryptodev_sym_session *sess);
314 typedef void (*cryptodev_asym_free_session_t)(struct rte_cryptodev *dev,
315  struct rte_cryptodev_asym_session *sess);
316 
350 };
351 
352 
364 struct rte_cryptodev *
365 rte_cryptodev_pmd_allocate(const char *name, int socket_id);
366 
377 extern int
379 
380 
398 int
399 rte_cryptodev_pmd_parse_input_args(
400  struct rte_cryptodev_pmd_init_params *params,
401  const char *args);
402 
417 struct rte_cryptodev *
418 rte_cryptodev_pmd_create(const char *name,
419  struct rte_device *device,
420  struct rte_cryptodev_pmd_init_params *params);
421 
434 int
435 rte_cryptodev_pmd_destroy(struct rte_cryptodev *cryptodev);
436 
448  enum rte_cryptodev_event_type event);
449 
454 int
455 rte_cryptodev_pmd_create_dev_name(char *name, const char *dev_name_prefix);
456 
469 uint8_t rte_cryptodev_allocate_driver(struct cryptodev_driver *crypto_drv,
470  const struct rte_driver *drv);
471 
472 
473 #define RTE_PMD_REGISTER_CRYPTO_DRIVER(crypto_drv, drv, driver_id)\
474 RTE_INIT(init_ ##driver_id)\
475 {\
476  driver_id = rte_cryptodev_allocate_driver(&crypto_drv, &(drv));\
477 }
478 
479 static inline void *
480 get_sym_session_private_data(const struct rte_cryptodev_sym_session *sess,
481  uint8_t driver_id) {
482  return sess->sess_private_data[driver_id];
483 }
484 
485 static inline void
486 set_sym_session_private_data(struct rte_cryptodev_sym_session *sess,
487  uint8_t driver_id, void *private_data)
488 {
489  sess->sess_private_data[driver_id] = private_data;
490 }
491 
492 static inline void *
493 get_asym_session_private_data(const struct rte_cryptodev_asym_session *sess,
494  uint8_t driver_id) {
495  return sess->sess_private_data[driver_id];
496 }
497 
498 static inline void
499 set_asym_session_private_data(struct rte_cryptodev_asym_session *sess,
500  uint8_t driver_id, void *private_data)
501 {
502  sess->sess_private_data[driver_id] = private_data;
503 }
504 
505 #ifdef __cplusplus
506 }
507 #endif
508 
509 #endif /* _RTE_CRYPTODEV_PMD_H_ */