-----------------------------------------------------------
 
 .. kernel-doc:: drivers/hid/bpf/hid_bpf_dispatch.c
-   :functions: hid_bpf_attach_prog hid_bpf_hw_request hid_bpf_hw_output_report hid_bpf_allocate_context hid_bpf_release_context
+   :functions: hid_bpf_attach_prog hid_bpf_hw_request hid_bpf_hw_output_report hid_bpf_input_report hid_bpf_allocate_context hid_bpf_release_context
 
 General overview of a HID-BPF program
 =====================================
 
        kfree(dma_data);
        return ret;
 }
+
+/**
+ * hid_bpf_input_report - Inject a HID report in the kernel from a HID device
+ *
+ * @ctx: the HID-BPF context previously allocated in hid_bpf_allocate_context()
+ * @type: the type of the report (%HID_INPUT_REPORT, %HID_FEATURE_REPORT, %HID_OUTPUT_REPORT)
+ * @buf: a %PTR_TO_MEM buffer
+ * @buf__sz: the size of the data to transfer
+ *
+ * Returns %0 on success, a negative error code otherwise.
+ */
+__bpf_kfunc int
+hid_bpf_input_report(struct hid_bpf_ctx *ctx, enum hid_report_type type, u8 *buf,
+                    const size_t buf__sz)
+{
+       struct hid_device *hdev;
+       size_t size = buf__sz;
+       int ret;
+
+       /* check arguments */
+       ret = __hid_bpf_hw_check_params(ctx, buf, &size, type);
+       if (ret)
+               return ret;
+
+       hdev = (struct hid_device *)ctx->hid; /* discard const */
+
+       return hid_input_report(hdev, type, buf, size, 0);
+}
 __bpf_kfunc_end_defs();
 
 /*
 BTF_ID_FLAGS(func, hid_bpf_release_context, KF_RELEASE)
 BTF_ID_FLAGS(func, hid_bpf_hw_request)
 BTF_ID_FLAGS(func, hid_bpf_hw_output_report)
+BTF_ID_FLAGS(func, hid_bpf_input_report)
 BTF_KFUNCS_END(hid_bpf_syscall_kfunc_ids)
 
 static const struct btf_kfunc_id_set hid_bpf_syscall_kfunc_set = {
 
        .hid_get_report = hid_get_report,
        .hid_hw_raw_request = hid_hw_raw_request,
        .hid_hw_output_report = hid_hw_output_report,
+       .hid_input_report = hid_input_report,
        .owner = THIS_MODULE,
        .bus_type = &hid_bus_type,
 };
 
                                  size_t len, enum hid_report_type rtype,
                                  enum hid_class_request reqtype);
        int (*hid_hw_output_report)(struct hid_device *hdev, __u8 *buf, size_t len);
+       int (*hid_input_report)(struct hid_device *hid, enum hid_report_type type,
+                               u8 *data, u32 size, int interrupt);
        struct module *owner;
        const struct bus_type *bus_type;
 };