@@ -2025,19 +2025,9 @@ int hid_report_raw_event(struct hid_device *hid, enum hid_report_type type, u8 *
20252025}
20262026EXPORT_SYMBOL_GPL (hid_report_raw_event );
20272027
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 )
20412031{
20422032 struct hid_report_enum * report_enum ;
20432033 struct hid_driver * hdrv ;
@@ -2057,7 +2047,7 @@ int hid_input_report(struct hid_device *hid, enum hid_report_type type, u8 *data
20572047 report_enum = hid -> report_enum + type ;
20582048 hdrv = hid -> driver ;
20592049
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 );
20612051 if (IS_ERR (data )) {
20622052 ret = PTR_ERR (data );
20632053 goto unlock ;
@@ -2092,6 +2082,23 @@ int hid_input_report(struct hid_device *hid, enum hid_report_type type, u8 *data
20922082 up (& hid -> driver_input_lock );
20932083 return ret ;
20942084}
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+ }
20952102EXPORT_SYMBOL_GPL (hid_input_report );
20962103
20972104bool hid_match_one_id (const struct hid_device * hdev ,
@@ -2392,6 +2399,24 @@ void hid_hw_request(struct hid_device *hdev,
23922399}
23932400EXPORT_SYMBOL_GPL (hid_hw_request );
23942401
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+
23952420/**
23962421 * hid_hw_raw_request - send report request to device
23972422 *
@@ -2409,6 +2434,12 @@ EXPORT_SYMBOL_GPL(hid_hw_request);
24092434int hid_hw_raw_request (struct hid_device * hdev ,
24102435 unsigned char reportnum , __u8 * buf ,
24112436 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 )
24122443{
24132444 unsigned int max_buffer_size = HID_MAX_BUFFER_SIZE ;
24142445
@@ -2418,10 +2449,11 @@ int hid_hw_raw_request(struct hid_device *hdev,
24182449 if (len < 1 || len > max_buffer_size || !buf )
24192450 return - EINVAL ;
24202451
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 ;
24232456}
2424- EXPORT_SYMBOL_GPL (hid_hw_raw_request );
24252457
24262458/**
24272459 * hid_hw_output_report - send output report to device
@@ -2434,18 +2466,7 @@ EXPORT_SYMBOL_GPL(hid_hw_raw_request);
24342466 */
24352467int hid_hw_output_report (struct hid_device * hdev , __u8 * buf , size_t len )
24362468{
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 );
24492470}
24502471EXPORT_SYMBOL_GPL (hid_hw_output_report );
24512472
@@ -2972,9 +2993,9 @@ EXPORT_SYMBOL_GPL(hid_check_keys_pressed);
29722993#ifdef CONFIG_HID_BPF
29732994static struct hid_ops __hid_ops = {
29742995 .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 ,
29782999 .owner = THIS_MODULE ,
29793000 .bus_type = & hid_bus_type ,
29803001};
0 commit comments