OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-2.0/] [packages/] [devs/] [usb/] [sa11x0/] [v2_0/] [src/] [usbs_sa11x0.c] - Blame information for rev 174

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 27 unneback
//==========================================================================
2
//
3
//      usbs_sa11x0.c
4
//
5
//      Device driver for the SA11x0 USB port.
6
//
7
//==========================================================================
8
//####ECOSGPLCOPYRIGHTBEGIN####
9
// -------------------------------------------
10
// This file is part of eCos, the Embedded Configurable Operating System.
11
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
12
//
13
// eCos is free software; you can redistribute it and/or modify it under
14
// the terms of the GNU General Public License as published by the Free
15
// Software Foundation; either version 2 or (at your option) any later version.
16
//
17
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
18
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
19
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
20
// for more details.
21
//
22
// You should have received a copy of the GNU General Public License along
23
// with eCos; if not, write to the Free Software Foundation, Inc.,
24
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
25
//
26
// As a special exception, if other files instantiate templates or use macros
27
// or inline functions from this file, or you compile this file and link it
28
// with other works to produce a work based on this file, this file does not
29
// by itself cause the resulting work to be covered by the GNU General Public
30
// License. However the source code for this file must still be made available
31
// in accordance with section (3) of the GNU General Public License.
32
//
33
// This exception does not invalidate any other reasons why a work based on
34
// this file might be covered by the GNU General Public License.
35
//
36
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
37
// at http://sources.redhat.com/ecos/ecos-license/
38
// -------------------------------------------
39
//####ECOSGPLCOPYRIGHTEND####
40
//==========================================================================
41
//#####DESCRIPTIONBEGIN####
42
//
43
// Author(s):    bartv
44
// Contributors: bartv
45
// Date:         2000-10-04
46
//
47
// This code implements support for the on-chip USB port on the SA11x0
48
// family of processors. The code has been developed on the SA1110 and
49
// may or may not work on other members of the SA11x0 family. There
50
// have problems with the USB support on certain revisions of the silicon,
51
// so the errata sheet appropriate to the specific processor being used
52
// should be consulted. There also appear to be problems which do not
53
// appear on any errata, which this code attempts to work around.
54
//
55
//####DESCRIPTIONEND####
56
//==========================================================================
57
 
58
#include <cyg/infra/cyg_type.h>
59
#include <cyg/infra/cyg_ass.h>
60
#include <cyg/infra/cyg_trac.h>
61
#include <cyg/infra/diag.h>
62
 
63
#include <pkgconf/hal_arm.h>
64
#include <pkgconf/devs_usb_sa11x0.h>
65
 
66
#include <cyg/hal/drv_api.h>
67
#include <cyg/hal/hal_arch.h>
68
#include <cyg/hal/hal_io.h>
69
#include <cyg/hal/hal_cache.h>
70
#include <cyg/hal/hal_sa11x0.h>
71
#include <cyg/error/codes.h>
72
 
73
#include <cyg/io/usb/usb.h>
74
#include <cyg/io/usb/usbs.h>
75
 
76
// Debugging support. By default this driver operates mostly at
77
// DSR level, with the ISR doing a minimal amount of processing.
78
// However is also possible to run most of the code at thread-level,
79
// This is subject to some restrictions because the USB standard
80
// imposes timing constraints, e.g. some control operations such
81
// as SET-ADDRESS have to complete within 50ms. However it is
82
// very useful for debugging, specifically it allows you to put
83
// printf()'s in various places.
84
//
85
// Right now these configuration options are not exported to the
86
// user because running at DSR level is likely to be good enough
87
// for everybody not actively debugging this code. The options
88
// could be exported if necessary.
89
//#define CYGPKG_DEVS_USB_SA11X0_THREAD
90
#undef CYGPKG_DEVS_USB_SA11X0_THREAD
91
#ifdef CYGPKG_DEVS_USB_SA11X0_THREAD
92
  // Default stack size should be CYGNUM_HAL_STACK_SIZE_TYPICAL
93
# define CYGNUM_DEVS_USB_SA11X0_THREAD_STACK_SIZE       4096
94
# define CYGNUM_DEVS_USB_SA11X0_THREAD_PRIORITY         7
95
# include <cyg/kernel/kapi.h>
96
#endif
97
 
98
#if 0
99
# define DBG(a) diag_printf a
100
#else
101
# define DBG(a)
102
#endif
103
 
104
#undef FAILURES
105
#ifdef FAILURES
106
static volatile int ep1_failure = 7;
107
#endif
108
 
109
#undef STATS
110
#ifdef STATS
111
int ep1_receives = 0;
112
int ep1_errors = 0;
113
int ep2_transmits = 0;
114
int ep2_errors = 0;
115
# define INCR_STAT(a) (a) += 1
116
# define SET_STAT(a, b) (a) = (b)
117
#else
118
# define INCR_STAT(a)
119
# define SET_STAT(a, b)
120
#endif
121
 
122
// ----------------------------------------------------------------------------
123
// Serial port 0 on the SA11x0 provides a USB slave connection (aka a
124
// USB device controller or UDC). The functionality is somewhat
125
// limited, there are just three endpoints.
126
//
127
// Endpoint 0 can only be used for control messages. It has an 8 byte
128
// fifo which cannot be connected to a DMA engine. Hence incoming
129
// control packets have to be limited to 8 bytes by the enumeration
130
// data. The endpoint has to be managed at a low-level, i.e. the
131
// incoming request has to be extracted from the fifo, processed, and
132
// any response put back into the fifo within the permitted USB
133
// response times.
134
//
135
// Endpoint 1 can only be used for host->slave bulk OUT transfers. It
136
// has a 20 byte receive fifo, and it can be hooked up to any of the
137
// six DMA engines. Since bulk transfers will typically involve 64
138
// byte packets, most applications will require the use of DMA.
139
//
140
// Endpoint 2 can only be used for slave-host bulk IN transfers. There
141
// is a 16 byte transmit fifo so small messages can be transferred in
142
// software. The fifo can also be hooked up to DMA, which is a more
143
// likely scenario.
144
//
145
// Start with definitions of the hardware. The use of a structure and
146
// a const base pointer should allow the compiler to do base/offset
147
// addressing and keep the hardware base address in a register. This
148
// is better than defining each hardware register via a separate
149
// address. Although the registers are only a byte wide, the peripheral
150
// bus only supports word accesses.
151
//
152
// The USBS_CONTROL etc. macros allow for an alternative way of
153
// accessing the hardware if a better approach is presented, without
154
// having to rewrite all the code. Macros that correspond to registers
155
// are actually addresses, making it easier in the code to distinguish
156
// them from bit values: the & and * operators will just cancel out.
157
 
158
typedef struct usbs_sa11x0_hardware {
159
    volatile int control;
160
    volatile int address;
161
    volatile int out_size;
162
    volatile int in_size;
163
    volatile int ep0_control;
164
    volatile int ep1_control;
165
    volatile int ep2_control;
166
    volatile int ep0_data;
167
    volatile int ep0_write_count;
168
             int dummy1;
169
    volatile int fifo;
170
             int dummy2;
171
    volatile int status;
172
} usbs_sa11x0_hardware;
173
 
174
static usbs_sa11x0_hardware* const usbs_sa11x0_base = (usbs_sa11x0_hardware* const) 0x80000000;
175
#define USBS_CONTROL    (&(usbs_sa11x0_base->control))
176
#define USBS_ADDRESS    (&(usbs_sa11x0_base->address))
177
#define USBS_OUT_SIZE   (&(usbs_sa11x0_base->out_size))
178
#define USBS_IN_SIZE    (&(usbs_sa11x0_base->in_size))
179
#define EP0_CONTROL     (&(usbs_sa11x0_base->ep0_control))
180
#define EP1_CONTROL     (&(usbs_sa11x0_base->ep1_control))
181
#define EP2_CONTROL     (&(usbs_sa11x0_base->ep2_control))
182
#define EP0_DATA        (&(usbs_sa11x0_base->ep0_data))
183
#define EP0_WRITE_COUNT (&(usbs_sa11x0_base->ep0_write_count))
184
#define EP1_DATA        (&(usbs_sa11x0_base->fifo))
185
#define EP2_DATA        (&(usbs_sa11x0_base->fifo))
186
#define USBS_STATUS     (&(usbs_sa11x0_base->status))
187
 
188
#define CONTROL_DISABLE                 (1 << 0)
189
#define CONTROL_ACTIVE                  (1 << 1)
190
// The meaning of bit 2 changed, see errata
191
#define CONTROL_RESUME_INTR             (1 << 2)
192
#define CONTROL_EP0_INTR                (1 << 3)
193
#define CONTROL_EP1_INTR                (1 << 4)
194
#define CONTROL_EP2_INTR                (1 << 5)
195
// The meaning of bit 6 also changed, see errata
196
#define CONTROL_SUSPEND_INTR            (1 << 6)
197
#define CONTROL_RESET_INTR              (1 << 7)
198
 
199
// Getting the control register settings right is a little bit tricky.
200
// Bit 0 is the disable bit so touching that is dangerous, and the
201
// other bits have inverted meanings i.e. 0 enables interrupts. The
202
// following macro encapsulates this.
203
#define CONTROL_ALL_INTR                0x00FC
204
#define CONTROL_INTR_ENABLE(bits)  ((~(bits)) & CONTROL_ALL_INTR)
205
#define CONTROL_INTR_CLEAR(bits)   ((bits) & CONTROL_ALL_INTR)
206
 
207
// All the endpoint interrupt numbers can be handled en masse,
208
// but some of the endpoints may be disabled.
209
#if defined(CYGPKG_DEVS_USB_SA11X0_EP1) && defined(CYGPKG_DEVS_USB_SA11X0_EP2)
210
# define CONTROL_EP_INTR_BITS      (CONTROL_EP0_INTR | CONTROL_EP1_INTR | CONTROL_EP2_INTR)
211
#elif defined(CYGPKG_DEVS_USB_SA11X0_EP1)
212
# define CONTROL_EP_INTR_BITS      (CONTROL_EP0_INTR | CONTROL_EP1_INTR)
213
#elif defined(CYGPKG_DEVS_USB_SA11X0_EP2)
214
# define CONTROL_EP_INTR_BITS      (CONTROL_EP0_INTR | CONTROL_EP2_INTR)
215
#else
216
# define CONTROL_EP_INTR_BITS      (CONTROL_EP0_INTR)
217
#endif
218
 
219
#define EP0_OUT_READY                   (1 << 0)
220
#define EP0_IN_READY                    (1 << 1)
221
#define EP0_SENT_STALL                  (1 << 2)
222
#define EP0_FORCE_STALL                 (1 << 3)
223
#define EP0_DATA_END                    (1 << 4)
224
#define EP0_SETUP_END                   (1 << 5)
225
#define EP0_SERVICED_OPR                (1 << 6)
226
#define EP0_SERVICED_SETUP_END          (1 << 7)
227
 
228
#define EP1_FIFO_SERVICE                (1 << 0)
229
#define EP1_PACKET_COMPLETE             (1 << 1)
230
#define EP1_PACKET_ERROR                (1 << 2)
231
#define EP1_SENT_STALL                  (1 << 3)
232
#define EP1_FORCE_STALL                 (1 << 4)
233
#define EP1_FIFO_NOT_EMPTY              (1 << 5)
234
 
235
#define EP2_FIFO_SERVICE                (1 << 0)
236
#define EP2_PACKET_COMPLETE             (1 << 1)
237
#define EP2_PACKET_ERROR                (1 << 2)
238
#define EP2_PACKET_UNDERRUN             (1 << 3)
239
#define EP2_SENT_STALL                  (1 << 4)
240
#define EP2_FORCE_STALL                 (1 << 5)
241
 
242
#define STATUS_EP0_INTR                 (1 << 0)
243
#define STATUS_EP1_INTR                 (1 << 1)
244
#define STATUS_EP2_INTR                 (1 << 2)
245
#define STATUS_SUSPEND_INTR             (1 << 3)
246
#define STATUS_RESUME_INTR              (1 << 4)
247
#define STATUS_RESET_INTR               (1 << 5)
248
 
249
#define EP0_FIFO_SIZE                     8
250
#define EP0_MTU                           8
251
 
252
#define EP1_FIFO_SIZE                   20
253
#ifdef CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL
254
# define EP1_MTU                        64
255
#else
256
# define EP1_MTU                        16
257
#endif
258
 
259
#define EP2_FIFO_SIZE                   16
260
#ifdef CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL
261
# define EP2_MTU                        64
262
#else
263
# define EP2_MTU                        16
264
#endif
265
 
266
#if defined(CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL) || defined(CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL)
267
typedef struct usbs_sa11x0_dma {
268
    volatile int                address;
269
    volatile int                control_set;
270
    volatile int                control_clear;
271
    volatile int                status;
272
    volatile int                buf_a_address;  // Absolute, not remapped
273
    volatile int                buf_a_size;
274
    volatile int                buf_b_address;  // Absolute, not remapped
275
    volatile int                buf_b_size;
276
} usbs_sa11x0_dma;
277
 
278
#define DMA_CONTROL_RUN                 (1 << 0)
279
#define DMA_CONTROL_INTR_ENABLE         (1 << 1)
280
#define DMA_STATUS_ERROR                (1 << 2)
281
#define DMA_STATUS_DONE_A               (1 << 3)
282
#define DMA_CONTROL_START_A             (1 << 4)
283
#define DMA_STATUS_DONE_B               (1 << 5)
284
#define DMA_CONTROL_START_B             (1 << 6)
285
#define DMA_STATUS_BUFFER_IN_USE        (1 << 7)
286
// All the bits that are useful to clear. BUFFER_IN_USE is read-only.
287
#define DMA_CONTROL_CLEAR_ALL           (DMA_CONTROL_RUN | DMA_CONTROL_INTR_ENABLE | DMA_STATUS_ERROR | \
288
                                         DMA_STATUS_DONE_A | DMA_CONTROL_START_A | DMA_STATUS_DONE_B | DMA_CONTROL_START_B)
289
 
290
// The DMA engines operate eight-bytes at a time. This affects issues
291
// such as alignment.
292
#define DMA_BURST_SIZE                  8
293
 
294
// The DMA engines bypass the cache and MMU, accessing physical
295
// memory directly. Newer HALS should provide appropriate macros.
296
#ifndef HAL_VIRT_TO_PHYS_ADDRESS
297
# error HAL macros for translating between virtual and physical memory are required.
298
#endif
299
 
300
// Make absolutely sure that the two endpoints use different
301
// DMA channels. Right now this check cannot be done easily
302
// at the CDL level.
303
# if defined(CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL) && defined(CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL)
304
#  if (CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL == CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL)
305
#   error Different DMA channels must be selected for the two endpoints.
306
#  endif
307
# endif
308
 
309
# ifdef CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL
310
static usbs_sa11x0_dma* const ep1_dma_base = (usbs_sa11x0_dma* const)(0xB0000000 | (0x20 * CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL));
311
#  define EP1_DMA_ADDRESS        (&(ep1_dma_base->address))
312
#  define EP1_DMA_CONTROL_SET    (&(ep1_dma_base->control_set))
313
#  define EP1_DMA_CONTROL_CLEAR  (&(ep1_dma_base->control_clear))
314
#  define EP1_DMA_STATUS         (&(ep1_dma_base->status))
315
#  define EP1_DMA_BUF_A_ADDRESS  (&(ep1_dma_base->buf_a_address))
316
#  define EP1_DMA_BUF_A_SIZE     (&(ep1_dma_base->buf_a_size))
317
#  define EP1_DMA_BUF_B_ADDRESS  (&(ep1_dma_base->buf_b_address))
318
#  define EP1_DMA_BUF_B_SIZE     (&(ep1_dma_base->buf_b_size))
319
 
