xref: /dpdk/lib/bbdev/rte_bbdev_pmd.h (revision 353e3639d458f5cdaf3d938aade25579fa490b1b)
199a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
299a2dd95SBruce Richardson  * Copyright(c) 2017 Intel Corporation
399a2dd95SBruce Richardson  */
499a2dd95SBruce Richardson 
599a2dd95SBruce Richardson #ifndef _RTE_BBDEV_PMD_H_
699a2dd95SBruce Richardson #define _RTE_BBDEV_PMD_H_
799a2dd95SBruce Richardson 
899a2dd95SBruce Richardson /**
999a2dd95SBruce Richardson  * @file rte_bbdev_pmd.h
1099a2dd95SBruce Richardson  *
1199a2dd95SBruce Richardson  * Wireless base band driver-facing APIs.
1299a2dd95SBruce Richardson  *
1399a2dd95SBruce Richardson  * This API provides the mechanism for device drivers to register with the
1499a2dd95SBruce Richardson  * bbdev interface. User applications should not use this API.
1599a2dd95SBruce Richardson  */
1699a2dd95SBruce Richardson 
1799a2dd95SBruce Richardson #include <stdint.h>
1899a2dd95SBruce Richardson #include <rte_log.h>
1999a2dd95SBruce Richardson 
2099a2dd95SBruce Richardson #include "rte_bbdev.h"
2199a2dd95SBruce Richardson 
22719834a6SMattias Rönnblom #ifdef __cplusplus
23719834a6SMattias Rönnblom extern "C" {
24719834a6SMattias Rönnblom #endif
25719834a6SMattias Rönnblom 
2699a2dd95SBruce Richardson /** Suggested value for SW based devices */
2799a2dd95SBruce Richardson #define RTE_BBDEV_DEFAULT_MAX_NB_QUEUES RTE_MAX_LCORE
2899a2dd95SBruce Richardson 
2999a2dd95SBruce Richardson /** Suggested value for SW based devices */
3099a2dd95SBruce Richardson #define RTE_BBDEV_QUEUE_SIZE_LIMIT 16384
3199a2dd95SBruce Richardson 
3299a2dd95SBruce Richardson /**
3399a2dd95SBruce Richardson  * @internal
3499a2dd95SBruce Richardson  * Allocates a new slot for a bbdev and returns the pointer to that slot
3599a2dd95SBruce Richardson  * for the driver to use.
3699a2dd95SBruce Richardson  *
3799a2dd95SBruce Richardson  * @param name
3899a2dd95SBruce Richardson  *   Unique identifier name for each bbdev device
3999a2dd95SBruce Richardson  *
4099a2dd95SBruce Richardson  * @return
4199a2dd95SBruce Richardson  *   - Slot in the rte_bbdev array for a new device;
4299a2dd95SBruce Richardson  */
4399a2dd95SBruce Richardson struct rte_bbdev *
4499a2dd95SBruce Richardson rte_bbdev_allocate(const char *name);
4599a2dd95SBruce Richardson 
4699a2dd95SBruce Richardson /**
4799a2dd95SBruce Richardson  * @internal
4899a2dd95SBruce Richardson  * Release the specified bbdev.
4999a2dd95SBruce Richardson  *
5099a2dd95SBruce Richardson  * @param bbdev
5199a2dd95SBruce Richardson  *   The *bbdev* pointer is the address of the *rte_bbdev* structure.
5299a2dd95SBruce Richardson  * @return
5399a2dd95SBruce Richardson  *   - 0 on success, negative on error
5499a2dd95SBruce Richardson  */
5599a2dd95SBruce Richardson int
5699a2dd95SBruce Richardson rte_bbdev_release(struct rte_bbdev *bbdev);
5799a2dd95SBruce Richardson 
5899a2dd95SBruce Richardson /**
5999a2dd95SBruce Richardson  * Get the device structure for a named device.
6099a2dd95SBruce Richardson  *
6199a2dd95SBruce Richardson  * @param name
6299a2dd95SBruce Richardson  *   Name of the device
6399a2dd95SBruce Richardson  *
6499a2dd95SBruce Richardson  * @return
6599a2dd95SBruce Richardson  *   - The device structure pointer, or
6699a2dd95SBruce Richardson  *   - NULL otherwise
6799a2dd95SBruce Richardson  */
6899a2dd95SBruce Richardson struct rte_bbdev *
6999a2dd95SBruce Richardson rte_bbdev_get_named_dev(const char *name);
7099a2dd95SBruce Richardson 
7199a2dd95SBruce Richardson /**
72b53d106dSSean Morrissey  * Definitions of all functions exported by a driver through the generic
7399a2dd95SBruce Richardson  * structure of type *rte_bbdev_ops* supplied in the *rte_bbdev* structure
7499a2dd95SBruce Richardson  * associated with a device.
7599a2dd95SBruce Richardson  */
7699a2dd95SBruce Richardson 
7799a2dd95SBruce Richardson /** @internal Function used to configure device memory. */
7899a2dd95SBruce Richardson typedef int (*rte_bbdev_setup_queues_t)(struct rte_bbdev *dev,
7999a2dd95SBruce Richardson 		uint16_t num_queues, int socket_id);
8099a2dd95SBruce Richardson 
8199a2dd95SBruce Richardson /** @internal Function used to configure interrupts for a device. */
8299a2dd95SBruce Richardson typedef int (*rte_bbdev_intr_enable_t)(struct rte_bbdev *dev);
8399a2dd95SBruce Richardson 
8499a2dd95SBruce Richardson /** @internal Function to allocate and configure a device queue. */
8599a2dd95SBruce Richardson typedef int (*rte_bbdev_queue_setup_t)(struct rte_bbdev *dev,
8699a2dd95SBruce Richardson 		uint16_t queue_id, const struct rte_bbdev_queue_conf *conf);
8799a2dd95SBruce Richardson 
8899a2dd95SBruce Richardson /*
8999a2dd95SBruce Richardson  * @internal
9099a2dd95SBruce Richardson  * Function to release memory resources allocated for a device queue.
9199a2dd95SBruce Richardson  */
9299a2dd95SBruce Richardson typedef int (*rte_bbdev_queue_release_t)(struct rte_bbdev *dev,
9399a2dd95SBruce Richardson 		uint16_t queue_id);
9499a2dd95SBruce Richardson 
9599a2dd95SBruce Richardson /** @internal Function to start a configured device. */
9699a2dd95SBruce Richardson typedef int (*rte_bbdev_start_t)(struct rte_bbdev *dev);
9799a2dd95SBruce Richardson 
9899a2dd95SBruce Richardson /** @internal Function to stop a device. */
9999a2dd95SBruce Richardson typedef void (*rte_bbdev_stop_t)(struct rte_bbdev *dev);
10099a2dd95SBruce Richardson 
10199a2dd95SBruce Richardson /** @internal Function to close a device. */
10299a2dd95SBruce Richardson typedef int (*rte_bbdev_close_t)(struct rte_bbdev *dev);
10399a2dd95SBruce Richardson 
10499a2dd95SBruce Richardson /** @internal Function to start a device queue. */
10599a2dd95SBruce Richardson typedef int (*rte_bbdev_queue_start_t)(struct rte_bbdev *dev,
10699a2dd95SBruce Richardson 		uint16_t queue_id);
10799a2dd95SBruce Richardson 
10899a2dd95SBruce Richardson /** @internal Function to stop a device queue. */
10999a2dd95SBruce Richardson typedef int (*rte_bbdev_queue_stop_t)(struct rte_bbdev *dev, uint16_t queue_id);
11099a2dd95SBruce Richardson 
11199a2dd95SBruce Richardson /** @internal Function to read stats from a device. */
11299a2dd95SBruce Richardson typedef void (*rte_bbdev_stats_get_t)(struct rte_bbdev *dev,
11399a2dd95SBruce Richardson 		struct rte_bbdev_stats *stats);
11499a2dd95SBruce Richardson 
11599a2dd95SBruce Richardson /** @internal Function to reset stats on a device. */
11699a2dd95SBruce Richardson typedef void (*rte_bbdev_stats_reset_t)(struct rte_bbdev *dev);
11799a2dd95SBruce Richardson 
11899a2dd95SBruce Richardson /** @internal Function to retrieve specific information of a device. */
11999a2dd95SBruce Richardson typedef void (*rte_bbdev_info_get_t)(struct rte_bbdev *dev,
12099a2dd95SBruce Richardson 		struct rte_bbdev_driver_info *dev_info);
12199a2dd95SBruce Richardson 
12299a2dd95SBruce Richardson /*
12399a2dd95SBruce Richardson  * @internal
12499a2dd95SBruce Richardson  * Function to enable interrupt for next op on a queue of a device.
12599a2dd95SBruce Richardson  */
12699a2dd95SBruce Richardson typedef int (*rte_bbdev_queue_intr_enable_t)(struct rte_bbdev *dev,
12799a2dd95SBruce Richardson 				    uint16_t queue_id);
12899a2dd95SBruce Richardson 
12999a2dd95SBruce Richardson /*
13099a2dd95SBruce Richardson  * @internal
13199a2dd95SBruce Richardson  * Function to disable interrupt for next op on a queue of a device.
13299a2dd95SBruce Richardson  */
13399a2dd95SBruce Richardson typedef int (*rte_bbdev_queue_intr_disable_t)(struct rte_bbdev *dev,
13499a2dd95SBruce Richardson 				    uint16_t queue_id);
13599a2dd95SBruce Richardson 
136*353e3639SNicolas Chautru /*
137*353e3639SNicolas Chautru  * @internal
138*353e3639SNicolas Chautru  * Function to dump previous operations on a queue of a device.
139*353e3639SNicolas Chautru  */
140*353e3639SNicolas Chautru typedef int (*rte_bbdev_queue_ops_dump_t)(struct rte_bbdev *dev,
141*353e3639SNicolas Chautru 		uint16_t queue_id, FILE *file);
142*353e3639SNicolas Chautru 
14399a2dd95SBruce Richardson /**
14499a2dd95SBruce Richardson  * Operations implemented by drivers. Fields marked as "Required" must be
14599a2dd95SBruce Richardson  * provided by a driver for a device to have basic functionality. "Optional"
14699a2dd95SBruce Richardson  * fields are for non-vital operations
14799a2dd95SBruce Richardson  */
14899a2dd95SBruce Richardson struct rte_bbdev_ops {
14999a2dd95SBruce Richardson 	/** Allocate and configure device memory. Optional. */
15099a2dd95SBruce Richardson 	rte_bbdev_setup_queues_t setup_queues;
15199a2dd95SBruce Richardson 	/** Configure interrupts. Optional. */
15299a2dd95SBruce Richardson 	rte_bbdev_intr_enable_t intr_enable;
15399a2dd95SBruce Richardson 	/** Start device. Optional. */
15499a2dd95SBruce Richardson 	rte_bbdev_start_t start;
15599a2dd95SBruce Richardson 	/** Stop device. Optional. */
15699a2dd95SBruce Richardson 	rte_bbdev_stop_t stop;
15799a2dd95SBruce Richardson 	/** Close device. Optional. */
15899a2dd95SBruce Richardson 	rte_bbdev_close_t close;
15999a2dd95SBruce Richardson 
16099a2dd95SBruce Richardson 	/** Get device info. Required. */
16199a2dd95SBruce Richardson 	rte_bbdev_info_get_t info_get;
16299a2dd95SBruce Richardson 	/** Get device statistics. Optional. */
16399a2dd95SBruce Richardson 	rte_bbdev_stats_get_t stats_get;
16499a2dd95SBruce Richardson 	/** Reset device statistics. Optional. */
16599a2dd95SBruce Richardson 	rte_bbdev_stats_reset_t stats_reset;
16699a2dd95SBruce Richardson 
16799a2dd95SBruce Richardson 	/** Set up a device queue. Required. */
16899a2dd95SBruce Richardson 	rte_bbdev_queue_setup_t queue_setup;
16999a2dd95SBruce Richardson 	/** Release a queue. Required. */
17099a2dd95SBruce Richardson 	rte_bbdev_queue_release_t queue_release;
17199a2dd95SBruce Richardson 	/** Start a queue. Optional. */
17299a2dd95SBruce Richardson 	rte_bbdev_queue_start_t queue_start;
17399a2dd95SBruce Richardson 	/** Stop a queue pair. Optional. */
17499a2dd95SBruce Richardson 	rte_bbdev_queue_stop_t queue_stop;
17599a2dd95SBruce Richardson 
17699a2dd95SBruce Richardson 	/** Enable queue interrupt. Optional */
17799a2dd95SBruce Richardson 	rte_bbdev_queue_intr_enable_t queue_intr_enable;
17899a2dd95SBruce Richardson 	/** Disable queue interrupt. Optional */
17999a2dd95SBruce Richardson 	rte_bbdev_queue_intr_disable_t queue_intr_disable;
180*353e3639SNicolas Chautru 	/** Dump operations on the queue. Optional */
181*353e3639SNicolas Chautru 	rte_bbdev_queue_ops_dump_t queue_ops_dump;
18299a2dd95SBruce Richardson };
18399a2dd95SBruce Richardson 
18499a2dd95SBruce Richardson /**
18599a2dd95SBruce Richardson  * Executes all the user application registered callbacks for the specific
18699a2dd95SBruce Richardson  * device and event type.
18799a2dd95SBruce Richardson  *
18899a2dd95SBruce Richardson  * @param dev
18999a2dd95SBruce Richardson  *   Pointer to the device structure.
19099a2dd95SBruce Richardson  * @param event
19199a2dd95SBruce Richardson  *   Event type.
19299a2dd95SBruce Richardson  * @param ret_param
19399a2dd95SBruce Richardson  *   To pass data back to user application.
19499a2dd95SBruce Richardson  */
19599a2dd95SBruce Richardson void
19699a2dd95SBruce Richardson rte_bbdev_pmd_callback_process(struct rte_bbdev *dev,
19799a2dd95SBruce Richardson 	enum rte_bbdev_event_type event, void *ret_param);
19899a2dd95SBruce Richardson 
19999a2dd95SBruce Richardson #ifdef __cplusplus
20099a2dd95SBruce Richardson }
20199a2dd95SBruce Richardson #endif
20299a2dd95SBruce Richardson 
20399a2dd95SBruce Richardson #endif /* _RTE_BBDEV_PMD_H_ */
204