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