320
// The correct value for the DMA address register is fixed for USB transfers
321
// See table 11.6 of the SA1110 Advanced Developer's Manual
322
//   Device datum width == 1 byte
323
//   Device burst size  == 8 bytes
324
//   Device transfer direction == read (device->memory)
325
//   Endianness is controlled by the ARM architectural HAL package
326
#  ifdef CYGHWR_HAL_ARM_BIGENDIAN
327
#   define EP1_DMA_ADDRESS_VALUE        (0x80000A00 | 0x10 | 0x0 | 0x4 | 0x2 | 0x1)
328
#  else
329
#   define EP1_DMA_ADDRESS_VALUE        (0x80000A00 | 0x10 | 0x0 | 0x4 | 0x0 | 0x1)
330
#  endif
331
# endif // EP1_DMA
332
 
333
# ifdef CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL
334
 
335
static usbs_sa11x0_dma* const ep2_dma_base = (usbs_sa11x0_dma* const)(0xB0000000 | (0x20 * CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL));
336
#  define EP2_DMA_ADDRESS        (&(ep2_dma_base->address))
337
#  define EP2_DMA_CONTROL_SET    (&(ep2_dma_base->control_set))
338
#  define EP2_DMA_CONTROL_CLEAR  (&(ep2_dma_base->control_clear))
339
#  define EP2_DMA_STATUS         (&(ep2_dma_base->status))
340
#  define EP2_DMA_BUF_A_ADDRESS  (&(ep2_dma_base->buf_a_address))
341
#  define EP2_DMA_BUF_A_SIZE     (&(ep2_dma_base->buf_a_size))
342
#  define EP2_DMA_BUF_B_ADDRESS  (&(ep2_dma_base->buf_b_address))
343
#  define EP2_DMA_BUF_B_SIZE     (&(ep2_dma_base->buf_b_size))
344
 
345
#  ifdef CYGHWR_HAL_ARM_BIGENDIAN
346
#   define EP2_DMA_ADDRESS_VALUE        (0x80000A00 | 0x00 | 0x0 | 0x4 | 0x2 | 0x0)
347
#  else
348
#   define EP2_DMA_ADDRESS_VALUE        (0x80000A00 | 0x00 | 0x0 | 0x4 | 0x0 | 0x0)
349
#  endif
350
# endif // EP2_DMA
351
 
352
#endif  // EP1_DMA || EP2_DMA
353
 
354
// ----------------------------------------------------------------------------
355
// Static data. There is a data structure for each endpoint. The
356
// implementation is essentially a private class that inherits from
357
// common classes for control and data endpoints, but device drivers
358
// are supposed to be written in C so some ugliness is required.
359
//
360
// Devtab entries are defined in usbs_sa11x0_data.cxx to make sure
361
// that the linker does not garbage-collect them.
362
 
363
// Support for the interrupt handling code.
364
static cyg_interrupt usbs_sa11x0_intr_data;
365
static cyg_handle_t  usbs_sa11x0_intr_handle;
366
static volatile int  isr_status_bits    = 0;
367
 
368
// Endpoint 0 is always present, this module would not get compiled
369
// otherwise.
370
static void usbs_sa11x0_ep0_start(usbs_control_endpoint*);
371
static void usbs_sa11x0_poll(usbs_control_endpoint*);
372
 
373
typedef enum ep0_state {
374
    EP0_STATE_IDLE      = 0,
375
    EP0_STATE_IN        = 1,
376
    EP0_STATE_OUT       = 2
377
} ep0_state;
378
 
379
typedef struct ep0_impl {
380
    usbs_control_endpoint   common;
381
    ep0_state               ep_state;
382
    int                     length;
383
    int                     transmitted;
384
} ep0_impl;
385
 
386
static ep0_impl ep0 = {
387
    common:
388
    {
389
        state:                  USBS_STATE_POWERED, // The hardware does not distinguish  between detached, attached and powered.
390
        enumeration_data:       (usbs_enumeration_data*) 0,
391
        start_fn:               &usbs_sa11x0_ep0_start,
392
        poll_fn:                &usbs_sa11x0_poll,
393
        interrupt_vector:       SA11X0_IRQ_USB_SERVICE_REQUEST,
394
        control_buffer:         { 0, 0, 0, 0, 0, 0, 0, 0 },
395
        state_change_fn:        (void (*)(usbs_control_endpoint*, void*, usbs_state_change, int)) 0,
396
        state_change_data:      (void*) 0,
397
        standard_control_fn:    (usbs_control_return (*)(usbs_control_endpoint*, void*)) 0,
398
        standard_control_data:  (void*) 0,
399
        class_control_fn:       (usbs_control_return (*)(usbs_control_endpoint*, void*)) 0,
400
        class_control_data:     (void*) 0,
401
        vendor_control_fn:      (usbs_control_return (*)(usbs_control_endpoint*, void*)) 0,
402
        vendor_control_data:    (void*) 0,
403
        reserved_control_fn:    (usbs_control_return (*)(usbs_control_endpoint*, void*)) 0,
404
        reserved_control_data:  (void*) 0,
405
        buffer:                 (unsigned char*) 0,
406
        buffer_size:            0,
407
        fill_buffer_fn:         (void (*)(usbs_control_endpoint*)) 0,
408
        fill_data:              (void*) 0,
409
        fill_index:             0,
410
        complete_fn:            (usbs_control_return (*)(usbs_control_endpoint*, int)) 0
411
    },
412
    ep_state:           EP0_STATE_IDLE,
413
    length:             0,
414
    transmitted:        0
415
};
416
 
417
extern usbs_control_endpoint usbs_sa11x0_ep0 __attribute__((alias ("ep0")));
418
 
419
// Endpoint 1 is optional. If the application only involves control
420
// messages or only slave->host transfers then the endpoint 1
421
// support can be disabled.
422
#ifdef CYGPKG_DEVS_USB_SA11X0_EP1
423
 
424
typedef struct ep1_impl {
425
    usbs_rx_endpoint    common;
426
    int                 fetched;
427
    cyg_bool            using_buf_a;
428
} ep1_impl;
429
 
430
static void ep1_start_rx(usbs_rx_endpoint*);
431
static void ep1_set_halted(usbs_rx_endpoint*, cyg_bool);
432
 
433
static ep1_impl ep1 = {
434
    common: {
435
        start_rx_fn:        &ep1_start_rx,
436
        set_halted_fn:      &ep1_set_halted,
437
        complete_fn:        (void (*)(void*, int)) 0,
438
        complete_data:      (void*) 0,
439
        buffer:             (unsigned char*) 0,
440
        buffer_size:        0,
441
        halted:             0,
442
    },
443
    fetched:            0,
444
    using_buf_a:        0
445
};
446
 
447
extern usbs_rx_endpoint usbs_sa11x0_ep1 __attribute__((alias ("ep1")));
448
#endif
449
 
450
// Endpoint 2 is optional. If the application only involves control
451
// messages or only host->slave transfers then the endpoint 2 support
452
// can be disabled.
453
#ifdef CYGPKG_DEVS_USB_SA11X0_EP2
454
 
455
typedef struct ep2_impl {
456
    usbs_tx_endpoint        common;
457
    int                     transmitted;
458
    int                     pkt_size;
459
} ep2_impl;
460
 
461
static void ep2_start_tx(usbs_tx_endpoint*);
462
static void ep2_set_halted(usbs_tx_endpoint*, cyg_bool);
463
 
464
static ep2_impl ep2 = {
465
    common: {
466
        start_tx_fn:        &ep2_start_tx,
467
        set_halted_fn:      &ep2_set_halted,
468
        complete_fn:        (void (*)(void*, int)) 0,
469
        complete_data:      (void*) 0,
470
        buffer:             (const unsigned char*) 0,
471
        buffer_size:        0,
472
        halted:             0,
473
    },
474
    transmitted:        0,
475
    pkt_size:           0
476
};
477
 
478
extern usbs_tx_endpoint usbs_sa11x0_ep2 __attribute__ ((alias ("ep2")));
479
 
480
#endif
481
 
482
// ----------------------------------------------------------------------------
483
// Hardware problem: experiments indicate that manipulating the USB
484
// controller registers does not always work as expected. The control
485
// fifo is especially badly affected, with e.g. writes just being lost
486
// completely. It is necessary to work around these problems using
487
// retry loops. MAX_RETRIES controls the total number of attempts to
488
// access a register. MAX_CHECKS controls the number of times a
489
// register is checked to determine whether or not the attempt has
490
// been succesful. These constants are used to access the data fifo,
491
// so MAX_RETRIES has to be > 20 bytes.
492
#define MAX_RETRIES     32
493
#define MAX_CHECKS       8
494
 
495
// Write one or more bits to a register. This should result in some
496
// bits ending up set and other bits ending up clear. Some register
497
// bits are write-1-to-clear or may have side effects.
498
static cyg_bool
499
usbs_sa11x0_poke(volatile int* addr, int value, int should_be_set, int should_be_clear)
500
{
501
    cyg_bool    result  = false;
502
    int         retries, checks;
503
 
504
    for (retries = 0; !result && (retries < MAX_RETRIES); retries++) {
505
        *addr = value;
506
        (void) *addr;   // The first read is always invalid.
507
        for (checks = 0; !result && (checks < MAX_CHECKS); checks++) {
508
            int current_value = *addr;
509
            if (should_be_set != (should_be_set & current_value)) {
510
                continue;
511
            }
512
            if ((0 != should_be_clear) && (0 != (should_be_clear & current_value))) {
513
                continue;
514
            }
515
            result = true;
516
        }
517
    }
518
    if (!result) {
519
        DBG(("usbs_sa11x0_poke failed: addr %x, value %x, should_be_set %x, should_be_clear %x, actual %x\n", \
520
             (int) addr, value, should_be_set, should_be_clear, *addr));
521
    }
522
    return result;
523
}
524
 
525
// Write a whole value to a register, rather than just manipulating
526
// individual bits.
527
static cyg_bool
528
usbs_sa11x0_poke_value(volatile int* addr, int value)
529
{
530
    cyg_bool    result  = false;
531
    int         retries, checks;
532
 
533
    for (retries = 0; !result && (retries < MAX_RETRIES); retries++) {
534
        *addr = value;
535
        (void) *addr;   // The first read is always invalid.
536
        for (checks = 0; !result && (checks < MAX_CHECKS); checks++) {
537
            if (value == *addr) {
538
                result = true;
539
            }
540
        }
541
    }
542
    if (!result) {
543
        DBG(("usbs_sa11x0_poke_value failed: addr %x, value %x, actual %x\n", (int) addr, value, *addr));
544
    }
545
    return result;
546
}
547
 
548
 
549
// ----------------------------------------------------------------------------
550
// Control transfers
551
//
552
// Endpoint 0 is rather more complicated than the others. This is
553
// partly due to the nature of the control protocol, for example it is
554
// bidirectional and transfer sizes are unpredictable.
555
//
556
// The USB standard imposes some timing constraints on endpoint 0, see
557
// section 9.2.6 of the spec. For example the set-address operation is
558
// supposed to take at most 50ms. In general the timings are reasonably
559
// generous so no special action is taken here. There could be problems
560
// when debugging, but that is pretty much inevitable.
561
//
562
// It is necessary to maintain a state for the control endpoint, the
563
// default state being idle. Control operations involve roughly the
564
// following sequence of events:
565
//
566
// 1) the host transmits a special setup token, indicating the start
567
//    of a control operation and possibly cancelling any existing control
568
//    operation that may be in progress. USB peripherals cannot NAK this
569
//    even if they are busy.
570
//
571
// 2) the setup operation is followed by an eight-byte packet from the host
572
//    that describes the specific control operation. This fits into the
573
//    SA11X0's eight-byte control fifo. There will be an endpoint 0
574
//    interrupt with the out-packet-ready bit set. If the setup token
575
//    was sent while a previous control operation was also in progress
576
//    then the setup-end bit will be set as well.
577
//
578
// 3) the eight-byte packet is described in section 9.3 of the USB spec.
579
//    The first byte holds three fields, with the top bit indicating the
580
//    direction of subsequent data transfer. There are also two bytes
581
//    specifying the size of the subsequent transfer. Obviously the
582
//    packet also contains information such as the request type.
583
//
584
//    If the specified size is zero then the endpoint will remain in
585
//    its idle state. Otherwise the endpoint will switch to either
586
//    IN or OUT state, depending on the direction of subsequent
587
//    transfers.
588
// 
589
// 4) some standard control operations can be handled by the code
590
//    here. Set-address involves poking the address register and
591
//    a change of state. Set-feature and clear-feature on the
592
//    data endpoints can be used in conjunction with endpoint-halt.
593
//    Get-status on the data endpoints tests the halt condition.
594
//    It is also possible for the hardware-specific code to
595
//    implement set-feature, clear-feature and get-status
596
//    for the device as a whole since the SA11x0 always has to
597
//    be self-powered and is incapable of initiating a remote
598
//    wakeup.
599
//
600
//    Other standard control operations will be handled by the
601
//    application-specific installed handler, if any, or by the
602
//    default handler usbs_handle_standard_control(). Class-specific
603
//    and vendor-specific functions require appropriate handlers to be
604
//    installed as well, If a particular request is not recognized
605
//    then a stall condition should be raised. This will not prevent
606
//    subsequent control operations, just the current one.
607
//
608
//    Data transfers on endpoint 0 involve at most eight bytes at
609
//    a time. More data will only be accepted if the out-packet-ready
610
//    bit has been cleared via the serviced-opr bit, with the
611
//    hardware nak'ing OUT requests. To send data back to the host
612
//    the FIFO should be filled and then the in-packet-ready bit
613
//    should be set.
614
//
615
// It looks like processing all control packets at DSR level should be
616
// sufficient. During the data phase the hardware will NAK IN and
617
// OUT requests if the fifo is still empty/full, so timing is not
618
// an issue. Timing after receipt of the initial control message
619
// may be more important, e.g. the 50ms upper limit on processing
620
// the set-address control message, but this should still be ok.
621
// This decision may have to be re-examined in the light of
622
// experience.
623
 
624
// Init may get called during system startup or following a reset.
625
// During startup no work is needed since the hardware will
626
// have been reset and everything should be fine. After a reset
627
// the hardware will also be ok but there may be state information
628
// in ep0 that needs to be reset.
629
static void
630
usbs_sa11x0_ep0_init(void)
631
{
632
    if ((EP0_STATE_IDLE != ep0.ep_state) &&
633
        ((usbs_control_return (*)(usbs_control_endpoint*, int)) 0 != ep0.common.complete_fn)) {
634
        (*ep0.common.complete_fn)(&ep0.common, -EPIPE);
635
    }
636
    ep0.common.state            = USBS_STATE_POWERED;
637
    memset(ep0.common.control_buffer, 0, 8);
638
    ep0.common.buffer           = (unsigned char*) 0;
639
    ep0.common.buffer_size      = 0;
640
    ep0.common.fill_buffer_fn   = (void (*)(usbs_control_endpoint*)) 0;
641
    ep0.common.fill_data        = (void*) 0;
642
    ep0.common.fill_index       = 0;
643
    ep0.common.complete_fn      = (usbs_control_return (*)(usbs_control_endpoint*, int)) 0;
644
    ep0.ep_state                = EP0_STATE_IDLE;
645
    ep0.length                  = 0;
646
    ep0.transmitted             = 0;
647
}
648
 
