1 /*
2 * This file is provided under a dual BSD/GPLv2 license. When using or
3 * redistributing this file, you may do so under either license.
4 *
5 * GPL LICENSE SUMMARY
6 *
7 * Copyright(c) 2012 Intel Corporation. All rights reserved.
8 * Copyright (C) 2015 EMC Corporation. All Rights Reserved.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of version 2 of the GNU General Public License as
12 * published by the Free Software Foundation.
13 *
14 * BSD LICENSE
15 *
16 * Copyright(c) 2012 Intel Corporation. All rights reserved.
17 * Copyright (C) 2015 EMC Corporation. All Rights Reserved.
18 *
19 * Redistribution and use in source and binary forms, with or without
20 * modification, are permitted provided that the following conditions
21 * are met:
22 *
23 * * Redistributions of source code must retain the above copyright
24 * notice, this list of conditions and the following disclaimer.
25 * * Redistributions in binary form must reproduce the above copy
26 * notice, this list of conditions and the following disclaimer in
27 * the documentation and/or other materials provided with the
28 * distribution.
29 * * Neither the name of Intel Corporation nor the names of its
30 * contributors may be used to endorse or promote products derived
31 * from this software without specific prior written permission.
32 *
33 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
34 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
35 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
36 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
37 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
38 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
39 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
40 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
41 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
42 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
43 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
44 *
45 * PCIe NTB Transport Linux driver
46 *
47 * Contact Information:
48 * Jon Mason <jon.mason@intel.com>
49 */
50 #include <linux/debugfs.h>
51 #include <linux/delay.h>
52 #include <linux/dmaengine.h>
53 #include <linux/dma-mapping.h>
54 #include <linux/errno.h>
55 #include <linux/export.h>
56 #include <linux/interrupt.h>
57 #include <linux/kthread.h>
58 #include <linux/module.h>
59 #include <linux/pci.h>
60 #include <linux/slab.h>
61 #include <linux/seq_file.h>
62 #include <linux/types.h>
63 #include <linux/uaccess.h>
64 #include <linux/mutex.h>
65 #include <linux/wait.h>
66 #include "linux/ntb.h"
67 #include "linux/ntb_transport.h"
68
69 #define NTB_TRANSPORT_VERSION 4
70 #define NTB_TRANSPORT_VER "4"
71 #define NTB_TRANSPORT_NAME "ntb_transport"
72 #define NTB_TRANSPORT_DESC "Software Queue-Pair Transport over NTB"
73 #define NTB_TRANSPORT_MIN_SPADS (MW0_SZ_HIGH + 2)
74
75 MODULE_DESCRIPTION(NTB_TRANSPORT_DESC);
76 MODULE_VERSION(NTB_TRANSPORT_VER);
77 MODULE_LICENSE("Dual BSD/GPL");
78 MODULE_AUTHOR("Intel Corporation");
79
80 static unsigned long max_mw_size;
81 module_param(max_mw_size, ulong, 0644);
82 MODULE_PARM_DESC(max_mw_size, "Limit size of large memory windows");
83
84 static unsigned int transport_mtu = 0x10000;
85 module_param(transport_mtu, uint, 0644);
86 MODULE_PARM_DESC(transport_mtu, "Maximum size of NTB transport packets");
87
88 static unsigned char max_num_clients;
89 module_param(max_num_clients, byte, 0644);
90 MODULE_PARM_DESC(max_num_clients, "Maximum number of NTB transport clients");
91
92 static unsigned int copy_bytes = 1024;
93 module_param(copy_bytes, uint, 0644);
94 MODULE_PARM_DESC(copy_bytes, "Threshold under which NTB will use the CPU to copy instead of DMA");
95
96 static bool use_dma;
97 module_param(use_dma, bool, 0644);
98 MODULE_PARM_DESC(use_dma, "Use DMA engine to perform large data copy");
99
100 static bool use_msi;
101 #ifdef CONFIG_NTB_MSI
102 module_param(use_msi, bool, 0644);
103 MODULE_PARM_DESC(use_msi, "Use MSI interrupts instead of doorbells");
104 #endif
105
106 static bool tx_memcpy_offload;
107 module_param(tx_memcpy_offload, bool, 0644);
108 MODULE_PARM_DESC(tx_memcpy_offload, "Offload TX memcpy_toio() to a kernel thread");
109
110 static struct dentry *nt_debugfs_dir;
111
112 /* Only two-ports NTB devices are supported */
113 #define PIDX NTB_DEF_PEER_IDX
114
115 struct ntb_queue_entry {
116 /* ntb_queue list reference */
117 struct list_head entry;
118 /* pointers to data to be transferred */
119 void *cb_data;
120 void *buf;
121 unsigned int len;
122 unsigned int flags;
123 int errors;
124 unsigned int tx_index;
125 unsigned int rx_index;
126
127 struct ntb_transport_qp *qp;
128 union {
129 struct ntb_payload_header __iomem *tx_hdr;
130 struct ntb_payload_header *rx_hdr;
131 };
132 };
133
134 struct ntb_rx_info {
135 unsigned int entry;
136 };
137
138 struct ntb_transport_qp {
139 struct ntb_transport_ctx *transport;
140 struct ntb_dev *ndev;
141 void *cb_data;
142 struct dma_chan *tx_dma_chan;
143 struct dma_chan *rx_dma_chan;
144
145 bool client_ready;
146 bool link_is_up;
147 bool active;
148
149 u8 qp_num; /* Only 64 QP's are allowed. 0-63 */
150 u64 qp_bit;
151
152 struct ntb_rx_info __iomem *rx_info;
153 struct ntb_rx_info *remote_rx_info;
154
155 void (*tx_handler)(struct ntb_transport_qp *qp, void *qp_data,
156 void *data, int len);
157 struct list_head tx_free_q;
158 struct list_head tx_offl_q;
159 spinlock_t ntb_tx_free_q_lock;
160 spinlock_t ntb_tx_offl_q_lock;
161 void __iomem *tx_mw;
162 phys_addr_t tx_mw_phys;
163 size_t tx_mw_size;
164 dma_addr_t tx_mw_dma_addr;
165 unsigned int tx_index;
166 unsigned int tx_max_entry;
167 unsigned int tx_max_frame;
168
169 void (*rx_handler)(struct ntb_transport_qp *qp, void *qp_data,
170 void *data, int len);
171 struct list_head rx_post_q;
172 struct list_head rx_pend_q;
173 struct list_head rx_free_q;
174 /* ntb_rx_q_lock: synchronize access to rx_XXXX_q */
175 spinlock_t ntb_rx_q_lock;
176 void *rx_buff;
177 unsigned int rx_index;
178 unsigned int rx_max_entry;
179 unsigned int rx_max_frame;
180 unsigned int rx_alloc_entry;
181 dma_cookie_t last_cookie;
182 struct tasklet_struct rxc_db_work;
183
184 void (*event_handler)(void *data, int status);
185 struct delayed_work link_work;
186 struct work_struct link_cleanup;
187
188 struct dentry *debugfs_dir;
189 struct dentry *debugfs_stats;
190
191 /* Stats */
192 u64 rx_bytes;
193 u64 rx_pkts;
194 u64 rx_ring_empty;
195 u64 rx_err_no_buf;
196 u64 rx_err_oflow;
197 u64 rx_err_ver;
198 u64 rx_memcpy;
199 u64 rx_async;
200 u64 tx_bytes;
201 u64 tx_pkts;
202 u64 tx_ring_full;
203 u64 tx_err_no_buf;
204 u64 tx_memcpy;
205 u64 tx_async;
206
207 bool use_msi;
208 int msi_irq;
209 struct ntb_msi_desc msi_desc;
210 struct ntb_msi_desc peer_msi_desc;
211
212 struct task_struct *tx_offload_thread;
213 wait_queue_head_t tx_offload_wq;
214 };
215
216 struct ntb_transport_mw {
217 phys_addr_t phys_addr;
218 resource_size_t phys_size;
219 void __iomem *vbase;
220 size_t xlat_size;
221 size_t buff_size;
222 size_t alloc_size;
223 void *alloc_addr;
224 void *virt_addr;
225 dma_addr_t dma_addr;
226 dma_addr_t original_dma_addr;
227 };
228
229 struct ntb_transport_client_dev {
230 struct list_head entry;
231 struct ntb_transport_ctx *nt;
232 struct device dev;
233 };
234
235 struct ntb_transport_ctx {
236 struct list_head entry;
237 struct list_head client_devs;
238
239 struct ntb_dev *ndev;
240
241 struct ntb_transport_mw *mw_vec;
242 struct ntb_transport_qp *qp_vec;
243 unsigned int mw_count;
244 unsigned int qp_count;
245 u64 qp_bitmap;
246 u64 qp_bitmap_free;
247
248 bool use_msi;
249 unsigned int msi_spad_offset;
250 u64 msi_db_mask;
251
252 bool link_is_up;
253 struct delayed_work link_work;
254 struct work_struct link_cleanup;
255
256 struct dentry *debugfs_node_dir;
257
258 /* Make sure workq of link event be executed serially */
259 struct mutex link_event_lock;
260 };
261
262 enum {
263 DESC_DONE_FLAG = BIT(0),
264 LINK_DOWN_FLAG = BIT(1),
265 };
266
267 struct ntb_payload_header {
268 unsigned int ver;
269 unsigned int len;
270 unsigned int flags;
271 };
272
273 enum {
274 VERSION = 0,
275 QP_LINKS,
276 NUM_QPS,
277 NUM_MWS,
278 MW0_SZ_HIGH,
279 MW0_SZ_LOW,
280 };
281
282 #define dev_client_dev(__dev) \
283 container_of((__dev), struct ntb_transport_client_dev, dev)
284
285 #define drv_client(__drv) \
286 container_of((__drv), struct ntb_transport_client, driver)
287
288 #define QP_TO_MW(nt, qp) ((qp) % nt->mw_count)
289 #define NTB_QP_DEF_NUM_ENTRIES 100
290 #define NTB_LINK_DOWN_TIMEOUT 10
291
292 static void ntb_transport_rxc_db(unsigned long data);
293 static const struct ntb_ctx_ops ntb_transport_ops;
294 static struct ntb_client ntb_transport_client;
295 static int ntb_async_tx_submit(struct ntb_transport_qp *qp,
296 struct ntb_queue_entry *entry);
297 static void ntb_memcpy_tx(struct ntb_queue_entry *entry, void __iomem *offset);
298 static int ntb_async_rx_submit(struct ntb_queue_entry *entry, void *offset);
299 static void ntb_memcpy_rx(struct ntb_queue_entry *entry, void *offset);
300 static int ntb_tx_memcpy_kthread(void *data);
301
302
ntb_tx_offload_enabled(struct ntb_transport_qp * qp)303 static inline bool ntb_tx_offload_enabled(struct ntb_transport_qp *qp)
304 {
305 return tx_memcpy_offload && qp && qp->tx_offload_thread;
306 }
307
ntb_transport_bus_match(struct device * dev,const struct device_driver * drv)308 static int ntb_transport_bus_match(struct device *dev,
309 const struct device_driver *drv)
310 {
311 return !strncmp(dev_name(dev), drv->name, strlen(drv->name));
312 }
313
ntb_transport_bus_probe(struct device * dev)314 static int ntb_transport_bus_probe(struct device *dev)
315 {
316 const struct ntb_transport_client *client;
317 int rc;
318
319 get_device(dev);
320
321 client = drv_client(dev->driver);
322 rc = client->probe(dev);
323 if (rc)
324 put_device(dev);
325
326 return rc;
327 }
328
ntb_transport_bus_remove(struct device * dev)329 static void ntb_transport_bus_remove(struct device *dev)
330 {
331 const struct ntb_transport_client *client;
332
333 client = drv_client(dev->driver);
334 client->remove(dev);
335
336 put_device(dev);
337 }
338
339 static const struct bus_type ntb_transport_bus = {
340 .name = "ntb_transport",
341 .match = ntb_transport_bus_match,
342 .probe = ntb_transport_bus_probe,
343 .remove = ntb_transport_bus_remove,
344 };
345
346 static LIST_HEAD(ntb_transport_list);
347
ntb_bus_init(struct ntb_transport_ctx * nt)348 static int ntb_bus_init(struct ntb_transport_ctx *nt)
349 {
350 list_add_tail(&nt->entry, &ntb_transport_list);
351 return 0;
352 }
353
ntb_bus_remove(struct ntb_transport_ctx * nt)354 static void ntb_bus_remove(struct ntb_transport_ctx *nt)
355 {
356 struct ntb_transport_client_dev *client_dev, *cd;
357
358 list_for_each_entry_safe(client_dev, cd, &nt->client_devs, entry) {
359 dev_err(client_dev->dev.parent, "%s still attached to bus, removing\n",
360 dev_name(&client_dev->dev));
361 list_del(&client_dev->entry);
362 device_unregister(&client_dev->dev);
363 }
364
365 list_del(&nt->entry);
366 }
367
ntb_transport_client_release(struct device * dev)368 static void ntb_transport_client_release(struct device *dev)
369 {
370 struct ntb_transport_client_dev *client_dev;
371
372 client_dev = dev_client_dev(dev);
373 kfree(client_dev);
374 }
375
376 /**
377 * ntb_transport_unregister_client_dev - Unregister NTB client device
378 * @device_name: Name of NTB client device
379 *
380 * Unregister an NTB client device with the NTB transport layer
381 */
ntb_transport_unregister_client_dev(char * device_name)382 void ntb_transport_unregister_client_dev(char *device_name)
383 {
384 struct ntb_transport_client_dev *client, *cd;
385 struct ntb_transport_ctx *nt;
386
387 list_for_each_entry(nt, &ntb_transport_list, entry)
388 list_for_each_entry_safe(client, cd, &nt->client_devs, entry)
389 if (!strncmp(dev_name(&client->dev), device_name,
390 strlen(device_name))) {
391 list_del(&client->entry);
392 device_unregister(&client->dev);
393 }
394 }
395 EXPORT_SYMBOL_GPL(ntb_transport_unregister_client_dev);
396
397 /**
398 * ntb_transport_register_client_dev - Register NTB client device
399 * @device_name: Name of NTB client device
400 *
401 * Register an NTB client device with the NTB transport layer
402 *
403 * Returns: %0 on success or -errno code on error
404 */
ntb_transport_register_client_dev(char * device_name)405 int ntb_transport_register_client_dev(char *device_name)
406 {
407 struct ntb_transport_client_dev *client_dev;
408 struct ntb_transport_ctx *nt;
409 int node;
410 int rc, i = 0;
411
412 if (list_empty(&ntb_transport_list))
413 return -ENODEV;
414
415 list_for_each_entry(nt, &ntb_transport_list, entry) {
416 struct device *dev;
417
418 node = dev_to_node(&nt->ndev->dev);
419
420 client_dev = kzalloc_node(sizeof(*client_dev),
421 GFP_KERNEL, node);
422 if (!client_dev) {
423 rc = -ENOMEM;
424 goto err;
425 }
426
427 dev = &client_dev->dev;
428
429 /* setup and register client devices */
430 dev_set_name(dev, "%s%d", device_name, i);
431 dev->bus = &ntb_transport_bus;
432 dev->release = ntb_transport_client_release;
433 dev->parent = &nt->ndev->dev;
434
435 rc = device_register(dev);
436 if (rc) {
437 put_device(dev);
438 goto err;
439 }
440
441 list_add_tail(&client_dev->entry, &nt->client_devs);
442 i++;
443 }
444
445 return 0;
446
447 err:
448 ntb_transport_unregister_client_dev(device_name);
449
450 return rc;
451 }
452 EXPORT_SYMBOL_GPL(ntb_transport_register_client_dev);
453
454 /**
455 * ntb_transport_register_client - Register NTB client driver
456 * @drv: NTB client driver to be registered
457 *
458 * Register an NTB client driver with the NTB transport layer
459 *
460 * RETURNS: An appropriate -ERRNO error value on error, or zero for success.
461 */
ntb_transport_register_client(struct ntb_transport_client * drv)462 int ntb_transport_register_client(struct ntb_transport_client *drv)
463 {
464 drv->driver.bus = &ntb_transport_bus;
465
466 if (list_empty(&ntb_transport_list))
467 return -ENODEV;
468
469 return driver_register(&drv->driver);
470 }
471 EXPORT_SYMBOL_GPL(ntb_transport_register_client);
472
473 /**
474 * ntb_transport_unregister_client - Unregister NTB client driver
475 * @drv: NTB client driver to be unregistered
476 *
477 * Unregister an NTB client driver with the NTB transport layer
478 *
479 * RETURNS: An appropriate -ERRNO error value on error, or zero for success.
480 */
ntb_transport_unregister_client(struct ntb_transport_client * drv)481 void ntb_transport_unregister_client(struct ntb_transport_client *drv)
482 {
483 driver_unregister(&drv->driver);
484 }
485 EXPORT_SYMBOL_GPL(ntb_transport_unregister_client);
486
ntb_qp_debugfs_stats_show(struct seq_file * s,void * v)487 static int ntb_qp_debugfs_stats_show(struct seq_file *s, void *v)
488 {
489 struct ntb_transport_qp *qp = s->private;
490
491 if (!qp || !qp->link_is_up)
492 return 0;
493
494 seq_puts(s, "\nNTB QP stats:\n\n");
495
496 seq_printf(s, "rx_bytes - \t%llu\n", qp->rx_bytes);
497 seq_printf(s, "rx_pkts - \t%llu\n", qp->rx_pkts);
498 seq_printf(s, "rx_memcpy - \t%llu\n", qp->rx_memcpy);
499 seq_printf(s, "rx_async - \t%llu\n", qp->rx_async);
500 seq_printf(s, "rx_ring_empty - %llu\n", qp->rx_ring_empty);
501 seq_printf(s, "rx_err_no_buf - %llu\n", qp->rx_err_no_buf);
502 seq_printf(s, "rx_err_oflow - \t%llu\n", qp->rx_err_oflow);
503 seq_printf(s, "rx_err_ver - \t%llu\n", qp->rx_err_ver);
504 seq_printf(s, "rx_buff - \t0x%p\n", qp->rx_buff);
505 seq_printf(s, "rx_index - \t%u\n", qp->rx_index);
506 seq_printf(s, "rx_max_entry - \t%u\n", qp->rx_max_entry);
507 seq_printf(s, "rx_alloc_entry - \t%u\n\n", qp->rx_alloc_entry);
508
509 seq_printf(s, "tx_bytes - \t%llu\n", qp->tx_bytes);
510 seq_printf(s, "tx_pkts - \t%llu\n", qp->tx_pkts);
511 seq_printf(s, "tx_memcpy - \t%llu\n", qp->tx_memcpy);
512 seq_printf(s, "tx_async - \t%llu\n", qp->tx_async);
513 seq_printf(s, "tx_ring_full - \t%llu\n", qp->tx_ring_full);
514 seq_printf(s, "tx_err_no_buf - %llu\n", qp->tx_err_no_buf);
515 seq_printf(s, "tx_mw - \t0x%p\n", qp->tx_mw);
516 seq_printf(s, "tx_index (H) - \t%u\n", qp->tx_index);
517 seq_printf(s, "RRI (T) - \t%u\n", qp->remote_rx_info->entry);
518 seq_printf(s, "tx_max_entry - \t%u\n", qp->tx_max_entry);
519 seq_printf(s, "free tx - \t%u\n", ntb_transport_tx_free_entry(qp));
520 seq_putc(s, '\n');
521
522 seq_printf(s, "Using TX DMA - \t%s\n", qp->tx_dma_chan ? "Yes" : "No");
523 seq_printf(s, "Using RX DMA - \t%s\n", qp->rx_dma_chan ? "Yes" : "No");
524 seq_printf(s, "QP Link - \t%s\n", qp->link_is_up ? "Up" : "Down");
525 seq_putc(s, '\n');
526
527 return 0;
528 }
529 DEFINE_SHOW_ATTRIBUTE(ntb_qp_debugfs_stats);
530
ntb_list_add(spinlock_t * lock,struct list_head * entry,struct list_head * list)531 static void ntb_list_add(spinlock_t *lock, struct list_head *entry,
532 struct list_head *list)
533 {
534 unsigned long flags;
535
536 spin_lock_irqsave(lock, flags);
537 list_add_tail(entry, list);
538 spin_unlock_irqrestore(lock, flags);
539 }
540
ntb_list_rm(spinlock_t * lock,struct list_head * list)541 static struct ntb_queue_entry *ntb_list_rm(spinlock_t *lock,
542 struct list_head *list)
543 {
544 struct ntb_queue_entry *entry;
545 unsigned long flags;
546
547 spin_lock_irqsave(lock, flags);
548 if (list_empty(list)) {
549 entry = NULL;
550 goto out;
551 }
552 entry = list_first_entry(list, struct ntb_queue_entry, entry);
553 list_del(&entry->entry);
554
555 out:
556 spin_unlock_irqrestore(lock, flags);
557
558 return entry;
559 }
560
ntb_list_mv(spinlock_t * lock,struct list_head * list,struct list_head * to_list)561 static struct ntb_queue_entry *ntb_list_mv(spinlock_t *lock,
562 struct list_head *list,
563 struct list_head *to_list)
564 {
565 struct ntb_queue_entry *entry;
566 unsigned long flags;
567
568 spin_lock_irqsave(lock, flags);
569
570 if (list_empty(list)) {
571 entry = NULL;
572 } else {
573 entry = list_first_entry(list, struct ntb_queue_entry, entry);
574 list_move_tail(&entry->entry, to_list);
575 }
576
577 spin_unlock_irqrestore(lock, flags);
578
579 return entry;
580 }
581
ntb_transport_setup_qp_mw(struct ntb_transport_ctx * nt,unsigned int qp_num)582 static int ntb_transport_setup_qp_mw(struct ntb_transport_ctx *nt,
583 unsigned int qp_num)
584 {
585 struct ntb_transport_qp *qp = &nt->qp_vec[qp_num];
586 struct ntb_transport_mw *mw;
587 struct ntb_dev *ndev = nt->ndev;
588 struct ntb_queue_entry *entry;
589 unsigned int rx_size, num_qps_mw;
590 unsigned int mw_num, mw_count, qp_count;
591 unsigned int i;
592 int node;
593
594 mw_count = nt->mw_count;
595 qp_count = nt->qp_count;
596
597 mw_num = QP_TO_MW(nt, qp_num);
598 mw = &nt->mw_vec[mw_num];
599
600 if (!mw->virt_addr)
601 return -ENOMEM;
602
603 if (mw_num < qp_count % mw_count)
604 num_qps_mw = qp_count / mw_count + 1;
605 else
606 num_qps_mw = qp_count / mw_count;
607
608 rx_size = (unsigned int)mw->xlat_size / num_qps_mw;
609 qp->rx_buff = mw->virt_addr + rx_size * (qp_num / mw_count);
610 rx_size -= sizeof(struct ntb_rx_info);
611
612 qp->remote_rx_info = qp->rx_buff + rx_size;
613
614 /* Due to housekeeping, there must be atleast 2 buffs */
615 qp->rx_max_frame = min(transport_mtu, rx_size / 2);
616 qp->rx_max_entry = rx_size / qp->rx_max_frame;
617 qp->rx_index = 0;
618
619 /*
620 * Checking to see if we have more entries than the default.
621 * We should add additional entries if that is the case so we
622 * can be in sync with the transport frames.
623 */
624 node = dev_to_node(&ndev->dev);
625 for (i = qp->rx_alloc_entry; i < qp->rx_max_entry; i++) {
626 entry = kzalloc_node(sizeof(*entry), GFP_KERNEL, node);
627 if (!entry)
628 return -ENOMEM;
629
630 entry->qp = qp;
631 ntb_list_add(&qp->ntb_rx_q_lock, &entry->entry,
632 &qp->rx_free_q);
633 qp->rx_alloc_entry++;
634 }
635
636 qp->remote_rx_info->entry = qp->rx_max_entry - 1;
637
638 /* setup the hdr offsets with 0's */
639 for (i = 0; i < qp->rx_max_entry; i++) {
640 void *offset = (qp->rx_buff + qp->rx_max_frame * (i + 1) -
641 sizeof(struct ntb_payload_header));
642 memset(offset, 0, sizeof(struct ntb_payload_header));
643 }
644
645 qp->rx_pkts = 0;
646 qp->tx_pkts = 0;
647 qp->tx_index = 0;
648
649 return 0;
650 }
651
ntb_transport_isr(int irq,void * dev)652 static irqreturn_t ntb_transport_isr(int irq, void *dev)
653 {
654 struct ntb_transport_qp *qp = dev;
655
656 tasklet_schedule(&qp->rxc_db_work);
657
658 return IRQ_HANDLED;
659 }
660
ntb_transport_setup_qp_peer_msi(struct ntb_transport_ctx * nt,unsigned int qp_num)661 static void ntb_transport_setup_qp_peer_msi(struct ntb_transport_ctx *nt,
662 unsigned int qp_num)
663 {
664 struct ntb_transport_qp *qp = &nt->qp_vec[qp_num];
665 int spad = qp_num * 2 + nt->msi_spad_offset;
666
667 if (!nt->use_msi)
668 return;
669
670 if (spad >= ntb_spad_count(nt->ndev))
671 return;
672
673 qp->peer_msi_desc.addr_offset =
674 ntb_peer_spad_read(qp->ndev, PIDX, spad);
675 qp->peer_msi_desc.data =
676 ntb_peer_spad_read(qp->ndev, PIDX, spad + 1);
677
678 dev_dbg(&qp->ndev->pdev->dev, "QP%d Peer MSI addr=%x data=%x\n",
679 qp_num, qp->peer_msi_desc.addr_offset, qp->peer_msi_desc.data);
680
681 if (qp->peer_msi_desc.addr_offset) {
682 qp->use_msi = true;
683 dev_info(&qp->ndev->pdev->dev,
684 "Using MSI interrupts for QP%d\n", qp_num);
685 }
686 }
687
ntb_transport_setup_qp_msi(struct ntb_transport_ctx * nt,unsigned int qp_num)688 static void ntb_transport_setup_qp_msi(struct ntb_transport_ctx *nt,
689 unsigned int qp_num)
690 {
691 struct ntb_transport_qp *qp = &nt->qp_vec[qp_num];
692 int spad = qp_num * 2 + nt->msi_spad_offset;
693 int rc;
694
695 if (!nt->use_msi)
696 return;
697
698 if (spad >= ntb_spad_count(nt->ndev)) {
699 dev_warn_once(&qp->ndev->pdev->dev,
700 "Not enough SPADS to use MSI interrupts\n");
701 return;
702 }
703
704 ntb_spad_write(qp->ndev, spad, 0);
705 ntb_spad_write(qp->ndev, spad + 1, 0);
706
707 if (!qp->msi_irq) {
708 qp->msi_irq = ntbm_msi_request_irq(qp->ndev, ntb_transport_isr,
709 KBUILD_MODNAME, qp,
710 &qp->msi_desc);
711 if (qp->msi_irq < 0) {
712 dev_warn(&qp->ndev->pdev->dev,
713 "Unable to allocate MSI interrupt for qp%d\n",
714 qp_num);
715 return;
716 }
717 }
718
719 rc = ntb_spad_write(qp->ndev, spad, qp->msi_desc.addr_offset);
720 if (rc)
721 goto err_free_interrupt;
722
723 rc = ntb_spad_write(qp->ndev, spad + 1, qp->msi_desc.data);
724 if (rc)
725 goto err_free_interrupt;
726
727 dev_dbg(&qp->ndev->pdev->dev, "QP%d MSI %d addr=%x data=%x\n",
728 qp_num, qp->msi_irq, qp->msi_desc.addr_offset,
729 qp->msi_desc.data);
730
731 return;
732
733 err_free_interrupt:
734 devm_free_irq(&nt->ndev->dev, qp->msi_irq, qp);
735 }
736
ntb_transport_msi_peer_desc_changed(struct ntb_transport_ctx * nt)737 static void ntb_transport_msi_peer_desc_changed(struct ntb_transport_ctx *nt)
738 {
739 int i;
740
741 dev_dbg(&nt->ndev->pdev->dev, "Peer MSI descriptors changed");
742
743 for (i = 0; i < nt->qp_count; i++)
744 ntb_transport_setup_qp_peer_msi(nt, i);
745 }
746
ntb_transport_msi_desc_changed(void * data)747 static void ntb_transport_msi_desc_changed(void *data)
748 {
749 struct ntb_transport_ctx *nt = data;
750 int i;
751
752 dev_dbg(&nt->ndev->pdev->dev, "MSI descriptors changed");
753
754 for (i = 0; i < nt->qp_count; i++)
755 ntb_transport_setup_qp_msi(nt, i);
756
757 ntb_peer_db_set(nt->ndev, nt->msi_db_mask);
758 }
759
ntb_free_mw(struct ntb_transport_ctx * nt,int num_mw)760 static void ntb_free_mw(struct ntb_transport_ctx *nt, int num_mw)
761 {
762 struct ntb_transport_mw *mw = &nt->mw_vec[num_mw];
763 struct device *dma_dev = ntb_get_dma_dev(nt->ndev);
764
765 if (!mw->virt_addr)
766 return;
767
768 ntb_mw_clear_trans(nt->ndev, PIDX, num_mw);
769 dma_free_attrs(dma_dev, mw->alloc_size, mw->alloc_addr,
770 mw->original_dma_addr, DMA_ATTR_FORCE_CONTIGUOUS);
771 mw->xlat_size = 0;
772 mw->buff_size = 0;
773 mw->alloc_size = 0;
774 mw->alloc_addr = NULL;
775 mw->virt_addr = NULL;
776 }
777
ntb_alloc_mw_buffer(struct ntb_transport_mw * mw,struct device * ntb_dev,size_t align)778 static int ntb_alloc_mw_buffer(struct ntb_transport_mw *mw,
779 struct device *ntb_dev, size_t align)
780 {
781 dma_addr_t dma_addr;
782 void *alloc_addr, *virt_addr;
783 int rc;
784
785 /*
786 * The buffer here is allocated against the NTB device. The reason to
787 * use dma_alloc_*() call is to allocate a large IOVA contiguous buffer
788 * backing the NTB BAR for the remote host to write to. During receive
789 * processing, the data is being copied out of the receive buffer to
790 * the kernel skbuff. When a DMA device is being used, dma_map_page()
791 * is called on the kvaddr of the receive buffer (from dma_alloc_*())
792 * and remapped against the DMA device. It appears to be a double
793 * DMA mapping of buffers, but first is mapped to the NTB device and
794 * second is to the DMA device. DMA_ATTR_FORCE_CONTIGUOUS is necessary
795 * in order for the later dma_map_page() to not fail.
796 */
797 alloc_addr = dma_alloc_attrs(ntb_dev, mw->alloc_size,
798 &dma_addr, GFP_KERNEL,
799 DMA_ATTR_FORCE_CONTIGUOUS);
800 if (!alloc_addr) {
801 dev_err(ntb_dev, "Unable to alloc MW buff of size %zu\n",
802 mw->alloc_size);
803 return -ENOMEM;
804 }
805 virt_addr = alloc_addr;
806 mw->original_dma_addr = dma_addr;
807
808 /*
809 * we must ensure that the memory address allocated is BAR size
810 * aligned in order for the XLAT register to take the value. This
811 * is a requirement of the hardware. It is recommended to setup CMA
812 * for BAR sizes equal or greater than 4MB.
813 */
814 if (!IS_ALIGNED(dma_addr, align)) {
815 if (mw->alloc_size > mw->buff_size) {
816 virt_addr = PTR_ALIGN(alloc_addr, align);
817 dma_addr = ALIGN(dma_addr, align);
818 } else {
819 rc = -ENOMEM;
820 goto err;
821 }
822 }
823
824 mw->alloc_addr = alloc_addr;
825 mw->virt_addr = virt_addr;
826 mw->dma_addr = dma_addr;
827
828 return 0;
829
830 err:
831 dma_free_attrs(ntb_dev, mw->alloc_size, alloc_addr, dma_addr,
832 DMA_ATTR_FORCE_CONTIGUOUS);
833 return rc;
834 }
835
ntb_set_mw(struct ntb_transport_ctx * nt,int num_mw,resource_size_t size)836 static int ntb_set_mw(struct ntb_transport_ctx *nt, int num_mw,
837 resource_size_t size)
838 {
839 struct ntb_transport_mw *mw = &nt->mw_vec[num_mw];
840 struct device *dma_dev = ntb_get_dma_dev(nt->ndev);
841 size_t xlat_size, buff_size;
842 resource_size_t xlat_align;
843 resource_size_t xlat_align_size;
844 int rc;
845
846 if (!size)
847 return -EINVAL;
848
849 rc = ntb_mw_get_align(nt->ndev, PIDX, num_mw, &xlat_align,
850 &xlat_align_size, NULL);
851 if (rc)
852 return rc;
853
854 xlat_size = round_up(size, xlat_align_size);
855 buff_size = round_up(size, xlat_align);
856
857 /* No need to re-setup */
858 if (mw->xlat_size == xlat_size)
859 return 0;
860
861 if (mw->buff_size)
862 ntb_free_mw(nt, num_mw);
863
864 /* Alloc memory for receiving data. Must be aligned */
865 mw->xlat_size = xlat_size;
866 mw->buff_size = buff_size;
867 mw->alloc_size = buff_size;
868
869 rc = ntb_alloc_mw_buffer(mw, dma_dev, xlat_align);
870 if (rc) {
871 mw->alloc_size *= 2;
872 rc = ntb_alloc_mw_buffer(mw, dma_dev, xlat_align);
873 if (rc) {
874 dev_err(dma_dev,
875 "Unable to alloc aligned MW buff\n");
876 mw->xlat_size = 0;
877 mw->buff_size = 0;
878 mw->alloc_size = 0;
879 return rc;
880 }
881 }
882
883 /* Notify HW the memory location of the receive buffer */
884 rc = ntb_mw_set_trans(nt->ndev, PIDX, num_mw, mw->dma_addr,
885 mw->xlat_size);
886 if (rc) {
887 dev_err(dma_dev, "Unable to set mw%d translation", num_mw);
888 ntb_free_mw(nt, num_mw);
889 return -EIO;
890 }
891
892 return 0;
893 }
894
ntb_qp_link_context_reset(struct ntb_transport_qp * qp)895 static void ntb_qp_link_context_reset(struct ntb_transport_qp *qp)
896 {
897 qp->link_is_up = false;
898 qp->active = false;
899
900 qp->tx_index = 0;
901 qp->rx_index = 0;
902 qp->rx_bytes = 0;
903 qp->rx_pkts = 0;
904 qp->rx_ring_empty = 0;
905 qp->rx_err_no_buf = 0;
906 qp->rx_err_oflow = 0;
907 qp->rx_err_ver = 0;
908 qp->rx_memcpy = 0;
909 qp->rx_async = 0;
910 qp->tx_bytes = 0;
911 qp->tx_pkts = 0;
912 qp->tx_ring_full = 0;
913 qp->tx_err_no_buf = 0;
914 qp->tx_memcpy = 0;
915 qp->tx_async = 0;
916 }
917
ntb_qp_link_down_reset(struct ntb_transport_qp * qp)918 static void ntb_qp_link_down_reset(struct ntb_transport_qp *qp)
919 {
920 ntb_qp_link_context_reset(qp);
921 if (qp->remote_rx_info)
922 qp->remote_rx_info->entry = qp->rx_max_entry - 1;
923 }
924
ntb_qp_link_cleanup(struct ntb_transport_qp * qp)925 static void ntb_qp_link_cleanup(struct ntb_transport_qp *qp)
926 {
927 struct ntb_transport_ctx *nt = qp->transport;
928 struct pci_dev *pdev = nt->ndev->pdev;
929
930 dev_info(&pdev->dev, "qp %d: Link Cleanup\n", qp->qp_num);
931
932 cancel_delayed_work_sync(&qp->link_work);
933 ntb_qp_link_down_reset(qp);
934
935 if (qp->event_handler)
936 qp->event_handler(qp->cb_data, qp->link_is_up);
937 }
938
ntb_qp_link_cleanup_work(struct work_struct * work)939 static void ntb_qp_link_cleanup_work(struct work_struct *work)
940 {
941 struct ntb_transport_qp *qp = container_of(work,
942 struct ntb_transport_qp,
943 link_cleanup);
944 struct ntb_transport_ctx *nt = qp->transport;
945
946 ntb_qp_link_cleanup(qp);
947
948 if (nt->link_is_up)
949 schedule_delayed_work(&qp->link_work,
950 msecs_to_jiffies(NTB_LINK_DOWN_TIMEOUT));
951 }
952
ntb_qp_link_down(struct ntb_transport_qp * qp)953 static void ntb_qp_link_down(struct ntb_transport_qp *qp)
954 {
955 schedule_work(&qp->link_cleanup);
956 }
957
ntb_transport_link_cleanup(struct ntb_transport_ctx * nt)958 static void ntb_transport_link_cleanup(struct ntb_transport_ctx *nt)
959 {
960 struct ntb_transport_qp *qp;
961 u64 qp_bitmap_alloc;
962 unsigned int i, count;
963
964 qp_bitmap_alloc = nt->qp_bitmap & ~nt->qp_bitmap_free;
965
966 /* Pass along the info to any clients */
967 for (i = 0; i < nt->qp_count; i++)
968 if (qp_bitmap_alloc & BIT_ULL(i)) {
969 qp = &nt->qp_vec[i];
970 ntb_qp_link_cleanup(qp);
971 cancel_work_sync(&qp->link_cleanup);
972 cancel_delayed_work_sync(&qp->link_work);
973 }
974
975 if (!nt->link_is_up)
976 cancel_delayed_work_sync(&nt->link_work);
977
978 for (i = 0; i < nt->mw_count; i++)
979 ntb_free_mw(nt, i);
980
981 /* The scratchpad registers keep the values if the remote side
982 * goes down, blast them now to give them a sane value the next
983 * time they are accessed
984 */
985 count = ntb_spad_count(nt->ndev);
986 for (i = 0; i < count; i++)
987 ntb_spad_write(nt->ndev, i, 0);
988 }
989
ntb_transport_link_cleanup_work(struct work_struct * work)990 static void ntb_transport_link_cleanup_work(struct work_struct *work)
991 {
992 struct ntb_transport_ctx *nt =
993 container_of(work, struct ntb_transport_ctx, link_cleanup);
994
995 guard(mutex)(&nt->link_event_lock);
996 ntb_transport_link_cleanup(nt);
997 }
998
ntb_transport_event_callback(void * data)999 static void ntb_transport_event_callback(void *data)
1000 {
1001 struct ntb_transport_ctx *nt = data;
1002
1003 if (ntb_link_is_up(nt->ndev, NULL, NULL) == 1)
1004 schedule_delayed_work(&nt->link_work, 0);
1005 else
1006 schedule_work(&nt->link_cleanup);
1007 }
1008
ntb_transport_link_work(struct work_struct * work)1009 static void ntb_transport_link_work(struct work_struct *work)
1010 {
1011 struct ntb_transport_ctx *nt =
1012 container_of(work, struct ntb_transport_ctx, link_work.work);
1013 struct ntb_dev *ndev = nt->ndev;
1014 struct pci_dev *pdev = ndev->pdev;
1015 resource_size_t size;
1016 u32 val;
1017 int rc = 0, i, spad;
1018
1019 guard(mutex)(&nt->link_event_lock);
1020
1021 /* send the local info, in the opposite order of the way we read it */
1022
1023 if (nt->use_msi) {
1024 rc = ntb_msi_setup_mws(ndev);
1025 if (rc) {
1026 dev_warn(&pdev->dev,
1027 "Failed to register MSI memory window: %d\n",
1028 rc);
1029 nt->use_msi = false;
1030 }
1031 }
1032
1033 for (i = 0; i < nt->qp_count; i++)
1034 ntb_transport_setup_qp_msi(nt, i);
1035
1036 for (i = 0; i < nt->mw_count; i++) {
1037 size = nt->mw_vec[i].phys_size;
1038
1039 if (max_mw_size && size > max_mw_size)
1040 size = max_mw_size;
1041
1042 spad = MW0_SZ_HIGH + (i * 2);
1043 ntb_peer_spad_write(ndev, PIDX, spad, upper_32_bits(size));
1044
1045 spad = MW0_SZ_LOW + (i * 2);
1046 ntb_peer_spad_write(ndev, PIDX, spad, lower_32_bits(size));
1047 }
1048
1049 ntb_peer_spad_write(ndev, PIDX, NUM_MWS, nt->mw_count);
1050
1051 ntb_peer_spad_write(ndev, PIDX, NUM_QPS, nt->qp_count);
1052
1053 ntb_peer_spad_write(ndev, PIDX, VERSION, NTB_TRANSPORT_VERSION);
1054
1055 /* Query the remote side for its info */
1056 val = ntb_spad_read(ndev, VERSION);
1057 dev_dbg(&pdev->dev, "Remote version = %d\n", val);
1058 if (val != NTB_TRANSPORT_VERSION)
1059 goto out;
1060
1061 val = ntb_spad_read(ndev, NUM_QPS);
1062 dev_dbg(&pdev->dev, "Remote max number of qps = %d\n", val);
1063 if (val != nt->qp_count)
1064 goto out;
1065
1066 val = ntb_spad_read(ndev, NUM_MWS);
1067 dev_dbg(&pdev->dev, "Remote number of mws = %d\n", val);
1068 if (val != nt->mw_count)
1069 goto out;
1070
1071 for (i = 0; i < nt->mw_count; i++) {
1072 u64 val64;
1073
1074 val = ntb_spad_read(ndev, MW0_SZ_HIGH + (i * 2));
1075 val64 = (u64)val << 32;
1076
1077 val = ntb_spad_read(ndev, MW0_SZ_LOW + (i * 2));
1078 val64 |= val;
1079
1080 dev_dbg(&pdev->dev, "Remote MW%d size = %#llx\n", i, val64);
1081
1082 rc = ntb_set_mw(nt, i, val64);
1083 if (rc)
1084 goto out1;
1085 }
1086
1087 nt->link_is_up = true;
1088
1089 for (i = 0; i < nt->qp_count; i++) {
1090 struct ntb_transport_qp *qp = &nt->qp_vec[i];
1091
1092 ntb_transport_setup_qp_mw(nt, i);
1093 ntb_transport_setup_qp_peer_msi(nt, i);
1094
1095 if (qp->client_ready)
1096 schedule_delayed_work(&qp->link_work, 0);
1097 }
1098
1099 return;
1100
1101 out1:
1102 for (i = 0; i < nt->mw_count; i++)
1103 ntb_free_mw(nt, i);
1104
1105 /* if there's an actual failure, we should just bail */
1106 if (rc < 0)
1107 return;
1108
1109 out:
1110 if (ntb_link_is_up(ndev, NULL, NULL) == 1)
1111 schedule_delayed_work(&nt->link_work,
1112 msecs_to_jiffies(NTB_LINK_DOWN_TIMEOUT));
1113 }
1114
ntb_qp_link_work(struct work_struct * work)1115 static void ntb_qp_link_work(struct work_struct *work)
1116 {
1117 struct ntb_transport_qp *qp = container_of(work,
1118 struct ntb_transport_qp,
1119 link_work.work);
1120 struct pci_dev *pdev = qp->ndev->pdev;
1121 struct ntb_transport_ctx *nt = qp->transport;
1122 int val;
1123
1124 WARN_ON(!nt->link_is_up);
1125
1126 val = ntb_spad_read(nt->ndev, QP_LINKS);
1127
1128 ntb_peer_spad_write(nt->ndev, PIDX, QP_LINKS, val | BIT(qp->qp_num));
1129
1130 /* query remote spad for qp ready bits */
1131 dev_dbg_ratelimited(&pdev->dev, "Remote QP link status = %x\n", val);
1132
1133 /* See if the remote side is up */
1134 if (val & BIT(qp->qp_num)) {
1135 dev_info(&pdev->dev, "qp %d: Link Up\n", qp->qp_num);
1136 qp->link_is_up = true;
1137 qp->active = true;
1138
1139 if (qp->event_handler)
1140 qp->event_handler(qp->cb_data, qp->link_is_up);
1141
1142 if (qp->active)
1143 tasklet_schedule(&qp->rxc_db_work);
1144 } else if (nt->link_is_up)
1145 schedule_delayed_work(&qp->link_work,
1146 msecs_to_jiffies(NTB_LINK_DOWN_TIMEOUT));
1147 }
1148
ntb_transport_init_queue(struct ntb_transport_ctx * nt,unsigned int qp_num)1149 static int ntb_transport_init_queue(struct ntb_transport_ctx *nt,
1150 unsigned int qp_num)
1151 {
1152 struct ntb_transport_qp *qp;
1153 phys_addr_t mw_base;
1154 resource_size_t mw_size;
1155 unsigned int num_qps_mw, tx_size;
1156 unsigned int mw_num, mw_count, qp_count;
1157 u64 qp_offset;
1158
1159 mw_count = nt->mw_count;
1160 qp_count = nt->qp_count;
1161
1162 mw_num = QP_TO_MW(nt, qp_num);
1163
1164 qp = &nt->qp_vec[qp_num];
1165 qp->qp_num = qp_num;
1166 qp->transport = nt;
1167 qp->ndev = nt->ndev;
1168 qp->client_ready = false;
1169 qp->event_handler = NULL;
1170 ntb_qp_link_context_reset(qp);
1171
1172 if (mw_num < qp_count % mw_count)
1173 num_qps_mw = qp_count / mw_count + 1;
1174 else
1175 num_qps_mw = qp_count / mw_count;
1176
1177 mw_base = nt->mw_vec[mw_num].phys_addr;
1178 mw_size = nt->mw_vec[mw_num].phys_size;
1179
1180 if (max_mw_size && mw_size > max_mw_size)
1181 mw_size = max_mw_size;
1182
1183 tx_size = (unsigned int)mw_size / num_qps_mw;
1184 qp_offset = tx_size * (qp_num / mw_count);
1185
1186 qp->tx_mw_size = tx_size;
1187 qp->tx_mw = nt->mw_vec[mw_num].vbase + qp_offset;
1188 if (!qp->tx_mw)
1189 return -EINVAL;
1190
1191 qp->tx_mw_phys = mw_base + qp_offset;
1192 if (!qp->tx_mw_phys)
1193 return -EINVAL;
1194
1195 tx_size -= sizeof(struct ntb_rx_info);
1196 qp->rx_info = qp->tx_mw + tx_size;
1197
1198 /* Due to housekeeping, there must be atleast 2 buffs */
1199 qp->tx_max_frame = min(transport_mtu, tx_size / 2);
1200 qp->tx_max_entry = tx_size / qp->tx_max_frame;
1201
1202 if (nt->debugfs_node_dir) {
1203 char debugfs_name[8];
1204
1205 snprintf(debugfs_name, sizeof(debugfs_name), "qp%d", qp_num);
1206 qp->debugfs_dir = debugfs_create_dir(debugfs_name,
1207 nt->debugfs_node_dir);
1208
1209 qp->debugfs_stats = debugfs_create_file("stats", S_IRUSR,
1210 qp->debugfs_dir, qp,
1211 &ntb_qp_debugfs_stats_fops);
1212 } else {
1213 qp->debugfs_dir = NULL;
1214 qp->debugfs_stats = NULL;
1215 }
1216
1217 INIT_DELAYED_WORK(&qp->link_work, ntb_qp_link_work);
1218 INIT_WORK(&qp->link_cleanup, ntb_qp_link_cleanup_work);
1219
1220 spin_lock_init(&qp->ntb_rx_q_lock);
1221 spin_lock_init(&qp->ntb_tx_free_q_lock);
1222 spin_lock_init(&qp->ntb_tx_offl_q_lock);
1223
1224 INIT_LIST_HEAD(&qp->rx_post_q);
1225 INIT_LIST_HEAD(&qp->rx_pend_q);
1226 INIT_LIST_HEAD(&qp->rx_free_q);
1227 INIT_LIST_HEAD(&qp->tx_free_q);
1228 INIT_LIST_HEAD(&qp->tx_offl_q);
1229
1230 tasklet_init(&qp->rxc_db_work, ntb_transport_rxc_db,
1231 (unsigned long)qp);
1232
1233 return 0;
1234 }
1235
ntb_transport_probe(struct ntb_client * self,struct ntb_dev * ndev)1236 static int ntb_transport_probe(struct ntb_client *self, struct ntb_dev *ndev)
1237 {
1238 struct ntb_transport_ctx *nt;
1239 struct ntb_transport_mw *mw;
1240 unsigned int mw_count, qp_count, spad_count, max_mw_count_for_spads;
1241 u64 qp_bitmap;
1242 int node;
1243 int rc, i;
1244
1245 mw_count = ntb_peer_mw_count(ndev);
1246
1247 if (!ndev->ops->mw_set_trans) {
1248 dev_err(&ndev->dev, "Inbound MW based NTB API is required\n");
1249 return -EINVAL;
1250 }
1251
1252 if (ntb_db_is_unsafe(ndev))
1253 dev_dbg(&ndev->dev,
1254 "doorbell is unsafe, proceed anyway...\n");
1255 if (ntb_spad_is_unsafe(ndev))
1256 dev_dbg(&ndev->dev,
1257 "scratchpad is unsafe, proceed anyway...\n");
1258
1259 if (ntb_peer_port_count(ndev) != NTB_DEF_PEER_CNT)
1260 dev_warn(&ndev->dev, "Multi-port NTB devices unsupported\n");
1261
1262 node = dev_to_node(&ndev->dev);
1263
1264 nt = kzalloc_node(sizeof(*nt), GFP_KERNEL, node);
1265 if (!nt)
1266 return -ENOMEM;
1267
1268 nt->ndev = ndev;
1269
1270 /*
1271 * If we are using MSI, and have at least one extra memory window,
1272 * we will reserve the last MW for the MSI window.
1273 */
1274 if (use_msi && mw_count > 1) {
1275 rc = ntb_msi_init(ndev, ntb_transport_msi_desc_changed);
1276 if (!rc) {
1277 mw_count -= 1;
1278 nt->use_msi = true;
1279 }
1280 }
1281
1282 spad_count = ntb_spad_count(ndev);
1283
1284 /* Limit the MW's based on the availability of scratchpads */
1285
1286 if (spad_count < NTB_TRANSPORT_MIN_SPADS) {
1287 nt->mw_count = 0;
1288 rc = -EINVAL;
1289 goto err;
1290 }
1291
1292 max_mw_count_for_spads = (spad_count - MW0_SZ_HIGH) / 2;
1293 nt->mw_count = min(mw_count, max_mw_count_for_spads);
1294
1295 nt->msi_spad_offset = nt->mw_count * 2 + MW0_SZ_HIGH;
1296
1297 nt->mw_vec = kcalloc_node(mw_count, sizeof(*nt->mw_vec),
1298 GFP_KERNEL, node);
1299 if (!nt->mw_vec) {
1300 rc = -ENOMEM;
1301 goto err;
1302 }
1303
1304 for (i = 0; i < mw_count; i++) {
1305 mw = &nt->mw_vec[i];
1306
1307 rc = ntb_peer_mw_get_addr(ndev, i, &mw->phys_addr,
1308 &mw->phys_size);
1309 if (rc)
1310 goto err1;
1311
1312 mw->vbase = ioremap_wc(mw->phys_addr, mw->phys_size);
1313 if (!mw->vbase) {
1314 rc = -ENOMEM;
1315 goto err1;
1316 }
1317
1318 mw->buff_size = 0;
1319 mw->xlat_size = 0;
1320 mw->virt_addr = NULL;
1321 mw->dma_addr = 0;
1322 }
1323
1324 qp_bitmap = ntb_db_valid_mask(ndev);
1325
1326 qp_count = ilog2(qp_bitmap);
1327 if (nt->use_msi) {
1328 qp_count -= 1;
1329 nt->msi_db_mask = BIT_ULL(qp_count);
1330 ntb_db_clear_mask(ndev, nt->msi_db_mask);
1331 }
1332
1333 if (max_num_clients && max_num_clients < qp_count)
1334 qp_count = max_num_clients;
1335 else if (nt->mw_count < qp_count)
1336 qp_count = nt->mw_count;
1337
1338 qp_bitmap &= BIT_ULL(qp_count) - 1;
1339
1340 nt->qp_count = qp_count;
1341 nt->qp_bitmap = qp_bitmap;
1342 nt->qp_bitmap_free = qp_bitmap;
1343
1344 nt->qp_vec = kcalloc_node(qp_count, sizeof(*nt->qp_vec),
1345 GFP_KERNEL, node);
1346 if (!nt->qp_vec) {
1347 rc = -ENOMEM;
1348 goto err1;
1349 }
1350
1351 if (nt_debugfs_dir) {
1352 nt->debugfs_node_dir =
1353 debugfs_create_dir(pci_name(ndev->pdev),
1354 nt_debugfs_dir);
1355 }
1356
1357 for (i = 0; i < qp_count; i++) {
1358 rc = ntb_transport_init_queue(nt, i);
1359 if (rc)
1360 goto err2;
1361 }
1362
1363 mutex_init(&nt->link_event_lock);
1364 INIT_DELAYED_WORK(&nt->link_work, ntb_transport_link_work);
1365 INIT_WORK(&nt->link_cleanup, ntb_transport_link_cleanup_work);
1366
1367 rc = ntb_set_ctx(ndev, nt, &ntb_transport_ops);
1368 if (rc)
1369 goto err2;
1370
1371 INIT_LIST_HEAD(&nt->client_devs);
1372 rc = ntb_bus_init(nt);
1373 if (rc)
1374 goto err3;
1375
1376 nt->link_is_up = false;
1377 ntb_link_enable(ndev, NTB_SPEED_AUTO, NTB_WIDTH_AUTO);
1378 ntb_link_event(ndev);
1379
1380 return 0;
1381
1382 err3:
1383 ntb_clear_ctx(ndev);
1384 err2:
1385 kfree(nt->qp_vec);
1386 err1:
1387 while (i--) {
1388 mw = &nt->mw_vec[i];
1389 iounmap(mw->vbase);
1390 }
1391 kfree(nt->mw_vec);
1392 err:
1393 kfree(nt);
1394 return rc;
1395 }
1396
ntb_transport_free(struct ntb_client * self,struct ntb_dev * ndev)1397 static void ntb_transport_free(struct ntb_client *self, struct ntb_dev *ndev)
1398 {
1399 struct ntb_transport_ctx *nt = ndev->ctx;
1400 struct ntb_transport_qp *qp;
1401 u64 qp_bitmap_alloc;
1402 int i;
1403
1404 ntb_transport_link_cleanup(nt);
1405 cancel_work_sync(&nt->link_cleanup);
1406 cancel_delayed_work_sync(&nt->link_work);
1407
1408 qp_bitmap_alloc = nt->qp_bitmap & ~nt->qp_bitmap_free;
1409
1410 /* verify that all the qp's are freed */
1411 for (i = 0; i < nt->qp_count; i++) {
1412 qp = &nt->qp_vec[i];
1413 if (qp_bitmap_alloc & BIT_ULL(i))
1414 ntb_transport_free_queue(qp);
1415 debugfs_remove_recursive(qp->debugfs_dir);
1416 }
1417
1418 ntb_link_disable(ndev);
1419 ntb_clear_ctx(ndev);
1420
1421 ntb_bus_remove(nt);
1422
1423 for (i = nt->mw_count; i--; ) {
1424 ntb_free_mw(nt, i);
1425 iounmap(nt->mw_vec[i].vbase);
1426 }
1427
1428 kfree(nt->qp_vec);
1429 kfree(nt->mw_vec);
1430 kfree(nt);
1431 }
1432
ntb_complete_rxc(struct ntb_transport_qp * qp)1433 static void ntb_complete_rxc(struct ntb_transport_qp *qp)
1434 {
1435 struct ntb_queue_entry *entry;
1436 void *cb_data;
1437 unsigned int len;
1438 unsigned long irqflags;
1439
1440 spin_lock_irqsave(&qp->ntb_rx_q_lock, irqflags);
1441
1442 while (!list_empty(&qp->rx_post_q)) {
1443 entry = list_first_entry(&qp->rx_post_q,
1444 struct ntb_queue_entry, entry);
1445 if (!(entry->flags & DESC_DONE_FLAG))
1446 break;
1447
1448 entry->rx_hdr->flags = 0;
1449 iowrite32(entry->rx_index, &qp->rx_info->entry);
1450
1451 cb_data = entry->cb_data;
1452 len = entry->len;
1453
1454 list_move_tail(&entry->entry, &qp->rx_free_q);
1455
1456 spin_unlock_irqrestore(&qp->ntb_rx_q_lock, irqflags);
1457
1458 if (qp->rx_handler && qp->client_ready)
1459 qp->rx_handler(qp, qp->cb_data, cb_data, len);
1460
1461 spin_lock_irqsave(&qp->ntb_rx_q_lock, irqflags);
1462 }
1463
1464 spin_unlock_irqrestore(&qp->ntb_rx_q_lock, irqflags);
1465 }
1466
ntb_rx_copy_callback(void * data,const struct dmaengine_result * res)1467 static void ntb_rx_copy_callback(void *data,
1468 const struct dmaengine_result *res)
1469 {
1470 struct ntb_queue_entry *entry = data;
1471
1472 /* we need to check DMA results if we are using DMA */
1473 if (res) {
1474 enum dmaengine_tx_result dma_err = res->result;
1475
1476 switch (dma_err) {
1477 case DMA_TRANS_READ_FAILED:
1478 case DMA_TRANS_WRITE_FAILED:
1479 entry->errors++;
1480 fallthrough;
1481 case DMA_TRANS_ABORTED:
1482 {
1483 struct ntb_transport_qp *qp = entry->qp;
1484 void *offset = qp->rx_buff + qp->rx_max_frame *
1485 qp->rx_index;
1486
1487 ntb_memcpy_rx(entry, offset);
1488 qp->rx_memcpy++;
1489 return;
1490 }
1491
1492 case DMA_TRANS_NOERROR:
1493 default:
1494 break;
1495 }
1496 }
1497
1498 entry->flags |= DESC_DONE_FLAG;
1499
1500 ntb_complete_rxc(entry->qp);
1501 }
1502
ntb_memcpy_rx(struct ntb_queue_entry * entry,void * offset)1503 static void ntb_memcpy_rx(struct ntb_queue_entry *entry, void *offset)
1504 {
1505 void *buf = entry->buf;
1506 size_t len = entry->len;
1507
1508 memcpy(buf, offset, len);
1509
1510 /* Ensure that the data is fully copied out before clearing the flag */
1511 wmb();
1512
1513 ntb_rx_copy_callback(entry, NULL);
1514 }
1515
ntb_async_rx_submit(struct ntb_queue_entry * entry,void * offset)1516 static int ntb_async_rx_submit(struct ntb_queue_entry *entry, void *offset)
1517 {
1518 struct dma_async_tx_descriptor *txd;
1519 struct ntb_transport_qp *qp = entry->qp;
1520 struct dma_chan *chan = qp->rx_dma_chan;
1521 struct dma_device *device;
1522 size_t pay_off, buff_off, len;
1523 struct dmaengine_unmap_data *unmap;
1524 dma_cookie_t cookie;
1525 void *buf = entry->buf;
1526
1527 len = entry->len;
1528 device = chan->device;
1529 pay_off = (size_t)offset & ~PAGE_MASK;
1530 buff_off = (size_t)buf & ~PAGE_MASK;
1531
1532 if (!is_dma_copy_aligned(device, pay_off, buff_off, len))
1533 goto err;
1534
1535 unmap = dmaengine_get_unmap_data(device->dev, 2, GFP_NOWAIT);
1536 if (!unmap)
1537 goto err;
1538
1539 unmap->len = len;
1540 unmap->addr[0] = dma_map_phys(device->dev, virt_to_phys(offset),
1541 len, DMA_TO_DEVICE, 0);
1542 if (dma_mapping_error(device->dev, unmap->addr[0]))
1543 goto err_get_unmap;
1544
1545 unmap->to_cnt = 1;
1546
1547 unmap->addr[1] = dma_map_phys(device->dev, virt_to_phys(buf),
1548 len, DMA_FROM_DEVICE, 0);
1549 if (dma_mapping_error(device->dev, unmap->addr[1]))
1550 goto err_get_unmap;
1551
1552 unmap->from_cnt = 1;
1553
1554 txd = device->device_prep_dma_memcpy(chan, unmap->addr[1],
1555 unmap->addr[0], len,
1556 DMA_PREP_INTERRUPT);
1557 if (!txd)
1558 goto err_get_unmap;
1559
1560 txd->callback_result = ntb_rx_copy_callback;
1561 txd->callback_param = entry;
1562 dma_set_unmap(txd, unmap);
1563
1564 cookie = dmaengine_submit(txd);
1565 if (dma_submit_error(cookie))
1566 goto err_set_unmap;
1567
1568 dmaengine_unmap_put(unmap);
1569
1570 qp->last_cookie = cookie;
1571
1572 qp->rx_async++;
1573
1574 return 0;
1575
1576 err_set_unmap:
1577 dmaengine_unmap_put(unmap);
1578 err_get_unmap:
1579 dmaengine_unmap_put(unmap);
1580 err:
1581 return -ENXIO;
1582 }
1583
ntb_async_rx(struct ntb_queue_entry * entry,void * offset)1584 static void ntb_async_rx(struct ntb_queue_entry *entry, void *offset)
1585 {
1586 struct ntb_transport_qp *qp = entry->qp;
1587 struct dma_chan *chan = qp->rx_dma_chan;
1588 int res;
1589
1590 if (!chan)
1591 goto err;
1592
1593 if (entry->len < copy_bytes)
1594 goto err;
1595
1596 res = ntb_async_rx_submit(entry, offset);
1597 if (res < 0)
1598 goto err;
1599
1600 qp->rx_async++;
1601 return;
1602
1603 err:
1604 ntb_memcpy_rx(entry, offset);
1605 qp->rx_memcpy++;
1606 }
1607
ntb_process_rxc(struct ntb_transport_qp * qp)1608 static int ntb_process_rxc(struct ntb_transport_qp *qp)
1609 {
1610 struct ntb_payload_header *hdr;
1611 struct ntb_queue_entry *entry;
1612 void *offset;
1613
1614 offset = qp->rx_buff + qp->rx_max_frame * qp->rx_index;
1615 hdr = offset + qp->rx_max_frame - sizeof(struct ntb_payload_header);
1616
1617 dev_dbg(&qp->ndev->pdev->dev, "qp %d: RX ver %u len %d flags %x\n",
1618 qp->qp_num, hdr->ver, hdr->len, hdr->flags);
1619
1620 if (!(hdr->flags & DESC_DONE_FLAG)) {
1621 dev_dbg(&qp->ndev->pdev->dev, "done flag not set\n");
1622 qp->rx_ring_empty++;
1623 return -EAGAIN;
1624 }
1625
1626 if (hdr->flags & LINK_DOWN_FLAG) {
1627 dev_dbg(&qp->ndev->pdev->dev, "link down flag set\n");
1628 ntb_qp_link_down(qp);
1629 hdr->flags = 0;
1630 return -EAGAIN;
1631 }
1632
1633 if (hdr->ver != (u32)qp->rx_pkts) {
1634 dev_dbg(&qp->ndev->pdev->dev,
1635 "version mismatch, expected %llu - got %u\n",
1636 qp->rx_pkts, hdr->ver);
1637 qp->rx_err_ver++;
1638 return -EIO;
1639 }
1640
1641 entry = ntb_list_mv(&qp->ntb_rx_q_lock, &qp->rx_pend_q, &qp->rx_post_q);
1642 if (!entry) {
1643 dev_dbg(&qp->ndev->pdev->dev, "no receive buffer\n");
1644 qp->rx_err_no_buf++;
1645 return -EAGAIN;
1646 }
1647
1648 entry->rx_hdr = hdr;
1649 entry->rx_index = qp->rx_index;
1650
1651 if (hdr->len > entry->len) {
1652 dev_dbg(&qp->ndev->pdev->dev,
1653 "receive buffer overflow! Wanted %d got %d\n",
1654 hdr->len, entry->len);
1655 qp->rx_err_oflow++;
1656
1657 entry->len = -EIO;
1658 entry->flags |= DESC_DONE_FLAG;
1659
1660 ntb_complete_rxc(qp);
1661 } else {
1662 dev_dbg(&qp->ndev->pdev->dev,
1663 "RX OK index %u ver %u size %d into buf size %d\n",
1664 qp->rx_index, hdr->ver, hdr->len, entry->len);
1665
1666 qp->rx_bytes += hdr->len;
1667 qp->rx_pkts++;
1668
1669 entry->len = hdr->len;
1670
1671 ntb_async_rx(entry, offset);
1672 }
1673
1674 qp->rx_index++;
1675 qp->rx_index %= qp->rx_max_entry;
1676
1677 return 0;
1678 }
1679
ntb_transport_rxc_db(unsigned long data)1680 static void ntb_transport_rxc_db(unsigned long data)
1681 {
1682 struct ntb_transport_qp *qp = (void *)data;
1683 int rc, i;
1684
1685 dev_dbg(&qp->ndev->pdev->dev, "%s: doorbell %d received\n",
1686 __func__, qp->qp_num);
1687
1688 /* Limit the number of packets processed in a single interrupt to
1689 * provide fairness to others
1690 */
1691 for (i = 0; i < qp->rx_max_entry; i++) {
1692 rc = ntb_process_rxc(qp);
1693 if (rc)
1694 break;
1695 }
1696
1697 if (i && qp->rx_dma_chan)
1698 dma_async_issue_pending(qp->rx_dma_chan);
1699
1700 if (i == qp->rx_max_entry) {
1701 /* there is more work to do */
1702 if (qp->active)
1703 tasklet_schedule(&qp->rxc_db_work);
1704 } else if (ntb_db_read(qp->ndev) & BIT_ULL(qp->qp_num)) {
1705 /* the doorbell bit is set: clear it */
1706 ntb_db_clear(qp->ndev, BIT_ULL(qp->qp_num));
1707 /* ntb_db_read ensures ntb_db_clear write is committed */
1708 ntb_db_read(qp->ndev);
1709
1710 /* an interrupt may have arrived between finishing
1711 * ntb_process_rxc and clearing the doorbell bit:
1712 * there might be some more work to do.
1713 */
1714 if (qp->active)
1715 tasklet_schedule(&qp->rxc_db_work);
1716 }
1717 }
1718
ntb_tx_copy_callback(void * data,const struct dmaengine_result * res)1719 static void ntb_tx_copy_callback(void *data,
1720 const struct dmaengine_result *res)
1721 {
1722 struct ntb_payload_header __iomem *hdr;
1723 struct ntb_queue_entry *entry = data;
1724 struct ntb_transport_qp *qp;
1725 unsigned int len;
1726 void *cb_data;
1727
1728 qp = entry->qp;
1729 hdr = entry->tx_hdr;
1730 cb_data = entry->cb_data;
1731 len = entry->len;
1732
1733 /* we need to check DMA results if we are using DMA */
1734 if (res) {
1735 enum dmaengine_tx_result dma_err = res->result;
1736
1737 switch (dma_err) {
1738 case DMA_TRANS_READ_FAILED:
1739 case DMA_TRANS_WRITE_FAILED:
1740 entry->errors++;
1741 fallthrough;
1742 case DMA_TRANS_ABORTED:
1743 {
1744 void __iomem *offset =
1745 qp->tx_mw + qp->tx_max_frame *
1746 entry->tx_index;
1747
1748 /* resubmit via CPU */
1749 ntb_memcpy_tx(entry, offset);
1750 qp->tx_memcpy++;
1751 return;
1752 }
1753
1754 case DMA_TRANS_NOERROR:
1755 default:
1756 break;
1757 }
1758 }
1759
1760 iowrite32(entry->flags | DESC_DONE_FLAG, &hdr->flags);
1761
1762 /*
1763 * Make DONE flag visible before DB/MSI. WC + posted MWr may reorder
1764 * across iATU/bridge (platform-dependent). Order and flush here.
1765 */
1766 dma_mb();
1767 ioread32(&hdr->flags);
1768
1769 if (qp->use_msi)
1770 ntb_msi_peer_trigger(qp->ndev, PIDX, &qp->peer_msi_desc);
1771 else
1772 ntb_peer_db_set(qp->ndev, BIT_ULL(qp->qp_num));
1773
1774 /* The entry length can only be zero if the packet is intended to be a
1775 * "link down" or similar. Since no payload is being sent in these
1776 * cases, there is nothing to add to the completion queue.
1777 */
1778 if (len > 0)
1779 qp->tx_bytes += len;
1780
1781 ntb_list_add(&qp->ntb_tx_free_q_lock, &entry->entry, &qp->tx_free_q);
1782
1783 if (len > 0 && qp->tx_handler)
1784 qp->tx_handler(qp, qp->cb_data, cb_data, len);
1785 }
1786
ntb_memcpy_tx_on_stack(struct ntb_queue_entry * entry,void __iomem * offset)1787 static void ntb_memcpy_tx_on_stack(struct ntb_queue_entry *entry, void __iomem *offset)
1788 {
1789 #ifdef copy_to_nontemporal
1790 /*
1791 * Using non-temporal mov to improve performance on non-cached
1792 * writes. This only works if __iomem is strictly memory-like,
1793 * but that is the case on x86-64
1794 */
1795 copy_to_nontemporal(offset, entry->buf, entry->len);
1796 #else
1797 memcpy_toio(offset, entry->buf, entry->len);
1798 #endif
1799
1800 /* Ensure that the data is fully copied out before setting the flags */
1801 wmb();
1802
1803 ntb_tx_copy_callback(entry, NULL);
1804 }
1805
ntb_tx_memcpy_kthread(void * data)1806 static int ntb_tx_memcpy_kthread(void *data)
1807 {
1808 struct ntb_transport_qp *qp = data;
1809 struct ntb_queue_entry *entry, *tmp;
1810 const int resched_nr = 64;
1811 LIST_HEAD(local_list);
1812 void __iomem *offset;
1813 int processed = 0;
1814
1815 while (!kthread_should_stop()) {
1816 spin_lock_irq(&qp->ntb_tx_offl_q_lock);
1817 wait_event_interruptible_lock_irq_timeout(qp->tx_offload_wq,
1818 kthread_should_stop() ||
1819 !list_empty(&qp->tx_offl_q),
1820 qp->ntb_tx_offl_q_lock, 5*HZ);
1821 list_splice_tail_init(&qp->tx_offl_q, &local_list);
1822 spin_unlock_irq(&qp->ntb_tx_offl_q_lock);
1823
1824 list_for_each_entry_safe(entry, tmp, &local_list, entry) {
1825 list_del(&entry->entry);
1826 offset = qp->tx_mw + qp->tx_max_frame * entry->tx_index;
1827 ntb_memcpy_tx_on_stack(entry, offset);
1828 if (++processed >= resched_nr) {
1829 cond_resched();
1830 processed = 0;
1831 }
1832 }
1833 cond_resched();
1834 }
1835
1836 return 0;
1837 }
1838
ntb_memcpy_tx(struct ntb_queue_entry * entry,void __iomem * offset)1839 static void ntb_memcpy_tx(struct ntb_queue_entry *entry, void __iomem *offset)
1840 {
1841 struct ntb_transport_qp *qp = entry->qp;
1842
1843 if (WARN_ON_ONCE(!qp))
1844 return;
1845
1846 if (ntb_tx_offload_enabled(qp)) {
1847 ntb_list_add(&qp->ntb_tx_offl_q_lock, &entry->entry,
1848 &qp->tx_offl_q);
1849 wake_up(&qp->tx_offload_wq);
1850 } else
1851 ntb_memcpy_tx_on_stack(entry, offset);
1852 }
1853
ntb_async_tx_submit(struct ntb_transport_qp * qp,struct ntb_queue_entry * entry)1854 static int ntb_async_tx_submit(struct ntb_transport_qp *qp,
1855 struct ntb_queue_entry *entry)
1856 {
1857 struct dma_async_tx_descriptor *txd;
1858 struct dma_chan *chan = qp->tx_dma_chan;
1859 struct dma_device *device;
1860 size_t len = entry->len;
1861 void *buf = entry->buf;
1862 size_t dest_off, buff_off;
1863 struct dmaengine_unmap_data *unmap;
1864 dma_addr_t dest;
1865 dma_cookie_t cookie;
1866
1867 device = chan->device;
1868 dest = qp->tx_mw_dma_addr + qp->tx_max_frame * entry->tx_index;
1869 buff_off = (size_t)buf & ~PAGE_MASK;
1870 dest_off = (size_t)dest & ~PAGE_MASK;
1871
1872 if (!is_dma_copy_aligned(device, buff_off, dest_off, len))
1873 goto err;
1874
1875 unmap = dmaengine_get_unmap_data(device->dev, 1, GFP_NOWAIT);
1876 if (!unmap)
1877 goto err;
1878
1879 unmap->len = len;
1880 unmap->addr[0] = dma_map_phys(device->dev, virt_to_phys(buf),
1881 len, DMA_TO_DEVICE, 0);
1882 if (dma_mapping_error(device->dev, unmap->addr[0]))
1883 goto err_get_unmap;
1884
1885 unmap->to_cnt = 1;
1886
1887 txd = device->device_prep_dma_memcpy(chan, dest, unmap->addr[0], len,
1888 DMA_PREP_INTERRUPT);
1889 if (!txd)
1890 goto err_get_unmap;
1891
1892 txd->callback_result = ntb_tx_copy_callback;
1893 txd->callback_param = entry;
1894 dma_set_unmap(txd, unmap);
1895
1896 cookie = dmaengine_submit(txd);
1897 if (dma_submit_error(cookie))
1898 goto err_set_unmap;
1899
1900 dmaengine_unmap_put(unmap);
1901
1902 dma_async_issue_pending(chan);
1903
1904 return 0;
1905 err_set_unmap:
1906 dmaengine_unmap_put(unmap);
1907 err_get_unmap:
1908 dmaengine_unmap_put(unmap);
1909 err:
1910 return -ENXIO;
1911 }
1912
ntb_async_tx(struct ntb_transport_qp * qp,struct ntb_queue_entry * entry)1913 static void ntb_async_tx(struct ntb_transport_qp *qp,
1914 struct ntb_queue_entry *entry)
1915 {
1916 struct ntb_payload_header __iomem *hdr;
1917 struct dma_chan *chan = qp->tx_dma_chan;
1918 void __iomem *offset;
1919 int res;
1920
1921 entry->tx_index = qp->tx_index;
1922 offset = qp->tx_mw + qp->tx_max_frame * entry->tx_index;
1923 hdr = offset + qp->tx_max_frame - sizeof(struct ntb_payload_header);
1924 entry->tx_hdr = hdr;
1925
1926 WARN_ON_ONCE(!ntb_transport_tx_free_entry(qp));
1927 WRITE_ONCE(qp->tx_index, (qp->tx_index + 1) % qp->tx_max_entry);
1928
1929 iowrite32(entry->len, &hdr->len);
1930 iowrite32((u32)qp->tx_pkts, &hdr->ver);
1931
1932 if (!chan)
1933 goto err;
1934
1935 if (entry->len < copy_bytes)
1936 goto err;
1937
1938 res = ntb_async_tx_submit(qp, entry);
1939 if (res < 0)
1940 goto err;
1941
1942 qp->tx_async++;
1943 return;
1944
1945 err:
1946 ntb_memcpy_tx(entry, offset);
1947 qp->tx_memcpy++;
1948 }
1949
ntb_process_tx(struct ntb_transport_qp * qp,struct ntb_queue_entry * entry)1950 static int ntb_process_tx(struct ntb_transport_qp *qp,
1951 struct ntb_queue_entry *entry)
1952 {
1953 if (!ntb_transport_tx_free_entry(qp)) {
1954 qp->tx_ring_full++;
1955 return -EAGAIN;
1956 }
1957
1958 ntb_async_tx(qp, entry);
1959
1960 qp->tx_pkts++;
1961
1962 return 0;
1963 }
1964
ntb_send_link_down(struct ntb_transport_qp * qp)1965 static void ntb_send_link_down(struct ntb_transport_qp *qp)
1966 {
1967 struct pci_dev *pdev = qp->ndev->pdev;
1968 struct ntb_queue_entry *entry;
1969 int i, rc;
1970
1971 if (!qp->link_is_up)
1972 return;
1973
1974 dev_info(&pdev->dev, "qp %d: Send Link Down\n", qp->qp_num);
1975
1976 for (i = 0; i < NTB_LINK_DOWN_TIMEOUT; i++) {
1977 entry = ntb_list_rm(&qp->ntb_tx_free_q_lock, &qp->tx_free_q);
1978 if (entry)
1979 break;
1980 msleep(100);
1981 }
1982
1983 if (!entry)
1984 return;
1985
1986 entry->cb_data = NULL;
1987 entry->buf = NULL;
1988 entry->len = 0;
1989 entry->flags = LINK_DOWN_FLAG;
1990
1991 rc = ntb_process_tx(qp, entry);
1992 if (rc)
1993 dev_err(&pdev->dev, "ntb: QP%d unable to send linkdown msg\n",
1994 qp->qp_num);
1995
1996 ntb_qp_link_down_reset(qp);
1997 }
1998
ntb_dma_filter_fn(struct dma_chan * chan,void * node)1999 static bool ntb_dma_filter_fn(struct dma_chan *chan, void *node)
2000 {
2001 return dev_to_node(&chan->dev->device) == (int)(unsigned long)node;
2002 }
2003
2004 /**
2005 * ntb_transport_create_queue - Create a new NTB transport layer queue
2006 * @data: pointer for callback data
2007 * @client_dev: &struct device pointer
2008 * @handlers: pointer to various ntb queue (callback) handlers
2009 *
2010 * Create a new NTB transport layer queue and provide the queue with a callback
2011 * routine for both transmit and receive. The receive callback routine will be
2012 * used to pass up data when the transport has received it on the queue. The
2013 * transmit callback routine will be called when the transport has completed the
2014 * transmission of the data on the queue and the data is ready to be freed.
2015 *
2016 * RETURNS: pointer to newly created ntb_queue, NULL on error.
2017 */
2018 struct ntb_transport_qp *
ntb_transport_create_queue(void * data,struct device * client_dev,const struct ntb_queue_handlers * handlers)2019 ntb_transport_create_queue(void *data, struct device *client_dev,
2020 const struct ntb_queue_handlers *handlers)
2021 {
2022 struct ntb_dev *ndev;
2023 struct pci_dev *pdev;
2024 struct ntb_transport_ctx *nt;
2025 struct ntb_queue_entry *entry;
2026 struct ntb_transport_qp *qp;
2027 u64 qp_bit;
2028 unsigned int free_queue;
2029 dma_cap_mask_t dma_mask;
2030 int node;
2031 int i;
2032
2033 ndev = dev_ntb(client_dev->parent);
2034 pdev = ndev->pdev;
2035 nt = ndev->ctx;
2036
2037 node = dev_to_node(&ndev->dev);
2038
2039 free_queue = ffs(nt->qp_bitmap_free);
2040 if (!free_queue)
2041 goto err;
2042
2043 /* decrement free_queue to make it zero based */
2044 free_queue--;
2045
2046 qp = &nt->qp_vec[free_queue];
2047 qp_bit = BIT_ULL(qp->qp_num);
2048
2049 nt->qp_bitmap_free &= ~qp_bit;
2050
2051 qp->cb_data = data;
2052 qp->rx_handler = handlers->rx_handler;
2053 qp->tx_handler = handlers->tx_handler;
2054 qp->event_handler = handlers->event_handler;
2055
2056 init_waitqueue_head(&qp->tx_offload_wq);
2057 if (tx_memcpy_offload) {
2058 qp->tx_offload_thread = kthread_run(ntb_tx_memcpy_kthread, qp,
2059 "ntb-txcpy/%s/%u",
2060 pci_name(ndev->pdev), qp->qp_num);
2061 if (IS_ERR(qp->tx_offload_thread)) {
2062 dev_warn(&nt->ndev->dev,
2063 "tx memcpy offload thread creation failed: %ld; falling back to inline copy\n",
2064 PTR_ERR(qp->tx_offload_thread));
2065 qp->tx_offload_thread = NULL;
2066 }
2067 } else
2068 qp->tx_offload_thread = NULL;
2069
2070 dma_cap_zero(dma_mask);
2071 dma_cap_set(DMA_MEMCPY, dma_mask);
2072
2073 if (use_dma) {
2074 qp->tx_dma_chan =
2075 dma_request_channel(dma_mask, ntb_dma_filter_fn,
2076 (void *)(unsigned long)node);
2077 if (!qp->tx_dma_chan)
2078 dev_info(&pdev->dev, "Unable to allocate TX DMA channel\n");
2079
2080 qp->rx_dma_chan =
2081 dma_request_channel(dma_mask, ntb_dma_filter_fn,
2082 (void *)(unsigned long)node);
2083 if (!qp->rx_dma_chan)
2084 dev_info(&pdev->dev, "Unable to allocate RX DMA channel\n");
2085 } else {
2086 qp->tx_dma_chan = NULL;
2087 qp->rx_dma_chan = NULL;
2088 }
2089
2090 qp->tx_mw_dma_addr = 0;
2091 if (qp->tx_dma_chan) {
2092 qp->tx_mw_dma_addr =
2093 dma_map_resource(qp->tx_dma_chan->device->dev,
2094 qp->tx_mw_phys, qp->tx_mw_size,
2095 DMA_FROM_DEVICE, 0);
2096 if (dma_mapping_error(qp->tx_dma_chan->device->dev,
2097 qp->tx_mw_dma_addr)) {
2098 qp->tx_mw_dma_addr = 0;
2099 goto err1;
2100 }
2101 }
2102
2103 dev_dbg(&pdev->dev, "Using %s memcpy for TX\n",
2104 qp->tx_dma_chan ? "DMA" : "CPU");
2105
2106 dev_dbg(&pdev->dev, "Using %s memcpy for RX\n",
2107 qp->rx_dma_chan ? "DMA" : "CPU");
2108
2109 for (i = 0; i < NTB_QP_DEF_NUM_ENTRIES; i++) {
2110 entry = kzalloc_node(sizeof(*entry), GFP_KERNEL, node);
2111 if (!entry)
2112 goto err1;
2113
2114 entry->qp = qp;
2115 ntb_list_add(&qp->ntb_rx_q_lock, &entry->entry,
2116 &qp->rx_free_q);
2117 }
2118 qp->rx_alloc_entry = NTB_QP_DEF_NUM_ENTRIES;
2119
2120 for (i = 0; i < qp->tx_max_entry; i++) {
2121 entry = kzalloc_node(sizeof(*entry), GFP_KERNEL, node);
2122 if (!entry)
2123 goto err2;
2124
2125 entry->qp = qp;
2126 ntb_list_add(&qp->ntb_tx_free_q_lock, &entry->entry,
2127 &qp->tx_free_q);
2128 }
2129
2130 ntb_db_clear(qp->ndev, qp_bit);
2131 ntb_db_clear_mask(qp->ndev, qp_bit);
2132
2133 dev_info(&pdev->dev, "NTB Transport QP %d created\n", qp->qp_num);
2134
2135 return qp;
2136
2137 err2:
2138 while ((entry = ntb_list_rm(&qp->ntb_tx_free_q_lock, &qp->tx_free_q)))
2139 kfree(entry);
2140 err1:
2141 qp->rx_alloc_entry = 0;
2142 while ((entry = ntb_list_rm(&qp->ntb_rx_q_lock, &qp->rx_free_q)))
2143 kfree(entry);
2144 if (qp->tx_mw_dma_addr)
2145 dma_unmap_resource(qp->tx_dma_chan->device->dev,
2146 qp->tx_mw_dma_addr, qp->tx_mw_size,
2147 DMA_FROM_DEVICE, 0);
2148 if (qp->tx_dma_chan)
2149 dma_release_channel(qp->tx_dma_chan);
2150 if (qp->rx_dma_chan)
2151 dma_release_channel(qp->rx_dma_chan);
2152 nt->qp_bitmap_free |= qp_bit;
2153 err:
2154 return NULL;
2155 }
2156 EXPORT_SYMBOL_GPL(ntb_transport_create_queue);
2157
2158 /**
2159 * ntb_transport_free_queue - Frees NTB transport queue
2160 * @qp: NTB queue to be freed
2161 *
2162 * Frees NTB transport queue
2163 */
ntb_transport_free_queue(struct ntb_transport_qp * qp)2164 void ntb_transport_free_queue(struct ntb_transport_qp *qp)
2165 {
2166 struct pci_dev *pdev;
2167 struct ntb_queue_entry *entry;
2168 u64 qp_bit;
2169
2170 if (!qp)
2171 return;
2172
2173 pdev = qp->ndev->pdev;
2174
2175 qp->active = false;
2176
2177 if (qp->tx_offload_thread) {
2178 kthread_stop(qp->tx_offload_thread);
2179 qp->tx_offload_thread = NULL;
2180 }
2181
2182 if (qp->tx_dma_chan) {
2183 struct dma_chan *chan = qp->tx_dma_chan;
2184 /* Putting the dma_chan to NULL will force any new traffic to be
2185 * processed by the CPU instead of the DAM engine
2186 */
2187 qp->tx_dma_chan = NULL;
2188
2189 /* Try to be nice and wait for any queued DMA engine
2190 * transactions to process before smashing it with a rock
2191 */
2192 dma_sync_wait(chan, qp->last_cookie);
2193 dmaengine_terminate_all(chan);
2194
2195 dma_unmap_resource(chan->device->dev,
2196 qp->tx_mw_dma_addr, qp->tx_mw_size,
2197 DMA_FROM_DEVICE, 0);
2198
2199 dma_release_channel(chan);
2200 }
2201
2202 if (qp->rx_dma_chan) {
2203 struct dma_chan *chan = qp->rx_dma_chan;
2204 /* Putting the dma_chan to NULL will force any new traffic to be
2205 * processed by the CPU instead of the DAM engine
2206 */
2207 qp->rx_dma_chan = NULL;
2208
2209 /* Try to be nice and wait for any queued DMA engine
2210 * transactions to process before smashing it with a rock
2211 */
2212 dma_sync_wait(chan, qp->last_cookie);
2213 dmaengine_terminate_all(chan);
2214 dma_release_channel(chan);
2215 }
2216
2217 qp_bit = BIT_ULL(qp->qp_num);
2218
2219 ntb_db_set_mask(qp->ndev, qp_bit);
2220 tasklet_kill(&qp->rxc_db_work);
2221
2222 cancel_delayed_work_sync(&qp->link_work);
2223
2224 qp->cb_data = NULL;
2225 qp->rx_handler = NULL;
2226 qp->tx_handler = NULL;
2227 qp->event_handler = NULL;
2228
2229 while ((entry = ntb_list_rm(&qp->ntb_rx_q_lock, &qp->rx_free_q)))
2230 kfree(entry);
2231
2232 while ((entry = ntb_list_rm(&qp->ntb_rx_q_lock, &qp->rx_pend_q))) {
2233 dev_warn(&pdev->dev, "Freeing item from non-empty rx_pend_q\n");
2234 kfree(entry);
2235 }
2236
2237 while ((entry = ntb_list_rm(&qp->ntb_rx_q_lock, &qp->rx_post_q))) {
2238 dev_warn(&pdev->dev, "Freeing item from non-empty rx_post_q\n");
2239 kfree(entry);
2240 }
2241
2242 while ((entry = ntb_list_rm(&qp->ntb_tx_free_q_lock, &qp->tx_free_q)))
2243 kfree(entry);
2244
2245 while ((entry = ntb_list_rm(&qp->ntb_tx_offl_q_lock, &qp->tx_offl_q)))
2246 kfree(entry);
2247
2248 qp->transport->qp_bitmap_free |= qp_bit;
2249
2250 dev_info(&pdev->dev, "NTB Transport QP %d freed\n", qp->qp_num);
2251 }
2252 EXPORT_SYMBOL_GPL(ntb_transport_free_queue);
2253
2254 /**
2255 * ntb_transport_rx_remove - Dequeues enqueued rx packet
2256 * @qp: NTB queue to be freed
2257 * @len: pointer to variable to write enqueued buffers length
2258 *
2259 * Dequeues unused buffers from receive queue. Should only be used during
2260 * shutdown of qp.
2261 *
2262 * RETURNS: NULL error value on error, or void* for success.
2263 */
ntb_transport_rx_remove(struct ntb_transport_qp * qp,unsigned int * len)2264 void *ntb_transport_rx_remove(struct ntb_transport_qp *qp, unsigned int *len)
2265 {
2266 struct ntb_queue_entry *entry;
2267 void *buf;
2268
2269 if (!qp || qp->client_ready)
2270 return NULL;
2271
2272 entry = ntb_list_rm(&qp->ntb_rx_q_lock, &qp->rx_pend_q);
2273 if (!entry)
2274 return NULL;
2275
2276 buf = entry->cb_data;
2277 *len = entry->len;
2278
2279 ntb_list_add(&qp->ntb_rx_q_lock, &entry->entry, &qp->rx_free_q);
2280
2281 return buf;
2282 }
2283 EXPORT_SYMBOL_GPL(ntb_transport_rx_remove);
2284
2285 /**
2286 * ntb_transport_rx_enqueue - Enqueue a new NTB queue entry
2287 * @qp: NTB transport layer queue the entry is to be enqueued on
2288 * @cb: per buffer pointer for callback function to use
2289 * @data: pointer to data buffer that incoming packets will be copied into
2290 * @len: length of the data buffer
2291 *
2292 * Enqueue a new receive buffer onto the transport queue into which a NTB
2293 * payload can be received into.
2294 *
2295 * RETURNS: An appropriate -ERRNO error value on error, or zero for success.
2296 */
ntb_transport_rx_enqueue(struct ntb_transport_qp * qp,void * cb,void * data,unsigned int len)2297 int ntb_transport_rx_enqueue(struct ntb_transport_qp *qp, void *cb, void *data,
2298 unsigned int len)
2299 {
2300 struct ntb_queue_entry *entry;
2301
2302 if (!qp)
2303 return -EINVAL;
2304
2305 entry = ntb_list_rm(&qp->ntb_rx_q_lock, &qp->rx_free_q);
2306 if (!entry)
2307 return -ENOMEM;
2308
2309 entry->cb_data = cb;
2310 entry->buf = data;
2311 entry->len = len;
2312 entry->flags = 0;
2313 entry->errors = 0;
2314 entry->rx_index = 0;
2315
2316 ntb_list_add(&qp->ntb_rx_q_lock, &entry->entry, &qp->rx_pend_q);
2317
2318 if (qp->active)
2319 tasklet_schedule(&qp->rxc_db_work);
2320
2321 return 0;
2322 }
2323 EXPORT_SYMBOL_GPL(ntb_transport_rx_enqueue);
2324
2325 /**
2326 * ntb_transport_tx_enqueue - Enqueue a new NTB queue entry
2327 * @qp: NTB transport layer queue the entry is to be enqueued on
2328 * @cb: per buffer pointer for callback function to use
2329 * @data: pointer to data buffer that will be sent
2330 * @len: length of the data buffer
2331 *
2332 * Enqueue a new transmit buffer onto the transport queue from which a NTB
2333 * payload will be transmitted. This assumes that a lock is being held to
2334 * serialize access to the qp.
2335 *
2336 * RETURNS: An appropriate -ERRNO error value on error, or zero for success.
2337 */
ntb_transport_tx_enqueue(struct ntb_transport_qp * qp,void * cb,void * data,unsigned int len)2338 int ntb_transport_tx_enqueue(struct ntb_transport_qp *qp, void *cb, void *data,
2339 unsigned int len)
2340 {
2341 struct ntb_queue_entry *entry;
2342 int rc;
2343
2344 if (!qp || !len)
2345 return -EINVAL;
2346
2347 if (!qp->link_is_up)
2348 return -ENOLINK;
2349
2350 if (len > qp->tx_max_frame - sizeof(struct ntb_payload_header))
2351 return -EMSGSIZE;
2352
2353 entry = ntb_list_rm(&qp->ntb_tx_free_q_lock, &qp->tx_free_q);
2354 if (!entry) {
2355 qp->tx_err_no_buf++;
2356 return -EBUSY;
2357 }
2358
2359 entry->cb_data = cb;
2360 entry->buf = data;
2361 entry->len = len;
2362 entry->flags = 0;
2363 entry->errors = 0;
2364 entry->tx_index = 0;
2365
2366 rc = ntb_process_tx(qp, entry);
2367 if (rc)
2368 ntb_list_add(&qp->ntb_tx_free_q_lock, &entry->entry,
2369 &qp->tx_free_q);
2370
2371 return rc;
2372 }
2373 EXPORT_SYMBOL_GPL(ntb_transport_tx_enqueue);
2374
2375 /**
2376 * ntb_transport_link_up - Notify NTB transport of client readiness to use queue
2377 * @qp: NTB transport layer queue to be enabled
2378 *
2379 * Notify NTB transport layer of client readiness to use queue
2380 */
ntb_transport_link_up(struct ntb_transport_qp * qp)2381 void ntb_transport_link_up(struct ntb_transport_qp *qp)
2382 {
2383 if (!qp)
2384 return;
2385
2386 qp->client_ready = true;
2387
2388 if (qp->transport->link_is_up)
2389 schedule_delayed_work(&qp->link_work, 0);
2390 }
2391 EXPORT_SYMBOL_GPL(ntb_transport_link_up);
2392
2393 /**
2394 * ntb_transport_link_down - Notify NTB transport to no longer enqueue data
2395 * @qp: NTB transport layer queue to be disabled
2396 *
2397 * Notify NTB transport layer of client's desire to no longer receive data on
2398 * transport queue specified. It is the client's responsibility to ensure all
2399 * entries on queue are purged or otherwise handled appropriately.
2400 */
ntb_transport_link_down(struct ntb_transport_qp * qp)2401 void ntb_transport_link_down(struct ntb_transport_qp *qp)
2402 {
2403 int val;
2404
2405 if (!qp)
2406 return;
2407
2408 qp->client_ready = false;
2409
2410 val = ntb_spad_read(qp->ndev, QP_LINKS);
2411
2412 ntb_peer_spad_write(qp->ndev, PIDX, QP_LINKS, val & ~BIT(qp->qp_num));
2413
2414 if (qp->link_is_up)
2415 ntb_send_link_down(qp);
2416 else
2417 cancel_delayed_work_sync(&qp->link_work);
2418 }
2419 EXPORT_SYMBOL_GPL(ntb_transport_link_down);
2420
2421 /**
2422 * ntb_transport_link_query - Query transport link state
2423 * @qp: NTB transport layer queue to be queried
2424 *
2425 * Query connectivity to the remote system of the NTB transport queue
2426 *
2427 * RETURNS: true for link up or false for link down
2428 */
ntb_transport_link_query(struct ntb_transport_qp * qp)2429 bool ntb_transport_link_query(struct ntb_transport_qp *qp)
2430 {
2431 if (!qp)
2432 return false;
2433
2434 return qp->link_is_up;
2435 }
2436 EXPORT_SYMBOL_GPL(ntb_transport_link_query);
2437
2438 /**
2439 * ntb_transport_qp_num - Query the qp number
2440 * @qp: NTB transport layer queue to be queried
2441 *
2442 * Query qp number of the NTB transport queue
2443 *
2444 * RETURNS: a zero based number specifying the qp number
2445 */
ntb_transport_qp_num(struct ntb_transport_qp * qp)2446 unsigned char ntb_transport_qp_num(struct ntb_transport_qp *qp)
2447 {
2448 if (!qp)
2449 return 0;
2450
2451 return qp->qp_num;
2452 }
2453 EXPORT_SYMBOL_GPL(ntb_transport_qp_num);
2454
2455 /**
2456 * ntb_transport_max_size - Query the max payload size of a qp
2457 * @qp: NTB transport layer queue to be queried
2458 *
2459 * Query the maximum payload size permissible on the given qp
2460 *
2461 * RETURNS: the max payload size of a qp
2462 */
ntb_transport_max_size(struct ntb_transport_qp * qp)2463 unsigned int ntb_transport_max_size(struct ntb_transport_qp *qp)
2464 {
2465 unsigned int max_size;
2466 unsigned int copy_align;
2467 struct dma_chan *rx_chan, *tx_chan;
2468
2469 if (!qp)
2470 return 0;
2471
2472 rx_chan = qp->rx_dma_chan;
2473 tx_chan = qp->tx_dma_chan;
2474
2475 copy_align = max(rx_chan ? rx_chan->device->copy_align : 0,
2476 tx_chan ? tx_chan->device->copy_align : 0);
2477
2478 /* If DMA engine usage is possible, try to find the max size for that */
2479 max_size = qp->tx_max_frame - sizeof(struct ntb_payload_header);
2480 max_size = round_down(max_size, 1 << copy_align);
2481
2482 return max_size;
2483 }
2484 EXPORT_SYMBOL_GPL(ntb_transport_max_size);
2485
ntb_transport_tx_free_entry(struct ntb_transport_qp * qp)2486 unsigned int ntb_transport_tx_free_entry(struct ntb_transport_qp *qp)
2487 {
2488 unsigned int head = qp->tx_index;
2489 unsigned int tail = qp->remote_rx_info->entry;
2490
2491 return tail >= head ? tail - head : qp->tx_max_entry + tail - head;
2492 }
2493 EXPORT_SYMBOL_GPL(ntb_transport_tx_free_entry);
2494
ntb_transport_doorbell_callback(void * data,int vector)2495 static void ntb_transport_doorbell_callback(void *data, int vector)
2496 {
2497 struct ntb_transport_ctx *nt = data;
2498 struct ntb_transport_qp *qp;
2499 u64 db_bits;
2500 unsigned int qp_num;
2501
2502 if (ntb_db_read(nt->ndev) & nt->msi_db_mask) {
2503 ntb_transport_msi_peer_desc_changed(nt);
2504 ntb_db_clear(nt->ndev, nt->msi_db_mask);
2505 }
2506
2507 db_bits = (nt->qp_bitmap & ~nt->qp_bitmap_free &
2508 ntb_db_vector_mask(nt->ndev, vector));
2509
2510 while (db_bits) {
2511 qp_num = __ffs(db_bits);
2512 qp = &nt->qp_vec[qp_num];
2513
2514 if (qp->active)
2515 tasklet_schedule(&qp->rxc_db_work);
2516
2517 db_bits &= ~BIT_ULL(qp_num);
2518 }
2519 }
2520
2521 static const struct ntb_ctx_ops ntb_transport_ops = {
2522 .link_event = ntb_transport_event_callback,
2523 .db_event = ntb_transport_doorbell_callback,
2524 };
2525
2526 static struct ntb_client ntb_transport_client = {
2527 .ops = {
2528 .probe = ntb_transport_probe,
2529 .remove = ntb_transport_free,
2530 },
2531 };
2532
ntb_transport_init(void)2533 static int __init ntb_transport_init(void)
2534 {
2535 int rc;
2536
2537 pr_info("%s, version %s\n", NTB_TRANSPORT_DESC, NTB_TRANSPORT_VER);
2538
2539 if (debugfs_initialized())
2540 nt_debugfs_dir = debugfs_create_dir(KBUILD_MODNAME, NULL);
2541
2542 rc = bus_register(&ntb_transport_bus);
2543 if (rc)
2544 goto err_bus;
2545
2546 rc = ntb_register_client(&ntb_transport_client);
2547 if (rc)
2548 goto err_client;
2549
2550 return 0;
2551
2552 err_client:
2553 bus_unregister(&ntb_transport_bus);
2554 err_bus:
2555 debugfs_remove_recursive(nt_debugfs_dir);
2556 return rc;
2557 }
2558 module_init(ntb_transport_init);
2559
ntb_transport_exit(void)2560 static void __exit ntb_transport_exit(void)
2561 {
2562 ntb_unregister_client(&ntb_transport_client);
2563 bus_unregister(&ntb_transport_bus);
2564 debugfs_remove_recursive(nt_debugfs_dir);
2565 }
2566 module_exit(ntb_transport_exit);
2567