uboot/drivers/usb/musb-new/usb-compat.h
<<
>>
Prefs
   1#ifndef __USB_COMPAT_H__
   2#define __USB_COMPAT_H__
   3
   4#include "usb.h"
   5
   6struct usb_hcd {
   7        void *hcd_priv;
   8};
   9
  10struct usb_host_endpoint {
  11        struct usb_endpoint_descriptor          desc;
  12        struct list_head urb_list;
  13        void *hcpriv;
  14};
  15
  16/*
  17 * urb->transfer_flags:
  18 *
  19 * Note: URB_DIR_IN/OUT is automatically set in usb_submit_urb().
  20 */
  21#define URB_SHORT_NOT_OK        0x0001  /* report short reads as errors */
  22#define URB_ZERO_PACKET         0x0040  /* Finish bulk OUT with short packet */
  23
  24struct urb;
  25
  26typedef void (*usb_complete_t)(struct urb *);
  27
  28struct urb {
  29        void *hcpriv;                   /* private data for host controller */
  30        struct list_head urb_list;      /* list head for use by the urb's
  31                                         * current owner */
  32        struct usb_device *dev;         /* (in) pointer to associated device */
  33        struct usb_host_endpoint *ep;   /* (internal) pointer to endpoint */
  34        unsigned int pipe;              /* (in) pipe information */
  35        int status;                     /* (return) non-ISO status */
  36        unsigned int transfer_flags;    /* (in) URB_SHORT_NOT_OK | ...*/
  37        void *transfer_buffer;          /* (in) associated data buffer */
  38        dma_addr_t transfer_dma;        /* (in) dma addr for transfer_buffer */
  39        u32 transfer_buffer_length;     /* (in) data buffer length */
  40        u32 actual_length;              /* (return) actual transfer length */
  41        unsigned char *setup_packet;    /* (in) setup packet (control only) */
  42        int start_frame;                /* (modify) start frame (ISO) */
  43        usb_complete_t complete;        /* (in) completion routine */
  44};
  45
  46#define usb_hcd_link_urb_to_ep(hcd, urb)        ({              \
  47        int ret = 0;                                            \
  48        list_add_tail(&urb->urb_list, &urb->ep->urb_list);      \
  49        ret; })
  50#define usb_hcd_unlink_urb_from_ep(hcd, urb)    list_del_init(&urb->urb_list)
  51#define usb_hcd_check_unlink_urb(hdc, urb, status)      0
  52
  53static inline void usb_hcd_giveback_urb(struct usb_hcd *hcd,
  54                                        struct urb *urb,
  55                                        int status)
  56{
  57        urb->status = status;
  58        if (urb->complete)
  59                urb->complete(urb);
  60}
  61
  62static inline int usb_hcd_unmap_urb_for_dma(struct usb_hcd *hcd,
  63                                        struct urb *urb)
  64{
  65        /* TODO: add cache invalidation here */
  66        return 0;
  67}
  68
  69static inline u16 find_tt(struct usb_device *dev)
  70{
  71        u8 chid;
  72        u8 hub;
  73
  74        /* Find out the nearest parent which is high speed */
  75        while (dev->parent->parent != NULL)
  76                if (dev->parent->speed != USB_SPEED_HIGH)
  77                        dev = dev->parent;
  78                else
  79                        break;
  80
  81        /* determine the port address at that hub */
  82        hub = dev->parent->devnum;
  83        for (chid = 0; chid < USB_MAXCHILDREN; chid++)
  84                if (dev->parent->children[chid] == dev)
  85                        break;
  86
  87        return (hub << 8) | chid;
  88}
  89#endif /* __USB_COMPAT_H__ */
  90