| /linux/include/linux/ |
| H A D | ntb.h | 174 int (*probe)(struct ntb_client *client, struct ntb_dev *ntb); 175 void (*remove)(struct ntb_client *client, struct ntb_dev *ntb); 261 int (*port_number)(struct ntb_dev *ntb); 262 int (*peer_port_count)(struct ntb_dev *ntb); 263 int (*peer_port_number)(struct ntb_dev *ntb, int pidx); 264 int (*peer_port_idx)(struct ntb_dev *ntb, int port); 266 u64 (*link_is_up)(struct ntb_dev *ntb, 268 int (*link_enable)(struct ntb_dev *ntb, 270 int (*link_disable)(struct ntb_dev *ntb); 272 int (*mw_count)(struct ntb_dev *ntb, int pidx); [all …]
|
| /linux/drivers/ntb/ |
| H A D | core.c | 101 int ntb_register_device(struct ntb_dev *ntb) in ntb_register_device() argument 105 if (!ntb) in ntb_register_device() 107 if (!ntb->pdev) in ntb_register_device() 109 if (!ntb->ops) in ntb_register_device() 111 if (!ntb_dev_ops_is_valid(ntb->ops)) in ntb_register_device() 114 init_completion(&ntb->released); in ntb_register_device() 116 ntb->dev.bus = &ntb_bus; in ntb_register_device() 117 ntb->dev.parent = &ntb->pdev->dev; in ntb_register_device() 118 ntb->dev.release = ntb_dev_release; in ntb_register_device() 119 dev_set_name(&ntb->dev, "%s", pci_name(ntb->pdev)); in ntb_register_device() [all …]
|
| H A D | msi.c | 31 int ntb_msi_init(struct ntb_dev *ntb, in ntb_msi_init() argument 41 peers = ntb_peer_port_count(ntb); in ntb_msi_init() 45 ntb->msi = devm_kzalloc(&ntb->dev, struct_size(ntb->msi, peer_mws, peers), in ntb_msi_init() 47 if (!ntb->msi) in ntb_msi_init() 50 ntb->msi->desc_changed = desc_changed; in ntb_msi_init() 53 peer_widx = ntb_peer_mw_count(ntb) - 1 - i; in ntb_msi_init() 55 ret = ntb_peer_mw_get_addr(ntb, peer_widx, &mw_phys_addr, in ntb_msi_init() 60 ntb->msi->peer_mws[i] = devm_ioremap(&ntb->dev, mw_phys_addr, in ntb_msi_init() 62 if (!ntb->msi->peer_mws[i]) { in ntb_msi_init() 72 if (ntb->msi->peer_mws[i]) in ntb_msi_init() [all …]
|
| H A D | Makefile | 2 obj-$(CONFIG_NTB) += ntb.o hw/ test/ 5 ntb-y := core.o 6 ntb-$(CONFIG_NTB_MSI) += msi.o
|
| H A D | Kconfig | 9 ntb Linux driver uses this point-to-point communication as a method to 27 source "drivers/ntb/hw/Kconfig" 29 source "drivers/ntb/test/Kconfig" 35 messages over the ntb hardware. The transport exposes a queue pair api
|
| /linux/drivers/ntb/test/ |
| H A D | ntb_msi_test.c | 20 struct ntb_dev *ntb; member 48 dev_dbg(&nm->ntb->dev, "Interrupt Occurred: %d", in ntb_msit_isr() 65 ret = ntb_msi_setup_mws(nm->ntb); in ntb_msit_setup_work() 67 dev_err(&nm->ntb->dev, "Unable to setup MSI windows: %d\n", in ntb_msit_setup_work() 77 irq = ntbm_msi_request_irq(nm->ntb, ntb_msit_isr, in ntb_msit_setup_work() 87 ret = ntb_spad_write(nm->ntb, 2 * i + 1, in ntb_msit_setup_work() 92 ret = ntb_spad_write(nm->ntb, 2 * i + 2, in ntb_msit_setup_work() 100 ntb_spad_write(nm->ntb, 0, irq_count); in ntb_msit_setup_work() 101 ntb_peer_db_set(nm->ntb, BIT(ntb_port_number(nm->ntb))); in ntb_msit_setup_work() 109 dev_dbg(&nm->ntb->dev, "MSI Descriptors Changed\n"); in ntb_msit_desc_changed() [all …]
|
| H A D | ntb_perf.c | 188 struct ntb_dev *ntb; member 253 link = ntb_link_is_up(peer->perf->ntb, NULL, NULL); in perf_link_is_up() 264 dev_dbg(&perf->ntb->dev, "CMD send: %d 0x%llx\n", cmd, data); in perf_spad_cmd_send() 277 sts = ntb_peer_spad_read(perf->ntb, peer->pidx, in perf_spad_cmd_send() 284 ntb_peer_spad_write(perf->ntb, peer->pidx, in perf_spad_cmd_send() 287 ntb_peer_spad_write(perf->ntb, peer->pidx, in perf_spad_cmd_send() 290 ntb_peer_spad_write(perf->ntb, peer->pidx, in perf_spad_cmd_send() 293 ntb_peer_db_set(perf->ntb, PERF_SPAD_NOTIFY(peer->gidx)); in perf_spad_cmd_send() 295 dev_dbg(&perf->ntb->dev, "DB ring peer %#llx\n", in perf_spad_cmd_send() 310 ntb_db_clear(perf->ntb, PERF_SPAD_NOTIFY(perf->gidx)); in perf_spad_cmd_recv() [all …]
|
| H A D | ntb_tool.c | 257 struct ntb_dev *ntb; member 296 up = ntb_link_is_up(tc->ntb, &speed, &width); in tool_link_event() 298 dev_dbg(&tc->ntb->dev, "link is %s speed %d width %d\n", in tool_link_event() 309 db_mask = ntb_db_vector_mask(tc->ntb, vec); in tool_db_event() 310 db_bits = ntb_db_read(tc->ntb); in tool_db_event() 312 dev_dbg(&tc->ntb->dev, "doorbell vec %d mask %#llx bits %#llx\n", in tool_db_event() 323 msg_sts = ntb_msg_read_sts(tc->ntb); in tool_msg_event() 325 dev_dbg(&tc->ntb->dev, "message bits %#llx\n", msg_sts); in tool_msg_event() 354 pos = scnprintf(buf, buf_size, "%#llx\n", fn_read(tc->ntb)); in tool_fn_read() 387 ret = fn_set(tc->ntb, bits); in tool_fn_write() [all …]
|
| H A D | Kconfig | 6 doorbells of the ntb hardware. This driver may be used to test that 7 your ntb hardware and drivers are functioning at a basic level. 17 This driver may be used to test that your ntb hardware and drivers are
|
| /linux/drivers/ntb/hw/amd/ |
| H A D | ntb_hw_amd.c | 84 static int amd_ntb_mw_count(struct ntb_dev *ntb, int pidx) in amd_ntb_mw_count() argument 89 return ntb_ndev(ntb)->mw_count; in amd_ntb_mw_count() 92 static int amd_ntb_mw_get_align(struct ntb_dev *ntb, int pidx, int idx, in amd_ntb_mw_get_align() argument 97 struct amd_ntb_dev *ndev = ntb_ndev(ntb); in amd_ntb_mw_get_align() 114 *size_max = pci_resource_len(ndev->ntb.pdev, bar); in amd_ntb_mw_get_align() 119 static int amd_ntb_mw_set_trans(struct ntb_dev *ntb, int pidx, int idx, in amd_ntb_mw_set_trans() argument 122 struct amd_ntb_dev *ndev = ntb_ndev(ntb); in amd_ntb_mw_set_trans() 136 mw_size = pci_resource_len(ntb->pdev, bar); in amd_ntb_mw_set_trans() 145 base_addr = pci_resource_start(ntb->pdev, bar); in amd_ntb_mw_set_trans() 200 struct pci_dev *pdev = ndev->ntb.pdev; in amd_ntb_get_link_status() [all …]
|
| H A D | ntb_hw_amd.h | 182 struct ntb_dev ntb; member 217 #define ntb_ndev(__ntb) container_of(__ntb, struct amd_ntb_dev, ntb)
|
| /linux/drivers/ntb/hw/epf/ |
| H A D | ntb_hw_epf.c | 75 struct ntb_dev ntb; member 97 #define ntb_ndev(__ntb) container_of(__ntb, struct ntb_epf_dev, ntb) 150 static int ntb_epf_mw_count(struct ntb_dev *ntb, int pidx) in ntb_epf_mw_count() argument 152 struct ntb_epf_dev *ndev = ntb_ndev(ntb); in ntb_epf_mw_count() 163 static int ntb_epf_mw_get_align(struct ntb_dev *ntb, int pidx, int idx, in ntb_epf_mw_get_align() argument 168 struct ntb_epf_dev *ndev = ntb_ndev(ntb); in ntb_epf_mw_get_align() 188 *size_max = pci_resource_len(ndev->ntb.pdev, bar); in ntb_epf_mw_get_align() 193 static u64 ntb_epf_link_is_up(struct ntb_dev *ntb, in ntb_epf_link_is_up() argument 197 struct ntb_epf_dev *ndev = ntb_ndev(ntb); in ntb_epf_link_is_up() 205 static u32 ntb_epf_spad_read(struct ntb_dev *ntb, int idx) in ntb_epf_spad_read() argument [all …]
|
| /linux/drivers/ntb/hw/intel/ |
| H A D | ntb_hw_gen1.h | 159 int intel_ntb_mw_count(struct ntb_dev *ntb, int pidx); 160 int intel_ntb_mw_get_align(struct ntb_dev *ntb, int pidx, int idx, 163 int intel_ntb_peer_mw_count(struct ntb_dev *ntb); 164 int intel_ntb_peer_mw_get_addr(struct ntb_dev *ntb, int idx, 166 u64 intel_ntb_link_is_up(struct ntb_dev *ntb, enum ntb_speed *speed, 168 int intel_ntb_link_disable(struct ntb_dev *ntb); 169 u64 intel_ntb_db_valid_mask(struct ntb_dev *ntb); 170 int intel_ntb_db_vector_count(struct ntb_dev *ntb); 171 u64 intel_ntb_db_vector_mask(struct ntb_dev *ntb, int db_vector); 172 int intel_ntb_db_set_mask(struct ntb_dev *ntb, u64 db_bits); [all …]
|
| H A D | ntb_hw_gen3.c | 102 rc = pci_read_config_word(ndev->ntb.pdev, in gen3_poll_link() 150 pdev = ndev->ntb.pdev; in gen3_setup_b2b_mw() 187 switch (ndev->ntb.topo) { in gen3_init_ntb() 194 if (ndev->ntb.topo == NTB_TOPO_B2B_USD) { in gen3_init_ntb() 235 pdev = ndev->ntb.pdev; in gen3_init_dev() 243 ndev->ntb.topo = xeon_ppd_topo(ndev, ppd); in gen3_init_dev() 245 ntb_topo_string(ndev->ntb.topo)); in gen3_init_dev() 246 if (ndev->ntb.topo == NTB_TOPO_NONE) in gen3_init_dev() 284 ntb_topo_string(ndev->ntb.topo)); in ndev_ntb3_debugfs_read() 350 if (ntb_topo_is_b2b(ndev->ntb.topo)) { in ndev_ntb3_debugfs_read() [all …]
|
| H A D | ntb_hw_gen1.c | 152 if (!ntb_topo_is_b2b(ndev->ntb.topo)) in ndev_reset_unsafe_flags() 193 dev_dbg(&ndev->ntb.pdev->dev, "Peer db addr %llx\n", *db_addr); in ndev_db_addr() 198 dev_dbg(&ndev->ntb.pdev->dev, "Peer db size %llx\n", *db_size); in ndev_db_addr() 289 dev_dbg(&ndev->ntb.pdev->dev, "Peer spad addr %llx\n", in ndev_spad_addr() 331 dev_dbg(&ndev->ntb.pdev->dev, "vec %d vec_mask %llx\n", vec, vec_mask); in ndev_interrupt() 337 ntb_link_event(&ndev->ntb); in ndev_interrupt() 341 ntb_db_event(&ndev->ntb, vec); in ndev_interrupt() 350 dev_dbg(&nvec->ndev->ntb.pdev->dev, "irq: %d nvec->num: %d\n", in ndev_vec_isr() 360 return ndev_interrupt(ndev, irq - ndev->ntb.pdev->irq); in ndev_irq_isr() 370 pdev = ndev->ntb.pdev; in ndev_init_isr() [all …]
|
| H A D | ntb_hw_gen4.c | 114 pdev = ndev->ntb.pdev; in gen4_setup_b2b_mw() 151 if (ndev->ntb.topo == NTB_TOPO_B2B_USD) in gen4_init_ntb() 195 struct pci_dev *pdev = ndev->ntb.pdev; in gen4_init_dev() 209 ndev->ntb.topo = gen4_ppd_topo(ndev, ppd1); in gen4_init_dev() 211 ndev->ntb.topo = spr_ppd_topo(ndev, ppd1); in gen4_init_dev() 213 ntb_topo_string(ndev->ntb.topo)); in gen4_init_dev() 214 if (ndev->ntb.topo == NTB_TOPO_NONE) in gen4_init_dev() 255 ntb_topo_string(ndev->ntb.topo)); in ndev_ntb4_debugfs_read() 323 if (!pci_read_config_word(ndev->ntb.pdev, in ndev_ntb4_debugfs_read() 332 if (!pci_read_config_dword(ndev->ntb.pdev, in ndev_ntb4_debugfs_read() [all …]
|
| H A D | ntb_hw_gen3.h | 107 int intel_ntb3_link_enable(struct ntb_dev *ntb, enum ntb_speed max_speed, 109 u64 intel_ntb3_db_read(struct ntb_dev *ntb); 110 int intel_ntb3_db_clear(struct ntb_dev *ntb, u64 db_bits); 111 int intel_ntb3_peer_db_set(struct ntb_dev *ntb, u64 db_bits); 112 int intel_ntb3_peer_db_addr(struct ntb_dev *ntb, phys_addr_t *db_addr,
|
| H A D | ntb_hw_intel.h | 140 struct ntb_dev ntb; member 191 #define ntb_ndev(__ntb) container_of(__ntb, struct intel_ntb_dev, ntb)
|
| /linux/drivers/ntb/hw/idt/ |
| H A D | ntb_hw_idt.c | 530 dev_dbg(&ndev->ntb.pdev->dev, "Local port: %hhu, num of peers: %hhu\n", in idt_scan_ports() 535 dev_warn(&ndev->ntb.pdev->dev, "No active peer found\n"); in idt_scan_ports() 548 static int idt_ntb_port_number(struct ntb_dev *ntb) in idt_ntb_port_number() argument 550 struct idt_ntb_dev *ndev = to_ndev_ntb(ntb); in idt_ntb_port_number() 563 static int idt_ntb_peer_port_count(struct ntb_dev *ntb) in idt_ntb_peer_port_count() argument 565 struct idt_ntb_dev *ndev = to_ndev_ntb(ntb); in idt_ntb_peer_port_count() 577 static int idt_ntb_peer_port_number(struct ntb_dev *ntb, int pidx) in idt_ntb_peer_port_number() argument 579 struct idt_ntb_dev *ndev = to_ndev_ntb(ntb); in idt_ntb_peer_port_number() 598 static int idt_ntb_peer_port_idx(struct ntb_dev *ntb, int port) in idt_ntb_peer_port_idx() argument 600 struct idt_ntb_dev *ndev = to_ndev_ntb(ntb); in idt_ntb_peer_port_idx() [all …]
|
| /linux/drivers/ntb/hw/mscc/ |
| H A D | ntb_hw_switchtec.c | 46 struct ntb_dev ntb; member 93 static struct switchtec_ntb *ntb_sndev(struct ntb_dev *ntb) in ntb_sndev() argument 95 return container_of(ntb, struct switchtec_ntb, ntb); in ntb_sndev() 166 static int switchtec_ntb_mw_count(struct ntb_dev *ntb, int pidx) in switchtec_ntb_mw_count() argument 168 struct switchtec_ntb *sndev = ntb_sndev(ntb); in switchtec_ntb_mw_count() 191 static int switchtec_ntb_mw_get_align(struct ntb_dev *ntb, int pidx, in switchtec_ntb_mw_get_align() argument 196 struct switchtec_ntb *sndev = ntb_sndev(ntb); in switchtec_ntb_mw_get_align() 270 static int switchtec_ntb_mw_set_trans(struct ntb_dev *ntb, int pidx, int widx, in switchtec_ntb_mw_set_trans() argument 273 struct switchtec_ntb *sndev = ntb_sndev(ntb); in switchtec_ntb_mw_set_trans() 285 if (widx >= switchtec_ntb_mw_count(ntb, pidx)) in switchtec_ntb_mw_set_trans() [all …]
|
| /linux/drivers/ntb/hw/ |
| H A D | Kconfig | 2 source "drivers/ntb/hw/amd/Kconfig" 3 source "drivers/ntb/hw/idt/Kconfig" 4 source "drivers/ntb/hw/intel/Kconfig" 5 source "drivers/ntb/hw/epf/Kconfig" 6 source "drivers/ntb/hw/mscc/Kconfig"
|
| /linux/Documentation/PCI/endpoint/ |
| H A D | pci-ntb-howto.rst | 9 This document is a guide to help users use pci-epf-ntb function driver 13 Documentation/PCI/endpoint/pci-ntb-function.rst 49 Creating pci-epf-ntb Device 53 pci-epf-ntb device, the following commands can be used:: 59 The "mkdir func1" above creates the pci-epf-ntb function device that will 66 baseclass_code deviceid msi_interrupts pci-epf-ntb.0 72 when the device is bound to the driver. The pci-epf-ntb driver populates 81 Configuring pci-epf-ntb Device 84 The user can configure the pci-epf-ntb device using its configfs entry. In order 108 Binding pci-epf-ntb Device to EP Controller [all …]
|
| /linux/Documentation/driver-api/ |
| H A D | ntb.rst | 17 NTB Core Driver (ntb) 31 as ntb hardware, or hardware drivers, are inserted and removed. The 42 inbound translation configured on the local ntb port and outbound translation 43 configured by the peer, on the peer ntb port. The first type is 123 NTB Transport Client (ntb\_transport) and NTB Netdev (ntb\_netdev) 128 across the ntb, to exchange packets of network data. The Transport client 135 NTB Ping Pong Test Client (ntb\_pingpong) 163 NTB Tool Test Client (ntb\_tool) 166 The Tool test client serves for debugging, primarily, ntb hardware and drivers. 174 * *debugfs*/ntb\_tool/*hw*/ [all …]
|
| /linux/drivers/pci/endpoint/functions/ |
| H A D | Makefile | 7 obj-$(CONFIG_PCI_EPF_NTB) += pci-epf-ntb.o
|
| /linux/drivers/net/ |
| H A D | ntb_netdev.c | 403 struct ntb_dev *ntb; in ntb_netdev_probe() local 409 ntb = dev_ntb(client_dev->parent); in ntb_netdev_probe() 410 pdev = ntb->pdev; in ntb_netdev_probe()
|