| /* | 
 |  * USB quirk handling | 
 |  * | 
 |  * Copyright (c) 2012 Red Hat, Inc. | 
 |  * | 
 |  * Red Hat Authors: | 
 |  * Hans de Goede <hdegoede@redhat.com> | 
 |  * | 
 |  * This program is free software; you can redistribute it and/or modify | 
 |  * it under the terms of the GNU General Public License as published by | 
 |  * the Free Software Foundation; either version 2 of the License, or | 
 |  * (at your option) any later version. | 
 |  */ | 
 |  | 
 | #include "qemu/osdep.h" | 
 | #include "quirks.h" | 
 | #include "hw/usb.h" | 
 |  | 
 | static bool usb_id_match(const struct usb_device_id *ids, | 
 |                          uint16_t vendor_id, uint16_t product_id, | 
 |                          uint8_t interface_class, uint8_t interface_subclass, | 
 |                          uint8_t interface_protocol) { | 
 |     int i; | 
 |  | 
 |     for (i = 0; ids[i].terminating_entry == 0; i++) { | 
 |         if (ids[i].vendor_id  == vendor_id && | 
 |             ids[i].product_id == product_id && | 
 |             (ids[i].interface_protocol_used == 0 || | 
 |              (ids[i].interface_class == interface_class && | 
 |               ids[i].interface_subclass == interface_subclass && | 
 |               ids[i].interface_protocol == interface_protocol))) { | 
 |             return true; | 
 |         } | 
 |     } | 
 |     return false; | 
 | } | 
 |  | 
 | int usb_get_quirks(uint16_t vendor_id, uint16_t product_id, | 
 |                    uint8_t interface_class, uint8_t interface_subclass, | 
 |                    uint8_t interface_protocol) | 
 | { | 
 |     int quirks = 0; | 
 |  | 
 |     if (usb_id_match(usbredir_raw_serial_ids, vendor_id, product_id, | 
 |                    interface_class, interface_subclass, interface_protocol)) { | 
 |         quirks |= USB_QUIRK_BUFFER_BULK_IN; | 
 |     } | 
 |     if (usb_id_match(usbredir_ftdi_serial_ids, vendor_id, product_id, | 
 |                    interface_class, interface_subclass, interface_protocol)) { | 
 |         quirks |= USB_QUIRK_BUFFER_BULK_IN | USB_QUIRK_IS_FTDI; | 
 |     } | 
 |  | 
 |     return quirks; | 
 | } |