cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

usual-tables.c (2831B)


      1// SPDX-License-Identifier: GPL-2.0+
      2/*
      3 * Driver for USB Mass Storage devices
      4 * Usual Tables File for usb-storage and libusual
      5 *
      6 * Copyright (C) 2009 Alan Stern (stern@rowland.harvard.edu)
      7 */
      8
      9#include <linux/kernel.h>
     10#include <linux/module.h>
     11#include <linux/usb.h>
     12#include <linux/usb_usual.h>
     13
     14
     15/*
     16 * The table of devices
     17 */
     18#define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \
     19		    vendorName, productName, useProtocol, useTransport, \
     20		    initFunction, flags) \
     21{ USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
     22  .driver_info = (flags) }
     23
     24#define COMPLIANT_DEV	UNUSUAL_DEV
     25
     26#define USUAL_DEV(useProto, useTrans) \
     27{ USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, useProto, useTrans) }
     28
     29/* Define the device is matched with Vendor ID and interface descriptors */
     30#define UNUSUAL_VENDOR_INTF(id_vendor, cl, sc, pr, \
     31			vendorName, productName, useProtocol, useTransport, \
     32			initFunction, flags) \
     33{ \
     34	.match_flags = USB_DEVICE_ID_MATCH_INT_INFO \
     35				| USB_DEVICE_ID_MATCH_VENDOR, \
     36	.idVendor    = (id_vendor), \
     37	.bInterfaceClass = (cl), \
     38	.bInterfaceSubClass = (sc), \
     39	.bInterfaceProtocol = (pr), \
     40	.driver_info = (flags) \
     41}
     42
     43const struct usb_device_id usb_storage_usb_ids[] = {
     44#	include "unusual_devs.h"
     45	{ }		/* Terminating entry */
     46};
     47MODULE_DEVICE_TABLE(usb, usb_storage_usb_ids);
     48
     49#undef UNUSUAL_DEV
     50#undef COMPLIANT_DEV
     51#undef USUAL_DEV
     52#undef UNUSUAL_VENDOR_INTF
     53
     54/*
     55 * The table of devices to ignore
     56 */
     57struct ignore_entry {
     58	u16	vid, pid, bcdmin, bcdmax;
     59};
     60
     61#define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \
     62		    vendorName, productName, useProtocol, useTransport, \
     63		    initFunction, flags) \
     64{					\
     65	.vid	= id_vendor,		\
     66	.pid 	= id_product,		\
     67	.bcdmin	= bcdDeviceMin,		\
     68	.bcdmax = bcdDeviceMax,		\
     69}
     70
     71static const struct ignore_entry ignore_ids[] = {
     72#	include "unusual_alauda.h"
     73#	include "unusual_cypress.h"
     74#	include "unusual_datafab.h"
     75#	include "unusual_ene_ub6250.h"
     76#	include "unusual_freecom.h"
     77#	include "unusual_isd200.h"
     78#	include "unusual_jumpshot.h"
     79#	include "unusual_karma.h"
     80#	include "unusual_onetouch.h"
     81#	include "unusual_realtek.h"
     82#	include "unusual_sddr09.h"
     83#	include "unusual_sddr55.h"
     84#	include "unusual_usbat.h"
     85	{ }		/* Terminating entry */
     86};
     87
     88#undef UNUSUAL_DEV
     89
     90/* Return an error if a device is in the ignore_ids list */
     91int usb_usual_ignore_device(struct usb_interface *intf)
     92{
     93	struct usb_device *udev;
     94	unsigned vid, pid, bcd;
     95	const struct ignore_entry *p;
     96
     97	udev = interface_to_usbdev(intf);
     98	vid = le16_to_cpu(udev->descriptor.idVendor);
     99	pid = le16_to_cpu(udev->descriptor.idProduct);
    100	bcd = le16_to_cpu(udev->descriptor.bcdDevice);
    101
    102	for (p = ignore_ids; p->vid; ++p) {
    103		if (p->vid == vid && p->pid == pid &&
    104				p->bcdmin <= bcd && p->bcdmax >= bcd)
    105			return -ENXIO;
    106	}
    107	return 0;
    108}