xref: /OK3568_Linux_fs/kernel/include/linux/usb/ehci-dbgp.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Standalone EHCI usb debug driver
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Originally written by:
6*4882a593Smuzhiyun  *  Eric W. Biederman" <ebiederm@xmission.com> and
7*4882a593Smuzhiyun  *  Yinghai Lu <yhlu.kernel@gmail.com>
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * Changes for early/late printk and HW errata:
10*4882a593Smuzhiyun  *  Jason Wessel <jason.wessel@windriver.com>
11*4882a593Smuzhiyun  *  Copyright (C) 2009 Wind River Systems, Inc.
12*4882a593Smuzhiyun  *
13*4882a593Smuzhiyun  */
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #ifndef __LINUX_USB_EHCI_DBGP_H
16*4882a593Smuzhiyun #define __LINUX_USB_EHCI_DBGP_H
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #include <linux/console.h>
19*4882a593Smuzhiyun #include <linux/types.h>
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun /* Appendix C, Debug port ... intended for use with special "debug devices"
22*4882a593Smuzhiyun  * that can help if there's no serial console.  (nonstandard enumeration.)
23*4882a593Smuzhiyun  */
24*4882a593Smuzhiyun struct ehci_dbg_port {
25*4882a593Smuzhiyun 	u32	control;
26*4882a593Smuzhiyun #define DBGP_OWNER	(1<<30)
27*4882a593Smuzhiyun #define DBGP_ENABLED	(1<<28)
28*4882a593Smuzhiyun #define DBGP_DONE	(1<<16)
29*4882a593Smuzhiyun #define DBGP_INUSE	(1<<10)
30*4882a593Smuzhiyun #define DBGP_ERRCODE(x)	(((x)>>7)&0x07)
31*4882a593Smuzhiyun #	define DBGP_ERR_BAD	1
32*4882a593Smuzhiyun #	define DBGP_ERR_SIGNAL	2
33*4882a593Smuzhiyun #define DBGP_ERROR	(1<<6)
34*4882a593Smuzhiyun #define DBGP_GO		(1<<5)
35*4882a593Smuzhiyun #define DBGP_OUT	(1<<4)
36*4882a593Smuzhiyun #define DBGP_LEN(x)	(((x)>>0)&0x0f)
37*4882a593Smuzhiyun 	u32	pids;
38*4882a593Smuzhiyun #define DBGP_PID_GET(x)		(((x)>>16)&0xff)
39*4882a593Smuzhiyun #define DBGP_PID_SET(data, tok)	(((data)<<8)|(tok))
40*4882a593Smuzhiyun 	u32	data03;
41*4882a593Smuzhiyun 	u32	data47;
42*4882a593Smuzhiyun 	u32	address;
43*4882a593Smuzhiyun #define DBGP_EPADDR(dev, ep)	(((dev)<<8)|(ep))
44*4882a593Smuzhiyun };
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun #ifdef CONFIG_EARLY_PRINTK_DBGP
47*4882a593Smuzhiyun extern int early_dbgp_init(char *s);
48*4882a593Smuzhiyun extern struct console early_dbgp_console;
49*4882a593Smuzhiyun #endif /* CONFIG_EARLY_PRINTK_DBGP */
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun struct usb_hcd;
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun #ifdef CONFIG_XEN_DOM0
54*4882a593Smuzhiyun extern int xen_dbgp_reset_prep(struct usb_hcd *);
55*4882a593Smuzhiyun extern int xen_dbgp_external_startup(struct usb_hcd *);
56*4882a593Smuzhiyun #else
xen_dbgp_reset_prep(struct usb_hcd * hcd)57*4882a593Smuzhiyun static inline int xen_dbgp_reset_prep(struct usb_hcd *hcd)
58*4882a593Smuzhiyun {
59*4882a593Smuzhiyun 	return 1; /* Shouldn't this be 0? */
60*4882a593Smuzhiyun }
61*4882a593Smuzhiyun 
xen_dbgp_external_startup(struct usb_hcd * hcd)62*4882a593Smuzhiyun static inline int xen_dbgp_external_startup(struct usb_hcd *hcd)
63*4882a593Smuzhiyun {
64*4882a593Smuzhiyun 	return -1;
65*4882a593Smuzhiyun }
66*4882a593Smuzhiyun #endif
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun #ifdef CONFIG_EARLY_PRINTK_DBGP
69*4882a593Smuzhiyun /* Call backs from ehci host driver to ehci debug driver */
70*4882a593Smuzhiyun extern int dbgp_external_startup(struct usb_hcd *);
71*4882a593Smuzhiyun extern int dbgp_reset_prep(struct usb_hcd *);
72*4882a593Smuzhiyun #else
dbgp_reset_prep(struct usb_hcd * hcd)73*4882a593Smuzhiyun static inline int dbgp_reset_prep(struct usb_hcd *hcd)
74*4882a593Smuzhiyun {
75*4882a593Smuzhiyun 	return xen_dbgp_reset_prep(hcd);
76*4882a593Smuzhiyun }
77*4882a593Smuzhiyun 
dbgp_external_startup(struct usb_hcd * hcd)78*4882a593Smuzhiyun static inline int dbgp_external_startup(struct usb_hcd *hcd)
79*4882a593Smuzhiyun {
80*4882a593Smuzhiyun 	return xen_dbgp_external_startup(hcd);
81*4882a593Smuzhiyun }
82*4882a593Smuzhiyun #endif
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun #endif /* __LINUX_USB_EHCI_DBGP_H */
85