]>
Commit | Line | Data |
---|---|---|
26cc5129 LW |
1 | /* |
2 | * Copyright 2011, Marvell Semiconductor Inc. | |
3 | * Lei Wen <leiwen@marvell.com> | |
4 | * | |
1a459660 | 5 | * SPDX-License-Identifier: GPL-2.0+ |
26cc5129 LW |
6 | */ |
7 | ||
8 | ||
9 | #ifndef __MV_UDC_H__ | |
10 | #define __MV_UDC_H__ | |
11 | ||
12 | #include <asm/byteorder.h> | |
13 | #include <asm/errno.h> | |
14 | #include <linux/usb/ch9.h> | |
15 | #include <linux/usb/gadget.h> | |
16 | ||
17 | /* Endpoint 0 states */ | |
18 | #define EP0_IDLE 0 | |
19 | #define EP0_IN_DATA 1 | |
20 | #define EP0_OUT_DATA 2 | |
21 | #define EP0_XFER_COMPLETE 3 | |
22 | ||
23 | ||
24 | /* Endpoint parameters */ | |
25 | #define MAX_ENDPOINTS 4 | |
26 | #define EP_MAX_PACKET_SIZE 0x200 | |
27 | ||
28 | #define EP0_MAX_PACKET_SIZE 64 | |
29 | #define UDC_OUT_ENDPOINT 0x02 | |
30 | #define UDC_OUT_PACKET_SIZE EP_MAX_PACKET_SIZE | |
31 | #define UDC_IN_ENDPOINT 0x01 | |
32 | #define UDC_IN_PACKET_SIZE EP_MAX_PACKET_SIZE | |
33 | #define UDC_INT_ENDPOINT 0x05 | |
34 | #define UDC_INT_PACKET_SIZE EP_MAX_PACKET_SIZE | |
35 | #define UDC_BULK_PACKET_SIZE EP_MAX_PACKET_SIZE | |
36 | ||
37 | #define NUM_ENDPOINTS 6 | |
38 | #define REQ_COUNT 12 | |
39 | struct mv_ep { | |
40 | struct usb_ep ep; | |
41 | struct usb_request req; | |
42 | struct list_head queue; | |
43 | const struct usb_endpoint_descriptor *desc; | |
44 | }; | |
45 | ||
46 | struct mv_udc { | |
47 | u32 pad0[80]; | |
48 | #define MICRO_8FRAME 0x8 | |
49 | #define USBCMD_ITC(x) (((x > 0xff) ? 0xff : x) << 16) | |
50 | #define USBCMD_FS2 (1 << 15) | |
51 | #define USBCMD_RST (1 << 1) | |
52 | #define USBCMD_RUN (1) | |
53 | u32 usbcmd; /* 0x140 */ | |
54 | #define STS_SLI (1 << 8) | |
55 | #define STS_URI (1 << 6) | |
56 | #define STS_PCI (1 << 2) | |
57 | #define STS_UEI (1 << 1) | |
58 | #define STS_UI (1 << 0) | |
59 | u32 usbsts; /* 0x144 */ | |
60 | u32 pad1[3]; | |
61 | u32 devaddr; /* 0x154 */ | |
62 | u32 epinitaddr; /* 0x158 */ | |
63 | u32 pad2[10]; | |
64 | #define PTS_ENABLE 2 | |
65 | #define PTS(x) ((x & 0x3) << 30) | |
66 | #define PFSC (1 << 24) | |
67 | u32 portsc; /* 0x184 */ | |
68 | u32 pad3[8]; | |
69 | #define USBMODE_DEVICE 2 | |
70 | u32 usbmode; /* 0x1a8 */ | |
71 | u32 epstat; /* 0x1ac */ | |
72 | #define EPT_TX(x) (1 << ((x & 0xffff) + 16)) | |
73 | #define EPT_RX(x) (1 << (x & 0xffff)) | |
74 | u32 epprime; /* 0x1b0 */ | |
75 | u32 epflush; /* 0x1b4 */ | |
76 | u32 pad4; | |
77 | u32 epcomp; /* 0x1bc */ | |
78 | #define CTRL_TXE (1 << 23) | |
79 | #define CTRL_TXR (1 << 22) | |
80 | #define CTRL_RXE (1 << 7) | |
81 | #define CTRL_RXR (1 << 6) | |
82 | #define CTRL_TXT_BULK (2 << 18) | |
83 | #define CTRL_RXT_BULK (2 << 2) | |
84 | u32 epctrl[16]; /* 0x1c0 */ | |
85 | }; | |
86 | ||
87 | struct mv_drv { | |
88 | struct usb_gadget gadget; | |
89 | struct usb_gadget_driver *driver; | |
90 | struct mv_udc *udc; | |
91 | }; | |
92 | ||
93 | struct ept_queue_head { | |
94 | unsigned config; | |
95 | unsigned current; /* read-only */ | |
96 | ||
97 | unsigned next; | |
98 | unsigned info; | |
99 | unsigned page0; | |
100 | unsigned page1; | |
101 | unsigned page2; | |
102 | unsigned page3; | |
103 | unsigned page4; | |
104 | unsigned reserved_0; | |
105 | ||
106 | unsigned char setup_data[8]; | |
107 | ||
108 | unsigned reserved_1; | |
109 | unsigned reserved_2; | |
110 | unsigned reserved_3; | |
111 | unsigned reserved_4; | |
112 | }; | |
113 | ||
114 | #define CONFIG_MAX_PKT(n) ((n) << 16) | |
115 | #define CONFIG_ZLT (1 << 29) /* stop on zero-len xfer */ | |
116 | #define CONFIG_IOS (1 << 15) /* IRQ on setup */ | |
117 | ||
118 | struct ept_queue_item { | |
119 | unsigned next; | |
120 | unsigned info; | |
121 | unsigned page0; | |
122 | unsigned page1; | |
123 | unsigned page2; | |
124 | unsigned page3; | |
125 | unsigned page4; | |
126 | unsigned reserved; | |
127 | }; | |
128 | ||
129 | #define TERMINATE 1 | |
130 | #define INFO_BYTES(n) ((n) << 16) | |
131 | #define INFO_IOC (1 << 15) | |
132 | #define INFO_ACTIVE (1 << 7) | |
133 | #define INFO_HALTED (1 << 6) | |
134 | #define INFO_BUFFER_ERROR (1 << 5) | |
135 | #define INFO_TX_ERROR (1 << 3) | |
136 | ||
c7e3b2b5 | 137 | extern int usb_lowlevel_init(int index, void **controller); |
26cc5129 | 138 | #endif /* __MV_UDC_H__ */ |