@@ -2025,19 +2025,9 @@ int hid_report_raw_event(struct hid_device *hid, enum hid_report_type type, u8 *
2025
2025
}
2026
2026
EXPORT_SYMBOL_GPL (hid_report_raw_event );
2027
2027
2028
- /**
2029
- * hid_input_report - report data from lower layer (usb, bt...)
2030
- *
2031
- * @hid: hid device
2032
- * @type: HID report type (HID_*_REPORT)
2033
- * @data: report contents
2034
- * @size: size of data parameter
2035
- * @interrupt: distinguish between interrupt and control transfers
2036
- *
2037
- * This is data entry for lower layers.
2038
- */
2039
- int hid_input_report (struct hid_device * hid , enum hid_report_type type , u8 * data , u32 size ,
2040
- int interrupt )
2028
+
2029
+ static int __hid_input_report (struct hid_device * hid , enum hid_report_type type ,
2030
+ u8 * data , u32 size , int interrupt , u64 source )
2041
2031
{
2042
2032
struct hid_report_enum * report_enum ;
2043
2033
struct hid_driver * hdrv ;
@@ -2057,7 +2047,7 @@ int hid_input_report(struct hid_device *hid, enum hid_report_type type, u8 *data
2057
2047
report_enum = hid -> report_enum + type ;
2058
2048
hdrv = hid -> driver ;
2059
2049
2060
- data = dispatch_hid_bpf_device_event (hid , type , data , & size , interrupt );
2050
+ data = dispatch_hid_bpf_device_event (hid , type , data , & size , interrupt , source );
2061
2051
if (IS_ERR (data )) {
2062
2052
ret = PTR_ERR (data );
2063
2053
goto unlock ;
@@ -2092,6 +2082,23 @@ int hid_input_report(struct hid_device *hid, enum hid_report_type type, u8 *data
2092
2082
up (& hid -> driver_input_lock );
2093
2083
return ret ;
2094
2084
}
2085
+
2086
+ /**
2087
+ * hid_input_report - report data from lower layer (usb, bt...)
2088
+ *
2089
+ * @hid: hid device
2090
+ * @type: HID report type (HID_*_REPORT)
2091
+ * @data: report contents
2092
+ * @size: size of data parameter
2093
+ * @interrupt: distinguish between interrupt and control transfers
2094
+ *
2095
+ * This is data entry for lower layers.
2096
+ */
2097
+ int hid_input_report (struct hid_device * hid , enum hid_report_type type , u8 * data , u32 size ,
2098
+ int interrupt )
2099
+ {
2100
+ return __hid_input_report (hid , type , data , size , interrupt , 0 );
2101
+ }
2095
2102
EXPORT_SYMBOL_GPL (hid_input_report );
2096
2103
2097
2104
bool hid_match_one_id (const struct hid_device * hdev ,
@@ -2392,6 +2399,24 @@ void hid_hw_request(struct hid_device *hdev,
2392
2399
}
2393
2400
EXPORT_SYMBOL_GPL (hid_hw_request );
2394
2401
2402
+ int __hid_hw_raw_request (struct hid_device * hdev ,
2403
+ unsigned char reportnum , __u8 * buf ,
2404
+ size_t len , enum hid_report_type rtype ,
2405
+ enum hid_class_request reqtype ,
2406
+ __u64 source )
2407
+ {
2408
+ unsigned int max_buffer_size = HID_MAX_BUFFER_SIZE ;
2409
+
2410
+ if (hdev -> ll_driver -> max_buffer_size )
2411
+ max_buffer_size = hdev -> ll_driver -> max_buffer_size ;
2412
+
2413
+ if (len < 1 || len > max_buffer_size || !buf )
2414
+ return - EINVAL ;
2415
+
2416
+ return hdev -> ll_driver -> raw_request (hdev , reportnum , buf , len ,
2417
+ rtype , reqtype );
2418
+ }
2419
+
2395
2420
/**
2396
2421
* hid_hw_raw_request - send report request to device
2397
2422
*
@@ -2409,6 +2434,12 @@ EXPORT_SYMBOL_GPL(hid_hw_request);
2409
2434
int hid_hw_raw_request (struct hid_device * hdev ,
2410
2435
unsigned char reportnum , __u8 * buf ,
2411
2436
size_t len , enum hid_report_type rtype , enum hid_class_request reqtype )
2437
+ {
2438
+ return __hid_hw_raw_request (hdev , reportnum , buf , len , rtype , reqtype , 0 );
2439
+ }
2440
+ EXPORT_SYMBOL_GPL (hid_hw_raw_request );
2441
+
2442
+ int __hid_hw_output_report (struct hid_device * hdev , __u8 * buf , size_t len , __u64 source )
2412
2443
{
2413
2444
unsigned int max_buffer_size = HID_MAX_BUFFER_SIZE ;
2414
2445
@@ -2418,10 +2449,11 @@ int hid_hw_raw_request(struct hid_device *hdev,
2418
2449
if (len < 1 || len > max_buffer_size || !buf )
2419
2450
return - EINVAL ;
2420
2451
2421
- return hdev -> ll_driver -> raw_request (hdev , reportnum , buf , len ,
2422
- rtype , reqtype );
2452
+ if (hdev -> ll_driver -> output_report )
2453
+ return hdev -> ll_driver -> output_report (hdev , buf , len );
2454
+
2455
+ return - ENOSYS ;
2423
2456
}
2424
- EXPORT_SYMBOL_GPL (hid_hw_raw_request );
2425
2457
2426
2458
/**
2427
2459
* hid_hw_output_report - send output report to device
@@ -2434,18 +2466,7 @@ EXPORT_SYMBOL_GPL(hid_hw_raw_request);
2434
2466
*/
2435
2467
int hid_hw_output_report (struct hid_device * hdev , __u8 * buf , size_t len )
2436
2468
{
2437
- unsigned int max_buffer_size = HID_MAX_BUFFER_SIZE ;
2438
-
2439
- if (hdev -> ll_driver -> max_buffer_size )
2440
- max_buffer_size = hdev -> ll_driver -> max_buffer_size ;
2441
-
2442
- if (len < 1 || len > max_buffer_size || !buf )
2443
- return - EINVAL ;
2444
-
2445
- if (hdev -> ll_driver -> output_report )
2446
- return hdev -> ll_driver -> output_report (hdev , buf , len );
2447
-
2448
- return - ENOSYS ;
2469
+ return __hid_hw_output_report (hdev , buf , len , 0 );
2449
2470
}
2450
2471
EXPORT_SYMBOL_GPL (hid_hw_output_report );
2451
2472
@@ -2972,9 +2993,9 @@ EXPORT_SYMBOL_GPL(hid_check_keys_pressed);
2972
2993
#ifdef CONFIG_HID_BPF
2973
2994
static struct hid_ops __hid_ops = {
2974
2995
.hid_get_report = hid_get_report ,
2975
- .hid_hw_raw_request = hid_hw_raw_request ,
2976
- .hid_hw_output_report = hid_hw_output_report ,
2977
- .hid_input_report = hid_input_report ,
2996
+ .hid_hw_raw_request = __hid_hw_raw_request ,
2997
+ .hid_hw_output_report = __hid_hw_output_report ,
2998
+ .hid_input_report = __hid_input_report ,
2978
2999
.owner = THIS_MODULE ,
2979
3000
.bus_type = & hid_bus_type ,
2980
3001
};
0 commit comments