|  | .. SPDX-License-Identifier: GPL-2.0 | 
|  |  | 
|  | ================= | 
|  | PCI vNTB Function | 
|  | ================= | 
|  |  | 
|  | :Author: Frank Li <Frank.Li@nxp.com> | 
|  |  | 
|  | The difference between PCI NTB function and PCI vNTB function is | 
|  |  | 
|  | PCI NTB function need at two endpoint instances and connect HOST1 | 
|  | and HOST2. | 
|  |  | 
|  | PCI vNTB function only use one host and one endpoint(EP), use NTB | 
|  | connect EP and PCI host | 
|  |  | 
|  | .. code-block:: text | 
|  |  | 
|  |  | 
|  | +------------+         +---------------------------------------+ | 
|  | |            |         |                                       | | 
|  | +------------+         |                        +--------------+ | 
|  | | NTB        |         |                        | NTB          | | 
|  | | NetDev     |         |                        | NetDev       | | 
|  | +------------+         |                        +--------------+ | 
|  | | NTB        |         |                        | NTB          | | 
|  | | Transfer   |         |                        | Transfer     | | 
|  | +------------+         |                        +--------------+ | 
|  | |            |         |                        |              | | 
|  | |  PCI NTB   |         |                        |              | | 
|  | |    EPF     |         |                        |              | | 
|  | |   Driver   |         |                        | PCI Virtual  | | 
|  | |            |         +---------------+        | NTB Driver   | | 
|  | |            |         | PCI EP NTB    |<------>|              | | 
|  | |            |         |  FN Driver    |        |              | | 
|  | +------------+         +---------------+        +--------------+ | 
|  | |            |         |               |        |              | | 
|  | |  PCI BUS   | <-----> |  PCI EP BUS   |        |  Virtual PCI | | 
|  | |            |  PCI    |               |        |     BUS      | | 
|  | +------------+         +---------------+--------+--------------+ | 
|  | PCI RC                        PCI EP | 
|  |  | 
|  | Constructs used for Implementing vNTB | 
|  | ===================================== | 
|  |  | 
|  | 1) Config Region | 
|  | 2) Self Scratchpad Registers | 
|  | 3) Peer Scratchpad Registers | 
|  | 4) Doorbell (DB) Registers | 
|  | 5) Memory Window (MW) | 
|  |  | 
|  |  | 
|  | Config Region: | 
|  | -------------- | 
|  |  | 
|  | It is same as PCI NTB Function driver | 
|  |  | 
|  | Scratchpad Registers: | 
|  | --------------------- | 
|  |  | 
|  | It is appended after Config region. | 
|  |  | 
|  | .. code-block:: text | 
|  |  | 
|  |  | 
|  | +--------------------------------------------------+ Base | 
|  | |                                                  | | 
|  | |                                                  | | 
|  | |                                                  | | 
|  | |          Common Config Register                  | | 
|  | |                                                  | | 
|  | |                                                  | | 
|  | |                                                  | | 
|  | +-----------------------+--------------------------+ Base + span_offset | 
|  | |                       |                          | | 
|  | |    Peer Span Space    |    Span Space            | | 
|  | |                       |                          | | 
|  | |                       |                          | | 
|  | +-----------------------+--------------------------+ Base + span_offset | 
|  | |                       |                          |      + span_count * 4 | 
|  | |                       |                          | | 
|  | |     Span Space        |   Peer Span Space        | | 
|  | |                       |                          | | 
|  | +-----------------------+--------------------------+ | 
|  | Virtual PCI             Pcie Endpoint | 
|  | NTB Driver               NTB Driver | 
|  |  | 
|  |  | 
|  | Doorbell Registers: | 
|  | ------------------- | 
|  |  | 
|  | Doorbell Registers are used by the hosts to interrupt each other. | 
|  |  | 
|  | Memory Window: | 
|  | -------------- | 
|  |  | 
|  | Actual transfer of data between the two hosts will happen using the | 
|  | memory window. | 
|  |  | 
|  | Modeling Constructs: | 
|  | ==================== | 
|  |  | 
|  | 32-bit BARs. | 
|  |  | 
|  | ======  =============== | 
|  | BAR NO  CONSTRUCTS USED | 
|  | ======  =============== | 
|  | BAR0    Config Region | 
|  | BAR1    Doorbell | 
|  | BAR2    Memory Window 1 | 
|  | BAR3    Memory Window 2 | 
|  | BAR4    Memory Window 3 | 
|  | BAR5    Memory Window 4 | 
|  | ======  =============== | 
|  |  | 
|  | 64-bit BARs. | 
|  |  | 
|  | ======  =============================== | 
|  | BAR NO  CONSTRUCTS USED | 
|  | ======  =============================== | 
|  | BAR0    Config Region + Scratchpad | 
|  | BAR1 | 
|  | BAR2    Doorbell | 
|  | BAR3 | 
|  | BAR4    Memory Window 1 | 
|  | BAR5 | 
|  | ======  =============================== | 
|  |  | 
|  |  |