Allen Hubbe | a1bd3ba | 2015-04-09 10:33:20 -0400 | [diff] [blame] | 1 | # NTB Drivers |
| 2 | |
| 3 | NTB (Non-Transparent Bridge) is a type of PCI-Express bridge chip that connects |
| 4 | the separate memory systems of two computers to the same PCI-Express fabric. |
| 5 | Existing NTB hardware supports a common feature set, including scratchpad |
| 6 | registers, doorbell registers, and memory translation windows. Scratchpad |
| 7 | registers are read-and-writable registers that are accessible from either side |
| 8 | of the device, so that peers can exchange a small amount of information at a |
| 9 | fixed address. Doorbell registers provide a way for peers to send interrupt |
| 10 | events. Memory windows allow translated read and write access to the peer |
| 11 | memory. |
| 12 | |
| 13 | ## NTB Core Driver (ntb) |
| 14 | |
| 15 | The NTB core driver defines an api wrapping the common feature set, and allows |
| 16 | clients interested in NTB features to discover NTB the devices supported by |
| 17 | hardware drivers. The term "client" is used here to mean an upper layer |
| 18 | component making use of the NTB api. The term "driver," or "hardware driver," |
| 19 | is used here to mean a driver for a specific vendor and model of NTB hardware. |
| 20 | |
| 21 | ## NTB Client Drivers |
| 22 | |
| 23 | NTB client drivers should register with the NTB core driver. After |
| 24 | registering, the client probe and remove functions will be called appropriately |
| 25 | as ntb hardware, or hardware drivers, are inserted and removed. The |
| 26 | registration uses the Linux Device framework, so it should feel familiar to |
| 27 | anyone who has written a pci driver. |
| 28 | |
Allen Hubbe | e26a584 | 2015-04-09 10:33:20 -0400 | [diff] [blame] | 29 | ### NTB Transport Client (ntb\_transport) and NTB Netdev (ntb\_netdev) |
| 30 | |
| 31 | The primary client for NTB is the Transport client, used in tandem with NTB |
| 32 | Netdev. These drivers function together to create a logical link to the peer, |
| 33 | across the ntb, to exchange packets of network data. The Transport client |
| 34 | establishes a logical link to the peer, and creates queue pairs to exchange |
| 35 | messages and data. The NTB Netdev then creates an ethernet device using a |
| 36 | Transport queue pair. Network data is copied between socket buffers and the |
| 37 | Transport queue pair buffer. The Transport client may be used for other things |
| 38 | besides Netdev, however no other applications have yet been written. |
| 39 | |
Allen Hubbe | 963de47 | 2015-04-15 11:12:41 -0400 | [diff] [blame^] | 40 | ### NTB Ping Pong Test Client (ntb\_pingpong) |
| 41 | |
| 42 | The Ping Pong test client serves as a demonstration to exercise the doorbell |
| 43 | and scratchpad registers of NTB hardware, and as an example simple NTB client. |
| 44 | Ping Pong enables the link when started, waits for the NTB link to come up, and |
| 45 | then proceeds to read and write the doorbell scratchpad registers of the NTB. |
| 46 | The peers interrupt each other using a bit mask of doorbell bits, which is |
| 47 | shifted by one in each round, to test the behavior of multiple doorbell bits |
| 48 | and interrupt vectors. The Ping Pong driver also reads the first local |
| 49 | scratchpad, and writes the value plus one to the first peer scratchpad, each |
| 50 | round before writing the peer doorbell register. |
| 51 | |
| 52 | Module Parameters: |
| 53 | |
| 54 | * unsafe - Some hardware has known issues with scratchpad and doorbell |
| 55 | registers. By default, Ping Pong will not attempt to exercise such |
| 56 | hardware. You may override this behavior at your own risk by setting |
| 57 | unsafe=1. |
| 58 | * delay\_ms - Specify the delay between receiving a doorbell |
| 59 | interrupt event and setting the peer doorbell register for the next |
| 60 | round. |
| 61 | * init\_db - Specify the doorbell bits to start new series of rounds. A new |
| 62 | series begins once all the doorbell bits have been shifted out of |
| 63 | range. |
| 64 | * dyndbg - It is suggested to specify dyndbg=+p when loading this module, and |
| 65 | then to observe debugging output on the console. |
| 66 | |
Allen Hubbe | a1bd3ba | 2015-04-09 10:33:20 -0400 | [diff] [blame] | 67 | ## NTB Hardware Drivers |
| 68 | |
| 69 | NTB hardware drivers should register devices with the NTB core driver. After |
| 70 | registering, clients probe and remove functions will be called. |
Allen Hubbe | e26a584 | 2015-04-09 10:33:20 -0400 | [diff] [blame] | 71 | |
| 72 | ### NTB Intel Hardware Driver (ntb\_hw\_intel) |
| 73 | |
| 74 | The Intel hardware driver supports NTB on Xeon and Atom CPUs. |
| 75 | |
| 76 | Module Parameters: |
| 77 | |
| 78 | * b2b\_mw\_idx - If the peer ntb is to be accessed via a memory window, then use |
| 79 | this memory window to access the peer ntb. A value of zero or positive |
| 80 | starts from the first mw idx, and a negative value starts from the last |
| 81 | mw idx. Both sides MUST set the same value here! The default value is |
| 82 | `-1`. |
| 83 | * b2b\_mw\_share - If the peer ntb is to be accessed via a memory window, and if |
| 84 | the memory window is large enough, still allow the client to use the |
| 85 | second half of the memory window for address translation to the peer. |
Allen Hubbe | 42fefc8 | 2015-05-11 05:45:30 -0400 | [diff] [blame] | 86 | * snb\_b2b\_usd\_bar2\_addr64 - If using B2B topology on Xeon hardware, use this |
| 87 | 64 bit address on the bus between the NTB devices for the window at |
| 88 | BAR2, on the upstream side of the link. |
| 89 | * snb\_b2b\_usd\_bar4\_addr64 - See *snb\_b2b\_bar2\_addr64*. |
| 90 | * snb\_b2b\_usd\_bar4\_addr32 - See *snb\_b2b\_bar2\_addr64*. |
| 91 | * snb\_b2b\_usd\_bar5\_addr32 - See *snb\_b2b\_bar2\_addr64*. |
| 92 | * snb\_b2b\_dsd\_bar2\_addr64 - See *snb\_b2b\_bar2\_addr64*. |
| 93 | * snb\_b2b\_dsd\_bar4\_addr64 - See *snb\_b2b\_bar2\_addr64*. |
| 94 | * snb\_b2b\_dsd\_bar4\_addr32 - See *snb\_b2b\_bar2\_addr64*. |
| 95 | * snb\_b2b\_dsd\_bar5\_addr32 - See *snb\_b2b\_bar2\_addr64*. |