| /* | |
| * linux/drivers/usb/gadget/s3c2410_udc.h | |
| * Samsung on-chip full speed USB device controllers | |
| * | |
| * Copyright (C) 2004-2007 Herbert Pƶtzl - Arnaud Patard | |
| * Additional cleanups by Ben Dooks <ben-linux@fluff.org> | |
| * | |
| * This program is free software; you can redistribute it and/or modify | |
| * it under the terms of the GNU General Public License as published by | |
| * the Free Software Foundation; either version 2 of the License, or | |
| * (at your option) any later version. | |
| */ | |
| #ifndef _S3C2410_UDC_H | |
| #define _S3C2410_UDC_H | |
| struct s3c2410_ep { | |
| struct list_head queue; | |
| unsigned long last_io; /* jiffies timestamp */ | |
| struct usb_gadget *gadget; | |
| struct s3c2410_udc *dev; | |
| struct usb_ep ep; | |
| u8 num; | |
| unsigned short fifo_size; | |
| u8 bEndpointAddress; | |
| u8 bmAttributes; | |
| unsigned halted : 1; | |
| unsigned already_seen : 1; | |
| unsigned setup_stage : 1; | |
| }; | |
| /* Warning : ep0 has a fifo of 16 bytes */ | |
| /* Don't try to set 32 or 64 */ | |
| /* also testusb 14 fails wit 16 but is */ | |
| /* fine with 8 */ | |
| #define EP0_FIFO_SIZE 8 | |
| #define EP_FIFO_SIZE 64 | |
| #define DEFAULT_POWER_STATE 0x00 | |
| #define S3C2440_EP_FIFO_SIZE 128 | |
| static const char ep0name [] = "ep0"; | |
| static const char *const ep_name[] = { | |
| ep0name, /* everyone has ep0 */ | |
| /* s3c2410 four bidirectional bulk endpoints */ | |
| "ep1-bulk", "ep2-bulk", "ep3-bulk", "ep4-bulk", | |
| }; | |
| #define S3C2410_ENDPOINTS ARRAY_SIZE(ep_name) | |
| struct s3c2410_request { | |
| struct list_head queue; /* ep's requests */ | |
| struct usb_request req; | |
| }; | |
| enum ep0_state { | |
| EP0_IDLE, | |
| EP0_IN_DATA_PHASE, | |
| EP0_OUT_DATA_PHASE, | |
| EP0_END_XFER, | |
| EP0_STALL, | |
| }; | |
| static const char *ep0states[]= { | |
| "EP0_IDLE", | |
| "EP0_IN_DATA_PHASE", | |
| "EP0_OUT_DATA_PHASE", | |
| "EP0_END_XFER", | |
| "EP0_STALL", | |
| }; | |
| struct s3c2410_udc { | |
| spinlock_t lock; | |
| struct s3c2410_ep ep[S3C2410_ENDPOINTS]; | |
| int address; | |
| struct usb_gadget gadget; | |
| struct usb_gadget_driver *driver; | |
| struct s3c2410_request fifo_req; | |
| u8 fifo_buf[EP_FIFO_SIZE]; | |
| u16 devstatus; | |
| u32 port_status; | |
| int ep0state; | |
| unsigned got_irq : 1; | |
| unsigned req_std : 1; | |
| unsigned req_config : 1; | |
| unsigned req_pending : 1; | |
| u8 vbus; | |
| struct dentry *regs_info; | |
| }; | |
| #define to_s3c2410(g) (container_of((g), struct s3c2410_udc, gadget)) | |
| #endif |