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

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);

unix.superglobalmegacorp.com

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