doc: add rawdev library guide and doxygen page
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
This commit is contained in:
parent
544092a0f9
commit
a9bb0c44c7
@ -321,6 +321,7 @@ M: Hemant Agrawal <hemant.agrawal@nxp.com>
|
|||||||
F: lib/librte_rawdev/
|
F: lib/librte_rawdev/
|
||||||
F: drivers/raw/skeleton_rawdev/
|
F: drivers/raw/skeleton_rawdev/
|
||||||
F: test/test/test_rawdev.c
|
F: test/test/test_rawdev.c
|
||||||
|
F: doc/guides/prog_guide/rawdev.rst
|
||||||
|
|
||||||
|
|
||||||
Bus Drivers
|
Bus Drivers
|
||||||
|
@ -47,6 +47,7 @@ The public API headers are grouped by topics:
|
|||||||
[security] (@ref rte_security.h),
|
[security] (@ref rte_security.h),
|
||||||
[eventdev] (@ref rte_eventdev.h),
|
[eventdev] (@ref rte_eventdev.h),
|
||||||
[event_eth_rx_adapter] (@ref rte_event_eth_rx_adapter.h),
|
[event_eth_rx_adapter] (@ref rte_event_eth_rx_adapter.h),
|
||||||
|
[rawdev] (@ref rte_rawdev.h),
|
||||||
[metrics] (@ref rte_metrics.h),
|
[metrics] (@ref rte_metrics.h),
|
||||||
[bitrate] (@ref rte_bitrate.h),
|
[bitrate] (@ref rte_bitrate.h),
|
||||||
[latency] (@ref rte_latencystats.h),
|
[latency] (@ref rte_latencystats.h),
|
||||||
|
@ -71,6 +71,7 @@ INPUT = doc/api/doxy-api-index.md \
|
|||||||
lib/librte_pipeline \
|
lib/librte_pipeline \
|
||||||
lib/librte_port \
|
lib/librte_port \
|
||||||
lib/librte_power \
|
lib/librte_power \
|
||||||
|
lib/librte_rawdev \
|
||||||
lib/librte_reorder \
|
lib/librte_reorder \
|
||||||
lib/librte_ring \
|
lib/librte_ring \
|
||||||
lib/librte_sched \
|
lib/librte_sched \
|
||||||
|
@ -49,6 +49,7 @@ Programmer's Guide
|
|||||||
bbdev
|
bbdev
|
||||||
cryptodev_lib
|
cryptodev_lib
|
||||||
rte_security
|
rte_security
|
||||||
|
rawdev
|
||||||
link_bonding_poll_mode_drv_lib
|
link_bonding_poll_mode_drv_lib
|
||||||
timer_lib
|
timer_lib
|
||||||
hash_lib
|
hash_lib
|
||||||
|
107
doc/guides/prog_guide/rawdev.rst
Normal file
107
doc/guides/prog_guide/rawdev.rst
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
.. SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
Copyright 2018 NXP
|
||||||
|
|
||||||
|
Rawdevice Library
|
||||||
|
=================
|
||||||
|
|
||||||
|
Introduction
|
||||||
|
------------
|
||||||
|
|
||||||
|
In terms of device flavor (type) support, DPDK currently has ethernet
|
||||||
|
(lib_ether), cryptodev (libcryptodev), eventdev (libeventdev) and vdev
|
||||||
|
(virtual device) support.
|
||||||
|
|
||||||
|
For a new type of device, for example an accelerator, there are not many
|
||||||
|
options except:
|
||||||
|
1. create another lib/librte_MySpecialDev, driver/MySpecialDrv and use it
|
||||||
|
through Bus/PMD model.
|
||||||
|
2. Or, create a vdev and implement necessary custom APIs which are directly
|
||||||
|
exposed from driver layer. However this may still require changes in bus code
|
||||||
|
in DPDK.
|
||||||
|
|
||||||
|
The DPDK Rawdev library is an abstraction that provides the DPDK framework a
|
||||||
|
way to manage such devices in a generic manner without expecting changes to
|
||||||
|
library or EAL for each device type. This library provides a generic set of
|
||||||
|
operations and APIs for framework and Applications to use, respectively, for
|
||||||
|
interfacing with such type of devices.
|
||||||
|
|
||||||
|
Design
|
||||||
|
------
|
||||||
|
|
||||||
|
Key factors guiding design of the Rawdevice library:
|
||||||
|
|
||||||
|
1. Following are some generic operations which can be treated as applicable
|
||||||
|
to a large subset of device types. None of the operations are mandatory to
|
||||||
|
be implemented by a driver. Application should also be design for proper
|
||||||
|
handling for unsupported APIs.
|
||||||
|
|
||||||
|
* Device Start/Stop - In some cases, 'reset' might also be required which
|
||||||
|
has different semantics than a start-stop-start cycle.
|
||||||
|
* Configuration - Device, Queue or any other sub-system configuration
|
||||||
|
* I/O - Sending a series of buffers which can enclose any arbitrary data
|
||||||
|
* Statistics - Fetch arbitrary device statistics
|
||||||
|
* Firmware Management - Firmware load/unload/status
|
||||||
|
|
||||||
|
2. Application API should be able to pass along arbitrary state information
|
||||||
|
to/fro device driver. This can be achieved by maintaining context
|
||||||
|
information through opaque data or pointers.
|
||||||
|
|
||||||
|
Figure below outlines the layout of the rawdevice library and device vis-a-vis
|
||||||
|
other well known device types like eth and crypto:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
+-----------------------------------------------------------+
|
||||||
|
| Application(s) |
|
||||||
|
+------------------------------.----------------------------+
|
||||||
|
|
|
||||||
|
|
|
||||||
|
+------------------------------'----------------------------+
|
||||||
|
| DPDK Framework (APIs) |
|
||||||
|
+--------------|----|-----------------|---------------------+
|
||||||
|
/ \ \
|
||||||
|
(crypto ops) (eth ops) (rawdev ops) +----+
|
||||||
|
/ \ \ |DrvA|
|
||||||
|
+-----'---+ +----`----+ +---'-----+ +----+
|
||||||
|
| crypto | | ethdev | | raw |
|
||||||
|
+--/------+ +---/-----+ +----/----+ +----+
|
||||||
|
/\ __/\ / ..........|DrvB|
|
||||||
|
/ \ / \ / ../ \ +----+
|
||||||
|
+====+ +====+ +====+ +====+ +==/=+ ```Bus Probe
|
||||||
|
|DevA| |DevB| |DevC| |DevD| |DevF|
|
||||||
|
+====+ +====+ +====+ +====+ +====+
|
||||||
|
| | | | |
|
||||||
|
``|``````|````````|``````|`````````````````|````````Bus Scan
|
||||||
|
(PCI) | (PCI) (PCI) (PCI)
|
||||||
|
(BusA)
|
||||||
|
|
||||||
|
* It is assumed above that DrvB is a PCI type driver which registers itself
|
||||||
|
with PCI Bus
|
||||||
|
* Thereafter, when the PCI scan is done, during probe DrvB would match the
|
||||||
|
rawdev DevF ID and take control of device
|
||||||
|
* Applications can then continue using the device through rawdev API
|
||||||
|
interfaces
|
||||||
|
|
||||||
|
|
||||||
|
Device Identification
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Physical rawdev devices are discovered during the Bus scan executed at DPDK
|
||||||
|
initialization, based on their identification and probing with corresponding
|
||||||
|
driver. Thus, a generic device needs to have an identifier and a driver
|
||||||
|
capable of identifying it through this identifier.
|
||||||
|
|
||||||
|
Virtual devices can be created by two mechanisms, either using the EAL command
|
||||||
|
line options or from within the application using an EAL API directly.
|
||||||
|
|
||||||
|
From the command line using the --vdev EAL option
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
--vdev 'rawdev_dev1'
|
||||||
|
|
||||||
|
Our using the rte_vdev_init API within the application code.
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
|
rte_vdev_init("rawdev_dev1", NULL)
|
@ -166,6 +166,18 @@ New Features
|
|||||||
renamed the application from SW PMD specific ``eventdev_pipeline_sw_pmd``
|
renamed the application from SW PMD specific ``eventdev_pipeline_sw_pmd``
|
||||||
to PMD agnostic ``eventdev_pipeline``.
|
to PMD agnostic ``eventdev_pipeline``.
|
||||||
|
|
||||||
|
* **Added Rawdev, a generic device support library.**
|
||||||
|
|
||||||
|
Rawdev library provides support for integrating any generic device type with
|
||||||
|
DPDK framework. Generic devices are those which do not have a pre-defined
|
||||||
|
type within DPDK, for example, ethernet, crypto, event etc.
|
||||||
|
A set of northbound APIs have been defined which encompass a generic set of
|
||||||
|
operations by allowing applications to interact with device using opaque
|
||||||
|
structures/buffers. Also, southbound APIs provide APIs for integrating device
|
||||||
|
either as as part of a physical bus (PCI, FSLMC etc) or through ``vdev``.
|
||||||
|
|
||||||
|
See the :doc:`../prog_guide/rawdev` programmer's guide for more details.
|
||||||
|
|
||||||
* **Added new multi-process communication channel**
|
* **Added new multi-process communication channel**
|
||||||
|
|
||||||
Added a generic channel in EAL for multi-process (primary/secondary) communication.
|
Added a generic channel in EAL for multi-process (primary/secondary) communication.
|
||||||
@ -308,6 +320,7 @@ The libraries prepended with a plus sign were incremented in this version.
|
|||||||
librte_pmd_vhost.so.2
|
librte_pmd_vhost.so.2
|
||||||
librte_port.so.3
|
librte_port.so.3
|
||||||
librte_power.so.1
|
librte_power.so.1
|
||||||
|
librte_rawdev.so.1
|
||||||
librte_reorder.so.1
|
librte_reorder.so.1
|
||||||
librte_ring.so.1
|
librte_ring.so.1
|
||||||
librte_sched.so.1
|
librte_sched.so.1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user