summaryrefslogtreecommitdiff
path: root/sys/dev/usb/input/uhid.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/usb/input/uhid.c')
-rw-r--r--sys/dev/usb/input/uhid.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/sys/dev/usb/input/uhid.c b/sys/dev/usb/input/uhid.c
index 71aae5d30988..11ec2b7092bc 100644
--- a/sys/dev/usb/input/uhid.c
+++ b/sys/dev/usb/input/uhid.c
@@ -68,6 +68,7 @@ __FBSDID("$FreeBSD$");
#include <dev/usb/usbdi_util.h>
#include <dev/usb/usbhid.h>
#include <dev/usb/usb_ioctl.h>
+#include <dev/usb/usb_generic.h>
#define USB_DEBUG_VAR uhid_debug
#include <dev/usb/usb_debug.h>
@@ -141,11 +142,13 @@ static usb_fifo_cmd_t uhid_stop_write;
static usb_fifo_open_t uhid_open;
static usb_fifo_close_t uhid_close;
static usb_fifo_ioctl_t uhid_ioctl;
+static usb_fifo_ioctl_t uhid_ioctl_post;
static struct usb_fifo_methods uhid_fifo_methods = {
.f_open = &uhid_open,
.f_close = &uhid_close,
.f_ioctl = &uhid_ioctl,
+ .f_ioctl_post = &uhid_ioctl_post,
.f_start_read = &uhid_start_read,
.f_stop_read = &uhid_stop_read,
.f_start_write = &uhid_start_write,
@@ -645,6 +648,24 @@ uhid_ioctl(struct usb_fifo *fifo, u_long cmd, void *addr,
break;
default:
+ error = ENOIOCTL;
+ break;
+ }
+ return (error);
+}
+
+static int
+uhid_ioctl_post(struct usb_fifo *fifo, u_long cmd, void *addr,
+ int fflags)
+{
+ int error;
+
+ switch (cmd) {
+ case USB_GET_DEVICEINFO:
+ error = ugen_fill_deviceinfo(fifo, addr);
+ break;
+
+ default:
error = EINVAL;
break;
}