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
242
243
244
245#define HID_INPUT_REPORT 0
246#define HID_OUTPUT_REPORT 1
247#define HID_FEATURE_REPORT 2
248
249
250
251
252
253#define HID_CONNECT_HIDINPUT 0x01
254#define HID_CONNECT_HIDINPUT_FORCE 0x02
255#define HID_CONNECT_HIDRAW 0x04
256#define HID_CONNECT_HIDDEV 0x08
257#define HID_CONNECT_HIDDEV_FORCE 0x10
258#define HID_CONNECT_FF 0x20
259#define HID_CONNECT_DEFAULT (HID_CONNECT_HIDINPUT|HID_CONNECT_HIDRAW| \
260 HID_CONNECT_HIDDEV|HID_CONNECT_FF)
261
262
263
264
265
266
267
268
269#define MAX_USBHID_BOOT_QUIRKS 4
270
271#define HID_QUIRK_INVERT 0x00000001
272#define HID_QUIRK_NOTOUCH 0x00000002
273#define HID_QUIRK_NOGET 0x00000008
274#define HID_QUIRK_BADPAD 0x00000020
275#define HID_QUIRK_MULTI_INPUT 0x00000040
276#define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000
277#define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000
278
279
280
281
282
283
284
285struct hid_global {
286 unsigned usage_page;
287 __s32 logical_minimum;
288 __s32 logical_maximum;
289 __s32 physical_minimum;
290 __s32 physical_maximum;
291 __s32 unit_exponent;
292 unsigned unit;
293 unsigned report_id;
294 unsigned report_size;
295 unsigned report_count;
296};
297
298
299
300
301
302#define HID_MAX_USAGES 12288
303#define HID_DEFAULT_NUM_COLLECTIONS 16
304
305struct hid_local {
306 unsigned usage[HID_MAX_USAGES];
307 unsigned collection_index[HID_MAX_USAGES];
308 unsigned usage_index;
309 unsigned usage_minimum;
310 unsigned delimiter_depth;
311 unsigned delimiter_branch;
312};
313
314
315
316
317
318
319struct hid_collection {
320 unsigned type;
321 unsigned usage;
322 unsigned level;
323};
324
325struct hid_usage {
326 unsigned hid;
327 unsigned collection_index;
328
329 __u16 code;
330 __u8 type;
331 __s8 hat_min;
332 __s8 hat_max;
333 __s8 hat_dir;
334};
335
336struct hid_input;
337
338struct hid_field {
339 unsigned physical;
340 unsigned logical;
341 unsigned application;
342 struct hid_usage *usage;
343 unsigned maxusage;
344 unsigned flags;
345 unsigned report_offset;
346 unsigned report_size;
347 unsigned report_count;
348 unsigned report_type;
349 __s32 *value;
350 __s32 logical_minimum;
351 __s32 logical_maximum;
352 __s32 physical_minimum;
353 __s32 physical_maximum;
354 __s32 unit_exponent;
355 unsigned unit;
356 struct hid_report *report;
357 unsigned index;
358
359 struct hid_input *hidinput;
360 __u16 dpad;
361};
362
363#define HID_MAX_FIELDS 64
364
365struct hid_report {
366 struct list_head list;
367 unsigned id;
368 unsigned type;
369 struct hid_field *field[HID_MAX_FIELDS];
370 unsigned maxfield;
371 unsigned size;
372 struct hid_device *device;
373};
374
375struct hid_report_enum {
376 unsigned numbered;
377 struct list_head report_list;
378 struct hid_report *report_id_hash[256];
379};
380
381#define HID_REPORT_TYPES 3
382
383#define HID_MIN_BUFFER_SIZE 64
384#define HID_MAX_BUFFER_SIZE 4096
385#define HID_CONTROL_FIFO_SIZE 256
386#define HID_OUTPUT_FIFO_SIZE 64
387
388struct hid_control_fifo {
389 unsigned char dir;
390 struct hid_report *report;
391 char *raw_report;
392};
393
394struct hid_output_fifo {
395 struct hid_report *report;
396 char *raw_report;
397};
398
399#define HID_CLAIMED_INPUT 1
400#define HID_CLAIMED_HIDDEV 2
401#define HID_CLAIMED_HIDRAW 4
402
403#define HID_STAT_ADDED 1
404#define HID_STAT_PARSED 2
405
406struct hid_input {
407 struct list_head list;
408 struct hid_report *report;
409 struct input_dev *input;
410};
411
412enum hid_type {
413 HID_TYPE_OTHER = 0,
414 HID_TYPE_USBMOUSE
415};
416
417struct hid_driver;
418struct hid_ll_driver;
419
420struct hid_device {
421 __u8 *rdesc;
422 unsigned rsize;
423 struct hid_collection *collection;
424 unsigned collection_size;
425 unsigned maxcollection;
426 unsigned maxapplication;
427 __u16 bus;
428 __u32 vendor;
429 __u32 product;
430 __u32 version;
431 enum hid_type type;
432 unsigned country;
433 struct hid_report_enum report_enum[HID_REPORT_TYPES];
434
435 struct device dev;
436 struct hid_driver *driver;
437 struct hid_ll_driver *ll_driver;
438
439 unsigned int status;
440 unsigned claimed;
441 unsigned quirks;
442
443 struct list_head inputs;
444 void *hiddev;
445 void *hidraw;
446 int minor;
447
448 int open;
449 char name[128];
450 char phys[64];
451 char uniq[64];
452
453 void *driver_data;
454
455
456 int (*ff_init)(struct hid_device *);
457
458
459 int (*hiddev_connect)(struct hid_device *, unsigned int);
460 void (*hiddev_hid_event) (struct hid_device *, struct hid_field *field,
461 struct hid_usage *, __s32);
462 void (*hiddev_report_event) (struct hid_device *, struct hid_report *);
463
464
465 int (*hid_output_raw_report) (struct hid_device *, __u8 *, size_t);
466};
467
468static inline void *hid_get_drvdata(struct hid_device *hdev)
469{
470 return dev_get_drvdata(&hdev->dev);
471}
472
473static inline void hid_set_drvdata(struct hid_device *hdev, void *data)
474{
475 dev_set_drvdata(&hdev->dev, data);
476}
477
478#define HID_GLOBAL_STACK_SIZE 4
479#define HID_COLLECTION_STACK_SIZE 4
480
481struct hid_parser {
482 struct hid_global global;
483 struct hid_global global_stack[HID_GLOBAL_STACK_SIZE];
484 unsigned global_stack_ptr;
485 struct hid_local local;
486 unsigned collection_stack[HID_COLLECTION_STACK_SIZE];
487 unsigned collection_stack_ptr;
488 struct hid_device *device;
489};
490
491struct hid_class_descriptor {
492 __u8 bDescriptorType;
493 __le16 wDescriptorLength;
494} __attribute__ ((packed));
495
496struct hid_descriptor {
497 __u8 bLength;
498 __u8 bDescriptorType;
499 __le16 bcdHID;
500 __u8 bCountryCode;
501 __u8 bNumDescriptors;
502
503 struct hid_class_descriptor desc[1];
504} __attribute__ ((packed));
505
506#define HID_DEVICE(b, ven, prod) \
507 .bus = (b), \
508 .vendor = (ven), .product = (prod)
509
510#define HID_USB_DEVICE(ven, prod) HID_DEVICE(BUS_USB, ven, prod)
511#define HID_BLUETOOTH_DEVICE(ven, prod) HID_DEVICE(BUS_BLUETOOTH, ven, prod)
512
513#define HID_REPORT_ID(rep) \
514 .report_type = (rep)
515#define HID_USAGE_ID(uhid, utype, ucode) \
516 .usage_hid = (uhid), .usage_type = (utype), .usage_code = (ucode)
517
518#define HID_TERMINATOR (HID_ANY_ID - 1)
519
520struct hid_report_id {
521 __u32 report_type;
522};
523struct hid_usage_id {
524 __u32 usage_hid;
525 __u32 usage_type;
526 __u32 usage_code;
527};
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559struct hid_driver {
560 char *name;
561 const struct hid_device_id *id_table;
562
563 struct list_head dyn_list;
564 spinlock_t dyn_lock;
565
566 int (*probe)(struct hid_device *dev, const struct hid_device_id *id);
567 void (*remove)(struct hid_device *dev);
568
569 const struct hid_report_id *report_table;
570 int (*raw_event)(struct hid_device *hdev, struct hid_report *report,
571 u8 *data, int size);
572 const struct hid_usage_id *usage_table;
573 int (*event)(struct hid_device *hdev, struct hid_field *field,
574 struct hid_usage *usage, __s32 value);
575
576 void (*report_fixup)(struct hid_device *hdev, __u8 *buf,
577 unsigned int size);
578
579 int (*input_mapping)(struct hid_device *hdev,
580 struct hid_input *hidinput, struct hid_field *field,
581 struct hid_usage *usage, unsigned long **bit, int *max);
582 int (*input_mapped)(struct hid_device *hdev,
583 struct hid_input *hidinput, struct hid_field *field,
584 struct hid_usage *usage, unsigned long **bit, int *max);
585
586 struct device_driver driver;
587};
588
589
590
591
592
593
594
595
596
597
598
599struct hid_ll_driver {
600 int (*start)(struct hid_device *hdev);
601 void (*stop)(struct hid_device *hdev);
602
603 int (*open)(struct hid_device *hdev);
604 void (*close)(struct hid_device *hdev);
605
606 int (*hidinput_input_event) (struct input_dev *idev, unsigned int type,
607 unsigned int code, int value);
608
609 int (*parse)(struct hid_device *hdev);
610};
611
612
613
614#define IS_INPUT_APPLICATION(a) (((a >= 0x00010000) && (a <= 0x00010008)) || (a == 0x00010080) || (a == 0x000c0001) || (a == 0x000d0002))
615
616
617
618#ifdef CONFIG_HID_DEBUG
619extern int hid_debug;
620#endif
621
622extern int hid_add_device(struct hid_device *);
623extern void hid_destroy_device(struct hid_device *);
624
625extern int __must_check __hid_register_driver(struct hid_driver *,
626 struct module *, const char *mod_name);
627static inline int __must_check hid_register_driver(struct hid_driver *driver)
628{
629 return __hid_register_driver(driver, THIS_MODULE, KBUILD_MODNAME);
630}
631extern void hid_unregister_driver(struct hid_driver *);
632
633extern void hidinput_hid_event(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
634extern void hidinput_report_event(struct hid_device *hid, struct hid_report *report);
635extern int hidinput_connect(struct hid_device *hid, unsigned int force);
636extern void hidinput_disconnect(struct hid_device *);
637
638int hid_set_field(struct hid_field *, unsigned, __s32);
639int hid_input_report(struct hid_device *, int type, u8 *, int, int);
640int hidinput_find_field(struct hid_device *hid, unsigned int type, unsigned int code, struct hid_field **field);
641void hid_output_report(struct hid_report *report, __u8 *data);
642struct hid_device *hid_allocate_device(void);
643int hid_parse_report(struct hid_device *hid, __u8 *start, unsigned size);
644int hid_connect(struct hid_device *hid, unsigned int connect_mask);
645
646
647
648
649
650
651
652
653
654
655
656static inline void hid_map_usage(struct hid_input *hidinput,
657 struct hid_usage *usage, unsigned long **bit, int *max,
658 __u8 type, __u16 c)
659{
660 struct input_dev *input = hidinput->input;
661
662 usage->type = type;
663 usage->code = c;
664
665 switch (type) {
666 case EV_ABS:
667 *bit = input->absbit;
668 *max = ABS_MAX;
669 break;
670 case EV_REL:
671 *bit = input->relbit;
672 *max = REL_MAX;
673 break;
674 case EV_KEY:
675 *bit = input->keybit;
676 *max = KEY_MAX;
677 break;
678 case EV_LED:
679 *bit = input->ledbit;
680 *max = LED_MAX;
681 break;
682 }
683}
684
685
686
687
688
689
690
691static inline void hid_map_usage_clear(struct hid_input *hidinput,
692 struct hid_usage *usage, unsigned long **bit, int *max,
693 __u8 type, __u16 c)
694{
695 hid_map_usage(hidinput, usage, bit, max, type, c);
696 clear_bit(c, *bit);
697}
698
699
700
701
702
703
704
705
706
707
708static inline int __must_check hid_parse(struct hid_device *hdev)
709{
710 int ret;
711
712 if (hdev->status & HID_STAT_PARSED)
713 return 0;
714
715 ret = hdev->ll_driver->parse(hdev);
716 if (!ret)
717 hdev->status |= HID_STAT_PARSED;
718
719 return ret;
720}
721
722
723
724
725
726
727
728
729
730
731
732static inline int __must_check hid_hw_start(struct hid_device *hdev,
733 unsigned int connect_mask)
734{
735 int ret = hdev->ll_driver->start(hdev);
736 if (ret || !connect_mask)
737 return ret;
738 ret = hid_connect(hdev, connect_mask);
739 if (ret)
740 hdev->ll_driver->stop(hdev);
741 return ret;
742}
743
744
745
746
747
748
749
750
751
752static inline void hid_hw_stop(struct hid_device *hdev)
753{
754 hdev->ll_driver->stop(hdev);
755}
756
757void hid_report_raw_event(struct hid_device *hid, int type, u8 *data, int size,
758 int interrupt);
759
760extern int hid_generic_init(void);
761extern void hid_generic_exit(void);
762
763
764u32 usbhid_lookup_quirk(const u16 idVendor, const u16 idProduct);
765int usbhid_quirks_init(char **quirks_param);
766void usbhid_quirks_exit(void);
767void usbhid_set_leds(struct hid_device *hid);
768
769#ifdef CONFIG_HID_PID
770int hid_pidff_init(struct hid_device *hid);
771#else
772#define hid_pidff_init NULL
773#endif
774
775#ifdef CONFIG_HID_DEBUG
776#define dbg_hid(format, arg...) if (hid_debug) \
777 printk(KERN_DEBUG "%s: " format ,\
778 __FILE__ , ## arg)
779#define dbg_hid_line(format, arg...) if (hid_debug) \
780 printk(format, ## arg)
781#else
782static inline int __attribute__((format(printf, 1, 2)))
783dbg_hid(const char *fmt, ...)
784{
785 return 0;
786}
787#define dbg_hid_line dbg_hid
788#endif
789
790#define err_hid(format, arg...) printk(KERN_ERR "%s: " format "\n" , \
791 __FILE__ , ## arg)
792#endif
793
794#ifdef __KERNEL__
795#ifdef CONFIG_HID_COMPAT
796#define HID_COMPAT_LOAD_DRIVER(name) \
797 \
798extern void hid_compat_##name(void); \
799void hid_compat_##name(void) { } \
800EXPORT_SYMBOL(hid_compat_##name)
801#else
802#define HID_COMPAT_LOAD_DRIVER(name)
803#endif
804#define HID_COMPAT_CALL_DRIVER(name) do { \
805 extern void hid_compat_##name(void); \
806 hid_compat_##name(); \
807} while (0)
808#endif
809
810#endif
811
812