X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fcrypto%2Fscheduler%2Frte_cryptodev_scheduler.h;h=3faea4099e408cbee7f45e660cb01a8389378c63;hb=15dfc1ecb39f921cac3c5d61e77cd51fa3c1eb23;hp=4d3de470202c78d98c5f719418a77405c3441cf2;hpb=4e30ead5e7ca886535e2b30632b2948d2aac1681;p=dpdk.git diff --git a/drivers/crypto/scheduler/rte_cryptodev_scheduler.h b/drivers/crypto/scheduler/rte_cryptodev_scheduler.h index 4d3de47020..3faea4099e 100644 --- a/drivers/crypto/scheduler/rte_cryptodev_scheduler.h +++ b/drivers/crypto/scheduler/rte_cryptodev_scheduler.h @@ -1,70 +1,63 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2017 Intel Corporation. All rights reserved. - * 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 Intel Corporation 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. +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2017 Intel Corporation */ #ifndef _RTE_CRYPTO_SCHEDULER_H #define _RTE_CRYPTO_SCHEDULER_H +/** + * @file rte_cryptodev_scheduler.h + * + * RTE Cryptodev Scheduler Device + * + * The RTE Cryptodev Scheduler Device allows the aggregation of multiple (slave) + * Cryptodevs into a single logical crypto device, and the scheduling the + * crypto operations to the slaves based on the mode of the specified mode of + * operation specified and supported. This implementation supports 3 modes of + * operation: round robin, packet-size based, and fail-over. + */ + +#include #include "rte_cryptodev_scheduler_operations.h" #ifdef __cplusplus extern "C" { #endif -/**< Maximum number of bonded devices per device */ +/** Maximum number of bonded devices per device */ #ifndef RTE_CRYPTODEV_SCHEDULER_MAX_NB_SLAVES #define RTE_CRYPTODEV_SCHEDULER_MAX_NB_SLAVES (8) #endif -/* round-robin scheduling mode */ +/** Maximum number of multi-core worker cores */ +#define RTE_CRYPTODEV_SCHEDULER_MAX_NB_WORKER_CORES (RTE_MAX_LCORE - 1) + +/** Round-robin scheduling mode string */ #define SCHEDULER_MODE_NAME_ROUND_ROBIN round-robin -/* packet-size based distribution scheduling mode */ +/** Packet-size based distribution scheduling mode string */ #define SCHEDULER_MODE_NAME_PKT_SIZE_DISTR packet-size-distr -/* fail-over mode */ +/** Fail-over scheduling mode string */ #define SCHEDULER_MODE_NAME_FAIL_OVER fail-over -/** +/** multi-core scheduling mode string */ +#define SCHEDULER_MODE_NAME_MULTI_CORE multi-core +/** * Crypto scheduler PMD operation modes */ enum rte_cryptodev_scheduler_mode { CDEV_SCHED_MODE_NOT_SET = 0, + /** User defined mode */ CDEV_SCHED_MODE_USERDEFINED, + /** Round-robin mode */ CDEV_SCHED_MODE_ROUNDROBIN, - /** packet-size based distribution mode */ + /** Packet-size based distribution mode */ CDEV_SCHED_MODE_PKT_SIZE_DISTR, - /** fail-over mode */ + /** Fail-over mode */ CDEV_SCHED_MODE_FAILOVER, + /** multi-core mode */ + CDEV_SCHED_MODE_MULTICORE, - CDEV_SCHED_MODE_COUNT /* number of modes */ + CDEV_SCHED_MODE_COUNT /**< number of modes */ }; #define RTE_CRYPTODEV_SCHEDULER_NAME_MAX_LEN (64) @@ -83,8 +76,9 @@ enum rte_cryptodev_schedule_option_type { /** * Threshold option structure */ +#define RTE_CRYPTODEV_SCHEDULER_PARAM_THRES "threshold" struct rte_cryptodev_scheduler_threshold_option { - uint32_t threshold; + uint32_t threshold; /**< Threshold for packet-size mode */ }; struct rte_cryptodev_scheduler; @@ -92,36 +86,50 @@ struct rte_cryptodev_scheduler; /** * Load a user defined scheduler * - * @param scheduler_id The target scheduler device ID - * scheduler Pointer to the user defined scheduler + * @param scheduler_id + * The target scheduler device ID + * @param scheduler + * Pointer to the user defined scheduler * * @return - * 0 if loading successful, negative integer if otherwise. + * - 0 if the scheduler is successfully loaded + * - -ENOTSUP if the operation is not supported. + * - -EBUSY if device is started. + * - -EINVAL if input values are invalid. */ int rte_cryptodev_scheduler_load_user_scheduler(uint8_t scheduler_id, struct rte_cryptodev_scheduler *scheduler); /** - * Attach a pre-configured crypto device to the scheduler + * Attach a crypto device to the scheduler * - * @param scheduler_id The target scheduler device ID - * slave_id crypto device ID to be attached + * @param scheduler_id + * The target scheduler device ID + * @param slave_id + * Crypto device ID to be attached * * @return - * 0 if attaching successful, negative int if otherwise. + * - 0 if the slave is attached. + * - -ENOTSUP if the operation is not supported. + * - -EBUSY if device is started. + * - -ENOMEM if the scheduler's slave list is full. */ int rte_cryptodev_scheduler_slave_attach(uint8_t scheduler_id, uint8_t slave_id); /** - * Detach a attached crypto device to the scheduler + * Detach a crypto device from the scheduler * - * @param scheduler_id The target scheduler device ID - * slave_id crypto device ID to be detached + * @param scheduler_id + * The target scheduler device ID + * @param slave_id + * Crypto device ID to be detached * * @return - * 0 if detaching successful, negative int if otherwise. + * - 0 if the slave is detached. + * - -ENOTSUP if the operation is not supported. + * - -EBUSY if device is started. */ int rte_cryptodev_scheduler_slave_detach(uint8_t scheduler_id, uint8_t slave_id); @@ -130,11 +138,15 @@ rte_cryptodev_scheduler_slave_detach(uint8_t scheduler_id, uint8_t slave_id); /** * Set the scheduling mode * - * @param scheduler_id The target scheduler device ID - * mode The scheduling mode + * @param scheduler_id + * The target scheduler device ID + * @param mode + * The scheduling mode * * @return - * 0 if attaching successful, negative integer if otherwise. + * - 0 if the mode is set. + * - -ENOTSUP if the operation is not supported. + * - -EBUSY if device is started. */ int rte_cryptodev_scheduler_mode_set(uint8_t scheduler_id, @@ -143,48 +155,30 @@ rte_cryptodev_scheduler_mode_set(uint8_t scheduler_id, /** * Get the current scheduling mode * - * @param scheduler_id The target scheduler device ID - * mode Pointer to write the scheduling mode - */ -enum rte_cryptodev_scheduler_mode -rte_cryptodev_scheduler_mode_get(uint8_t scheduler_id); - -/** - * @deprecated - * Set the scheduling mode - * - * @param scheduler_id The target scheduler device ID - * mode The scheduling mode - * - * @return - * 0 if attaching successful, negative integer if otherwise. - */ -__rte_deprecated -int -rte_crpytodev_scheduler_mode_set(uint8_t scheduler_id, - enum rte_cryptodev_scheduler_mode mode); - -/** - * @deprecated - * Get the current scheduling mode + * @param scheduler_id + * The target scheduler device ID * - * @param scheduler_id The target scheduler device ID - * mode Pointer to write the scheduling mode + * @return mode + * - non-negative enumerate value: the scheduling mode + * - -ENOTSUP if the operation is not supported. */ -__rte_deprecated enum rte_cryptodev_scheduler_mode -rte_crpytodev_scheduler_mode_get(uint8_t scheduler_id); +rte_cryptodev_scheduler_mode_get(uint8_t scheduler_id); /** * Set the crypto ops reordering feature on/off * - * @param dev_id The target scheduler device ID - * enable_reorder set the crypto op reordering feature - * 0: disable reordering - * 1: enable reordering + * @param scheduler_id + * The target scheduler device ID + * @param enable_reorder + * Set the crypto op reordering feature + * - 0: disable reordering + * - 1: enable reordering * * @return - * 0 if setting successful, negative integer if otherwise. + * - 0 if the ordering is set. + * - -ENOTSUP if the operation is not supported. + * - -EBUSY if device is started. */ int rte_cryptodev_scheduler_ordering_set(uint8_t scheduler_id, @@ -193,31 +187,30 @@ rte_cryptodev_scheduler_ordering_set(uint8_t scheduler_id, /** * Get the current crypto ops reordering feature * - * @param dev_id The target scheduler device ID + * @param scheduler_id + * The target scheduler device ID * * @return - * 0 if reordering is disabled - * 1 if reordering is enabled - * negative integer if otherwise. + * - 0 if reordering is disabled + * - 1 if reordering is enabled + * - -ENOTSUP if the operation is not supported. */ int rte_cryptodev_scheduler_ordering_get(uint8_t scheduler_id); /** - * Get the the attached slaves' count and/or ID + * Get the attached slaves' count and/or ID * * @param scheduler_id * The target scheduler device ID * @param slaves - * If successful, the function will write back - * all slaves' device IDs to it. This - * parameter SHALL either be an uint8_t array - * of RTE_CRYPTODEV_SCHEDULER_MAX_NB_SLAVES - * elements or NULL. + * If successful, the function will write back all slaves' device IDs to it. + * This parameter will either be an uint8_t array of + * RTE_CRYPTODEV_SCHEDULER_MAX_NB_SLAVES elements or NULL. * * @return * - non-negative number: the number of slaves attached - * - negative integer if error occurs. + * - -ENOTSUP if the operation is not supported. */ int rte_cryptodev_scheduler_slaves_get(uint8_t scheduler_id, uint8_t *slaves); @@ -225,7 +218,7 @@ rte_cryptodev_scheduler_slaves_get(uint8_t scheduler_id, uint8_t *slaves); /** * Set the mode specific option * - * @param dev_id + * @param scheduler_id * The target scheduler device ID * @param option_type * The option type enumerate @@ -244,7 +237,7 @@ rte_cryptodev_scheduler_option_set(uint8_t scheduler_id, /** * Set the mode specific option * - * @param dev_id + * @param scheduler_id * The target scheduler device ID * @param option_type * The option type enumerate @@ -266,17 +259,24 @@ typedef uint16_t (*rte_cryptodev_scheduler_burst_enqueue_t)(void *qp_ctx, typedef uint16_t (*rte_cryptodev_scheduler_burst_dequeue_t)(void *qp_ctx, struct rte_crypto_op **ops, uint16_t nb_ops); +/** The data structure associated with each mode of scheduler. */ struct rte_cryptodev_scheduler { - const char *name; - const char *description; - enum rte_cryptodev_scheduler_mode mode; + const char *name; /**< Scheduler name */ + const char *description; /**< Scheduler description */ + enum rte_cryptodev_scheduler_mode mode; /**< Scheduling mode */ + /** Pointer to scheduler operation structure */ struct rte_cryptodev_scheduler_ops *ops; }; +/** Round-robin mode scheduler */ extern struct rte_cryptodev_scheduler *roundrobin_scheduler; +/** Packet-size based distribution mode scheduler */ extern struct rte_cryptodev_scheduler *pkt_size_based_distr_scheduler; +/** Fail-over mode scheduler */ extern struct rte_cryptodev_scheduler *failover_scheduler; +/** multi-core mode scheduler */ +extern struct rte_cryptodev_scheduler *multicore_scheduler; #ifdef __cplusplus }