649
// The start function is called by higher-level code when things have
650
// been set up, i.e. the enumeration data is available, appropriate
651
// handlers have been installed for the different types of control
652
// messages, and communication with the host is allowed to start. The
653
// next event that should happen is a reset operation from the host,
654
// so all other interrupts should be blocked. However it is likely
655
// that the hardware will detect a suspend state before the reset
656
// arrives, and hence the reset will act as a resume as well as a
657
// reset.
658
static void
659
usbs_sa11x0_ep0_start(usbs_control_endpoint* endpoint)
660
{
661
    CYG_ASSERT( endpoint == &ep0.common, "USB startup involves the wrong endpoint");
662
 
663
    // Activate the hardware. Write a 0 to the enable/disable bit 0.
664
    // Bit 1 is read-only. The other bits are set to 1 to disable
665
    // the corresponding interrupt source.
666
    usbs_sa11x0_poke(USBS_CONTROL, CONTROL_ALL_INTR, CONTROL_ALL_INTR, 0);
667
 
668
    // If there is additional platform-specific initialization to
669
    // perform, do it now. This macro can come from the platform HAL.
670
#ifdef SA11X0_USB_PLATFORM_INIT
671
    SA11X0_USB_PLATFORM_INIT;
672
#endif
673
 
674
    // Clear any pending interrupts. There should not be any, but just
675
    // in case. Note: passing 0x00FF as the should_be_clear argument
676
    // is a race condition, an external event can happen at any time,
677
    // so we may loop unnecessarily and lose an interrupt. However
678
    // the initial reset should last for 10ms.
679
    usbs_sa11x0_poke(USBS_STATUS, 0x00FF, 0x00, 0x00FF);
680
 
681
    // The only interrupt really of interest right now is reset, but
682
    // it is likely to be preceded by a resume. 
683
    usbs_sa11x0_poke(USBS_CONTROL,
684
                     CONTROL_INTR_ENABLE(CONTROL_RESET_INTR | CONTROL_RESUME_INTR),
685
                     0,
686
                     CONTROL_INTR_CLEAR(CONTROL_RESET_INTR | CONTROL_RESUME_INTR));
687
}
688
 
689
 
690
// Filling the fifo with a reply to the host. This can be called
691
// immediately at the end of a control message, to prepare for
692
// the next IN token. It will also get called after each subsequent
693
// IN operation when the fifo has been emptied.
694
//
695
// Experiments have indicated serious problems with the control fifo:
696
// some writes to the fifo just get lost completely. The failure rate
697
// is sufficiently high that more often than not the host will be
698
// unable to read all the enumeration data. However, the write-count
699
// register appears to give a valid indication of the current fifo
700
// contents. This means the code can retry stuffing a particular byte
701
// into the fifo until the write-count goes up.
702
 
703
static void
704
usbs_sa11x0_ep0_fill_fifo(void)
705
{
706
    cyg_bool ok     = true;
707
    int filled      = 0;
708
    int max;
709
    int fifo_count  = *EP0_WRITE_COUNT;
710
    int bits_to_set = 0;
711
 
712
    // The host can interrupt the current control message at any time
713
    // with a new one. In practice this is unlikely, things could get
714
    // rather confused on the host side. However if a control message
715
    // has been received then the fifo should obviously not be filled.
716
    // A new control message is indicated by the SETUP_END bit.
717
    //
718
    // The hardware design means that there is a race condition: the
719
    // new control message can come in at any time, even in the middle
720
    // of filling the fifo. Checking the SETUP_END more often would
721
    // reduce the probability of things getting messed up, but not
722
    // eliminate it.
723
    //
724
    // There is a check for SETUP_END at the start of the DSR, so
725
    // the setting of this bit should have resulted in another ISR
726
    // and another DSR being scheduled. Hence there is no need for
727
    // special action here.
728
    if (0 != (*EP0_CONTROL & EP0_SETUP_END)) {
729
        DBG(("EP0_fill_fifo(), interrupted by SETUP_END\n"));
730
        return;
731
    }
732
 
733
    // There should never be any data in the fifo. Any such data could
734
    // be the remnant of a previous transfer to the host, but that
735
    // should all have gone out already. Alternatively it could be
736
    // incoming data, but that means a new control message.
737
    if (0 != fifo_count) {
738
        DBG(("EP0_fill_fifo(), fifo already contains %d bytes", fifo_count));
739
        return;
740
    }
741
 
742
    // The IN_READY bit should never be set on entry. It can only get
743
    // set by a previous call to fill_fifo(), and the data should
744
    // have gone out before we get back here.
745
    if (0 != (*EP0_CONTROL & EP0_IN_READY)) {
746
        DBG(("EP0 fill_fifo(), in-packet-ready bit already set, state %x\n", *EP0_CONTROL));
747
        return;
748
    }
749
 
750
    // Now put up to another eight bytes into the fifo.
751
    max = ((ep0.length - ep0.transmitted) > EP0_FIFO_SIZE) ? EP0_FIFO_SIZE : (ep0.length - ep0.transmitted);
752
    while (ok && (filled < max)) {
753
        if (0 != ep0.common.buffer_size) {
754
            int         datum;
755
            int         retries, checks;
756
            cyg_bool    written;
757
 
758
            datum       = *ep0.common.buffer++;
759
            ep0.common.buffer_size--;
760
            written     = false;
761
 
762
            for (retries = 0; ok && !written && (retries < MAX_RETRIES); retries++) {
763
                if (filled != *EP0_WRITE_COUNT) {
764
                    DBG(("EP0 fill_fifo, inconsistency, written %d but write count %d\n", filled, *EP0_WRITE_COUNT));
765
                    ok = false;
766
                }
767
                *EP0_DATA = datum;
768
                // The write-count may take a few cycles to settle down.
769
                for (checks = 0; !written && (checks < MAX_CHECKS); checks++) {
770
                    if (filled < *EP0_WRITE_COUNT) {
771
                        filled++;
772
                        written = true;
773
                        // DBG(("Transferred %d byte (%x) after %d checks, %d retries\n", filled - 1, datum, checks, retries));
774
                    }
775
                }
776
            }
777
        } else if ((void (*)(usbs_control_endpoint*))0 != ep0.common.fill_buffer_fn) {
778
            (*ep0.common.fill_buffer_fn)(&ep0.common);
779
        } else {
780
            break;
781
        }
782
    }
783
 
784
    // At this point either it has proved impossible to fill the fifo,
785
    // e.g. because of a new control message, or up to another eight
786
    // bytes have been sent. 
787
    if (!ok) {
788
        if (0 == (EP0_SETUP_END & *EP0_CONTROL)) {
789
            // There is something seriously wrong.
790
            DBG(("ep0_fill_fifo(), failed, only filled %d bytes, status %x\n", filled, *EP0_CONTROL));
791
            usbs_sa11x0_poke(EP0_CONTROL, EP0_FORCE_STALL, EP0_FORCE_STALL, 0);
792
        }
793
        return;
794
    }
795
 
796
    // The following conditions are possible:
797
    // 1) amount transferred == amount requested, transfer complete.
798
    // 2) amount transferred < amount requested, this fill involved
799
    //    <eight bytes, transfer complete by definition of the protocol.
800
    // 3) amount transferred < amount requested but exactly eight
801
    //    bytes were sent this time. It will be necessary to send
802
    //    another packet of zero bytes to complete the transfer.
803
    ep0.transmitted += filled;
804
    if ((ep0.transmitted == ep0.length) || (filled < EP0_FIFO_SIZE)) {
805
 
806
        ep0.ep_state    = EP0_STATE_IDLE;
807
        if ((usbs_control_return (*)(usbs_control_endpoint*, int))0 != ep0.common.complete_fn) {
808
            (void) (*ep0.common.complete_fn)(&ep0.common, 0);
809
        }
810
        ep0.common.buffer               = (unsigned char*) 0;
811
        ep0.common.buffer_size          = 0;
812
        ep0.common.fill_buffer_fn       = (void (*)(usbs_control_endpoint*)) 0;
813
 
814
        // This informs the hardware that the control message has been
815
        // handled.
816
        bits_to_set = EP0_DATA_END;
817
    }
818
 
819
    // This allows another IN operation to empty the fifo.
820
    bits_to_set |= EP0_IN_READY;
821
    usbs_sa11x0_poke(EP0_CONTROL, bits_to_set, bits_to_set, 0);
822
}
823
 
824
// Another utility function to empty the fifo. This involves similar
825
// hardware problems to writing, it is possible to read a byte without
826
// changing the fifo state so that next time the same byte would be
827
// read again. Again there is a possible race condition if another
828
// control message arrives while emptying the fifo.
829
static int
830
usbs_sa11x0_ep0_empty_fifo(unsigned char* buf)
831
{
832
    int         count   = *EP0_WRITE_COUNT & 0x00FF;
833
    int         emptied = 0;
834
    cyg_bool    ok      = true;
835
 
836
    CYG_ASSERT( (count >= 0) & (count <= 8), "EP0 write count must be in range");
837
 
838
    while (ok && (emptied < count)) {
839
        int      retries, checks;
840
        cyg_bool read   = false;
841
 
842
        for (retries = 0; !read && (retries < MAX_RETRIES); retries++) {
843
            if ((count - emptied) != *EP0_WRITE_COUNT) {
844
                DBG(("EP0_empty_fifo, inconsistency, read %d bytes of %d, but fifo count %d\n", emptied, count, *EP0_WRITE_COUNT));
845
                ok = false;
846
            } else {
847
                buf[emptied] = *EP0_DATA;
848
                for (checks = 0; !read && (checks < MAX_CHECKS); checks++) {
849
                    if ((count - emptied) > *EP0_WRITE_COUNT) {
850
                        //DBG(("Read %d byte (%x) after %d checks, %d retries\n", emptied, buf[emptied], checks, retries));
851
                        read = true;
852
                        emptied++;
853
                    }
854
                }
855
            }
856
        }
857
        if (ok && !read) {
858
            DBG(("EP0 empty fifo, failed to read byte from fifo\n"));
859
            ok = false;
860
        }
861
    }
862
 
863
    return emptied;
864
}
865
 
