| .. 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 | 
 | ======  =============================== | 
 |  | 
 |  |