1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef __HID_H
14#define __HID_H
15
16
17#include <linux/bitops.h>
18#include <linux/types.h>
19#include <linux/slab.h>
20#include <linux/list.h>
21#include <linux/mod_devicetable.h>
22#include <linux/timer.h>
23#include <linux/workqueue.h>
24#include <linux/input.h>
25#include <linux/semaphore.h>
26#include <linux/mutex.h>
27#include <linux/power_supply.h>
28#include <uapi/linux/hid.h>
29
30
31
32
33
34
35
36struct hid_item {
37 unsigned format;
38 __u8 size;
39 __u8 type;
40 __u8 tag;
41 union {
42 __u8 u8;
43 __s8 s8;
44 __u16 u16;
45 __s16 s16;
46 __u32 u32;
47 __s32 s32;
48 __u8 *longdata;
49 } data;
50};
51
52
53
54
55
56#define HID_ITEM_FORMAT_SHORT 0
57#define HID_ITEM_FORMAT_LONG 1
58
59
60
61
62
63#define HID_ITEM_TAG_LONG 15
64
65
66
67
68
69#define HID_ITEM_TYPE_MAIN 0
70#define HID_ITEM_TYPE_GLOBAL 1
71#define HID_ITEM_TYPE_LOCAL 2
72#define HID_ITEM_TYPE_RESERVED 3
73
74
75
76
77
78#define HID_MAIN_ITEM_TAG_INPUT 8
79#define HID_MAIN_ITEM_TAG_OUTPUT 9
80#define HID_MAIN_ITEM_TAG_FEATURE 11
81#define HID_MAIN_ITEM_TAG_BEGIN_COLLECTION 10
82#define HID_MAIN_ITEM_TAG_END_COLLECTION 12
83
84
85
86
87
88#define HID_MAIN_ITEM_CONSTANT 0x001
89#define HID_MAIN_ITEM_VARIABLE 0x002
90#define HID_MAIN_ITEM_RELATIVE 0x004
91#define HID_MAIN_ITEM_WRAP 0x008
92#define HID_MAIN_ITEM_NONLINEAR 0x010
93#define HID_MAIN_ITEM_NO_PREFERRED 0x020
94#define HID_MAIN_ITEM_NULL_STATE 0x040
95#define HID_MAIN_ITEM_VOLATILE 0x080
96#define HID_MAIN_ITEM_BUFFERED_BYTE 0x100
97
98
99
100
101
102#define HID_COLLECTION_PHYSICAL 0
103#define HID_COLLECTION_APPLICATION 1
104#define HID_COLLECTION_LOGICAL 2
105#define HID_COLLECTION_NAMED_ARRAY 4
106
107
108
109
110
111#define HID_GLOBAL_ITEM_TAG_USAGE_PAGE 0
112#define HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM 1
113#define HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM 2
114#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM 3
115#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM 4
116#define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT 5
117#define HID_GLOBAL_ITEM_TAG_UNIT 6
118#define HID_GLOBAL_ITEM_TAG_REPORT_SIZE 7
119#define HID_GLOBAL_ITEM_TAG_REPORT_ID 8
120#define HID_GLOBAL_ITEM_TAG_REPORT_COUNT 9
121#define HID_GLOBAL_ITEM_TAG_PUSH 10
122#define HID_GLOBAL_ITEM_TAG_POP 11
123
124
125
126
127
128#define HID_LOCAL_ITEM_TAG_USAGE 0
129#define HID_LOCAL_ITEM_TAG_USAGE_MINIMUM 1
130#define HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM 2
131#define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX 3
132#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MINIMUM 4
133#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAXIMUM 5
134#define HID_LOCAL_ITEM_TAG_STRING_INDEX 7
135#define HID_LOCAL_ITEM_TAG_STRING_MINIMUM 8
136#define HID_LOCAL_ITEM_TAG_STRING_MAXIMUM 9
137#define HID_LOCAL_ITEM_TAG_DELIMITER 10
138
139
140
141
142
143#define HID_USAGE_PAGE 0xffff0000
144
145#define HID_UP_UNDEFINED 0x00000000
146#define HID_UP_GENDESK 0x00010000
147#define HID_UP_SIMULATION 0x00020000
148#define HID_UP_GENDEVCTRLS 0x00060000
149#define HID_UP_KEYBOARD 0x00070000
150#define HID_UP_LED 0x00080000
151#define HID_UP_BUTTON 0x00090000
152#define HID_UP_ORDINAL 0x000a0000
153#define HID_UP_TELEPHONY 0x000b0000
154#define HID_UP_CONSUMER 0x000c0000
155#define HID_UP_DIGITIZER 0x000d0000
156#define HID_UP_PID 0x000f0000
157#define HID_UP_BATTERY 0x00850000
158#define HID_UP_HPVENDOR 0xff7f0000
159#define HID_UP_HPVENDOR2 0xff010000
160#define HID_UP_MSVENDOR 0xff000000
161#define HID_UP_CUSTOM 0x00ff0000
162#define HID_UP_LOGIVENDOR 0xffbc0000
163#define HID_UP_LOGIVENDOR2 0xff090000
164#define HID_UP_LOGIVENDOR3 0xff430000
165#define HID_UP_LNVENDOR 0xffa00000
166#define HID_UP_SENSOR 0x00200000
167#define HID_UP_ASUSVENDOR 0xff310000
168#define HID_UP_GOOGLEVENDOR 0xffd10000
169
170#define HID_USAGE 0x0000ffff
171
172#define HID_GD_POINTER 0x00010001
173#define HID_GD_MOUSE 0x00010002
174#define HID_GD_JOYSTICK 0x00010004
175#define HID_GD_GAMEPAD 0x00010005
176#define HID_GD_KEYBOARD 0x00010006
177#define HID_GD_KEYPAD 0x00010007
178#define HID_GD_MULTIAXIS 0x00010008
179
180
181
182
183#define HID_GD_WIRELESS_RADIO_CTLS 0x0001000c
184
185
186
187
188#define HID_GD_SYSTEM_MULTIAXIS 0x0001000e
189
190#define HID_GD_X 0x00010030
191#define HID_GD_Y 0x00010031
192#define HID_GD_Z 0x00010032
193#define HID_GD_RX 0x00010033
194#define HID_GD_RY 0x00010034
195#define HID_GD_RZ 0x00010035
196#define HID_GD_SLIDER 0x00010036
197#define HID_GD_DIAL 0x00010037
198#define HID_GD_WHEEL 0x00010038
199#define HID_GD_HATSWITCH 0x00010039
200#define HID_GD_BUFFER 0x0001003a
201#define HID_GD_BYTECOUNT 0x0001003b
202#define HID_GD_MOTION 0x0001003c
203#define HID_GD_START 0x0001003d
204#define HID_GD_SELECT 0x0001003e
205#define HID_GD_VX 0x00010040
206#define HID_GD_VY 0x00010041
207#define HID_GD_VZ 0x00010042
208#define HID_GD_VBRX 0x00010043
209#define HID_GD_VBRY 0x00010044
210#define HID_GD_VBRZ 0x00010045
211#define HID_GD_VNO 0x00010046
212#define HID_GD_FEATURE 0x00010047
213#define HID_GD_RESOLUTION_MULTIPLIER 0x00010048
214#define HID_GD_SYSTEM_CONTROL 0x00010080
215#define HID_GD_UP 0x00010090
216#define HID_GD_DOWN 0x00010091
217#define HID_GD_RIGHT 0x00010092
218#define HID_GD_LEFT 0x00010093
219
220#define HID_GD_RFKILL_BTN 0x000100c6
221#define HID_GD_RFKILL_LED 0x000100c7
222#define HID_GD_RFKILL_SWITCH 0x000100c8
223
224#define HID_DC_BATTERYSTRENGTH 0x00060020
225
226#define HID_CP_CONSUMER_CONTROL 0x000c0001
227#define HID_CP_AC_PAN 0x000c0238
228
229#define HID_DG_DIGITIZER 0x000d0001
230#define HID_DG_PEN 0x000d0002
231#define HID_DG_LIGHTPEN 0x000d0003
232#define HID_DG_TOUCHSCREEN 0x000d0004
233#define HID_DG_TOUCHPAD 0x000d0005
234#define HID_DG_WHITEBOARD 0x000d0006
235#define HID_DG_STYLUS 0x000d0020
236#define HID_DG_PUCK 0x000d0021
237#define HID_DG_FINGER 0x000d0022
238#define HID_DG_TIPPRESSURE 0x000d0030
239#define HID_DG_BARRELPRESSURE 0x000d0031
240#define HID_DG_INRANGE 0x000d0032
241#define HID_DG_TOUCH 0x000d0033
242#define HID_DG_UNTOUCH 0x000d0034
243#define HID_DG_TAP 0x000d0035
244#define HID_DG_TRANSDUCER_INDEX 0x000d0038
245#define HID_DG_TABLETFUNCTIONKEY 0x000d0039
246#define HID_DG_PROGRAMCHANGEKEY 0x000d003a
247#define HID_DG_BATTERYSTRENGTH 0x000d003b
248#define HID_DG_INVERT 0x000d003c
249#define HID_DG_TILT_X 0x000d003d
250#define HID_DG_TILT_Y 0x000d003e
251#define HID_DG_TWIST 0x000d0041
252#define HID_DG_TIPSWITCH 0x000d0042
253#define HID_DG_TIPSWITCH2 0x000d0043
254#define HID_DG_BARRELSWITCH 0x000d0044
255#define HID_DG_ERASER 0x000d0045
256#define HID_DG_TABLETPICK 0x000d0046
257#define HID_DG_PEN_COLOR 0x000d005c
258#define HID_DG_PEN_LINE_WIDTH 0x000d005e
259#define HID_DG_PEN_LINE_STYLE 0x000d0070
260#define HID_DG_PEN_LINE_STYLE_INK 0x000d0072
261#define HID_DG_PEN_LINE_STYLE_PENCIL 0x000d0073
262#define HID_DG_PEN_LINE_STYLE_HIGHLIGHTER 0x000d0074
263#define HID_DG_PEN_LINE_STYLE_CHISEL_MARKER 0x000d0075
264#define HID_DG_PEN_LINE_STYLE_BRUSH 0x000d0076
265#define HID_DG_PEN_LINE_STYLE_NO_PREFERENCE 0x000d0077
266
267#define HID_CP_CONSUMERCONTROL 0x000c0001
268#define HID_CP_NUMERICKEYPAD 0x000c0002
269#define HID_CP_PROGRAMMABLEBUTTONS 0x000c0003
270#define HID_CP_MICROPHONE 0x000c0004
271#define HID_CP_HEADPHONE 0x000c0005
272#define HID_CP_GRAPHICEQUALIZER 0x000c0006
273#define HID_CP_FUNCTIONBUTTONS 0x000c0036
274#define HID_CP_SELECTION 0x000c0080
275#define HID_CP_MEDIASELECTION 0x000c0087
276#define HID_CP_SELECTDISC 0x000c00ba
277#define HID_CP_VOLUMEUP 0x000c00e9
278#define HID_CP_VOLUMEDOWN 0x000c00ea
279#define HID_CP_PLAYBACKSPEED 0x000c00f1
280#define HID_CP_PROXIMITY 0x000c0109
281#define HID_CP_SPEAKERSYSTEM 0x000c0160
282#define HID_CP_CHANNELLEFT 0x000c0161
283#define HID_CP_CHANNELRIGHT 0x000c0162
284#define HID_CP_CHANNELCENTER 0x000c0163
285#define HID_CP_CHANNELFRONT 0x000c0164
286#define HID_CP_CHANNELCENTERFRONT 0x000c0165
287#define HID_CP_CHANNELSIDE 0x000c0166
288#define HID_CP_CHANNELSURROUND 0x000c0167
289#define HID_CP_CHANNELLOWFREQUENCYENHANCEMENT 0x000c0168
290#define HID_CP_CHANNELTOP 0x000c0169
291#define HID_CP_CHANNELUNKNOWN 0x000c016a
292#define HID_CP_APPLICATIONLAUNCHBUTTONS 0x000c0180
293#define HID_CP_GENERICGUIAPPLICATIONCONTROLS 0x000c0200
294
295#define HID_DG_DEVICECONFIG 0x000d000e
296#define HID_DG_DEVICESETTINGS 0x000d0023
297#define HID_DG_AZIMUTH 0x000d003f
298#define HID_DG_CONFIDENCE 0x000d0047
299#define HID_DG_WIDTH 0x000d0048
300#define HID_DG_HEIGHT 0x000d0049
301#define HID_DG_CONTACTID 0x000d0051
302#define HID_DG_INPUTMODE 0x000d0052
303#define HID_DG_DEVICEINDEX 0x000d0053
304#define HID_DG_CONTACTCOUNT 0x000d0054
305#define HID_DG_CONTACTMAX 0x000d0055
306#define HID_DG_SCANTIME 0x000d0056
307#define HID_DG_SURFACESWITCH 0x000d0057
308#define HID_DG_BUTTONSWITCH 0x000d0058
309#define HID_DG_BUTTONTYPE 0x000d0059
310#define HID_DG_BARRELSWITCH2 0x000d005a
311#define HID_DG_TOOLSERIALNUMBER 0x000d005b
312#define HID_DG_LATENCYMODE 0x000d0060
313
314#define HID_BAT_ABSOLUTESTATEOFCHARGE 0x00850065
315
316#define HID_VD_ASUS_CUSTOM_MEDIA_KEYS 0xff310076
317
318
319
320
321#define HID_INPUT_REPORT 0
322#define HID_OUTPUT_REPORT 1
323#define HID_FEATURE_REPORT 2
324
325#define HID_REPORT_TYPES 3
326
327
328
329
330
331#define HID_CONNECT_HIDINPUT BIT(0)
332#define HID_CONNECT_HIDINPUT_FORCE BIT(1)
333#define HID_CONNECT_HIDRAW BIT(2)
334#define HID_CONNECT_HIDDEV BIT(3)
335#define HID_CONNECT_HIDDEV_FORCE BIT(4)
336#define HID_CONNECT_FF BIT(5)
337#define HID_CONNECT_DRIVER BIT(6)
338#define HID_CONNECT_DEFAULT (HID_CONNECT_HIDINPUT|HID_CONNECT_HIDRAW| \
339 HID_CONNECT_HIDDEV|HID_CONNECT_FF)
340
341
342
343
344
345
346
347
348#define MAX_USBHID_BOOT_QUIRKS 4
349
350
351#define HID_QUIRK_NOTOUCH BIT(1)
352#define HID_QUIRK_IGNORE BIT(2)
353#define HID_QUIRK_NOGET BIT(3)
354#define HID_QUIRK_HIDDEV_FORCE BIT(4)
355#define HID_QUIRK_BADPAD BIT(5)
356#define HID_QUIRK_MULTI_INPUT BIT(6)
357#define HID_QUIRK_HIDINPUT_FORCE BIT(7)
358
359
360#define HID_QUIRK_ALWAYS_POLL BIT(10)
361#define HID_QUIRK_INPUT_PER_APP BIT(11)
362#define HID_QUIRK_X_INVERT BIT(12)
363#define HID_QUIRK_Y_INVERT BIT(13)
364#define HID_QUIRK_SKIP_OUTPUT_REPORTS BIT(16)
365#define HID_QUIRK_SKIP_OUTPUT_REPORT_ID BIT(17)
366#define HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP BIT(18)
367#define HID_QUIRK_HAVE_SPECIAL_DRIVER BIT(19)
368#define HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE BIT(20)
369#define HID_QUIRK_FULLSPEED_INTERVAL BIT(28)
370#define HID_QUIRK_NO_INIT_REPORTS BIT(29)
371#define HID_QUIRK_NO_IGNORE BIT(30)
372#define HID_QUIRK_NO_INPUT_SYNC BIT(31)
373
374
375
376
377
378
379
380#define HID_GROUP_GENERIC 0x0001
381#define HID_GROUP_MULTITOUCH 0x0002
382#define HID_GROUP_SENSOR_HUB 0x0003
383#define HID_GROUP_MULTITOUCH_WIN_8 0x0004
384
385
386
387
388#define HID_GROUP_RMI 0x0100
389#define HID_GROUP_WACOM 0x0101
390#define HID_GROUP_LOGITECH_DJ_DEVICE 0x0102
391#define HID_GROUP_STEAM 0x0103
392#define HID_GROUP_LOGITECH_27MHZ_DEVICE 0x0104
393#define HID_GROUP_VIVALDI 0x0105
394
395
396
397
398#define HID_REPORT_PROTOCOL 1
399#define HID_BOOT_PROTOCOL 0
400
401
402
403
404
405
406
407struct hid_global {
408 unsigned usage_page;
409 __s32 logical_minimum;
410 __s32 logical_maximum;
411 __s32 physical_minimum;
412 __s32 physical_maximum;
413 __s32 unit_exponent;
414 unsigned unit;
415 unsigned report_id;
416 unsigned report_size;
417 unsigned report_count;
418};
419
420
421
422
423
424#define HID_MAX_USAGES 12288
425#define HID_DEFAULT_NUM_COLLECTIONS 16
426
427struct hid_local {
428 unsigned usage[HID_MAX_USAGES];
429 u8 usage_size[HID_MAX_USAGES];
430 unsigned collection_index[HID_MAX_USAGES];
431 unsigned usage_index;
432 unsigned usage_minimum;
433 unsigned delimiter_depth;
434 unsigned delimiter_branch;
435};
436
437
438
439
440
441
442struct hid_collection {
443 int parent_idx;
444 unsigned type;
445 unsigned usage;
446 unsigned level;
447};
448
449struct hid_usage {
450 unsigned hid;
451 unsigned collection_index;
452 unsigned usage_index;
453 __s8 resolution_multiplier;
454
455
456 __s8 wheel_factor;
457 __u16 code;
458 __u8 type;
459 __s8 hat_min;
460 __s8 hat_max;
461 __s8 hat_dir;
462 __s16 wheel_accumulated;
463};
464
465struct hid_input;
466
467struct hid_field {
468 unsigned physical;
469 unsigned logical;
470 unsigned application;
471 struct hid_usage *usage;
472 unsigned maxusage;
473 unsigned flags;
474 unsigned report_offset;
475 unsigned report_size;
476 unsigned report_count;
477 unsigned report_type;
478 __s32 *value;
479 __s32 *new_value;
480 __s32 *usages_priorities;
481
482
483 __s32 logical_minimum;
484 __s32 logical_maximum;
485 __s32 physical_minimum;
486 __s32 physical_maximum;
487 __s32 unit_exponent;
488 unsigned unit;
489 bool ignored;
490 struct hid_report *report;
491 unsigned index;
492
493 struct hid_input *hidinput;
494 __u16 dpad;
495 unsigned int slot_idx;
496};
497
498#define HID_MAX_FIELDS 256
499
500struct hid_field_entry {
501 struct list_head list;
502 struct hid_field *field;
503 unsigned int index;
504 __s32 priority;
505};
506
507struct hid_report {
508 struct list_head list;
509 struct list_head hidinput_list;
510 struct list_head field_entry_list;
511 unsigned int id;
512 unsigned int type;
513 unsigned int application;
514 struct hid_field *field[HID_MAX_FIELDS];
515 struct hid_field_entry *field_entries;
516 unsigned maxfield;
517 unsigned size;
518 struct hid_device *device;
519
520
521 bool tool_active;
522 unsigned int tool;
523};
524
525#define HID_MAX_IDS 256
526
527struct hid_report_enum {
528 unsigned numbered;
529 struct list_head report_list;
530 struct hid_report *report_id_hash[HID_MAX_IDS];
531};
532
533#define HID_MIN_BUFFER_SIZE 64
534#define HID_MAX_BUFFER_SIZE 16384
535#define HID_CONTROL_FIFO_SIZE 256
536#define HID_OUTPUT_FIFO_SIZE 64
537
538struct hid_control_fifo {
539 unsigned char dir;
540 struct hid_report *report;
541 char *raw_report;
542};
543
544struct hid_output_fifo {
545 struct hid_report *report;
546 char *raw_report;
547};
548
549#define HID_CLAIMED_INPUT BIT(0)
550#define HID_CLAIMED_HIDDEV BIT(1)
551#define HID_CLAIMED_HIDRAW BIT(2)
552#define HID_CLAIMED_DRIVER BIT(3)
553
554#define HID_STAT_ADDED BIT(0)
555#define HID_STAT_PARSED BIT(1)
556#define HID_STAT_DUP_DETECTED BIT(2)
557#define HID_STAT_REPROBED BIT(3)
558
559struct hid_input {
560 struct list_head list;
561 struct hid_report *report;
562 struct input_dev *input;
563 const char *name;
564 bool registered;
565 struct list_head reports;
566 unsigned int application;
567};
568
569enum hid_type {
570 HID_TYPE_OTHER = 0,
571 HID_TYPE_USBMOUSE,
572 HID_TYPE_USBNONE
573};
574
575enum hid_battery_status {
576 HID_BATTERY_UNKNOWN = 0,
577 HID_BATTERY_QUERIED,
578 HID_BATTERY_REPORTED,
579};
580
581struct hid_driver;
582struct hid_ll_driver;
583
584struct hid_device {
585 __u8 *dev_rdesc;
586 unsigned dev_rsize;
587 __u8 *rdesc;
588 unsigned rsize;
589 struct hid_collection *collection;
590 unsigned collection_size;
591 unsigned maxcollection;
592 unsigned maxapplication;
593 __u16 bus;
594 __u16 group;
595 __u32 vendor;
596 __u32 product;
597 __u32 version;
598 enum hid_type type;
599 unsigned country;
600 struct hid_report_enum report_enum[HID_REPORT_TYPES];
601 struct work_struct led_work;
602
603 struct semaphore driver_input_lock;
604 struct device dev;
605 struct hid_driver *driver;
606
607 struct hid_ll_driver *ll_driver;
608 struct mutex ll_open_lock;
609 unsigned int ll_open_count;
610
611#ifdef CONFIG_HID_BATTERY_STRENGTH
612
613
614
615
616
617 struct power_supply *battery;
618 __s32 battery_capacity;
619 __s32 battery_min;
620 __s32 battery_max;
621 __s32 battery_report_type;
622 __s32 battery_report_id;
623 enum hid_battery_status battery_status;
624 bool battery_avoid_query;
625 ktime_t battery_ratelimit_time;
626#endif
627
628 unsigned long status;
629 unsigned claimed;
630 unsigned quirks;
631 bool io_started;
632
633 struct list_head inputs;
634 void *hiddev;
635 void *hidraw;
636
637 char name[128];
638 char phys[64];
639 char uniq[64];
640
641 void *driver_data;
642
643
644 int (*ff_init)(struct hid_device *);
645
646
647 int (*hiddev_connect)(struct hid_device *, unsigned int);
648 void (*hiddev_disconnect)(struct hid_device *);
649 void (*hiddev_hid_event) (struct hid_device *, struct hid_field *field,
650 struct hid_usage *, __s32);
651 void (*hiddev_report_event) (struct hid_device *, struct hid_report *);
652
653
654 unsigned short debug;
655 struct dentry *debug_dir;
656 struct dentry *debug_rdesc;
657 struct dentry *debug_events;
658 struct list_head debug_list;
659 spinlock_t debug_list_lock;
660 wait_queue_head_t debug_wait;
661};
662
663#define to_hid_device(pdev) \
664 container_of(pdev, struct hid_device, dev)
665
666static inline void *hid_get_drvdata(struct hid_device *hdev)
667{
668 return dev_get_drvdata(&hdev->dev);
669}
670
671static inline void hid_set_drvdata(struct hid_device *hdev, void *data)
672{
673 dev_set_drvdata(&hdev->dev, data);
674}
675
676#define HID_GLOBAL_STACK_SIZE 4
677#define HID_COLLECTION_STACK_SIZE 4
678
679#define HID_SCAN_FLAG_MT_WIN_8 BIT(0)
680#define HID_SCAN_FLAG_VENDOR_SPECIFIC BIT(1)
681#define HID_SCAN_FLAG_GD_POINTER BIT(2)
682
683struct hid_parser {
684 struct hid_global global;
685 struct hid_global global_stack[HID_GLOBAL_STACK_SIZE];
686 unsigned int global_stack_ptr;
687 struct hid_local local;
688 unsigned int *collection_stack;
689 unsigned int collection_stack_ptr;
690 unsigned int collection_stack_size;
691 struct hid_device *device;
692 unsigned int scan_flags;
693};
694
695struct hid_class_descriptor {
696 __u8 bDescriptorType;
697 __le16 wDescriptorLength;
698} __attribute__ ((packed));
699
700struct hid_descriptor {
701 __u8 bLength;
702 __u8 bDescriptorType;
703 __le16 bcdHID;
704 __u8 bCountryCode;
705 __u8 bNumDescriptors;
706
707 struct hid_class_descriptor desc[1];
708} __attribute__ ((packed));
709
710#define HID_DEVICE(b, g, ven, prod) \
711 .bus = (b), .group = (g), .vendor = (ven), .product = (prod)
712#define HID_USB_DEVICE(ven, prod) \
713 .bus = BUS_USB, .vendor = (ven), .product = (prod)
714#define HID_BLUETOOTH_DEVICE(ven, prod) \
715 .bus = BUS_BLUETOOTH, .vendor = (ven), .product = (prod)
716#define HID_I2C_DEVICE(ven, prod) \
717 .bus = BUS_I2C, .vendor = (ven), .product = (prod)
718
719#define HID_REPORT_ID(rep) \
720 .report_type = (rep)
721#define HID_USAGE_ID(uhid, utype, ucode) \
722 .usage_hid = (uhid), .usage_type = (utype), .usage_code = (ucode)
723
724#define HID_TERMINATOR (HID_ANY_ID - 1)
725
726struct hid_report_id {
727 __u32 report_type;
728};
729struct hid_usage_id {
730 __u32 usage_hid;
731 __u32 usage_type;
732 __u32 usage_code;
733};
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776struct hid_driver {
777 char *name;
778 const struct hid_device_id *id_table;
779
780 struct list_head dyn_list;
781 spinlock_t dyn_lock;
782
783 bool (*match)(struct hid_device *dev, bool ignore_special_driver);
784 int (*probe)(struct hid_device *dev, const struct hid_device_id *id);
785 void (*remove)(struct hid_device *dev);
786
787 const struct hid_report_id *report_table;
788 int (*raw_event)(struct hid_device *hdev, struct hid_report *report,
789 u8 *data, int size);
790 const struct hid_usage_id *usage_table;
791 int (*event)(struct hid_device *hdev, struct hid_field *field,
792 struct hid_usage *usage, __s32 value);
793 void (*report)(struct hid_device *hdev, struct hid_report *report);
794
795 __u8 *(*report_fixup)(struct hid_device *hdev, __u8 *buf,
796 unsigned int *size);
797
798 int (*input_mapping)(struct hid_device *hdev,
799 struct hid_input *hidinput, struct hid_field *field,
800 struct hid_usage *usage, unsigned long **bit, int *max);
801 int (*input_mapped)(struct hid_device *hdev,
802 struct hid_input *hidinput, struct hid_field *field,
803 struct hid_usage *usage, unsigned long **bit, int *max);
804 int (*input_configured)(struct hid_device *hdev,
805 struct hid_input *hidinput);
806 void (*feature_mapping)(struct hid_device *hdev,
807 struct hid_field *field,
808 struct hid_usage *usage);
809#ifdef CONFIG_PM
810 int (*suspend)(struct hid_device *hdev, pm_message_t message);
811 int (*resume)(struct hid_device *hdev);
812 int (*reset_resume)(struct hid_device *hdev);
813#endif
814
815 struct device_driver driver;
816};
817
818#define to_hid_driver(pdrv) \
819 container_of(pdrv, struct hid_driver, driver)
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837struct hid_ll_driver {
838 int (*start)(struct hid_device *hdev);
839 void (*stop)(struct hid_device *hdev);
840
841 int (*open)(struct hid_device *hdev);
842 void (*close)(struct hid_device *hdev);
843
844 int (*power)(struct hid_device *hdev, int level);
845
846 int (*parse)(struct hid_device *hdev);
847
848 void (*request)(struct hid_device *hdev,
849 struct hid_report *report, int reqtype);
850
851 int (*wait)(struct hid_device *hdev);
852
853 int (*raw_request) (struct hid_device *hdev, unsigned char reportnum,
854 __u8 *buf, size_t len, unsigned char rtype,
855 int reqtype);
856
857 int (*output_report) (struct hid_device *hdev, __u8 *buf, size_t len);
858
859 int (*idle)(struct hid_device *hdev, int report, int idle, int reqtype);
860 bool (*may_wakeup)(struct hid_device *hdev);
861};
862
863extern struct hid_ll_driver i2c_hid_ll_driver;
864extern struct hid_ll_driver hidp_hid_driver;
865extern struct hid_ll_driver uhid_hid_driver;
866extern struct hid_ll_driver usb_hid_driver;
867
868static inline bool hid_is_using_ll_driver(struct hid_device *hdev,
869 struct hid_ll_driver *driver)
870{
871 return hdev->ll_driver == driver;
872}
873
874static inline bool hid_is_usb(struct hid_device *hdev)
875{
876 return hid_is_using_ll_driver(hdev, &usb_hid_driver);
877}
878
879#define PM_HINT_FULLON 1<<5
880#define PM_HINT_NORMAL 1<<1
881
882
883
884#define IS_INPUT_APPLICATION(a) \
885 (((a >= HID_UP_GENDESK) && (a <= HID_GD_MULTIAXIS)) \
886 || ((a >= HID_DG_PEN) && (a <= HID_DG_WHITEBOARD)) \
887 || (a == HID_GD_SYSTEM_CONTROL) || (a == HID_CP_CONSUMER_CONTROL) \
888 || (a == HID_GD_WIRELESS_RADIO_CTLS))
889
890
891
892extern int hid_debug;
893
894extern bool hid_ignore(struct hid_device *);
895extern int hid_add_device(struct hid_device *);
896extern void hid_destroy_device(struct hid_device *);
897
898extern struct bus_type hid_bus_type;
899
900extern int __must_check __hid_register_driver(struct hid_driver *,
901 struct module *, const char *mod_name);
902
903
904#define hid_register_driver(driver) \
905 __hid_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
906
907extern void hid_unregister_driver(struct hid_driver *);
908
909
910
911
912
913
914
915
916
917#define module_hid_driver(__hid_driver) \
918 module_driver(__hid_driver, hid_register_driver, \
919 hid_unregister_driver)
920
921extern void hidinput_hid_event(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
922extern void hidinput_report_event(struct hid_device *hid, struct hid_report *report);
923extern int hidinput_connect(struct hid_device *hid, unsigned int force);
924extern void hidinput_disconnect(struct hid_device *);
925
926int hid_set_field(struct hid_field *, unsigned, __s32);
927int hid_input_report(struct hid_device *, int type, u8 *, u32, int);
928struct hid_field *hidinput_get_led_field(struct hid_device *hid);
929unsigned int hidinput_count_leds(struct hid_device *hid);
930__s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code);
931void hid_output_report(struct hid_report *report, __u8 *data);
932int __hid_request(struct hid_device *hid, struct hid_report *rep, int reqtype);
933u8 *hid_alloc_report_buf(struct hid_report *report, gfp_t flags);
934struct hid_device *hid_allocate_device(void);
935struct hid_report *hid_register_report(struct hid_device *device,
936 unsigned int type, unsigned int id,
937 unsigned int application);
938int hid_parse_report(struct hid_device *hid, __u8 *start, unsigned size);
939struct hid_report *hid_validate_values(struct hid_device *hid,
940 unsigned int type, unsigned int id,
941 unsigned int field_index,
942 unsigned int report_counts);
943
944void hid_setup_resolution_multiplier(struct hid_device *hid);
945int hid_open_report(struct hid_device *device);
946int hid_check_keys_pressed(struct hid_device *hid);
947int hid_connect(struct hid_device *hid, unsigned int connect_mask);
948void hid_disconnect(struct hid_device *hid);
949bool hid_match_one_id(const struct hid_device *hdev,
950 const struct hid_device_id *id);
951const struct hid_device_id *hid_match_id(const struct hid_device *hdev,
952 const struct hid_device_id *id);
953const struct hid_device_id *hid_match_device(struct hid_device *hdev,
954 struct hid_driver *hdrv);
955bool hid_compare_device_paths(struct hid_device *hdev_a,
956 struct hid_device *hdev_b, char separator);
957s32 hid_snto32(__u32 value, unsigned n);
958__u32 hid_field_extract(const struct hid_device *hid, __u8 *report,
959 unsigned offset, unsigned n);
960
961#ifdef CONFIG_PM
962int hid_driver_suspend(struct hid_device *hdev, pm_message_t state);
963int hid_driver_reset_resume(struct hid_device *hdev);
964int hid_driver_resume(struct hid_device *hdev);
965#else
966static inline int hid_driver_suspend(struct hid_device *hdev, pm_message_t state) { return 0; }
967static inline int hid_driver_reset_resume(struct hid_device *hdev) { return 0; }
968static inline int hid_driver_resume(struct hid_device *hdev) { return 0; }
969#endif
970
971
972
973
974
975
976
977
978
979
980static inline void hid_device_io_start(struct hid_device *hid) {
981 if (hid->io_started) {
982 dev_warn(&hid->dev, "io already started\n");
983 return;
984 }
985 hid->io_started = true;
986 up(&hid->driver_input_lock);
987}
988
989
990
991
992
993
994
995
996
997
998
999
1000static inline void hid_device_io_stop(struct hid_device *hid) {
1001 if (!hid->io_started) {
1002 dev_warn(&hid->dev, "io already stopped\n");
1003 return;
1004 }
1005 hid->io_started = false;
1006 down(&hid->driver_input_lock);
1007}
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023static inline void hid_map_usage(struct hid_input *hidinput,
1024 struct hid_usage *usage, unsigned long **bit, int *max,
1025 __u8 type, unsigned int c)
1026{
1027 struct input_dev *input = hidinput->input;
1028 unsigned long *bmap = NULL;
1029 unsigned int limit = 0;
1030
1031 switch (type) {
1032 case EV_ABS:
1033 bmap = input->absbit;
1034 limit = ABS_MAX;
1035 break;
1036 case EV_REL:
1037 bmap = input->relbit;
1038 limit = REL_MAX;
1039 break;
1040 case EV_KEY:
1041 bmap = input->keybit;
1042 limit = KEY_MAX;
1043 break;
1044 case EV_LED:
1045 bmap = input->ledbit;
1046 limit = LED_MAX;
1047 break;
1048 case EV_MSC:
1049 bmap = input->mscbit;
1050 limit = MSC_MAX;
1051 break;
1052 }
1053
1054 if (unlikely(c > limit || !bmap)) {
1055 pr_warn_ratelimited("%s: Invalid code %d type %d\n",
1056 input->name, c, type);
1057 *bit = NULL;
1058 return;
1059 }
1060
1061 usage->type = type;
1062 usage->code = c;
1063 *max = limit;
1064 *bit = bmap;
1065}
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080static inline void hid_map_usage_clear(struct hid_input *hidinput,
1081 struct hid_usage *usage, unsigned long **bit, int *max,
1082 __u8 type, __u16 c)
1083{
1084 hid_map_usage(hidinput, usage, bit, max, type, c);
1085 if (*bit)
1086 clear_bit(usage->code, *bit);
1087}
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098static inline int __must_check hid_parse(struct hid_device *hdev)
1099{
1100 return hid_open_report(hdev);
1101}
1102
1103int __must_check hid_hw_start(struct hid_device *hdev,
1104 unsigned int connect_mask);
1105void hid_hw_stop(struct hid_device *hdev);
1106int __must_check hid_hw_open(struct hid_device *hdev);
1107void hid_hw_close(struct hid_device *hdev);
1108void hid_hw_request(struct hid_device *hdev,
1109 struct hid_report *report, int reqtype);
1110int hid_hw_raw_request(struct hid_device *hdev,
1111 unsigned char reportnum, __u8 *buf,
1112 size_t len, unsigned char rtype, int reqtype);
1113int hid_hw_output_report(struct hid_device *hdev, __u8 *buf, size_t len);
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125static inline int hid_hw_power(struct hid_device *hdev, int level)
1126{
1127 return hdev->ll_driver->power ? hdev->ll_driver->power(hdev, level) : 0;
1128}
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139static inline int hid_hw_idle(struct hid_device *hdev, int report, int idle,
1140 int reqtype)
1141{
1142 if (hdev->ll_driver->idle)
1143 return hdev->ll_driver->idle(hdev, report, idle, reqtype);
1144
1145 return 0;
1146}
1147
1148
1149
1150
1151
1152
1153static inline bool hid_hw_may_wakeup(struct hid_device *hdev)
1154{
1155 if (hdev->ll_driver->may_wakeup)
1156 return hdev->ll_driver->may_wakeup(hdev);
1157
1158 if (hdev->dev.parent)
1159 return device_may_wakeup(hdev->dev.parent);
1160
1161 return false;
1162}
1163
1164
1165
1166
1167
1168
1169static inline void hid_hw_wait(struct hid_device *hdev)
1170{
1171 if (hdev->ll_driver->wait)
1172 hdev->ll_driver->wait(hdev);
1173}
1174
1175
1176
1177
1178
1179
1180static inline u32 hid_report_len(struct hid_report *report)
1181{
1182 return DIV_ROUND_UP(report->size, 8) + (report->id > 0);
1183}
1184
1185int hid_report_raw_event(struct hid_device *hid, int type, u8 *data, u32 size,
1186 int interrupt);
1187
1188
1189unsigned long hid_lookup_quirk(const struct hid_device *hdev);
1190int hid_quirks_init(char **quirks_param, __u16 bus, int count);
1191void hid_quirks_exit(__u16 bus);
1192
1193#ifdef CONFIG_HID_PID
1194int hid_pidff_init(struct hid_device *hid);
1195#else
1196#define hid_pidff_init NULL
1197#endif
1198
1199#define dbg_hid(fmt, ...) \
1200do { \
1201 if (hid_debug) \
1202 printk(KERN_DEBUG "%s: " fmt, __FILE__, ##__VA_ARGS__); \
1203} while (0)
1204
1205#define hid_err(hid, fmt, ...) \
1206 dev_err(&(hid)->dev, fmt, ##__VA_ARGS__)
1207#define hid_notice(hid, fmt, ...) \
1208 dev_notice(&(hid)->dev, fmt, ##__VA_ARGS__)
1209#define hid_warn(hid, fmt, ...) \
1210 dev_warn(&(hid)->dev, fmt, ##__VA_ARGS__)
1211#define hid_info(hid, fmt, ...) \
1212 dev_info(&(hid)->dev, fmt, ##__VA_ARGS__)
1213#define hid_dbg(hid, fmt, ...) \
1214 dev_dbg(&(hid)->dev, fmt, ##__VA_ARGS__)
1215
1216#define hid_err_once(hid, fmt, ...) \
1217 dev_err_once(&(hid)->dev, fmt, ##__VA_ARGS__)
1218#define hid_notice_once(hid, fmt, ...) \
1219 dev_notice_once(&(hid)->dev, fmt, ##__VA_ARGS__)
1220#define hid_warn_once(hid, fmt, ...) \
1221 dev_warn_once(&(hid)->dev, fmt, ##__VA_ARGS__)
1222#define hid_info_once(hid, fmt, ...) \
1223 dev_info_once(&(hid)->dev, fmt, ##__VA_ARGS__)
1224#define hid_dbg_once(hid, fmt, ...) \
1225 dev_dbg_once(&(hid)->dev, fmt, ##__VA_ARGS__)
1226
1227#endif
1228