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

1.1.1.14! root        1: #ifndef QEMU_USB_H
        !             2: #define QEMU_USB_H
        !             3: 
1.1       root        4: /*
                      5:  * QEMU USB API
1.1.1.5   root        6:  *
1.1       root        7:  * Copyright (c) 2005 Fabrice Bellard
1.1.1.5   root        8:  *
1.1       root        9:  * Permission is hereby granted, free of charge, to any person obtaining a copy
                     10:  * of this software and associated documentation files (the "Software"), to deal
                     11:  * in the Software without restriction, including without limitation the rights
                     12:  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
                     13:  * copies of the Software, and to permit persons to whom the Software is
                     14:  * furnished to do so, subject to the following conditions:
                     15:  *
                     16:  * The above copyright notice and this permission notice shall be included in
                     17:  * all copies or substantial portions of the Software.
                     18:  *
                     19:  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
                     20:  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
                     21:  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
                     22:  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
                     23:  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
                     24:  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
                     25:  * THE SOFTWARE.
                     26:  */
1.1.1.7   root       27: 
                     28: #include "block.h"
1.1.1.9   root       29: #include "qdev.h"
                     30: #include "qemu-queue.h"
1.1.1.7   root       31: 
1.1.1.12  root       32: /* Constants related to the USB / PCI interaction */
                     33: #define USB_SBRN    0x60 /* Serial Bus Release Number Register */
                     34: #define USB_RELEASE_1  0x10 /* USB 1.0 */
                     35: #define USB_RELEASE_2  0x20 /* USB 2.0 */
                     36: #define USB_RELEASE_3  0x30 /* USB 3.0 */
                     37: 
1.1       root       38: #define USB_TOKEN_SETUP 0x2d
                     39: #define USB_TOKEN_IN    0x69 /* device -> host */
                     40: #define USB_TOKEN_OUT   0xe1 /* host -> device */
                     41: 
1.1.1.14! root       42: #define USB_RET_NODEV   (-1)
        !            43: #define USB_RET_NAK     (-2)
        !            44: #define USB_RET_STALL   (-3)
        !            45: #define USB_RET_BABBLE  (-4)
        !            46: #define USB_RET_IOERROR (-5)
        !            47: #define USB_RET_ASYNC   (-6)
1.1       root       48: 
                     49: #define USB_SPEED_LOW   0
                     50: #define USB_SPEED_FULL  1
                     51: #define USB_SPEED_HIGH  2
1.1.1.11  root       52: #define USB_SPEED_SUPER 3
                     53: 
                     54: #define USB_SPEED_MASK_LOW   (1 << USB_SPEED_LOW)
                     55: #define USB_SPEED_MASK_FULL  (1 << USB_SPEED_FULL)
                     56: #define USB_SPEED_MASK_HIGH  (1 << USB_SPEED_HIGH)
                     57: #define USB_SPEED_MASK_SUPER (1 << USB_SPEED_SUPER)
1.1       root       58: 
                     59: #define USB_STATE_NOTATTACHED 0
                     60: #define USB_STATE_ATTACHED    1
                     61: //#define USB_STATE_POWERED     2
                     62: #define USB_STATE_DEFAULT     3
                     63: //#define USB_STATE_ADDRESS     4
                     64: //#define      USB_STATE_CONFIGURED  5
                     65: #define USB_STATE_SUSPENDED   6
                     66: 
                     67: #define USB_CLASS_AUDIO                        1
                     68: #define USB_CLASS_COMM                 2
                     69: #define USB_CLASS_HID                  3
                     70: #define USB_CLASS_PHYSICAL             5
                     71: #define USB_CLASS_STILL_IMAGE          6
                     72: #define USB_CLASS_PRINTER              7
                     73: #define USB_CLASS_MASS_STORAGE         8
                     74: #define USB_CLASS_HUB                  9
                     75: #define USB_CLASS_CDC_DATA             0x0a
                     76: #define USB_CLASS_CSCID                        0x0b
                     77: #define USB_CLASS_CONTENT_SEC          0x0d
                     78: #define USB_CLASS_APP_SPEC             0xfe
                     79: #define USB_CLASS_VENDOR_SPEC          0xff
                     80: 
