usb: use linux/usb/ch9.h instead of usbdescriptors.h
Linux usb/ch9.h seems to have all the same information (and more) as usbdescriptors.h so use the former instead of the later one. As a consequense of this change USB_SPEED_* values don't correspond directly to EHCI speed encoding anymore, I've added necessary recoding in EHCI driver. Also there is no point to put speed into pipe anymore so it's removed and a bunch of host drivers fixed to look at usb_device->speed instead. Old usbdescriptors.h included is not removed as it seems to be used by old USB device code. This makes usb.h and usbdevice.h incompatible. Fortunately the only place that tries to include both are the old MUSB code and it needs usb.h only for USB_DMA_MINALIGN used in aligned attribute on musb_regs structure but this attribute seems to be unneeded (old MUSB code doesn't support any DMA at all). Signed-off-by: Ilya Yanok <ilya.yanok@cogentembedded.com>
This commit is contained in:
@@ -210,6 +210,18 @@ static int ehci_td_buffer(struct qTD *td, void *buf, size_t sz)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline u8 ehci_encode_speed(enum usb_device_speed speed)
|
||||
{
|
||||
#define QH_HIGH_SPEED 2
|
||||
#define QH_FULL_SPEED 0
|
||||
#define QH_LOW_SPEED 1
|
||||
if (speed == USB_SPEED_HIGH)
|
||||
return QH_HIGH_SPEED;
|
||||
if (speed == USB_SPEED_LOW)
|
||||
return QH_LOW_SPEED;
|
||||
return QH_FULL_SPEED;
|
||||
}
|
||||
|
||||
static int
|
||||
ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
|
||||
int length, struct devrequest *req)
|
||||
@@ -318,12 +330,12 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
|
||||
* - qh_overlay.qt_altnext
|
||||
*/
|
||||
qh->qh_link = cpu_to_hc32((uint32_t)&ctrl->qh_list | QH_LINK_TYPE_QH);
|
||||
c = usb_pipespeed(pipe) != USB_SPEED_HIGH && !usb_pipeendpoint(pipe);
|
||||
c = (dev->speed != USB_SPEED_HIGH) && !usb_pipeendpoint(pipe);
|
||||
maxpacket = usb_maxpacket(dev, pipe);
|
||||
endpt = QH_ENDPT1_RL(8) | QH_ENDPT1_C(c) |
|
||||
QH_ENDPT1_MAXPKTLEN(maxpacket) | QH_ENDPT1_H(0) |
|
||||
QH_ENDPT1_DTC(QH_ENDPT1_DTC_DT_FROM_QTD) |
|
||||
QH_ENDPT1_EPS(usb_pipespeed(pipe)) |
|
||||
QH_ENDPT1_EPS(ehci_encode_speed(dev->speed)) |
|
||||
QH_ENDPT1_ENDPT(usb_pipeendpoint(pipe)) | QH_ENDPT1_I(0) |
|
||||
QH_ENDPT1_DEVADDR(usb_pipedevice(pipe));
|
||||
qh->qh_endpt1 = cpu_to_hc32(endpt);
|
||||
|
||||
@@ -617,7 +617,7 @@ static int isp116x_submit_job(struct usb_device *dev, unsigned long pipe,
|
||||
int epnum = usb_pipeendpoint(pipe);
|
||||
int max = usb_maxpacket(dev, pipe);
|
||||
int dir_out = usb_pipeout(pipe);
|
||||
int speed_low = usb_pipeslow(pipe);
|
||||
int speed_low = (dev->speed == USB_SPEED_LOW);
|
||||
int i, done = 0, stat, timeout, cc;
|
||||
|
||||
/* 500 frames or 0.5s timeout when function is busy and NAKs transactions for a while */
|
||||
|
||||
@@ -803,7 +803,7 @@ static ed_t *ep_add_ed(struct usb_device *usb_dev, unsigned long pipe,
|
||||
| (usb_pipeisoc(pipe)? 0x8000: 0)
|
||||
| (usb_pipecontrol(pipe)? 0: \
|
||||
(usb_pipeout(pipe)? 0x800: 0x1000))
|
||||
| usb_pipeslow(pipe) << 13
|
||||
| (usb_dev->speed == USB_SPEED_LOW) << 13
|
||||
| usb_maxpacket(usb_dev, pipe) << 16);
|
||||
|
||||
if (ed->type == PIPE_INTERRUPT && ed->state == ED_UNLINK) {
|
||||
|
||||
@@ -620,7 +620,7 @@ static struct ed *ep_add_ed(struct usb_device *usb_dev, unsigned long pipe)
|
||||
| (usb_pipeisoc(pipe) ? 0x8000 : 0)
|
||||
| (usb_pipecontrol(pipe) ? 0 :
|
||||
(usb_pipeout(pipe) ? 0x800 : 0x1000))
|
||||
| usb_pipeslow(pipe) << 13 |
|
||||
| (usb_dev->speed == USB_SPEED_LOW) << 13 |
|
||||
usb_maxpacket(usb_dev, pipe) << 16);
|
||||
|
||||
return ed_ret;
|
||||
|
||||
@@ -234,7 +234,7 @@ static int sl811_send_packet(struct usb_device *dev, unsigned long pipe, __u8 *b
|
||||
__u16 status = 0;
|
||||
int err = 0, time_start = get_timer(0);
|
||||
int need_preamble = !(rh_status.wPortStatus & USB_PORT_STAT_LOW_SPEED) &&
|
||||
usb_pipeslow(pipe);
|
||||
(dev->speed == USB_SPEED_LOW);
|
||||
|
||||
if (len > 239)
|
||||
return -1;
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
#ifndef __MUSB_HDRC_DEFS_H__
|
||||
#define __MUSB_HDRC_DEFS_H__
|
||||
|
||||
#include <usb.h>
|
||||
#include <usb_defs.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
@@ -145,7 +144,7 @@ struct musb_regs {
|
||||
struct musb_epN_regs epN;
|
||||
} ep[16];
|
||||
|
||||
} __attribute__((packed, aligned(USB_DMA_MINALIGN)));
|
||||
} __attribute__((packed));
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <usb.h>
|
||||
#include "musb_hcd.h"
|
||||
|
||||
/* MSC control transfers */
|
||||
@@ -485,8 +486,8 @@ static int ctrlreq_in_status_phase(struct usb_device *dev)
|
||||
*/
|
||||
static u8 get_dev_speed(struct usb_device *dev)
|
||||
{
|
||||
return (dev->speed & USB_SPEED_HIGH) ? MUSB_TYPE_SPEED_HIGH :
|
||||
((dev->speed & USB_SPEED_LOW) ? MUSB_TYPE_SPEED_LOW :
|
||||
return (dev->speed == USB_SPEED_HIGH) ? MUSB_TYPE_SPEED_HIGH :
|
||||
((dev->speed == USB_SPEED_LOW) ? MUSB_TYPE_SPEED_LOW :
|
||||
MUSB_TYPE_SPEED_FULL);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user