Commit graph

15 commits

Author SHA1 Message Date
Alexander Motin
718e8abba9 Fix NTBT_QP_LINKS negotiation.
I believe it never worked correctly for more the one queue even in Linux.
This fixes case when one of consumer drivers is not loaded on one side,
but its queues still announced as ready if something else brought link up.

While there, remove some pointless NULL checks.
2016-07-29 21:03:30 +00:00
Alexander Motin
6bd57d14ed Once more refactor KPI between ntb_transport(4) and if_ntb(4)..
New design allows to attach multiple consumers to ntb_transport(4) instance.
Previous design obtained from Linux theoretically allowed that, but was not
practically usable (Linux also has only one consumer driver now).
2016-07-29 17:15:41 +00:00
Alexander Motin
4490696b3e Once more refactor KPI between NTB hardware and consumers.
New design allows hardware resources to be split between several consumers.
For example, one BAR can be dedicated for remote memory access, while other
resources can be used for packet transport for virtual Ethernet interface.
And even without resource split, this code allows to specify which consumer
driver should attach the hardware.

From some points this makes the code even closer to Linux one, even though
Linux does not provide the described flexibility.
2016-07-28 10:48:20 +00:00
Sepherosa Ziehau
02888b1e1b ntb: Fix LINT
Sponsored by:	Microsoft OSTC
2016-07-12 05:41:34 +00:00
Alexander Motin
d2de6786c1 Remove callout_reset(link_work) from ntb_transport_attach().
At that point link is quite likely not established yet, so messing with
scratch registers is premature there.  Original commit message mentioned
code diff reduction from Linux, but this line is not present in Linux now.
2016-07-10 19:15:29 +00:00
Alexander Motin
b42e3ec60b Improve memory allocation errors handling on receive. 2016-07-09 12:00:04 +00:00
Alexander Motin
a7e0f01a3d Synchronize MTU code with Linux.
It is mandatory for transport compatibility.
2016-07-09 11:58:59 +00:00
Alexander Motin
59850913b2 Reimplement doorbell register emulation for NTB_SB01BASE_LOCKUP.
This allows at least first three doorbells to work very close to normal
hardware, properly signaling events to upper layers without spurious or
lost events.  Doorbells above the first three may still report spurious
events due to lack of reliable information, but they are rarely used.
2016-07-09 11:57:21 +00:00
Alexander Motin
f31eea5c49 Bring some more order into link and qp state handling.
Do not touch scratchpad registers until link is reported up.
Mask and do not handle doorbell events until respective qp is up.
2016-07-09 11:48:57 +00:00
Alexander Motin
1be8a2635c Create separate RX taskqueue for each qp. 2016-07-09 11:46:32 +00:00
Alexander Motin
784ec7043b Remove rx_completion_task taskqueue.
It is not needed after RX lock removed in previous commit.
2016-07-09 11:45:18 +00:00
Alexander Motin
0a42578f0d Remove unneeded RX lock, and make TX lock per-qp. 2016-07-09 11:43:51 +00:00
Alexander Motin
0c84bc33cf Reduce code divergence from Linux, preparing for DMA support. 2016-07-09 11:40:59 +00:00
Alexander Motin
f7be35856a Fix operation with multiple qps. 2016-07-09 11:36:09 +00:00
Alexander Motin
9a5325c205 NewBus'ify NTB subsystem.
This follows NTB subsystem modularization in Linux, tuning it to FreeBSD
native NewBus interfaces.  This change allows to support different types
of hardware with different drivers, support multiple NTB instances in a
system, ntb_transport module use for needs other then if_ntb, etc.

Sponsored by:	iXsystems, Inc.
2016-07-09 11:20:42 +00:00