1.1.1.14! root       81: #define USB_SUBCLASS_UNDEFINED          0
        !            82: #define USB_SUBCLASS_AUDIO_CONTROL      1
        !            83: #define USB_SUBCLASS_AUDIO_STREAMING    2
        !            84: #define USB_SUBCLASS_AUDIO_MIDISTREAMING 3
        !            85: 
1.1       root       86: #define USB_DIR_OUT                    0
                     87: #define USB_DIR_IN                     0x80
                     88: 
                     89: #define USB_TYPE_MASK                  (0x03 << 5)
                     90: #define USB_TYPE_STANDARD              (0x00 << 5)
                     91: #define USB_TYPE_CLASS                 (0x01 << 5)
                     92: #define USB_TYPE_VENDOR                        (0x02 << 5)
                     93: #define USB_TYPE_RESERVED              (0x03 << 5)
                     94: 
                     95: #define USB_RECIP_MASK                 0x1f
                     96: #define USB_RECIP_DEVICE               0x00
                     97: #define USB_RECIP_INTERFACE            0x01
                     98: #define USB_RECIP_ENDPOINT             0x02
                     99: #define USB_RECIP_OTHER                        0x03
                    100: 
                    101: #define DeviceRequest ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8)
                    102: #define DeviceOutRequest ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8)
                    103: #define InterfaceRequest \
                    104:         ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
                    105: #define InterfaceOutRequest \
                    106:         ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
                    107: #define EndpointRequest ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_ENDPOINT)<<8)
                    108: #define EndpointOutRequest \
                    109:         ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_ENDPOINT)<<8)
1.1.1.10  root      110: #define ClassInterfaceRequest \
                    111:         ((USB_DIR_IN|USB_TYPE_CLASS|USB_RECIP_INTERFACE)<<8)
                    112: #define ClassInterfaceOutRequest \
                    113:         ((USB_DIR_OUT|USB_TYPE_CLASS|USB_RECIP_INTERFACE)<<8)
1.1       root      114: 
                    115: #define USB_REQ_GET_STATUS             0x00
                    116: #define USB_REQ_CLEAR_FEATURE          0x01
                    117: #define USB_REQ_SET_FEATURE            0x03
                    118: #define USB_REQ_SET_ADDRESS            0x05
                    119: #define USB_REQ_GET_DESCRIPTOR         0x06
                    120: #define USB_REQ_SET_DESCRIPTOR         0x07
                    121: #define USB_REQ_GET_CONFIGURATION      0x08
                    122: #define USB_REQ_SET_CONFIGURATION      0x09
                    123: #define USB_REQ_GET_INTERFACE          0x0A
                    124: #define USB_REQ_SET_INTERFACE          0x0B
                    125: #define USB_REQ_SYNCH_FRAME            0x0C
                    126: 
                    127: #define USB_DEVICE_SELF_POWERED                0
                    128: #define USB_DEVICE_REMOTE_WAKEUP       1
                    129: 
                    130: #define USB_DT_DEVICE                  0x01
                    131: #define USB_DT_CONFIG                  0x02
                    132: #define USB_DT_STRING                  0x03
                    133: #define USB_DT_INTERFACE               0x04
                    134: #define USB_DT_ENDPOINT                        0x05
1.1.1.11  root      135: #define USB_DT_DEVICE_QUALIFIER         0x06
                    136: #define USB_DT_OTHER_SPEED_CONFIG       0x07
1.1.1.12  root      137: #define USB_DT_DEBUG                    0x0A
                    138: #define USB_DT_INTERFACE_ASSOC          0x0B
