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