~ubuntu-branches/debian/wheezy/linux-2.6/wheezy

« back to all changes in this revision

Viewing changes to drivers/usb/gadget/lh7a40x_udc.h

  • Committer: Bazaar Package Importer
  • Author(s): Ben Hutchings, Ben Hutchings, Aurelien Jarno
  • Date: 2011-06-07 12:14:05 UTC
  • mfrom: (43.1.9 sid)
  • Revision ID: james.westby@ubuntu.com-20110607121405-i3h1rd7nrnd2b73h
Tags: 2.6.39-2
[ Ben Hutchings ]
* [x86] Enable BACKLIGHT_APPLE, replacing BACKLIGHT_MBP_NVIDIA
  (Closes: #627492)
* cgroups: Disable memory resource controller by default. Allow it
  to be enabled using kernel parameter 'cgroup_enable=memory'.
* rt2800usb: Enable support for more USB devices including
  Linksys WUSB600N (Closes: #596626) (this change was accidentally
  omitted from 2.6.39-1)
* [x86] Remove Celeron from list of processors supporting PAE. Most
  'Celeron M' models do not.
* Update debconf template translations:
  - Swedish (Martin Bagge) (Closes: #628932)
  - French (David Prévot) (Closes: #628191)
* aufs: Update for 2.6.39 (Closes: #627837)
* Add stable 2.6.39.1, including:
  - ext4: dont set PageUptodate in ext4_end_bio()
  - pata_cmd64x: fix boot crash on parisc (Closes: #622997, #622745)
  - ext3: Fix fs corruption when make_indexed_dir() fails
  - netfilter: nf_ct_sip: validate Content-Length in TCP SIP messages
  - sctp: fix race between sctp_bind_addr_free() and
    sctp_bind_addr_conflict()
  - sctp: fix memory leak of the ASCONF queue when free asoc
  - md/bitmap: fix saving of events_cleared and other state
  - cdc_acm: Fix oops when Droids MuIn LCD is connected
  - cx88: Fix conversion from BKL to fine-grained locks (Closes: #619827)
  - keys: Set cred->user_ns in key_replace_session_keyring (CVE-2011-2184)
  - tmpfs: fix race between truncate and writepage
  - nfs41: Correct offset for LAYOUTCOMMIT
  - xen/mmu: fix a race window causing leave_mm BUG()
  - ext4: fix possible use-after-free in ext4_remove_li_request()
  For the complete list of changes, see:
   http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.39.1
* Bump ABI to 2
* netfilter: Enable IP_SET, IP_SET_BITMAP_IP, IP_SET_BITMAP_IPMAC,
  IP_SET_BITMAP_PORT, IP_SET_HASH_IP, IP_SET_HASH_IPPORT,
  IP_SET_HASH_IPPORTIP, IP_SET_HASH_IPPORTNET, IP_SET_HASH_NET,
  IP_SET_HASH_NETPORT, IP_SET_LIST_SET, NETFILTER_XT_SET as modules
  (Closes: #629401)

[ Aurelien Jarno ]
* [mipsel/loongson-2f] Disable_SCSI_LPFC to workaround GCC ICE.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * linux/drivers/usb/gadget/lh7a40x_udc.h
3
 
 * Sharp LH7A40x on-chip full speed USB device controllers
4
 
 *
5
 
 * Copyright (C) 2004 Mikko Lahteenmaki, Nordic ID
6
 
 * Copyright (C) 2004 Bo Henriksen, Nordic ID
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 __LH7A40X_H_
25
 
#define __LH7A40X_H_
26
 
 
27
 
#include <linux/module.h>
28
 
#include <linux/kernel.h>
29
 
#include <linux/ioport.h>
30
 
#include <linux/types.h>
31
 
#include <linux/errno.h>
32
 
#include <linux/delay.h>
33
 
#include <linux/sched.h>
34
 
#include <linux/slab.h>
35
 
#include <linux/init.h>
36
 
#include <linux/timer.h>
37
 
#include <linux/list.h>
38
 
#include <linux/interrupt.h>
39
 
#include <linux/proc_fs.h>
40
 
#include <linux/mm.h>
41
 
#include <linux/device.h>
42
 
#include <linux/dma-mapping.h>
43
 
 
44
 
#include <asm/byteorder.h>
45
 
#include <asm/dma.h>
46
 
#include <asm/io.h>
47
 
#include <asm/irq.h>
48
 
#include <asm/system.h>
49
 
#include <asm/unaligned.h>
50
 
#include <mach/hardware.h>
51
 
 
52
 
#include <linux/usb/ch9.h>
53
 
#include <linux/usb/gadget.h>
54
 
 
55
 
/*
56
 
 * Memory map
57
 
 */
58
 
 
59
 
#define USB_FA                                  0x80000200      // function address register
60
 
#define USB_PM                                  0x80000204      // power management register
61
 
 
62
 
#define USB_IN_INT                              0x80000208      // IN interrupt register bank (EP0-EP3)
63
 
#define USB_OUT_INT                             0x80000210      // OUT interrupt register bank (EP2)
64
 
#define USB_INT                                 0x80000218      // interrupt register bank
65
 
 
66
 
#define USB_IN_INT_EN                   0x8000021C      // IN interrupt enable register bank
67
 
#define USB_OUT_INT_EN                  0x80000224      // OUT interrupt enable register bank
68
 
#define USB_INT_EN                              0x8000022C      // USB interrupt enable register bank
69
 
 
70
 
#define USB_FRM_NUM1                    0x80000230      // Frame number1 register
71
 
#define USB_FRM_NUM2                    0x80000234      // Frame number2 register
72
 
#define USB_INDEX                               0x80000238      // index register
73
 
 
74
 
#define USB_IN_MAXP                             0x80000240      // IN MAXP register
75
 
#define USB_IN_CSR1                             0x80000244      // IN CSR1 register/EP0 CSR register
76
 
#define USB_EP0_CSR                             0x80000244      // IN CSR1 register/EP0 CSR register
77
 
#define USB_IN_CSR2                             0x80000248      // IN CSR2 register
78
 
#define USB_OUT_MAXP                    0x8000024C      // OUT MAXP register
79
 
 
80
 
#define USB_OUT_CSR1                    0x80000250      // OUT CSR1 register
81
 
#define USB_OUT_CSR2                    0x80000254      // OUT CSR2 register
82
 
#define USB_OUT_FIFO_WC1                0x80000258      // OUT FIFO write count1 register
83
 
#define USB_OUT_FIFO_WC2                0x8000025C      // OUT FIFO write count2 register
84
 
 
85
 
#define USB_RESET                               0x8000044C      // USB reset register
86
 
 
87
 
#define USB_EP0_FIFO                    0x80000280
88
 
#define USB_EP1_FIFO                    0x80000284
89
 
#define USB_EP2_FIFO                    0x80000288
90
 
#define USB_EP3_FIFO                    0x8000028c
91
 
 
92
 
/*
93
 
 * USB reset register
94
 
 */
95
 
#define USB_RESET_APB                   (1<<1)  //resets USB APB control side WRITE
96
 
#define USB_RESET_IO                    (1<<0)  //resets USB IO side WRITE
97
 
 
98
 
/*
99
 
 * USB function address register
100
 
 */
101
 
#define USB_FA_ADDR_UPDATE              (1<<7)
102
 
#define USB_FA_FUNCTION_ADDR    (0x7F)
103
 
 
104
 
/*
105
 
 * Power Management register
106
 
 */
107
 
#define PM_USB_DCP                              (1<<5)
108
 
#define PM_USB_ENABLE                   (1<<4)
109
 
#define PM_USB_RESET                    (1<<3)
110
 
#define PM_UC_RESUME                    (1<<2)
111
 
#define PM_SUSPEND_MODE                 (1<<1)
112
 
#define PM_ENABLE_SUSPEND               (1<<0)
113
 
 
114
 
/*
115
 
 * IN interrupt register
116
 
 */
117
 
#define USB_IN_INT_EP3                          (1<<3)
118
 
#define USB_IN_INT_EP1                          (1<<1)
119
 
#define USB_IN_INT_EP0                          (1<<0)
120
 
 
121
 
/*
122
 
 * OUT interrupt register
123
 
 */
124
 
#define USB_OUT_INT_EP2                         (1<<2)
125
 
 
126
 
/*
127
 
 * USB interrupt register
128
 
 */
129
 
#define USB_INT_RESET_INT                       (1<<2)
130
 
#define USB_INT_RESUME_INT                      (1<<1)
131
 
#define USB_INT_SUSPEND_INT                     (1<<0)
132
 
 
133
 
/*
134
 
 * USB interrupt enable register
135
 
 */
136
 
#define USB_INT_EN_USB_RESET_INTER              (1<<2)
137
 
#define USB_INT_EN_RESUME_INTER                 (1<<1)
138
 
#define USB_INT_EN_SUSPEND_INTER                (1<<0)
139
 
 
140
 
/*
141
 
 * INCSR1 register
142
 
 */
143
 
#define USB_IN_CSR1_CLR_DATA_TOGGLE             (1<<6)
144
 
#define USB_IN_CSR1_SENT_STALL                  (1<<5)
145
 
#define USB_IN_CSR1_SEND_STALL                  (1<<4)
146
 
#define USB_IN_CSR1_FIFO_FLUSH                  (1<<3)
147
 
#define USB_IN_CSR1_FIFO_NOT_EMPTY              (1<<1)
148
 
#define USB_IN_CSR1_IN_PKT_RDY                  (1<<0)
149
 
 
150
 
/*
151
 
 * INCSR2 register
152
 
 */
153
 
#define USB_IN_CSR2_AUTO_SET                    (1<<7)
154
 
#define USB_IN_CSR2_USB_DMA_EN                  (1<<4)
155
 
 
156
 
/*
157
 
 * OUT CSR1 register
158
 
 */
159
 
#define USB_OUT_CSR1_CLR_DATA_REG               (1<<7)
160
 
#define USB_OUT_CSR1_SENT_STALL                 (1<<6)
161
 
#define USB_OUT_CSR1_SEND_STALL                 (1<<5)
162
 
#define USB_OUT_CSR1_FIFO_FLUSH                 (1<<4)
163
 
#define USB_OUT_CSR1_FIFO_FULL                  (1<<1)
164
 
#define USB_OUT_CSR1_OUT_PKT_RDY                (1<<0)
165
 
 
166
 
/*
167
 
 * OUT CSR2 register
168
 
 */
169
 
#define USB_OUT_CSR2_AUTO_CLR                   (1<<7)
170
 
#define USB_OUT_CSR2_USB_DMA_EN                 (1<<4)
171
 
 
172
 
/*
173
 
 * EP0 CSR
174
 
 */
175
 
#define EP0_CLR_SETUP_END               (1<<7)  /* Clear "Setup Ends" Bit (w) */
176
 
#define EP0_CLR_OUT                             (1<<6)  /* Clear "Out packet ready" Bit (w) */
177
 
#define EP0_SEND_STALL                  (1<<5)  /* Send STALL Handshake (rw) */
178
 
#define EP0_SETUP_END                   (1<<4)  /* Setup Ends (r) */
179
 
 
180
 
#define EP0_DATA_END                    (1<<3)  /* Data end (rw) */
181
 
#define EP0_SENT_STALL                  (1<<2)  /* Sent Stall Handshake (r) */
182
 
#define EP0_IN_PKT_RDY                  (1<<1)  /* In packet ready (rw) */
183
 
#define EP0_OUT_PKT_RDY                 (1<<0)  /* Out packet ready (r) */
184
 
 
185
 
/* general CSR */
186
 
#define OUT_PKT_RDY             (1<<0)
187
 
#define IN_PKT_RDY              (1<<0)
188
 
 
189
 
/*
190
 
 * IN/OUT MAXP register
191
 
 */
192
 
#define USB_OUT_MAXP_MAXP                       (0xF)
193
 
#define USB_IN_MAXP_MAXP                        (0xF)
194
 
 
195
 
// Max packet size
196
 
//#define EP0_PACKETSIZE        0x10
197
 
#define EP0_PACKETSIZE          0x8
198
 
#define EP0_MAXPACKETSIZE       0x10
199
 
 
200
 
#define UDC_MAX_ENDPOINTS       4
201
 
 
202
 
#define WAIT_FOR_SETUP          0
203
 
#define DATA_STATE_XMIT         1
204
 
#define DATA_STATE_NEED_ZLP     2
205
 
#define WAIT_FOR_OUT_STATUS     3
206
 
#define DATA_STATE_RECV         4
207
 
 
208
 
/* ********************************************************************************************* */
209
 
/* IO
210
 
 */
211
 
 
212
 
typedef enum ep_type {
213
 
        ep_control, ep_bulk_in, ep_bulk_out, ep_interrupt
214
 
} ep_type_t;
215
 
 
216
 
struct lh7a40x_ep {
217
 
        struct usb_ep ep;
218
 
        struct lh7a40x_udc *dev;
219
 
 
220
 
        const struct usb_endpoint_descriptor *desc;
221
 
        struct list_head queue;
222
 
        unsigned long pio_irqs;
223
 
 
224
 
        u8 stopped;
225
 
        u8 bEndpointAddress;
226
 
        u8 bmAttributes;
227
 
 
228
 
        ep_type_t ep_type;
229
 
        u32 fifo;
230
 
        u32 csr1;
231
 
        u32 csr2;
232
 
};
233
 
 
234
 
struct lh7a40x_request {
235
 
        struct usb_request req;
236
 
        struct list_head queue;
237
 
};
238
 
 
239
 
struct lh7a40x_udc {
240
 
        struct usb_gadget gadget;
241
 
        struct usb_gadget_driver *driver;
242
 
        struct device *dev;
243
 
        spinlock_t lock;
244
 
 
245
 
        int ep0state;
246
 
        struct lh7a40x_ep ep[UDC_MAX_ENDPOINTS];
247
 
 
248
 
        unsigned char usb_address;
249
 
 
250
 
        unsigned req_pending:1, req_std:1, req_config:1;
251
 
};
252
 
 
253
 
extern struct lh7a40x_udc *the_controller;
254
 
 
255
 
#define ep_is_in(EP)            (((EP)->bEndpointAddress&USB_DIR_IN)==USB_DIR_IN)
256
 
#define ep_index(EP)            ((EP)->bEndpointAddress&0xF)
257
 
#define ep_maxpacket(EP)        ((EP)->ep.maxpacket)
258
 
 
259
 
#endif