1.1.1.14! root      139: #define USB_DT_CS_INTERFACE             0x24
        !           140: #define USB_DT_CS_ENDPOINT              0x25
1.1       root      141: 
1.1.1.6   root      142: #define USB_ENDPOINT_XFER_CONTROL      0
                    143: #define USB_ENDPOINT_XFER_ISOC         1
                    144: #define USB_ENDPOINT_XFER_BULK         2
                    145: #define USB_ENDPOINT_XFER_INT          3
1.1.1.14! root      146: #define USB_ENDPOINT_XFER_INVALID     255
1.1.1.6   root      147: 
1.1.1.9   root      148: typedef struct USBBus USBBus;
1.1.1.12  root      149: typedef struct USBBusOps USBBusOps;
1.1       root      150: typedef struct USBPort USBPort;
                    151: typedef struct USBDevice USBDevice;
1.1.1.4   root      152: typedef struct USBPacket USBPacket;
1.1.1.14! root      153: typedef struct USBEndpoint USBEndpoint;
1.1       root      154: 
1.1.1.11  root      155: typedef struct USBDesc USBDesc;
                    156: typedef struct USBDescID USBDescID;
                    157: typedef struct USBDescDevice USBDescDevice;
                    158: typedef struct USBDescConfig USBDescConfig;
1.1.1.12  root      159: typedef struct USBDescIfaceAssoc USBDescIfaceAssoc;
1.1.1.11  root      160: typedef struct USBDescIface USBDescIface;
                    161: typedef struct USBDescEndpoint USBDescEndpoint;
                    162: typedef struct USBDescOther USBDescOther;
                    163: typedef struct USBDescString USBDescString;
                    164: 
                    165: struct USBDescString {
                    166:     uint8_t index;
                    167:     char *str;
                    168:     QLIST_ENTRY(USBDescString) next;
                    169: };
                    170: 
1.1.1.14! root      171: #define USB_MAX_ENDPOINTS  15
        !           172: #define USB_MAX_INTERFACES 16
        !           173: 
        !           174: struct USBEndpoint {
        !           175:     uint8_t nr;
        !           176:     uint8_t pid;
        !           177:     uint8_t type;
        !           178:     uint8_t ifnum;
        !           179:     int max_packet_size;
        !           180:     bool pipeline;
        !           181:     USBDevice *dev;
        !           182:     QTAILQ_HEAD(, USBPacket) queue;
        !           183: };
        !           184: 
        !           185: enum USBDeviceFlags {
        !           186:     USB_DEV_FLAG_FULL_PATH,
        !           187: };
        !           188: 
1.1       root      189: /* definition of a USB device */
                    190: struct USBDevice {
1.1.1.9   root      191:     DeviceState qdev;
1.1.1.11  root      192:     USBPort *port;
                    193:     char *port_path;
1.1       root      194:     void *opaque;
1.1.1.14! root      195:     uint32_t flags;
1.1.1.6   root      196: 
1.1.1.12  root      197:     /* Actual connected speed */
1.1.1.9   root      198:     int speed;
1.1.1.12  root      199:     /* Supported speeds, not in info because it may be variable (hostdevs) */
                    200:     int speedmask;
1.1.1.9   root      201:     uint8_t addr;
                    202:     char product_desc[32];
                    203:     int auto_attach;
                    204:     int attached;
                    205: 
1.1.1.11  root      206:     int32_t state;
1.1.1.9   root      207:     uint8_t setup_buf[8];
1.1.1.12  root      208:     uint8_t data_buf[4096];
1.1.1.11  root      209:     int32_t remote_wakeup;
                    210:     int32_t setup_state;
                    211:     int32_t setup_len;
                    212:     int32_t setup_index;
                    213: 
1.1.1.14! root      214:     USBEndpoint ep_ctl;
        !           215:     USBEndpoint ep_in[USB_MAX_ENDPOINTS];
        !           216:     USBEndpoint ep_out[USB_MAX_ENDPOINTS];
        !           217: 
1.1.1.11  root      218:     QLIST_HEAD(, USBDescString) strings;
                    219:     const USBDescDevice *device;
1.1.1.14! root      220: 
        !           221:     int configuration;
        !           222:     int ninterfaces;
        !           223:     int altsetting[USB_MAX_INTERFACES];
1.1.1.11  root      224:     const USBDescConfig *config;
1.1.1.14! root      225:     const USBDescIface  *ifaces[USB_MAX_INTERFACES];
1.1.1.9   root      226: };
                    227: 
