LCOV - code coverage report
Current view: top level - drivers/hid - hid-core.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 20 1091 1.8 %
Date: 2022-12-09 01:23:36 Functions: 3 82 3.7 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0-or-later
       2             : /*
       3             :  *  HID support for Linux
       4             :  *
       5             :  *  Copyright (c) 1999 Andreas Gal
       6             :  *  Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz>
       7             :  *  Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc
       8             :  *  Copyright (c) 2006-2012 Jiri Kosina
       9             :  */
      10             : 
      11             : /*
      12             :  */
      13             : 
      14             : #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
      15             : 
      16             : #include <linux/module.h>
      17             : #include <linux/slab.h>
      18             : #include <linux/init.h>
      19             : #include <linux/kernel.h>
      20             : #include <linux/list.h>
      21             : #include <linux/mm.h>
      22             : #include <linux/spinlock.h>
      23             : #include <asm/unaligned.h>
      24             : #include <asm/byteorder.h>
      25             : #include <linux/input.h>
      26             : #include <linux/wait.h>
      27             : #include <linux/vmalloc.h>
      28             : #include <linux/sched.h>
      29             : #include <linux/semaphore.h>
      30             : 
      31             : #include <linux/hid.h>
      32             : #include <linux/hiddev.h>
      33             : #include <linux/hid-debug.h>
      34             : #include <linux/hidraw.h>
      35             : 
      36             : #include "hid-ids.h"
      37             : 
      38             : /*
      39             :  * Version Information
      40             :  */
      41             : 
      42             : #define DRIVER_DESC "HID core driver"
      43             : 
      44             : int hid_debug = 0;
      45             : module_param_named(debug, hid_debug, int, 0600);
      46             : MODULE_PARM_DESC(debug, "toggle HID debugging messages");
      47             : EXPORT_SYMBOL_GPL(hid_debug);
      48             : 
      49             : static int hid_ignore_special_drivers = 0;
      50             : module_param_named(ignore_special_drivers, hid_ignore_special_drivers, int, 0600);
      51             : MODULE_PARM_DESC(ignore_special_drivers, "Ignore any special drivers and handle all devices by generic driver");
      52             : 
      53             : /*
      54             :  * Register a new report for a device.
      55             :  */
      56             : 
      57           0 : struct hid_report *hid_register_report(struct hid_device *device,
      58             :                                        unsigned int type, unsigned int id,
      59             :                                        unsigned int application)
      60             : {
      61           0 :         struct hid_report_enum *report_enum = device->report_enum + type;
      62             :         struct hid_report *report;
      63             : 
      64           0 :         if (id >= HID_MAX_IDS)
      65             :                 return NULL;
      66           0 :         if (report_enum->report_id_hash[id])
      67             :                 return report_enum->report_id_hash[id];
      68             : 
      69           0 :         report = kzalloc(sizeof(struct hid_report), GFP_KERNEL);
      70           0 :         if (!report)
      71             :                 return NULL;
      72             : 
      73           0 :         if (id != 0)
      74           0 :                 report_enum->numbered = 1;
      75             : 
      76           0 :         report->id = id;
      77           0 :         report->type = type;
      78           0 :         report->size = 0;
      79           0 :         report->device = device;
      80           0 :         report->application = application;
      81           0 :         report_enum->report_id_hash[id] = report;
      82             : 
      83           0 :         list_add_tail(&report->list, &report_enum->report_list);
      84           0 :         INIT_LIST_HEAD(&report->field_entry_list);
      85             : 
      86           0 :         return report;
      87             : }
      88             : EXPORT_SYMBOL_GPL(hid_register_report);
      89             : 
      90             : /*
      91             :  * Register a new field for this report.
      92             :  */
      93             : 
      94           0 : static struct hid_field *hid_register_field(struct hid_report *report, unsigned usages)
      95             : {
      96             :         struct hid_field *field;
      97             : 
      98           0 :         if (report->maxfield == HID_MAX_FIELDS) {
      99           0 :                 hid_err(report->device, "too many fields in report\n");
     100           0 :                 return NULL;
     101             :         }
     102             : 
     103           0 :         field = kzalloc((sizeof(struct hid_field) +
     104           0 :                          usages * sizeof(struct hid_usage) +
     105           0 :                          3 * usages * sizeof(unsigned int)), GFP_KERNEL);
     106           0 :         if (!field)
     107             :                 return NULL;
     108             : 
     109           0 :         field->index = report->maxfield++;
     110           0 :         report->field[field->index] = field;
     111           0 :         field->usage = (struct hid_usage *)(field + 1);
     112           0 :         field->value = (s32 *)(field->usage + usages);
     113           0 :         field->new_value = (s32 *)(field->value + usages);
     114           0 :         field->usages_priorities = (s32 *)(field->new_value + usages);
     115           0 :         field->report = report;
     116             : 
     117           0 :         return field;
     118             : }
     119             : 
     120             : /*
     121             :  * Open a collection. The type/usage is pushed on the stack.
     122             :  */
     123             : 
     124           0 : static int open_collection(struct hid_parser *parser, unsigned type)
     125             : {
     126             :         struct hid_collection *collection;
     127             :         unsigned usage;
     128             :         int collection_index;
     129             : 
     130           0 :         usage = parser->local.usage[0];
     131             : 
     132           0 :         if (parser->collection_stack_ptr == parser->collection_stack_size) {
     133             :                 unsigned int *collection_stack;
     134           0 :                 unsigned int new_size = parser->collection_stack_size +
     135             :                                         HID_COLLECTION_STACK_SIZE;
     136             : 
     137           0 :                 collection_stack = krealloc(parser->collection_stack,
     138             :                                             new_size * sizeof(unsigned int),
     139             :                                             GFP_KERNEL);
     140           0 :                 if (!collection_stack)
     141             :                         return -ENOMEM;
     142             : 
     143           0 :                 parser->collection_stack = collection_stack;
     144           0 :                 parser->collection_stack_size = new_size;
     145             :         }
     146             : 
     147           0 :         if (parser->device->maxcollection == parser->device->collection_size) {
     148           0 :                 collection = kmalloc(
     149             :                                 array3_size(sizeof(struct hid_collection),
     150             :                                             parser->device->collection_size,
     151             :                                             2),
     152             :                                 GFP_KERNEL);
     153           0 :                 if (collection == NULL) {
     154           0 :                         hid_err(parser->device, "failed to reallocate collection array\n");
     155           0 :                         return -ENOMEM;
     156             :                 }
     157           0 :                 memcpy(collection, parser->device->collection,
     158             :                         sizeof(struct hid_collection) *
     159           0 :                         parser->device->collection_size);
     160           0 :                 memset(collection + parser->device->collection_size, 0,
     161             :                         sizeof(struct hid_collection) *
     162           0 :                         parser->device->collection_size);
     163           0 :                 kfree(parser->device->collection);
     164           0 :                 parser->device->collection = collection;
     165           0 :                 parser->device->collection_size *= 2;
     166             :         }
     167             : 
     168           0 :         parser->collection_stack[parser->collection_stack_ptr++] =
     169           0 :                 parser->device->maxcollection;
     170             : 
     171           0 :         collection_index = parser->device->maxcollection++;
     172           0 :         collection = parser->device->collection + collection_index;
     173           0 :         collection->type = type;
     174           0 :         collection->usage = usage;
     175           0 :         collection->level = parser->collection_stack_ptr - 1;
     176           0 :         collection->parent_idx = (collection->level == 0) ? -1 :
     177           0 :                 parser->collection_stack[collection->level - 1];
     178             : 
     179           0 :         if (type == HID_COLLECTION_APPLICATION)
     180           0 :                 parser->device->maxapplication++;
     181             : 
     182             :         return 0;
     183             : }
     184             : 
     185             : /*
     186             :  * Close a collection.
     187             :  */
     188             : 
     189             : static int close_collection(struct hid_parser *parser)
     190             : {
     191           0 :         if (!parser->collection_stack_ptr) {
     192           0 :                 hid_err(parser->device, "collection stack underflow\n");
     193             :                 return -EINVAL;
     194             :         }
     195           0 :         parser->collection_stack_ptr--;
     196             :         return 0;
     197             : }
     198             : 
     199             : /*
     200             :  * Climb up the stack, search for the specified collection type
     201             :  * and return the usage.
     202             :  */
     203             : 
     204             : static unsigned hid_lookup_collection(struct hid_parser *parser, unsigned type)
     205             : {
     206           0 :         struct hid_collection *collection = parser->device->collection;
     207             :         int n;
     208             : 
     209           0 :         for (n = parser->collection_stack_ptr - 1; n >= 0; n--) {
     210           0 :                 unsigned index = parser->collection_stack[n];
     211           0 :                 if (collection[index].type == type)
     212           0 :                         return collection[index].usage;
     213             :         }
     214             :         return 0; /* we know nothing about this usage type */
     215             : }
     216             : 
     217             : /*
     218             :  * Concatenate usage which defines 16 bits or less with the
     219             :  * currently defined usage page to form a 32 bit usage
     220             :  */
     221             : 
     222             : static void complete_usage(struct hid_parser *parser, unsigned int index)
     223             : {
     224           0 :         parser->local.usage[index] &= 0xFFFF;
     225           0 :         parser->local.usage[index] |=
     226           0 :                 (parser->global.usage_page & 0xFFFF) << 16;
     227             : }
     228             : 
     229             : /*
     230             :  * Add a usage to the temporary parser table.
     231             :  */
     232             : 
     233           0 : static int hid_add_usage(struct hid_parser *parser, unsigned usage, u8 size)
     234             : {
     235           0 :         if (parser->local.usage_index >= HID_MAX_USAGES) {
     236           0 :                 hid_err(parser->device, "usage index exceeded\n");
     237           0 :                 return -1;
     238             :         }
     239           0 :         parser->local.usage[parser->local.usage_index] = usage;
     240             : 
     241             :         /*
     242             :          * If Usage item only includes usage id, concatenate it with
     243             :          * currently defined usage page
     244             :          */
     245           0 :         if (size <= 2)
     246           0 :                 complete_usage(parser, parser->local.usage_index);
     247             : 
     248           0 :         parser->local.usage_size[parser->local.usage_index] = size;
     249           0 :         parser->local.collection_index[parser->local.usage_index] =
     250           0 :                 parser->collection_stack_ptr ?
     251           0 :                 parser->collection_stack[parser->collection_stack_ptr - 1] : 0;
     252           0 :         parser->local.usage_index++;
     253           0 :         return 0;
     254             : }
     255             : 
     256             : /*
     257             :  * Register a new field for this report.
     258             :  */
     259             : 
     260           0 : static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsigned flags)
     261             : {
     262             :         struct hid_report *report;
     263             :         struct hid_field *field;
     264             :         unsigned int usages;
     265             :         unsigned int offset;
     266             :         unsigned int i;
     267             :         unsigned int application;
     268             : 
     269           0 :         application = hid_lookup_collection(parser, HID_COLLECTION_APPLICATION);
     270             : 
     271           0 :         report = hid_register_report(parser->device, report_type,
     272             :                                      parser->global.report_id, application);
     273           0 :         if (!report) {
     274           0 :                 hid_err(parser->device, "hid_register_report failed\n");
     275           0 :                 return -1;
     276             :         }
     277             : 
     278             :         /* Handle both signed and unsigned cases properly */
     279           0 :         if ((parser->global.logical_minimum < 0 &&
     280           0 :                 parser->global.logical_maximum <
     281           0 :                 parser->global.logical_minimum) ||
     282           0 :                 (parser->global.logical_minimum >= 0 &&
     283           0 :                 (__u32)parser->global.logical_maximum <
     284           0 :                 (__u32)parser->global.logical_minimum)) {
     285           0 :                 dbg_hid("logical range invalid 0x%x 0x%x\n",
     286             :                         parser->global.logical_minimum,
     287             :                         parser->global.logical_maximum);
     288             :                 return -1;
     289             :         }
     290             : 
     291           0 :         offset = report->size;
     292           0 :         report->size += parser->global.report_size * parser->global.report_count;
     293             : 
     294             :         /* Total size check: Allow for possible report index byte */
     295           0 :         if (report->size > (HID_MAX_BUFFER_SIZE - 1) << 3) {
     296           0 :                 hid_err(parser->device, "report is too long\n");
     297           0 :                 return -1;
     298             :         }
     299             : 
     300           0 :         if (!parser->local.usage_index) /* Ignore padding fields */
     301             :                 return 0;
     302             : 
     303           0 :         usages = max_t(unsigned, parser->local.usage_index,
     304             :                                  parser->global.report_count);
     305             : 
     306           0 :         field = hid_register_field(report, usages);
     307           0 :         if (!field)
     308             :                 return 0;
     309             : 
     310           0 :         field->physical = hid_lookup_collection(parser, HID_COLLECTION_PHYSICAL);
     311           0 :         field->logical = hid_lookup_collection(parser, HID_COLLECTION_LOGICAL);
     312           0 :         field->application = application;
     313             : 
     314           0 :         for (i = 0; i < usages; i++) {
     315           0 :                 unsigned j = i;
     316             :                 /* Duplicate the last usage we parsed if we have excess values */
     317           0 :                 if (i >= parser->local.usage_index)
     318           0 :                         j = parser->local.usage_index - 1;
     319           0 :                 field->usage[i].hid = parser->local.usage[j];
     320           0 :                 field->usage[i].collection_index =
     321           0 :                         parser->local.collection_index[j];
     322           0 :                 field->usage[i].usage_index = i;
     323           0 :                 field->usage[i].resolution_multiplier = 1;
     324             :         }
     325             : 
     326           0 :         field->maxusage = usages;
     327           0 :         field->flags = flags;
     328           0 :         field->report_offset = offset;
     329           0 :         field->report_type = report_type;
     330           0 :         field->report_size = parser->global.report_size;
     331           0 :         field->report_count = parser->global.report_count;
     332           0 :         field->logical_minimum = parser->global.logical_minimum;
     333           0 :         field->logical_maximum = parser->global.logical_maximum;
     334           0 :         field->physical_minimum = parser->global.physical_minimum;
     335           0 :         field->physical_maximum = parser->global.physical_maximum;
     336           0 :         field->unit_exponent = parser->global.unit_exponent;
     337           0 :         field->unit = parser->global.unit;
     338             : 
     339           0 :         return 0;
     340             : }
     341             : 
     342             : /*
     343             :  * Read data value from item.
     344             :  */
     345             : 
     346             : static u32 item_udata(struct hid_item *item)
     347             : {
     348           0 :         switch (item->size) {
     349           0 :         case 1: return item->data.u8;
     350           0 :         case 2: return item->data.u16;
     351           0 :         case 4: return item->data.u32;
     352             :         }
     353             :         return 0;
     354             : }
     355             : 
     356             : static s32 item_sdata(struct hid_item *item)
     357             : {
     358           0 :         switch (item->size) {
     359           0 :         case 1: return item->data.s8;
     360           0 :         case 2: return item->data.s16;
     361           0 :         case 4: return item->data.s32;
     362             :         }
     363             :         return 0;
     364             : }
     365             : 
     366             : /*
     367             :  * Process a global item.
     368             :  */
     369             : 
     370           0 : static int hid_parser_global(struct hid_parser *parser, struct hid_item *item)
     371             : {
     372             :         __s32 raw_value;
     373           0 :         switch (item->tag) {
     374             :         case HID_GLOBAL_ITEM_TAG_PUSH:
     375             : 
     376           0 :                 if (parser->global_stack_ptr == HID_GLOBAL_STACK_SIZE) {
     377           0 :                         hid_err(parser->device, "global environment stack overflow\n");
     378           0 :                         return -1;
     379             :                 }
     380             : 
     381           0 :                 memcpy(parser->global_stack + parser->global_stack_ptr++,
     382           0 :                         &parser->global, sizeof(struct hid_global));
     383           0 :                 return 0;
     384             : 
     385             :         case HID_GLOBAL_ITEM_TAG_POP:
     386             : 
     387           0 :                 if (!parser->global_stack_ptr) {
     388           0 :                         hid_err(parser->device, "global environment stack underflow\n");
     389           0 :                         return -1;
     390             :                 }
     391             : 
     392           0 :                 memcpy(&parser->global, parser->global_stack +
     393           0 :                         --parser->global_stack_ptr, sizeof(struct hid_global));
     394           0 :                 return 0;
     395             : 
     396             :         case HID_GLOBAL_ITEM_TAG_USAGE_PAGE:
     397           0 :                 parser->global.usage_page = item_udata(item);
     398           0 :                 return 0;
     399             : 
     400             :         case HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM:
     401           0 :                 parser->global.logical_minimum = item_sdata(item);
     402           0 :                 return 0;
     403             : 
     404             :         case HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM:
     405           0 :                 if (parser->global.logical_minimum < 0)
     406           0 :                         parser->global.logical_maximum = item_sdata(item);
     407             :                 else
     408           0 :                         parser->global.logical_maximum = item_udata(item);
     409             :                 return 0;
     410             : 
     411             :         case HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM:
     412           0 :                 parser->global.physical_minimum = item_sdata(item);
     413           0 :                 return 0;
     414             : 
     415             :         case HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM:
     416           0 :                 if (parser->global.physical_minimum < 0)
     417           0 :                         parser->global.physical_maximum = item_sdata(item);
     418             :                 else
     419           0 :                         parser->global.physical_maximum = item_udata(item);
     420             :                 return 0;
     421             : 
     422             :         case HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT:
     423             :                 /* Many devices provide unit exponent as a two's complement
     424             :                  * nibble due to the common misunderstanding of HID
     425             :                  * specification 1.11, 6.2.2.7 Global Items. Attempt to handle
     426             :                  * both this and the standard encoding. */
     427           0 :                 raw_value = item_sdata(item);
     428           0 :                 if (!(raw_value & 0xfffffff0))
     429           0 :                         parser->global.unit_exponent = hid_snto32(raw_value, 4);
     430             :                 else
     431           0 :                         parser->global.unit_exponent = raw_value;
     432             :                 return 0;
     433             : 
     434             :         case HID_GLOBAL_ITEM_TAG_UNIT:
     435           0 :                 parser->global.unit = item_udata(item);
     436           0 :                 return 0;
     437             : 
     438             :         case HID_GLOBAL_ITEM_TAG_REPORT_SIZE:
     439           0 :                 parser->global.report_size = item_udata(item);
     440           0 :                 if (parser->global.report_size > 256) {
     441           0 :                         hid_err(parser->device, "invalid report_size %d\n",
     442             :                                         parser->global.report_size);
     443           0 :                         return -1;
     444             :                 }
     445             :                 return 0;
     446             : 
     447             :         case HID_GLOBAL_ITEM_TAG_REPORT_COUNT:
     448           0 :                 parser->global.report_count = item_udata(item);
     449           0 :                 if (parser->global.report_count > HID_MAX_USAGES) {
     450           0 :                         hid_err(parser->device, "invalid report_count %d\n",
     451             :                                         parser->global.report_count);
     452           0 :                         return -1;
     453             :                 }
     454             :                 return 0;
     455             : 
     456             :         case HID_GLOBAL_ITEM_TAG_REPORT_ID:
     457           0 :                 parser->global.report_id = item_udata(item);
     458           0 :                 if (parser->global.report_id == 0 ||
     459             :                     parser->global.report_id >= HID_MAX_IDS) {
     460           0 :                         hid_err(parser->device, "report_id %u is invalid\n",
     461             :                                 parser->global.report_id);
     462           0 :                         return -1;
     463             :                 }
     464             :                 return 0;
     465             : 
     466             :         default:
     467           0 :                 hid_err(parser->device, "unknown global tag 0x%x\n", item->tag);
     468           0 :                 return -1;
     469             :         }
     470             : }
     471             : 
     472             : /*
     473             :  * Process a local item.
     474             :  */
     475             : 
     476           0 : static int hid_parser_local(struct hid_parser *parser, struct hid_item *item)
     477             : {
     478             :         __u32 data;
     479             :         unsigned n;
     480             :         __u32 count;
     481             : 
     482           0 :         data = item_udata(item);
     483             : 
     484           0 :         switch (item->tag) {
     485             :         case HID_LOCAL_ITEM_TAG_DELIMITER:
     486             : 
     487           0 :                 if (data) {
     488             :                         /*
     489             :                          * We treat items before the first delimiter
     490             :                          * as global to all usage sets (branch 0).
     491             :                          * In the moment we process only these global
     492             :                          * items and the first delimiter set.
     493             :                          */
     494           0 :                         if (parser->local.delimiter_depth != 0) {
     495           0 :                                 hid_err(parser->device, "nested delimiters\n");
     496           0 :                                 return -1;
     497             :                         }
     498           0 :                         parser->local.delimiter_depth++;
     499           0 :                         parser->local.delimiter_branch++;
     500             :                 } else {
     501           0 :                         if (parser->local.delimiter_depth < 1) {
     502           0 :                                 hid_err(parser->device, "bogus close delimiter\n");
     503           0 :                                 return -1;
     504             :                         }
     505           0 :                         parser->local.delimiter_depth--;
     506             :                 }
     507             :                 return 0;
     508             : 
     509             :         case HID_LOCAL_ITEM_TAG_USAGE:
     510             : 
     511           0 :                 if (parser->local.delimiter_branch > 1) {
     512           0 :                         dbg_hid("alternative usage ignored\n");
     513             :                         return 0;
     514             :                 }
     515             : 
     516           0 :                 return hid_add_usage(parser, data, item->size);
     517             : 
     518             :         case HID_LOCAL_ITEM_TAG_USAGE_MINIMUM:
     519             : 
     520           0 :                 if (parser->local.delimiter_branch > 1) {
     521           0 :                         dbg_hid("alternative usage ignored\n");
     522             :                         return 0;
     523             :                 }
     524             : 
     525           0 :                 parser->local.usage_minimum = data;
     526           0 :                 return 0;
     527             : 
     528             :         case HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM:
     529             : 
     530           0 :                 if (parser->local.delimiter_branch > 1) {
     531           0 :                         dbg_hid("alternative usage ignored\n");
     532             :                         return 0;
     533             :                 }
     534             : 
     535           0 :                 count = data - parser->local.usage_minimum;
     536           0 :                 if (count + parser->local.usage_index >= HID_MAX_USAGES) {
     537             :                         /*
     538             :                          * We do not warn if the name is not set, we are
     539             :                          * actually pre-scanning the device.
     540             :                          */
     541           0 :                         if (dev_name(&parser->device->dev))
     542           0 :                                 hid_warn(parser->device,
     543             :                                          "ignoring exceeding usage max\n");
     544           0 :                         data = HID_MAX_USAGES - parser->local.usage_index +
     545           0 :                                 parser->local.usage_minimum - 1;
     546           0 :                         if (data <= 0) {
     547           0 :                                 hid_err(parser->device,
     548             :                                         "no more usage index available\n");
     549           0 :                                 return -1;
     550             :                         }
     551             :                 }
     552             : 
     553           0 :                 for (n = parser->local.usage_minimum; n <= data; n++)
     554           0 :                         if (hid_add_usage(parser, n, item->size)) {
     555           0 :                                 dbg_hid("hid_add_usage failed\n");
     556             :                                 return -1;
     557             :                         }
     558             :                 return 0;
     559             : 
     560             :         default:
     561             : 
     562           0 :                 dbg_hid("unknown local item tag 0x%x\n", item->tag);
     563             :                 return 0;
     564             :         }
     565             :         return 0;
     566             : }
     567             : 
     568             : /*
     569             :  * Concatenate Usage Pages into Usages where relevant:
     570             :  * As per specification, 6.2.2.8: "When the parser encounters a main item it
     571             :  * concatenates the last declared Usage Page with a Usage to form a complete
     572             :  * usage value."
     573             :  */
     574             : 
     575           0 : static void hid_concatenate_last_usage_page(struct hid_parser *parser)
     576             : {
     577             :         int i;
     578             :         unsigned int usage_page;
     579             :         unsigned int current_page;
     580             : 
     581           0 :         if (!parser->local.usage_index)
     582             :                 return;
     583             : 
     584           0 :         usage_page = parser->global.usage_page;
     585             : 
     586             :         /*
     587             :          * Concatenate usage page again only if last declared Usage Page
     588             :          * has not been already used in previous usages concatenation
     589             :          */
     590           0 :         for (i = parser->local.usage_index - 1; i >= 0; i--) {
     591           0 :                 if (parser->local.usage_size[i] > 2)
     592             :                         /* Ignore extended usages */
     593           0 :                         continue;
     594             : 
     595           0 :                 current_page = parser->local.usage[i] >> 16;
     596           0 :                 if (current_page == usage_page)
     597             :                         break;
     598             : 
     599           0 :                 complete_usage(parser, i);
     600             :         }
     601             : }
     602             : 
     603             : /*
     604             :  * Process a main item.
     605             :  */
     606             : 
     607           0 : static int hid_parser_main(struct hid_parser *parser, struct hid_item *item)
     608             : {
     609             :         __u32 data;
     610             :         int ret;
     611             : 
     612           0 :         hid_concatenate_last_usage_page(parser);
     613             : 
     614           0 :         data = item_udata(item);
     615             : 
     616           0 :         switch (item->tag) {
     617             :         case HID_MAIN_ITEM_TAG_BEGIN_COLLECTION:
     618           0 :                 ret = open_collection(parser, data & 0xff);
     619           0 :                 break;
     620             :         case HID_MAIN_ITEM_TAG_END_COLLECTION:
     621           0 :                 ret = close_collection(parser);
     622             :                 break;
     623             :         case HID_MAIN_ITEM_TAG_INPUT:
     624           0 :                 ret = hid_add_field(parser, HID_INPUT_REPORT, data);
     625           0 :                 break;
     626             :         case HID_MAIN_ITEM_TAG_OUTPUT:
     627           0 :                 ret = hid_add_field(parser, HID_OUTPUT_REPORT, data);
     628           0 :                 break;
     629             :         case HID_MAIN_ITEM_TAG_FEATURE:
     630           0 :                 ret = hid_add_field(parser, HID_FEATURE_REPORT, data);
     631           0 :                 break;
     632             :         default:
     633           0 :                 hid_warn(parser->device, "unknown main item tag 0x%x\n", item->tag);
     634           0 :                 ret = 0;
     635             :         }
     636             : 
     637           0 :         memset(&parser->local, 0, sizeof(parser->local));     /* Reset the local parser environment */
     638             : 
     639           0 :         return ret;
     640             : }
     641             : 
     642             : /*
     643             :  * Process a reserved item.
     644             :  */
     645             : 
     646           0 : static int hid_parser_reserved(struct hid_parser *parser, struct hid_item *item)
     647             : {
     648           0 :         dbg_hid("reserved item type, tag 0x%x\n", item->tag);
     649           0 :         return 0;
     650             : }
     651             : 
     652             : /*
     653             :  * Free a report and all registered fields. The field->usage and
     654             :  * field->value table's are allocated behind the field, so we need
     655             :  * only to free(field) itself.
     656             :  */
     657             : 
     658           0 : static void hid_free_report(struct hid_report *report)
     659             : {
     660             :         unsigned n;
     661             : 
     662           0 :         kfree(report->field_entries);
     663             : 
     664           0 :         for (n = 0; n < report->maxfield; n++)
     665           0 :                 kfree(report->field[n]);
     666           0 :         kfree(report);
     667           0 : }
     668             : 
     669             : /*
     670             :  * Close report. This function returns the device
     671             :  * state to the point prior to hid_open_report().
     672             :  */
     673           0 : static void hid_close_report(struct hid_device *device)
     674             : {
     675             :         unsigned i, j;
     676             : 
     677           0 :         for (i = 0; i < HID_REPORT_TYPES; i++) {
     678           0 :                 struct hid_report_enum *report_enum = device->report_enum + i;
     679             : 
     680           0 :                 for (j = 0; j < HID_MAX_IDS; j++) {
     681           0 :                         struct hid_report *report = report_enum->report_id_hash[j];
     682           0 :                         if (report)
     683           0 :                                 hid_free_report(report);
     684             :                 }
     685           0 :                 memset(report_enum, 0, sizeof(*report_enum));
     686           0 :                 INIT_LIST_HEAD(&report_enum->report_list);
     687             :         }
     688             : 
     689           0 :         kfree(device->rdesc);
     690           0 :         device->rdesc = NULL;
     691           0 :         device->rsize = 0;
     692             : 
     693           0 :         kfree(device->collection);
     694           0 :         device->collection = NULL;
     695           0 :         device->collection_size = 0;
     696           0 :         device->maxcollection = 0;
     697           0 :         device->maxapplication = 0;
     698             : 
     699           0 :         device->status &= ~HID_STAT_PARSED;
     700           0 : }
     701             : 
     702             : /*
     703             :  * Free a device structure, all reports, and all fields.
     704             :  */
     705             : 
     706           0 : static void hid_device_release(struct device *dev)
     707             : {
     708           0 :         struct hid_device *hid = to_hid_device(dev);
     709             : 
     710           0 :         hid_close_report(hid);
     711           0 :         kfree(hid->dev_rdesc);
     712           0 :         kfree(hid);
     713           0 : }
     714             : 
     715             : /*
     716             :  * Fetch a report description item from the data stream. We support long
     717             :  * items, though they are not used yet.
     718             :  */
     719             : 
     720           0 : static u8 *fetch_item(__u8 *start, __u8 *end, struct hid_item *item)
     721             : {
     722             :         u8 b;
     723             : 
     724           0 :         if ((end - start) <= 0)
     725             :                 return NULL;
     726             : 
     727           0 :         b = *start++;
     728             : 
     729           0 :         item->type = (b >> 2) & 3;
     730           0 :         item->tag  = (b >> 4) & 15;
     731             : 
     732           0 :         if (item->tag == HID_ITEM_TAG_LONG) {
     733             : 
     734           0 :                 item->format = HID_ITEM_FORMAT_LONG;
     735             : 
     736           0 :                 if ((end - start) < 2)
     737             :                         return NULL;
     738             : 
     739           0 :                 item->size = *start++;
     740           0 :                 item->tag  = *start++;
     741             : 
     742           0 :                 if ((end - start) < item->size)
     743             :                         return NULL;
     744             : 
     745           0 :                 item->data.longdata = start;
     746           0 :                 start += item->size;
     747           0 :                 return start;
     748             :         }
     749             : 
     750           0 :         item->format = HID_ITEM_FORMAT_SHORT;
     751           0 :         item->size = b & 3;
     752             : 
     753           0 :         switch (item->size) {
     754             :         case 0:
     755             :                 return start;
     756             : 
     757             :         case 1:
     758           0 :                 if ((end - start) < 1)
     759             :                         return NULL;
     760           0 :                 item->data.u8 = *start++;
     761           0 :                 return start;
     762             : 
     763             :         case 2:
     764           0 :                 if ((end - start) < 2)
     765             :                         return NULL;
     766           0 :                 item->data.u16 = get_unaligned_le16(start);
     767           0 :                 start = (__u8 *)((__le16 *)start + 1);
     768           0 :                 return start;
     769             : 
     770             :         case 3:
     771           0 :                 item->size++;
     772           0 :                 if ((end - start) < 4)
     773             :                         return NULL;
     774           0 :                 item->data.u32 = get_unaligned_le32(start);
     775           0 :                 start = (__u8 *)((__le32 *)start + 1);
     776           0 :                 return start;
     777             :         }
     778             : 
     779           0 :         return NULL;
     780             : }
     781             : 
     782             : static void hid_scan_input_usage(struct hid_parser *parser, u32 usage)
     783             : {
     784           0 :         struct hid_device *hid = parser->device;
     785             : 
     786           0 :         if (usage == HID_DG_CONTACTID)
     787           0 :                 hid->group = HID_GROUP_MULTITOUCH;
     788             : }
     789             : 
     790             : static void hid_scan_feature_usage(struct hid_parser *parser, u32 usage)
     791             : {
     792           0 :         if (usage == 0xff0000c5 && parser->global.report_count == 256 &&
     793             :             parser->global.report_size == 8)
     794           0 :                 parser->scan_flags |= HID_SCAN_FLAG_MT_WIN_8;
     795             : 
     796           0 :         if (usage == 0xff0000c6 && parser->global.report_count == 1 &&
     797             :             parser->global.report_size == 8)
     798           0 :                 parser->scan_flags |= HID_SCAN_FLAG_MT_WIN_8;
     799             : }
     800             : 
     801           0 : static void hid_scan_collection(struct hid_parser *parser, unsigned type)
     802             : {
     803           0 :         struct hid_device *hid = parser->device;
     804             :         int i;
     805             : 
     806           0 :         if (((parser->global.usage_page << 16) == HID_UP_SENSOR) &&
     807             :             type == HID_COLLECTION_PHYSICAL)
     808           0 :                 hid->group = HID_GROUP_SENSOR_HUB;
     809             : 
     810           0 :         if (hid->vendor == USB_VENDOR_ID_MICROSOFT &&
     811           0 :             hid->product == USB_DEVICE_ID_MS_POWER_COVER &&
     812           0 :             hid->group == HID_GROUP_MULTITOUCH)
     813           0 :                 hid->group = HID_GROUP_GENERIC;
     814             : 
     815           0 :         if ((parser->global.usage_page << 16) == HID_UP_GENDESK)
     816           0 :                 for (i = 0; i < parser->local.usage_index; i++)
     817           0 :                         if (parser->local.usage[i] == HID_GD_POINTER)
     818           0 :                                 parser->scan_flags |= HID_SCAN_FLAG_GD_POINTER;
     819             : 
     820           0 :         if ((parser->global.usage_page << 16) >= HID_UP_MSVENDOR)
     821           0 :                 parser->scan_flags |= HID_SCAN_FLAG_VENDOR_SPECIFIC;
     822             : 
     823           0 :         if ((parser->global.usage_page << 16) == HID_UP_GOOGLEVENDOR)
     824           0 :                 for (i = 0; i < parser->local.usage_index; i++)
     825           0 :                         if (parser->local.usage[i] ==
     826             :                                         (HID_UP_GOOGLEVENDOR | 0x0001))
     827           0 :                                 parser->device->group =
     828             :                                         HID_GROUP_VIVALDI;
     829           0 : }
     830             : 
     831           0 : static int hid_scan_main(struct hid_parser *parser, struct hid_item *item)
     832             : {
     833             :         __u32 data;
     834             :         int i;
     835             : 
     836           0 :         hid_concatenate_last_usage_page(parser);
     837             : 
     838           0 :         data = item_udata(item);
     839             : 
     840           0 :         switch (item->tag) {
     841             :         case HID_MAIN_ITEM_TAG_BEGIN_COLLECTION:
     842           0 :                 hid_scan_collection(parser, data & 0xff);
     843           0 :                 break;
     844             :         case HID_MAIN_ITEM_TAG_END_COLLECTION:
     845             :                 break;
     846             :         case HID_MAIN_ITEM_TAG_INPUT:
     847             :                 /* ignore constant inputs, they will be ignored by hid-input */
     848           0 :                 if (data & HID_MAIN_ITEM_CONSTANT)
     849             :                         break;
     850           0 :                 for (i = 0; i < parser->local.usage_index; i++)
     851           0 :                         hid_scan_input_usage(parser, parser->local.usage[i]);
     852             :                 break;
     853             :         case HID_MAIN_ITEM_TAG_OUTPUT:
     854             :                 break;
     855             :         case HID_MAIN_ITEM_TAG_FEATURE:
     856           0 :                 for (i = 0; i < parser->local.usage_index; i++)
     857           0 :                         hid_scan_feature_usage(parser, parser->local.usage[i]);
     858             :                 break;
     859             :         }
     860             : 
     861             :         /* Reset the local parser environment */
     862           0 :         memset(&parser->local, 0, sizeof(parser->local));
     863             : 
     864           0 :         return 0;
     865             : }
     866             : 
     867             : /*
     868             :  * Scan a report descriptor before the device is added to the bus.
     869             :  * Sets device groups and other properties that determine what driver
     870             :  * to load.
     871             :  */
     872           0 : static int hid_scan_report(struct hid_device *hid)
     873             : {
     874             :         struct hid_parser *parser;
     875             :         struct hid_item item;
     876           0 :         __u8 *start = hid->dev_rdesc;
     877           0 :         __u8 *end = start + hid->dev_rsize;
     878             :         static int (*dispatch_type[])(struct hid_parser *parser,
     879             :                                       struct hid_item *item) = {
     880             :                 hid_scan_main,
     881             :                 hid_parser_global,
     882             :                 hid_parser_local,
     883             :                 hid_parser_reserved
     884             :         };
     885             : 
     886           0 :         parser = vzalloc(sizeof(struct hid_parser));
     887           0 :         if (!parser)
     888             :                 return -ENOMEM;
     889             : 
     890           0 :         parser->device = hid;
     891           0 :         hid->group = HID_GROUP_GENERIC;
     892             : 
     893             :         /*
     894             :          * The parsing is simpler than the one in hid_open_report() as we should
     895             :          * be robust against hid errors. Those errors will be raised by
     896             :          * hid_open_report() anyway.
     897             :          */
     898           0 :         while ((start = fetch_item(start, end, &item)) != NULL)
     899           0 :                 dispatch_type[item.type](parser, &item);
     900             : 
     901             :         /*
     902             :          * Handle special flags set during scanning.
     903             :          */
     904           0 :         if ((parser->scan_flags & HID_SCAN_FLAG_MT_WIN_8) &&
     905           0 :             (hid->group == HID_GROUP_MULTITOUCH))
     906           0 :                 hid->group = HID_GROUP_MULTITOUCH_WIN_8;
     907             : 
     908             :         /*
     909             :          * Vendor specific handlings
     910             :          */
     911           0 :         switch (hid->vendor) {
     912             :         case USB_VENDOR_ID_WACOM:
     913           0 :                 hid->group = HID_GROUP_WACOM;
     914           0 :                 break;
     915             :         case USB_VENDOR_ID_SYNAPTICS:
     916           0 :                 if (hid->group == HID_GROUP_GENERIC)
     917           0 :                         if ((parser->scan_flags & HID_SCAN_FLAG_VENDOR_SPECIFIC)
     918             :                             && (parser->scan_flags & HID_SCAN_FLAG_GD_POINTER))
     919             :                                 /*
     920             :                                  * hid-rmi should take care of them,
     921             :                                  * not hid-generic
     922             :                                  */
     923           0 :                                 hid->group = HID_GROUP_RMI;
     924             :                 break;
     925             :         }
     926             : 
     927           0 :         kfree(parser->collection_stack);
     928           0 :         vfree(parser);
     929           0 :         return 0;
     930             : }
     931             : 
     932             : /**
     933             :  * hid_parse_report - parse device report
     934             :  *
     935             :  * @hid: hid device
     936             :  * @start: report start
     937             :  * @size: report size
     938             :  *
     939             :  * Allocate the device report as read by the bus driver. This function should
     940             :  * only be called from parse() in ll drivers.
     941             :  */
     942           0 : int hid_parse_report(struct hid_device *hid, __u8 *start, unsigned size)
     943             : {
     944           0 :         hid->dev_rdesc = kmemdup(start, size, GFP_KERNEL);
     945           0 :         if (!hid->dev_rdesc)
     946             :                 return -ENOMEM;
     947           0 :         hid->dev_rsize = size;
     948           0 :         return 0;
     949             : }
     950             : EXPORT_SYMBOL_GPL(hid_parse_report);
     951             : 
     952             : static const char * const hid_report_names[] = {
     953             :         "HID_INPUT_REPORT",
     954             :         "HID_OUTPUT_REPORT",
     955             :         "HID_FEATURE_REPORT",
     956             : };
     957             : /**
     958             :  * hid_validate_values - validate existing device report's value indexes
     959             :  *
     960             :  * @hid: hid device
     961             :  * @type: which report type to examine
     962             :  * @id: which report ID to examine (0 for first)
     963             :  * @field_index: which report field to examine
     964             :  * @report_counts: expected number of values
     965             :  *
     966             :  * Validate the number of values in a given field of a given report, after
     967             :  * parsing.
     968             :  */
     969           0 : struct hid_report *hid_validate_values(struct hid_device *hid,
     970             :                                        unsigned int type, unsigned int id,
     971             :                                        unsigned int field_index,
     972             :                                        unsigned int report_counts)
     973             : {
     974             :         struct hid_report *report;
     975             : 
     976           0 :         if (type > HID_FEATURE_REPORT) {
     977           0 :                 hid_err(hid, "invalid HID report type %u\n", type);
     978           0 :                 return NULL;
     979             :         }
     980             : 
     981           0 :         if (id >= HID_MAX_IDS) {
     982           0 :                 hid_err(hid, "invalid HID report id %u\n", id);
     983           0 :                 return NULL;
     984             :         }
     985             : 
     986             :         /*
     987             :          * Explicitly not using hid_get_report() here since it depends on
     988             :          * ->numbered being checked, which may not always be the case when
     989             :          * drivers go to access report values.
     990             :          */
     991           0 :         if (id == 0) {
     992             :                 /*
     993             :                  * Validating on id 0 means we should examine the first
     994             :                  * report in the list.
     995             :                  */
     996           0 :                 report = list_entry(
     997             :                                 hid->report_enum[type].report_list.next,
     998             :                                 struct hid_report, list);
     999             :         } else {
    1000           0 :                 report = hid->report_enum[type].report_id_hash[id];
    1001             :         }
    1002           0 :         if (!report) {
    1003           0 :                 hid_err(hid, "missing %s %u\n", hid_report_names[type], id);
    1004           0 :                 return NULL;
    1005             :         }
    1006           0 :         if (report->maxfield <= field_index) {
    1007           0 :                 hid_err(hid, "not enough fields in %s %u\n",
    1008             :                         hid_report_names[type], id);
    1009           0 :                 return NULL;
    1010             :         }
    1011           0 :         if (report->field[field_index]->report_count < report_counts) {
    1012           0 :                 hid_err(hid, "not enough values in %s %u field %u\n",
    1013             :                         hid_report_names[type], id, field_index);
    1014           0 :                 return NULL;
    1015             :         }
    1016             :         return report;
    1017             : }
    1018             : EXPORT_SYMBOL_GPL(hid_validate_values);
    1019             : 
    1020           0 : static int hid_calculate_multiplier(struct hid_device *hid,
    1021             :                                      struct hid_field *multiplier)
    1022             : {
    1023             :         int m;
    1024           0 :         __s32 v = *multiplier->value;
    1025           0 :         __s32 lmin = multiplier->logical_minimum;
    1026           0 :         __s32 lmax = multiplier->logical_maximum;
    1027           0 :         __s32 pmin = multiplier->physical_minimum;
    1028           0 :         __s32 pmax = multiplier->physical_maximum;
    1029             : 
    1030             :         /*
    1031             :          * "Because OS implementations will generally divide the control's
    1032             :          * reported count by the Effective Resolution Multiplier, designers
    1033             :          * should take care not to establish a potential Effective
    1034             :          * Resolution Multiplier of zero."
    1035             :          * HID Usage Table, v1.12, Section 4.3.1, p31
    1036             :          */
    1037           0 :         if (lmax - lmin == 0)
    1038             :                 return 1;
    1039             :         /*
    1040             :          * Handling the unit exponent is left as an exercise to whoever
    1041             :          * finds a device where that exponent is not 0.
    1042             :          */
    1043           0 :         m = ((v - lmin)/(lmax - lmin) * (pmax - pmin) + pmin);
    1044           0 :         if (unlikely(multiplier->unit_exponent != 0)) {
    1045           0 :                 hid_warn(hid,
    1046             :                          "unsupported Resolution Multiplier unit exponent %d\n",
    1047             :                          multiplier->unit_exponent);
    1048             :         }
    1049             : 
    1050             :         /* There are no devices with an effective multiplier > 255 */
    1051           0 :         if (unlikely(m == 0 || m > 255 || m < -255)) {
    1052           0 :                 hid_warn(hid, "unsupported Resolution Multiplier %d\n", m);
    1053           0 :                 m = 1;
    1054             :         }
    1055             : 
    1056             :         return m;
    1057             : }
    1058             : 
    1059           0 : static void hid_apply_multiplier_to_field(struct hid_device *hid,
    1060             :                                           struct hid_field *field,
    1061             :                                           struct hid_collection *multiplier_collection,
    1062             :                                           int effective_multiplier)
    1063             : {
    1064             :         struct hid_collection *collection;
    1065             :         struct hid_usage *usage;
    1066             :         int i;
    1067             : 
    1068             :         /*
    1069             :          * If multiplier_collection is NULL, the multiplier applies
    1070             :          * to all fields in the report.
    1071             :          * Otherwise, it is the Logical Collection the multiplier applies to
    1072             :          * but our field may be in a subcollection of that collection.
    1073             :          */
    1074           0 :         for (i = 0; i < field->maxusage; i++) {
    1075           0 :                 usage = &field->usage[i];
    1076             : 
    1077           0 :                 collection = &hid->collection[usage->collection_index];
    1078           0 :                 while (collection->parent_idx != -1 &&
    1079             :                        collection != multiplier_collection)
    1080           0 :                         collection = &hid->collection[collection->parent_idx];
    1081             : 
    1082           0 :                 if (collection->parent_idx != -1 ||
    1083             :                     multiplier_collection == NULL)
    1084           0 :                         usage->resolution_multiplier = effective_multiplier;
    1085             : 
    1086             :         }
    1087           0 : }
    1088             : 
    1089           0 : static void hid_apply_multiplier(struct hid_device *hid,
    1090             :                                  struct hid_field *multiplier)
    1091             : {
    1092             :         struct hid_report_enum *rep_enum;
    1093             :         struct hid_report *rep;
    1094             :         struct hid_field *field;
    1095             :         struct hid_collection *multiplier_collection;
    1096             :         int effective_multiplier;
    1097             :         int i;
    1098             : 
    1099             :         /*
    1100             :          * "The Resolution Multiplier control must be contained in the same
    1101             :          * Logical Collection as the control(s) to which it is to be applied.
    1102             :          * If no Resolution Multiplier is defined, then the Resolution
    1103             :          * Multiplier defaults to 1.  If more than one control exists in a
    1104             :          * Logical Collection, the Resolution Multiplier is associated with
    1105             :          * all controls in the collection. If no Logical Collection is
    1106             :          * defined, the Resolution Multiplier is associated with all
    1107             :          * controls in the report."
    1108             :          * HID Usage Table, v1.12, Section 4.3.1, p30
    1109             :          *
    1110             :          * Thus, search from the current collection upwards until we find a
    1111             :          * logical collection. Then search all fields for that same parent
    1112             :          * collection. Those are the fields the multiplier applies to.
    1113             :          *
    1114             :          * If we have more than one multiplier, it will overwrite the
    1115             :          * applicable fields later.
    1116             :          */
    1117           0 :         multiplier_collection = &hid->collection[multiplier->usage->collection_index];
    1118           0 :         while (multiplier_collection->parent_idx != -1 &&
    1119           0 :                multiplier_collection->type != HID_COLLECTION_LOGICAL)
    1120           0 :                 multiplier_collection = &hid->collection[multiplier_collection->parent_idx];
    1121             : 
    1122           0 :         effective_multiplier = hid_calculate_multiplier(hid, multiplier);
    1123             : 
    1124           0 :         rep_enum = &hid->report_enum[HID_INPUT_REPORT];
    1125           0 :         list_for_each_entry(rep, &rep_enum->report_list, list) {
    1126           0 :                 for (i = 0; i < rep->maxfield; i++) {
    1127           0 :                         field = rep->field[i];
    1128           0 :                         hid_apply_multiplier_to_field(hid, field,
    1129             :                                                       multiplier_collection,
    1130             :                                                       effective_multiplier);
    1131             :                 }
    1132             :         }
    1133           0 : }
    1134             : 
    1135             : /*
    1136             :  * hid_setup_resolution_multiplier - set up all resolution multipliers
    1137             :  *
    1138             :  * @device: hid device
    1139             :  *
    1140             :  * Search for all Resolution Multiplier Feature Reports and apply their
    1141             :  * value to all matching Input items. This only updates the internal struct
    1142             :  * fields.
    1143             :  *
    1144             :  * The Resolution Multiplier is applied by the hardware. If the multiplier
    1145             :  * is anything other than 1, the hardware will send pre-multiplied events
    1146             :  * so that the same physical interaction generates an accumulated
    1147             :  *      accumulated_value = value * * multiplier
    1148             :  * This may be achieved by sending
    1149             :  * - "value * multiplier" for each event, or
    1150             :  * - "value" but "multiplier" times as frequently, or
    1151             :  * - a combination of the above
    1152             :  * The only guarantee is that the same physical interaction always generates
    1153             :  * an accumulated 'value * multiplier'.
    1154             :  *
    1155             :  * This function must be called before any event processing and after
    1156             :  * any SetRequest to the Resolution Multiplier.
    1157             :  */
    1158           0 : void hid_setup_resolution_multiplier(struct hid_device *hid)
    1159             : {
    1160             :         struct hid_report_enum *rep_enum;
    1161             :         struct hid_report *rep;
    1162             :         struct hid_usage *usage;
    1163             :         int i, j;
    1164             : 
    1165           0 :         rep_enum = &hid->report_enum[HID_FEATURE_REPORT];
    1166           0 :         list_for_each_entry(rep, &rep_enum->report_list, list) {
    1167           0 :                 for (i = 0; i < rep->maxfield; i++) {
    1168             :                         /* Ignore if report count is out of bounds. */
    1169           0 :                         if (rep->field[i]->report_count < 1)
    1170           0 :                                 continue;
    1171             : 
    1172           0 :                         for (j = 0; j < rep->field[i]->maxusage; j++) {
    1173           0 :                                 usage = &rep->field[i]->usage[j];
    1174           0 :                                 if (usage->hid == HID_GD_RESOLUTION_MULTIPLIER)
    1175           0 :                                         hid_apply_multiplier(hid,
    1176             :                                                              rep->field[i]);
    1177             :                         }
    1178             :                 }
    1179             :         }
    1180           0 : }
    1181             : EXPORT_SYMBOL_GPL(hid_setup_resolution_multiplier);
    1182             : 
    1183             : /**
    1184             :  * hid_open_report - open a driver-specific device report
    1185             :  *
    1186             :  * @device: hid device
    1187             :  *
    1188             :  * Parse a report description into a hid_device structure. Reports are
    1189             :  * enumerated, fields are attached to these reports.
    1190             :  * 0 returned on success, otherwise nonzero error value.
    1191             :  *
    1192             :  * This function (or the equivalent hid_parse() macro) should only be
    1193             :  * called from probe() in drivers, before starting the device.
    1194             :  */
    1195           0 : int hid_open_report(struct hid_device *device)
    1196             : {
    1197             :         struct hid_parser *parser;
    1198             :         struct hid_item item;
    1199             :         unsigned int size;
    1200             :         __u8 *start;
    1201             :         __u8 *buf;
    1202             :         __u8 *end;
    1203             :         __u8 *next;
    1204             :         int ret;
    1205             :         static int (*dispatch_type[])(struct hid_parser *parser,
    1206             :                                       struct hid_item *item) = {
    1207             :                 hid_parser_main,
    1208             :                 hid_parser_global,
    1209             :                 hid_parser_local,
    1210             :                 hid_parser_reserved
    1211             :         };
    1212             : 
    1213           0 :         if (WARN_ON(device->status & HID_STAT_PARSED))
    1214             :                 return -EBUSY;
    1215             : 
    1216           0 :         start = device->dev_rdesc;
    1217           0 :         if (WARN_ON(!start))
    1218             :                 return -ENODEV;
    1219           0 :         size = device->dev_rsize;
    1220             : 
    1221           0 :         buf = kmemdup(start, size, GFP_KERNEL);
    1222           0 :         if (buf == NULL)
    1223             :                 return -ENOMEM;
    1224             : 
    1225           0 :         if (device->driver->report_fixup)
    1226           0 :                 start = device->driver->report_fixup(device, buf, &size);
    1227             :         else
    1228             :                 start = buf;
    1229             : 
    1230           0 :         start = kmemdup(start, size, GFP_KERNEL);
    1231           0 :         kfree(buf);
    1232           0 :         if (start == NULL)
    1233             :                 return -ENOMEM;
    1234             : 
    1235           0 :         device->rdesc = start;
    1236           0 :         device->rsize = size;
    1237             : 
    1238           0 :         parser = vzalloc(sizeof(struct hid_parser));
    1239           0 :         if (!parser) {
    1240             :                 ret = -ENOMEM;
    1241             :                 goto alloc_err;
    1242             :         }
    1243             : 
    1244           0 :         parser->device = device;
    1245             : 
    1246           0 :         end = start + size;
    1247             : 
    1248           0 :         device->collection = kcalloc(HID_DEFAULT_NUM_COLLECTIONS,
    1249             :                                      sizeof(struct hid_collection), GFP_KERNEL);
    1250           0 :         if (!device->collection) {
    1251             :                 ret = -ENOMEM;
    1252             :                 goto err;
    1253             :         }
    1254           0 :         device->collection_size = HID_DEFAULT_NUM_COLLECTIONS;
    1255             : 
    1256           0 :         ret = -EINVAL;
    1257           0 :         while ((next = fetch_item(start, end, &item)) != NULL) {
    1258           0 :                 start = next;
    1259             : 
    1260           0 :                 if (item.format != HID_ITEM_FORMAT_SHORT) {
    1261           0 :                         hid_err(device, "unexpected long global item\n");
    1262           0 :                         goto err;
    1263             :                 }
    1264             : 
    1265           0 :                 if (dispatch_type[item.type](parser, &item)) {
    1266           0 :                         hid_err(device, "item %u %u %u %u parsing failed\n",
    1267             :                                 item.format, (unsigned)item.size,
    1268             :                                 (unsigned)item.type, (unsigned)item.tag);
    1269           0 :                         goto err;
    1270             :                 }
    1271             : 
    1272           0 :                 if (start == end) {
    1273           0 :                         if (parser->collection_stack_ptr) {
    1274           0 :                                 hid_err(device, "unbalanced collection at end of report description\n");
    1275           0 :                                 goto err;
    1276             :                         }
    1277           0 :                         if (parser->local.delimiter_depth) {
    1278           0 :                                 hid_err(device, "unbalanced delimiter at end of report description\n");
    1279           0 :                                 goto err;
    1280             :                         }
    1281             : 
    1282             :                         /*
    1283             :                          * fetch initial values in case the device's
    1284             :                          * default multiplier isn't the recommended 1
    1285             :                          */
    1286           0 :                         hid_setup_resolution_multiplier(device);
    1287             : 
    1288           0 :                         kfree(parser->collection_stack);
    1289           0 :                         vfree(parser);
    1290           0 :                         device->status |= HID_STAT_PARSED;
    1291             : 
    1292           0 :                         return 0;
    1293             :                 }
    1294             :         }
    1295             : 
    1296           0 :         hid_err(device, "item fetching failed at offset %u/%u\n",
    1297             :                 size - (unsigned int)(end - start), size);
    1298             : err:
    1299           0 :         kfree(parser->collection_stack);
    1300             : alloc_err:
    1301           0 :         vfree(parser);
    1302           0 :         hid_close_report(device);
    1303           0 :         return ret;
    1304             : }
    1305             : EXPORT_SYMBOL_GPL(hid_open_report);
    1306             : 
    1307             : /*
    1308             :  * Convert a signed n-bit integer to signed 32-bit integer. Common
    1309             :  * cases are done through the compiler, the screwed things has to be
    1310             :  * done by hand.
    1311             :  */
    1312             : 
    1313           0 : static s32 snto32(__u32 value, unsigned n)
    1314             : {
    1315           0 :         if (!value || !n)
    1316             :                 return 0;
    1317             : 
    1318           0 :         switch (n) {
    1319           0 :         case 8:  return ((__s8)value);
    1320           0 :         case 16: return ((__s16)value);
    1321           0 :         case 32: return ((__s32)value);
    1322             :         }
    1323           0 :         return value & (1 << (n - 1)) ? value | (~0U << n) : value;
    1324             : }
    1325             : 
    1326           0 : s32 hid_snto32(__u32 value, unsigned n)
    1327             : {
    1328           0 :         return snto32(value, n);
    1329             : }
    1330             : EXPORT_SYMBOL_GPL(hid_snto32);
    1331             : 
    1332             : /*
    1333             :  * Convert a signed 32-bit integer to a signed n-bit integer.
    1334             :  */
    1335             : 
    1336             : static u32 s32ton(__s32 value, unsigned n)
    1337             : {
    1338           0 :         s32 a = value >> (n - 1);
    1339           0 :         if (a && a != -1)
    1340           0 :                 return value < 0 ? 1 << (n - 1) : (1 << (n - 1)) - 1;
    1341           0 :         return value & ((1 << n) - 1);
    1342             : }
    1343             : 
    1344             : /*
    1345             :  * Extract/implement a data field from/to a little endian report (bit array).
    1346             :  *
    1347             :  * Code sort-of follows HID spec:
    1348             :  *     http://www.usb.org/developers/hidpage/HID1_11.pdf
    1349             :  *
    1350             :  * While the USB HID spec allows unlimited length bit fields in "report
    1351             :  * descriptors", most devices never use more than 16 bits.
    1352             :  * One model of UPS is claimed to report "LINEV" as a 32-bit field.
    1353             :  * Search linux-kernel and linux-usb-devel archives for "hid-core extract".
    1354             :  */
    1355             : 
    1356             : static u32 __extract(u8 *report, unsigned offset, int n)
    1357             : {
    1358           0 :         unsigned int idx = offset / 8;
    1359           0 :         unsigned int bit_nr = 0;
    1360           0 :         unsigned int bit_shift = offset % 8;
    1361           0 :         int bits_to_copy = 8 - bit_shift;
    1362           0 :         u32 value = 0;
    1363           0 :         u32 mask = n < 32 ? (1U << n) - 1 : ~0U;
    1364             : 
    1365           0 :         while (n > 0) {
    1366           0 :                 value |= ((u32)report[idx] >> bit_shift) << bit_nr;
    1367           0 :                 n -= bits_to_copy;
    1368           0 :                 bit_nr += bits_to_copy;
    1369           0 :                 bits_to_copy = 8;
    1370           0 :                 bit_shift = 0;
    1371           0 :                 idx++;
    1372             :         }
    1373             : 
    1374           0 :         return value & mask;
    1375             : }
    1376             : 
    1377           0 : u32 hid_field_extract(const struct hid_device *hid, u8 *report,
    1378             :                         unsigned offset, unsigned n)
    1379             : {
    1380           0 :         if (n > 32) {
    1381           0 :                 hid_warn_once(hid, "%s() called with n (%d) > 32! (%s)\n",
    1382             :                               __func__, n, current->comm);
    1383             :                 n = 32;
    1384             :         }
    1385             : 
    1386           0 :         return __extract(report, offset, n);
    1387             : }
    1388             : EXPORT_SYMBOL_GPL(hid_field_extract);
    1389             : 
    1390             : /*
    1391             :  * "implement" : set bits in a little endian bit stream.
    1392             :  * Same concepts as "extract" (see comments above).
    1393             :  * The data mangled in the bit stream remains in little endian
    1394             :  * order the whole time. It make more sense to talk about
    1395             :  * endianness of register values by considering a register
    1396             :  * a "cached" copy of the little endian bit stream.
    1397             :  */
    1398             : 
    1399           0 : static void __implement(u8 *report, unsigned offset, int n, u32 value)
    1400             : {
    1401           0 :         unsigned int idx = offset / 8;
    1402           0 :         unsigned int bit_shift = offset % 8;
    1403           0 :         int bits_to_set = 8 - bit_shift;
    1404             : 
    1405           0 :         while (n - bits_to_set >= 0) {
    1406           0 :                 report[idx] &= ~(0xff << bit_shift);
    1407           0 :                 report[idx] |= value << bit_shift;
    1408           0 :                 value >>= bits_to_set;
    1409           0 :                 n -= bits_to_set;
    1410           0 :                 bits_to_set = 8;
    1411           0 :                 bit_shift = 0;
    1412           0 :                 idx++;
    1413             :         }
    1414             : 
    1415             :         /* last nibble */
    1416           0 :         if (n) {
    1417           0 :                 u8 bit_mask = ((1U << n) - 1);
    1418           0 :                 report[idx] &= ~(bit_mask << bit_shift);
    1419           0 :                 report[idx] |= value << bit_shift;
    1420             :         }
    1421           0 : }
    1422             : 
    1423           0 : static void implement(const struct hid_device *hid, u8 *report,
    1424             :                       unsigned offset, unsigned n, u32 value)
    1425             : {
    1426           0 :         if (unlikely(n > 32)) {
    1427           0 :                 hid_warn(hid, "%s() called with n (%d) > 32! (%s)\n",
    1428             :                          __func__, n, current->comm);
    1429           0 :                 n = 32;
    1430           0 :         } else if (n < 32) {
    1431           0 :                 u32 m = (1U << n) - 1;
    1432             : 
    1433           0 :                 if (unlikely(value > m)) {
    1434           0 :                         hid_warn(hid,
    1435             :                                  "%s() called with too large value %d (n: %d)! (%s)\n",
    1436             :                                  __func__, value, n, current->comm);
    1437           0 :                         WARN_ON(1);
    1438           0 :                         value &= m;
    1439             :                 }
    1440             :         }
    1441             : 
    1442           0 :         __implement(report, offset, n, value);
    1443           0 : }
    1444             : 
    1445             : /*
    1446             :  * Search an array for a value.
    1447             :  */
    1448             : 
    1449             : static int search(__s32 *array, __s32 value, unsigned n)
    1450             : {
    1451           0 :         while (n--) {
    1452           0 :                 if (*array++ == value)
    1453             :                         return 0;
    1454             :         }
    1455             :         return -1;
    1456             : }
    1457             : 
    1458             : /**
    1459             :  * hid_match_report - check if driver's raw_event should be called
    1460             :  *
    1461             :  * @hid: hid device
    1462             :  * @report: hid report to match against
    1463             :  *
    1464             :  * compare hid->driver->report_table->report_type to report->type
    1465             :  */
    1466             : static int hid_match_report(struct hid_device *hid, struct hid_report *report)
    1467             : {
    1468           0 :         const struct hid_report_id *id = hid->driver->report_table;
    1469             : 
    1470           0 :         if (!id) /* NULL means all */
    1471             :                 return 1;
    1472             : 
    1473           0 :         for (; id->report_type != HID_TERMINATOR; id++)
    1474           0 :                 if (id->report_type == HID_ANY_ID ||
    1475           0 :                                 id->report_type == report->type)
    1476             :                         return 1;
    1477             :         return 0;
    1478             : }
    1479             : 
    1480             : /**
    1481             :  * hid_match_usage - check if driver's event should be called
    1482             :  *
    1483             :  * @hid: hid device
    1484             :  * @usage: usage to match against
    1485             :  *
    1486             :  * compare hid->driver->usage_table->usage_{type,code} to
    1487             :  * usage->usage_{type,code}
    1488             :  */
    1489           0 : static int hid_match_usage(struct hid_device *hid, struct hid_usage *usage)
    1490             : {
    1491           0 :         const struct hid_usage_id *id = hid->driver->usage_table;
    1492             : 
    1493           0 :         if (!id) /* NULL means all */
    1494             :                 return 1;
    1495             : 
    1496           0 :         for (; id->usage_type != HID_ANY_ID - 1; id++)
    1497           0 :                 if ((id->usage_hid == HID_ANY_ID ||
    1498           0 :                                 id->usage_hid == usage->hid) &&
    1499           0 :                                 (id->usage_type == HID_ANY_ID ||
    1500           0 :                                 id->usage_type == usage->type) &&
    1501           0 :                                 (id->usage_code == HID_ANY_ID ||
    1502           0 :                                  id->usage_code == usage->code))
    1503             :                         return 1;
    1504             :         return 0;
    1505             : }
    1506             : 
    1507           0 : static void hid_process_event(struct hid_device *hid, struct hid_field *field,
    1508             :                 struct hid_usage *usage, __s32 value, int interrupt)
    1509             : {
    1510           0 :         struct hid_driver *hdrv = hid->driver;
    1511             :         int ret;
    1512             : 
    1513           0 :         if (!list_empty(&hid->debug_list))
    1514             :                 hid_dump_input(hid, usage, value);
    1515             : 
    1516           0 :         if (hdrv && hdrv->event && hid_match_usage(hid, usage)) {
    1517           0 :                 ret = hdrv->event(hid, field, usage, value);
    1518           0 :                 if (ret != 0) {
    1519           0 :                         if (ret < 0)
    1520           0 :                                 hid_err(hid, "%s's event failed with %d\n",
    1521             :                                                 hdrv->name, ret);
    1522             :                         return;
    1523             :                 }
    1524             :         }
    1525             : 
    1526           0 :         if (hid->claimed & HID_CLAIMED_INPUT)
    1527           0 :                 hidinput_hid_event(hid, field, usage, value);
    1528           0 :         if (hid->claimed & HID_CLAIMED_HIDDEV && interrupt && hid->hiddev_hid_event)
    1529           0 :                 hid->hiddev_hid_event(hid, field, usage, value);
    1530             : }
    1531             : 
    1532             : /*
    1533             :  * Checks if the given value is valid within this field
    1534             :  */
    1535             : static inline int hid_array_value_is_valid(struct hid_field *field,
    1536             :                                            __s32 value)
    1537             : {
    1538           0 :         __s32 min = field->logical_minimum;
    1539             : 
    1540             :         /*
    1541             :          * Value needs to be between logical min and max, and
    1542             :          * (value - min) is used as an index in the usage array.
    1543             :          * This array is of size field->maxusage
    1544             :          */
    1545           0 :         return value >= min &&
    1546           0 :                value <= field->logical_maximum &&
    1547           0 :                value - min < field->maxusage;
    1548             : }
    1549             : 
    1550             : /*
    1551             :  * Fetch the field from the data. The field content is stored for next
    1552             :  * report processing (we do differential reporting to the layer).
    1553             :  */
    1554           0 : static void hid_input_fetch_field(struct hid_device *hid,
    1555             :                                   struct hid_field *field,
    1556             :                                   __u8 *data)
    1557             : {
    1558             :         unsigned n;
    1559           0 :         unsigned count = field->report_count;
    1560           0 :         unsigned offset = field->report_offset;
    1561           0 :         unsigned size = field->report_size;
    1562           0 :         __s32 min = field->logical_minimum;
    1563             :         __s32 *value;
    1564             : 
    1565           0 :         value = field->new_value;
    1566           0 :         memset(value, 0, count * sizeof(__s32));
    1567           0 :         field->ignored = false;
    1568             : 
    1569           0 :         for (n = 0; n < count; n++) {
    1570             : 
    1571           0 :                 value[n] = min < 0 ?
    1572           0 :                         snto32(hid_field_extract(hid, data, offset + n * size,
    1573           0 :                                size), size) :
    1574           0 :                         hid_field_extract(hid, data, offset + n * size, size);
    1575             : 
    1576             :                 /* Ignore report if ErrorRollOver */
    1577           0 :                 if (!(field->flags & HID_MAIN_ITEM_VARIABLE) &&
    1578           0 :                     hid_array_value_is_valid(field, value[n]) &&
    1579           0 :                     field->usage[value[n] - min].hid == HID_UP_KEYBOARD + 1) {
    1580           0 :                         field->ignored = true;
    1581           0 :                         return;
    1582             :                 }
    1583             :         }
    1584             : }
    1585             : 
    1586             : /*
    1587             :  * Process a received variable field.
    1588             :  */
    1589             : 
    1590           0 : static void hid_input_var_field(struct hid_device *hid,
    1591             :                                 struct hid_field *field,
    1592             :                                 int interrupt)
    1593             : {
    1594           0 :         unsigned int count = field->report_count;
    1595           0 :         __s32 *value = field->new_value;
    1596             :         unsigned int n;
    1597             : 
    1598           0 :         for (n = 0; n < count; n++)
    1599           0 :                 hid_process_event(hid,
    1600             :                                   field,
    1601           0 :                                   &field->usage[n],
    1602           0 :                                   value[n],
    1603             :                                   interrupt);
    1604             : 
    1605           0 :         memcpy(field->value, value, count * sizeof(__s32));
    1606           0 : }
    1607             : 
    1608             : /*
    1609             :  * Process a received array field. The field content is stored for
    1610             :  * next report processing (we do differential reporting to the layer).
    1611             :  */
    1612             : 
    1613           0 : static void hid_input_array_field(struct hid_device *hid,
    1614             :                                   struct hid_field *field,
    1615             :                                   int interrupt)
    1616             : {
    1617             :         unsigned int n;
    1618           0 :         unsigned int count = field->report_count;
    1619           0 :         __s32 min = field->logical_minimum;
    1620             :         __s32 *value;
    1621             : 
    1622           0 :         value = field->new_value;
    1623             : 
    1624             :         /* ErrorRollOver */
    1625           0 :         if (field->ignored)
    1626             :                 return;
    1627             : 
    1628           0 :         for (n = 0; n < count; n++) {
    1629           0 :                 if (hid_array_value_is_valid(field, field->value[n]) &&
    1630           0 :                     search(value, field->value[n], count))
    1631           0 :                         hid_process_event(hid,
    1632             :                                           field,
    1633           0 :                                           &field->usage[field->value[n] - min],
    1634             :                                           0,
    1635             :                                           interrupt);
    1636             : 
    1637           0 :                 if (hid_array_value_is_valid(field, value[n]) &&
    1638           0 :                     search(field->value, value[n], count))
    1639           0 :                         hid_process_event(hid,
    1640             :                                           field,
    1641           0 :                                           &field->usage[value[n] - min],
    1642             :                                           1,
    1643             :                                           interrupt);
    1644             :         }
    1645             : 
    1646           0 :         memcpy(field->value, value, count * sizeof(__s32));
    1647             : }
    1648             : 
    1649             : /*
    1650             :  * Analyse a received report, and fetch the data from it. The field
    1651             :  * content is stored for next report processing (we do differential
    1652             :  * reporting to the layer).
    1653             :  */
    1654           0 : static void hid_process_report(struct hid_device *hid,
    1655             :                                struct hid_report *report,
    1656             :                                __u8 *data,
    1657             :                                int interrupt)
    1658             : {
    1659             :         unsigned int a;
    1660             :         struct hid_field_entry *entry;
    1661             :         struct hid_field *field;
    1662             : 
    1663             :         /* first retrieve all incoming values in data */
    1664           0 :         for (a = 0; a < report->maxfield; a++)
    1665           0 :                 hid_input_fetch_field(hid, field = report->field[a], data);
    1666             : 
    1667           0 :         if (!list_empty(&report->field_entry_list)) {
    1668             :                 /* INPUT_REPORT, we have a priority list of fields */
    1669           0 :                 list_for_each_entry(entry,
    1670             :                                     &report->field_entry_list,
    1671             :                                     list) {
    1672           0 :                         field = entry->field;
    1673             : 
    1674           0 :                         if (field->flags & HID_MAIN_ITEM_VARIABLE)
    1675           0 :                                 hid_process_event(hid,
    1676             :                                                   field,
    1677           0 :                                                   &field->usage[entry->index],
    1678           0 :                                                   field->new_value[entry->index],
    1679             :                                                   interrupt);
    1680             :                         else
    1681           0 :                                 hid_input_array_field(hid, field, interrupt);
    1682             :                 }
    1683             : 
    1684             :                 /* we need to do the memcpy at the end for var items */
    1685           0 :                 for (a = 0; a < report->maxfield; a++) {
    1686           0 :                         field = report->field[a];
    1687             : 
    1688           0 :                         if (field->flags & HID_MAIN_ITEM_VARIABLE)
    1689           0 :                                 memcpy(field->value, field->new_value,
    1690           0 :                                        field->report_count * sizeof(__s32));
    1691             :                 }
    1692             :         } else {
    1693             :                 /* FEATURE_REPORT, regular processing */
    1694           0 :                 for (a = 0; a < report->maxfield; a++) {
    1695           0 :                         field = report->field[a];
    1696             : 
    1697           0 :                         if (field->flags & HID_MAIN_ITEM_VARIABLE)
    1698           0 :                                 hid_input_var_field(hid, field, interrupt);
    1699             :                         else
    1700           0 :                                 hid_input_array_field(hid, field, interrupt);
    1701             :                 }
    1702             :         }
    1703           0 : }
    1704             : 
    1705             : /*
    1706             :  * Insert a given usage_index in a field in the list
    1707             :  * of processed usages in the report.
    1708             :  *
    1709             :  * The elements of lower priority score are processed
    1710             :  * first.
    1711             :  */
    1712             : static void __hid_insert_field_entry(struct hid_device *hid,
    1713             :                                      struct hid_report *report,
    1714             :                                      struct hid_field_entry *entry,
    1715             :                                      struct hid_field *field,
    1716             :                                      unsigned int usage_index)
    1717             : {
    1718             :         struct hid_field_entry *next;
    1719             : 
    1720           0 :         entry->field = field;
    1721           0 :         entry->index = usage_index;
    1722           0 :         entry->priority = field->usages_priorities[usage_index];
    1723             : 
    1724             :         /* insert the element at the correct position */
    1725           0 :         list_for_each_entry(next,
    1726             :                             &report->field_entry_list,
    1727             :                             list) {
    1728             :                 /*
    1729             :                  * the priority of our element is strictly higher
    1730             :                  * than the next one, insert it before
    1731             :                  */
    1732           0 :                 if (entry->priority > next->priority) {
    1733           0 :                         list_add_tail(&entry->list, &next->list);
    1734             :                         return;
    1735             :                 }
    1736             :         }
    1737             : 
    1738             :         /* lowest priority score: insert at the end */
    1739           0 :         list_add_tail(&entry->list, &report->field_entry_list);
    1740             : }
    1741             : 
    1742           0 : static void hid_report_process_ordering(struct hid_device *hid,
    1743             :                                         struct hid_report *report)
    1744             : {
    1745             :         struct hid_field *field;
    1746             :         struct hid_field_entry *entries;
    1747             :         unsigned int a, u, usages;
    1748           0 :         unsigned int count = 0;
    1749             : 
    1750             :         /* count the number of individual fields in the report */
    1751           0 :         for (a = 0; a < report->maxfield; a++) {
    1752           0 :                 field = report->field[a];
    1753             : 
    1754           0 :                 if (field->flags & HID_MAIN_ITEM_VARIABLE)
    1755           0 :                         count += field->report_count;
    1756             :                 else
    1757           0 :                         count++;
    1758             :         }
    1759             : 
    1760             :         /* allocate the memory to process the fields */
    1761           0 :         entries = kcalloc(count, sizeof(*entries), GFP_KERNEL);
    1762           0 :         if (!entries)
    1763             :                 return;
    1764             : 
    1765           0 :         report->field_entries = entries;
    1766             : 
    1767             :         /*
    1768             :          * walk through all fields in the report and
    1769             :          * store them by priority order in report->field_entry_list
    1770             :          *
    1771             :          * - Var elements are individualized (field + usage_index)
    1772             :          * - Arrays are taken as one, we can not chose an order for them
    1773             :          */
    1774           0 :         usages = 0;
    1775           0 :         for (a = 0; a < report->maxfield; a++) {
    1776           0 :                 field = report->field[a];
    1777             : 
    1778           0 :                 if (field->flags & HID_MAIN_ITEM_VARIABLE) {
    1779           0 :                         for (u = 0; u < field->report_count; u++) {
    1780           0 :                                 __hid_insert_field_entry(hid, report,
    1781           0 :                                                          &entries[usages],
    1782             :                                                          field, u);
    1783           0 :                                 usages++;
    1784             :                         }
    1785             :                 } else {
    1786           0 :                         __hid_insert_field_entry(hid, report, &entries[usages],
    1787             :                                                  field, 0);
    1788           0 :                         usages++;
    1789             :                 }
    1790             :         }
    1791             : }
    1792             : 
    1793             : static void hid_process_ordering(struct hid_device *hid)
    1794             : {
    1795             :         struct hid_report *report;
    1796           0 :         struct hid_report_enum *report_enum = &hid->report_enum[HID_INPUT_REPORT];
    1797             : 
    1798           0 :         list_for_each_entry(report, &report_enum->report_list, list)
    1799           0 :                 hid_report_process_ordering(hid, report);
    1800             : }
    1801             : 
    1802             : /*
    1803             :  * Output the field into the report.
    1804             :  */
    1805             : 
    1806           0 : static void hid_output_field(const struct hid_device *hid,
    1807             :                              struct hid_field *field, __u8 *data)
    1808             : {
    1809           0 :         unsigned count = field->report_count;
    1810           0 :         unsigned offset = field->report_offset;
    1811           0 :         unsigned size = field->report_size;
    1812             :         unsigned n;
    1813             : 
    1814           0 :         for (n = 0; n < count; n++) {
    1815           0 :                 if (field->logical_minimum < 0)   /* signed values */
    1816           0 :                         implement(hid, data, offset + n * size, size,
    1817           0 :                                   s32ton(field->value[n], size));
    1818             :                 else                            /* unsigned values */
    1819           0 :                         implement(hid, data, offset + n * size, size,
    1820           0 :                                   field->value[n]);
    1821             :         }
    1822           0 : }
    1823             : 
    1824             : /*
    1825             :  * Compute the size of a report.
    1826             :  */
    1827             : static size_t hid_compute_report_size(struct hid_report *report)
    1828             : {
    1829           0 :         if (report->size)
    1830           0 :                 return ((report->size - 1) >> 3) + 1;
    1831             : 
    1832             :         return 0;
    1833             : }
    1834             : 
    1835             : /*
    1836             :  * Create a report. 'data' has to be allocated using
    1837             :  * hid_alloc_report_buf() so that it has proper size.
    1838             :  */
    1839             : 
    1840           0 : void hid_output_report(struct hid_report *report, __u8 *data)
    1841             : {
    1842             :         unsigned n;
    1843             : 
    1844           0 :         if (report->id > 0)
    1845           0 :                 *data++ = report->id;
    1846             : 
    1847           0 :         memset(data, 0, hid_compute_report_size(report));
    1848           0 :         for (n = 0; n < report->maxfield; n++)
    1849           0 :                 hid_output_field(report->device, report->field[n], data);
    1850           0 : }
    1851             : EXPORT_SYMBOL_GPL(hid_output_report);
    1852             : 
    1853             : /*
    1854             :  * Allocator for buffer that is going to be passed to hid_output_report()
    1855             :  */
    1856           0 : u8 *hid_alloc_report_buf(struct hid_report *report, gfp_t flags)
    1857             : {
    1858             :         /*
    1859             :          * 7 extra bytes are necessary to achieve proper functionality
    1860             :          * of implement() working on 8 byte chunks
    1861             :          */
    1862             : 
    1863           0 :         u32 len = hid_report_len(report) + 7;
    1864             : 
    1865           0 :         return kmalloc(len, flags);
    1866             : }
    1867             : EXPORT_SYMBOL_GPL(hid_alloc_report_buf);
    1868             : 
    1869             : /*
    1870             :  * Set a field value. The report this field belongs to has to be
    1871             :  * created and transferred to the device, to set this value in the
    1872             :  * device.
    1873             :  */
    1874             : 
    1875           0 : int hid_set_field(struct hid_field *field, unsigned offset, __s32 value)
    1876             : {
    1877             :         unsigned size;
    1878             : 
    1879           0 :         if (!field)
    1880             :                 return -1;
    1881             : 
    1882           0 :         size = field->report_size;
    1883             : 
    1884             :         hid_dump_input(field->report->device, field->usage + offset, value);
    1885             : 
    1886           0 :         if (offset >= field->report_count) {
    1887           0 :                 hid_err(field->report->device, "offset (%d) exceeds report_count (%d)\n",
    1888             :                                 offset, field->report_count);
    1889           0 :                 return -1;
    1890             :         }
    1891           0 :         if (field->logical_minimum < 0) {
    1892           0 :                 if (value != snto32(s32ton(value, size), size)) {
    1893           0 :                         hid_err(field->report->device, "value %d is out of range\n", value);
    1894           0 :                         return -1;
    1895             :                 }
    1896             :         }
    1897           0 :         field->value[offset] = value;
    1898           0 :         return 0;
    1899             : }
    1900             : EXPORT_SYMBOL_GPL(hid_set_field);
    1901             : 
    1902           0 : static struct hid_report *hid_get_report(struct hid_report_enum *report_enum,
    1903             :                 const u8 *data)
    1904             : {
    1905             :         struct hid_report *report;
    1906           0 :         unsigned int n = 0;     /* Normally report number is 0 */
    1907             : 
    1908             :         /* Device uses numbered reports, data[0] is report number */
    1909           0 :         if (report_enum->numbered)
    1910           0 :                 n = *data;
    1911             : 
    1912           0 :         report = report_enum->report_id_hash[n];
    1913           0 :         if (report == NULL)
    1914           0 :                 dbg_hid("undefined report_id %u received\n", n);
    1915             : 
    1916           0 :         return report;
    1917             : }
    1918             : 
    1919             : /*
    1920             :  * Implement a generic .request() callback, using .raw_request()
    1921             :  * DO NOT USE in hid drivers directly, but through hid_hw_request instead.
    1922             :  */
    1923           0 : int __hid_request(struct hid_device *hid, struct hid_report *report,
    1924             :                 int reqtype)
    1925             : {
    1926             :         char *buf;
    1927             :         int ret;
    1928             :         u32 len;
    1929             : 
    1930           0 :         buf = hid_alloc_report_buf(report, GFP_KERNEL);
    1931           0 :         if (!buf)
    1932             :                 return -ENOMEM;
    1933             : 
    1934           0 :         len = hid_report_len(report);
    1935             : 
    1936           0 :         if (reqtype == HID_REQ_SET_REPORT)
    1937           0 :                 hid_output_report(report, buf);
    1938             : 
    1939           0 :         ret = hid->ll_driver->raw_request(hid, report->id, buf, len,
    1940           0 :                                           report->type, reqtype);
    1941           0 :         if (ret < 0) {
    1942           0 :                 dbg_hid("unable to complete request: %d\n", ret);
    1943             :                 goto out;
    1944             :         }
    1945             : 
    1946           0 :         if (reqtype == HID_REQ_GET_REPORT)
    1947           0 :                 hid_input_report(hid, report->type, buf, ret, 0);
    1948             : 
    1949             :         ret = 0;
    1950             : 
    1951             : out:
    1952           0 :         kfree(buf);
    1953           0 :         return ret;
    1954             : }
    1955             : EXPORT_SYMBOL_GPL(__hid_request);
    1956             : 
    1957           0 : int hid_report_raw_event(struct hid_device *hid, int type, u8 *data, u32 size,
    1958             :                 int interrupt)
    1959             : {
    1960           0 :         struct hid_report_enum *report_enum = hid->report_enum + type;
    1961             :         struct hid_report *report;
    1962             :         struct hid_driver *hdrv;
    1963           0 :         u32 rsize, csize = size;
    1964           0 :         u8 *cdata = data;
    1965           0 :         int ret = 0;
    1966             : 
    1967           0 :         report = hid_get_report(report_enum, data);
    1968           0 :         if (!report)
    1969             :                 goto out;
    1970             : 
    1971           0 :         if (report_enum->numbered) {
    1972           0 :                 cdata++;
    1973           0 :                 csize--;
    1974             :         }
    1975             : 
    1976           0 :         rsize = hid_compute_report_size(report);
    1977             : 
    1978           0 :         if (report_enum->numbered && rsize >= HID_MAX_BUFFER_SIZE)
    1979             :                 rsize = HID_MAX_BUFFER_SIZE - 1;
    1980           0 :         else if (rsize > HID_MAX_BUFFER_SIZE)
    1981           0 :                 rsize = HID_MAX_BUFFER_SIZE;
    1982             : 
    1983           0 :         if (csize < rsize) {
    1984           0 :                 dbg_hid("report %d is too short, (%d < %d)\n", report->id,
    1985             :                                 csize, rsize);
    1986           0 :                 memset(cdata + csize, 0, rsize - csize);
    1987             :         }
    1988             : 
    1989           0 :         if ((hid->claimed & HID_CLAIMED_HIDDEV) && hid->hiddev_report_event)
    1990           0 :                 hid->hiddev_report_event(hid, report);
    1991           0 :         if (hid->claimed & HID_CLAIMED_HIDRAW) {
    1992             :                 ret = hidraw_report_event(hid, data, size);
    1993             :                 if (ret)
    1994             :                         goto out;
    1995             :         }
    1996             : 
    1997           0 :         if (hid->claimed != HID_CLAIMED_HIDRAW && report->maxfield) {
    1998           0 :                 hid_process_report(hid, report, cdata, interrupt);
    1999           0 :                 hdrv = hid->driver;
    2000           0 :                 if (hdrv && hdrv->report)
    2001           0 :                         hdrv->report(hid, report);
    2002             :         }
    2003             : 
    2004           0 :         if (hid->claimed & HID_CLAIMED_INPUT)
    2005           0 :                 hidinput_report_event(hid, report);
    2006             : out:
    2007           0 :         return ret;
    2008             : }
    2009             : EXPORT_SYMBOL_GPL(hid_report_raw_event);
    2010             : 
    2011             : /**
    2012             :  * hid_input_report - report data from lower layer (usb, bt...)
    2013             :  *
    2014             :  * @hid: hid device
    2015             :  * @type: HID report type (HID_*_REPORT)
    2016             :  * @data: report contents
    2017             :  * @size: size of data parameter
    2018             :  * @interrupt: distinguish between interrupt and control transfers
    2019             :  *
    2020             :  * This is data entry for lower layers.
    2021             :  */
    2022           0 : int hid_input_report(struct hid_device *hid, int type, u8 *data, u32 size, int interrupt)
    2023             : {
    2024             :         struct hid_report_enum *report_enum;
    2025             :         struct hid_driver *hdrv;
    2026             :         struct hid_report *report;
    2027           0 :         int ret = 0;
    2028             : 
    2029           0 :         if (!hid)
    2030             :                 return -ENODEV;
    2031             : 
    2032           0 :         if (down_trylock(&hid->driver_input_lock))
    2033             :                 return -EBUSY;
    2034             : 
    2035           0 :         if (!hid->driver) {
    2036             :                 ret = -ENODEV;
    2037             :                 goto unlock;
    2038             :         }
    2039           0 :         report_enum = hid->report_enum + type;
    2040           0 :         hdrv = hid->driver;
    2041             : 
    2042           0 :         if (!size) {
    2043           0 :                 dbg_hid("empty report\n");
    2044             :                 ret = -1;
    2045             :                 goto unlock;
    2046             :         }
    2047             : 
    2048             :         /* Avoid unnecessary overhead if debugfs is disabled */
    2049           0 :         if (!list_empty(&hid->debug_list))
    2050             :                 hid_dump_report(hid, type, data, size);
    2051             : 
    2052           0 :         report = hid_get_report(report_enum, data);
    2053             : 
    2054           0 :         if (!report) {
    2055             :                 ret = -1;
    2056             :                 goto unlock;
    2057             :         }
    2058             : 
    2059           0 :         if (hdrv && hdrv->raw_event && hid_match_report(hid, report)) {
    2060           0 :                 ret = hdrv->raw_event(hid, report, data, size);
    2061           0 :                 if (ret < 0)
    2062             :                         goto unlock;
    2063             :         }
    2064             : 
    2065           0 :         ret = hid_report_raw_event(hid, type, data, size, interrupt);
    2066             : 
    2067             : unlock:
    2068           0 :         up(&hid->driver_input_lock);
    2069           0 :         return ret;
    2070             : }
    2071             : EXPORT_SYMBOL_GPL(hid_input_report);
    2072             : 
    2073           0 : bool hid_match_one_id(const struct hid_device *hdev,
    2074             :                       const struct hid_device_id *id)
    2075             : {
    2076           0 :         return (id->bus == HID_BUS_ANY || id->bus == hdev->bus) &&
    2077           0 :                 (id->group == HID_GROUP_ANY || id->group == hdev->group) &&
    2078           0 :                 (id->vendor == HID_ANY_ID || id->vendor == hdev->vendor) &&
    2079           0 :                 (id->product == HID_ANY_ID || id->product == hdev->product);
    2080             : }
    2081             : 
    2082           0 : const struct hid_device_id *hid_match_id(const struct hid_device *hdev,
    2083             :                 const struct hid_device_id *id)
    2084             : {
    2085           0 :         for (; id->bus; id++)
    2086           0 :                 if (hid_match_one_id(hdev, id))
    2087             :                         return id;
    2088             : 
    2089             :         return NULL;
    2090             : }
    2091             : 
    2092             : static const struct hid_device_id hid_hiddev_list[] = {
    2093             :         { HID_USB_DEVICE(USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS) },
    2094             :         { HID_USB_DEVICE(USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS1) },
    2095             :         { }
    2096             : };
    2097             : 
    2098           0 : static bool hid_hiddev(struct hid_device *hdev)
    2099             : {
    2100           0 :         return !!hid_match_id(hdev, hid_hiddev_list);
    2101             : }
    2102             : 
    2103             : 
    2104             : static ssize_t
    2105           0 : read_report_descriptor(struct file *filp, struct kobject *kobj,
    2106             :                 struct bin_attribute *attr,
    2107             :                 char *buf, loff_t off, size_t count)
    2108             : {
    2109           0 :         struct device *dev = kobj_to_dev(kobj);
    2110           0 :         struct hid_device *hdev = to_hid_device(dev);
    2111             : 
    2112           0 :         if (off >= hdev->rsize)
    2113             :                 return 0;
    2114             : 
    2115           0 :         if (off + count > hdev->rsize)
    2116           0 :                 count = hdev->rsize - off;
    2117             : 
    2118           0 :         memcpy(buf, hdev->rdesc + off, count);
    2119             : 
    2120           0 :         return count;
    2121             : }
    2122             : 
    2123             : static ssize_t
    2124           0 : show_country(struct device *dev, struct device_attribute *attr,
    2125             :                 char *buf)
    2126             : {
    2127           0 :         struct hid_device *hdev = to_hid_device(dev);
    2128             : 
    2129           0 :         return sprintf(buf, "%02x\n", hdev->country & 0xff);
    2130             : }
    2131             : 
    2132             : static struct bin_attribute dev_bin_attr_report_desc = {
    2133             :         .attr = { .name = "report_descriptor", .mode = 0444 },
    2134             :         .read = read_report_descriptor,
    2135             :         .size = HID_MAX_DESCRIPTOR_SIZE,
    2136             : };
    2137             : 
    2138             : static const struct device_attribute dev_attr_country = {
    2139             :         .attr = { .name = "country", .mode = 0444 },
    2140             :         .show = show_country,
    2141             : };
    2142             : 
    2143           0 : int hid_connect(struct hid_device *hdev, unsigned int connect_mask)
    2144             : {
    2145             :         static const char *types[] = { "Device", "Pointer", "Mouse", "Device",
    2146             :                 "Joystick", "Gamepad", "Keyboard", "Keypad",
    2147             :                 "Multi-Axis Controller"
    2148             :         };
    2149             :         const char *type, *bus;
    2150           0 :         char buf[64] = "";
    2151             :         unsigned int i;
    2152             :         int len;
    2153             :         int ret;
    2154             : 
    2155           0 :         if (hdev->quirks & HID_QUIRK_HIDDEV_FORCE)
    2156           0 :                 connect_mask |= (HID_CONNECT_HIDDEV_FORCE | HID_CONNECT_HIDDEV);
    2157           0 :         if (hdev->quirks & HID_QUIRK_HIDINPUT_FORCE)
    2158           0 :                 connect_mask |= HID_CONNECT_HIDINPUT_FORCE;
    2159           0 :         if (hdev->bus != BUS_USB)
    2160           0 :                 connect_mask &= ~HID_CONNECT_HIDDEV;
    2161           0 :         if (hid_hiddev(hdev))
    2162           0 :                 connect_mask |= HID_CONNECT_HIDDEV_FORCE;
    2163             : 
    2164           0 :         if ((connect_mask & HID_CONNECT_HIDINPUT) && !hidinput_connect(hdev,
    2165             :                                 connect_mask & HID_CONNECT_HIDINPUT_FORCE))
    2166           0 :                 hdev->claimed |= HID_CLAIMED_INPUT;
    2167             : 
    2168           0 :         if ((connect_mask & HID_CONNECT_HIDDEV) && hdev->hiddev_connect &&
    2169           0 :                         !hdev->hiddev_connect(hdev,
    2170             :                                 connect_mask & HID_CONNECT_HIDDEV_FORCE))
    2171           0 :                 hdev->claimed |= HID_CLAIMED_HIDDEV;
    2172             :         if ((connect_mask & HID_CONNECT_HIDRAW) && !hidraw_connect(hdev))
    2173             :                 hdev->claimed |= HID_CLAIMED_HIDRAW;
    2174             : 
    2175           0 :         if (connect_mask & HID_CONNECT_DRIVER)
    2176           0 :                 hdev->claimed |= HID_CLAIMED_DRIVER;
    2177             : 
    2178             :         /* Drivers with the ->raw_event callback set are not required to connect
    2179             :          * to any other listener. */
    2180           0 :         if (!hdev->claimed && !hdev->driver->raw_event) {
    2181           0 :                 hid_err(hdev, "device has no listeners, quitting\n");
    2182           0 :                 return -ENODEV;
    2183             :         }
    2184             : 
    2185           0 :         hid_process_ordering(hdev);
    2186             : 
    2187           0 :         if ((hdev->claimed & HID_CLAIMED_INPUT) &&
    2188           0 :                         (connect_mask & HID_CONNECT_FF) && hdev->ff_init)
    2189           0 :                 hdev->ff_init(hdev);
    2190             : 
    2191           0 :         len = 0;
    2192           0 :         if (hdev->claimed & HID_CLAIMED_INPUT)
    2193           0 :                 len += sprintf(buf + len, "input");
    2194           0 :         if (hdev->claimed & HID_CLAIMED_HIDDEV)
    2195           0 :                 len += sprintf(buf + len, "%shiddev%d", len ? "," : "",
    2196           0 :                                 ((struct hiddev *)hdev->hiddev)->minor);
    2197           0 :         if (hdev->claimed & HID_CLAIMED_HIDRAW)
    2198           0 :                 len += sprintf(buf + len, "%shidraw%d", len ? "," : "",
    2199           0 :                                 ((struct hidraw *)hdev->hidraw)->minor);
    2200             : 
    2201           0 :         type = "Device";
    2202           0 :         for (i = 0; i < hdev->maxcollection; i++) {
    2203           0 :                 struct hid_collection *col = &hdev->collection[i];
    2204           0 :                 if (col->type == HID_COLLECTION_APPLICATION &&
    2205           0 :                    (col->usage & HID_USAGE_PAGE) == HID_UP_GENDESK &&
    2206           0 :                    (col->usage & 0xffff) < ARRAY_SIZE(types)) {
    2207           0 :                         type = types[col->usage & 0xffff];
    2208           0 :                         break;
    2209             :                 }
    2210             :         }
    2211             : 
    2212           0 :         switch (hdev->bus) {
    2213             :         case BUS_USB:
    2214             :                 bus = "USB";
    2215             :                 break;
    2216             :         case BUS_BLUETOOTH:
    2217             :                 bus = "BLUETOOTH";
    2218             :                 break;
    2219             :         case BUS_I2C:
    2220             :                 bus = "I2C";
    2221             :                 break;
    2222             :         case BUS_VIRTUAL:
    2223             :                 bus = "VIRTUAL";
    2224             :                 break;
    2225             :         default:
    2226             :                 bus = "<UNKNOWN>";
    2227             :         }
    2228             : 
    2229           0 :         ret = device_create_file(&hdev->dev, &dev_attr_country);
    2230           0 :         if (ret)
    2231           0 :                 hid_warn(hdev,
    2232             :                          "can't create sysfs country code attribute err: %d\n", ret);
    2233             : 
    2234           0 :         hid_info(hdev, "%s: %s HID v%x.%02x %s [%s] on %s\n",
    2235             :                  buf, bus, hdev->version >> 8, hdev->version & 0xff,
    2236             :                  type, hdev->name, hdev->phys);
    2237             : 
    2238           0 :         return 0;
    2239             : }
    2240             : EXPORT_SYMBOL_GPL(hid_connect);
    2241             : 
    2242           0 : void hid_disconnect(struct hid_device *hdev)
    2243             : {
    2244           0 :         device_remove_file(&hdev->dev, &dev_attr_country);
    2245           0 :         if (hdev->claimed & HID_CLAIMED_INPUT)
    2246           0 :                 hidinput_disconnect(hdev);
    2247           0 :         if (hdev->claimed & HID_CLAIMED_HIDDEV)
    2248           0 :                 hdev->hiddev_disconnect(hdev);
    2249             :         if (hdev->claimed & HID_CLAIMED_HIDRAW)
    2250             :                 hidraw_disconnect(hdev);
    2251           0 :         hdev->claimed = 0;
    2252           0 : }
    2253             : EXPORT_SYMBOL_GPL(hid_disconnect);
    2254             : 
    2255             : /**
    2256             :  * hid_hw_start - start underlying HW
    2257             :  * @hdev: hid device
    2258             :  * @connect_mask: which outputs to connect, see HID_CONNECT_*
    2259             :  *
    2260             :  * Call this in probe function *after* hid_parse. This will setup HW
    2261             :  * buffers and start the device (if not defeirred to device open).
    2262             :  * hid_hw_stop must be called if this was successful.
    2263             :  */
    2264           0 : int hid_hw_start(struct hid_device *hdev, unsigned int connect_mask)
    2265             : {
    2266             :         int error;
    2267             : 
    2268           0 :         error = hdev->ll_driver->start(hdev);
    2269           0 :         if (error)
    2270             :                 return error;
    2271             : 
    2272           0 :         if (connect_mask) {
    2273           0 :                 error = hid_connect(hdev, connect_mask);
    2274           0 :                 if (error) {
    2275           0 :                         hdev->ll_driver->stop(hdev);
    2276           0 :                         return error;
    2277             :                 }
    2278             :         }
    2279             : 
    2280             :         return 0;
    2281             : }
    2282             : EXPORT_SYMBOL_GPL(hid_hw_start);
    2283             : 
    2284             : /**
    2285             :  * hid_hw_stop - stop underlying HW
    2286             :  * @hdev: hid device
    2287             :  *
    2288             :  * This is usually called from remove function or from probe when something
    2289             :  * failed and hid_hw_start was called already.
    2290             :  */
    2291           0 : void hid_hw_stop(struct hid_device *hdev)
    2292             : {
    2293           0 :         hid_disconnect(hdev);
    2294           0 :         hdev->ll_driver->stop(hdev);
    2295           0 : }
    2296             : EXPORT_SYMBOL_GPL(hid_hw_stop);
    2297             : 
    2298             : /**
    2299             :  * hid_hw_open - signal underlying HW to start delivering events
    2300             :  * @hdev: hid device
    2301             :  *
    2302             :  * Tell underlying HW to start delivering events from the device.
    2303             :  * This function should be called sometime after successful call
    2304             :  * to hid_hw_start().
    2305             :  */
    2306           0 : int hid_hw_open(struct hid_device *hdev)
    2307             : {
    2308             :         int ret;
    2309             : 
    2310           0 :         ret = mutex_lock_killable(&hdev->ll_open_lock);
    2311           0 :         if (ret)
    2312             :                 return ret;
    2313             : 
    2314           0 :         if (!hdev->ll_open_count++) {
    2315           0 :                 ret = hdev->ll_driver->open(hdev);
    2316           0 :                 if (ret)
    2317           0 :                         hdev->ll_open_count--;
    2318             :         }
    2319             : 
    2320           0 :         mutex_unlock(&hdev->ll_open_lock);
    2321           0 :         return ret;
    2322             : }
    2323             : EXPORT_SYMBOL_GPL(hid_hw_open);
    2324             : 
    2325             : /**
    2326             :  * hid_hw_close - signal underlaying HW to stop delivering events
    2327             :  *
    2328             :  * @hdev: hid device
    2329             :  *
    2330             :  * This function indicates that we are not interested in the events
    2331             :  * from this device anymore. Delivery of events may or may not stop,
    2332             :  * depending on the number of users still outstanding.
    2333             :  */
    2334           0 : void hid_hw_close(struct hid_device *hdev)
    2335             : {
    2336           0 :         mutex_lock(&hdev->ll_open_lock);
    2337           0 :         if (!--hdev->ll_open_count)
    2338           0 :                 hdev->ll_driver->close(hdev);
    2339           0 :         mutex_unlock(&hdev->ll_open_lock);
    2340           0 : }
    2341             : EXPORT_SYMBOL_GPL(hid_hw_close);
    2342             : 
    2343             : /**
    2344             :  * hid_hw_request - send report request to device
    2345             :  *
    2346             :  * @hdev: hid device
    2347             :  * @report: report to send
    2348             :  * @reqtype: hid request type
    2349             :  */
    2350           0 : void hid_hw_request(struct hid_device *hdev,
    2351             :                     struct hid_report *report, int reqtype)
    2352             : {
    2353           0 :         if (hdev->ll_driver->request)
    2354           0 :                 return hdev->ll_driver->request(hdev, report, reqtype);
    2355             : 
    2356           0 :         __hid_request(hdev, report, reqtype);
    2357             : }
    2358             : EXPORT_SYMBOL_GPL(hid_hw_request);
    2359             : 
    2360             : /**
    2361             :  * hid_hw_raw_request - send report request to device
    2362             :  *
    2363             :  * @hdev: hid device
    2364             :  * @reportnum: report ID
    2365             :  * @buf: in/out data to transfer
    2366             :  * @len: length of buf
    2367             :  * @rtype: HID report type
    2368             :  * @reqtype: HID_REQ_GET_REPORT or HID_REQ_SET_REPORT
    2369             :  *
    2370             :  * Return: count of data transferred, negative if error
    2371             :  *
    2372             :  * Same behavior as hid_hw_request, but with raw buffers instead.
    2373             :  */
    2374           0 : int hid_hw_raw_request(struct hid_device *hdev,
    2375             :                        unsigned char reportnum, __u8 *buf,
    2376             :                        size_t len, unsigned char rtype, int reqtype)
    2377             : {
    2378           0 :         if (len < 1 || len > HID_MAX_BUFFER_SIZE || !buf)
    2379             :                 return -EINVAL;
    2380             : 
    2381           0 :         return hdev->ll_driver->raw_request(hdev, reportnum, buf, len,
    2382             :                                             rtype, reqtype);
    2383             : }
    2384             : EXPORT_SYMBOL_GPL(hid_hw_raw_request);
    2385             : 
    2386             : /**
    2387             :  * hid_hw_output_report - send output report to device
    2388             :  *
    2389             :  * @hdev: hid device
    2390             :  * @buf: raw data to transfer
    2391             :  * @len: length of buf
    2392             :  *
    2393             :  * Return: count of data transferred, negative if error
    2394             :  */
    2395           0 : int hid_hw_output_report(struct hid_device *hdev, __u8 *buf, size_t len)
    2396             : {
    2397           0 :         if (len < 1 || len > HID_MAX_BUFFER_SIZE || !buf)
    2398             :                 return -EINVAL;
    2399             : 
    2400           0 :         if (hdev->ll_driver->output_report)
    2401           0 :                 return hdev->ll_driver->output_report(hdev, buf, len);
    2402             : 
    2403             :         return -ENOSYS;
    2404             : }
    2405             : EXPORT_SYMBOL_GPL(hid_hw_output_report);
    2406             : 
    2407             : #ifdef CONFIG_PM
    2408           0 : int hid_driver_suspend(struct hid_device *hdev, pm_message_t state)
    2409             : {
    2410           0 :         if (hdev->driver && hdev->driver->suspend)
    2411           0 :                 return hdev->driver->suspend(hdev, state);
    2412             : 
    2413             :         return 0;
    2414             : }
    2415             : EXPORT_SYMBOL_GPL(hid_driver_suspend);
    2416             : 
    2417           0 : int hid_driver_reset_resume(struct hid_device *hdev)
    2418             : {
    2419           0 :         if (hdev->driver && hdev->driver->reset_resume)
    2420           0 :                 return hdev->driver->reset_resume(hdev);
    2421             : 
    2422             :         return 0;
    2423             : }
    2424             : EXPORT_SYMBOL_GPL(hid_driver_reset_resume);
    2425             : 
    2426           0 : int hid_driver_resume(struct hid_device *hdev)
    2427             : {
    2428           0 :         if (hdev->driver && hdev->driver->resume)
    2429           0 :                 return hdev->driver->resume(hdev);
    2430             : 
    2431             :         return 0;
    2432             : }
    2433             : EXPORT_SYMBOL_GPL(hid_driver_resume);
    2434             : #endif /* CONFIG_PM */
    2435             : 
    2436             : struct hid_dynid {
    2437             :         struct list_head list;
    2438             :         struct hid_device_id id;
    2439             : };
    2440             : 
    2441             : /**
    2442             :  * new_id_store - add a new HID device ID to this driver and re-probe devices
    2443             :  * @drv: target device driver
    2444             :  * @buf: buffer for scanning device ID data
    2445             :  * @count: input size
    2446             :  *
    2447             :  * Adds a new dynamic hid device ID to this driver,
    2448             :  * and causes the driver to probe for all devices again.
    2449             :  */
    2450           0 : static ssize_t new_id_store(struct device_driver *drv, const char *buf,
    2451             :                 size_t count)
    2452             : {
    2453           0 :         struct hid_driver *hdrv = to_hid_driver(drv);
    2454             :         struct hid_dynid *dynid;
    2455             :         __u32 bus, vendor, product;
    2456           0 :         unsigned long driver_data = 0;
    2457             :         int ret;
    2458             : 
    2459           0 :         ret = sscanf(buf, "%x %x %x %lx",
    2460             :                         &bus, &vendor, &product, &driver_data);
    2461           0 :         if (ret < 3)
    2462             :                 return -EINVAL;
    2463             : 
    2464           0 :         dynid = kzalloc(sizeof(*dynid), GFP_KERNEL);
    2465           0 :         if (!dynid)
    2466             :                 return -ENOMEM;
    2467             : 
    2468           0 :         dynid->id.bus = bus;
    2469           0 :         dynid->id.group = HID_GROUP_ANY;
    2470           0 :         dynid->id.vendor = vendor;
    2471           0 :         dynid->id.product = product;
    2472           0 :         dynid->id.driver_data = driver_data;
    2473             : 
    2474           0 :         spin_lock(&hdrv->dyn_lock);
    2475           0 :         list_add_tail(&dynid->list, &hdrv->dyn_list);
    2476           0 :         spin_unlock(&hdrv->dyn_lock);
    2477             : 
    2478           0 :         ret = driver_attach(&hdrv->driver);
    2479             : 
    2480           0 :         return ret ? : count;
    2481             : }
    2482             : static DRIVER_ATTR_WO(new_id);
    2483             : 
    2484             : static struct attribute *hid_drv_attrs[] = {
    2485             :         &driver_attr_new_id.attr,
    2486             :         NULL,
    2487             : };
    2488             : ATTRIBUTE_GROUPS(hid_drv);
    2489             : 
    2490           0 : static void hid_free_dynids(struct hid_driver *hdrv)
    2491             : {
    2492             :         struct hid_dynid *dynid, *n;
    2493             : 
    2494           0 :         spin_lock(&hdrv->dyn_lock);
    2495           0 :         list_for_each_entry_safe(dynid, n, &hdrv->dyn_list, list) {
    2496           0 :                 list_del(&dynid->list);
    2497           0 :                 kfree(dynid);
    2498             :         }
    2499           0 :         spin_unlock(&hdrv->dyn_lock);
    2500           0 : }
    2501             : 
    2502           0 : const struct hid_device_id *hid_match_device(struct hid_device *hdev,
    2503             :                                              struct hid_driver *hdrv)
    2504             : {
    2505             :         struct hid_dynid *dynid;
    2506             : 
    2507           0 :         spin_lock(&hdrv->dyn_lock);
    2508           0 :         list_for_each_entry(dynid, &hdrv->dyn_list, list) {
    2509           0 :                 if (hid_match_one_id(hdev, &dynid->id)) {
    2510           0 :                         spin_unlock(&hdrv->dyn_lock);
    2511           0 :                         return &dynid->id;
    2512             :                 }
    2513             :         }
    2514           0 :         spin_unlock(&hdrv->dyn_lock);
    2515             : 
    2516           0 :         return hid_match_id(hdev, hdrv->id_table);
    2517             : }
    2518             : EXPORT_SYMBOL_GPL(hid_match_device);
    2519             : 
    2520           0 : static int hid_bus_match(struct device *dev, struct device_driver *drv)
    2521             : {
    2522           0 :         struct hid_driver *hdrv = to_hid_driver(drv);
    2523           0 :         struct hid_device *hdev = to_hid_device(dev);
    2524             : 
    2525           0 :         return hid_match_device(hdev, hdrv) != NULL;
    2526             : }
    2527             : 
    2528             : /**
    2529             :  * hid_compare_device_paths - check if both devices share the same path
    2530             :  * @hdev_a: hid device
    2531             :  * @hdev_b: hid device
    2532             :  * @separator: char to use as separator
    2533             :  *
    2534             :  * Check if two devices share the same path up to the last occurrence of
    2535             :  * the separator char. Both paths must exist (i.e., zero-length paths
    2536             :  * don't match).
    2537             :  */
    2538           0 : bool hid_compare_device_paths(struct hid_device *hdev_a,
    2539             :                               struct hid_device *hdev_b, char separator)
    2540             : {
    2541           0 :         int n1 = strrchr(hdev_a->phys, separator) - hdev_a->phys;
    2542           0 :         int n2 = strrchr(hdev_b->phys, separator) - hdev_b->phys;
    2543             : 
    2544           0 :         if (n1 != n2 || n1 <= 0 || n2 <= 0)
    2545             :                 return false;
    2546             : 
    2547           0 :         return !strncmp(hdev_a->phys, hdev_b->phys, n1);
    2548             : }
    2549             : EXPORT_SYMBOL_GPL(hid_compare_device_paths);
    2550             : 
    2551           0 : static int hid_device_probe(struct device *dev)
    2552             : {
    2553           0 :         struct hid_driver *hdrv = to_hid_driver(dev->driver);
    2554           0 :         struct hid_device *hdev = to_hid_device(dev);
    2555             :         const struct hid_device_id *id;
    2556           0 :         int ret = 0;
    2557             : 
    2558           0 :         if (down_interruptible(&hdev->driver_input_lock)) {
    2559             :                 ret = -EINTR;
    2560             :                 goto end;
    2561             :         }
    2562           0 :         hdev->io_started = false;
    2563             : 
    2564           0 :         clear_bit(ffs(HID_STAT_REPROBED), &hdev->status);
    2565             : 
    2566           0 :         if (!hdev->driver) {
    2567           0 :                 id = hid_match_device(hdev, hdrv);
    2568           0 :                 if (id == NULL) {
    2569             :                         ret = -ENODEV;
    2570             :                         goto unlock;
    2571             :                 }
    2572             : 
    2573           0 :                 if (hdrv->match) {
    2574           0 :                         if (!hdrv->match(hdev, hid_ignore_special_drivers)) {
    2575             :                                 ret = -ENODEV;
    2576             :                                 goto unlock;
    2577             :                         }
    2578             :                 } else {
    2579             :                         /*
    2580             :                          * hid-generic implements .match(), so if
    2581             :                          * hid_ignore_special_drivers is set, we can safely
    2582             :                          * return.
    2583             :                          */
    2584           0 :                         if (hid_ignore_special_drivers) {
    2585             :                                 ret = -ENODEV;
    2586             :                                 goto unlock;
    2587             :                         }
    2588             :                 }
    2589             : 
    2590             :                 /* reset the quirks that has been previously set */
    2591           0 :                 hdev->quirks = hid_lookup_quirk(hdev);
    2592           0 :                 hdev->driver = hdrv;
    2593           0 :                 if (hdrv->probe) {
    2594           0 :                         ret = hdrv->probe(hdev, id);
    2595             :                 } else { /* default probe */
    2596           0 :                         ret = hid_open_report(hdev);
    2597           0 :                         if (!ret)
    2598           0 :                                 ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
    2599             :                 }
    2600           0 :                 if (ret) {
    2601           0 :                         hid_close_report(hdev);
    2602           0 :                         hdev->driver = NULL;
    2603             :                 }
    2604             :         }
    2605             : unlock:
    2606           0 :         if (!hdev->io_started)
    2607           0 :                 up(&hdev->driver_input_lock);
    2608             : end:
    2609           0 :         return ret;
    2610             : }
    2611             : 
    2612           0 : static void hid_device_remove(struct device *dev)
    2613             : {
    2614           0 :         struct hid_device *hdev = to_hid_device(dev);
    2615             :         struct hid_driver *hdrv;
    2616             : 
    2617           0 :         down(&hdev->driver_input_lock);
    2618           0 :         hdev->io_started = false;
    2619             : 
    2620           0 :         hdrv = hdev->driver;
    2621           0 :         if (hdrv) {
    2622           0 :                 if (hdrv->remove)
    2623           0 :                         hdrv->remove(hdev);
    2624             :                 else /* default remove */
    2625             :                         hid_hw_stop(hdev);
    2626           0 :                 hid_close_report(hdev);
    2627           0 :                 hdev->driver = NULL;
    2628             :         }
    2629             : 
    2630           0 :         if (!hdev->io_started)
    2631           0 :                 up(&hdev->driver_input_lock);
    2632           0 : }
    2633             : 
    2634           0 : static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
    2635             :                              char *buf)
    2636             : {
    2637           0 :         struct hid_device *hdev = container_of(dev, struct hid_device, dev);
    2638             : 
    2639           0 :         return scnprintf(buf, PAGE_SIZE, "hid:b%04Xg%04Xv%08Xp%08X\n",
    2640           0 :                          hdev->bus, hdev->group, hdev->vendor, hdev->product);
    2641             : }
    2642             : static DEVICE_ATTR_RO(modalias);
    2643             : 
    2644             : static struct attribute *hid_dev_attrs[] = {
    2645             :         &dev_attr_modalias.attr,
    2646             :         NULL,
    2647             : };
    2648             : static struct bin_attribute *hid_dev_bin_attrs[] = {
    2649             :         &dev_bin_attr_report_desc,
    2650             :         NULL
    2651             : };
    2652             : static const struct attribute_group hid_dev_group = {
    2653             :         .attrs = hid_dev_attrs,
    2654             :         .bin_attrs = hid_dev_bin_attrs,
    2655             : };
    2656             : __ATTRIBUTE_GROUPS(hid_dev);
    2657             : 
    2658           0 : static int hid_uevent(struct device *dev, struct kobj_uevent_env *env)
    2659             : {
    2660           0 :         struct hid_device *hdev = to_hid_device(dev);
    2661             : 
    2662           0 :         if (add_uevent_var(env, "HID_ID=%04X:%08X:%08X",
    2663           0 :                         hdev->bus, hdev->vendor, hdev->product))
    2664             :                 return -ENOMEM;
    2665             : 
    2666           0 :         if (add_uevent_var(env, "HID_NAME=%s", hdev->name))
    2667             :                 return -ENOMEM;
    2668             : 
    2669           0 :         if (add_uevent_var(env, "HID_PHYS=%s", hdev->phys))
    2670             :                 return -ENOMEM;
    2671             : 
    2672           0 :         if (add_uevent_var(env, "HID_UNIQ=%s", hdev->uniq))
    2673             :                 return -ENOMEM;
    2674             : 
    2675           0 :         if (add_uevent_var(env, "MODALIAS=hid:b%04Xg%04Xv%08Xp%08X",
    2676           0 :                            hdev->bus, hdev->group, hdev->vendor, hdev->product))
    2677             :                 return -ENOMEM;
    2678             : 
    2679           0 :         return 0;
    2680             : }
    2681             : 
    2682             : struct bus_type hid_bus_type = {
    2683             :         .name           = "hid",
    2684             :         .dev_groups     = hid_dev_groups,
    2685             :         .drv_groups     = hid_drv_groups,
    2686             :         .match          = hid_bus_match,
    2687             :         .probe          = hid_device_probe,
    2688             :         .remove         = hid_device_remove,
    2689             :         .uevent         = hid_uevent,
    2690             : };
    2691             : EXPORT_SYMBOL(hid_bus_type);
    2692             : 
    2693           0 : int hid_add_device(struct hid_device *hdev)
    2694             : {
    2695             :         static atomic_t id = ATOMIC_INIT(0);
    2696             :         int ret;
    2697             : 
    2698           0 :         if (WARN_ON(hdev->status & HID_STAT_ADDED))
    2699             :                 return -EBUSY;
    2700             : 
    2701           0 :         hdev->quirks = hid_lookup_quirk(hdev);
    2702             : 
    2703             :         /* we need to kill them here, otherwise they will stay allocated to
    2704             :          * wait for coming driver */
    2705           0 :         if (hid_ignore(hdev))
    2706             :                 return -ENODEV;
    2707             : 
    2708             :         /*
    2709             :          * Check for the mandatory transport channel.
    2710             :          */
    2711           0 :          if (!hdev->ll_driver->raw_request) {
    2712           0 :                 hid_err(hdev, "transport driver missing .raw_request()\n");
    2713           0 :                 return -EINVAL;
    2714             :          }
    2715             : 
    2716             :         /*
    2717             :          * Read the device report descriptor once and use as template
    2718             :          * for the driver-specific modifications.
    2719             :          */
    2720           0 :         ret = hdev->ll_driver->parse(hdev);
    2721           0 :         if (ret)
    2722             :                 return ret;
    2723           0 :         if (!hdev->dev_rdesc)
    2724             :                 return -ENODEV;
    2725             : 
    2726             :         /*
    2727             :          * Scan generic devices for group information
    2728             :          */
    2729           0 :         if (hid_ignore_special_drivers) {
    2730           0 :                 hdev->group = HID_GROUP_GENERIC;
    2731           0 :         } else if (!hdev->group &&
    2732           0 :                    !(hdev->quirks & HID_QUIRK_HAVE_SPECIAL_DRIVER)) {
    2733           0 :                 ret = hid_scan_report(hdev);
    2734           0 :                 if (ret)
    2735           0 :                         hid_warn(hdev, "bad device descriptor (%d)\n", ret);
    2736             :         }
    2737             : 
    2738             :         /* XXX hack, any other cleaner solution after the driver core
    2739             :          * is converted to allow more than 20 bytes as the device name? */
    2740           0 :         dev_set_name(&hdev->dev, "%04X:%04X:%04X.%04X", hdev->bus,
    2741             :                      hdev->vendor, hdev->product, atomic_inc_return(&id));
    2742             : 
    2743             :         hid_debug_register(hdev, dev_name(&hdev->dev));
    2744           0 :         ret = device_add(&hdev->dev);
    2745           0 :         if (!ret)
    2746           0 :                 hdev->status |= HID_STAT_ADDED;
    2747             :         else
    2748             :                 hid_debug_unregister(hdev);
    2749             : 
    2750             :         return ret;
    2751             : }
    2752             : EXPORT_SYMBOL_GPL(hid_add_device);
    2753             : 
    2754             : /**
    2755             :  * hid_allocate_device - allocate new hid device descriptor
    2756             :  *
    2757             :  * Allocate and initialize hid device, so that hid_destroy_device might be
    2758             :  * used to free it.
    2759             :  *
    2760             :  * New hid_device pointer is returned on success, otherwise ERR_PTR encoded
    2761             :  * error value.
    2762             :  */
    2763           0 : struct hid_device *hid_allocate_device(void)
    2764             : {
    2765             :         struct hid_device *hdev;
    2766           0 :         int ret = -ENOMEM;
    2767             : 
    2768           0 :         hdev = kzalloc(sizeof(*hdev), GFP_KERNEL);
    2769           0 :         if (hdev == NULL)
    2770             :                 return ERR_PTR(ret);
    2771             : 
    2772           0 :         device_initialize(&hdev->dev);
    2773           0 :         hdev->dev.release = hid_device_release;
    2774           0 :         hdev->dev.bus = &hid_bus_type;
    2775           0 :         device_enable_async_suspend(&hdev->dev);
    2776             : 
    2777           0 :         hid_close_report(hdev);
    2778             : 
    2779           0 :         init_waitqueue_head(&hdev->debug_wait);
    2780           0 :         INIT_LIST_HEAD(&hdev->debug_list);
    2781           0 :         spin_lock_init(&hdev->debug_list_lock);
    2782           0 :         sema_init(&hdev->driver_input_lock, 1);
    2783           0 :         mutex_init(&hdev->ll_open_lock);
    2784             : 
    2785           0 :         return hdev;
    2786             : }
    2787             : EXPORT_SYMBOL_GPL(hid_allocate_device);
    2788             : 
    2789           0 : static void hid_remove_device(struct hid_device *hdev)
    2790             : {
    2791           0 :         if (hdev->status & HID_STAT_ADDED) {
    2792           0 :                 device_del(&hdev->dev);
    2793             :                 hid_debug_unregister(hdev);
    2794           0 :                 hdev->status &= ~HID_STAT_ADDED;
    2795             :         }
    2796           0 :         kfree(hdev->dev_rdesc);
    2797           0 :         hdev->dev_rdesc = NULL;
    2798           0 :         hdev->dev_rsize = 0;
    2799           0 : }
    2800             : 
    2801             : /**
    2802             :  * hid_destroy_device - free previously allocated device
    2803             :  *
    2804             :  * @hdev: hid device
    2805             :  *
    2806             :  * If you allocate hid_device through hid_allocate_device, you should ever
    2807             :  * free by this function.
    2808             :  */
    2809           0 : void hid_destroy_device(struct hid_device *hdev)
    2810             : {
    2811           0 :         hid_remove_device(hdev);
    2812           0 :         put_device(&hdev->dev);
    2813           0 : }
    2814             : EXPORT_SYMBOL_GPL(hid_destroy_device);
    2815             : 
    2816             : 
    2817           0 : static int __hid_bus_reprobe_drivers(struct device *dev, void *data)
    2818             : {
    2819           0 :         struct hid_driver *hdrv = data;
    2820           0 :         struct hid_device *hdev = to_hid_device(dev);
    2821             : 
    2822           0 :         if (hdev->driver == hdrv &&
    2823           0 :             !hdrv->match(hdev, hid_ignore_special_drivers) &&
    2824           0 :             !test_and_set_bit(ffs(HID_STAT_REPROBED), &hdev->status))
    2825           0 :                 return device_reprobe(dev);
    2826             : 
    2827             :         return 0;
    2828             : }
    2829             : 
    2830          66 : static int __hid_bus_driver_added(struct device_driver *drv, void *data)
    2831             : {
    2832          66 :         struct hid_driver *hdrv = to_hid_driver(drv);
    2833             : 
    2834          66 :         if (hdrv->match) {
    2835          11 :                 bus_for_each_dev(&hid_bus_type, NULL, hdrv,
    2836             :                                  __hid_bus_reprobe_drivers);
    2837             :         }
    2838             : 
    2839          66 :         return 0;
    2840             : }
    2841             : 
    2842           0 : static int __bus_removed_driver(struct device_driver *drv, void *data)
    2843             : {
    2844           0 :         return bus_rescan_devices(&hid_bus_type);
    2845             : }
    2846             : 
    2847          11 : int __hid_register_driver(struct hid_driver *hdrv, struct module *owner,
    2848             :                 const char *mod_name)
    2849             : {
    2850             :         int ret;
    2851             : 
    2852          11 :         hdrv->driver.name = hdrv->name;
    2853          11 :         hdrv->driver.bus = &hid_bus_type;
    2854          11 :         hdrv->driver.owner = owner;
    2855          11 :         hdrv->driver.mod_name = mod_name;
    2856             : 
    2857          22 :         INIT_LIST_HEAD(&hdrv->dyn_list);
    2858          11 :         spin_lock_init(&hdrv->dyn_lock);
    2859             : 
    2860          11 :         ret = driver_register(&hdrv->driver);
    2861             : 
    2862          11 :         if (ret == 0)
    2863          11 :                 bus_for_each_drv(&hid_bus_type, NULL, NULL,
    2864             :                                  __hid_bus_driver_added);
    2865             : 
    2866          11 :         return ret;
    2867             : }
    2868             : EXPORT_SYMBOL_GPL(__hid_register_driver);
    2869             : 
    2870           0 : void hid_unregister_driver(struct hid_driver *hdrv)
    2871             : {
    2872           0 :         driver_unregister(&hdrv->driver);
    2873           0 :         hid_free_dynids(hdrv);
    2874             : 
    2875           0 :         bus_for_each_drv(&hid_bus_type, NULL, hdrv, __bus_removed_driver);
    2876           0 : }
    2877             : EXPORT_SYMBOL_GPL(hid_unregister_driver);
    2878             : 
    2879           0 : int hid_check_keys_pressed(struct hid_device *hid)
    2880             : {
    2881             :         struct hid_input *hidinput;
    2882             :         int i;
    2883             : 
    2884           0 :         if (!(hid->claimed & HID_CLAIMED_INPUT))
    2885             :                 return 0;
    2886             : 
    2887           0 :         list_for_each_entry(hidinput, &hid->inputs, list) {
    2888           0 :                 for (i = 0; i < BITS_TO_LONGS(KEY_MAX); i++)
    2889           0 :                         if (hidinput->input->key[i])
    2890             :                                 return 1;
    2891             :         }
    2892             : 
    2893             :         return 0;
    2894             : }
    2895             : EXPORT_SYMBOL_GPL(hid_check_keys_pressed);
    2896             : 
    2897           1 : static int __init hid_init(void)
    2898             : {
    2899             :         int ret;
    2900             : 
    2901           1 :         if (hid_debug)
    2902           0 :                 pr_warn("hid_debug is now used solely for parser and driver debugging.\n"
    2903             :                         "debugfs is now used for inspecting the device (report descriptor, reports)\n");
    2904             : 
    2905           1 :         ret = bus_register(&hid_bus_type);
    2906           1 :         if (ret) {
    2907           0 :                 pr_err("can't register hid bus\n");
    2908             :                 goto err;
    2909             :         }
    2910             : 
    2911             :         ret = hidraw_init();
    2912             :         if (ret)
    2913             :                 goto err_bus;
    2914             : 
    2915             :         hid_debug_init();
    2916             : 
    2917             :         return 0;
    2918             : err_bus:
    2919             :         bus_unregister(&hid_bus_type);
    2920             : err:
    2921           0 :         return ret;
    2922             : }
    2923             : 
    2924           0 : static void __exit hid_exit(void)
    2925             : {
    2926             :         hid_debug_exit();
    2927             :         hidraw_exit();
    2928           0 :         bus_unregister(&hid_bus_type);
    2929           0 :         hid_quirks_exit(HID_BUS_ANY);
    2930           0 : }
    2931             : 
    2932             : module_init(hid_init);
    2933             : module_exit(hid_exit);
    2934             : 
    2935             : MODULE_AUTHOR("Andreas Gal");
    2936             : MODULE_AUTHOR("Vojtech Pavlik");
    2937             : MODULE_AUTHOR("Jiri Kosina");
    2938             : MODULE_LICENSE("GPL");

Generated by: LCOV version 1.14