DPAA2 DPIO (数据路径 I/O) 概述¶
- 版权:
© 2016-2018 NXP
本文档概述了 Freescale DPAA2 DPIO 驱动程序
简介¶
DPAA2 DPIO (数据路径 I/O) 是一个硬件对象,它提供了接口,用于将帧排队到网络接口和其他加速器,或从网络接口和其他加速器出队。DPIO 还为网络接口提供硬件缓冲区池管理。
本文档概述了 Linux DPIO 驱动程序、其子组件及其 API。
有关 DPAA2 的一般概述以及 Linux 中通用 DPAA2 驱动程序架构,请参阅 DPAA2 (第二代数据路径加速架构) 概述。
驱动程序概述¶
DPIO 驱动程序绑定到在 fsl-mc 总线上发现的 DPIO 对象,并提供以下服务:
允许其他驱动程序(例如以太网驱动程序)为其各自的对象排队和出队帧
允许驱动程序注册回调,以便在队列或通道上有数据可用时接收数据可用性通知
允许驱动程序管理硬件缓冲区池
- Linux DPIO 驱动程序由 3 个主要组件组成:
DPIO 对象驱动程序 - 管理 DPIO 对象的 fsl-mc 驱动程序
DPIO 服务 - 为其他 Linux 驱动程序提供服务的 API
QBman 门户接口 - 发送门户命令,获取响应
fsl-mc other bus drivers | | +---+----+ +------+-----+ |DPIO obj| |DPIO service| | driver |---| (DPIO) | +--------+ +------+-----+ | +------+-----+ | QBman | | portal i/f | +------------+ | hardware
下图显示了 DPIO 驱动程序组件如何与其他 DPAA2 Linux 驱动程序组件配合使用
+------------+
| OS Network |
| Stack |
+------------+ +------------+
| Allocator |. . . . . . . | Ethernet |
|(DPMCP,DPBP)| | (DPNI) |
+-.----------+ +---+---+----+
. . ^ |
. . <data avail, | |<enqueue,
. . tx confirm> | | dequeue>
+-------------+ . | |
| DPRC driver | . +--------+ +------------+
| (DPRC) | . . |DPIO obj| |DPIO service|
+----------+--+ | driver |-| (DPIO) |
| +--------+ +------+-----+
|<dev add/remove> +------|-----+
| | QBman |
+----+--------------+ | portal i/f |
| MC-bus driver | +------------+
| | |
| /soc/fsl-mc | |
+-------------------+ |
|
=========================================|=========|========================
+-+--DPIO---|-----------+
| | |
| QBman Portal |
+-----------------------+
============================================================================
DPIO 对象驱动程序 (dpio-driver.c)¶
dpio-driver 组件向 fsl-mc 总线注册,以处理类型为“dpio”的对象。probe() 的实现处理 DPIO 的基本初始化,包括映射 DPIO 区域(QBman SW 门户)以及初始化中断和注册 irq 处理程序。dpio-driver 将探测到的 DPIO 注册到 dpio-service。
DPIO 服务 (dpio-service.c, dpaa2-io.h)¶
dpio 服务组件为 DPAA2 驱动程序(例如以太网驱动程序)提供排队、通知和缓冲区管理服务。系统通常会为每个 CPU 分配 1 个 DPIO 对象,以便允许跨所有 CPU 同时进行排队操作。
- 通知处理
dpaa2_io_service_register()
dpaa2_io_service_deregister()
dpaa2_io_service_rearm()
- 排队
dpaa2_io_service_pull_fq()
dpaa2_io_service_pull_channel()
dpaa2_io_service_enqueue_fq()
dpaa2_io_service_enqueue_qd()
dpaa2_io_store_create()
dpaa2_io_store_destroy()
dpaa2_io_store_next()
- 缓冲区池管理
dpaa2_io_service_release()
dpaa2_io_service_acquire()
QBman 门户接口 (qbman-portal.c)¶
qbman-portal 组件提供 API,用于执行诸如以下操作的低级硬件位操作:
初始化 Qman 软件门户
构建和发送门户命令
门户中断配置和处理
qbman-portal API 不对其他驱动程序公开,仅供 dpio-service 使用。
其他 (dpaa2-fd.h, dpaa2-global.h)¶
帧描述符和分散/收集定义以及用于操作它们的 API 在 dpaa2-fd.h 中定义。
出队结果结构和解析 API 在 dpaa2-global.h 中定义。