1#ifndef __HID_H
2#define __HID_H
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34#define USB_INTERFACE_CLASS_HID 3
35
36
37
38
39
40#define USB_INTERFACE_SUBCLASS_BOOT 1
41#define USB_INTERFACE_PROTOCOL_KEYBOARD 1
42#define USB_INTERFACE_PROTOCOL_MOUSE 2
43
44
45
46
47
48#define HID_REQ_GET_REPORT 0x01
49#define HID_REQ_GET_IDLE 0x02
50#define HID_REQ_GET_PROTOCOL 0x03
51#define HID_REQ_SET_REPORT 0x09
52#define HID_REQ_SET_IDLE 0x0A
53#define HID_REQ_SET_PROTOCOL 0x0B
54
55
56
57
58
59#define HID_DT_HID (USB_TYPE_CLASS | 0x01)
60#define HID_DT_REPORT (USB_TYPE_CLASS | 0x02)
61#define HID_DT_PHYSICAL (USB_TYPE_CLASS | 0x03)
62
63#define HID_MAX_DESCRIPTOR_SIZE 4096
64
65#ifdef __KERNEL__
66
67#include <linux/types.h>
68#include <linux/slab.h>
69#include <linux/list.h>
70#include <linux/mod_devicetable.h>
71#include <linux/timer.h>
72#include <linux/workqueue.h>
73#include <linux/input.h>
74
75
76
77
78
79
80
81struct hid_item {
82 unsigned format;
83 __u8 size;
84 __u8 type;
85 __u8 tag;
86 union {
87 __u8 u8;
88 __s8 s8;
89 __u16 u16;
90 __s16 s16;
91 __u32 u32;
92 __s32 s32;
93 __u8 *longdata;
94 } data;
95};
96
97
98
99
100
101#define HID_ITEM_FORMAT_SHORT 0
102#define HID_ITEM_FORMAT_LONG 1
103
104
105
106
107
108#define HID_ITEM_TAG_LONG 15
109
110
111
112
113
114#define HID_ITEM_TYPE_MAIN 0
115#define HID_ITEM_TYPE_GLOBAL 1
116#define HID_ITEM_TYPE_LOCAL 2
117#define HID_ITEM_TYPE_RESERVED 3
118
119
120
121
122
123#define HID_MAIN_ITEM_TAG_INPUT 8
124#define HID_MAIN_ITEM_TAG_OUTPUT 9
125#define HID_MAIN_ITEM_TAG_FEATURE 11
126#define HID_MAIN_ITEM_TAG_BEGIN_COLLECTION 10
127#define HID_MAIN_ITEM_TAG_END_COLLECTION 12
128
129
130
131
132
133#define HID_MAIN_ITEM_CONSTANT 0x001
134#define HID_MAIN_ITEM_VARIABLE 0x002
135#define HID_MAIN_ITEM_RELATIVE 0x004
136#define HID_MAIN_ITEM_WRAP 0x008
137#define HID_MAIN_ITEM_NONLINEAR 0x010
138#define HID_MAIN_ITEM_NO_PREFERRED 0x020
139#define HID_MAIN_ITEM_NULL_STATE 0x040
140#define HID_MAIN_ITEM_VOLATILE 0x080
141#define HID_MAIN_ITEM_BUFFERED_BYTE 0x100
142
143
144
145
146
147#define HID_COLLECTION_PHYSICAL 0
148#define HID_COLLECTION_APPLICATION 1
149#define HID_COLLECTION_LOGICAL 2
150
151
152
153
154
155#define HID_GLOBAL_ITEM_TAG_USAGE_PAGE 0
156#define HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM 1
157#define HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM 2
158#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM 3
159#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM 4
160#define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT 5
161#define HID_GLOBAL_ITEM_TAG_UNIT 6
162#define HID_GLOBAL_ITEM_TAG_REPORT_SIZE 7
163#define HID_GLOBAL_ITEM_TAG_REPORT_ID 8
164#define HID_GLOBAL_ITEM_TAG_REPORT_COUNT 9
165#define HID_GLOBAL_ITEM_TAG_PUSH 10
166#define HID_GLOBAL_ITEM_TAG_POP 11
167
168
169
170
171
172#define HID_LOCAL_ITEM_TAG_USAGE 0
173#define HID_LOCAL_ITEM_TAG_USAGE_MINIMUM 1
174#define HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM 2
175#define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX 3
176#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MINIMUM 4
177#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAXIMUM 5
178#define HID_LOCAL_ITEM_TAG_STRING_INDEX 7
179#define HID_LOCAL_ITEM_TAG_STRING_MINIMUM 8
180#define HID_LOCAL_ITEM_TAG_STRING_MAXIMUM 9
181#define HID_LOCAL_ITEM_TAG_DELIMITER 10
182
183
184
185
186
187#define HID_USAGE_PAGE 0xffff0000
188
189#define HID_UP_UNDEFINED 0x00000000
190#define HID_UP_GENDESK 0x00010000
191#define HID_UP_SIMULATION 0x00020000
192#define HID_UP_KEYBOARD 0x00070000
193#define HID_UP_LED 0x00080000
194#define HID_UP_BUTTON 0x00090000
195#define HID_UP_ORDINAL 0x000a0000
196#define HID_UP_CONSUMER 0x000c0000
197#define HID_UP_DIGITIZER 0x000d0000
198#define HID_UP_PID 0x000f0000
199#define HID_UP_HPVENDOR 0xff7f0000
200#define HID_UP_MSVENDOR 0xff000000
201#define HID_UP_CUSTOM 0x00ff0000
202#define HID_UP_LOGIVENDOR 0xffbc0000
203
204#define HID_USAGE 0x0000ffff
205
206#define HID_GD_POINTER 0x00010001
207#define HID_GD_MOUSE 0x00010002
208#define HID_GD_JOYSTICK 0x00010004
209#define HID_GD_GAMEPAD 0x00010005
210#define HID_GD_KEYBOARD 0x00010006
211#define HID_GD_KEYPAD 0x00010007
212#define HID_GD_MULTIAXIS 0x00010008
213#define HID_GD_X 0x00010030
214#define HID_GD_Y 0x00010031
215#define HID_GD_Z 0x00010032
216#define HID_GD_RX 0x00010033
217#define HID_GD_RY 0x00010034
218#define HID_GD_RZ 0x00010035
219#define HID_GD_SLIDER 0x00010036
220#define HID_GD_DIAL 0x00010037
221#define HID_GD_WHEEL 0x00010038
222#define HID_GD_HATSWITCH 0x00010039
223#define HID_GD_BUFFER 0x0001003a
224#define HID_GD_BYTECOUNT 0x0001003b
225#define HID_GD_MOTION 0x0001003c
226#define HID_GD_START 0x0001003d
227#define HID_GD_SELECT 0x0001003e
228#define HID_GD_VX 0x00010040
229#define HID_GD_VY 0x00010041
230#define HID_GD_VZ 0x00010042
231#define HID_GD_VBRX 0x00010043
232#define HID_GD_VBRY 0x00010044
233#define HID_GD_VBRZ 0x00010045
234#define HID_GD_VNO 0x00010046
235#define HID_GD_FEATURE 0x00010047
236#define HID_GD_UP 0x00010090
237#define HID_GD_DOWN 0x00010091
238#define HID_GD_RIGHT 0x00010092
239#define HID_GD_LEFT 0x00010093
240
241#define HID_DG_DIGITIZER 0x000d0001
242#define HID_DG_PEN 0x000d0002
243#define HID_DG_LIGHTPEN 0x000d0003
244#define HID_DG_TOUCHSCREEN 0x000d0004
245#define HID_DG_TOUCHPAD 0x000d0005
246#define HID_DG_STYLUS 0x000d0020
247#define HID_DG_PUCK 0x000d0021
248#define HID_DG_FINGER 0x000d0022
249#define HID_DG_TIPPRESSURE 0x000d0030
250#define HID_DG_BARRELPRESSURE 0x000d0031
251#define HID_DG_INRANGE 0x000d0032
252#define HID_DG_TOUCH 0x000d0033
253#define HID_DG_UNTOUCH 0x000d0034
254#define HID_DG_TAP 0x000d0035
255#define HID_DG_TABLETFUNCTIONKEY 0x000d0039
256#define HID_DG_PROGRAMCHANGEKEY 0x000d003a
257#define HID_DG_INVERT 0x000d003c
258#define HID_DG_TIPSWITCH 0x000d0042
259#define HID_DG_TIPSWITCH2 0x000d0043
260#define HID_DG_BARRELSWITCH 0x000d0044
261#define HID_DG_ERASER 0x000d0045
262#define HID_DG_TABLETPICK 0x000d0046
263
264
265
266
267
268#define HID_DG_CONFIDENCE 0x000d0047
269#define HID_DG_WIDTH 0x000d0048
270#define HID_DG_HEIGHT 0x000d0049
271#define HID_DG_CONTACTID 0x000d0051
272#define HID_DG_INPUTMODE 0x000d0052
273#define HID_DG_DEVICEINDEX 0x000d0053
274#define HID_DG_CONTACTCOUNT 0x000d0054
275#define HID_DG_CONTACTMAX 0x000d0055
276
277
278
279
280
281#define HID_INPUT_REPORT 0
282#define HID_OUTPUT_REPORT 1
283#define HID_FEATURE_REPORT 2
284
285
286
287
288
289#define HID_CONNECT_HIDINPUT 0x01
290#define HID_CONNECT_HIDINPUT_FORCE 0x02
291#define HID_CONNECT_HIDRAW 0x04
292#define HID_CONNECT_HIDDEV 0x08
293#define HID_CONNECT_HIDDEV_FORCE 0x10
294#define HID_CONNECT_FF 0x20
295#define HID_CONNECT_DEFAULT (HID_CONNECT_HIDINPUT|HID_CONNECT_HIDRAW| \
296 HID_CONNECT_HIDDEV|HID_CONNECT_FF)
297
298
299
300
301
302
303
304
305#define MAX_USBHID_BOOT_QUIRKS 4
306
307#define HID_QUIRK_INVERT 0x00000001
308#define HID_QUIRK_NOTOUCH 0x00000002
309#define HID_QUIRK_IGNORE 0x00000004
310#define HID_QUIRK_NOGET 0x00000008
311#define HID_QUIRK_BADPAD 0x00000020
312#define HID_QUIRK_MULTI_INPUT 0x00000040
313#define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000
314#define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000
315
316
317
318
319
320
321
322struct hid_global {
323 unsigned usage_page;
324 __s32 logical_minimum;
325 __s32 logical_maximum;
326 __s32 physical_minimum;
327 __s32 physical_maximum;
328 __s32 unit_exponent;
329 unsigned unit;
330 unsigned report_id;
331 unsigned report_size;
332 unsigned report_count;
333};
334
335
336
337
338
339#define HID_MAX_USAGES 12288
340#define HID_DEFAULT_NUM_COLLECTIONS 16
341
342struct hid_local {
343 unsigned usage[HID_MAX_USAGES];
344 unsigned collection_index[HID_MAX_USAGES];
345 unsigned usage_index;
346 unsigned usage_minimum;
347 unsigned delimiter_depth;
348 unsigned delimiter_branch;
349};
350
351
352
353
354
355
356struct hid_collection {
357 unsigned type;
358 unsigned usage;
359 unsigned level;
360};
361
362struct hid_usage {
363 unsigned hid;
364 unsigned collection_index;
365
366 __u16 code;
367 __u8 type;
368 __s8 hat_min;
369 __s8 hat_max;
370 __s8 hat_dir;
371};
372
373struct hid_input;
374
375struct hid_field {
376 unsigned physical;
377 unsigned logical;
378 unsigned application;
379 struct hid_usage *usage;
380 unsigned maxusage;
381 unsigned flags;
382 unsigned report_offset;
383 unsigned report_size;
384 unsigned report_count;
385 unsigned report_type;
386 __s32 *value;
387 __s32 logical_minimum;
388 __s32 logical_maximum;
389 __s32 physical_minimum;
390 __s32 physical_maximum;
391 __s32 unit_exponent;
392 unsigned unit;
393 struct hid_report *report;
394 unsigned index;
395
396 struct hid_input *hidinput;
397 __u16 dpad;
398};
399
400#define HID_MAX_FIELDS 64
401
402struct hid_report {
403 struct list_head list;
404 unsigned id;
405 unsigned type;
406 struct hid_field *field[HID_MAX_FIELDS];
407 unsigned maxfield;
408 unsigned size;
409 struct hid_device *device;
410};
411
412struct hid_report_enum {
413 unsigned numbered;
414 struct list_head report_list;
415 struct hid_report *report_id_hash[256];
416};
417
418#define HID_REPORT_TYPES 3
419
420#define HID_MIN_BUFFER_SIZE 64
421#define HID_MAX_BUFFER_SIZE 4096
422#define HID_CONTROL_FIFO_SIZE 256
423#define HID_OUTPUT_FIFO_SIZE 64
424
425struct hid_control_fifo {
426 unsigned char dir;
427 struct hid_report *report;
428 char *raw_report;
429};
430
431struct hid_output_fifo {
432 struct hid_report *report;
433 char *raw_report;
434};
435
436#define HID_CLAIMED_INPUT 1
437#define HID_CLAIMED_HIDDEV 2
438#define HID_CLAIMED_HIDRAW 4
439
440#define HID_STAT_ADDED 1
441#define HID_STAT_PARSED 2
442
443struct hid_input {
444 struct list_head list;
445 struct hid_report *report;
446 struct input_dev *input;
447};
448
449enum hid_type {
450 HID_TYPE_OTHER = 0,
451 HID_TYPE_USBMOUSE
452};
453
454struct hid_driver;
455struct hid_ll_driver;
456
457struct hid_device {
458 __u8 *rdesc;
459 unsigned rsize;
460 struct hid_collection *collection;
461 unsigned collection_size;
462 unsigned maxcollection;
463 unsigned maxapplication;
464 __u16 bus;
465 __u32 vendor;
466 __u32 product;
467 __u32 version;
468 enum hid_type type;
469 unsigned country;
470 struct hid_report_enum report_enum[HID_REPORT_TYPES];
471
472 struct device dev;
473 struct hid_driver *driver;
474 struct hid_ll_driver *ll_driver;
475
476 unsigned int status;
477 unsigned claimed;
478 unsigned quirks;
479
480 struct list_head inputs;
481 void *hiddev;
482 void *hidraw;
483 int minor;
484
485 int open;
486 char name[128];
487 char phys[64];
488 char uniq[64];
489
490 void *driver_data;
491
492
493 int (*ff_init)(struct hid_device *);
494
495
496 int (*hiddev_connect)(struct hid_device *, unsigned int);
497 void (*hiddev_disconnect)(struct hid_device *);
498 void (*hiddev_hid_event) (struct hid_device *, struct hid_field *field,
499 struct hid_usage *, __s32);
500 void (*hiddev_report_event) (struct hid_device *, struct hid_report *);
501
502
503 int (*hid_output_raw_report) (struct hid_device *, __u8 *, size_t);
504
505
506 unsigned short debug;
507 struct dentry *debug_dir;
508 struct dentry *debug_rdesc;
509 struct dentry *debug_events;
510 struct list_head debug_list;
511 wait_queue_head_t debug_wait;
512};
513
514static inline void *hid_get_drvdata(struct hid_device *hdev)
515{
516 return dev_get_drvdata(&hdev->dev);
517}
518
519static inline void hid_set_drvdata(struct hid_device *hdev, void *data)
520{
521 dev_set_drvdata(&hdev->dev, data);
522}
523
524#define HID_GLOBAL_STACK_SIZE 4
525#define HID_COLLECTION_STACK_SIZE 4
526
527struct hid_parser {
528 struct hid_global global;
529 struct hid_global global_stack[HID_GLOBAL_STACK_SIZE];
530 unsigned global_stack_ptr;
531 struct hid_local local;
532 unsigned collection_stack[HID_COLLECTION_STACK_SIZE];
533 unsigned collection_stack_ptr;
534 struct hid_device *device;
535};
536
537struct hid_class_descriptor {
538 __u8 bDescriptorType;
539 __le16 wDescriptorLength;
540} __attribute__ ((packed));
541
542struct hid_descriptor {
543 __u8 bLength;
544 __u8 bDescriptorType;
545 __le16 bcdHID;
546 __u8 bCountryCode;
547 __u8 bNumDescriptors;
548
549 struct hid_class_descriptor desc[1];
550} __attribute__ ((packed));
551
552#define HID_DEVICE(b, ven, prod) \
553 .bus = (b), \
554 .vendor = (ven), .product = (prod)
555
556#define HID_USB_DEVICE(ven, prod) HID_DEVICE(BUS_USB, ven, prod)
557#define HID_BLUETOOTH_DEVICE(ven, prod) HID_DEVICE(BUS_BLUETOOTH, ven, prod)
558
559#define HID_REPORT_ID(rep) \
560 .report_type = (rep)
561#define HID_USAGE_ID(uhid, utype, ucode) \
562 .usage_hid = (uhid), .usage_type = (utype), .usage_code = (ucode)
563
564#define HID_TERMINATOR (HID_ANY_ID - 1)
565
566struct hid_report_id {
567 __u32 report_type;
568};
569struct hid_usage_id {
570 __u32 usage_hid;
571 __u32 usage_type;
572 __u32 usage_code;
573};
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605struct hid_driver {
606 char *name;
607 const struct hid_device_id *id_table;
608
609 struct list_head dyn_list;
610 spinlock_t dyn_lock;
611
612 int (*probe)(struct hid_device *dev, const struct hid_device_id *id);
613 void (*remove)(struct hid_device *dev);
614
615 const struct hid_report_id *report_table;
616 int (*raw_event)(struct hid_device *hdev, struct hid_report *report,
617 u8 *data, int size);
618 const struct hid_usage_id *usage_table;
619 int (*event)(struct hid_device *hdev, struct hid_field *field,
620 struct hid_usage *usage, __s32 value);
621
622 void (*report_fixup)(struct hid_device *hdev, __u8 *buf,
623 unsigned int size);
624
625 int (*input_mapping)(struct hid_device *hdev,
626 struct hid_input *hidinput, struct hid_field *field,
627 struct hid_usage *usage, unsigned long **bit, int *max);
628 int (*input_mapped)(struct hid_device *hdev,
629 struct hid_input *hidinput, struct hid_field *field,
630 struct hid_usage *usage, unsigned long **bit, int *max);
631
632 struct device_driver driver;
633};
634
635
636
637
638
639
640
641
642
643
644
645struct hid_ll_driver {
646 int (*start)(struct hid_device *hdev);
647 void (*stop)(struct hid_device *hdev);
648
649 int (*open)(struct hid_device *hdev);
650 void (*close)(struct hid_device *hdev);
651
652 int (*power)(struct hid_device *hdev, int level);
653
654 int (*hidinput_input_event) (struct input_dev *idev, unsigned int type,
655 unsigned int code, int value);
656
657 int (*parse)(struct hid_device *hdev);
658};
659
660#define PM_HINT_FULLON 1<<5
661#define PM_HINT_NORMAL 1<<1
662
663
664
665#define IS_INPUT_APPLICATION(a) (((a >= 0x00010000) && (a <= 0x00010008)) || (a == 0x00010080) || (a == 0x000c0001) || (a == 0x000d0002))
666
667
668
669extern int hid_debug;
670
671extern int hid_add_device(struct hid_device *);
672extern void hid_destroy_device(struct hid_device *);
673
674extern int __must_check __hid_register_driver(struct hid_driver *,
675 struct module *, const char *mod_name);
676static inline int __must_check hid_register_driver(struct hid_driver *driver)
677{
678 return __hid_register_driver(driver, THIS_MODULE, KBUILD_MODNAME);
679}
680extern void hid_unregister_driver(struct hid_driver *);
681
682extern void hidinput_hid_event(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
683extern void hidinput_report_event(struct hid_device *hid, struct hid_report *report);
684extern int hidinput_connect(struct hid_device *hid, unsigned int force);
685extern void hidinput_disconnect(struct hid_device *);
686
687int hid_set_field(struct hid_field *, unsigned, __s32);
688int hid_input_report(struct hid_device *, int type, u8 *, int, int);
689int hidinput_find_field(struct hid_device *hid, unsigned int type, unsigned int code, struct hid_field **field);
690void hid_output_report(struct hid_report *report, __u8 *data);
691struct hid_device *hid_allocate_device(void);
692int hid_parse_report(struct hid_device *hid, __u8 *start, unsigned size);
693int hid_check_keys_pressed(struct hid_device *hid);
694int hid_connect(struct hid_device *hid, unsigned int connect_mask);
695void hid_disconnect(struct hid_device *hid);
696
697
698
699
700
701
702
703
704
705
706
707static inline void hid_map_usage(struct hid_input *hidinput,
708 struct hid_usage *usage, unsigned long **bit, int *max,
709 __u8 type, __u16 c)
710{
711 struct input_dev *input = hidinput->input;
712
713 usage->type = type;
714 usage->code = c;
715
716 switch (type) {
717 case EV_ABS:
718 *bit = input->absbit;
719 *max = ABS_MAX;
720 break;
721 case EV_REL:
722 *bit = input->relbit;
723 *max = REL_MAX;
724 break;
725 case EV_KEY:
726 *bit = input->keybit;
727 *max = KEY_MAX;
728 break;
729 case EV_LED:
730 *bit = input->ledbit;
731 *max = LED_MAX;
732 break;
733 }
734}
735
736
737
738
739
740
741
742static inline void hid_map_usage_clear(struct hid_input *hidinput,
743 struct hid_usage *usage, unsigned long **bit, int *max,
744 __u8 type, __u16 c)
745{
746 hid_map_usage(hidinput, usage, bit, max, type, c);
747 clear_bit(c, *bit);
748}
749
750
751
752
753
754
755
756
757
758
759static inline int __must_check hid_parse(struct hid_device *hdev)
760{
761 int ret;
762
763 if (hdev->status & HID_STAT_PARSED)
764 return 0;
765
766 ret = hdev->ll_driver->parse(hdev);
767 if (!ret)
768 hdev->status |= HID_STAT_PARSED;
769
770 return ret;
771}
772
773
774
775
776
777
778
779
780
781
782
783static inline int __must_check hid_hw_start(struct hid_device *hdev,
784 unsigned int connect_mask)
785{
786 int ret = hdev->ll_driver->start(hdev);
787 if (ret || !connect_mask)
788 return ret;
789 ret = hid_connect(hdev, connect_mask);
790 if (ret)
791 hdev->ll_driver->stop(hdev);
792 return ret;
793}
794
795
796
797
798
799
800
801
802
803static inline void hid_hw_stop(struct hid_device *hdev)
804{
805 hid_disconnect(hdev);
806 hdev->ll_driver->stop(hdev);
807}
808
809void hid_report_raw_event(struct hid_device *hid, int type, u8 *data, int size,
810 int interrupt);
811
812extern int hid_generic_init(void);
813extern void hid_generic_exit(void);
814
815
816u32 usbhid_lookup_quirk(const u16 idVendor, const u16 idProduct);
817int usbhid_quirks_init(char **quirks_param);
818void usbhid_quirks_exit(void);
819void usbhid_set_leds(struct hid_device *hid);
820
821#ifdef CONFIG_HID_PID
822int hid_pidff_init(struct hid_device *hid);
823#else
824#define hid_pidff_init NULL
825#endif
826
827#define dbg_hid(format, arg...) if (hid_debug) \
828 printk(KERN_DEBUG "%s: " format ,\
829 __FILE__ , ## arg)
830#define err_hid(format, arg...) printk(KERN_ERR "%s: " format "\n" , \
831 __FILE__ , ## arg)
832#endif
833
834#endif
835
836