866
// This is where all the hard work happens. It is a very large routine
867
// for a DSR, but in practice nearly all of it is nested if's and very
868
// little code actually gets executed. Note that there may be
869
// invocations of callback functions and the driver has no control
870
// over how much time those will take, but those callbacks should be
871
// simple.
872
static void
873
usbs_sa11x0_ep0_dsr(void)
874
{
875
    int hw_state = *EP0_CONTROL;
876
 
877
    // Handle the stall bits.
878
    //
879
    // Force-stall should not be a problem. It is set by the code here
880
    // if the host needs to be told that the control message was
881
    // unacceptable and is cleared automatically by the hardware after
882
    // the stall is sent.
883
    // NOTE: it is not clear the hardware actually works in this
884
    // respect. The FORCE_STALL bit has been observed still set during
885
    // the next interrupt, and the host appears to receive spurious
886
    // data back in response to the next control packet.
887
    //
888
    // Sent-stall is set by the hardware following a protocol
889
    // violation, e.g. if there is an IN token when a new control
890
    // message is expected. There is nothing the software can do about
891
    // this. However if we are in the middle of an IN or OUT transfer
892
    // then those are not going to complete successfully.
893
    if (0 != (hw_state & EP0_SENT_STALL)) {
894
        if (EP0_STATE_IDLE != ep0.ep_state) {
895
            if ((usbs_control_return (*)(usbs_control_endpoint*, int))0 != ep0.common.complete_fn) {
896
                (*ep0.common.complete_fn)(&ep0.common, -EIO);
897
            }
898
            ep0.ep_state                = EP0_STATE_IDLE;
899
            ep0.common.buffer           = (unsigned char*) 0;
900
            ep0.common.buffer_size      = 0;
901
            ep0.common.fill_buffer_fn   = 0;
902
            ep0.common.complete_fn      = (usbs_control_return (*)(usbs_control_endpoint*, int)) 0;
903
        }
904
        usbs_sa11x0_poke(EP0_CONTROL, EP0_SENT_STALL, 0, EP0_SENT_STALL);
905
    }   // STALL condition
906
 
907
    // Next, check whether we have received a new control message
908
    // while still busy processing an old one.
909
    if (0 != (hw_state & EP0_SETUP_END)) {
910
        if (EP0_STATE_IDLE != ep0.ep_state) {
911
            if ((usbs_control_return (*)(usbs_control_endpoint*, int)) 0 != ep0.common.complete_fn) {
912
                (*ep0.common.complete_fn)(&ep0.common, -EIO);
913
            }
914
            ep0.ep_state                = EP0_STATE_IDLE;
915
            ep0.common.buffer           = (unsigned char*) 0;
916
            ep0.common.buffer_size      = 0;
917
            ep0.common.fill_buffer_fn   = 0;
918
            ep0.common.complete_fn      = (usbs_control_return (*)(usbs_control_endpoint*, int)) 0;
919
        }
920
        // We are now back in idle state so the control message will be
921
        // extracted and processed.
922
        usbs_sa11x0_poke(EP0_CONTROL, EP0_SERVICED_SETUP_END, 0, EP0_SETUP_END);
923
    }   // Interrupted control transaction
924
 
925
    // The endpoint can be in one of three states: IN, OUT, or IDLE.
926
    // For the first two it should mean that there is more data to be
927
    // transferred, which is pretty straightforward. IDLE means
928
    // that a new control message has arrived.
929
    if ((EP0_STATE_IN == ep0.ep_state) && (0 == (EP0_IN_READY & hw_state)))  {
930
 
931
        usbs_sa11x0_ep0_fill_fifo();
932
 
933
    } else if ((EP0_STATE_OUT == ep0.ep_state) && (0 != (EP0_OUT_READY & hw_state))) {
934
 
935
        // A host->device transfer. Higher level code must have
936
        // provided a suitable buffer.
937
        CYG_ASSERT( (unsigned char*)0 != ep0.common.buffer, "A receive buffer should have been provided" );
938
 
939
        ep0.transmitted += usbs_sa11x0_ep0_empty_fifo(ep0.common.buffer + ep0.transmitted);
940
 
941
        if (ep0.transmitted != ep0.length) {
942
            // The host is not allowed to send more data than it
943
            // indicated in the original control message, and all
944
            // messages until the last one should be full size.
945
            CYG_ASSERT( ep0.transmitted < ep0.length, "The host must not send more data than expected");
946
            CYG_ASSERT( 0 == (ep0.transmitted % EP0_FIFO_SIZE), "All OUT packets until the last one should be full-size");
947
 
948
            usbs_sa11x0_poke(EP0_CONTROL, EP0_SERVICED_OPR, 0, EP0_OUT_READY);
949
        } else {
950
            // The whole transfer is now complete. Invoke the
951
            // completion function, and based on its return value
952
            // either generate a stall or complete the message.
953
            usbs_control_return result;
954
 
955
            CYG_ASSERT( (usbs_control_return (*)(usbs_control_endpoint*, int))0 != ep0.common.complete_fn, \
956
                        "A completion function should be provided for OUT control messages");
957
 
958
            result = (*ep0.common.complete_fn)(&ep0.common, 0);
959
            ep0.common.buffer           = (unsigned char*) 0;
960
            ep0.common.buffer_size      = 0;
961
            ep0.common.complete_fn      = (usbs_control_return (*)(usbs_control_endpoint*, int)) 0;
962
 
963
            if (USBS_CONTROL_RETURN_HANDLED == result) {
964
                usbs_sa11x0_poke(EP0_CONTROL,
965
                                 EP0_SERVICED_OPR | EP0_DATA_END,
966
                                 EP0_DATA_END,
967
                                 EP0_OUT_READY);
968
            } else {
969
                usbs_sa11x0_poke(EP0_CONTROL,
970
                                 EP0_SERVICED_OPR | EP0_DATA_END | EP0_FORCE_STALL,
971
                                 EP0_FORCE_STALL,
972
                                 EP0_OUT_READY);
973
            }
974
            // Also remember to switch back to IDLE state 
975
            ep0.ep_state = EP0_STATE_IDLE;
976
        }
977
 
978
    } else if (0 != (EP0_OUT_READY & hw_state)) {
979
 
980
        int emptied = usbs_sa11x0_ep0_empty_fifo(ep0.common.control_buffer);
981
 
982
        if (8 != emptied) {
983
            // This indicates a serious problem somewhere. Respond by
984
            // stalling. Hopefully the host will take some action that
985
            // sorts out the mess.
986
            usbs_sa11x0_poke(EP0_CONTROL,
987
                             EP0_SERVICED_OPR | EP0_DATA_END | EP0_FORCE_STALL,
988
                             EP0_FORCE_STALL,
989
                             EP0_OUT_READY);
990
 
991
        } else {
992
            usbs_control_return result  = USBS_CONTROL_RETURN_UNKNOWN;
993
            usb_devreq*         req     = (usb_devreq*) ep0.common.control_buffer;
994
            int length, direction, protocol, recipient;
995
 
996
            // Now we need to do some decoding of the data. A non-zero
997
            // length field indicates that there will be a subsequent
998
            // IN or OUT phase. The direction is controlled by the
999
            // top bit of the first byte. The protocol is determined
1000
            // by other bits of the top byte.
1001
            length      = (req->length_hi << 8) | req->length_lo;
1002
            direction   = req->type & USB_DEVREQ_DIRECTION_MASK;
1003
            protocol    = req->type & USB_DEVREQ_TYPE_MASK;
1004
            recipient   = req->type & USB_DEVREQ_RECIPIENT_MASK;
1005
 
1006
#if 0
1007
            DBG(("ep0, new control request: type %x, code %x\n", req->type, req->request));
1008
            DBG(("     %s, length %d, value hi %x lo %x, index hi %x lo %x\n",
1009
                 (USB_DEVREQ_DIRECTION_OUT == direction) ? "out" : "in",
1010
                 length, req->value_hi, req->value_lo, req->index_hi, req->index_lo));
1011
#endif            
1012
            if (0 != length){
1013
                // Clear the fifo straightaway. There is no harm in
1014
                // doing this here. It may or may not do some good.
1015
                usbs_sa11x0_poke(EP0_CONTROL, EP0_SERVICED_OPR, 0, EP0_OUT_READY);
1016
            }
1017
 
1018
            if (USB_DEVREQ_TYPE_STANDARD == protocol) {
1019
 
1020
                // First see if the request can be handled entirely in
1021
                // this module.
1022
                if (USB_DEVREQ_SET_ADDRESS == req->request) {
1023
                    // The USB device address should be in value_lo.
1024
                    // No more data is expected. 
1025
                    int address = req->value_lo;
1026
                    if ((0 != length) || (address > 127)) {
1027
                        result = USBS_CONTROL_RETURN_STALL;
1028
                    } else {
1029
                        // poke_value() cannot be used here because
1030
                        // setting the address does not take effect
1031
                        // until the status phase.
1032
                        *USBS_ADDRESS = address;
1033
                        result = USBS_CONTROL_RETURN_HANDLED;
1034
                    }
1035
                } else if (USB_DEVREQ_GET_STATUS == req->request) {
1036
                    // GET_STATUS on the device as a whole is used to
1037
                    // check the remote-wakeup and self-powered bits.
1038
                    // GET_STATUS on an endpoint is used to determine
1039
                    // the halted condition.
1040
                    // GET_STATUS on anything else has to be left to
1041
                    // other code.
1042
                    if (USB_DEVREQ_RECIPIENT_DEVICE == recipient) {
1043
                        // The host should expect two bytes back.
1044
                        if ((2 == length) && (USB_DEVREQ_DIRECTION_IN == direction)) {
1045
                            ep0.common.control_buffer[0] = 0;   // Not self-powered, no remote wakeup
1046
                            ep0.common.control_buffer[1] = 0;
1047
                            ep0.common.buffer            = ep0.common.control_buffer;
1048
                            ep0.common.buffer_size       = 2;
1049
                            result                       = USBS_CONTROL_RETURN_HANDLED;
1050
                        } else {
1051
                            result = USBS_CONTROL_RETURN_STALL;
1052
                        }
1053
 
1054
                    } else if (USB_DEVREQ_RECIPIENT_ENDPOINT == recipient) {
1055
                        if ((2 == length) && (USB_DEVREQ_DIRECTION_IN == direction)) {
1056
                            int endpoint = req->index_lo;
1057
                            if (0 == endpoint) {
1058
                                // get-status on endpoint 0 is either undefined or always valid.
1059
                                // endpoint 0 is always up.
1060
                                ep0.common.control_buffer[0] = 0;
1061
                                result = USBS_CONTROL_RETURN_HANDLED;
1062
                            }
1063
#ifdef CYGPKG_DEVS_USB_SA11X0_EP1
1064
                            else if (((USB_DEVREQ_INDEX_DIRECTION_OUT | 1) == endpoint) &&
1065
                                       (USBS_STATE_CONFIGURED == (ep0.common.state & USBS_STATE_MASK))) {
1066
 
1067
                                ep0.common.control_buffer[0] = ep1.common.halted;
1068
                                result = USBS_CONTROL_RETURN_HANDLED;
1069
 
1070
                            }
1071
#endif                            
1072
#ifdef CYGPKG_DEVS_USB_SA11X0_EP2
1073
                            else if (((USB_DEVREQ_INDEX_DIRECTION_IN | 2) == endpoint) &&
1074
                                       (USBS_STATE_CONFIGURED == (ep0.common.state & USBS_STATE_MASK))) {
1075
 
1076
                                ep0.common.control_buffer[0] = ep2.common.halted;
1077
                                result = USBS_CONTROL_RETURN_HANDLED;
1078
 
1079
                            }
1080
#endif                            
1081
                            else {
1082
                                // An invalid endpoint has been specified or the
1083
                                // endpoint can only be examined in configured state.
1084
                                result = USBS_CONTROL_RETURN_STALL;
1085
                            }
1086
                            if (USBS_CONTROL_RETURN_HANDLED == result) {
1087
                                ep0.common.control_buffer[1] = 0;
1088
                                ep0.common.buffer            = ep0.common.control_buffer;
1089
                                ep0.common.buffer_size       = 2;
1090
                            }
1091
                        } else {
1092
                            result = USBS_CONTROL_RETURN_STALL;
1093
                        }
1094
                    } // Endpoint or device get-status
1095
 
1096
                } else if (USB_DEVREQ_CLEAR_FEATURE == req->request) {
1097
 
1098
                    // CLEAR_FEATURE operates in much the same way as
1099
                    // GET_STATUS
1100
                    if (USB_DEVREQ_RECIPIENT_DEVICE == recipient) {
1101
 
1102
                        // No data should be transferred, and only remote-wakeup can be cleared.
1103
                        if ((0 != length) || (USB_DEVREQ_FEATURE_DEVICE_REMOTE_WAKEUP != req->value_lo)) {
1104
                            result = USBS_CONTROL_RETURN_STALL;
1105
                        } else {
1106
                            // Clearing remote-wakeup is a no-op.
1107
                            result = USBS_CONTROL_RETURN_HANDLED;
1108
                        }
1109
 
1110
                    } else if (USB_DEVREQ_RECIPIENT_ENDPOINT == recipient) {
1111
                        // The only feature that can be cleared is endpoint-halt, no data should be transferred.
1112
                        if ((0 != length) || (USB_DEVREQ_FEATURE_ENDPOINT_HALT != req->value_lo)) {
1113
                            result = USBS_CONTROL_RETURN_STALL;
1114
                        } else {
1115
                            int endpoint = req->index_lo;
1116
                            if (0 == endpoint) {
1117
                                // Clearing halt on endpoint 0 is always a no-op since that endpoint cannot be halted
1118
                            }
1119
#ifdef CYGPKG_DEVS_USB_SA11X0_EP1
1120
                            else if (((USB_DEVREQ_INDEX_DIRECTION_OUT | 1) == endpoint) &&
1121
                                       (USBS_STATE_CONFIGURED == (ep0.common.state & USBS_STATE_MASK))) {
1122
                                ep1_set_halted(&ep1.common, false);
1123
                                result = USBS_CONTROL_RETURN_HANDLED;
1124
 
1125
                            }
1126
#endif
1127
#ifdef CYGPKG_DEVS_USB_SA11X0_EP2
1128
                            else if (((USB_DEVREQ_INDEX_DIRECTION_IN | 2) == endpoint) &&
1129
                                       (USBS_STATE_CONFIGURED == (ep0.common.state & USBS_STATE_MASK))) {
1130
                                ep2_set_halted(&ep2.common, false);
1131
                                result = USBS_CONTROL_RETURN_HANDLED;
1132
 
1133
                            }
1134
#endif
1135
                            else {
1136
                                // Invalid endpoint or not in configured state.
1137
                                result = USBS_CONTROL_RETURN_STALL;
1138
                            }
1139
                        }
1140
                    }   // Endpoing or device clear-feature
1141
 
1142
                } else if (USB_DEVREQ_SET_FEATURE == req->request) {
1143
 
1144
                    // SET_FEATURE also operates in much the same way as
1145
                    // GET_STATUS
1146
                    if (USB_DEVREQ_RECIPIENT_DEVICE == recipient) {
1147
 
1148
                        // The only valid feature that can be set is remote-wakeup,
1149
                        // which is not supported by the hardware.
1150
                        result = USBS_CONTROL_RETURN_STALL;
1151
 
1152
                    } else if (USB_DEVREQ_RECIPIENT_ENDPOINT == recipient) {
1153
 
1154
                        // Only the halt condition can be set, and no data should be transferred.
1155
                        // Halting endpoint 0 should probably be disallowed although the
1156
                        // standard does not explicitly say so.
1157
                        if ((0 != length) ||
1158
                            (USB_DEVREQ_FEATURE_ENDPOINT_HALT != req->value_lo) ||
1159
                            (USBS_STATE_CONFIGURED != (ep0.common.state & USBS_STATE_MASK))) {
1160
 
1161
                            result = USBS_CONTROL_RETURN_STALL;
1162
 
1163
                        } else {
1164
                            int endpoint = req->index_lo;
1165
                            if (0) {
1166
                            }
1167
#ifdef CYGPKG_DEVS_USB_SA11X0_EP1
1168
                            else if ((USB_DEVREQ_INDEX_DIRECTION_OUT | 1) == endpoint) {
1169
                                ep1_set_halted(&ep1.common, true);
1170
                                result = USBS_CONTROL_RETURN_HANDLED;
1171
                            }
1172
#endif                            
1173
#ifdef CYGPKG_DEVS_USB_SA11X0_EP2
1174
                            else if ((USB_DEVREQ_INDEX_DIRECTION_IN | 2) == endpoint) {
1175
                                ep2_set_halted(&ep2.common, true);
1176
                                result = USBS_CONTROL_RETURN_HANDLED;
1177
                            }
1178
#endif                            
1179
                            else {
1180
                                result = USBS_CONTROL_RETURN_STALL;
1181
                            }
1182
                        }
1183
                    } // Endpoint or device set-feature
1184
                }
1185
 
1186
                // If the result has not been handled yet, pass it to
1187
                // the installed callback function (if any).
1188
                if (USBS_CONTROL_RETURN_UNKNOWN == result) {
1189
                    if ((usbs_control_return (*)(usbs_control_endpoint*, void*))0 != ep0.common.standard_control_fn) {
1190
                        result = (*ep0.common.standard_control_fn)(&ep0.common, ep0.common.standard_control_data);
1191
                    }
1192
                }
1193
 
1194
#if 1                
1195
                if ((USBS_CONTROL_RETURN_UNKNOWN == result) &&
1196
                    (USB_DEVREQ_SET_INTERFACE == req->request)) {
1197
 
1198
                    // This code should not be necessary. For
1199
                    // non-trivial applications which involve
1200
                    // alternate interfaces and the like, this request
1201
                    // should be handled by the application itself.
1202
                    // For other applications, the default handler
1203
                    // will ignore this request so we end up falling
1204
                    // through without actually handling the request
1205
                    // and hence returning a stall condition. That
1206
                    // is legitimate behaviour according to the standard.
1207
                    //
1208
                    // However, there are appear to be problems with
1209
                    // the SA1110 USB hardware when it comes to stall
1210
                    // conditions: they appear to affect some
1211
                    // subsequent messages from target to host as
1212
                    // well. Hence rather than returning a stall
1213
                    // condition this code instead generates a dummy
1214
                    // reply, which is also valid according to the
1215
                    // standard. This avoids complications with certain
1216
                    // USB compliance testers.
1217
                    if ((0 != length) ||
1218
                        (0 != req->value_hi) || (0 != req->index_hi) ||
1219
                        (USBS_STATE_CONFIGURED != (ep0.common.state & USBS_STATE_MASK))) {
1220
 
1221
                        result = USBS_CONTROL_RETURN_STALL;
1222
                    } else {
1223
                        int interface_id;
1224
                        int alternate;
1225
 
1226
                        CYG_ASSERT( (1 == ep0.common.enumeration_data->device.number_configurations) && \
1227
                                    (1 == ep0.common.enumeration_data->total_number_interfaces),       \
1228
                                    "Higher level code should have handled this request");
1229
 
1230
                        interface_id = req->index_lo;
1231
                        alternate    = req->value_lo;
1232
                        if ((interface_id != ep0.common.enumeration_data->interfaces[0].interface_id) ||
1233
                            (alternate  != ep0.common.enumeration_data->interfaces[0].alternate_setting)) {
1234
 
1235
                            result = USBS_CONTROL_RETURN_STALL;
1236
                        } else {
1237
                            result = USBS_CONTROL_RETURN_HANDLED;
1238
                        }
1239
 
1240
                    }
1241
                }
1242
#endif
1243
 
1244
                // If the result has still not been handled, leave it to
1245
                // the default implementation in the USB slave common package
1246
                if (USBS_CONTROL_RETURN_UNKNOWN == result) {
1247
                    result = usbs_handle_standard_control(&ep0.common);
1248
                }
1249
 
1250
            } else {
1251
                // The other three types of control message can be
1252
                // handled by similar code.
1253
                usbs_control_return (*callback_fn)(usbs_control_endpoint*, void*);
1254
                void* callback_arg;
1255
                //DBG(("non-standard control request %x", req->request));
1256
 
1257
                if (USB_DEVREQ_TYPE_CLASS == protocol) {
1258
                    callback_fn  = ep0.common.class_control_fn;
1259
                    callback_arg = ep0.common.class_control_data;
1260
                } else if (USB_DEVREQ_TYPE_VENDOR == protocol) {
1261
                    callback_fn  = ep0.common.vendor_control_fn;
1262
                    callback_arg = ep0.common.vendor_control_data;
1263
                } else {
1264
                    callback_fn  = ep0.common.reserved_control_fn;
1265
                    callback_arg = ep0.common.reserved_control_data;
1266
                }
1267
 
1268
                if ((usbs_control_return (*)(usbs_control_endpoint*, void*)) 0 == callback_fn) {
1269
                    result = USBS_CONTROL_RETURN_STALL;
1270
                } else {
1271
                    result = (*callback_fn)(&ep0.common, callback_arg);
1272
                }
1273
            }
1274
            //DBG(("Control request done, %d\n", result));
1275
 
1276
            if (USBS_CONTROL_RETURN_HANDLED != result) {
1277
                // This control request cannot be handled. Generate a stall.
1278
                usbs_sa11x0_poke(EP0_CONTROL,
1279
                                 EP0_FORCE_STALL | EP0_SERVICED_OPR | EP0_DATA_END,
1280
                                 EP0_FORCE_STALL,
1281
                                 EP0_OUT_READY);
1282
            } else {
1283
                // The control request has been handled. Is there any more
1284
                // data to be transferred?
1285
                if (0 == length) {
1286
                    usbs_sa11x0_poke(EP0_CONTROL,
1287
                                     EP0_SERVICED_OPR | EP0_DATA_END,
1288
                                     EP0_DATA_END,
1289
                                     EP0_OUT_READY);
1290
                } else {
1291
                    // The endpoint should now go into IN or OUT mode while the
1292
                    // remaining data is transferred.
1293
                    ep0.transmitted     = 0;
1294
                    ep0.length          = length;
1295
                    if (USB_DEVREQ_DIRECTION_OUT == direction) {
1296
                        // Wait for the next packet from the host.
1297
                        ep0.ep_state = EP0_STATE_OUT;
1298
                        CYG_ASSERT( (unsigned char*) 0 != ep0.common.buffer, "A receive buffer should have been provided");
1299
                        CYG_ASSERT( (usbs_control_return (*)(usbs_control_endpoint*, int))0 != ep0.common.complete_fn, \
1300
                                    "A completion function should be provided for OUT control messages");
1301
                    } else {
1302
                        ep0.ep_state = EP0_STATE_IN;
1303
                        usbs_sa11x0_ep0_fill_fifo();
1304
                    }
1305
                }
1306
            }   // Control message handled
1307
        }       // Received 8-byte control message
1308
    }           // Idle state, i.e. control message
1309
}               // ep0_dsr
1310
 
