|  | /* | 
|  | * BRIEF MODULE DESCRIPTION | 
|  | *	Au1000 USB Device-Side Driver | 
|  | * | 
|  | * Copyright 2001 MontaVista Software Inc. | 
|  | * Author: MontaVista Software, Inc. | 
|  | *		[email protected] or [email protected] | 
|  | * | 
|  | *  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. | 
|  | * | 
|  | *  THIS  SOFTWARE  IS PROVIDED	  ``AS	IS'' AND   ANY	EXPRESS OR IMPLIED | 
|  | *  WARRANTIES,	  INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF | 
|  | *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN | 
|  | *  NO	EVENT  SHALL   THE AUTHOR  BE	 LIABLE FOR ANY	  DIRECT, INDIRECT, | 
|  | *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | 
|  | *  NOT LIMITED	  TO, PROCUREMENT OF  SUBSTITUTE GOODS	OR SERVICES; LOSS OF | 
|  | *  USE, DATA,	OR PROFITS; OR	BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | 
|  | *  ANY THEORY OF LIABILITY, WHETHER IN	 CONTRACT, STRICT LIABILITY, OR TORT | 
|  | *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 
|  | *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
|  | * | 
|  | *  You should have received a copy of the  GNU General Public License along | 
|  | *  with this program; if not, write  to the Free Software Foundation, Inc., | 
|  | *  675 Mass Ave, Cambridge, MA 02139, USA. | 
|  | */ | 
|  |  | 
|  | #define USBDEV_REV 0x0110 // BCD | 
|  | #define USBDEV_EP0_MAX_PACKET_SIZE 64 | 
|  |  | 
|  | typedef enum { | 
|  | ATTACHED = 0, | 
|  | POWERED, | 
|  | DEFAULT, | 
|  | ADDRESS, | 
|  | CONFIGURED | 
|  | } usbdev_state_t; | 
|  |  | 
|  | typedef enum { | 
|  | CB_NEW_STATE = 0, | 
|  | CB_PKT_COMPLETE | 
|  | } usbdev_cb_type_t; | 
|  |  | 
|  |  | 
|  | typedef struct usbdev_pkt { | 
|  | int                ep_addr;    // ep addr this packet routed to | 
|  | int                size;       // size of payload in bytes | 
|  | unsigned           status;     // packet status | 
|  | struct usbdev_pkt* next;       // function layer can't touch this | 
|  | u8                 payload[0]; // the payload | 
|  | } usbdev_pkt_t; | 
|  |  | 
|  | #define PKT_STATUS_ACK  (1<<0) | 
|  | #define PKT_STATUS_NAK  (1<<1) | 
|  | #define PKT_STATUS_SU   (1<<2) | 
|  |  | 
|  | extern int usbdev_init(struct usb_device_descriptor* dev_desc, | 
|  | struct usb_config_descriptor* config_desc, | 
|  | struct usb_interface_descriptor* if_desc, | 
|  | struct usb_endpoint_descriptor* ep_desc, | 
|  | struct usb_string_descriptor* str_desc[], | 
|  | void (*cb)(usbdev_cb_type_t, unsigned long, void *), | 
|  | void* cb_data); | 
|  |  | 
|  | extern void usbdev_exit(void); | 
|  |  | 
|  | extern int usbdev_alloc_packet  (int ep_addr, int data_size, | 
|  | usbdev_pkt_t** pkt); | 
|  | extern int usbdev_send_packet   (int ep_addr, usbdev_pkt_t* pkt); | 
|  | extern int usbdev_receive_packet(int ep_addr, usbdev_pkt_t** pkt); | 
|  | extern int usbdev_get_byte_count(int ep_addr); |