qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

quirks.c (1813B)


      1 /*
      2  * USB quirk handling
      3  *
      4  * Copyright (c) 2012 Red Hat, Inc.
      5  *
      6  * Red Hat Authors:
      7  * Hans de Goede <hdegoede@redhat.com>
      8  *
      9  * This program is free software; you can redistribute it and/or modify
     10  * it under the terms of the GNU General Public License as published by
     11  * the Free Software Foundation; either version 2 of the License, or
     12  * (at your option) any later version.
     13  */
     14 
     15 #include "qemu/osdep.h"
     16 #include "quirks.h"
     17 #include "hw/usb.h"
     18 
     19 static bool usb_id_match(const struct usb_device_id *ids,
     20                          uint16_t vendor_id, uint16_t product_id,
     21                          uint8_t interface_class, uint8_t interface_subclass,
     22                          uint8_t interface_protocol) {
     23     int i;
     24 
     25     for (i = 0; ids[i].terminating_entry == 0; i++) {
     26         if (ids[i].vendor_id  == vendor_id &&
     27             ids[i].product_id == product_id &&
     28             (ids[i].interface_protocol_used == 0 ||
     29              (ids[i].interface_class == interface_class &&
     30               ids[i].interface_subclass == interface_subclass &&
     31               ids[i].interface_protocol == interface_protocol))) {
     32             return true;
     33         }
     34     }
     35     return false;
     36 }
     37 
     38 int usb_get_quirks(uint16_t vendor_id, uint16_t product_id,
     39                    uint8_t interface_class, uint8_t interface_subclass,
     40                    uint8_t interface_protocol)
     41 {
     42     int quirks = 0;
     43 
     44     if (usb_id_match(usbredir_raw_serial_ids, vendor_id, product_id,
     45                    interface_class, interface_subclass, interface_protocol)) {
     46         quirks |= USB_QUIRK_BUFFER_BULK_IN;
     47     }
     48     if (usb_id_match(usbredir_ftdi_serial_ids, vendor_id, product_id,
     49                    interface_class, interface_subclass, interface_protocol)) {
     50         quirks |= USB_QUIRK_BUFFER_BULK_IN | USB_QUIRK_IS_FTDI;
     51     }
     52 
     53     return quirks;
     54 }