1.1.1.14! root      228: #define TYPE_USB_DEVICE "usb-device"
        !           229: #define USB_DEVICE(obj) \
        !           230:      OBJECT_CHECK(USBDevice, (obj), TYPE_USB_DEVICE)
        !           231: #define USB_DEVICE_CLASS(klass) \
        !           232:      OBJECT_CLASS_CHECK(USBDeviceClass, (klass), TYPE_USB_DEVICE)
        !           233: #define USB_DEVICE_GET_CLASS(obj) \
        !           234:      OBJECT_GET_CLASS(USBDeviceClass, (obj), TYPE_USB_DEVICE)
        !           235: 
        !           236: typedef struct USBDeviceClass {
        !           237:     DeviceClass parent_class;
        !           238: 
1.1.1.9   root      239:     int (*init)(USBDevice *dev);
                    240: 
                    241:     /*
1.1.1.14! root      242:      * Walk (enabled) downstream ports, check for a matching device.
        !           243:      * Only hubs implement this.
1.1.1.9   root      244:      */
1.1.1.14! root      245:     USBDevice *(*find_device)(USBDevice *dev, uint8_t addr);
1.1.1.6   root      246: 
1.1.1.9   root      247:     /*
1.1.1.12  root      248:      * Called when a packet is canceled.
                    249:      */
                    250:     void (*cancel_packet)(USBDevice *dev, USBPacket *p);
                    251: 
                    252:     /*
1.1.1.6   root      253:      * Called when device is destroyed.
                    254:      */
1.1.1.3   root      255:     void (*handle_destroy)(USBDevice *dev);
                    256: 
1.1.1.6   root      257:     /*
1.1.1.11  root      258:      * Attach the device
                    259:      */
                    260:     void (*handle_attach)(USBDevice *dev);
                    261: 
                    262:     /*
1.1.1.6   root      263:      * Reset the device
1.1.1.9   root      264:      */
1.1       root      265:     void (*handle_reset)(USBDevice *dev);
1.1.1.6   root      266: 
                    267:     /*
                    268:      * Process control request.
                    269:      * Called from handle_packet().
                    270:      *
                    271:      * Returns length or one of the USB_RET_ codes.
                    272:      */
1.1.1.12  root      273:     int (*handle_control)(USBDevice *dev, USBPacket *p, int request, int value,
1.1       root      274:                           int index, int length, uint8_t *data);
1.1.1.6   root      275: 
                    276:     /*
                    277:      * Process data transfers (both BULK and ISOC).
                    278:      * Called from handle_packet().
                    279:      *
                    280:      * Returns length or one of the USB_RET_ codes.
                    281:      */
1.1.1.4   root      282:     int (*handle_data)(USBDevice *dev, USBPacket *p);
1.1.1.6   root      283: 
1.1.1.14! root      284:     void (*set_interface)(USBDevice *dev, int interface,
        !           285:                           int alt_old, int alt_new);
        !           286: 
1.1.1.9   root      287:     const char *product_desc;
1.1.1.11  root      288:     const USBDesc *usb_desc;
1.1.1.14! root      289: } USBDeviceClass;
1.1       root      290: 
1.1.1.11  root      291: typedef struct USBPortOps {
                    292:     void (*attach)(USBPort *port);
                    293:     void (*detach)(USBPort *port);
1.1.1.12  root      294:     /*
                    295:      * This gets called when a device downstream from the device attached to
                    296:      * the port (iow attached through a hub) gets detached.
                    297:      */
                    298:     void (*child_detach)(USBPort *port, USBDevice *child);
                    299:     void (*wakeup)(USBPort *port);
                    300:     /*
                    301:      * Note that port->dev will be different then the device from which
1.1.1.14! root      302:      * the packet originated when a hub is involved.
1.1.1.12  root      303:      */
                    304:     void (*complete)(USBPort *port, USBPacket *p);
1.1.1.11  root      305: } USBPortOps;
1.1.1.3   root      306: 
1.1       root      307: /* USB port on which a device can be connected */
                    308: struct USBPort {
                    309:     USBDevice *dev;
1.1.1.11  root      310:     int speedmask;
                    311:     char path[16];
                    312:     USBPortOps *ops;
1.1       root      313:     void *opaque;
                    314:     int index; /* internal port index, may be used with the opaque */
1.1.1.9   root      315:     QTAILQ_ENTRY(USBPort) next;
1.1       root      316: };
                    317: 
