version 1.34, 2001/07/04 16:23:40 |
version 1.34.2.1, 2002/01/10 19:59:10 |
|
|
* POSSIBILITY OF SUCH DAMAGE. |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
*/ |
|
|
|
#include <sys/cdefs.h> |
|
__KERNEL_RCSID(0, "$NetBSD$"); |
|
|
#include <sys/param.h> |
#include <sys/param.h> |
#include <sys/systm.h> |
#include <sys/systm.h> |
#include <sys/kernel.h> |
#include <sys/kernel.h> |
Line 219 usbd_set_port_feature(usbd_device_handle |
|
Line 222 usbd_set_port_feature(usbd_device_handle |
|
return (usbd_do_request(dev, &req, 0)); |
return (usbd_do_request(dev, &req, 0)); |
} |
} |
|
|
|
usbd_status |
|
usbd_get_protocol(usbd_interface_handle iface, u_int8_t *report) |
|
{ |
|
usb_interface_descriptor_t *id = usbd_get_interface_descriptor(iface); |
|
usbd_device_handle dev; |
|
usb_device_request_t req; |
|
|
|
DPRINTFN(4, ("usbd_get_protocol: iface=%p, endpt=%d\n", |
|
iface, id->bInterfaceNumber)); |
|
if (id == NULL) |
|
return (USBD_IOERROR); |
|
usbd_interface2device_handle(iface, &dev); |
|
req.bmRequestType = UT_READ_CLASS_INTERFACE; |
|
req.bRequest = UR_GET_PROTOCOL; |
|
USETW(req.wValue, 0); |
|
USETW(req.wIndex, id->bInterfaceNumber); |
|
USETW(req.wLength, 1); |
|
return (usbd_do_request(dev, &req, report)); |
|
} |
|
|
usbd_status |
usbd_status |
usbd_set_protocol(usbd_interface_handle iface, int report) |
usbd_set_protocol(usbd_interface_handle iface, int report) |
Line 226 usbd_set_protocol(usbd_interface_handle |
|
Line 248 usbd_set_protocol(usbd_interface_handle |
|
usb_interface_descriptor_t *id = usbd_get_interface_descriptor(iface); |
usb_interface_descriptor_t *id = usbd_get_interface_descriptor(iface); |
usbd_device_handle dev; |
usbd_device_handle dev; |
usb_device_request_t req; |
usb_device_request_t req; |
usbd_status err; |
|
|
|
DPRINTFN(4, ("usbd_set_protocol: iface=%p, report=%d, endpt=%d\n", |
DPRINTFN(4, ("usbd_set_protocol: iface=%p, report=%d, endpt=%d\n", |
iface, report, id->bInterfaceNumber)); |
iface, report, id->bInterfaceNumber)); |
if (id == NULL) |
if (id == NULL) |
return (USBD_IOERROR); |
return (USBD_IOERROR); |
err = usbd_interface2device_handle(iface, &dev); |
usbd_interface2device_handle(iface, &dev); |
if (err) |
|
return (err); |
|
req.bmRequestType = UT_WRITE_CLASS_INTERFACE; |
req.bmRequestType = UT_WRITE_CLASS_INTERFACE; |
req.bRequest = UR_SET_PROTOCOL; |
req.bRequest = UR_SET_PROTOCOL; |
USETW(req.wValue, report); |
USETW(req.wValue, report); |
Line 250 usbd_set_report(usbd_interface_handle if |
|
Line 269 usbd_set_report(usbd_interface_handle if |
|
usb_interface_descriptor_t *ifd = usbd_get_interface_descriptor(iface); |
usb_interface_descriptor_t *ifd = usbd_get_interface_descriptor(iface); |
usbd_device_handle dev; |
usbd_device_handle dev; |
usb_device_request_t req; |
usb_device_request_t req; |
usbd_status err; |
|
|
|
DPRINTFN(4, ("usbd_set_report: len=%d\n", len)); |
DPRINTFN(4, ("usbd_set_report: len=%d\n", len)); |
if (ifd == NULL) |
if (ifd == NULL) |
return (USBD_IOERROR); |
return (USBD_IOERROR); |
err = usbd_interface2device_handle(iface, &dev); |
usbd_interface2device_handle(iface, &dev); |
if (err) |
|
return (err); |
|
req.bmRequestType = UT_WRITE_CLASS_INTERFACE; |
req.bmRequestType = UT_WRITE_CLASS_INTERFACE; |
req.bRequest = UR_SET_REPORT; |
req.bRequest = UR_SET_REPORT; |
USETW2(req.wValue, type, id); |
USETW2(req.wValue, type, id); |
Line 273 usbd_set_report_async(usbd_interface_han |
|
Line 289 usbd_set_report_async(usbd_interface_han |
|
usb_interface_descriptor_t *ifd = usbd_get_interface_descriptor(iface); |
usb_interface_descriptor_t *ifd = usbd_get_interface_descriptor(iface); |
usbd_device_handle dev; |
usbd_device_handle dev; |
usb_device_request_t req; |
usb_device_request_t req; |
usbd_status err; |
|
|
|
DPRINTFN(4, ("usbd_set_report_async: len=%d\n", len)); |
DPRINTFN(4, ("usbd_set_report_async: len=%d\n", len)); |
if (ifd == NULL) |
if (ifd == NULL) |
return (USBD_IOERROR); |
return (USBD_IOERROR); |
err = usbd_interface2device_handle(iface, &dev); |
usbd_interface2device_handle(iface, &dev); |
if (err) |
|
return (err); |
|
req.bmRequestType = UT_WRITE_CLASS_INTERFACE; |
req.bmRequestType = UT_WRITE_CLASS_INTERFACE; |
req.bRequest = UR_SET_REPORT; |
req.bRequest = UR_SET_REPORT; |
USETW2(req.wValue, type, id); |
USETW2(req.wValue, type, id); |
Line 296 usbd_get_report(usbd_interface_handle if |
|
Line 309 usbd_get_report(usbd_interface_handle if |
|
usb_interface_descriptor_t *ifd = usbd_get_interface_descriptor(iface); |
usb_interface_descriptor_t *ifd = usbd_get_interface_descriptor(iface); |
usbd_device_handle dev; |
usbd_device_handle dev; |
usb_device_request_t req; |
usb_device_request_t req; |
usbd_status err; |
|
|
|
DPRINTFN(4, ("usbd_get_report: len=%d\n", len)); |
DPRINTFN(4, ("usbd_get_report: len=%d\n", len)); |
if (ifd == NULL) |
if (ifd == NULL) |
return (USBD_IOERROR); |
return (USBD_IOERROR); |
err = usbd_interface2device_handle(iface, &dev); |
usbd_interface2device_handle(iface, &dev); |
if (err) |
|
return (err); |
|
req.bmRequestType = UT_READ_CLASS_INTERFACE; |
req.bmRequestType = UT_READ_CLASS_INTERFACE; |
req.bRequest = UR_GET_REPORT; |
req.bRequest = UR_GET_REPORT; |
USETW2(req.wValue, type, id); |
USETW2(req.wValue, type, id); |
Line 318 usbd_set_idle(usbd_interface_handle ifac |
|
Line 328 usbd_set_idle(usbd_interface_handle ifac |
|
usb_interface_descriptor_t *ifd = usbd_get_interface_descriptor(iface); |
usb_interface_descriptor_t *ifd = usbd_get_interface_descriptor(iface); |
usbd_device_handle dev; |
usbd_device_handle dev; |
usb_device_request_t req; |
usb_device_request_t req; |
usbd_status err; |
|
|
|
DPRINTFN(4, ("usbd_set_idle: %d %d\n", duration, id)); |
DPRINTFN(4, ("usbd_set_idle: %d %d\n", duration, id)); |
if (ifd == NULL) |
if (ifd == NULL) |
return (USBD_IOERROR); |
return (USBD_IOERROR); |
err = usbd_interface2device_handle(iface, &dev); |
usbd_interface2device_handle(iface, &dev); |
if (err) |
|
return (err); |
|
req.bmRequestType = UT_WRITE_CLASS_INTERFACE; |
req.bmRequestType = UT_WRITE_CLASS_INTERFACE; |
req.bRequest = UR_SET_IDLE; |
req.bRequest = UR_SET_IDLE; |
USETW2(req.wValue, duration, id); |
USETW2(req.wValue, duration, id); |
Line 335 usbd_set_idle(usbd_interface_handle ifac |
|
Line 342 usbd_set_idle(usbd_interface_handle ifac |
|
} |
} |
|
|
usbd_status |
usbd_status |
usbd_get_report_descriptor(usbd_device_handle dev, int ifcno, int repid, |
usbd_get_report_descriptor(usbd_device_handle dev, int ifcno, |
int size, void *d) |
int size, void *d) |
{ |
{ |
usb_device_request_t req; |
usb_device_request_t req; |
|
|
req.bmRequestType = UT_READ_INTERFACE; |
req.bmRequestType = UT_READ_INTERFACE; |
req.bRequest = UR_GET_DESCRIPTOR; |
req.bRequest = UR_GET_DESCRIPTOR; |
USETW2(req.wValue, UDESC_REPORT, repid); |
USETW2(req.wValue, UDESC_REPORT, 0); /* report id should be 0 */ |
USETW(req.wIndex, ifcno); |
USETW(req.wIndex, ifcno); |
USETW(req.wLength, size); |
USETW(req.wLength, size); |
return (usbd_do_request(dev, &req, d)); |
return (usbd_do_request(dev, &req, d)); |
Line 356 usbd_get_hid_descriptor(usbd_interface_h |
|
Line 363 usbd_get_hid_descriptor(usbd_interface_h |
|
usb_config_descriptor_t *cdesc; |
usb_config_descriptor_t *cdesc; |
usb_hid_descriptor_t *hd; |
usb_hid_descriptor_t *hd; |
char *p, *end; |
char *p, *end; |
usbd_status err; |
|
|
|
if (idesc == NULL) |
if (idesc == NULL) |
return (0); |
return (0); |
err = usbd_interface2device_handle(ifc, &dev); |
usbd_interface2device_handle(ifc, &dev); |
if (err) |
|
return (0); |
|
cdesc = usbd_get_config_descriptor(dev); |
cdesc = usbd_get_config_descriptor(dev); |
|
|
p = (char *)idesc + idesc->bLength; |
p = (char *)idesc + idesc->bLength; |
Line 379 usbd_get_hid_descriptor(usbd_interface_h |
|
Line 383 usbd_get_hid_descriptor(usbd_interface_h |
|
} |
} |
|
|
usbd_status |
usbd_status |
usbd_alloc_report_desc(usbd_interface_handle ifc, void **descp, int *sizep, |
usbd_read_report_desc(usbd_interface_handle ifc, void **descp, int *sizep, |
usb_malloc_type mem) |
usb_malloc_type mem) |
{ |
{ |
usb_interface_descriptor_t *id; |
usb_interface_descriptor_t *id; |
Line 387 usbd_alloc_report_desc(usbd_interface_ha |
|
Line 391 usbd_alloc_report_desc(usbd_interface_ha |
|
usbd_device_handle dev; |
usbd_device_handle dev; |
usbd_status err; |
usbd_status err; |
|
|
err = usbd_interface2device_handle(ifc, &dev); |
usbd_interface2device_handle(ifc, &dev); |
if (err) |
|
return (err); |
|
id = usbd_get_interface_descriptor(ifc); |
id = usbd_get_interface_descriptor(ifc); |
if (id == NULL) |
if (id == NULL) |
return (USBD_INVAL); |
return (USBD_INVAL); |
Line 400 usbd_alloc_report_desc(usbd_interface_ha |
|
Line 402 usbd_alloc_report_desc(usbd_interface_ha |
|
*descp = malloc(*sizep, mem, M_NOWAIT); |
*descp = malloc(*sizep, mem, M_NOWAIT); |
if (*descp == NULL) |
if (*descp == NULL) |
return (USBD_NOMEM); |
return (USBD_NOMEM); |
/* XXX should not use 0 Report ID */ |
err = usbd_get_report_descriptor(dev, id->bInterfaceNumber, |
err = usbd_get_report_descriptor(dev, id->bInterfaceNumber, 0, |
*sizep, *descp); |
*sizep, *descp); |
|
if (err) { |
if (err) { |
free(*descp, mem); |
free(*descp, mem); |
*descp = NULL; |
*descp = NULL; |
Line 482 usb_detach_wakeup(device_ptr_t dv) |
|
Line 483 usb_detach_wakeup(device_ptr_t dv) |
|
DPRINTF(("usb_detach_wakeup: for %s\n", USBDEVPTRNAME(dv))); |
DPRINTF(("usb_detach_wakeup: for %s\n", USBDEVPTRNAME(dv))); |
wakeup(dv); |
wakeup(dv); |
} |
} |
|
|
|
usb_descriptor_t * |
|
usb_find_desc(usbd_device_handle dev, int type) |
|
{ |
|
usb_descriptor_t *desc; |
|
usb_config_descriptor_t *cd = usbd_get_config_descriptor(dev); |
|
uByte *p = (uByte *)cd; |
|
uByte *end = p + UGETW(cd->wTotalLength); |
|
|
|
while (p < end) { |
|
desc = (usb_descriptor_t *)p; |
|
if (desc->bDescriptorType == type) |
|
return (desc); |
|
p += desc->bLength; |
|
} |
|
|
|
return (NULL); |
|
} |