LCOV - code coverage report
Current view: top level - drivers/usb/storage - usual-tables.c (source / functions) Hit Total Coverage
Test: gcov_data_raspi2_real_modules_combined.info Lines: 0 7 0.0 %
Date: 2020-09-30 20:25:40 Functions: 0 1 0.0 %
Branches: 0 10 0.0 %

           Branch data     Line data    Source code
       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                 :            : 
      43                 :            : struct usb_device_id usb_storage_usb_ids[] = {
      44                 :            : #       include "unusual_devs.h"
      45                 :            :         { }             /* Terminating entry */
      46                 :            : };
      47                 :            : MODULE_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                 :            :  */
      57                 :            : struct 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                 :            : 
      71                 :            : static 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 */
      91                 :          0 : int usb_usual_ignore_device(struct usb_interface *intf)
      92                 :            : {
      93                 :            :         struct usb_device *udev;
      94                 :            :         unsigned vid, pid, bcd;
      95                 :            :         struct ignore_entry *p;
      96                 :            : 
      97                 :            :         udev = interface_to_usbdev(intf);
      98                 :          0 :         vid = le16_to_cpu(udev->descriptor.idVendor);
      99                 :          0 :         pid = le16_to_cpu(udev->descriptor.idProduct);
     100                 :          0 :         bcd = le16_to_cpu(udev->descriptor.bcdDevice);
     101                 :            : 
     102         [ #  # ]:          0 :         for (p = ignore_ids; p->vid; ++p) {
     103   [ #  #  #  #  :          0 :                 if (p->vid == vid && p->pid == pid &&
                   #  # ]
     104         [ #  # ]:          0 :                                 p->bcdmin <= bcd && p->bcdmax >= bcd)
     105                 :            :                         return -ENXIO;
     106                 :            :         }
     107                 :            :         return 0;
     108                 :            : }

Generated by: LCOV version 1.14