1.1.1.4   root      318: typedef void USBCallback(USBPacket * packet, void *opaque);
                    319: 
1.1.1.14! root      320: typedef enum USBPacketState {
        !           321:     USB_PACKET_UNDEFINED = 0,
        !           322:     USB_PACKET_SETUP,
        !           323:     USB_PACKET_QUEUED,
        !           324:     USB_PACKET_ASYNC,
        !           325:     USB_PACKET_COMPLETE,
        !           326:     USB_PACKET_CANCELED,
        !           327: } USBPacketState;
        !           328: 
1.1.1.4   root      329: /* Structure used to hold information about an active USB packet.  */
                    330: struct USBPacket {
                    331:     /* Data fields for use by the driver.  */
                    332:     int pid;
1.1.1.14! root      333:     USBEndpoint *ep;
1.1.1.13  root      334:     QEMUIOVector iov;
1.1.1.14! root      335:     uint64_t parameter; /* control transfers */
1.1.1.13  root      336:     int result; /* transfer length or USB_RET_* status code */
1.1.1.4   root      337:     /* Internal use by the USB layer.  */
1.1.1.14! root      338:     USBPacketState state;
        !           339:     QTAILQ_ENTRY(USBPacket) queue;
1.1.1.4   root      340: };
                    341: 
1.1.1.13  root      342: void usb_packet_init(USBPacket *p);
1.1.1.14! root      343: void usb_packet_set_state(USBPacket *p, USBPacketState state);
        !           344: void usb_packet_check_state(USBPacket *p, USBPacketState expected);
        !           345: void usb_packet_setup(USBPacket *p, int pid, USBEndpoint *ep);
1.1.1.13  root      346: void usb_packet_addbuf(USBPacket *p, void *ptr, size_t len);
                    347: int usb_packet_map(USBPacket *p, QEMUSGList *sgl);
                    348: void usb_packet_unmap(USBPacket *p);
                    349: void usb_packet_copy(USBPacket *p, void *ptr, size_t bytes);
                    350: void usb_packet_skip(USBPacket *p, size_t bytes);
                    351: void usb_packet_cleanup(USBPacket *p);
                    352: 
1.1.1.14! root      353: static inline bool usb_packet_is_inflight(USBPacket *p)
        !           354: {
        !           355:     return (p->state == USB_PACKET_QUEUED ||
        !           356:             p->state == USB_PACKET_ASYNC);
        !           357: }
        !           358: 
        !           359: USBDevice *usb_find_device(USBPort *port, uint8_t addr);
        !           360: 
1.1.1.12  root      361: int usb_handle_packet(USBDevice *dev, USBPacket *p);
                    362: void usb_packet_complete(USBDevice *dev, USBPacket *p);
                    363: void usb_cancel_packet(USBPacket * p);
