s3c2410_udc.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. #ifndef _S3C2410_UDC_H
  14. #define _S3C2410_UDC_H
  15. struct s3c2410_ep {
  16. struct list_head queue;
  17. unsigned long last_io; /* jiffies timestamp */
  18. struct usb_gadget *gadget;
  19. struct s3c2410_udc *dev;
  20. const struct usb_endpoint_descriptor *desc;
  21. struct usb_ep ep;
  22. u8 num;
  23. unsigned short fifo_size;
  24. u8 bEndpointAddress;
  25. u8 bmAttributes;
  26. unsigned halted : 1;
  27. unsigned already_seen : 1;
  28. unsigned setup_stage : 1;
  29. };
  30. /* Warning : ep0 has a fifo of 16 bytes */
  31. /* Don't try to set 32 or 64 */
  32. /* also testusb 14 fails wit 16 but is */
  33. /* fine with 8 */
  34. #define EP0_FIFO_SIZE 8
  35. #define EP_FIFO_SIZE 64
  36. #define DEFAULT_POWER_STATE 0x00
  37. #define S3C2440_EP_FIFO_SIZE 128
  38. static const char ep0name [] = "ep0";
  39. static const char *const ep_name[] = {
  40. ep0name, /* everyone has ep0 */
  41. /* s3c2410 four bidirectional bulk endpoints */
  42. "ep1-bulk", "ep2-bulk", "ep3-bulk", "ep4-bulk",
  43. };
  44. #define S3C2410_ENDPOINTS ARRAY_SIZE(ep_name)
  45. struct s3c2410_request {
  46. struct list_head queue; /* ep's requests */
  47. struct usb_request req;
  48. };
  49. enum ep0_state {
  50. EP0_IDLE,
  51. EP0_IN_DATA_PHASE,
  52. EP0_OUT_DATA_PHASE,
  53. EP0_END_XFER,
  54. EP0_STALL,
  55. };
  56. static const char *ep0states[]= {
  57. "EP0_IDLE",
  58. "EP0_IN_DATA_PHASE",
  59. "EP0_OUT_DATA_PHASE",
  60. "EP0_END_XFER",
  61. "EP0_STALL",
  62. };
  63. struct s3c2410_udc {
  64. spinlock_t lock;
  65. struct s3c2410_ep ep[S3C2410_ENDPOINTS];
  66. int address;
  67. struct usb_gadget gadget;
  68. struct usb_gadget_driver *driver;
  69. struct s3c2410_request fifo_req;
  70. u8 fifo_buf[EP_FIFO_SIZE];
  71. u16 devstatus;
  72. u32 port_status;
  73. int ep0state;
  74. unsigned got_irq : 1;
  75. unsigned req_std : 1;
  76. unsigned req_config : 1;
  77. unsigned req_pending : 1;
  78. u8 vbus;
  79. struct dentry *regs_info;
  80. };
  81. #endif