1.. include:: <isonum.txt> 2 3DPAA2 DPIO (Data Path I/O) Overview 4=================================== 5 6:Copyright: |copy| 2016-2018 NXP 7 8This document provides an overview of the Freescale DPAA2 DPIO 9drivers 10 11Introduction 12============ 13 14A DPAA2 DPIO (Data Path I/O) is a hardware object that provides 15interfaces to enqueue and dequeue frames to/from network interfaces 16and other accelerators. A DPIO also provides hardware buffer 17pool management for network interfaces. 18 19This document provides an overview the Linux DPIO driver, its 20subcomponents, and its APIs. 21 22See Documentation/networking/dpaa2/overview.rst for a general overview of DPAA2 23and the general DPAA2 driver architecture in Linux. 24 25Driver Overview 26--------------- 27 28The DPIO driver is bound to DPIO objects discovered on the fsl-mc bus and 29provides services that: 30 A) allow other drivers, such as the Ethernet driver, to enqueue and dequeue 31 frames for their respective objects 32 B) allow drivers to register callbacks for data availability notifications 33 when data becomes available on a queue or channel 34 C) allow drivers to manage hardware buffer pools 35 36The Linux DPIO driver consists of 3 primary components-- 37 DPIO object driver-- fsl-mc driver that manages the DPIO object 38 39 DPIO service-- provides APIs to other Linux drivers for services 40 41 QBman portal interface-- sends portal commands, gets responses 42:: 43 44 fsl-mc other 45 bus drivers 46 | | 47 +---+----+ +------+-----+ 48 |DPIO obj| |DPIO service| 49 | driver |---| (DPIO) | 50 +--------+ +------+-----+ 51 | 52 +------+-----+ 53 | QBman | 54 | portal i/f | 55 +------------+ 56 | 57 hardware 58 59 60The diagram below shows how the DPIO driver components fit with the other 61DPAA2 Linux driver components:: 62 +------------+ 63 | OS Network | 64 | Stack | 65 +------------+ +------------+ 66 | Allocator |. . . . . . . | Ethernet | 67 |(DPMCP,DPBP)| | (DPNI) | 68 +-.----------+ +---+---+----+ 69 . . ^ | 70 . . <data avail, | |<enqueue, 71 . . tx confirm> | | dequeue> 72 +-------------+ . | | 73 | DPRC driver | . +--------+ +------------+ 74 | (DPRC) | . . |DPIO obj| |DPIO service| 75 +----------+--+ | driver |-| (DPIO) | 76 | +--------+ +------+-----+ 77 |<dev add/remove> +------|-----+ 78 | | QBman | 79 +----+--------------+ | portal i/f | 80 | MC-bus driver | +------------+ 81 | | | 82 | /soc/fsl-mc | | 83 +-------------------+ | 84 | 85 =========================================|=========|======================== 86 +-+--DPIO---|-----------+ 87 | | | 88 | QBman Portal | 89 +-----------------------+ 90 91 ============================================================================ 92 93 94DPIO Object Driver (dpio-driver.c) 95---------------------------------- 96 97 The dpio-driver component registers with the fsl-mc bus to handle objects of 98 type "dpio". The implementation of probe() handles basic initialization 99 of the DPIO including mapping of the DPIO regions (the QBman SW portal) 100 and initializing interrupts and registering irq handlers. The dpio-driver 101 registers the probed DPIO with dpio-service. 102 103DPIO service (dpio-service.c, dpaa2-io.h) 104------------------------------------------ 105 106 The dpio service component provides queuing, notification, and buffers 107 management services to DPAA2 drivers, such as the Ethernet driver. A system 108 will typically allocate 1 DPIO object per CPU to allow queuing operations 109 to happen simultaneously across all CPUs. 110 111 Notification handling 112 dpaa2_io_service_register() 113 114 dpaa2_io_service_deregister() 115 116 dpaa2_io_service_rearm() 117 118 Queuing 119 dpaa2_io_service_pull_fq() 120 121 dpaa2_io_service_pull_channel() 122 123 dpaa2_io_service_enqueue_fq() 124 125 dpaa2_io_service_enqueue_qd() 126 127 dpaa2_io_store_create() 128 129 dpaa2_io_store_destroy() 130 131 dpaa2_io_store_next() 132 133 Buffer pool management 134 dpaa2_io_service_release() 135 136 dpaa2_io_service_acquire() 137 138QBman portal interface (qbman-portal.c) 139--------------------------------------- 140 141 The qbman-portal component provides APIs to do the low level hardware 142 bit twiddling for operations such as: 143 -initializing Qman software portals 144 145 -building and sending portal commands 146 147 -portal interrupt configuration and processing 148 149 The qbman-portal APIs are not public to other drivers, and are 150 only used by dpio-service. 151 152Other (dpaa2-fd.h, dpaa2-global.h) 153---------------------------------- 154 155 Frame descriptor and scatter-gather definitions and the APIs used to 156 manipulate them are defined in dpaa2-fd.h. 157 158 Dequeue result struct and parsing APIs are defined in dpaa2-global.h. 159