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 对象,并提供以下服务:

  1. 允许其他驱动程序(例如以太网驱动程序)为其各自的对象排队和出队帧

  2. 允许驱动程序注册回调,以便在队列或通道上有数据可用时接收数据可用性通知

  3. 允许驱动程序管理硬件缓冲区池

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 中定义。