Merge branch 'genirq' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux...
[linux-2.6] / drivers / usb / gadget / s3c2410_udc.h
1 /*
2  * linux/drivers/usb/gadget/s3c2410_udc.h
3  * Samsung on-chip full speed USB device controllers
4  *
5  * Copyright (C) 2004-2007 Herbert Pƶtzl - Arnaud Patard
6  *      Additional cleanups by Ben Dooks <ben-linux@fluff.org>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  *
22  */
23
24 #ifndef _S3C2410_UDC_H
25 #define _S3C2410_UDC_H
26
27 struct s3c2410_ep {
28         struct list_head                queue;
29         unsigned long                   last_io;        /* jiffies timestamp */
30         struct usb_gadget               *gadget;
31         struct s3c2410_udc              *dev;
32         const struct usb_endpoint_descriptor *desc;
33         struct usb_ep                   ep;
34         u8                              num;
35
36         unsigned short                  fifo_size;
37         u8                              bEndpointAddress;
38         u8                              bmAttributes;
39
40         unsigned                        halted : 1;
41         unsigned                        already_seen : 1;
42         unsigned                        setup_stage : 1;
43 };
44
45
46 /* Warning : ep0 has a fifo of 16 bytes */
47 /* Don't try to set 32 or 64            */
48 /* also testusb 14 fails  wit 16 but is */
49 /* fine with 8                          */
50 #define EP0_FIFO_SIZE            8
51 #define EP_FIFO_SIZE            64
52 #define DEFAULT_POWER_STATE     0x00
53
54 #define S3C2440_EP_FIFO_SIZE    128
55
56 static const char ep0name [] = "ep0";
57
58 static const char *const ep_name[] = {
59         ep0name,                                /* everyone has ep0 */
60         /* s3c2410 four bidirectional bulk endpoints */
61         "ep1-bulk", "ep2-bulk", "ep3-bulk", "ep4-bulk",
62 };
63
64 #define S3C2410_ENDPOINTS       ARRAY_SIZE(ep_name)
65
66 struct s3c2410_request {
67         struct list_head                queue;          /* ep's requests */
68         struct usb_request              req;
69 };
70
71 enum ep0_state {
72         EP0_IDLE,
73         EP0_IN_DATA_PHASE,
74         EP0_OUT_DATA_PHASE,
75         EP0_END_XFER,
76         EP0_STALL,
77 };
78
79 static const char *ep0states[]= {
80         "EP0_IDLE",
81         "EP0_IN_DATA_PHASE",
82         "EP0_OUT_DATA_PHASE",
83         "EP0_END_XFER",
84         "EP0_STALL",
85 };
86
87 struct s3c2410_udc {
88         spinlock_t                      lock;
89
90         struct s3c2410_ep               ep[S3C2410_ENDPOINTS];
91         int                             address;
92         struct usb_gadget               gadget;
93         struct usb_gadget_driver        *driver;
94         struct s3c2410_request          fifo_req;
95         u8                              fifo_buf[EP_FIFO_SIZE];
96         u16                             devstatus;
97
98         u32                             port_status;
99         int                             ep0state;
100
101         unsigned                        got_irq : 1;
102
103         unsigned                        req_std : 1;
104         unsigned                        req_config : 1;
105         unsigned                        req_pending : 1;
106         u8                              vbus;
107         struct dentry                   *regs_info;
108 };
109
110 #endif