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
406#define HID_CTRL_RUNNING 1
407#define HID_OUT_RUNNING 2
408#define HID_IN_RUNNING 3
409#define HID_RESET_PENDING 4
410#define HID_SUSPENDED 5
411#define HID_CLEAR_HALT 6
412#define HID_DISCONNECTED 7
413#define HID_STARTED 8
414
415struct hid_input {
416 struct list_head list;
417 struct hid_report *report;
418 struct input_dev *input;
419};
420
421enum hid_type {
422 HID_TYPE_OTHER = 0,
423 HID_TYPE_USBMOUSE
424};
425
426struct hid_driver;
427struct hid_ll_driver;
428
429struct hid_device {
430 __u8 *rdesc;
431 unsigned rsize;
432 struct hid_collection *collection;
433 unsigned collection_size;
434 unsigned maxcollection;
435 unsigned maxapplication;
436 __u16 bus;
437 __u32 vendor;
438 __u32 product;
439 __u32 version;
440 enum hid_type type;
441 unsigned country;
442 struct hid_report_enum report_enum[HID_REPORT_TYPES];
443
444 struct device dev;
445 struct hid_driver *driver;
446 struct hid_ll_driver *ll_driver;
447
448 unsigned int status;
449 unsigned claimed;
450 unsigned quirks;
451
452 struct list_head inputs;
453 void *hiddev;
454 void *hidraw;
455 int minor;
456
457 int open;
458 char name[128];
459 char phys[64];
460 char uniq[64];
461
462 void *driver_data;
463
464
465 int (*ff_init)(struct hid_device *);
466
467
468 int (*hiddev_connect)(struct hid_device *, unsigned int);
469 void (*hiddev_hid_event) (struct hid_device *, struct hid_field *field,
470 struct hid_usage *, __s32);
471 void (*hiddev_report_event) (struct hid_device *, struct hid_report *);
472
473
474 int (*hid_output_raw_report) (struct hid_device *, __u8 *, size_t);
475};
476
477static inline void *hid_get_drvdata(struct hid_device *hdev)
478{
479 return dev_get_drvdata(&hdev->dev);
480}
481
482static inline void hid_set_drvdata(struct hid_device *hdev, void *data)
483{
484 dev_set_drvdata(&hdev->dev, data);
485}
486
487#define HID_GLOBAL_STACK_SIZE 4
488#define HID_COLLECTION_STACK_SIZE 4
489
490struct hid_parser {
491 struct hid_global global;
492 struct hid_global global_stack[HID_GLOBAL_STACK_SIZE];
493 unsigned global_stack_ptr;
494 struct hid_local local;
495 unsigned collection_stack[HID_COLLECTION_STACK_SIZE];
496 unsigned collection_stack_ptr;
497 struct hid_device *device;
498};
499
500struct hid_class_descriptor {
501 __u8 bDescriptorType;
502 __le16 wDescriptorLength;
503} __attribute__ ((packed));
504
505struct hid_descriptor {
506 __u8 bLength;
507 __u8 bDescriptorType;
508 __le16 bcdHID;
509 __u8 bCountryCode;
510 __u8 bNumDescriptors;
511
512 struct hid_class_descriptor desc[1];
513} __attribute__ ((packed));
514
515#define HID_DEVICE(b, ven, prod) \
516 .bus = (b), \
517 .vendor = (ven), .product = (prod)
518
519#define HID_USB_DEVICE(ven, prod) HID_DEVICE(BUS_USB, ven, prod)
520#define HID_BLUETOOTH_DEVICE(ven, prod) HID_DEVICE(BUS_BLUETOOTH, ven, prod)
521
522#define HID_REPORT_ID(rep) \
523 .report_type = (rep)
524#define HID_USAGE_ID(uhid, utype, ucode) \
525 .usage_hid = (uhid), .usage_type = (utype), .usage_code = (ucode)
526
527#define HID_TERMINATOR (HID_ANY_ID - 1)
528
529struct hid_report_id {
530 __u32 report_type;
531};
532struct hid_usage_id {
533 __u32 usage_hid;
534 __u32 usage_type;
535 __u32 usage_code;
536};
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566struct hid_driver {
567 char *name;
568 const struct hid_device_id *id_table;
569
570 int (*probe)(struct hid_device *dev, const struct hid_device_id *id);
571 void (*remove)(struct hid_device *dev);
572
573 const struct hid_report_id *report_table;
574 int (*raw_event)(struct hid_device *hdev, struct hid_report *report,
575 u8 *data, int size);
576 const struct hid_usage_id *usage_table;
577 int (*event)(struct hid_device *hdev, struct hid_field *field,
578 struct hid_usage *usage, __s32 value);
579
580 void (*report_fixup)(struct hid_device *hdev, __u8 *buf,
581 unsigned int size);
582
583 int (*input_mapping)(struct hid_device *hdev,
584 struct hid_input *hidinput, struct hid_field *field,
585 struct hid_usage *usage, unsigned long **bit, int *max);
586 int (*input_mapped)(struct hid_device *hdev,
587 struct hid_input *hidinput, struct hid_field *field,
588 struct hid_usage *usage, unsigned long **bit, int *max);
589
590 struct device_driver driver;
591};
592
593
594
595
596
597
598
599
600
601
602
603struct hid_ll_driver {
604 int (*start)(struct hid_device *hdev);
605 void (*stop)(struct hid_device *hdev);
606
607 int (*open)(struct hid_device *hdev);
608 void (*close)(struct hid_device *hdev);
609
610 int (*hidinput_input_event) (struct input_dev *idev, unsigned int type,
611 unsigned int code, int value);
612
613 int (*parse)(struct hid_device *hdev);
614};
615
616
617
618#define IS_INPUT_APPLICATION(a) (((a >= 0x00010000) && (a <= 0x00010008)) || (a == 0x00010080) || (a == 0x000c0001) || (a == 0x000d0002))
619
620
621
622#ifdef CONFIG_HID_DEBUG
623extern int hid_debug;
624#endif
625
626extern int hid_add_device(struct hid_device *);
627extern void hid_destroy_device(struct hid_device *);
628
629extern int __must_check __hid_register_driver(struct hid_driver *,
630 struct module *, const char *mod_name);
631static inline int __must_check hid_register_driver(struct hid_driver *driver)
632{
633 return __hid_register_driver(driver, THIS_MODULE, KBUILD_MODNAME);
634}
635extern void hid_unregister_driver(struct hid_driver *);
636
637extern void hidinput_hid_event(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
638extern void hidinput_report_event(struct hid_device *hid, struct hid_report *report);
639extern int hidinput_connect(struct hid_device *hid, unsigned int force);
640extern void hidinput_disconnect(struct hid_device *);
641
642int hid_set_field(struct hid_field *, unsigned, __s32);
643int hid_input_report(struct hid_device *, int type, u8 *, int, int);
644int hidinput_find_field(struct hid_device *hid, unsigned int type, unsigned int code, struct hid_field **field);
645void hid_output_report(struct hid_report *report, __u8 *data);
646struct hid_device *hid_allocate_device(void);
647int hid_parse_report(struct hid_device *hid, __u8 *start, unsigned size);
648int hid_connect(struct hid_device *hid, unsigned int connect_mask);
649
650
651
652
653
654
655
656
657
658
659
660static inline void hid_map_usage(struct hid_input *hidinput,
661 struct hid_usage *usage, unsigned long **bit, int *max,
662 __u8 type, __u16 c)
663{
664 struct input_dev *input = hidinput->input;
665
666 usage->type = type;
667 usage->code = c;
668
669 switch (type) {
670 case EV_ABS:
671 *bit = input->absbit;
672 *max = ABS_MAX;
673 break;
674 case EV_REL:
675 *bit = input->relbit;
676 *max = REL_MAX;
677 break;
678 case EV_KEY:
679 *bit = input->keybit;
680 *max = KEY_MAX;
681 break;
682 case EV_LED:
683 *bit = input->ledbit;
684 *max = LED_MAX;
685 break;
686 }
687}
688
689
690
691
692
693
694
695static inline void hid_map_usage_clear(struct hid_input *hidinput,
696 struct hid_usage *usage, unsigned long **bit, int *max,
697 __u8 type, __u16 c)
698{
699 hid_map_usage(hidinput, usage, bit, max, type, c);
700 clear_bit(c, *bit);
701}
702
703
704
705
706
707
708
709
710
711
712static inline int __must_check hid_parse(struct hid_device *hdev)
713{
714 int ret;
715
716 if (hdev->status & HID_STAT_PARSED)
717 return 0;
718
719 ret = hdev->ll_driver->parse(hdev);
720 if (!ret)
721 hdev->status |= HID_STAT_PARSED;
722
723 return ret;
724}
725
726
727
728
729
730
731
732
733
734
735
736static inline int __must_check hid_hw_start(struct hid_device *hdev,
737 unsigned int connect_mask)
738{
739 int ret = hdev->ll_driver->start(hdev);
740 if (ret || !connect_mask)
741 return ret;
742 ret = hid_connect(hdev, connect_mask);
743 if (ret)
744 hdev->ll_driver->stop(hdev);
745 return ret;
746}
747
748
749
750
751
752
753
754
755
756static inline void hid_hw_stop(struct hid_device *hdev)
757{
758 hdev->ll_driver->stop(hdev);
759}
760
761void hid_report_raw_event(struct hid_device *hid, int type, u8 *data, int size,
762 int interrupt);
763
764extern int hid_generic_init(void);
765extern void hid_generic_exit(void);
766
767
768u32 usbhid_lookup_quirk(const u16 idVendor, const u16 idProduct);
769int usbhid_quirks_init(char **quirks_param);
770void usbhid_quirks_exit(void);
771void usbhid_set_leds(struct hid_device *hid);
772
773#ifdef CONFIG_HID_PID
774int hid_pidff_init(struct hid_device *hid);
775#else
776#define hid_pidff_init NULL
777#endif
778
779#ifdef CONFIG_HID_DEBUG
780#define dbg_hid(format, arg...) if (hid_debug) \
781 printk(KERN_DEBUG "%s: " format ,\
782 __FILE__ , ## arg)
783#define dbg_hid_line(format, arg...) if (hid_debug) \
784 printk(format, ## arg)
785#else
786static inline int __attribute__((format(printf, 1, 2)))
787dbg_hid(const char *fmt, ...)
788{
789 return 0;
790}
791#define dbg_hid_line dbg_hid
792#endif
793
794#define err_hid(format, arg...) printk(KERN_ERR "%s: " format "\n" , \
795 __FILE__ , ## arg)
796#endif
797
798#ifdef CONFIG_HID_COMPAT
799#define HID_COMPAT_LOAD_DRIVER(name) \
800void hid_compat_##name(void) { } \
801EXPORT_SYMBOL(hid_compat_##name)
802#else
803#define HID_COMPAT_LOAD_DRIVER(name)
804#endif
805#define HID_COMPAT_CALL_DRIVER(name) do { \
806 extern void hid_compat_##name(void); \
807 hid_compat_##name(); \
808} while (0)
809
810#endif
811
812