1.1.1.4   root      364: 
1.1.1.14! root      365: void usb_ep_init(USBDevice *dev);
        !           366: void usb_ep_dump(USBDevice *dev);
        !           367: struct USBEndpoint *usb_ep_get(USBDevice *dev, int pid, int ep);
        !           368: uint8_t usb_ep_get_type(USBDevice *dev, int pid, int ep);
        !           369: uint8_t usb_ep_get_ifnum(USBDevice *dev, int pid, int ep);
        !           370: void usb_ep_set_type(USBDevice *dev, int pid, int ep, uint8_t type);
        !           371: void usb_ep_set_ifnum(USBDevice *dev, int pid, int ep, uint8_t ifnum);
        !           372: void usb_ep_set_max_packet_size(USBDevice *dev, int pid, int ep,
        !           373:                                 uint16_t raw);
        !           374: int usb_ep_get_max_packet_size(USBDevice *dev, int pid, int ep);
        !           375: void usb_ep_set_pipeline(USBDevice *dev, int pid, int ep, bool enabled);
        !           376: 
1.1.1.13  root      377: void usb_attach(USBPort *port);
                    378: void usb_detach(USBPort *port);
1.1.1.14! root      379: void usb_port_reset(USBPort *port);
        !           380: void usb_device_reset(USBDevice *dev);
        !           381: void usb_wakeup(USBEndpoint *ep);
1.1.1.12  root      382: void usb_generic_async_ctrl_complete(USBDevice *s, USBPacket *p);
1.1       root      383: int set_usb_string(uint8_t *buf, const char *str);
1.1.1.4   root      384: 
1.1       root      385: /* usb-linux.c */
1.1.1.14! root      386: USBDevice *usb_host_device_open(USBBus *bus, const char *devname);
1.1.1.6   root      387: int usb_host_device_close(const char *devname);
1.1.1.8   root      388: void usb_host_info(Monitor *mon);
1.1       root      389: 
1.1.1.6   root      390: /* usb-bt.c */
1.1.1.14! root      391: USBDevice *usb_bt_init(USBBus *bus, HCIInfo *hci);
1.1.1.6   root      392: 
1.1.1.5   root      393: /* usb ports of the VM */
                    394: 
                    395: #define VM_USB_HUB_SIZE 8
                    396: 
1.1.1.6   root      397: /* usb-musb.c */
                    398: enum musb_irq_source_e {
                    399:     musb_irq_suspend = 0,
                    400:     musb_irq_resume,
                    401:     musb_irq_rst_babble,
                    402:     musb_irq_sof,
                    403:     musb_irq_connect,
                    404:     musb_irq_disconnect,
                    405:     musb_irq_vbus_request,
                    406:     musb_irq_vbus_error,
                    407:     musb_irq_rx,
                    408:     musb_irq_tx,
                    409:     musb_set_vbus,
                    410:     musb_set_session,
1.1.1.13  root      411:     /* Add new interrupts here */
                    412:     musb_irq_max, /* total number of interrupts defined */
1.1.1.6   root      413: };
                    414: 
1.1.1.8   root      415: typedef struct MUSBState MUSBState;
1.1.1.13  root      416: MUSBState *musb_init(DeviceState *parent_device, int gpio_base);
                    417: void musb_reset(MUSBState *s);
1.1.1.8   root      418: uint32_t musb_core_intr_get(MUSBState *s);
                    419: void musb_core_intr_clear(MUSBState *s, uint32_t mask);
                    420: void musb_set_size(MUSBState *s, int epnum, int size, int is_tx);
1.1.1.9   root      421: 
                    422: /* usb-bus.c */
                    423: 
                    424: struct USBBus {
                    425:     BusState qbus;
1.1.1.12  root      426:     USBBusOps *ops;
1.1.1.9   root      427:     int busnr;
                    428:     int nfree;
                    429:     int nused;
                    430:     QTAILQ_HEAD(, USBPort) free;
                    431:     QTAILQ_HEAD(, USBPort) used;
                    432:     QTAILQ_ENTRY(USBBus) next;
                    433: };
                    434: 