1311
#ifdef CYGPKG_DEVS_USB_SA11X0_EP1
1312
// ----------------------------------------------------------------------------
1313
// Endpoint 1 is used for OUT transfers, i.e. receive operations. Only
1314
// the bulk protocol is supported by the hardware. The semantics allow
1315
// for two different modes of operation: higher-level code can ask for
1316
// exactly one or more bulk packets of 64 bytes each, allowing buffer
1317
// requirements to be determined from a header; alternatively the
1318
// rx request can just supply a large buffer. Processing the first
1319
// packet of a larger transfer separately does not introduce any
1320
// special problems at the protocol level.
1321
//
1322
// It is not legal to receive just part of a packet and expect the
1323
// hardware or the driver to buffer the rest. Not all hardware will
1324
// be capable of doing this buffering, and there should not be
1325
// a driver design requirement to provide buffering space.
1326
//
1327
//
1328
// The hardware design for endpoint 1 is flawed in a number of
1329
// respects. The receive fifo is only 20 bytes, less than the packet
1330
// size, so it is essential to use DMA (there is a configuration
1331
// option to allow for communication protocols where packets will
1332
// never exceed 16 bytes, but that is not the normal case). The DMA
1333
// engine is triggered by a receive-fifo-service high-water mark
1334
// bit. DMA transfers operate in bursts of eight bytes. Therefore
1335
// it would make sense if the high-water mark was set when the
1336
// receive fifo contained eight bytes or more.
1337
//
1338
// Instead the high-water mark is set when the fifo contains twelve
1339
// bytes or more. Worse, there is no way of measuring how many bytes
1340
// there are left in the fifo without actually extracting those bytes.
1341
//
1342
// For a full-size 64-byte packet, the first 56 bytes will be
1343
// transferred by DMA and the remainder will remain in the fifo. For a
1344
// partial packet of between 56 and 63 bytes, the first 56 bytes will
1345
// be transferred by DMA and the remainder will remain in the fifo. There
1346
// is no way to distinguish between these scenarios without emptying
1347
// the fifo.
1348
//
1349
// The result is that there is never any point in attempting a DMA
1350
// transfer of more than 56 bytes, and for every endpoint 1 interrupt
1351
// it is necessary to read the remainder from the fifo. This adds
1352
// a lot of software overhead, and it is not clear that DMA is
1353
// particularly useful. It is still necessary because of the limited
1354
// fifo size.
1355
//
1356
//
1357
// Because DMA involves the use of physical rather than virtual
1358
// memory, there are also cache interaction problems. Specifically it
1359
// would be necessary to invalidate cache lines after a DMA transfer
1360
// has completed, but that only works sensibly if the buffer is
1361
// aligned to a cache-line boundary and is a multiple of the
1362
// cache-line size. Imposing such restrictions on higher-level code
1363
// is undesirable. Also the DMA engines have an apparently undocumented
1364
// restriction that the buffer must be eight-byte aligned.
1365
//
1366
// To work around all these problems, the receive code works in terms
1367
// of a small private buffer. After a packet has been received, data
1368
// will be copied from this private buffer to the destination. Obviously
1369
// this copy operation is overhead and, because the code is expected
1370
// to run at DSR level, However the copy operation is limited to at
1371
// most 64 bytes, which is not good but not disastrous either.
1372
//
1373
// For data transfers the entry points are:
1374
//
1375
// 1) ep1_start_rx_packet() - prepare to receive another packet from
1376
//    the host.
1377
// 2) ep1_clear_error() - an error condition has occurred (CRC,
1378
//    bit-stuffing, fifo overrun). It appears that the only way
1379
//    to clear this is to clear the receive-packet-complete bit,
1380
//    which unfortunately allows in another packet from the host
1381
//    before we are ready for it. Doing anything else while
1382
//    the error bit is set does not work, for example it is not
1383
//    possible to empty the fifo by hand.
1384
// 3) ep1_process_packet() - a whole packet has been received
1385
//    and now needs to be moved into application space.
1386
//
1387
// These three routines are called by the start_rx() routine and
1388
// by the DSR. There are different implementations for DMA and
1389
// non-DMA.
1390
//
1391
// There is another hardware problem: the receive-packet-complete bit
1392
// comes up with the wrong default value, allowing the host to start
1393
// transmitting before the target is ready to receive. Unfortunately
1394
// there is not much that can be done about this: the
1395
// receive-packet-complete bit cannot be set by software and the OUT
1396
// max register has a minimum size of eight bytes. Fortunately for
1397
// many protocols the target-side code has a chance to start a receive
1398
// before the host is allowed to send, so this problem is mostly
1399
// ignored for now.
1400
//
1401
// Another potential problem arises if the host sends more data than
1402
// is expected for a given transfer. It would be possible to address
1403
// this by manipulating the OUT max packet register and getting the
1404
// hardware to generate protocol violation stalls. This would also
1405
// eliminate the need to test for buffer overflows. For now it is
1406
// left to higher-level code to sort it all out.
1407
 
1408
#ifdef CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL
1409
 
1410
// DMA needs an area of physical memory. To avoid conflicts with
1411
// the cached shadow of this memory, this area needs to start at
1412
// a cache line boundary and there must be padding at the end
1413
// to the next cache line boundary, thus ensuring that the
1414
// processor will not accidentally overwrite the physical
1415
// memory because it is manipulating some other variable.
1416
//
1417
// NOTE: at the time of writing the toolchain has a problem with
1418
// the aligned attribute, so instead the start alignment has
1419
// to be handled in software.
1420
 
1421
# define EP1_DMA_MTU            56
1422
# define EP1_DMA_BUFSIZE        ((EP1_DMA_MTU + HAL_DCACHE_LINE_SIZE - 1) - \
1423
                                 ((EP1_DMA_MTU + HAL_DCACHE_LINE_SIZE - 1) % HAL_DCACHE_LINE_SIZE))
1424
# define EP1_DMA_ALLOCSIZE      (EP1_DMA_BUFSIZE + HAL_DCACHE_LINE_SIZE - 1)
1425
 
1426
static unsigned char    ep1_dma_data[EP1_DMA_ALLOCSIZE];
1427
 
1428
// This variable cannot be initialized statically, instead it is
1429
// set by ep1_init(). It corresponds to the physical address
1430
// for the buffer.
1431
static unsigned char*   ep1_dma_buf;
1432
 
1433
static void
1434
ep1_start_rx_packet(void)
1435
{
1436
    int dma_size = EP1_DMA_MTU;
1437
 
1438
    // This assertion does not always hold: clearing an error condition
1439
    // involves the packet-complete bit so another message may have
1440
    // started to arrive.
1441
    // CYG_ASSERT( 0 == (EP1_FIFO_NOT_EMPTY & *EP1_CONTROL), "The receive fifo should be empty");
1442
 
1443
    CYG_ASSERT( 0 == ((DMA_CONTROL_RUN | DMA_CONTROL_START_A) & *EP1_DMA_STATUS), "EP1 DMA should be inactive");
1444
 
1445
#ifdef FAILURES
1446
    ep1_failure = (ep1_failure + 1) % 32;
1447
    if (0 == ep1_failure) {
1448
        dma_size = 8;
1449
    }
1450
#endif
1451
 
1452
    // The full flexibility of the DMA engines is not required here,
1453
    // specifically the automatic chaining between buffers A and B.
1454
    // Instead always using buffer A is sufficient. To avoid the
1455
    // However the hardware still requires the software to alternate
1456
    // between A and B. To avoid switching between buffers during a
1457
    // transfer an excessive size field is used, EP1_MTU rather than
1458
    // EP1_DMA_MTU, and hence the DMA transfer will never complete.
1459
    //
1460
    // With some silicon revisions writing to the DMA registers does
1461
    // not always work either, so a retry is in order. Possibly
1462
    // some short delays immediately after the clear and before the
1463
    // set would be sufficient.
1464
    *EP1_DMA_CONTROL_CLEAR  = DMA_CONTROL_CLEAR_ALL;
1465
    if (0 == (DMA_STATUS_BUFFER_IN_USE & *EP1_DMA_STATUS)) {
1466
        ep1.using_buf_a = true;
1467
        usbs_sa11x0_poke_value(EP1_DMA_BUF_A_ADDRESS, (unsigned int) ep1_dma_buf);
1468
        usbs_sa11x0_poke_value(EP1_DMA_BUF_A_SIZE, dma_size);
1469
        *EP1_DMA_CONTROL_SET = DMA_CONTROL_RUN | DMA_CONTROL_START_A;
1470
    } else {
1471
        ep1.using_buf_a = false;
1472
        usbs_sa11x0_poke_value(EP1_DMA_BUF_B_ADDRESS, (unsigned int) ep1_dma_buf);
1473
        usbs_sa11x0_poke_value(EP1_DMA_BUF_B_SIZE, dma_size);
1474
        *EP1_DMA_CONTROL_SET = DMA_CONTROL_RUN | DMA_CONTROL_START_B;
1475
    }
1476
 
1477
    // This should not be necessary, but occasionally the equivalent
1478
    // operation during ep1_init() fails. Strictly speaking it should
1479
    // be calling poke_value(), but the added overheads for that are
1480
    // not worthwhile.
1481
    *USBS_OUT_SIZE      = EP1_MTU - 1;
1482
 
1483
    // Now allow the host to send the packet.
1484
    usbs_sa11x0_poke(EP1_CONTROL, EP1_PACKET_COMPLETE | EP1_SENT_STALL, 0,
1485
                     EP1_PACKET_COMPLETE | EP1_SENT_STALL | EP1_FORCE_STALL);
1486
}
1487
 
1488
// Clear an error condition following a CRC, bit stuffing or overrun
1489
// error. The only reliable way to do this is to halt DMA and clear
1490
// the packet-complete bit. Unfortunately this allows the host to send
1491
// another packet immediately, before start_rx_packet can be called,
1492
// introducing another race condition. The hardware does not appear
1493
// to offer any alternatives.
1494
static void
1495
ep1_clear_error(void)
1496
{
1497
    *EP1_DMA_CONTROL_CLEAR = DMA_CONTROL_CLEAR_ALL;
1498
    usbs_sa11x0_poke(EP1_CONTROL, EP1_PACKET_COMPLETE | EP1_SENT_STALL, 0,
1499
                     EP1_PACKET_COMPLETE | EP1_PACKET_ERROR | EP1_SENT_STALL | EP1_FORCE_STALL | EP1_FIFO_NOT_EMPTY);
1500
 
1501
    // Clearing the packet-complete bit may cause the host to send
1502
    // another packet, immediately causing another error, so this
1503
    // assertion does not hold.
1504
    // CYG_ASSERT( 0 == (*EP1_CONTROL & (EP1_PACKET_ERROR | EP1_FIFO_NOT_EMPTY)), "Receive error should have been cleared");
1505
}
1506
 
1507
// A packet has been received. Some of it may still be in the fifo
1508
// and must be extracted by hand. The data then has to copied to
1509
// a higher-level buffer.
1510
static int
1511
ep1_process_packet(void)
1512
{
1513
    int pkt_size;
1514
 
1515
    // First, work out how much data has been processed by the DMA
1516
    // engine. This is the amount originally poked into the size
1517
    // register minus its current value.
1518
    *EP1_DMA_CONTROL_CLEAR = DMA_CONTROL_CLEAR_ALL;
1519
    if (ep1.using_buf_a) {
1520
        pkt_size = EP1_DMA_MTU - *EP1_DMA_BUF_A_SIZE;
1521
    } else {
1522
        pkt_size = EP1_DMA_MTU - *EP1_DMA_BUF_B_SIZE;
1523
    }
1524
    CYG_ASSERT( 0 == (pkt_size % DMA_BURST_SIZE), "DMA transfers must be in multiples of the burst size");
1525
 
1526
    // Move these bytes from physical memory to the target buffer.
1527
    if ((pkt_size > 0) && ((ep1.fetched + pkt_size) < ep1.common.buffer_size)) {
1528
        memcpy(ep1.common.buffer + ep1.fetched, ep1_dma_buf, pkt_size);
1529
    }
1530
 
1531
    // Copy remaining bytes into the target buffer directly.
1532
    // The DMA buffer could be used instead, moving the memcpy()
1533
    // down and avoiding the need for a buffer overflow check
1534
    // inside the loop, but at the cost of accessing physical
1535
    // memory every time. That cost is too high.
1536
    while (1) {
1537
        int status = *EP1_CONTROL;
1538
        if ((EP1_PACKET_COMPLETE | EP1_PACKET_ERROR) == ((EP1_PACKET_COMPLETE | EP1_PACKET_ERROR) & status)) {
1539
            break;
1540
        } else if (0 == (EP1_FIFO_NOT_EMPTY & status)) {
1541
            break;
1542
        } else {
1543
            int datum = *EP1_DATA;
1544
            if (ep1.fetched < ep1.common.buffer_size) {
1545
                ep1.common.buffer[ep1.fetched + pkt_size] = datum;
1546
            }
1547
            pkt_size++;
1548
        }
1549
    }
1550
    ep1.fetched += pkt_size;
1551
    return pkt_size;
1552
}
1553
 
1554
#else
1555
 
1556
// Transfers not involving DMA. Obviously these are much simpler
1557
// but restricted to packets of 16 bytes.
1558
static void
1559
ep1_start_rx_packet(void)
1560
{
1561
    // Nothing to be done, just let the host send a packet and it will
1562
    // end up in the fifo.
1563
    usbs_sa11x0_poke(EP1_CONTROL, EP1_PACKET_COMPLETE | EP1_SENT_STALL, 0,
1564
                     EP1_PACKET_COMPLETE | EP1_SENT_STALL | EP1_FORCE_STALL);
1565
}
1566
 
1567
static void
1568
ep1_clear_error(void)
1569
{
1570
    usbs_sa11x0_poke(EP1_CONTROL, EP1_PACKET_COMPLETE | EP1_SENT_STALL, 0,
1571
                     EP1_PACKET_COMPLETE | EP1_SENT_STALL | EP1_FORCE_STALL);
1572
}
1573
 
1574
static int
1575
ep1_process_packet(void)
1576
{
1577
    int pkt_size = 0;
1578
    while (0 != (*EP1_CONTROL & EP1_FIFO_NOT_EMPTY)) {
1579
        int datum = *EP1_DATA;
1580
        pkt_size++;
1581
        if (ep1.fetched < ep1.common.buffer_size) {
1582
            ep1.common.buffer[ep1.fetched + pkt_size] = datum;
1583
        }
1584
    }
1585
    return pkt_size;
1586
}
1587
#endif
1588
 
1589
// Complete a transfer. This takes care of invoking the completion
1590
// callback and resetting the buffer.
1591
static void
1592
ep1_rx_complete(int result)
1593
{
1594
    void (*complete_fn)(void*, int)  = ep1.common.complete_fn;
1595
    void* complete_data = ep1.common.complete_data;
1596
 
1597
    ep1.common.buffer           = (unsigned char*) 0;
1598
    ep1.common.buffer_size      = 0;
1599
    ep1.common.complete_fn      = (void (*)(void*, int)) 0;
1600
    ep1.common.complete_data    = (void*) 0;
1601
 
1602
    if ((void (*)(void*, int))0 != complete_fn) {
1603
        (*complete_fn)(complete_data, result);
1604
    }
1605
}
1606
 
