blob: 05bc74bed0b14cd4d360e06db8c899ac011a5a4c [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
2 * BRIEF MODULE DESCRIPTION
3 * Au1000 USB Device-Side Driver
4 *
5 * Copyright 2001 MontaVista Software Inc.
6 * Author: MontaVista Software, Inc.
7 * stevel@mvista.com or source@mvista.com
8 *
9 * This program is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU General Public License as published by the
11 * Free Software Foundation; either version 2 of the License, or (at your
12 * option) any later version.
13 *
14 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
15 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
16 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
17 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
20 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
21 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 *
25 * You should have received a copy of the GNU General Public License along
26 * with this program; if not, write to the Free Software Foundation, Inc.,
27 * 675 Mass Ave, Cambridge, MA 02139, USA.
28 */
29
30#define USBDEV_REV 0x0110 // BCD
31#define USBDEV_EP0_MAX_PACKET_SIZE 64
32
33typedef enum {
34 ATTACHED = 0,
35 POWERED,
36 DEFAULT,
37 ADDRESS,
38 CONFIGURED
39} usbdev_state_t;
40
41typedef enum {
42 CB_NEW_STATE = 0,
43 CB_PKT_COMPLETE
44} usbdev_cb_type_t;
45
46
47typedef struct usbdev_pkt {
48 int ep_addr; // ep addr this packet routed to
49 int size; // size of payload in bytes
50 unsigned status; // packet status
51 struct usbdev_pkt* next; // function layer can't touch this
52 u8 payload[0]; // the payload
53} usbdev_pkt_t;
54
55#define PKT_STATUS_ACK (1<<0)
56#define PKT_STATUS_NAK (1<<1)
57#define PKT_STATUS_SU (1<<2)
58
59extern int usbdev_init(struct usb_device_descriptor* dev_desc,
60 struct usb_config_descriptor* config_desc,
61 struct usb_interface_descriptor* if_desc,
62 struct usb_endpoint_descriptor* ep_desc,
63 struct usb_string_descriptor* str_desc[],
64 void (*cb)(usbdev_cb_type_t, unsigned long, void *),
65 void* cb_data);
66
67extern void usbdev_exit(void);
68
69extern int usbdev_alloc_packet (int ep_addr, int data_size,
70 usbdev_pkt_t** pkt);
71extern int usbdev_send_packet (int ep_addr, usbdev_pkt_t* pkt);
72extern int usbdev_receive_packet(int ep_addr, usbdev_pkt_t** pkt);
73extern int usbdev_get_byte_count(int ep_addr);