1.1.1.12  root      435: struct USBBusOps {
                    436:     int (*register_companion)(USBBus *bus, USBPort *ports[],
                    437:                               uint32_t portcount, uint32_t firstport);
1.1.1.14! root      438:     void (*wakeup_endpoint)(USBBus *bus, USBEndpoint *ep);
1.1.1.12  root      439: };
                    440: 
                    441: void usb_bus_new(USBBus *bus, USBBusOps *ops, DeviceState *host);
1.1.1.9   root      442: USBBus *usb_bus_find(int busnr);
1.1.1.14! root      443: void usb_legacy_register(const char *typename, const char *usbdevice_name,
        !           444:                          USBDevice *(*usbdevice_init)(USBBus *bus,
        !           445:                                                       const char *params));
1.1.1.9   root      446: USBDevice *usb_create(USBBus *bus, const char *name);
                    447: USBDevice *usb_create_simple(USBBus *bus, const char *name);
                    448: USBDevice *usbdevice_create(const char *cmdline);
                    449: void usb_register_port(USBBus *bus, USBPort *port, void *opaque, int index,
1.1.1.11  root      450:                        USBPortOps *ops, int speedmask);
1.1.1.12  root      451: int usb_register_companion(const char *masterbus, USBPort *ports[],
                    452:                            uint32_t portcount, uint32_t firstport,
                    453:                            void *opaque, USBPortOps *ops, int speedmask);
1.1.1.11  root      454: void usb_port_location(USBPort *downstream, USBPort *upstream, int portnr);
1.1.1.9   root      455: void usb_unregister_port(USBBus *bus, USBPort *port);
1.1.1.13  root      456: int usb_claim_port(USBDevice *dev);
                    457: void usb_release_port(USBDevice *dev);
1.1.1.9   root      458: int usb_device_attach(USBDevice *dev);
                    459: int usb_device_detach(USBDevice *dev);
                    460: int usb_device_delete_addr(int busnr, int addr);
                    461: 
                    462: static inline USBBus *usb_bus_from_device(USBDevice *d)
                    463: {
                    464:     return DO_UPCAST(USBBus, qbus, d->qdev.parent_bus);
                    465: }
1.1.1.14! root      466: 
        !           467: extern const VMStateDescription vmstate_usb_device;
        !           468: 
        !           469: #define VMSTATE_USB_DEVICE(_field, _state) {                         \
        !           470:     .name       = (stringify(_field)),                               \
        !           471:     .size       = sizeof(USBDevice),                                 \
        !           472:     .vmsd       = &vmstate_usb_device,                               \
        !           473:     .flags      = VMS_STRUCT,                                        \
        !           474:     .offset     = vmstate_offset_value(_state, _field, USBDevice),   \
        !           475: }
        !           476: 
        !           477: USBDevice *usb_device_find_device(USBDevice *dev, uint8_t addr);
        !           478: 
        !           479: void usb_device_cancel_packet(USBDevice *dev, USBPacket *p);
        !           480: 
        !           481: void usb_device_handle_attach(USBDevice *dev);
        !           482: 
        !           483: void usb_device_handle_reset(USBDevice *dev);
        !           484: 
        !           485: int usb_device_handle_control(USBDevice *dev, USBPacket *p, int request, int value,
        !           486:                               int index, int length, uint8_t *data);
        !           487: 
        !           488: int usb_device_handle_data(USBDevice *dev, USBPacket *p);
        !           489: 
        !           490: void usb_device_set_interface(USBDevice *dev, int interface,
        !           491:                               int alt_old, int alt_new);
        !           492: 
        !           493: const char *usb_device_get_product_desc(USBDevice *dev);
        !           494: 
        !           495: const USBDesc *usb_device_get_usb_desc(USBDevice *dev);
        !           496: 
        !           497: #endif
        !           498: 

unix.superglobalmegacorp.com

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