Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/hid/hidraw.c
Show First 20 Lines • Show All 563 Lines • ▼ Show 20 Lines | #ifdef COMPAT_FREEBSD32 | ||||
struct hidraw_gen_descriptor local_hgd; | struct hidraw_gen_descriptor local_hgd; | ||||
struct hidraw_gen_descriptor32 *hgd32 = NULL; | struct hidraw_gen_descriptor32 *hgd32 = NULL; | ||||
#endif | #endif | ||||
void *buf; | void *buf; | ||||
struct hidraw_softc *sc; | struct hidraw_softc *sc; | ||||
struct hidraw_gen_descriptor *hgd; | struct hidraw_gen_descriptor *hgd; | ||||
struct hidraw_report_descriptor *hrd; | struct hidraw_report_descriptor *hrd; | ||||
struct hidraw_devinfo *hdi; | struct hidraw_devinfo *hdi; | ||||
const char *devname; | |||||
uint32_t size; | uint32_t size; | ||||
int id, len; | int id, len; | ||||
int error = 0; | int error = 0; | ||||
DPRINTFN(2, "cmd=%lx\n", cmd); | DPRINTFN(2, "cmd=%lx\n", cmd); | ||||
sc = dev->si_drv1; | sc = dev->si_drv1; | ||||
if (sc == NULL) | if (sc == NULL) | ||||
▲ Show 20 Lines • Show All 240 Lines • ▼ Show 20 Lines | case HIDIOCGRAWINFO: | ||||
return (0); | return (0); | ||||
} | } | ||||
/* variable-length ioctls handling */ | /* variable-length ioctls handling */ | ||||
len = IOCPARM_LEN(cmd); | len = IOCPARM_LEN(cmd); | ||||
switch (IOCBASECMD(cmd)) { | switch (IOCBASECMD(cmd)) { | ||||
case HIDIOCGRAWNAME(0): | case HIDIOCGRAWNAME(0): | ||||
strlcpy(addr, sc->sc_hw->name, len); | strlcpy(addr, sc->sc_hw->name, len); | ||||
td->td_retval[0] = min(strlen(sc->sc_hw->name), len); | |||||
return (0); | return (0); | ||||
case HIDIOCGRAWPHYS(0): | case HIDIOCGRAWPHYS(0): | ||||
strlcpy(addr, device_get_nameunit(sc->sc_dev), len); | devname = device_get_nameunit(sc->sc_dev); | ||||
strlcpy(addr, devname, len); | |||||
td->td_retval[0] = min(strlen(devname), len); | |||||
return (0); | return (0); | ||||
case HIDIOCSFEATURE(0): | case HIDIOCSFEATURE(0): | ||||
if (!(sc->sc_fflags & FWRITE)) | if (!(sc->sc_fflags & FWRITE)) | ||||
return (EPERM); | return (EPERM); | ||||
if (len < 2) | if (len < 2) | ||||
return (EINVAL); | return (EINVAL); | ||||
id = *(uint8_t *)addr; | id = *(uint8_t *)addr; | ||||
Show All 14 Lines | if (id == 0) { | ||||
addr = (uint8_t *)addr + 1; | addr = (uint8_t *)addr + 1; | ||||
len--; | len--; | ||||
} | } | ||||
return (hid_get_report(sc->sc_dev, addr, len, NULL, | return (hid_get_report(sc->sc_dev, addr, len, NULL, | ||||
HID_FEATURE_REPORT, id)); | HID_FEATURE_REPORT, id)); | ||||
case HIDIOCGRAWUNIQ(0): | case HIDIOCGRAWUNIQ(0): | ||||
strlcpy(addr, sc->sc_hw->serial, len); | strlcpy(addr, sc->sc_hw->serial, len); | ||||
td->td_retval[0] = min(strlen(sc->sc_hw->serial), len); | |||||
return (0); | return (0); | ||||
} | } | ||||
return (EINVAL); | return (EINVAL); | ||||
} | } | ||||
static int | static int | ||||
hidraw_poll(struct cdev *dev, int events, struct thread *td) | hidraw_poll(struct cdev *dev, int events, struct thread *td) | ||||
▲ Show 20 Lines • Show All 122 Lines • Show Last 20 Lines |