source: trunk/packages/xen-common/xen-common/tools/ioemu/hw/usb.h @ 34

Last change on this file since 34 was 34, checked in by hartmans, 17 years ago

Add xen and xen-common

File size: 5.8 KB
Line 
1/*
2 * QEMU USB API
3 *
4 * Copyright (c) 2005 Fabrice Bellard
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 */
24#define USB_TOKEN_SETUP 0x2d
25#define USB_TOKEN_IN    0x69 /* device -> host */
26#define USB_TOKEN_OUT   0xe1 /* host -> device */
27
28/* specific usb messages, also sent in the 'pid' parameter */
29#define USB_MSG_ATTACH   0x100
30#define USB_MSG_DETACH   0x101
31#define USB_MSG_RESET    0x102
32
33#define USB_RET_NODEV  (-1)
34#define USB_RET_NAK    (-2)
35#define USB_RET_STALL  (-3)
36#define USB_RET_BABBLE (-4)
37
38#define USB_SPEED_LOW   0
39#define USB_SPEED_FULL  1
40#define USB_SPEED_HIGH  2
41
42#define USB_STATE_NOTATTACHED 0
43#define USB_STATE_ATTACHED    1
44//#define USB_STATE_POWERED     2
45#define USB_STATE_DEFAULT     3
46//#define USB_STATE_ADDRESS     4
47//#define       USB_STATE_CONFIGURED  5
48#define USB_STATE_SUSPENDED   6
49
50#define USB_CLASS_AUDIO                 1
51#define USB_CLASS_COMM                  2
52#define USB_CLASS_HID                   3
53#define USB_CLASS_PHYSICAL              5
54#define USB_CLASS_STILL_IMAGE           6
55#define USB_CLASS_PRINTER               7
56#define USB_CLASS_MASS_STORAGE          8
57#define USB_CLASS_HUB                   9
58#define USB_CLASS_CDC_DATA              0x0a
59#define USB_CLASS_CSCID                 0x0b
60#define USB_CLASS_CONTENT_SEC           0x0d
61#define USB_CLASS_APP_SPEC              0xfe
62#define USB_CLASS_VENDOR_SPEC           0xff
63
64#define USB_DIR_OUT                     0
65#define USB_DIR_IN                      0x80
66
67#define USB_TYPE_MASK                   (0x03 << 5)
68#define USB_TYPE_STANDARD               (0x00 << 5)
69#define USB_TYPE_CLASS                  (0x01 << 5)
70#define USB_TYPE_VENDOR                 (0x02 << 5)
71#define USB_TYPE_RESERVED               (0x03 << 5)
72
73#define USB_RECIP_MASK                  0x1f
74#define USB_RECIP_DEVICE                0x00
75#define USB_RECIP_INTERFACE             0x01
76#define USB_RECIP_ENDPOINT              0x02
77#define USB_RECIP_OTHER                 0x03
78
79#define DeviceRequest ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8)
80#define DeviceOutRequest ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8)
81#define InterfaceRequest \
82        ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
83#define InterfaceOutRequest \
84        ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
85#define EndpointRequest ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_ENDPOINT)<<8)
86#define EndpointOutRequest \
87        ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_ENDPOINT)<<8)
88
89#define USB_REQ_GET_STATUS              0x00
90#define USB_REQ_CLEAR_FEATURE           0x01
91#define USB_REQ_SET_FEATURE             0x03
92#define USB_REQ_SET_ADDRESS             0x05
93#define USB_REQ_GET_DESCRIPTOR          0x06
94#define USB_REQ_SET_DESCRIPTOR          0x07
95#define USB_REQ_GET_CONFIGURATION       0x08
96#define USB_REQ_SET_CONFIGURATION       0x09
97#define USB_REQ_GET_INTERFACE           0x0A
98#define USB_REQ_SET_INTERFACE           0x0B
99#define USB_REQ_SYNCH_FRAME             0x0C
100
101#define USB_DEVICE_SELF_POWERED         0
102#define USB_DEVICE_REMOTE_WAKEUP        1
103
104#define USB_DT_DEVICE                   0x01
105#define USB_DT_CONFIG                   0x02
106#define USB_DT_STRING                   0x03
107#define USB_DT_INTERFACE                0x04
108#define USB_DT_ENDPOINT                 0x05
109
110typedef struct USBPort USBPort;
111typedef struct USBDevice USBDevice;
112
113/* definition of a USB device */
114struct USBDevice {
115    void *opaque;
116    int (*handle_packet)(USBDevice *dev, int pid, 
117                         uint8_t devaddr, uint8_t devep,
118                         uint8_t *data, int len);
119    void (*handle_destroy)(USBDevice *dev);
120
121    int speed;
122   
123    /* The following fields are used by the generic USB device
124       layer. They are here just to avoid creating a new structure for
125       them. */
126    void (*handle_reset)(USBDevice *dev);
127    int (*handle_control)(USBDevice *dev, int request, int value,
128                          int index, int length, uint8_t *data);
129    int (*handle_data)(USBDevice *dev, int pid, uint8_t devep,
130                       uint8_t *data, int len);
131    uint8_t addr;
132    char devname[32];
133   
134    int state;
135    uint8_t setup_buf[8];
136    uint8_t data_buf[1024];
137    int remote_wakeup;
138    int setup_state;
139    int setup_len;
140    int setup_index;
141};
142
143typedef void (*usb_attachfn)(USBPort *port, USBDevice *dev);
144
145/* USB port on which a device can be connected */
146struct USBPort {
147    USBDevice *dev;
148    usb_attachfn attach;
149    void *opaque;
150    int index; /* internal port index, may be used with the opaque */
151    struct USBPort *next; /* Used internally by qemu.  */
152};
153
154void usb_attach(USBPort *port, USBDevice *dev);
155int usb_generic_handle_packet(USBDevice *s, int pid, 
156                              uint8_t devaddr, uint8_t devep,
157                              uint8_t *data, int len);
158int set_usb_string(uint8_t *buf, const char *str);
159
160/* usb hub */
161USBDevice *usb_hub_init(int nb_ports);
162
163/* usb-uhci.c */
164void usb_uhci_init(PCIBus *bus, int devfn);
165
166/* usb-ohci.c */
167void usb_ohci_init(struct PCIBus *bus, int num_ports, int devfn);
168
169/* usb-linux.c */
170USBDevice *usb_host_device_open(const char *devname);
171void usb_host_info(void);
172
173/* usb-hid.c */
174USBDevice *usb_mouse_init(void);
175USBDevice *usb_tablet_init(void);
176
177/* usb-msd.c */
178USBDevice *usb_msd_init(const char *filename);
179
180/* usb.c */
181void generic_usb_save(QEMUFile* f, void *opaque);
182int generic_usb_load(QEMUFile* f, void *opaque, int version_id);
183
184
Note: See TracBrowser for help on using the repository browser.