===========
NTB Drivers
===========

NTB (Non-Transparent Bridge) is a type of PCI-Express bridge chip that connects
the separate memory systems of two computers to the same PCI-Express fabric.
Existing NTB hardware supports a common feature set, including scratchpad
registers, doorbell registers, and memory translation windows.  Scratchpad
registers are read-and-writable registers that are accessible from either side
of the device, so that peers can exchange a small amount of information at a
fixed address.  Doorbell registers provide a way for peers to send interrupt
events.  Memory windows allow translated read and write access to the peer
memory.

NTB Core Driver (ntb)
=====================

The NTB core driver defines an api wrapping the common feature set, and allows
clients interested in NTB features to discover NTB the devices supported by
hardware drivers.  The term "client" is used here to mean an upper layer
component making use of the NTB api.  The term "driver," or "hardware driver,"
is used here to mean a driver for a specific vendor and model of NTB hardware.

NTB Client Drivers
==================

NTB client drivers should register with the NTB core driver.  After
registering, the client probe and remove functions will be called appropriately
as ntb hardware, or hardware drivers, are inserted and removed.  The
registration uses the Linux Device framework, so it should feel familiar to
anyone who has written a pci driver.

NTB Transport Client (ntb\_transport) and NTB Netdev (ntb\_netdev)
------------------------------------------------------------------

The primary client for NTB is the Transport client, used in tandem with NTB
Netdev.  These drivers function together to create a logical link to the peer,
across the ntb, to exchange packets of network data.  The Transport client
establishes a logical link to the peer, and creates queue pairs to exchange
messages and data.  The NTB Netdev then creates an ethernet device using a
Transport queue pair.  Network data is copied between socket buffers and the
Transport queue pair buffer.  The Transport client may be used for other things
besides Netdev, however no other applications have yet been written.

NTB Ping Pong Test Client (ntb\_pingpong)
-----------------------------------------

The Ping Pong test client serves as a demonstration to exercise the doorbell
and scratchpad registers of NTB hardware, and as an example simple NTB client.
Ping Pong enables the link when started, waits for the NTB link to come up, and
then proceeds to read and write the doorbell scratchpad registers of the NTB.
The peers interrupt each other using a bit mask of doorbell bits, which is
shifted by one in each round, to test the behavior of multiple doorbell bits
and interrupt vectors.  The Ping Pong driver also reads the first local
scratchpad, and writes the value plus one to the first peer scratchpad, each
round before writing the peer doorbell register.

Module Parameters:

* unsafe - Some hardware has known issues with scratchpad and doorbell
	registers.  By default, Ping Pong will not attempt to exercise such
	hardware.  You may override this behavior at your own risk by setting
	unsafe=1.
* delay\_ms - Specify the delay between receiving a doorbell
	interrupt event and setting the peer doorbell register for the next
	round.
* init\_db - Specify the doorbell bits to start new series of rounds.  A new
	series begins once all the doorbell bits have been shifted out of
	range.
* dyndbg - It is suggested to specify dyndbg=+p when loading this module, and
	then to observe debugging output on the console.

NTB Tool Test Client (ntb\_tool)
--------------------------------

The Tool test client serves for debugging, primarily, ntb hardware and drivers.
The Tool provides access through debugfs for reading, setting, and clearing the
NTB doorbell, and reading and writing scratchpads.

The Tool does not currently have any module parameters.

Debugfs Files:

* *debugfs*/ntb\_tool/*hw*/
	A directory in debugfs will be created for each
	NTB device probed by the tool.  This directory is shortened to *hw*
	below.
* *hw*/db
	This file is used to read, set, and clear the local doorbell.  Not
	all operations may be supported by all hardware.  To read the doorbell,
	read the file.  To set the doorbell, write `s` followed by the bits to
	set (eg: `echo 's 0x0101' > db`).  To clear the doorbell, write `c`
	followed by the bits to clear.
* *hw*/mask
	This file is used to read, set, and clear the local doorbell mask.
	See *db* for details.
* *hw*/peer\_db
	This file is used to read, set, and clear the peer doorbell.
	See *db* for details.
* *hw*/peer\_mask
	This file is used to read, set, and clear the peer doorbell
	mask.  See *db* for details.
* *hw*/spad
	This file is used to read and write local scratchpads.  To read
	the values of all scratchpads, read the file.  To write values, write a
	series of pairs of scratchpad number and value
	(eg: `echo '4 0x123 7 0xabc' > spad`
	# to set scratchpads `4` and `7` to `0x123` and `0xabc`, respectively).
* *hw*/peer\_spad
	This file is used to read and write peer scratchpads.  See
	*spad* for details.

NTB Hardware Drivers
====================

NTB hardware drivers should register devices with the NTB core driver.  After
registering, clients probe and remove functions will be called.

NTB Intel Hardware Driver (ntb\_hw\_intel)
------------------------------------------

The Intel hardware driver supports NTB on Xeon and Atom CPUs.

Module Parameters:

* b2b\_mw\_idx
	If the peer ntb is to be accessed via a memory window, then use
	this memory window to access the peer ntb.  A value of zero or positive
	starts from the first mw idx, and a negative value starts from the last
	mw idx.  Both sides MUST set the same value here!  The default value is
	`-1`.
* b2b\_mw\_share
	If the peer ntb is to be accessed via a memory window, and if
	the memory window is large enough, still allow the client to use the
	second half of the memory window for address translation to the peer.
* xeon\_b2b\_usd\_bar2\_addr64
	If using B2B topology on Xeon hardware, use
	this 64 bit address on the bus between the NTB devices for the window
	at BAR2, on the upstream side of the link.
* xeon\_b2b\_usd\_bar4\_addr64 - See *xeon\_b2b\_bar2\_addr64*.
* xeon\_b2b\_usd\_bar4\_addr32 - See *xeon\_b2b\_bar2\_addr64*.
* xeon\_b2b\_usd\_bar5\_addr32 - See *xeon\_b2b\_bar2\_addr64*.
* xeon\_b2b\_dsd\_bar2\_addr64 - See *xeon\_b2b\_bar2\_addr64*.
* xeon\_b2b\_dsd\_bar4\_addr64 - See *xeon\_b2b\_bar2\_addr64*.
* xeon\_b2b\_dsd\_bar4\_addr32 - See *xeon\_b2b\_bar2\_addr64*.
* xeon\_b2b\_dsd\_bar5\_addr32 - See *xeon\_b2b\_bar2\_addr64*.