1607
// Start a transmission. This functionality is overloaded to cope with
1608
// waiting for stalls to complete.
1609
static void
1610
ep1_start_rx(usbs_rx_endpoint* endpoint)
1611
{
1612
    CYG_ASSERT( endpoint == &ep1.common, "USB data transfer involves the wrong endpoint");
1613
 
1614
    // Is this endpoint currently stalled? If so then a size of 0 can
1615
    // be used to block until the stall condition is clear, anything
1616
    // else should result in an immediate callback.
1617
    if (ep1.common.halted) {
1618
        if (0 != ep1.common.buffer_size) {
1619
            ep1_rx_complete(-EAGAIN);
1620
        }
1621
    } else if (0 == ep1.common.buffer_size) {
1622
        // A check to see if the endpoint is halted. It isn't.
1623
        ep1_rx_complete(0);
1624
    } else {
1625
        int status      = *EP1_CONTROL;
1626
 
1627
        CYG_ASSERT((void*) 0 != ep1.common.buffer, "USB receives should not override the interrupt vectors");
1628
 
1629
        // This indicates the start of a transfer.
1630
        ep1.fetched     = 0;
1631
 
1632
        // The sent-stall bit may get set by hardware because of
1633
        // a protocol violation. If so it must be cleared here.
1634
        if (0 != (status & EP1_SENT_STALL)) {
1635
            usbs_sa11x0_poke(EP1_CONTROL, EP1_SENT_STALL, 0, EP1_SENT_STALL | EP1_FORCE_STALL);
1636
            status = *EP1_CONTROL;
1637
        }
1638
 
1639
        // The bogus initial value for the receive-packet-complete
1640
        // bit means that we may start off with an error condition.
1641
        if ((EP1_PACKET_COMPLETE | EP1_PACKET_ERROR) == (status & (EP1_PACKET_COMPLETE | EP1_PACKET_ERROR))) {
1642
            ep1_clear_error();
1643
            ep1_start_rx_packet();
1644
        } else if (0 != (status & EP1_FIFO_NOT_EMPTY)) {
1645
            // No error but data in the fifo. This implies a small
1646
            // initial packet, all held in the fifo.
1647
#ifdef CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL
1648
            *EP1_DMA_BUF_A_SIZE = EP1_MTU;
1649
            ep1.using_buf_a     = true;
1650
#endif
1651
            (void) ep1_process_packet();
1652
            ep1_rx_complete(ep1.fetched);
1653
        } else {
1654
            // Start a new transfer.
1655
            ep1_start_rx_packet();
1656
        }
1657
    }
1658
}
1659
 
1660
static void
1661
ep1_set_halted(usbs_rx_endpoint* endpoint, cyg_bool new_value)
1662
{
1663
    CYG_ASSERT( endpoint == &ep1.common, "USB set-stall operation involves the wrong endpoint");
1664
 
1665
    if (ep1.common.halted == new_value) {
1666
        return;
1667
    }
1668
    if (new_value) {
1669
        // The endpoint should be stalled. There is a potential race
1670
        // condition here with a current transfer. Updating the
1671
        // stalled flag means that the dsr will do nothing.
1672
        ep1.common.halted = true;
1673
        HAL_REORDER_BARRIER();
1674
 
1675
        // Now perform the actual stall. If we are in the middle of a
1676
        // transfer then the stall bit may not get set for a while, so
1677
        // poke() is inappropriate.
1678
        *EP1_CONTROL = EP1_FORCE_STALL;
1679
    } else {
1680
        // The stall condition should be cleared. First take care of
1681
        // things at the hardware level so that a new transfer is
1682
        // allowed.
1683
        usbs_sa11x0_poke(EP1_CONTROL, EP1_SENT_STALL, 0, EP1_SENT_STALL | EP1_FORCE_STALL);
1684
 
1685
        // Now allow new transfers to begin.
1686
        ep1.common.halted = false;
1687
    }
1688
}
1689
 
1690
// The DSR is invoked following an interrupt. According to the docs an
1691
// endpoint 1 interrupt can only happen if the receive-packet-complete
1692
// bit is set.
1693
static void
1694
usbs_sa11x0_ep1_dsr(void)
1695
{
1696
    int status = *EP1_CONTROL;
1697
 
1698
    // This assertion does not always hold. During long runs
1699
    // spurious interrupts have been observed.
1700
    // CYG_ASSERT( 0 != (status & EP1_PACKET_COMPLETE), "ep1 dsr should only be invoked when there is data");
1701
    if (0 == (status & EP1_PACKET_COMPLETE)) {
1702
        return;
1703
    }
1704
 
1705
    if (ep1.common.halted) {
1706
        // Do nothing. What may have happened is that a transfer
1707
        // was in progress when the stall bit was set. The
1708
        // set_halted() call above will have taken care of things.
1709
        return;
1710
    }
1711
 
1712
    // The sent-stall bit should never get set, since we always
1713
    // accept full-size 64-byte packets. Just in case...
1714
    if (0 != (status & EP1_SENT_STALL)) {
1715
        DBG(("ep1_dsr(), sent-stall bit\n"));
1716
        usbs_sa11x0_poke(EP1_CONTROL, EP1_SENT_STALL, 0, EP1_SENT_STALL | EP1_FORCE_STALL);
1717
    }
1718
 
1719
    // Was there a receive error (CRC, bit-stuffing, fifo-overrun?).
1720
    // Whichever bits of the current packet have been received must be
1721
    // discarded, and the current packet must be retried.
1722
    if (0 != (status & EP1_PACKET_ERROR)) {
1723
        INCR_STAT(ep1_errors);
1724
        ep1_clear_error();
1725
        ep1_start_rx_packet();
1726
    } else {
1727
        // Another packet has been received. Process it, which may
1728
        // complete the transfer or it may leave more to be done.
1729
        //
1730
        // The hardware starts with the wrong default value for
1731
        // the receive-packet-complete bit, so a packet may arrive
1732
        // even though no rx operation has started yet. The
1733
        // packets must be ignored for now. start_rx_packet()
1734
        // will detect data in the fifo and do the right thing.
1735
        int pkt_size;
1736
 
1737
        if ((unsigned char*)0 != ep1.common.buffer) {
1738
 
1739
            pkt_size = ep1_process_packet();
1740
            INCR_STAT(ep1_receives);
1741
            if (0 != (EP1_PACKET_ERROR & *EP1_CONTROL)) {
1742
                CYG_ASSERT( 0, "an error has occurred inside ep1_process_packet()\n");
1743
 
1744
            } else if ((ep1.fetched != ep1.common.buffer_size) && (0 != pkt_size) && (0 == (ep1.fetched % EP1_MTU))) {
1745
                ep1_start_rx_packet();
1746
            } else if (ep1.fetched > ep1.common.buffer_size) {
1747
                // The host has sent too much data.
1748
                ep1_rx_complete(-EMSGSIZE);
1749
            } else {
1750
#if 0
1751
                int i;
1752
                diag_printf("------------------------------------------------------\n");
1753
                diag_printf("rx: buf %x, total size %d\n", ep1.common.buffer, ep1.fetched);
1754
                for (i = 0; (i < ep1.fetched) && (i < 128); i+= 8) {
1755
                    diag_printf("rx %x %x %x %x %x %x %x %x\n",
1756
                                ep1.common.buffer[i+0], ep1.common.buffer[i+1], ep1.common.buffer[i+2], ep1.common.buffer[i+3],
1757
                                ep1.common.buffer[i+4], ep1.common.buffer[i+5], ep1.common.buffer[i+6], ep1.common.buffer[i+7]);
1758
                }
1759
                diag_printf("------------------------------------------------------\n");
1760
#endif
1761
                ep1_rx_complete(ep1.fetched);
1762
            }
1763
        }
1764
    }
1765
}
1766
 
1767
// Initialization.
1768
//
1769
// This may get called during system start-up or following a reset
1770
// from the host.
1771
static void
1772
usbs_sa11x0_ep1_init(void)
1773
{
1774
#ifdef CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL
1775
    // What is the physical address that should be used for
1776
    // transfers?
1777
    unsigned int phys;
1778
    HAL_VIRT_TO_PHYS_ADDRESS( ep1_dma_data, phys);
1779
    phys += (HAL_DCACHE_LINE_SIZE - 1);
1780
    phys -= (phys % HAL_DCACHE_LINE_SIZE);
1781
    CYG_ASSERT( 0 == (phys % HAL_DCACHE_LINE_SIZE), "DMA buffer must be aligned to a cache-line boundary");
1782
    ep1_dma_buf = (unsigned char*)phys;
1783
 
1784
    // Clear the DMA channel and fix the DMA address register. The
1785
    // value is determined above. 
1786
    *EP1_DMA_CONTROL_CLEAR      = DMA_CONTROL_CLEAR_ALL;
1787
    *EP1_DMA_ADDRESS            = EP1_DMA_ADDRESS_VALUE;
1788
#endif
1789
 
1790
    // Always allow the host to send full-size packets. If there is a
1791
    // protocol problem and the host sends packets that are too large,
1792
    // it will have to be handled at a level above the device driver.
1793
    //
1794
    // With some silicon revisions reading back the register does not
1795
    // work, so poke_value() is not applicable. This may be an issue
1796
    // with reset timing.
1797
    *USBS_OUT_SIZE      = EP1_MTU - 1;
1798
 
1799
    // Endpoints should never be halted during a start-up.
1800
    ep1.common.halted           = false;
1801
 
1802
    // If there has been a reset and there was a receive in progress,
1803
    // abort it. This also takes care of sorting out the endpoint
1804
    // fields ready for the next rx.
1805
    ep1_rx_complete(-EPIPE);
1806
}
1807
 
1808
#endif  // CYGPKG_DEVS_USB_SA11X0_EP1
1809
 
1810
 
1811
#ifdef CYGPKG_DEVS_USB_SA11X0_EP2
1812
// ----------------------------------------------------------------------------
1813
// Endpoint 2 is used for IN transfers, i.e. transmitting data to the
1814
// host. The code is mostly similar to that for endpoint 1, although
1815
// a little bit simpler (e.g. there is no need to worry about
1816
// buffer overflow, that is the host's problem). 
1817
//
1818
// There is a flaw in the hardware design. If the transfer involves an
1819
// exact multiple of 64 bytes then according to the USB spec there
1820
// should be a terminating packet of 0 bytes. However the size of the
1821
// current outgoing packet is determined by the IN_SIZE register and
1822
// that only allows for packets between 1 and 256 bytes - even though
1823
// USB bulk transfers can only go up to 64 bytes. This can be worked
1824
// around at this level by transmitting an extra byte, at the risk of
1825
// upsetting host-side device drivers. Both higher-level and host-side
1826
// code need to be aware of this problem.
1827
//
1828
// Again there appear to be problems with the DMA engine. This time it
1829
// appears that the transmit-fifo-service bit does not always work
1830
// correctly. If you set up a DMA transfer for more than the packet
1831
// size than once the packet has gone out the fifo-service bit just
1832
// remains set, the DMA engine continues to fill the fifo, and the
1833
// data gets lost. Instead DMA can only happen one packet at a time.
1834
// The same issues regarding cache line alignment etc. arise, so
1835
// using a small buffer here is convenient.
1836
//
1837
// 1) process_packet moves a packet from the main transmit buffer
1838
//    into the dma buffer.
1839
// 2) start_tx_packet() starts a transfer to the host
1840
// 3) clear_error() copes with error conditions.
1841
 
1842
#ifdef CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL
1843
// See the equivalent EP1 DMA definitions.
1844
# define EP2_DMA_MTU   64
1845
# define EP2_DMA_BUFSIZE        ((EP2_DMA_MTU + HAL_DCACHE_LINE_SIZE - 1) - \
1846
                                 ((EP2_DMA_MTU + HAL_DCACHE_LINE_SIZE - 1) % HAL_DCACHE_LINE_SIZE))
1847
# define EP2_DMA_ALLOCSIZE      (EP2_DMA_BUFSIZE + HAL_DCACHE_LINE_SIZE - 1)
1848
 
1849
static unsigned char  ep2_dma_data[EP2_DMA_ALLOCSIZE];
1850
static unsigned char* ep2_dma_buf;
1851
 
1852
static void
1853
ep2_process_packet(void)
1854
{
1855
    ep2.pkt_size = ep2.common.buffer_size - ep2.transmitted;
1856
    if (ep2.pkt_size > EP2_MTU) {
1857
        ep2.pkt_size = EP2_MTU;
1858
    }
1859
    // Work around the hardware's inability to send a zero-byte packet.
1860
    if (0 == ep2.pkt_size) {
1861
        ep2.pkt_size = 1;
1862
        ep2_dma_buf[0] = 0;
1863
    } else {
1864
        memcpy(ep2_dma_buf, ep2.common.buffer + ep2.transmitted, ep2.pkt_size);
1865
    }
1866
}
1867
 
1868
static void
1869
ep2_tx_packet(void)
1870
{
1871
    int dma_size, dma_control_settings;
1872
 
1873
    // CYG_ASSERT( 0 != (*EP2_CONTROL & EP2_FIFO_SERVICE), "Fifo should be empty");
1874
 
1875
    // Halt any DMA that may still be going on (there should not
1876
    // be any). Then work out the desired DMA settings for the
1877
    // current packet. The DMA engine needs to transfer a multiple
1878
    // of the burst size. If the packet size is not a multiple of
1879
    // the burst size, this presents a minor problem. The chances
1880
    // of an interrupt handler running in time to put the
1881
    // remaining bytes into the fifo by hand are not good, so
1882
    // instead more data is DMA'd in then is absolutely necessary
1883
    // and the surplus bytes will be cleared out during the next
1884
    // tx_packet.
1885
    //
1886
    // A possible optimisation is to detect small packets of
1887
    // less than the fifo size and byte-stuff those, bypassing
1888
    // DMA. It is not clear that would give any performance benefits.
1889
    *EP2_DMA_CONTROL_CLEAR      = DMA_CONTROL_CLEAR_ALL;
1890
 
1891
    dma_size    = ep2.pkt_size + DMA_BURST_SIZE - 1;
1892
    dma_size   -= (dma_size % DMA_BURST_SIZE);
1893
 
1894
    CYG_ASSERT(dma_size > 0, "DMA calculations should result in a transfer of at least 8 bytes");
1895
 
1896
    // Now clear the fifo, after DMA has stopped.
1897
    usbs_sa11x0_poke(EP2_CONTROL, EP2_SENT_STALL, 0, EP2_SENT_STALL);
1898
 
1899
    // Should we be using buf_a or buf_b for this transfer?
1900
    // Getting this wrong means that the DMA engine just idles.
1901
    if (0 == (*EP2_DMA_STATUS & DMA_STATUS_BUFFER_IN_USE)) {
1902
        usbs_sa11x0_poke_value(EP2_DMA_BUF_A_ADDRESS, (int) ep2_dma_buf);
1903
        usbs_sa11x0_poke_value(EP2_DMA_BUF_A_SIZE, dma_size);
1904
        dma_control_settings    = DMA_CONTROL_RUN | DMA_CONTROL_START_A;
1905
    } else {
1906
        usbs_sa11x0_poke_value(EP2_DMA_BUF_B_ADDRESS, (int) ep2_dma_buf);
1907
        usbs_sa11x0_poke_value(EP2_DMA_BUF_B_SIZE, dma_size);
1908
        dma_control_settings    = DMA_CONTROL_RUN | DMA_CONTROL_START_B;
1909
    }
1910
 
1911
    // Poke the tx size register while the fifo is clearing.
1912
    // This operation must be reliable or the host will get
1913
    // confused by funny-sized packets.
1914
    usbs_sa11x0_poke_value(USBS_IN_SIZE, ep2.pkt_size - 1);
1915
 
1916
    // The USB hardware must be updated before the DMA engine
1917
    // starts filling the fifo. Otherwise ~48% of outgoing
1918
    // packets fail with a DMA underrun. When called from
1919
    // start_tx() there is a race condition: if the host
1920
    // request comes in before the DMA starts then an
1921
    // error interrupt will be raised, to be processed by
1922
    // the DSR, and then the DMA engine gets updated again.
1923
    // Locking the scheduler eliminates this race.
1924
    cyg_drv_dsr_lock();
1925
    usbs_sa11x0_poke(EP2_CONTROL, EP2_PACKET_COMPLETE, 0, EP2_PACKET_COMPLETE | EP2_PACKET_ERROR | EP2_PACKET_UNDERRUN);
1926
    *EP2_DMA_CONTROL_SET        = dma_control_settings;
1927
    cyg_drv_dsr_unlock();
1928
 
1929
    // CYG_ASSERT(0 == (*EP2_CONTROL & EP2_FIFO_SERVICE), "DMA engine should have filled up the fifo by now");
1930
}
1931
 
