1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* |
3 | * xhci-debugfs.h - xHCI debugfs interface |
4 | * |
5 | * Copyright (C) 2017 Intel Corporation |
6 | * |
7 | * Author: Lu Baolu <baolu.lu@linux.intel.com> |
8 | */ |
9 | |
10 | #ifndef __LINUX_XHCI_DEBUGFS_H |
11 | #define __LINUX_XHCI_DEBUGFS_H |
12 | |
13 | #include <linux/debugfs.h> |
14 | |
15 | #define DEBUGFS_NAMELEN 32 |
16 | |
17 | #define REG_CAPLENGTH 0x00 |
18 | #define REG_HCSPARAMS1 0x04 |
19 | #define REG_HCSPARAMS2 0x08 |
20 | #define REG_HCSPARAMS3 0x0c |
21 | #define REG_HCCPARAMS1 0x10 |
22 | #define REG_DOORBELLOFF 0x14 |
23 | #define REG_RUNTIMEOFF 0x18 |
24 | #define REG_HCCPARAMS2 0x1c |
25 | |
26 | #define REG_USBCMD 0x00 |
27 | #define REG_USBSTS 0x04 |
28 | #define REG_PAGESIZE 0x08 |
29 | #define REG_DNCTRL 0x14 |
30 | #define REG_CRCR 0x18 |
31 | #define REG_DCBAAP_LOW 0x30 |
32 | #define REG_DCBAAP_HIGH 0x34 |
33 | #define REG_CONFIG 0x38 |
34 | |
35 | #define REG_MFINDEX 0x00 |
36 | #define REG_IR0_IMAN 0x20 |
37 | #define REG_IR0_IMOD 0x24 |
38 | #define REG_IR0_ERSTSZ 0x28 |
39 | #define REG_IR0_ERSTBA_LOW 0x30 |
40 | #define REG_IR0_ERSTBA_HIGH 0x34 |
41 | #define REG_IR0_ERDP_LOW 0x38 |
42 | #define REG_IR0_ERDP_HIGH 0x3c |
43 | |
44 | #define REG_EXTCAP_USBLEGSUP 0x00 |
45 | #define REG_EXTCAP_USBLEGCTLSTS 0x04 |
46 | |
47 | #define REG_EXTCAP_REVISION 0x00 |
48 | #define REG_EXTCAP_NAME 0x04 |
49 | #define REG_EXTCAP_PORTINFO 0x08 |
50 | #define REG_EXTCAP_PORTTYPE 0x0c |
51 | #define REG_EXTCAP_MANTISSA1 0x10 |
52 | #define REG_EXTCAP_MANTISSA2 0x14 |
53 | #define REG_EXTCAP_MANTISSA3 0x18 |
54 | #define REG_EXTCAP_MANTISSA4 0x1c |
55 | #define REG_EXTCAP_MANTISSA5 0x20 |
56 | #define REG_EXTCAP_MANTISSA6 0x24 |
57 | |
58 | #define REG_EXTCAP_DBC_CAPABILITY 0x00 |
59 | #define REG_EXTCAP_DBC_DOORBELL 0x04 |
60 | #define REG_EXTCAP_DBC_ERSTSIZE 0x08 |
61 | #define REG_EXTCAP_DBC_ERST_LOW 0x10 |
62 | #define REG_EXTCAP_DBC_ERST_HIGH 0x14 |
63 | #define REG_EXTCAP_DBC_ERDP_LOW 0x18 |
64 | #define REG_EXTCAP_DBC_ERDP_HIGH 0x1c |
65 | #define REG_EXTCAP_DBC_CONTROL 0x20 |
66 | #define REG_EXTCAP_DBC_STATUS 0x24 |
67 | #define REG_EXTCAP_DBC_PORTSC 0x28 |
68 | #define REG_EXTCAP_DBC_CONT_LOW 0x30 |
69 | #define REG_EXTCAP_DBC_CONT_HIGH 0x34 |
70 | #define REG_EXTCAP_DBC_DEVINFO1 0x38 |
71 | #define REG_EXTCAP_DBC_DEVINFO2 0x3c |
72 | |
73 | #define dump_register(nm) \ |
74 | { \ |
75 | .name = __stringify(nm), \ |
76 | .offset = REG_ ##nm, \ |
77 | } |
78 | |
79 | struct xhci_regset { |
80 | char name[DEBUGFS_NAMELEN]; |
81 | struct debugfs_regset32 regset; |
82 | size_t nregs; |
83 | struct list_head list; |
84 | }; |
85 | |
86 | struct xhci_file_map { |
87 | const char *name; |
88 | int (*show)(struct seq_file *s, void *unused); |
89 | }; |
90 | |
91 | struct xhci_ep_priv { |
92 | char name[DEBUGFS_NAMELEN]; |
93 | struct dentry *root; |
94 | struct xhci_stream_info *stream_info; |
95 | struct xhci_ring *show_ring; |
96 | unsigned int stream_id; |
97 | }; |
98 | |
99 | struct xhci_slot_priv { |
100 | char name[DEBUGFS_NAMELEN]; |
101 | struct dentry *root; |
102 | struct xhci_ep_priv *eps[31]; |
103 | struct xhci_virt_device *dev; |
104 | }; |
105 | |
106 | #ifdef CONFIG_DEBUG_FS |
107 | void xhci_debugfs_init(struct xhci_hcd *xhci); |
108 | void xhci_debugfs_exit(struct xhci_hcd *xhci); |
109 | void __init xhci_debugfs_create_root(void); |
110 | void __exit xhci_debugfs_remove_root(void); |
111 | void xhci_debugfs_create_slot(struct xhci_hcd *xhci, int slot_id); |
112 | void xhci_debugfs_remove_slot(struct xhci_hcd *xhci, int slot_id); |
113 | void xhci_debugfs_create_endpoint(struct xhci_hcd *xhci, |
114 | struct xhci_virt_device *virt_dev, |
115 | int ep_index); |
116 | void xhci_debugfs_remove_endpoint(struct xhci_hcd *xhci, |
117 | struct xhci_virt_device *virt_dev, |
118 | int ep_index); |
119 | void xhci_debugfs_create_stream_files(struct xhci_hcd *xhci, |
120 | struct xhci_virt_device *virt_dev, |
121 | int ep_index); |
122 | #else |
123 | static inline void xhci_debugfs_init(struct xhci_hcd *xhci) { } |
124 | static inline void xhci_debugfs_exit(struct xhci_hcd *xhci) { } |
125 | static inline void __init xhci_debugfs_create_root(void) { } |
126 | static inline void __exit xhci_debugfs_remove_root(void) { } |
127 | static inline void xhci_debugfs_create_slot(struct xhci_hcd *x, int s) { } |
128 | static inline void xhci_debugfs_remove_slot(struct xhci_hcd *x, int s) { } |
129 | static inline void |
130 | xhci_debugfs_create_endpoint(struct xhci_hcd *xhci, |
131 | struct xhci_virt_device *virt_dev, |
132 | int ep_index) { } |
133 | static inline void |
134 | xhci_debugfs_remove_endpoint(struct xhci_hcd *xhci, |
135 | struct xhci_virt_device *virt_dev, |
136 | int ep_index) { } |
137 | static inline void |
138 | xhci_debugfs_create_stream_files(struct xhci_hcd *xhci, |
139 | struct xhci_virt_device *virt_dev, |
140 | int ep_index) { } |
141 | #endif /* CONFIG_DEBUG_FS */ |
142 | |
143 | #endif /* __LINUX_XHCI_DEBUGFS_H */ |
144 | |