Commit | Line | Data |
---|---|---|
1802d0be | 1 | // SPDX-License-Identifier: GPL-2.0-only |
fb4d0e3d SD |
2 | /* |
3 | * Intel MIC Platform Software Stack (MPSS) | |
4 | * | |
5 | * Copyright(c) 2014 Intel Corporation. | |
6 | * | |
fb4d0e3d | 7 | * Intel SCIF driver. |
fb4d0e3d SD |
8 | */ |
9 | #include <linux/debugfs.h> | |
10 | #include <linux/seq_file.h> | |
11 | ||
12 | #include "../common/mic_dev.h" | |
13 | #include "scif_main.h" | |
14 | ||
15 | /* Debugfs parent dir */ | |
16 | static struct dentry *scif_dbg; | |
17 | ||
2796b43f | 18 | static int scif_dev_show(struct seq_file *s, void *unused) |
fb4d0e3d SD |
19 | { |
20 | int node; | |
21 | ||
22 | seq_printf(s, "Total Nodes %d Self Node Id %d Maxid %d\n", | |
23 | scif_info.total, scif_info.nodeid, | |
24 | scif_info.maxid); | |
25 | ||
26 | if (!scif_dev) | |
27 | return 0; | |
28 | ||
29 | seq_printf(s, "%-16s\t%-16s\n", "node_id", "state"); | |
30 | ||
31 | for (node = 0; node <= scif_info.maxid; node++) | |
32 | seq_printf(s, "%-16d\t%-16s\n", scif_dev[node].node, | |
33 | _scifdev_alive(&scif_dev[node]) ? | |
34 | "Running" : "Offline"); | |
35 | return 0; | |
36 | } | |
37 | ||
2796b43f | 38 | DEFINE_SHOW_ATTRIBUTE(scif_dev); |
fb4d0e3d | 39 | |
d1824329 SD |
40 | static void scif_display_window(struct scif_window *window, struct seq_file *s) |
41 | { | |
42 | int j; | |
43 | struct scatterlist *sg; | |
44 | scif_pinned_pages_t pin = window->pinned_pages; | |
45 | ||
46 | seq_printf(s, "window %p type %d temp %d offset 0x%llx ", | |
47 | window, window->type, window->temp, window->offset); | |
48 | seq_printf(s, "nr_pages 0x%llx nr_contig_chunks 0x%x prot %d ", | |
49 | window->nr_pages, window->nr_contig_chunks, window->prot); | |
50 | seq_printf(s, "ref_count %d magic 0x%llx peer_window 0x%llx ", | |
51 | window->ref_count, window->magic, window->peer_window); | |
52 | seq_printf(s, "unreg_state 0x%x va_for_temp 0x%lx\n", | |
53 | window->unreg_state, window->va_for_temp); | |
54 | ||
55 | for (j = 0; j < window->nr_contig_chunks; j++) | |
56 | seq_printf(s, "page[%d] dma_addr 0x%llx num_pages 0x%llx\n", j, | |
57 | window->dma_addr[j], window->num_pages[j]); | |
58 | ||
59 | if (window->type == SCIF_WINDOW_SELF && pin) | |
60 | for (j = 0; j < window->nr_pages; j++) | |
61 | seq_printf(s, "page[%d] = pinned_pages %p address %p\n", | |
62 | j, pin->pages[j], | |
63 | page_address(pin->pages[j])); | |
64 | ||
65 | if (window->st) | |
66 | for_each_sg(window->st->sgl, sg, window->st->nents, j) | |
67 | seq_printf(s, "sg[%d] dma addr 0x%llx length 0x%x\n", | |
68 | j, sg_dma_address(sg), sg_dma_len(sg)); | |
69 | } | |
70 | ||
71 | static void scif_display_all_windows(struct list_head *head, struct seq_file *s) | |
fb4d0e3d | 72 | { |
d1824329 SD |
73 | struct list_head *item; |
74 | struct scif_window *window; | |
fb4d0e3d | 75 | |
d1824329 SD |
76 | list_for_each(item, head) { |
77 | window = list_entry(item, struct scif_window, list); | |
78 | scif_display_window(window, s); | |
79 | } | |
80 | } | |
81 | ||
2796b43f | 82 | static int scif_rma_show(struct seq_file *s, void *unused) |
d1824329 SD |
83 | { |
84 | struct scif_endpt *ep; | |
85 | struct list_head *pos; | |
86 | ||
87 | mutex_lock(&scif_info.connlock); | |
88 | list_for_each(pos, &scif_info.connected) { | |
89 | ep = list_entry(pos, struct scif_endpt, list); | |
90 | seq_printf(s, "ep %p self windows\n", ep); | |
91 | mutex_lock(&ep->rma_info.rma_lock); | |
92 | scif_display_all_windows(&ep->rma_info.reg_list, s); | |
93 | seq_printf(s, "ep %p remote windows\n", ep); | |
94 | scif_display_all_windows(&ep->rma_info.remote_reg_list, s); | |
95 | mutex_unlock(&ep->rma_info.rma_lock); | |
96 | } | |
97 | mutex_unlock(&scif_info.connlock); | |
98 | return 0; | |
99 | } | |
100 | ||
2796b43f | 101 | DEFINE_SHOW_ATTRIBUTE(scif_rma); |
d1824329 SD |
102 | |
103 | void __init scif_init_debugfs(void) | |
104 | { | |
fb4d0e3d SD |
105 | scif_dbg = debugfs_create_dir(KBUILD_MODNAME, NULL); |
106 | if (!scif_dbg) { | |
107 | dev_err(scif_info.mdev.this_device, | |
108 | "can't create debugfs dir scif\n"); | |
109 | return; | |
110 | } | |
111 | ||
2796b43f YL |
112 | debugfs_create_file("scif_dev", 0444, scif_dbg, NULL, &scif_dev_fops); |
113 | debugfs_create_file("scif_rma", 0444, scif_dbg, NULL, &scif_rma_fops); | |
fb4d0e3d SD |
114 | debugfs_create_u8("en_msg_log", 0666, scif_dbg, &scif_info.en_msg_log); |
115 | debugfs_create_u8("p2p_enable", 0666, scif_dbg, &scif_info.p2p_enable); | |
116 | } | |
117 | ||
118 | void scif_exit_debugfs(void) | |
119 | { | |
120 | debugfs_remove_recursive(scif_dbg); | |
121 | } |