1932
// Clearing an error should be a no-op when DMA is involved.
1933
// In practice clearing the packet-complete bit appears to
1934
// have some desirable effects, at the risk of the host
1935
// getting bogus data. This should only happen when there
1936
// is a real transfer in progress: an error early on is
1937
// likely because the PACKET_COMPLETE bit has a bogus initial
1938
// value.
1939
static void
1940
ep2_clear_error(void)
1941
{
1942
    usbs_sa11x0_poke(EP2_CONTROL, EP2_PACKET_COMPLETE, 0, EP2_PACKET_COMPLETE | EP2_PACKET_ERROR | EP2_PACKET_UNDERRUN);
1943
}
1944
 
1945
#else   // EP2_DMA
1946
 
1947
// When not using DMA, process_packet() is responsible for filling the
1948
// fifo and keeping a shadow copy in a static buffer. clear_error()
1949
// refills the fifo using the shadow copy. tx_packet() starts the
1950
// actual transfer.
1951
static unsigned char ep2_tx_buf[EP2_MTU];
1952
 
1953
static void
1954
ep2_process_packet()
1955
{
1956
    int i;
1957
 
1958
    // Clear the fifo, just in case.
1959
    usbs_sa11x0_poke(EP2_CONTROL, EP2_SENT_STALL, 0, EP2_SENT_STALL);
1960
 
1961
    ep2.pkt_size = ep2.common.buffer_size - ep2.transmitted;
1962
    if (ep2.pkt_size > EP2_MTU) {
1963
        ep2.pkt_size = EP2_MTU;
1964
    }
1965
    if (0 == ep2.pkt_size) {
1966
        ep2.pkt_size    = 1;
1967
        ep2_tx_buf[i]   = 0;
1968
        *EP2_DATA       = 0;
1969
    } else {
1970
        for (i = 0; i < ep2.pkt_size; i++) {
1971
            unsigned int datum = ep2.common.buffer[ep2.transmitted + i];
1972
            ep2_tx_buf[i]   = datum;
1973
            *EP2_DATA       = datum;
1974
        }
1975
    }
1976
}
1977
 
1978
static void
1979
ep2_tx_packet()
1980
{
1981
    usbs_sa11x0_poke_value(USBS_IN_SIZE, ep2.pkt_size - 1);
1982
    usbs_sa11x0_poke(EP2_CONTROL, EP2_PACKET_COMPLETE, 0, EP2_PACKET_COMPLETE | EP2_PACKET_ERROR | EP2_PACKET_UNDERRUN);
1983
}
1984
 
1985
static void
1986
ep2_clear_error()
1987
{
1988
    int i;
1989
    // Clear the fifo, just in case.
1990
    usbs_sa11x0_poke(EP2_CONTROL, EP2_SENT_STALL, 0, EP2_SENT_STALL);
1991
    for (i = 0; i < ep2.pkt_size; i++) {
1992
        *EP2_DATA       = ep2_tx_buf[i];
1993
    }
1994
}
1995
 
1996
#endif  // !EP2_DMA
1997
 
1998
// A utility routine for completing a transfer. This takes care of the
1999
// callback as well as resetting the buffer.
2000
static void
2001
ep2_tx_complete(int result)
2002
{
2003
    void (*complete_fn)(void*, int)  = ep2.common.complete_fn;
2004
    void* complete_data = ep2.common.complete_data;
2005
 
2006
    ep2.common.buffer           = (unsigned char*) 0;
2007
    ep2.common.buffer_size      = 0;
2008
    ep2.common.complete_fn      = (void (*)(void*, int)) 0;
2009
    ep2.common.complete_data    = (void*) 0;
2010
 
2011
    if ((void (*)(void*, int))0 != complete_fn) {
2012
        (*complete_fn)(complete_data, result);
2013
    }
2014
}
2015
 
2016
 
2017
// The exported interface to start a transmission.
2018
static void
2019
ep2_start_tx(usbs_tx_endpoint* endpoint)
2020
{
2021
    CYG_ASSERT( endpoint == &ep2.common, "USB data transfer involves the wrong endpoint");
2022
 
2023
    // Is this endpoint currently stalled? If so then a size of 0 can
2024
    // be used to block until the stall condition is clear, anything
2025
    // else should result in an immediate callback.
2026
    if (ep2.common.halted) {
2027
        if (0 != ep2.common.buffer_size) {
2028
            ep2_tx_complete(-EAGAIN);
2029
        }
2030
    } else if (0 == ep2.common.buffer_size) {
2031
        // A check to see if the endpoint is halted. It isn't.
2032
        ep2_tx_complete(0);
2033
    } else {
2034
        // There should not be any errors at the start of a
2035
        // transmission, but if there is one then there is no safe way
2036
        // to recover. process_packet() and tx_packet() will hopefully
2037
        // do the right thing.
2038
        CYG_ASSERT((void*) 0 != ep2.common.buffer, "Transmitting the interrupt vectors is unlikely to be useful");
2039
#if 0
2040
        {
2041
            int i;
2042
            diag_printf("----------------------------------------------\n");
2043
            diag_printf("ep2_start_tx: buf %x, %d bytes\n", ep2.common.buffer, ep2.common.buffer_size);
2044
            for (i = 0; (i < ep2.common.buffer_size) && (i < 128); i+= 8) {
2045
                diag_printf("tx: %x %x %x %x %x %x %x %x\n",
2046
                            ep2.common.buffer[i+0], ep2.common.buffer[i+1], ep2.common.buffer[i+2], ep2.common.buffer[i+3],
2047
                            ep2.common.buffer[i+4], ep2.common.buffer[i+5], ep2.common.buffer[i+6], ep2.common.buffer[i+7]);
2048
            }
2049
            diag_printf("----------------------------------------------\n");
2050
        }
2051
#endif
2052
 
2053
        // Prepare the first packet for transmission, then send it.
2054
        ep2.transmitted = 0;
2055
        ep2_process_packet();
2056
        ep2_tx_packet();
2057
    }
2058
}
2059
 
2060
static void
2061
ep2_set_halted(usbs_tx_endpoint* endpoint, cyg_bool new_value)
2062
{
2063
    CYG_ASSERT(endpoint == &ep2.common, "USB set-stall operation involves the wrong endpoint");
2064
 
2065
    if (ep2.common.halted == new_value) {
2066
        return;
2067
    }
2068
    if (new_value) {
2069
        // The endpoint should be stalled. There is a potential race
2070
        // condition here with the current transfer and DSR invocation.
2071
        // Updating the stalled flag means that the DSR will do nothing.
2072
        ep2.common.halted = true;
2073
        HAL_REORDER_BARRIER();
2074
 
2075
        // Now perform the actual stall. This may be delayed by the hardware
2076
        // so poke() cannot be used.
2077
        *EP2_CONTROL = EP2_FORCE_STALL;
2078
 
2079
        // If in the middle of a transfer then that cannot be aborted,
2080
        // the DMA engines etc. would get very confused.
2081
    } else {
2082
        // Take care of the hardware so that a new transfer is allowed. 
2083
        usbs_sa11x0_poke(EP2_CONTROL, EP2_SENT_STALL, 0, EP2_SENT_STALL | EP2_FORCE_STALL);
2084
        ep2.common.halted = false;
2085
    }
2086
}
2087
 
2088
// The dsr will be invoked when the transmit-packet-complete bit is
2089
// set. Typically this happens when a packet has been completed
2090
// (surprise surprise) but it can also happen for error conditions.
2091
static void
2092
usbs_sa11x0_ep2_dsr(void)
2093
{
2094
    int status = *EP2_CONTROL;
2095
    // This assertion does not always hold - spurious interrupts have
2096
    // been observed if you run for a few hours.
2097
    // CYG_ASSERT( 0 != (status & EP2_PACKET_COMPLETE), "ep2 dsr should only be invoked when the packet-complete bit is set");
2098
 
2099
    if (0 == (status & EP2_PACKET_COMPLETE)) {
2100
        // Spurious interrupt, do nothing.
2101
    } else if (ep2.common.halted) {
2102
        // There is a possible race condition between a packet
2103
        // completing and the stalled condition being set.
2104
        // set_halted() above does everything that is needed.
2105
    } else if (0 == ep2.pkt_size) {
2106
        // This can happen because of the initial value for the
2107
        // packet-complete bit, allowing the host to retrieve data
2108
        // before the target is ready. The correct action is to do
2109
        // nothing.
2110
    } else if (0 != (status & (EP2_PACKET_ERROR | EP2_PACKET_UNDERRUN))) {
2111
        // A transmit error occurred, the details are not important.
2112
        INCR_STAT(ep2_errors);
2113
        ep2_clear_error();
2114
        ep2_tx_packet();
2115
    } else {
2116
        // Another packet has gone out.
2117
        INCR_STAT(ep2_transmits);
2118
        ep2.transmitted += ep2.pkt_size;
2119
        if ((ep2.transmitted < ep2.common.buffer_size) ||
2120
            ((ep2.transmitted == ep2.common.buffer_size) && (0 == (ep2.common.buffer_size % EP2_MTU)))) {
2121
            ep2_process_packet();
2122
            ep2_tx_packet();
2123
        } else {
2124
            ep2_tx_complete(ep2.transmitted);
2125
        }
2126
    }
2127
}
2128
 
2129
// Endpoint 2 initialization.
2130
//
2131
// This may be called during system start-up or following a reset
2132
// from the host.
2133
static void
2134
usbs_sa11x0_ep2_init(void)
2135
{
2136
#ifdef CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL
2137
    // What is the physical address that should be used for
2138
    // transfers?
2139
    unsigned int phys;
2140
    HAL_VIRT_TO_PHYS_ADDRESS(ep2_dma_data, phys);
2141
    phys += (HAL_DCACHE_LINE_SIZE - 1);
2142
    phys -= (phys % HAL_DCACHE_LINE_SIZE);
2143
    CYG_ASSERT(0 == (phys % HAL_DCACHE_LINE_SIZE), "DMA buffer must be aligned to a cache-line boundary");
2144
    ep2_dma_buf = (unsigned char*) phys;
2145
 
2146
    // Clear the DMA channel completely, otherwise it may not be
2147
    // possible to write the ADDRESS register. Then set the DMA
2148
    // address register. The value is determined above.
2149
    *EP2_DMA_CONTROL_CLEAR      = DMA_CONTROL_CLEAR_ALL;
2150
    *EP2_DMA_ADDRESS            = EP2_DMA_ADDRESS_VALUE;
2151
#endif
2152
 
2153
    // Endpoints should never be halted after a reset
2154
    ep2.common.halted   = false;
2155
 
2156
    // If there has been a reset and there was a receive in progress,
2157
    // abort it. This also takes care of clearing the endpoint
2158
    // structure fields.
2159
    ep2_tx_complete(-EPIPE);
2160
}
2161
 
2162
#endif // CYGPKG_DEVS_USB_SA11X0_EP2
2163
 
2164
// ----------------------------------------------------------------------------
2165
// Interrupt handling
2166
//
2167
// As much work as possible is deferred to the DSR (or to the debug
2168
// thread). Interrupts for the endpoints are never a problem: the
2169
// variuos packet-complete etc. bits ensure that the endpoints
2170
// remain quiescent until the relevant interrupt has been serviced.
2171
// Suspend and resume are more complicated. A suspend means that
2172
// there has been no activity for 3ms, which should be enough
2173
// time for the whole thing to be handled. A resume means that there
2174
// has been bus activity after a suspend, and again it is infrequent.
2175
//
2176
// Reset appears to be much more complicated. A reset means that the
2177
// host is holding the USB lines to a specific state for 10ms. This is
2178
// detected by the hardware, causing the USB controller to be reset
2179
// (i.e. any pending transfers are discarded, etc.). The reset bit in
2180
// the status register will be set, and an interrupt will be raised.
2181
// Now, in theory the correct thing to do is to process this
2182
// interrupt, block reset interrupts for the duration of these 10ms,
2183
// and wait for further activity such as the control message to set
2184
// the address.
2185
//
2186
// In practice this does not seem to work. Possibly the USB controller
2187
// gets reset continuously while the external reset signal is applied,
2188
// but I have not been able to confirm this. Messing about with the
2189
// reset interrupt control bit causes the system to go off into
2190
// never-never land. 10ms is too short a time to allow for manual
2191
// debugging of what happens. So for now the interrupt source is
2192
// blocked at the interrupt mask level and the dsr will do the
2193
// right thing. This causes a significant number of spurious interrupts
2194
// for the duration of the reset signal and not a lot else can happen.
2195
 
2196
 
2197
// Perform reset operations on all endpoints that have been
2198
// configured in. It is convenient to keep this in a separate
2199
// routine to allow for polling, where manipulating the
2200
// interrupt controller mask is a bad idea.
2201
static void
2202
usbs_sa11x0_handle_reset(void)
2203
{
2204
    int old_state = ep0.common.state;
2205
 
2206
    // Any state change must be reported to higher-level code
2207
    ep0.common.state = USBS_STATE_DEFAULT;
2208
    if ((void (*)(usbs_control_endpoint*, void*, usbs_state_change, int))0 != ep0.common.state_change_fn) {
2209
        (*ep0.common.state_change_fn)(&ep0.common, ep0.common.state_change_data,
2210
                                      USBS_STATE_CHANGE_RESET, old_state);
2211
    }
2212
 
2213
    // Reinitialize all the endpoints that have been configured in.
2214
    usbs_sa11x0_ep0_init();
2215
#ifdef CYGPKG_DEVS_USB_SA11X0_EP1
2216
    usbs_sa11x0_ep1_init();
2217
#endif    
2218
#ifdef CYGPKG_DEVS_USB_SA11X0_EP2
2219
    usbs_sa11x0_ep2_init();
2220
#endif    
2221
 
2222
    // After a reset we need to handle endpoint interrupts, reset
2223
    // interrupts, and suspend interrupts. There should not be a
2224
    // resume since we have not suspended, but leaving resume
2225
    // interrupts enabled appears to be desirable with some hardware.
2226
    //
2227
    // With some silicon revisions it appears that a longer delay
2228
    // is needed after reset, so this poke() may not work.
2229
    if (!usbs_sa11x0_poke(USBS_CONTROL,
2230
                          CONTROL_INTR_ENABLE(CONTROL_EP_INTR_BITS|CONTROL_RESET_INTR|CONTROL_SUSPEND_INTR|CONTROL_RESUME_INTR),
2231
                          0,
2232
                          CONTROL_INTR_CLEAR(CONTROL_EP_INTR_BITS|CONTROL_RESET_INTR|CONTROL_SUSPEND_INTR|CONTROL_RESUME_INTR))) {
2233
        // DBG(("usbs_sa11x0_handle_reset(), update of control register failed, status %x\n", *USBS_STATUS));
2234
    }
2235
}
2236
 
