Lines Matching refs:ntb
5 #include <linux/ntb.h>
20 struct ntb_dev *ntb;
48 dev_dbg(&nm->ntb->dev, "Interrupt Occurred: %d",
65 ret = ntb_msi_setup_mws(nm->ntb);
67 dev_err(&nm->ntb->dev, "Unable to setup MSI windows: %d\n",
77 irq = ntbm_msi_request_irq(nm->ntb, ntb_msit_isr,
87 ret = ntb_spad_write(nm->ntb, 2 * i + 1,
92 ret = ntb_spad_write(nm->ntb, 2 * i + 2,
100 ntb_spad_write(nm->ntb, 0, irq_count);
101 ntb_peer_db_set(nm->ntb, BIT(ntb_port_number(nm->ntb)));
109 dev_dbg(&nm->ntb->dev, "MSI Descriptors Changed\n");
112 ntb_spad_write(nm->ntb, 2 * i + 1,
114 ntb_spad_write(nm->ntb, 2 * i + 2,
118 ntb_peer_db_set(nm->ntb, BIT(ntb_port_number(nm->ntb)));
125 if (!ntb_link_is_up(nm->ntb, NULL, NULL))
138 desc[i].addr_offset = ntb_peer_spad_read(nm->ntb, peer,
140 desc[i].data = ntb_peer_spad_read(nm->ntb, peer, 2 * i + 2);
143 dev_info(&nm->ntb->dev, "Found %d interrupts on peer %d\n",
153 u64 peer_mask = ntb_db_read(nm->ntb);
157 ntb_db_clear(nm->ntb, peer_mask);
163 irq_count = ntb_peer_spad_read(nm->ntb, peer, 0);
191 dev_dbg(&peer->nm->ntb->dev, "trigger irq %llu on peer %u\n",
194 return ntb_msi_peer_trigger(peer->nm->ntb, peer->pidx,
205 *port = ntb_peer_port_number(peer->nm->ntb, peer->pidx);
261 *port = ntb_port_number(nm->ntb);
272 struct pci_dev *pdev = nm->ntb->pdev;
282 for (i = 0; i < ntb_peer_port_count(nm->ntb); i++) {
319 static int ntb_msit_probe(struct ntb_client *client, struct ntb_dev *ntb)
325 peers = ntb_peer_port_count(ntb);
329 if (ntb_spad_is_unsafe(ntb) || ntb_spad_count(ntb) < 2 * num_irqs + 1) {
330 dev_err(&ntb->dev, "NTB MSI test requires at least %d spads for %d irqs\n",
335 ret = ntb_spad_write(ntb, 0, -1);
337 dev_err(&ntb->dev, "Unable to write spads: %d\n", ret);
341 ret = ntb_db_clear_mask(ntb, GENMASK(peers - 1, 0));
343 dev_err(&ntb->dev, "Unable to clear doorbell mask: %d\n", ret);
347 ret = ntb_msi_init(ntb, ntb_msit_desc_changed);
349 dev_err(&ntb->dev, "Unable to initialize MSI library: %d\n",
354 nm = devm_kzalloc(&ntb->dev, struct_size(nm, peers, peers), GFP_KERNEL);
358 nm->isr_ctx = devm_kcalloc(&ntb->dev, num_irqs, sizeof(*nm->isr_ctx),
364 nm->ntb = ntb;
368 ret = ntb_set_ctx(ntb, nm, &ntb_msit_ops);
377 ntb_link_enable(ntb, NTB_SPEED_AUTO, NTB_WIDTH_AUTO);
383 devm_kfree(&ntb->dev, nm->isr_ctx);
384 devm_kfree(&ntb->dev, nm);
388 static void ntb_msit_remove(struct ntb_client *client, struct ntb_dev *ntb)
390 struct ntb_msit_ctx *nm = ntb->ctx;
393 ntb_link_disable(ntb);
394 ntb_db_set_mask(ntb, ntb_db_valid_mask(ntb));
395 ntb_msi_clear_mws(ntb);
397 for (i = 0; i < ntb_peer_port_count(ntb); i++)
400 ntb_clear_ctx(ntb);