ccc89fbd0abc9b74cdae9c3935d60dfb58225bb3
[linux-2.6.34-lpc32xx.git] / drivers / usb / gadget / lpc32xx_udc.h
1 /*
2  * drivers/usb/gadget/lpc32xx_udc.h
3  *
4  * Author: Kevin Wells <kevin.wells@nxp.com>
5  *
6  * Copyright (C) 2009 NXP Semiconductors
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 #ifndef LPC32XX_UDC_H
24 #define LPC32XX_UDC_H
25
26 /*
27  * Although the driver supports DMA, it is not yet working completely. It
28  * seems to work ok for serial ACM, but eventually bonks out for MSC and
29  * ether classes. Disabling this define will use FIFO mode for all EPs
30  */
31 #define UDC_ENABLE_DMA
32
33 /*
34  * controller driver data structures
35  */
36
37 /* 16 endpoints (not to be confused with 32 hardware endpoints) */
38 #define NUM_ENDPOINTS   16
39
40 /*
41  * IRQ indices make reading the code a little easier
42  */
43 #define IRQ_USB_LP      0
44 #define IRQ_USB_HP      1
45 #define IRQ_USB_DEVDMA  2
46 #define IRQ_USB_ATX     3
47
48 #define EP_OUT 0 /* RX (from host) */
49 #define EP_IN 1 /* TX (to host) */
50
51 /* Returns the interrupt mask for the selected hardware endpoint */
52 #define EP_MASK_SEL(ep, dir) (1 << (((ep) * 2) + dir))
53
54 #define EP_INT_TYPE 0
55 #define EP_ISO_TYPE 1
56 #define EP_BLK_TYPE 2
57 #define EP_CTL_TYPE 3
58
59 /* EP0 states */
60 #define WAIT_FOR_SETUP 0 /* Wait for setup packet */
61 #define DATA_IN        1 /* Expect dev->host transfer */
62 #define DATA_OUT       2 /* Expect host->dev transfer */
63 #define WAIT_OUT       3 /* ??? */
64
65 /* DD (DMA Descriptor) structure, requires word alignment, this is already defined
66    in the LPC32XX USB device header file, but this version si slightly modified to
67    tag some work data with each DMA descriptor. */
68 struct lpc32xx_usbd_dd_gad;
69 struct lpc32xx_usbd_dd_gad
70 {
71         struct lpc32xx_usbd_dd_gad *dd_next_phy;
72         u32 dd_setup;
73         u32 dd_buffer_addr;
74         u32 dd_status;
75         u32 *dd_iso_ps_mem_addr;
76         dma_addr_t this_dma;
77         u32 iso_status[5];
78         struct lpc32xx_usbd_dd_gad *dd_next_v;
79 };
80
81 /*
82  * Logical endpoint structure
83  */
84 struct lpc32xx_ep {
85         struct usb_ep           ep;
86         struct list_head        queue;
87         struct lpc32xx_udc      *udc;
88
89         u32                     hwep_num_base; /* Physical hardware EP */
90         u32                     hwep_num; /* Maps to hardware endpoint */
91         u32                     maxpacket;
92         u32                     doublebuff;
93         u32                     lep;
94
95         u32                     is_in:1;
96         u32                     uses_dma:1;
97         volatile u32            req_pending:1;
98         u32                     eptype;
99
100         /* Statuses for proc, NAK and stall aren't used */
101         u32                     totalints;
102         u32                     totalnaks;
103         u32                     totalstalls;
104
105         const struct usb_endpoint_descriptor *desc;
106 };
107
108 /*
109  * Common UDC structure
110  */
111 struct lpc32xx_udc {
112         struct usb_gadget       gadget;
113         struct usb_gadget_driver *driver;
114         struct platform_device  *pdev;
115         struct device           *dev;
116         struct proc_dir_entry   *pde;
117         spinlock_t              lock;
118
119         /* Board and device specific */
120         struct lpc32xx_usbd_cfg *board;
121         u32                     io_p_start;
122         u32                     io_p_size;
123         void __iomem            *udp_baseaddr;
124         int                     udp_irq[4];
125         struct clk              *usb_pll_clk;
126         struct clk              *usb_slv_clk;
127
128         /* DMA support */
129         u32                     *udca_v_base;
130         u32                     *udca_p_base;
131         struct dma_pool         *dd_cache;
132
133         /* Common EP and control data */
134         u32                     enabled_devints;
135         u32                     enabled_hwepints;
136         u32                     dev_status;
137         u32                     realized_eps;
138
139         /* VBUS thread support */
140         struct task_struct      *thread_task;
141         volatile int            thread_wakeup_needed;
142         u8                      vbus;
143         u8                      last_vbus;
144         volatile int            irq_asrtd;
145
146         /* USB device peripheral - various */
147         struct lpc32xx_ep       ep[NUM_ENDPOINTS];
148         u32                     enabled:1;
149         u32                     clocked:1;
150         u32                     suspended:1;
151         u32                     selfpowered:1;
152         int                     ep0state;
153         atomic_t                enabled_ep_cnt;
154         wait_queue_head_t       ep_disable_wait_queue;
155 };
156
157 /*
158  * Endpoint request
159  */
160 struct lpc32xx_request {
161         struct usb_request      req;
162         struct list_head        queue;
163         struct lpc32xx_usbd_dd_gad *dd_desc_ptr;
164         u32                     mapped:1;
165         u32                     send_zlp:1;
166 };
167
168 static inline struct lpc32xx_udc *to_udc(struct usb_gadget *g)
169 {
170         return container_of(g, struct lpc32xx_udc, gadget);
171 }
172
173 #define ep_dbg(epp, fmt, arg...) \
174         dev_dbg(epp->udc->dev, "%s:%s: " fmt, epp->ep.name, __func__, ## arg)
175 #define ep_err(epp, fmt, arg...) \
176         dev_err(epp->udc->dev, "%s:%s: " fmt, epp->ep.name, __func__, ## arg)
177 #define ep_info(epp, fmt, arg...) \
178         dev_info(epp->udc->dev, "%s:%s: " fmt, epp->ep.name, __func__, ## arg)
179 #define ep_warn(epp, fmt, arg...) \
180         dev_warn(epp->udc->dev, "%s:%s:" fmt, epp->ep.name, __func__, ## arg)
181
182 #endif
183