59#define ALIGN(n,align) (((n)+((align)-1)) & ~((align)-1))
61#define usb_dma_alloc(n) (KMALLOC(ALIGN((n),CACHE_ALIGN),CACHE_ALIGN))
124 printf(
"Trying to create a pipe that was already created!\n");
130 if (!pipe)
return -1;
193 if (res < 0)
return res;
441 printf(
"usb_cancel_request is not implemented.\n");
459 REQTRACE(printf(
"Free %p (%s,%s)\n",ur,eptname(ur),devname(ur)));
462 printf(
"Yow! Tried to free a request that was in progress!\n");
506 REQTRACE(printf(
"Queue %p (%s,%s)\n",ur,eptname(ur),devname(ur)));
811 memcpy(databuf,buffer,
length);
841 if (databuf)
KFREE(databuf);
851 memcpy(buffer,databuf,
length);
866 if (databuf)
KFREE(databuf);
871 if (databuf)
KFREE(databuf);
922static int usb_get_string_descriptor(
usbdev_t *dev,
int dscidx,
963 amtcopy = usb_get_string_descriptor(dev,
id,respbuf,2);
971 amtcopy = usb_get_string_descriptor(dev,
id,respbuf,maxlen);
975 if (amtcopy <= 0)
return amtcopy;
977 for (idx = 0; idx < amtcopy; idx+=2) {
1028 memcpy(dscr,respbuf,amtcopy);
1058 memcpy(dscr,respbuf,maxlen);
1107 REQTRACE(printf(
"Complete %p (%s,%s) Status=%d\n",ur,eptname(ur),devname(ur),
status));
1153 printf(
"Error! Root device is not a hub!\n");
1181 printf(
"[a]usb_get_config_descriptor returns %d\n",res);
1189 printf(
"[b]usb_get_config_descriptor returns %d\n",res);
1248 while (
ptr < endptr) {
1253 if (idx == 0)
return (
void *)
ptr;
#define KMALLOC(size, align)
uint8_t bConfigurationValue
int(* udrv_attach)(usbdev_t *, usb_driver_t *)
usbdev_t * ub_devices[USB_MAX_DEVICES]
usbpipe_t * ud_pipes[UD_MAX_PIPES]
usb_config_descr_t * ud_cfgdescr
usb_device_descr_t ud_devdescr
struct usbdev_s * ud_parent
usb_ept_t * up_hwendpoint
int(* ur_callback)(struct usbreq_s *req)
#define GETUSBFIELD(s, f)
#define USB_ENDPOINT_TYPE_INTERRUPT
#define PUTUSBFIELD(s, f, v)
#define USB_DESCRIPTOR_TYPEINDEX(d, i)
#define USB_REQUEST_GET_DESCRIPTOR
#define USB_CONFIGURATION_DESCRIPTOR_TYPE
#define USB_ENDPOINT_DIR_IN(addr)
#define USB_ENDPOINT_ADDRESS(addr)
struct usb_device_descr_s usb_device_descr_t
#define USB_ENDPOINT_TYPE_CONTROL
#define USB_DEVICE_DESCRIPTOR_TYPE
#define USB_CONTROL_ENDPOINT_MIN_SIZE
#define USB_REQUEST_SET_CONFIGURATION
#define USB_STRING_DESCRIPTOR_TYPE
#define USB_ENDPOINT_TYPE_ISOCHRONOUS
#define USB_DEVICE_CLASS_HUB
#define USB_REQUEST_CLEAR_FEATURE
#define USB_REQUEST_SET_ADDRESS
#define USB_ENDPOINT_TYPE_MASK
#define USB_ENDPOINT_TYPE_BULK
void * usb_find_cfg_descr(usbdev_t *dev, int dtype, int idx)
int usb_simple_request(usbdev_t *dev, uint8_t reqtype, int bRequest, int wValue, int wIndex)
int usb_std_request(usbdev_t *dev, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint8_t *buffer, int length)
int usb_new_address(usbbus_t *bus)
void usb_destroy_pipe(usbdev_t *dev, int epaddr)
void usb_complete_request(usbreq_t *ur, int status)
int usb_create_pipe(usbdev_t *dev, int epaddr, int mps, int flags)
int usb_wait_request(usbreq_t *ur)
int usb_sync_request(usbreq_t *ur)
usb_driver_t usbroothub_driver
int usb_get_descriptor(usbdev_t *dev, uint8_t reqtype, int dsctype, int dscidx, uint8_t *respbuf, int buflen)
usbreq_t * usb_make_request(usbdev_t *dev, int epaddr, uint8_t *buf, int length, int flags)
void usb_free_request(usbreq_t *ur)
int usb_get_device_status(usbdev_t *dev, usb_device_status_t *status)
void usb_daemon(usbbus_t *bus)
void usb_poll(usbbus_t *bus)
int usb_clear_stall(usbdev_t *dev, int epaddr)
usbdev_t * usb_create_device(usbbus_t *bus, int lowspeed)
int usb_queue_request(usbreq_t *ur)
int usb_set_address(usbdev_t *dev, int address)
int usb_get_config_descriptor(usbdev_t *dev, usb_config_descr_t *dscr, int idx, int maxlen)
int usb_get_string(usbdev_t *dev, int id, char *buf, int maxlen)
void usb_initroot(usbbus_t *bus)
int usb_cancel_request(usbreq_t *ur)
int usb_get_device_descriptor(usbdev_t *dev, usb_device_descr_t *dscr, int smallflg)
void usb_delay_ms(usbbus_t *bus, int ms)
void usb_destroy_all_pipes(usbdev_t *dev)
int usb_set_configuration(usbdev_t *dev, int config)
int usb_set_ep0mps(usbdev_t *dev, int mps)
int usb_make_sync_request(usbdev_t *dev, int epaddr, uint8_t *buf, int length, int flags)
int usb_open_pipe(usbdev_t *dev, usb_endpoint_descr_t *epdesc)
void usb_destroy_device(usbdev_t *dev)
#define UBEPTDELETE(bus, ept)
#define UBEPTSETMPS(bus, ept, mps)
#define UR_FLAG_STATUS_IN
#define USB_EPADDR_TO_IDX(addr)
#define UBEPTSETADDR(bus, ept, addr)
usb_driver_t * usb_find_driver(usbdev_t *dev)
#define UR_FLAG_STATUS_OUT
#define UBXFER(bus, ept, xfer)
#define UBEPTCREATE(bus, addr, num, mps, flags)
void usb_scan(usbbus_t *bus)
#define UBEPTCLEARTOGGLE(bus, ept)