Annotation of qemu/hw/usb.h, revision 1.1.1.2

1.1       root        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: 
                    110: typedef struct USBPort USBPort;
                    111: typedef struct USBDevice USBDevice;
                    112: 
                    113: /* definition of a USB device */
                    114: struct 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:     int speed;
                    120:     
                    121:     /* The following fields are used by the generic USB device
                    122:        layer. They are here just to avoid creating a new structure for
                    123:        them. */
                    124:     void (*handle_reset)(USBDevice *dev);
                    125:     int (*handle_control)(USBDevice *dev, int request, int value,
                    126:                           int index, int length, uint8_t *data);
                    127:     int (*handle_data)(USBDevice *dev, int pid, uint8_t devep,
                    128:                        uint8_t *data, int len);
                    129:     uint8_t addr;
                    130:     
                    131:     int state;
                    132:     uint8_t setup_buf[8];
                    133:     uint8_t data_buf[1024];
                    134:     int remote_wakeup;
                    135:     int setup_state;
                    136:     int setup_len;
                    137:     int setup_index;
                    138: };
                    139: 
                    140: /* USB port on which a device can be connected */
                    141: struct USBPort {
                    142:     USBDevice *dev;
                    143:     void (*attach)(USBPort *port, USBDevice *dev);
                    144:     void *opaque;
                    145:     int index; /* internal port index, may be used with the opaque */
                    146: };
                    147: 
                    148: void usb_attach(USBPort *port, USBDevice *dev);
                    149: int usb_generic_handle_packet(USBDevice *s, int pid, 
                    150:                               uint8_t devaddr, uint8_t devep,
                    151:                               uint8_t *data, int len);
                    152: int set_usb_string(uint8_t *buf, const char *str);
                    153: 
                    154: /* usb hub */
                    155: USBDevice *usb_hub_init(USBPort **usb_ports, int nb_ports);
                    156: 
                    157: /* usb-uhci.c */
                    158: void usb_uhci_init(PCIBus *bus, USBPort **usb_ports);
                    159: 
                    160: /* usb-linux.c */
                    161: USBDevice *usb_host_device_open(const char *devname);
                    162: void usb_host_info(void);
                    163: 
                    164: /* usb-hid.c */
                    165: USBDevice *usb_mouse_init(void);
1.1.1.2 ! root      166: USBDevice *usb_tablet_init(void);

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.