DPAA2 DPIO (数据路径 I/O) 概述¶
- 版权:
© 2016-2018 NXP
本文档概述了 Freescale DPAA2 DPIO 驱动程序
简介¶
DPAA2 DPIO(数据路径 I/O)是一个硬件对象,它提供接口以将帧排队和出队到/从网络接口和其他加速器。 DPIO 还为网络接口提供硬件缓冲池管理。
本文档概述了 Linux DPIO 驱动程序、其子组件及其 API。
有关 DPAA2 的一般概述以及 Linux 中通用 DPAA2 驱动程序架构,请参阅 DPAA2(数据路径加速架构 Gen2)概述。
驱动程序概述¶
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-service 注册探测到的 DPIO。
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 中定义。