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