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