2237
// The DSR. This can be invoked directly by poll(), or via the usual
2238
// interrupt subsystem. It acts as per the current value of
2239
// isr_status_bits. If another interrupt goes off while this
2240
// DSR is running, there will be another invocation of the DSR and
2241
// the status bits will be updated.
2242
static void
2243
usbs_sa11x0_dsr(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data)
2244
{
2245
    int status = 0;
2246
 
2247
    CYG_ASSERT(SA11X0_IRQ_USB_SERVICE_REQUEST == vector, "USB DSR should only be invoked for USB interrupts" );
2248
    CYG_ASSERT(0 == data, "The SA11X0 USB DSR needs no global data pointer");
2249
 
2250
    // There is no atomic swap support, so interrupts have to be
2251
    // blocked. It might be possible to do this via the USBS_CONTROL
2252
    // register, but at the risk of messing up the status register
2253
    // if another interrupt comes in. Blocking interrupts at the
2254
    // processor level is less intrusive on the USB code.
2255
 
2256
    cyg_drv_isr_lock();
2257
    status = isr_status_bits;
2258
    isr_status_bits = 0;
2259
    cyg_drv_isr_unlock();
2260
 
2261
    // Reset is special, since it invalidates everything else.
2262
    // If the reset is still ongoing then do not attempt any
2263
    // further processing, there will just be another interrupt.
2264
    // Otherwise handle_reset() does the hard work. Unmasking
2265
    // the interrupt means that another interrupt will occur
2266
    // immediately if reset is still asserted, i.e. no threads
2267
    // will run, but there is no easy way of triggering action
2268
    // at the end of reset.
2269
    if (0 != (status & STATUS_RESET_INTR)) {
2270
 
2271
        int new_status = *USBS_STATUS;
2272
        if (0 == (new_status & STATUS_RESET_INTR)) {
2273
            usbs_sa11x0_handle_reset();
2274
        }
2275
        // This unmask is likely to cause another interrupt immediately
2276
        cyg_drv_interrupt_unmask(SA11X0_IRQ_USB_SERVICE_REQUEST);
2277
 
2278
    } else {
2279
        // Process resume first. Ignore any resumes when we are not
2280
        // actually suspended yet, this happens mainly during system
2281
        // startup. If there has been a state change to suspended
2282
        // then we need a matching state change to resumed.
2283
        if (0 != (status & STATUS_RESUME_INTR)) {
2284
            int old_state       = ep0.common.state;
2285
            if (0 != (old_state & USBS_STATE_SUSPENDED)) {
2286
                ep0.common.state   &= ~USBS_STATE_SUSPENDED;
2287
                if ((void (*)(usbs_control_endpoint*, void*, usbs_state_change, int))0 != ep0.common.state_change_fn) {
2288
                    (*ep0.common.state_change_fn)(&ep0.common, ep0.common.state_change_data,
2289
                                              USBS_STATE_CHANGE_RESUMED, old_state);
2290
                }
2291
                // After a resume, all interrupts should be enabled.
2292
                // In theory there is no need to worry about further
2293
                // resume interrupts, but strange hardware behaviour
2294
                // has been observed if resume interrupts are left
2295
                // disabled.
2296
                usbs_sa11x0_poke(USBS_CONTROL,
2297
                                 CONTROL_INTR_ENABLE(CONTROL_EP_INTR_BITS|CONTROL_RESET_INTR|CONTROL_SUSPEND_INTR|CONTROL_RESUME_INTR),
2298
                                 0,
2299
                                 CONTROL_INTR_CLEAR(CONTROL_EP_INTR_BITS|CONTROL_RESET_INTR|CONTROL_SUSPEND_INTR|CONTROL_RESUME_INTR));
2300
            }
2301
        }
2302
 
2303
        // Now process endpoint interrupts. Control operations on
2304
        // endpoint 0 may have side effects on the other endpoints
2305
        // so it is better to leave them until last.
2306
#ifdef CYGPKG_DEVS_USB_SA11X0_EP1    
2307
        if (0 != (status & STATUS_EP1_INTR)) {
2308
            usbs_sa11x0_ep1_dsr();
2309
        }
2310
#endif    
2311
#ifdef CYGPKG_DEVS_USB_SA11X0_EP2
2312
        if (0 != (status & STATUS_EP2_INTR)) {
2313
            usbs_sa11x0_ep2_dsr();
2314
        }
2315
#endif
2316
        if (0 != (status & STATUS_EP0_INTR)) {
2317
            usbs_sa11x0_ep0_dsr();
2318
        }
2319
 
2320
        // Process suspend last, but only if there has not also been
2321
        // a resume. A suspend immediately followed by a resume should
2322
        // be ignored. A resume immediately followed by a suspend
2323
        // would be unfortunate, but suspend means that there has been
2324
        // at least 3ms of inactivity so the DSR latency would have
2325
        // to be pretty bad.
2326
        //
2327
        // Total robustness is possible but requires more work in the ISR.
2328
        if ((0 != (status & STATUS_SUSPEND_INTR)) && (0 == (status & STATUS_RESUME_INTR))) {
2329
            int old_state       = ep0.common.state;
2330
            ep0.common.state   |= USBS_STATE_SUSPENDED;
2331
            if ((void (*)(usbs_control_endpoint*, void*, usbs_state_change, int))0 != ep0.common.state_change_fn) {
2332
                (*ep0.common.state_change_fn)(&ep0.common, ep0.common.state_change_data,
2333
                                              USBS_STATE_CHANGE_SUSPENDED, old_state);
2334
            }
2335
            // We are no longer interested in further suspend interrupts,
2336
            // which could happen every 3 ms, but resume has become
2337
            // very interesting.
2338
            usbs_sa11x0_poke(USBS_CONTROL,
2339
                             CONTROL_INTR_ENABLE(CONTROL_EP_INTR_BITS | CONTROL_RESET_INTR | CONTROL_RESUME_INTR),
2340
                             0,
2341
                             CONTROL_INTR_CLEAR(CONTROL_EP_INTR_BITS | CONTROL_RESET_INTR | CONTROL_RESUME_INTR));
2342
        }
2343
    }
2344
}
2345
 
2346
// ----------------------------------------------------------------------------
2347
// Optionally the USB code can do most of its processing in a thread
2348
// rather than in a DSR.
2349
#ifdef CYGPKG_DEVS_USB_SA11X0_THREAD
2350
static unsigned char usbs_sa11x0_thread_stack[CYGNUM_DEVS_USB_SA11X0_THREAD_STACK_SIZE];
2351
static cyg_thread    usbs_sa11x0_thread;
2352
static cyg_handle_t  usbs_sa11x0_thread_handle;
2353
static cyg_sem_t     usbs_sa11x0_sem;
2354
 
2355
 
2356
static void
2357
usbs_sa11x0_thread_fn(cyg_addrword_t param)
2358
{
2359
    for (;;) {
2360
        cyg_semaphore_wait(&usbs_sa11x0_sem);
2361
        usbs_sa11x0_dsr(SA11X0_IRQ_USB_SERVICE_REQUEST, 0, 0);
2362
    }
2363
    CYG_UNUSED_PARAM(cyg_addrword_t, param);
2364
}
2365
 
2366
static void
2367
usbs_sa11x0_thread_dsr(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data)
2368
{
2369
    CYG_ASSERT( 0 != isr_status_bits, "DSR's should only be scheduled when there is work to do");
2370
    cyg_semaphore_post(&usbs_sa11x0_sem);
2371
 
2372
    CYG_UNUSED_PARAM(cyg_vector_t, vector);
2373
    CYG_UNUSED_PARAM(cyg_ucount32, count);
2374
    CYG_UNUSED_PARAM(cyg_addrword_t, data);
2375
}
2376
 
2377
#endif
2378
 
2379
// ----------------------------------------------------------------------------
2380
// The interrupt handler. This does as little as possible.
2381
static cyg_uint32
2382
usbs_sa11x0_isr(cyg_vector_t vector, cyg_addrword_t data)
2383
{
2384
    int old_status_bits = isr_status_bits;
2385
    int status_bits;
2386
 
2387
    CYG_ASSERT(SA11X0_IRQ_USB_SERVICE_REQUEST == vector, "USB ISR should only be invoked for USB interrupts" );
2388
    CYG_ASSERT(0 == data, "The SA11X0 USB ISR needs no global data pointer" );
2389
 
2390
    // Read the current status. Reset is special, it means that the
2391
    // whole chip has been reset apart from the one bit in the status
2392
    // register. Nothing should be done about this until the DSR sets
2393
    // the endpoints back to a consistent state and re-enables
2394
    // interrupts in the control register.
2395
    status_bits         = *USBS_STATUS;
2396
 
2397
    if (0 != (status_bits & STATUS_RESET_INTR)) {
2398
        isr_status_bits = STATUS_RESET_INTR;
2399
        *USBS_STATUS = status_bits;
2400
        cyg_drv_interrupt_mask(SA11X0_IRQ_USB_SERVICE_REQUEST);
2401
    } else {
2402
        *USBS_STATUS    = status_bits;
2403
        isr_status_bits |= status_bits;
2404
    }
2405
 
2406
    // Now keep the rest of the system happy.
2407
    cyg_drv_interrupt_acknowledge(vector);
2408
    return (old_status_bits != isr_status_bits) ? CYG_ISR_CALL_DSR : CYG_ISR_HANDLED;
2409
}
2410
 
2411
// ----------------------------------------------------------------------------
2412
// Polling support. This acts mostly like the interrupt handler: it
2413
// sets the isr status bits and causes the dsr to run. Reset has to be
2414
// handled specially: polling does nothing as long as reset is asserted.
2415
 
2416
static void
2417
usbs_sa11x0_poll(usbs_control_endpoint* endpoint)
2418
{
2419
    CYG_ASSERT( endpoint == &ep0.common, "USB poll involves the wrong endpoint");
2420
 
2421
    if (0 != (isr_status_bits & STATUS_RESET_INTR)) {
2422
        // Reset was detected the last time poll() was invoked. If
2423
        // reset is still active, do nothing. Once the reset has
2424
        // completed things can continue.
2425
        if (0 == (STATUS_RESET_INTR & *USBS_STATUS)) {
2426
            isr_status_bits = 0;
2427
            usbs_sa11x0_handle_reset();
2428
        }
2429
    } else {
2430
        isr_status_bits = *USBS_STATUS;
2431
        if (0 != (STATUS_RESET_INTR & isr_status_bits)) {
2432
            // Reset has just been asserted. Do nothing, just continue
2433
            // polling for the duration of the reset signal.
2434
        } else if (0 != isr_status_bits) {
2435
            usbs_sa11x0_dsr(SA11X0_IRQ_USB_SERVICE_REQUEST, 0, (cyg_addrword_t) 0);
2436
        }
2437
    }
2438
}
2439
 
2440
 
2441
// ----------------------------------------------------------------------------
2442
// Initialization.
2443
 
2444
void
2445
usbs_sa11x0_init(void)
2446
{
2447
    // Start by disabling/resetting the hardware. This is easy.
2448
    *USBS_CONTROL       = CONTROL_DISABLE;
2449
    *USBS_CONTROL       = CONTROL_DISABLE;
2450
    *USBS_CONTROL       = CONTROL_DISABLE;
2451
 
2452
    // The USB bus is now tristated, preventing any communications.
2453
    // This is a good thing, the situation should change only when
2454
    // higher-level code has provided the enumeration data and done an
2455
    // explicit start. 
2456
    usbs_sa11x0_ep0_init();
2457
#ifdef CYGPKG_DEVS_USB_SA11X0_EP1
2458
    usbs_sa11x0_ep1_init();
2459
#endif
2460
#ifdef CYGPKG_DEVS_USB_SA11X0_EP2
2461
    usbs_sa11x0_ep2_init();
2462
#endif
2463
 
2464
    // If processing is supposed to happen in a thread rather
2465
    // than in DSR, initialize the threads.
2466
#ifdef CYGPKG_DEVS_USB_SA11X0_THREAD
2467
    cyg_semaphore_init(&usbs_sa11x0_sem, 0);
2468
    cyg_thread_create(CYGNUM_DEVS_USB_SA11X0_THREAD_PRIORITY,
2469
                      &usbs_sa11x0_thread_fn,
2470
                      0,
2471
                      "SA11X0 USB support",
2472
                      usbs_sa11x0_thread_stack,
2473
                      CYGNUM_DEVS_USB_SA11X0_THREAD_STACK_SIZE,
2474
                      &usbs_sa11x0_thread_handle,
2475
                      &usbs_sa11x0_thread
2476
        );
2477
    cyg_thread_resume(usbs_sa11x0_thread_handle);
2478
#endif
2479
 
2480
    // It is also possible and desirable to install the interrupt
2481
    // handler here, even though there will be no interrupts for a
2482
    // while yet.
2483
    cyg_drv_interrupt_create(SA11X0_IRQ_USB_SERVICE_REQUEST,
2484
                             99,        // priority
2485
                             0,         // data
2486
                             &usbs_sa11x0_isr,
2487
#ifdef CYGPKG_DEVS_USB_SA11X0_THREAD
2488
                             &usbs_sa11x0_thread_dsr,
2489
#else                             
2490
                             &usbs_sa11x0_dsr,
2491
#endif                             
2492
                             &usbs_sa11x0_intr_handle,
2493
                             &usbs_sa11x0_intr_data);
2494
    cyg_drv_interrupt_attach(usbs_sa11x0_intr_handle);
2495
    cyg_drv_interrupt_unmask(SA11X0_IRQ_USB_SERVICE_REQUEST);
2496
}
2497
 
2498
// ----------------------------------------------------------------------------
2499
// Testing support.
2500
usbs_testing_endpoint usbs_testing_endpoints[] = {
2501
    {
2502
        endpoint_type       : USB_ENDPOINT_DESCRIPTOR_ATTR_CONTROL,
2503
        endpoint_number     : 0,
2504
        endpoint_direction  : USB_ENDPOINT_DESCRIPTOR_ENDPOINT_IN,
2505
        endpoint            : (void*) &ep0.common,
2506
#ifdef CYGVAR_DEVS_USB_SA11X0_EP0_DEVTAB_ENTRY
2507
        devtab_entry        : CYGDAT_DEVS_USB_SA11X0_DEVTAB_BASENAME "0c",
2508
#else        
2509
        devtab_entry        : (const char*) 0,
2510
#endif        
2511
        min_size            : 1,            // zero-byte control transfers are meaningless
2512
        max_size            : 0x0FFFF,      // limit imposed by protocol
2513
        max_in_padding      : 0,
2514
        alignment           : 0
2515
    },
2516
#ifdef CYGPKG_DEVS_USB_SA11X0_EP1
2517
    {
2518
        endpoint_type       : USB_ENDPOINT_DESCRIPTOR_ATTR_BULK,
2519
        endpoint_number     : 1,
2520
        endpoint_direction  : USB_ENDPOINT_DESCRIPTOR_ENDPOINT_OUT,
2521
        endpoint            : (void*) &ep1.common,
2522
#ifdef CYGVAR_DEVS_USB_SA11X0_EP1_DEVTAB_ENTRY
2523
        devtab_entry        : CYGDAT_DEVS_USB_SA11X0_DEVTAB_BASENAME "1r",
2524
#else        
2525
        devtab_entry        : (const char*) 0,
2526
#endif        
2527
        min_size            : 1,
2528
        max_size            : -1,           // No hardware or driver limitation
2529
        max_in_padding      : 0,
2530
        alignment           : 0
2531
    },
2532
#endif
2533
#ifdef CYGPKG_DEVS_USB_SA11X0_EP2
2534
    {
2535
        endpoint_type       : USB_ENDPOINT_DESCRIPTOR_ATTR_BULK,
2536
        endpoint_number     : 2,
2537
        endpoint_direction  : USB_ENDPOINT_DESCRIPTOR_ENDPOINT_IN,
2538
        endpoint            : (void*) &ep2.common,
2539
#ifdef CYGVAR_DEVS_USB_SA11X0_EP2_DEVTAB_ENTRY
2540
        devtab_entry        : CYGDAT_DEVS_USB_SA11X0_DEVTAB_BASENAME "2w",
2541
#else        
2542
        devtab_entry        : (const char*) 0,
2543
#endif        
2544
        min_size            : 1,
2545
        max_size            : -1,           // No hardware or driver limitation
2546
        max_in_padding      : 1,            // hardware limitation
2547
        alignment           : 0
2548
    },
2549
#endif
2550
    USBS_TESTING_ENDPOINTS_TERMINATOR
2551
};

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.