~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/hid.h

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /include/linux/hid.h (Version linux-6.12-rc7) and /include/linux/hid.h (Version linux-2.4.37.11)


  1 /* SPDX-License-Identifier: GPL-2.0-or-later *      1 
  2 /*                                                
  3  *  Copyright (c) 1999 Andreas Gal                
  4  *  Copyright (c) 2000-2001 Vojtech Pavlik        
  5  *  Copyright (c) 2006-2007 Jiri Kosina           
  6  */                                               
  7 /*                                                
  8  *                                                
  9  * Should you need to contact me, the author,     
 10  * e-mail - mail your message to <vojtech@ucw.    
 11  * Vojtech Pavlik, Simunkova 1594, Prague 8, 1    
 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> /* hid_devi    
 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 #include <linux/hid_bpf.h>                        
 30                                                   
 31 /*                                                
 32  * We parse each description item into this st    
 33  * values are expanded to 32-bit signed int, l    
 34  * into the data area.                            
 35  */                                               
 36                                                   
 37 struct hid_item {                                 
 38         unsigned  format;                         
 39         __u8      size;                           
 40         __u8      type;                           
 41         __u8      tag;                            
 42         union {                                   
 43             __u8   u8;                            
 44             __s8   s8;                            
 45             __u16  u16;                           
 46             __s16  s16;                           
 47             __u32  u32;                           
 48             __s32  s32;                           
 49             const __u8  *longdata;                
 50         } data;                                   
 51 };                                                
 52                                                   
 53 /*                                                
 54  * HID report item format                         
 55  */                                               
 56                                                   
 57 #define HID_ITEM_FORMAT_SHORT   0                 
 58 #define HID_ITEM_FORMAT_LONG    1                 
 59                                                   
 60 /*                                                
 61  * Special tag indicating long items              
 62  */                                               
 63                                                   
 64 #define HID_ITEM_TAG_LONG       15                
 65                                                   
 66 /*                                                
 67  * HID report descriptor item type (prefix bit    
 68  */                                               
 69                                                   
 70 #define HID_ITEM_TYPE_MAIN              0         
 71 #define HID_ITEM_TYPE_GLOBAL            1         
 72 #define HID_ITEM_TYPE_LOCAL             2         
 73 #define HID_ITEM_TYPE_RESERVED          3         
 74                                                   
 75 /*                                                
 76  * HID report descriptor main item tags           
 77  */                                               
 78                                                   
 79 #define HID_MAIN_ITEM_TAG_INPUT                   
 80 #define HID_MAIN_ITEM_TAG_OUTPUT                  
 81 #define HID_MAIN_ITEM_TAG_FEATURE                 
 82 #define HID_MAIN_ITEM_TAG_BEGIN_COLLECTION        
 83 #define HID_MAIN_ITEM_TAG_END_COLLECTION          
 84                                                   
 85 /*                                                
 86  * HID report descriptor main item contents       
 87  */                                               
 88                                                   
 89 #define HID_MAIN_ITEM_CONSTANT          0x001     
 90 #define HID_MAIN_ITEM_VARIABLE          0x002     
 91 #define HID_MAIN_ITEM_RELATIVE          0x004     
 92 #define HID_MAIN_ITEM_WRAP              0x008     
 93 #define HID_MAIN_ITEM_NONLINEAR         0x010     
 94 #define HID_MAIN_ITEM_NO_PREFERRED      0x020     
 95 #define HID_MAIN_ITEM_NULL_STATE        0x040     
 96 #define HID_MAIN_ITEM_VOLATILE          0x080     
 97 #define HID_MAIN_ITEM_BUFFERED_BYTE     0x100     
 98                                                   
 99 /*                                                
100  * HID report descriptor collection item types    
101  */                                               
102                                                   
103 #define HID_COLLECTION_PHYSICAL         0         
104 #define HID_COLLECTION_APPLICATION      1         
105 #define HID_COLLECTION_LOGICAL          2         
106 #define HID_COLLECTION_NAMED_ARRAY      4         
107                                                   
108 /*                                                
109  * HID report descriptor global item tags         
110  */                                               
111                                                   
112 #define HID_GLOBAL_ITEM_TAG_USAGE_PAGE            
113 #define HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM       
114 #define HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM       
115 #define HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM      
116 #define HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM      
117 #define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT         
118 #define HID_GLOBAL_ITEM_TAG_UNIT                  
119 #define HID_GLOBAL_ITEM_TAG_REPORT_SIZE           
120 #define HID_GLOBAL_ITEM_TAG_REPORT_ID             
121 #define HID_GLOBAL_ITEM_TAG_REPORT_COUNT          
122 #define HID_GLOBAL_ITEM_TAG_PUSH                  
123 #define HID_GLOBAL_ITEM_TAG_POP                   
124                                                   
125 /*                                                
126  * HID report descriptor local item tags          
127  */                                               
128                                                   
129 #define HID_LOCAL_ITEM_TAG_USAGE                  
130 #define HID_LOCAL_ITEM_TAG_USAGE_MINIMUM          
131 #define HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM          
132 #define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX       
133 #define HID_LOCAL_ITEM_TAG_DESIGNATOR_MINIMUM     
134 #define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAXIMUM     
135 #define HID_LOCAL_ITEM_TAG_STRING_INDEX           
136 #define HID_LOCAL_ITEM_TAG_STRING_MINIMUM         
137 #define HID_LOCAL_ITEM_TAG_STRING_MAXIMUM         
138 #define HID_LOCAL_ITEM_TAG_DELIMITER              
139                                                   
140 /*                                                
141  * HID usage tables                               
142  */                                               
143                                                   
144 #define HID_USAGE_PAGE          0xffff0000        
145                                                   
146 #define HID_UP_UNDEFINED        0x00000000        
147 #define HID_UP_GENDESK          0x00010000        
148 #define HID_UP_SIMULATION       0x00020000        
149 #define HID_UP_GENDEVCTRLS      0x00060000        
150 #define HID_UP_KEYBOARD         0x00070000        
151 #define HID_UP_LED              0x00080000        
152 #define HID_UP_BUTTON           0x00090000        
153 #define HID_UP_ORDINAL          0x000a0000        
154 #define HID_UP_TELEPHONY        0x000b0000        
155 #define HID_UP_CONSUMER         0x000c0000        
156 #define HID_UP_DIGITIZER        0x000d0000        
157 #define HID_UP_PID              0x000f0000        
158 #define HID_UP_BATTERY          0x00850000        
159 #define HID_UP_CAMERA           0x00900000        
160 #define HID_UP_HPVENDOR         0xff7f0000        
161 #define HID_UP_HPVENDOR2        0xff010000        
162 #define HID_UP_MSVENDOR         0xff000000        
163 #define HID_UP_CUSTOM           0x00ff0000        
164 #define HID_UP_LOGIVENDOR       0xffbc0000        
165 #define HID_UP_LOGIVENDOR2   0xff090000           
166 #define HID_UP_LOGIVENDOR3   0xff430000           
167 #define HID_UP_LNVENDOR         0xffa00000        
168 #define HID_UP_SENSOR           0x00200000        
169 #define HID_UP_ASUSVENDOR       0xff310000        
170 #define HID_UP_GOOGLEVENDOR     0xffd10000        
171                                                   
172 #define HID_USAGE               0x0000ffff        
173                                                   
174 #define HID_GD_POINTER          0x00010001        
175 #define HID_GD_MOUSE            0x00010002        
176 #define HID_GD_JOYSTICK         0x00010004        
177 #define HID_GD_GAMEPAD          0x00010005        
178 #define HID_GD_KEYBOARD         0x00010006        
179 #define HID_GD_KEYPAD           0x00010007        
180 #define HID_GD_MULTIAXIS        0x00010008        
181 /*                                                
182  * Microsoft Win8 Wireless Radio Controls exte    
183  * http://www.usb.org/developers/hidpage/HUTRR    
184  */                                               
185 #define HID_GD_WIRELESS_RADIO_CTLS      0x0001    
186 /*                                                
187  * System Multi-Axis, see:                        
188  * http://www.usb.org/developers/hidpage/HUTRR    
189  */                                               
190 #define HID_GD_SYSTEM_MULTIAXIS 0x0001000e        
191                                                   
192 #define HID_GD_X                0x00010030        
193 #define HID_GD_Y                0x00010031        
194 #define HID_GD_Z                0x00010032        
195 #define HID_GD_RX               0x00010033        
196 #define HID_GD_RY               0x00010034        
197 #define HID_GD_RZ               0x00010035        
198 #define HID_GD_SLIDER           0x00010036        
199 #define HID_GD_DIAL             0x00010037        
200 #define HID_GD_WHEEL            0x00010038        
201 #define HID_GD_HATSWITCH        0x00010039        
202 #define HID_GD_BUFFER           0x0001003a        
203 #define HID_GD_BYTECOUNT        0x0001003b        
204 #define HID_GD_MOTION           0x0001003c        
205 #define HID_GD_START            0x0001003d        
206 #define HID_GD_SELECT           0x0001003e        
207 #define HID_GD_VX               0x00010040        
208 #define HID_GD_VY               0x00010041        
209 #define HID_GD_VZ               0x00010042        
210 #define HID_GD_VBRX             0x00010043        
211 #define HID_GD_VBRY             0x00010044        
212 #define HID_GD_VBRZ             0x00010045        
213 #define HID_GD_VNO              0x00010046        
214 #define HID_GD_FEATURE          0x00010047        
215 #define HID_GD_RESOLUTION_MULTIPLIER    0x0001    
216 #define HID_GD_SYSTEM_CONTROL   0x00010080        
217 #define HID_GD_UP               0x00010090        
218 #define HID_GD_DOWN             0x00010091        
219 #define HID_GD_RIGHT            0x00010092        
220 #define HID_GD_LEFT             0x00010093        
221 /* Microsoft Win8 Wireless Radio Controls CA u    
222 #define HID_GD_RFKILL_BTN       0x000100c6        
223 #define HID_GD_RFKILL_LED       0x000100c7        
224 #define HID_GD_RFKILL_SWITCH    0x000100c8        
225                                                   
226 #define HID_DC_BATTERYSTRENGTH  0x00060020        
227                                                   
228 #define HID_CP_CONSUMER_CONTROL 0x000c0001        
229 #define HID_CP_AC_PAN           0x000c0238        
230                                                   
231 #define HID_DG_DIGITIZER        0x000d0001        
232 #define HID_DG_PEN              0x000d0002        
233 #define HID_DG_LIGHTPEN         0x000d0003        
234 #define HID_DG_TOUCHSCREEN      0x000d0004        
235 #define HID_DG_TOUCHPAD         0x000d0005        
236 #define HID_DG_WHITEBOARD       0x000d0006        
237 #define HID_DG_STYLUS           0x000d0020        
238 #define HID_DG_PUCK             0x000d0021        
239 #define HID_DG_FINGER           0x000d0022        
240 #define HID_DG_TIPPRESSURE      0x000d0030        
241 #define HID_DG_BARRELPRESSURE   0x000d0031        
242 #define HID_DG_INRANGE          0x000d0032        
243 #define HID_DG_TOUCH            0x000d0033        
244 #define HID_DG_UNTOUCH          0x000d0034        
245 #define HID_DG_TAP              0x000d0035        
246 #define HID_DG_TRANSDUCER_INDEX 0x000d0038        
247 #define HID_DG_TABLETFUNCTIONKEY        0x000d    
248 #define HID_DG_PROGRAMCHANGEKEY 0x000d003a        
249 #define HID_DG_BATTERYSTRENGTH  0x000d003b        
250 #define HID_DG_INVERT           0x000d003c        
251 #define HID_DG_TILT_X           0x000d003d        
252 #define HID_DG_TILT_Y           0x000d003e        
253 #define HID_DG_TWIST            0x000d0041        
254 #define HID_DG_TIPSWITCH        0x000d0042        
255 #define HID_DG_TIPSWITCH2       0x000d0043        
256 #define HID_DG_BARRELSWITCH     0x000d0044        
257 #define HID_DG_ERASER           0x000d0045        
258 #define HID_DG_TABLETPICK       0x000d0046        
259 #define HID_DG_PEN_COLOR                          
260 #define HID_DG_PEN_LINE_WIDTH                     
261 #define HID_DG_PEN_LINE_STYLE                     
262 #define HID_DG_PEN_LINE_STYLE_INK                 
263 #define HID_DG_PEN_LINE_STYLE_PENCIL              
264 #define HID_DG_PEN_LINE_STYLE_HIGHLIGHTER         
265 #define HID_DG_PEN_LINE_STYLE_CHISEL_MARKER       
266 #define HID_DG_PEN_LINE_STYLE_BRUSH               
267 #define HID_DG_PEN_LINE_STYLE_NO_PREFERENCE       
268                                                   
269 #define HID_CP_CONSUMERCONTROL  0x000c0001        
270 #define HID_CP_NUMERICKEYPAD    0x000c0002        
271 #define HID_CP_PROGRAMMABLEBUTTONS      0x000c    
272 #define HID_CP_MICROPHONE       0x000c0004        
273 #define HID_CP_HEADPHONE        0x000c0005        
274 #define HID_CP_GRAPHICEQUALIZER 0x000c0006        
275 #define HID_CP_FUNCTIONBUTTONS  0x000c0036        
276 #define HID_CP_SELECTION        0x000c0080        
277 #define HID_CP_MEDIASELECTION   0x000c0087        
278 #define HID_CP_SELECTDISC       0x000c00ba        
279 #define HID_CP_VOLUMEUP         0x000c00e9        
280 #define HID_CP_VOLUMEDOWN       0x000c00ea        
281 #define HID_CP_PLAYBACKSPEED    0x000c00f1        
282 #define HID_CP_PROXIMITY        0x000c0109        
283 #define HID_CP_SPEAKERSYSTEM    0x000c0160        
284 #define HID_CP_CHANNELLEFT      0x000c0161        
285 #define HID_CP_CHANNELRIGHT     0x000c0162        
286 #define HID_CP_CHANNELCENTER    0x000c0163        
287 #define HID_CP_CHANNELFRONT     0x000c0164        
288 #define HID_CP_CHANNELCENTERFRONT       0x000c    
289 #define HID_CP_CHANNELSIDE      0x000c0166        
290 #define HID_CP_CHANNELSURROUND  0x000c0167        
291 #define HID_CP_CHANNELLOWFREQUENCYENHANCEMENT     
292 #define HID_CP_CHANNELTOP       0x000c0169        
293 #define HID_CP_CHANNELUNKNOWN   0x000c016a        
294 #define HID_CP_APPLICATIONLAUNCHBUTTONS 0x000c    
295 #define HID_CP_GENERICGUIAPPLICATIONCONTROLS      
296                                                   
297 #define HID_DG_DEVICECONFIG     0x000d000e        
298 #define HID_DG_DEVICESETTINGS   0x000d0023        
299 #define HID_DG_AZIMUTH          0x000d003f        
300 #define HID_DG_CONFIDENCE       0x000d0047        
301 #define HID_DG_WIDTH            0x000d0048        
302 #define HID_DG_HEIGHT           0x000d0049        
303 #define HID_DG_CONTACTID        0x000d0051        
304 #define HID_DG_INPUTMODE        0x000d0052        
305 #define HID_DG_DEVICEINDEX      0x000d0053        
306 #define HID_DG_CONTACTCOUNT     0x000d0054        
307 #define HID_DG_CONTACTMAX       0x000d0055        
308 #define HID_DG_SCANTIME         0x000d0056        
309 #define HID_DG_SURFACESWITCH    0x000d0057        
310 #define HID_DG_BUTTONSWITCH     0x000d0058        
311 #define HID_DG_BUTTONTYPE       0x000d0059        
312 #define HID_DG_BARRELSWITCH2    0x000d005a        
313 #define HID_DG_TOOLSERIALNUMBER 0x000d005b        
314 #define HID_DG_LATENCYMODE      0x000d0060        
315                                                   
316 #define HID_BAT_ABSOLUTESTATEOFCHARGE   0x0085    
317 #define HID_BAT_CHARGING                0x0085    
318                                                   
319 #define HID_VD_ASUS_CUSTOM_MEDIA_KEYS   0xff31    
320                                                   
321 /*                                                
322  * HID connect requests                           
323  */                                               
324                                                   
325 #define HID_CONNECT_HIDINPUT            BIT(0)    
326 #define HID_CONNECT_HIDINPUT_FORCE      BIT(1)    
327 #define HID_CONNECT_HIDRAW              BIT(2)    
328 #define HID_CONNECT_HIDDEV              BIT(3)    
329 #define HID_CONNECT_HIDDEV_FORCE        BIT(4)    
330 #define HID_CONNECT_FF                  BIT(5)    
331 #define HID_CONNECT_DRIVER              BIT(6)    
332 #define HID_CONNECT_DEFAULT     (HID_CONNECT_H    
333                 HID_CONNECT_HIDDEV|HID_CONNECT    
334                                                   
335 /*                                                
336  * HID device quirks.                             
337  */                                               
338                                                   
339 /*                                                
340  * Increase this if you need to configure more    
341  */                                               
342 #define MAX_USBHID_BOOT_QUIRKS 4                  
343                                                   
344 /**                                               
345  * DOC: HID quirks                                
346  * | @HID_QUIRK_NOTOUCH:                          
347  * | @HID_QUIRK_IGNORE: ignore this device        
348  * | @HID_QUIRK_NOGET:                            
349  * | @HID_QUIRK_HIDDEV_FORCE:                     
350  * | @HID_QUIRK_BADPAD:                           
351  * | @HID_QUIRK_MULTI_INPUT:                      
352  * | @HID_QUIRK_HIDINPUT_FORCE:                   
353  * | @HID_QUIRK_ALWAYS_POLL:                      
354  * | @HID_QUIRK_INPUT_PER_APP:                    
355  * | @HID_QUIRK_X_INVERT:                         
356  * | @HID_QUIRK_Y_INVERT:                         
357  * | @HID_QUIRK_SKIP_OUTPUT_REPORTS:              
358  * | @HID_QUIRK_SKIP_OUTPUT_REPORT_ID:            
359  * | @HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP:     
360  * | @HID_QUIRK_HAVE_SPECIAL_DRIVER:              
361  * | @HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE:     
362  * | @HID_QUIRK_FULLSPEED_INTERVAL:               
363  * | @HID_QUIRK_NO_INIT_REPORTS:                  
364  * | @HID_QUIRK_NO_IGNORE:                        
365  * | @HID_QUIRK_NO_INPUT_SYNC:                    
366  */                                               
367 /* BIT(0) reserved for backward compatibility,    
368 #define HID_QUIRK_NOTOUCH                         
369 #define HID_QUIRK_IGNORE                          
370 #define HID_QUIRK_NOGET                           
371 #define HID_QUIRK_HIDDEV_FORCE                    
372 #define HID_QUIRK_BADPAD                          
373 #define HID_QUIRK_MULTI_INPUT                     
374 #define HID_QUIRK_HIDINPUT_FORCE                  
375 /* BIT(8) reserved for backward compatibility,    
376 /* BIT(9) reserved for backward compatibility,    
377 #define HID_QUIRK_ALWAYS_POLL                     
378 #define HID_QUIRK_INPUT_PER_APP                   
379 #define HID_QUIRK_X_INVERT                        
380 #define HID_QUIRK_Y_INVERT                        
381 #define HID_QUIRK_SKIP_OUTPUT_REPORTS             
382 #define HID_QUIRK_SKIP_OUTPUT_REPORT_ID           
383 #define HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP    
384 #define HID_QUIRK_HAVE_SPECIAL_DRIVER             
385 #define HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE    
386 #define HID_QUIRK_NOINVERT                        
387 #define HID_QUIRK_FULLSPEED_INTERVAL              
388 #define HID_QUIRK_NO_INIT_REPORTS                 
389 #define HID_QUIRK_NO_IGNORE                       
390 #define HID_QUIRK_NO_INPUT_SYNC                   
391                                                   
392 /*                                                
393  * HID device groups                              
394  *                                                
395  * Note: HID_GROUP_ANY is declared in linux/mo    
396  * and has a value of 0x0000                      
397  */                                               
398 #define HID_GROUP_GENERIC                         
399 #define HID_GROUP_MULTITOUCH                      
400 #define HID_GROUP_SENSOR_HUB                      
401 #define HID_GROUP_MULTITOUCH_WIN_8                
402                                                   
403 /*                                                
404  * Vendor specific HID device groups              
405  */                                               
406 #define HID_GROUP_RMI                             
407 #define HID_GROUP_WACOM                           
408 #define HID_GROUP_LOGITECH_DJ_DEVICE              
409 #define HID_GROUP_STEAM                           
410 #define HID_GROUP_LOGITECH_27MHZ_DEVICE           
411 #define HID_GROUP_VIVALDI                         
412                                                   
413 /*                                                
414  * HID protocol status                            
415  */                                               
416 #define HID_REPORT_PROTOCOL     1                 
417 #define HID_BOOT_PROTOCOL       0                 
418                                                   
419 /*                                                
420  * This is the global environment of the parse    
421  * persistent for main-items. The global envir    
422  * restored with PUSH/POP statements.             
423  */                                               
424                                                   
425 struct hid_global {                               
426         unsigned usage_page;                      
427         __s32    logical_minimum;                 
428         __s32    logical_maximum;                 
429         __s32    physical_minimum;                
430         __s32    physical_maximum;                
431         __s32    unit_exponent;                   
432         unsigned unit;                            
433         unsigned report_id;                       
434         unsigned report_size;                     
435         unsigned report_count;                    
436 };                                                
437                                                   
438 /*                                                
439  * This is the local environment. It is persis    
440  */                                               
441                                                   
442 #define HID_MAX_USAGES                  12288     
443 #define HID_DEFAULT_NUM_COLLECTIONS     16        
444                                                   
445 struct hid_local {                                
446         unsigned usage[HID_MAX_USAGES]; /* usa    
447         u8 usage_size[HID_MAX_USAGES]; /* usag    
448         unsigned collection_index[HID_MAX_USAG    
449         unsigned usage_index;                     
450         unsigned usage_minimum;                   
451         unsigned delimiter_depth;                 
452         unsigned delimiter_branch;                
453 };                                                
454                                                   
455 /*                                                
456  * This is the collection stack. We climb up t    
457  * application and function of each field.        
458  */                                               
459                                                   
460 struct hid_collection {                           
461         int parent_idx; /* device->collection     
462         unsigned type;                            
463         unsigned usage;                           
464         unsigned level;                           
465 };                                                
466                                                   
467 struct hid_usage {                                
468         unsigned  hid;                  /* hid    
469         unsigned  collection_index;     /* ind    
470         unsigned  usage_index;          /* ind    
471         __s8      resolution_multiplier;/* Eff    
472                                            (HU    
473         /* hidinput data */                       
474         __s8      wheel_factor;         /* 120    
475         __u16     code;                 /* inp    
476         __u8      type;                 /* inp    
477         __s16     hat_min;              /* hat    
478         __s16     hat_max;              /* dit    
479         __s16     hat_dir;              /* dit    
480         __s16     wheel_accumulated;    /* hi-    
481 };                                                
482                                                   
483 struct hid_input;                                 
484                                                   
485 struct hid_field {                                
486         unsigned  physical;             /* phy    
487         unsigned  logical;              /* log    
488         unsigned  application;          /* app    
489         struct hid_usage *usage;        /* usa    
490         unsigned  maxusage;             /* max    
491         unsigned  flags;                /* mai    
492         unsigned  report_offset;        /* bit    
493         unsigned  report_size;          /* siz    
494         unsigned  report_count;         /* num    
495         unsigned  report_type;          /* (in    
496         __s32    *value;                /* las    
497         __s32    *new_value;            /* new    
498         __s32    *usages_priorities;    /* pri    
499                                          * bit    
500                                          */       
501         __s32     logical_minimum;                
502         __s32     logical_maximum;                
503         __s32     physical_minimum;               
504         __s32     physical_maximum;               
505         __s32     unit_exponent;                  
506         unsigned  unit;                           
507         bool      ignored;              /* thi    
508         struct hid_report *report;      /* ass    
509         unsigned index;                 /* ind    
510         /* hidinput data */                       
511         struct hid_input *hidinput;     /* ass    
512         __u16 dpad;                     /* dpa    
513         unsigned int slot_idx;          /* slo    
514 };                                                
515                                                   
516 #define HID_MAX_FIELDS 256                        
517                                                   
518 struct hid_field_entry {                          
519         struct list_head list;                    
520         struct hid_field *field;                  
521         unsigned int index;                       
522         __s32 priority;                           
523 };                                                
524                                                   
525 struct hid_report {                               
526         struct list_head list;                    
527         struct list_head hidinput_list;           
528         struct list_head field_entry_list;        
529         unsigned int id;                          
530         enum hid_report_type type;                
531         unsigned int application;                 
532         struct hid_field *field[HID_MAX_FIELDS    
533         struct hid_field_entry *field_entries;    
534         unsigned maxfield;                        
535         unsigned size;                            
536         struct hid_device *device;                
537                                                   
538         /* tool related state */                  
539         bool tool_active;                         
540         unsigned int tool;                        
541 };                                                
542                                                   
543 #define HID_MAX_IDS 256                           
544                                                   
545 struct hid_report_enum {                          
546         unsigned numbered;                        
547         struct list_head report_list;             
548         struct hid_report *report_id_hash[HID_    
549 };                                                
550                                                   
551 #define HID_MIN_BUFFER_SIZE     64                
552 #define HID_MAX_BUFFER_SIZE     16384             
553 #define HID_CONTROL_FIFO_SIZE   256               
554 #define HID_OUTPUT_FIFO_SIZE    64                
555                                                   
556 struct hid_control_fifo {                         
557         unsigned char dir;                        
558         struct hid_report *report;                
559         char *raw_report;                         
560 };                                                
561                                                   
562 struct hid_output_fifo {                          
563         struct hid_report *report;                
564         char *raw_report;                         
565 };                                                
566                                                   
567 #define HID_CLAIMED_INPUT       BIT(0)            
568 #define HID_CLAIMED_HIDDEV      BIT(1)            
569 #define HID_CLAIMED_HIDRAW      BIT(2)            
570 #define HID_CLAIMED_DRIVER      BIT(3)            
571                                                   
572 #define HID_STAT_ADDED          BIT(0)            
573 #define HID_STAT_PARSED         BIT(1)            
574 #define HID_STAT_DUP_DETECTED   BIT(2)            
575 #define HID_STAT_REPROBED       BIT(3)            
576                                                   
577 struct hid_input {                                
578         struct list_head list;                    
579         struct hid_report *report;                
580         struct input_dev *input;                  
581         const char *name;                         
582         struct list_head reports;       /* the    
583         unsigned int application;       /* app    
584         bool registered;                          
585 };                                                
586                                                   
587 enum hid_type {                                   
588         HID_TYPE_OTHER = 0,                       
589         HID_TYPE_USBMOUSE,                        
590         HID_TYPE_USBNONE                          
591 };                                                
592                                                   
593 enum hid_battery_status {                         
594         HID_BATTERY_UNKNOWN = 0,                  
595         HID_BATTERY_QUERIED,            /* Ker    
596         HID_BATTERY_REPORTED,           /* Dev    
597 };                                                
598                                                   
599 struct hid_driver;                                
600 struct hid_ll_driver;                             
601                                                   
602 struct hid_device {                               
603         const __u8 *dev_rdesc;                    
604         unsigned dev_rsize;                       
605         const __u8 *rdesc;                        
606         unsigned rsize;                           
607         struct hid_collection *collection;        
608         unsigned collection_size;                 
609         unsigned maxcollection;                   
610         unsigned maxapplication;                  
611         __u16 bus;                                
612         __u16 group;                              
613         __u32 vendor;                             
614         __u32 product;                            
615         __u32 version;                            
616         enum hid_type type;                       
617         unsigned country;                         
618         struct hid_report_enum report_enum[HID    
619         struct work_struct led_work;              
620                                                   
621         struct semaphore driver_input_lock;       
622         struct device dev;                        
623         struct hid_driver *driver;                
624         void *devres_group_id;                    
625                                                   
626         const struct hid_ll_driver *ll_driver;    
627         struct mutex ll_open_lock;                
628         unsigned int ll_open_count;               
629                                                   
630 #ifdef CONFIG_HID_BATTERY_STRENGTH                
631         /*                                        
632          * Power supply information for HID de    
633          * battery strength. power_supply was     
634          * battery is non-NULL.                   
635          */                                       
636         struct power_supply *battery;             
637         __s32 battery_capacity;                   
638         __s32 battery_min;                        
639         __s32 battery_max;                        
640         __s32 battery_report_type;                
641         __s32 battery_report_id;                  
642         __s32 battery_charge_status;              
643         enum hid_battery_status battery_status    
644         bool battery_avoid_query;                 
645         ktime_t battery_ratelimit_time;           
646 #endif                                            
647                                                   
648         unsigned long status;                     
649         unsigned claimed;                         
650         unsigned quirks;                          
651         unsigned initial_quirks;                  
652         bool io_started;                          
653                                                   
654         struct list_head inputs;                  
655         void *hiddev;                             
656         void *hidraw;                             
657                                                   
658         char name[128];                           
659         char phys[64];                            
660         char uniq[64];                            
661                                                   
662         void *driver_data;                        
663                                                   
664         /* temporary hid_ff handling (until mo    
665         int (*ff_init)(struct hid_device *);      
666                                                   
667         /* hiddev event handler */                
668         int (*hiddev_connect)(struct hid_devic    
669         void (*hiddev_disconnect)(struct hid_d    
670         void (*hiddev_hid_event) (struct hid_d    
671                                   struct hid_u    
672         void (*hiddev_report_event) (struct hi    
673                                                   
674         /* debugging support via debugfs */       
675         unsigned short debug;                     
676         struct dentry *debug_dir;                 
677         struct dentry *debug_rdesc;               
678         struct dentry *debug_events;              
679         struct list_head debug_list;              
680         spinlock_t  debug_list_lock;              
681         wait_queue_head_t debug_wait;             
682         struct kref                     ref;      
683                                                   
684         unsigned int id;                          
685                                                   
686 #ifdef CONFIG_HID_BPF                             
687         struct hid_bpf bpf;                       
688 #endif /* CONFIG_HID_BPF */                       
689 };                                                
690                                                   
691 void hiddev_free(struct kref *ref);               
692                                                   
693 #define to_hid_device(pdev) \                     
694         container_of(pdev, struct hid_device,     
695                                                   
696 static inline void *hid_get_drvdata(struct hid    
697 {                                                 
698         return dev_get_drvdata(&hdev->dev);       
699 }                                                 
700                                                   
701 static inline void hid_set_drvdata(struct hid_    
702 {                                                 
703         dev_set_drvdata(&hdev->dev, data);        
704 }                                                 
705                                                   
706 #define HID_GLOBAL_STACK_SIZE 4                   
707 #define HID_COLLECTION_STACK_SIZE 4               
708                                                   
709 #define HID_SCAN_FLAG_MT_WIN_8                    
710 #define HID_SCAN_FLAG_VENDOR_SPECIFIC             
711 #define HID_SCAN_FLAG_GD_POINTER                  
712                                                   
713 struct hid_parser {                               
714         struct hid_global     global;             
715         struct hid_global     global_stack[HID    
716         unsigned int          global_stack_ptr    
717         struct hid_local      local;              
718         unsigned int         *collection_stack    
719         unsigned int          collection_stack    
720         unsigned int          collection_stack    
721         struct hid_device    *device;             
722         unsigned int          scan_flags;         
723 };                                                
724                                                   
725 struct hid_class_descriptor {                     
726         __u8  bDescriptorType;                    
727         __le16 wDescriptorLength;                 
728 } __attribute__ ((packed));                       
729                                                   
730 struct hid_descriptor {                           
731         __u8  bLength;                            
732         __u8  bDescriptorType;                    
733         __le16 bcdHID;                            
734         __u8  bCountryCode;                       
735         __u8  bNumDescriptors;                    
736                                                   
737         struct hid_class_descriptor desc[1];      
738 } __attribute__ ((packed));                       
739                                                   
740 #define HID_DEVICE(b, g, ven, prod)               
741         .bus = (b), .group = (g), .vendor = (v    
742 #define HID_USB_DEVICE(ven, prod)                 
743         .bus = BUS_USB, .vendor = (ven), .prod    
744 #define HID_BLUETOOTH_DEVICE(ven, prod)           
745         .bus = BUS_BLUETOOTH, .vendor = (ven),    
746 #define HID_I2C_DEVICE(ven, prod)                 
747         .bus = BUS_I2C, .vendor = (ven), .prod    
748                                                   
749 #define HID_REPORT_ID(rep) \                      
750         .report_type = (rep)                      
751 #define HID_USAGE_ID(uhid, utype, ucode) \        
752         .usage_hid = (uhid), .usage_type = (ut    
753 /* we don't want to catch types and codes equa    
754 #define HID_TERMINATOR          (HID_ANY_ID -     
755                                                   
756 struct hid_report_id {                            
757         __u32 report_type;                        
758 };                                                
759 struct hid_usage_id {                             
760         __u32 usage_hid;                          
761         __u32 usage_type;                         
762         __u32 usage_code;                         
763 };                                                
764                                                   
765 /**                                               
766  * struct hid_driver                              
767  * @name: driver name (e.g. "Footech_bar-wheel    
768  * @id_table: which devices is this driver for    
769  *            to be called)                       
770  * @dyn_list: list of dynamically added device    
771  * @dyn_lock: lock protecting @dyn_list           
772  * @match: check if the given device is handle    
773  * @probe: new device inserted                    
774  * @remove: device removed (NULL if not a hot-    
775  * @report_table: on which reports to call raw    
776  * @raw_event: if report in report_table, this    
777  * @usage_table: on which events to call event    
778  * @event: if usage in usage_table, this hook     
779  * @report: this hook is called after parsing     
780  * @report_fixup: called before report descrip    
781  * @input_mapping: invoked on input registerin    
782  * @input_mapped: invoked on input registering    
783  * @input_configured: invoked just before the     
784  * @feature_mapping: invoked on feature regist    
785  * @suspend: invoked on suspend (NULL means no    
786  * @resume: invoked on resume if device was no    
787  * @reset_resume: invoked on resume if device     
788  *                                                
789  * probe should return -errno on error, or 0 o    
790  * input will not be passed to raw_event unles    
791  * called.                                        
792  *                                                
793  * raw_event and event should return negative     
794  * pass the event on to .event() typically ret    
795  *                                                
796  * input_mapping shall return a negative value    
797  * (e.g. doubled or invalid usage), zero to co    
798  * usage by generic code (no special handling     
799  * generic parsing (needed special handling wh    
800  * input_mapped shall return negative to infor    
801  * should not be considered for further proces    
802  * no processing was performed and should be d    
803  * Both these functions may be NULL which mean    
804  * zero from them.                                
805  */                                               
806 struct hid_driver {                               
807         char *name;                               
808         const struct hid_device_id *id_table;     
809                                                   
810         struct list_head dyn_list;                
811         spinlock_t dyn_lock;                      
812                                                   
813         bool (*match)(struct hid_device *dev,     
814         int (*probe)(struct hid_device *dev, c    
815         void (*remove)(struct hid_device *dev)    
816                                                   
817         const struct hid_report_id *report_tab    
818         int (*raw_event)(struct hid_device *hd    
819                         u8 *data, int size);      
820         const struct hid_usage_id *usage_table    
821         int (*event)(struct hid_device *hdev,     
822                         struct hid_usage *usag    
823         void (*report)(struct hid_device *hdev    
824                                                   
825         const __u8 *(*report_fixup)(struct hid    
826                         unsigned int *size);      
827                                                   
828         int (*input_mapping)(struct hid_device    
829                         struct hid_input *hidi    
830                         struct hid_usage *usag    
831         int (*input_mapped)(struct hid_device     
832                         struct hid_input *hidi    
833                         struct hid_usage *usag    
834         int (*input_configured)(struct hid_dev    
835                                 struct hid_inp    
836         void (*feature_mapping)(struct hid_dev    
837                         struct hid_field *fiel    
838                         struct hid_usage *usag    
839                                                   
840         int (*suspend)(struct hid_device *hdev    
841         int (*resume)(struct hid_device *hdev)    
842         int (*reset_resume)(struct hid_device     
843                                                   
844 /* private: */                                    
845         struct device_driver driver;              
846 };                                                
847                                                   
848 #define to_hid_driver(pdrv) \                     
849         container_of(pdrv, struct hid_driver,     
850                                                   
851 /**                                               
852  * struct hid_ll_driver - low level driver cal    
853  * @start: called on probe to start the device    
854  * @stop: called on remove                        
855  * @open: called by input layer on open           
856  * @close: called by input layer on close         
857  * @power: request underlying hardware to ente    
858  * @parse: this method is called only once to     
859  *         shouldn't allocate anything to not     
860  * @request: send report request to device (e.    
861  * @wait: wait for buffered io to complete (se    
862  * @raw_request: send raw report request to de    
863  * @output_report: send output report to devic    
864  * @idle: send idle request to device             
865  * @may_wakeup: return if device may act as a     
866  * @max_buffer_size: over-ride maximum data bu    
867  */                                               
868 struct hid_ll_driver {                            
869         int (*start)(struct hid_device *hdev);    
870         void (*stop)(struct hid_device *hdev);    
871                                                   
872         int (*open)(struct hid_device *hdev);     
873         void (*close)(struct hid_device *hdev)    
874                                                   
875         int (*power)(struct hid_device *hdev,     
876                                                   
877         int (*parse)(struct hid_device *hdev);    
878                                                   
879         void (*request)(struct hid_device *hde    
880                         struct hid_report *rep    
881                                                   
882         int (*wait)(struct hid_device *hdev);     
883                                                   
884         int (*raw_request) (struct hid_device     
885                             __u8 *buf, size_t     
886                             int reqtype);         
887                                                   
888         int (*output_report) (struct hid_devic    
889                                                   
890         int (*idle)(struct hid_device *hdev, i    
891         bool (*may_wakeup)(struct hid_device *    
892                                                   
893         unsigned int max_buffer_size;             
894 };                                                
895                                                   
896 extern bool hid_is_usb(const struct hid_device    
897                                                   
898 #define PM_HINT_FULLON  1<<5                      
899 #define PM_HINT_NORMAL  1<<1                      
900                                                   
901 /* Applications from HID Usage Tables 4/8/99 V    
902 /* We ignore a few input applications that are    
903 #define IS_INPUT_APPLICATION(a) \                 
904                 (((a >= HID_UP_GENDESK) && (a     
905                 || ((a >= HID_DG_DIGITIZER) &&    
906                 || (a == HID_GD_SYSTEM_CONTROL    
907                 || (a == HID_GD_WIRELESS_RADIO    
908                                                   
909 /* HID core API */                                
910                                                   
911 extern bool hid_ignore(struct hid_device *);      
912 extern int hid_add_device(struct hid_device *)    
913 extern void hid_destroy_device(struct hid_devi    
914                                                   
915 extern const struct bus_type hid_bus_type;        
916                                                   
917 extern int __must_check __hid_register_driver(    
918                 struct module *, const char *m    
919                                                   
920 /* use a define to avoid include chaining to g    
921 #define hid_register_driver(driver) \             
922         __hid_register_driver(driver, THIS_MOD    
923                                                   
924 extern void hid_unregister_driver(struct hid_d    
925                                                   
926 /**                                               
927  * module_hid_driver() - Helper macro for regi    
928  * @__hid_driver: hid_driver struct               
929  *                                                
930  * Helper macro for HID drivers which do not d    
931  * init/exit. This eliminates a lot of boilerp    
932  * use this macro once, and calling it replace    
933  */                                               
934 #define module_hid_driver(__hid_driver) \         
935         module_driver(__hid_driver, hid_regist    
936                       hid_unregister_driver)      
937                                                   
938 extern void hidinput_hid_event(struct hid_devi    
939 extern void hidinput_report_event(struct hid_d    
940 extern int hidinput_connect(struct hid_device     
941 extern void hidinput_disconnect(struct hid_dev    
942                                                   
943 struct hid_field *hid_find_field(struct hid_de    
944                                  unsigned int     
945 int hid_set_field(struct hid_field *, unsigned    
946 int hid_input_report(struct hid_device *hid, e    
947                      int interrupt);              
948 struct hid_field *hidinput_get_led_field(struc    
949 unsigned int hidinput_count_leds(struct hid_de    
950 __s32 hidinput_calc_abs_res(const struct hid_f    
951 void hid_output_report(struct hid_report *repo    
952 int __hid_request(struct hid_device *hid, stru    
953 u8 *hid_alloc_report_buf(struct hid_report *re    
954 struct hid_device *hid_allocate_device(void);     
955 struct hid_report *hid_register_report(struct     
956                                        enum hi    
957                                        unsigne    
958 int hid_parse_report(struct hid_device *hid, c    
959 struct hid_report *hid_validate_values(struct     
960                                        enum hi    
961                                        unsigne    
962                                        unsigne    
963                                                   
964 void hid_setup_resolution_multiplier(struct hi    
965 int hid_open_report(struct hid_device *device)    
966 int hid_check_keys_pressed(struct hid_device *    
967 int hid_connect(struct hid_device *hid, unsign    
968 void hid_disconnect(struct hid_device *hid);      
969 bool hid_match_one_id(const struct hid_device     
970                       const struct hid_device_    
971 const struct hid_device_id *hid_match_id(const    
972                                          const    
973 const struct hid_device_id *hid_match_device(s    
974                                              s    
975 bool hid_compare_device_paths(struct hid_devic    
976                               struct hid_devic    
977 s32 hid_snto32(__u32 value, unsigned n);          
978 __u32 hid_field_extract(const struct hid_devic    
979                      unsigned offset, unsigned    
980                                                   
981 #ifdef CONFIG_PM                                  
982 int hid_driver_suspend(struct hid_device *hdev    
983 int hid_driver_reset_resume(struct hid_device     
984 int hid_driver_resume(struct hid_device *hdev)    
985 #else                                             
986 static inline int hid_driver_suspend(struct hi    
987 static inline int hid_driver_reset_resume(stru    
988 static inline int hid_driver_resume(struct hid    
989 #endif                                            
990                                                   
991 /**                                               
992  * hid_device_io_start - enable HID input duri    
993  *                                                
994  * @hid: the device                               
995  *                                                
996  * This should only be called during probe or     
997  * called by the thread calling probe or remov    
998  * incoming packets to be delivered to the dri    
999  */                                               
1000 static inline void hid_device_io_start(struct    
1001         if (hid->io_started) {                   
1002                 dev_warn(&hid->dev, "io alrea    
1003                 return;                          
1004         }                                        
1005         hid->io_started = true;                  
1006         up(&hid->driver_input_lock);             
1007 }                                                
1008                                                  
1009 /**                                              
1010  * hid_device_io_stop - disable HID input dur    
1011  *                                               
1012  * @hid: the device                              
1013  *                                               
1014  * Should only be called after hid_device_io_    
1015  * incoming packets from going to the driver     
1016  * probe, remove. If called during probe, pac    
1017  * driver after probe is complete. This funct    
1018  * by the thread calling probe or remove.        
1019  */                                              
1020 static inline void hid_device_io_stop(struct     
1021         if (!hid->io_started) {                  
1022                 dev_warn(&hid->dev, "io alrea    
1023                 return;                          
1024         }                                        
1025         hid->io_started = false;                 
1026         down(&hid->driver_input_lock);           
1027 }                                                
1028                                                  
1029 /**                                              
1030  * hid_map_usage - map usage input bits          
1031  *                                               
1032  * @hidinput: hidinput which we are intereste    
1033  * @usage: usage to fill in                      
1034  * @bit: pointer to input->{}bit (out paramet    
1035  * @max: maximal valid usage->code to conside    
1036  * @type: input event type (EV_KEY, EV_REL, .    
1037  * @c: code which corresponds to this usage a    
1038  *                                               
1039  * The value pointed to by @bit will be set t    
1040  * an unhandled event type, or if @c is out o    
1041  * can be used as an error condition.            
1042  */                                              
1043 static inline void hid_map_usage(struct hid_i    
1044                 struct hid_usage *usage, unsi    
1045                 __u8 type, unsigned int c)       
1046 {                                                
1047         struct input_dev *input = hidinput->i    
1048         unsigned long *bmap = NULL;              
1049         unsigned int limit = 0;                  
1050                                                  
1051         switch (type) {                          
1052         case EV_ABS:                             
1053                 bmap = input->absbit;            
1054                 limit = ABS_MAX;                 
1055                 break;                           
1056         case EV_REL:                             
1057                 bmap = input->relbit;            
1058                 limit = REL_MAX;                 
1059                 break;                           
1060         case EV_KEY:                             
1061                 bmap = input->keybit;            
1062                 limit = KEY_MAX;                 
1063                 break;                           
1064         case EV_LED:                             
1065                 bmap = input->ledbit;            
1066                 limit = LED_MAX;                 
1067                 break;                           
1068         case EV_MSC:                             
1069                 bmap = input->mscbit;            
1070                 limit = MSC_MAX;                 
1071                 break;                           
1072         }                                        
1073                                                  
1074         if (unlikely(c > limit || !bmap)) {      
1075                 pr_warn_ratelimited("%s: Inva    
1076                                     input->na    
1077                 *bit = NULL;                     
1078                 return;                          
1079         }                                        
1080                                                  
1081         usage->type = type;                      
1082         usage->code = c;                         
1083         *max = limit;                            
1084         *bit = bmap;                             
1085 }                                                
1086                                                  
1087 /**                                              
1088  * hid_map_usage_clear - map usage input bits    
1089  *                                               
1090  * @hidinput: hidinput which we are intereste    
1091  * @usage: usage to fill in                      
1092  * @bit: pointer to input->{}bit (out paramet    
1093  * @max: maximal valid usage->code to conside    
1094  * @type: input event type (EV_KEY, EV_REL, .    
1095  * @c: code which corresponds to this usage a    
1096  *                                               
1097  * The same as hid_map_usage, except the @c b    
1098  * bits (@bit).                                  
1099  */                                              
1100 static inline void hid_map_usage_clear(struct    
1101                 struct hid_usage *usage, unsi    
1102                 __u8 type, __u16 c)              
1103 {                                                
1104         hid_map_usage(hidinput, usage, bit, m    
1105         if (*bit)                                
1106                 clear_bit(usage->code, *bit);    
1107 }                                                
1108                                                  
1109 /**                                              
1110  * hid_parse - parse HW reports                  
1111  *                                               
1112  * @hdev: hid device                             
1113  *                                               
1114  * Call this from probe after you set up the     
1115  * report_fixup will be called (if non-NULL)     
1116  * device before passing it to hid layer for     
1117  */                                              
1118 static inline int __must_check hid_parse(stru    
1119 {                                                
1120         return hid_open_report(hdev);            
1121 }                                                
1122                                                  
1123 int __must_check hid_hw_start(struct hid_devi    
1124                               unsigned int co    
1125 void hid_hw_stop(struct hid_device *hdev);       
1126 int __must_check hid_hw_open(struct hid_devic    
1127 void hid_hw_close(struct hid_device *hdev);      
1128 void hid_hw_request(struct hid_device *hdev,     
1129                     struct hid_report *report    
1130 int __hid_hw_raw_request(struct hid_device *h    
1131                          unsigned char report    
1132                          size_t len, enum hid    
1133                          enum hid_class_reque    
1134                          __u64 source, bool f    
1135 int __hid_hw_output_report(struct hid_device     
1136                            bool from_bpf);       
1137 int hid_hw_raw_request(struct hid_device *hde    
1138                        unsigned char reportnu    
1139                        size_t len, enum hid_r    
1140                        enum hid_class_request    
1141 int hid_hw_output_report(struct hid_device *h    
1142                                                  
1143 /**                                              
1144  * hid_hw_power - requests underlying HW to g    
1145  *                                               
1146  * @hdev: hid device                             
1147  * @level: requested power level (one of %PM_    
1148  *                                               
1149  * This function requests underlying hardware    
1150  * mode.                                         
1151  */                                              
1152                                                  
1153 static inline int hid_hw_power(struct hid_dev    
1154 {                                                
1155         return hdev->ll_driver->power ? hdev-    
1156 }                                                
1157                                                  
1158                                                  
1159 /**                                              
1160  * hid_hw_idle - send idle request to device     
1161  *                                               
1162  * @hdev: hid device                             
1163  * @report: report to control                    
1164  * @idle: idle state                             
1165  * @reqtype: hid request type                    
1166  */                                              
1167 static inline int hid_hw_idle(struct hid_devi    
1168                 enum hid_class_request reqtyp    
1169 {                                                
1170         if (hdev->ll_driver->idle)               
1171                 return hdev->ll_driver->idle(    
1172                                                  
1173         return 0;                                
1174 }                                                
1175                                                  
1176 /**                                              
1177  * hid_hw_may_wakeup - return if the hid devi    
1178  *                                               
1179  * @hdev: hid device                             
1180  */                                              
1181 static inline bool hid_hw_may_wakeup(struct h    
1182 {                                                
1183         if (hdev->ll_driver->may_wakeup)         
1184                 return hdev->ll_driver->may_w    
1185                                                  
1186         if (hdev->dev.parent)                    
1187                 return device_may_wakeup(hdev    
1188                                                  
1189         return false;                            
1190 }                                                
1191                                                  
1192 /**                                              
1193  * hid_hw_wait - wait for buffered io to comp    
1194  *                                               
1195  * @hdev: hid device                             
1196  */                                              
1197 static inline void hid_hw_wait(struct hid_dev    
1198 {                                                
1199         if (hdev->ll_driver->wait)               
1200                 hdev->ll_driver->wait(hdev);     
1201 }                                                
1202                                                  
1203 /**                                              
1204  * hid_report_len - calculate the report leng    
1205  *                                               
1206  * @report: the report we want to know the le    
1207  */                                              
1208 static inline u32 hid_report_len(struct hid_r    
1209 {                                                
1210         return DIV_ROUND_UP(report->size, 8)     
1211 }                                                
1212                                                  
1213 int hid_report_raw_event(struct hid_device *h    
1214                          int interrupt);         
1215                                                  
1216 /* HID quirks API */                             
1217 unsigned long hid_lookup_quirk(const struct h    
1218 int hid_quirks_init(char **quirks_param, __u1    
1219 void hid_quirks_exit(__u16 bus);                 
1220                                                  
1221 #ifdef CONFIG_HID_PID                            
1222 int hid_pidff_init(struct hid_device *hid);      
1223 #else                                            
1224 #define hid_pidff_init NULL                      
1225 #endif                                           
1226                                                  
1227 #define dbg_hid(fmt, ...) pr_debug("%s: " fmt    
1228                                                  
1229 #define hid_err(hid, fmt, ...)                   
1230         dev_err(&(hid)->dev, fmt, ##__VA_ARGS    
1231 #define hid_notice(hid, fmt, ...)                
1232         dev_notice(&(hid)->dev, fmt, ##__VA_A    
1233 #define hid_warn(hid, fmt, ...)                  
1234         dev_warn(&(hid)->dev, fmt, ##__VA_ARG    
1235 #define hid_info(hid, fmt, ...)                  
1236         dev_info(&(hid)->dev, fmt, ##__VA_ARG    
1237 #define hid_dbg(hid, fmt, ...)                   
1238         dev_dbg(&(hid)->dev, fmt, ##__VA_ARGS    
1239                                                  
1240 #define hid_err_once(hid, fmt, ...)              
1241         dev_err_once(&(hid)->dev, fmt, ##__VA    
1242 #define hid_notice_once(hid, fmt, ...)           
1243         dev_notice_once(&(hid)->dev, fmt, ##_    
1244 #define hid_warn_once(hid, fmt, ...)             
1245         dev_warn_once(&(hid)->dev, fmt, ##__V    
1246 #define hid_info_once(hid, fmt, ...)             
1247         dev_info_once(&(hid)->dev, fmt, ##__V    
1248 #define hid_dbg_once(hid, fmt, ...)              
1249         dev_dbg_once(&(hid)->dev, fmt, ##__VA    
1250                                                  
1251 #endif                                           
1252                                                  

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php