cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

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
     19static 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
     38int 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}