29#ifdef USB_GLOBAL_INCLUDE_FILE
30#include USB_GLOBAL_INCLUDE_FILE
32#include <sys/stdint.h>
33#include <sys/stddef.h>
38#include <sys/kernel.h>
40#include <sys/module.h>
43#include <sys/condvar.h>
44#include <sys/sysctl.h>
46#include <sys/unistd.h>
47#include <sys/callout.h>
48#include <sys/malloc.h>
56#define USB_DEBUG_VAR usb_debug
175 DPRINTF(
"set config %d failed\n", conf_no);
180 DPRINTF(
"probe and attach failed\n");
219 void **ppdata, uint16_t *
plen,
231 iface_index =
req.wIndex[0];
249 if ((iface == NULL) ||
250 (iface->
idesc == NULL)) {
262 (iface->
subdev != NULL) &&
263 device_is_attached(iface->
subdev)) {
273 if ((iface_parent == NULL) ||
274 (iface_parent->
idesc == NULL)) {
282 (iface_parent != NULL) &&
283 (iface_parent->
subdev != NULL) &&
286 device_is_attached(iface_parent->
subdev)) {
288 &
req, ppdata,
plen, off, &temp_state);
292 *ppdata = ((uint8_t *)(*ppdata)) - off;
300 }
else if (
error == ENOTTY) {
311 switch (
req.bmRequestType) {
313 switch (
req.bRequest) {
323 iface,
req.wValue[0]);
325 DPRINTF(
"alt setting does not exist %s\n",
331 DPRINTF(
"alt setting failed %s\n",
345 switch (
req.bRequest) {
471 const void *src_zcopy;
472 const void *src_mcopy;
478 uint8_t is_complete = 1;
543 DPRINTF(
"req 0x%02x 0x%02x 0x%04x 0x%04x "
544 "off=0x%x rem=0x%x, state=%d\n",
req.bmRequestType,
549 switch (
req.bmRequestType) {
554 switch (
req.bRequest) {
556 goto tr_handle_get_descriptor;
558 goto tr_handle_get_config;
560 goto tr_handle_get_status;
567 switch (
req.bRequest) {
569 goto tr_handle_set_address;
571 goto tr_handle_set_config;
575 goto tr_handle_clear_wakeup;
583 goto tr_handle_set_wakeup;
594 switch (
req.bRequest) {
598 goto tr_handle_clear_halt;
606 goto tr_handle_set_halt;
617 switch (
req.bRequest) {
619 goto tr_handle_get_ep_status;
647 goto tr_handle_get_descriptor;
651tr_handle_get_descriptor:
655 if (src_zcopy == NULL)
661 src_mcopy = temp.buf;
678 USETW(temp.wStatus, wValue);
679 src_mcopy = temp.wStatus;
680 max_len =
sizeof(temp.wStatus);
683tr_handle_set_address:
685 if (wValue >= 0x80) {
693 udev->
address = (wValue & 0x7F);
714tr_handle_clear_wakeup:
738tr_handle_get_ep_status:
743 src_mcopy = temp.wStatus;
744 max_len =
sizeof(temp.wStatus);
772 if ((rem != max_len) && (is_complete != 0)) {
784 xfer->
nframes = max_len ? 2 : 1;
806 "complete" :
"stalled");
struct usb_config_descriptor * cdesc
struct usb_device_flags flags
uint8_t parent_iface_index
struct usb_interface_descriptor * idesc
usb_frlength_t max_data_length
struct usb_page_cache * frbuffers
struct usb_xfer_flags_int flags_int
struct usb_xfer_flags flags
struct usb_xfer_root * xroot
#define UT_WRITE_INTERFACE
#define UF_DEVICE_REMOTE_WAKEUP
#define USB_UNCONFIG_INDEX
#define UDS_REMOTE_WAKEUP
#define USB_IFACE_INDEX_ANY
#define UT_WRITE_ENDPOINT
#define UT_READ_INTERFACE
#define UR_GET_DESCRIPTOR
void usbd_copy_in(struct usb_page_cache *cache, usb_frlength_t offset, const void *ptr, usb_frlength_t len)
void usbd_copy_out(struct usb_page_cache *cache, usb_frlength_t offset, void *ptr, usb_frlength_t len)
#define USB_XFER_LOCK(_x)
#define USB_ADD_BYTES(ptr, size)
#define USB_BUS_UNLOCK(_b)
#define USB_XFER_UNLOCK(_x)
usb_error_t usbd_set_endpoint_stall(struct usb_device *udev, struct usb_endpoint *ep, uint8_t do_stall)
uint8_t usbd_enum_lock(struct usb_device *udev)
usb_error_t usb_probe_and_attach(struct usb_device *udev, uint8_t iface_index)
usb_error_t usb_reset_iface_endpoints(struct usb_device *udev, uint8_t iface_index)
usb_error_t usbd_set_config_index(struct usb_device *udev, uint8_t index)
void usbd_enum_unlock(struct usb_device *udev)
struct usb_endpoint * usbd_get_ep_by_addr(struct usb_device *udev, uint8_t ea_val)
struct usb_interface * usbd_get_iface(struct usb_device *udev, uint8_t iface_index)
usb_handle_req_t * usb_temp_get_desc_p
const char * usbd_errstr(usb_error_t err)
static usb_error_t usb_handle_remote_wakeup(struct usb_xfer *, uint8_t)
static uint8_t usb_handle_get_stall(struct usb_device *, uint8_t)
static usb_error_t usb_handle_set_config(struct usb_xfer *, uint8_t)
static usb_error_t usb_handle_set_stall(struct usb_xfer *, uint8_t, uint8_t)
static usb_error_t usb_handle_iface_request(struct usb_xfer *, void **, uint16_t *, struct usb_device_request, uint16_t, uint8_t)
static usb_error_t usb_check_alt_setting(struct usb_device *udev, struct usb_interface *iface, uint8_t alt_index)
static usb_error_t usb_handle_request(struct usb_xfer *)
void usb_handle_request_callback(struct usb_xfer *xfer, usb_error_t error)
void usb_needs_explore(struct usb_bus *bus, uint8_t do_probe)
void usb_bus_power_update(struct usb_bus *bus)
uint8_t usbd_get_no_alts(struct usb_config_descriptor *cd, struct usb_interface_descriptor *id)
void usbd_transfer_submit(struct usb_xfer *xfer)
void usbd_xfer_set_frame_data(struct usb_xfer *xfer, usb_frcount_t frindex, void *ptr, usb_frlength_t len)
void usbd_xfer_set_frame_len(struct usb_xfer *xfer, usb_frcount_t frindex, usb_frlength_t len)
void usbd_xfer_set_frame_offset(struct usb_xfer *xfer, usb_frlength_t offset, usb_frcount_t frindex)
void usbd_xfer_set_stall(struct usb_xfer *xfer)
usb_frlength_t usbd_xfer_max_len(struct usb_xfer *xfer)
#define USB_HR_COMPLETE_OK
#define USB_HR_NOT_COMPLETE
#define USB_ST_TRANSFERRED
#define USB_HR_COMPLETE_ERR
#define USB_GET_STATE(xfer)