mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 23:51:33 +00:00
usb: common: Weed out USB_**_PRINTFs from usb framework
USB_PRINTF, USB_HUB_PRINTF, USB_STOR_PRINTF, USB_KBD_PRINTF are nothing but conditional debug prints, depending on DEBUG. So better remove them and use debug() simply. Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com>
This commit is contained in:
parent
7d9aa8fd87
commit
ceb4972a8f
4 changed files with 241 additions and 283 deletions
85
common/usb.c
85
common/usb.c
|
@ -57,17 +57,6 @@
|
|||
#include <asm/4xx_pci.h>
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
#define USB_DEBUG 1
|
||||
#define USB_HUB_DEBUG 1
|
||||
#else
|
||||
#define USB_DEBUG 0
|
||||
#define USB_HUB_DEBUG 0
|
||||
#endif
|
||||
|
||||
#define USB_PRINTF(fmt, args...) debug_cond(USB_DEBUG, fmt, ##args)
|
||||
#define USB_HUB_PRINTF(fmt, args...) debug_cond(USB_HUB_DEBUG, fmt, ##args)
|
||||
|
||||
#define USB_BUFSIZ 512
|
||||
|
||||
static struct usb_device usb_dev[USB_MAX_DEVICE];
|
||||
|
@ -130,7 +119,7 @@ int usb_init(void)
|
|||
usb_started = 1;
|
||||
}
|
||||
|
||||
USB_PRINTF("scan end\n");
|
||||
debug("scan end\n");
|
||||
/* if we were not able to find at least one working bus, bail out */
|
||||
if (!usb_started) {
|
||||
puts("USB error: all controllers failed lowlevel init\n");
|
||||
|
@ -216,9 +205,9 @@ int usb_control_msg(struct usb_device *dev, unsigned int pipe,
|
|||
setup_packet->value = cpu_to_le16(value);
|
||||
setup_packet->index = cpu_to_le16(index);
|
||||
setup_packet->length = cpu_to_le16(size);
|
||||
USB_PRINTF("usb_control_msg: request: 0x%X, requesttype: 0x%X, " \
|
||||
"value 0x%X index 0x%X length 0x%X\n",
|
||||
request, requesttype, value, index, size);
|
||||
debug("usb_control_msg: request: 0x%X, requesttype: 0x%X, " \
|
||||
"value 0x%X index 0x%X length 0x%X\n",
|
||||
request, requesttype, value, index, size);
|
||||
dev->status = USB_ST_NOT_PROC; /*not yet processed */
|
||||
|
||||
if (submit_control_msg(dev, pipe, data, size, setup_packet) < 0)
|
||||
|
@ -314,22 +303,22 @@ usb_set_maxpacket_ep(struct usb_device *dev, int if_idx, int ep_idx)
|
|||
/* Control => bidirectional */
|
||||
dev->epmaxpacketout[b] = ep_wMaxPacketSize;
|
||||
dev->epmaxpacketin[b] = ep_wMaxPacketSize;
|
||||
USB_PRINTF("##Control EP epmaxpacketout/in[%d] = %d\n",
|
||||
b, dev->epmaxpacketin[b]);
|
||||
debug("##Control EP epmaxpacketout/in[%d] = %d\n",
|
||||
b, dev->epmaxpacketin[b]);
|
||||
} else {
|
||||
if ((ep->bEndpointAddress & 0x80) == 0) {
|
||||
/* OUT Endpoint */
|
||||
if (ep_wMaxPacketSize > dev->epmaxpacketout[b]) {
|
||||
dev->epmaxpacketout[b] = ep_wMaxPacketSize;
|
||||
USB_PRINTF("##EP epmaxpacketout[%d] = %d\n",
|
||||
b, dev->epmaxpacketout[b]);
|
||||
debug("##EP epmaxpacketout[%d] = %d\n",
|
||||
b, dev->epmaxpacketout[b]);
|
||||
}
|
||||
} else {
|
||||
/* IN Endpoint */
|
||||
if (ep_wMaxPacketSize > dev->epmaxpacketin[b]) {
|
||||
dev->epmaxpacketin[b] = ep_wMaxPacketSize;
|
||||
USB_PRINTF("##EP epmaxpacketin[%d] = %d\n",
|
||||
b, dev->epmaxpacketin[b]);
|
||||
debug("##EP epmaxpacketin[%d] = %d\n",
|
||||
b, dev->epmaxpacketin[b]);
|
||||
}
|
||||
} /* if out */
|
||||
} /* if control */
|
||||
|
@ -358,7 +347,6 @@ static int usb_parse_config(struct usb_device *dev,
|
|||
{
|
||||
struct usb_descriptor_header *head;
|
||||
int index, ifno, epno, curr_if_num;
|
||||
int i;
|
||||
u16 ep_wMaxPacketSize;
|
||||
|
||||
ifno = -1;
|
||||
|
@ -414,23 +402,25 @@ static int usb_parse_config(struct usb_device *dev,
|
|||
if_desc[ifno].\
|
||||
ep_desc[epno].\
|
||||
wMaxPacketSize);
|
||||
USB_PRINTF("if %d, ep %d\n", ifno, epno);
|
||||
debug("if %d, ep %d\n", ifno, epno);
|
||||
break;
|
||||
default:
|
||||
if (head->bLength == 0)
|
||||
return 1;
|
||||
|
||||
USB_PRINTF("unknown Description Type : %x\n",
|
||||
head->bDescriptorType);
|
||||
debug("unknown Description Type : %x\n",
|
||||
head->bDescriptorType);
|
||||
|
||||
#ifdef DEBUG
|
||||
{
|
||||
#ifdef USB_DEBUG
|
||||
unsigned char *ch = (unsigned char *)head;
|
||||
#endif
|
||||
int i;
|
||||
|
||||
for (i = 0; i < head->bLength; i++)
|
||||
USB_PRINTF("%02X ", *ch++);
|
||||
USB_PRINTF("\n\n\n");
|
||||
debug("%02X ", *ch++);
|
||||
debug("\n\n\n");
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
index += head->bLength;
|
||||
|
@ -514,8 +504,7 @@ int usb_get_configuration_no(struct usb_device *dev,
|
|||
}
|
||||
|
||||
result = usb_get_descriptor(dev, USB_DT_CONFIG, cfgno, buffer, tmp);
|
||||
USB_PRINTF("get_conf_no %d Result %d, wLength %d\n",
|
||||
cfgno, result, tmp);
|
||||
debug("get_conf_no %d Result %d, wLength %d\n", cfgno, result, tmp);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -527,7 +516,7 @@ static int usb_set_address(struct usb_device *dev)
|
|||
{
|
||||
int res;
|
||||
|
||||
USB_PRINTF("set address %d\n", dev->devnum);
|
||||
debug("set address %d\n", dev->devnum);
|
||||
res = usb_control_msg(dev, usb_snddefctrl(dev),
|
||||
USB_REQ_SET_ADDRESS, 0,
|
||||
(dev->devnum), 0,
|
||||
|
@ -579,7 +568,7 @@ int usb_set_interface(struct usb_device *dev, int interface, int alternate)
|
|||
static int usb_set_configuration(struct usb_device *dev, int configuration)
|
||||
{
|
||||
int res;
|
||||
USB_PRINTF("set configuration %d\n", configuration);
|
||||
debug("set configuration %d\n", configuration);
|
||||
/* set setup command */
|
||||
res = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
|
||||
USB_REQ_SET_CONFIGURATION, 0,
|
||||
|
@ -731,19 +720,19 @@ int usb_string(struct usb_device *dev, int index, char *buf, size_t size)
|
|||
if (!dev->have_langid) {
|
||||
err = usb_string_sub(dev, 0, 0, tbuf);
|
||||
if (err < 0) {
|
||||
USB_PRINTF("error getting string descriptor 0 " \
|
||||
"(error=%lx)\n", dev->status);
|
||||
debug("error getting string descriptor 0 " \
|
||||
"(error=%lx)\n", dev->status);
|
||||
return -1;
|
||||
} else if (tbuf[0] < 4) {
|
||||
USB_PRINTF("string descriptor 0 too short\n");
|
||||
debug("string descriptor 0 too short\n");
|
||||
return -1;
|
||||
} else {
|
||||
dev->have_langid = -1;
|
||||
dev->string_langid = tbuf[2] | (tbuf[3] << 8);
|
||||
/* always use the first langid listed */
|
||||
USB_PRINTF("USB device number %d default " \
|
||||
"language ID 0x%x\n",
|
||||
dev->devnum, dev->string_langid);
|
||||
debug("USB device number %d default " \
|
||||
"language ID 0x%x\n",
|
||||
dev->devnum, dev->string_langid);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -789,7 +778,7 @@ struct usb_device *usb_get_dev_index(int index)
|
|||
struct usb_device *usb_alloc_new_device(void *controller)
|
||||
{
|
||||
int i;
|
||||
USB_PRINTF("New Device %d\n", dev_index);
|
||||
debug("New Device %d\n", dev_index);
|
||||
if (dev_index == USB_MAX_DEVICE) {
|
||||
printf("ERROR, too many USB Devices, max=%d\n", USB_MAX_DEVICE);
|
||||
return NULL;
|
||||
|
@ -813,7 +802,7 @@ struct usb_device *usb_alloc_new_device(void *controller)
|
|||
void usb_free_device(void)
|
||||
{
|
||||
dev_index--;
|
||||
USB_PRINTF("Freeing device node: %d\n", dev_index);
|
||||
debug("Freeing device node: %d\n", dev_index);
|
||||
memset(&usb_dev[dev_index], 0, sizeof(struct usb_device));
|
||||
usb_dev[dev_index].devnum = -1;
|
||||
}
|
||||
|
@ -880,7 +869,7 @@ int usb_new_device(struct usb_device *dev)
|
|||
|
||||
err = usb_get_descriptor(dev, USB_DT_DEVICE, 0, desc, 64);
|
||||
if (err < 0) {
|
||||
USB_PRINTF("usb_new_device: usb_get_descriptor() failed\n");
|
||||
debug("usb_new_device: usb_get_descriptor() failed\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -973,9 +962,9 @@ int usb_new_device(struct usb_device *dev)
|
|||
"len %d, status %lX\n", dev->act_len, dev->status);
|
||||
return -1;
|
||||
}
|
||||
USB_PRINTF("new device strings: Mfr=%d, Product=%d, SerialNumber=%d\n",
|
||||
dev->descriptor.iManufacturer, dev->descriptor.iProduct,
|
||||
dev->descriptor.iSerialNumber);
|
||||
debug("new device strings: Mfr=%d, Product=%d, SerialNumber=%d\n",
|
||||
dev->descriptor.iManufacturer, dev->descriptor.iProduct,
|
||||
dev->descriptor.iSerialNumber);
|
||||
memset(dev->mf, 0, sizeof(dev->mf));
|
||||
memset(dev->prod, 0, sizeof(dev->prod));
|
||||
memset(dev->serial, 0, sizeof(dev->serial));
|
||||
|
@ -988,9 +977,9 @@ int usb_new_device(struct usb_device *dev)
|
|||
if (dev->descriptor.iSerialNumber)
|
||||
usb_string(dev, dev->descriptor.iSerialNumber,
|
||||
dev->serial, sizeof(dev->serial));
|
||||
USB_PRINTF("Manufacturer %s\n", dev->mf);
|
||||
USB_PRINTF("Product %s\n", dev->prod);
|
||||
USB_PRINTF("SerialNumber %s\n", dev->serial);
|
||||
debug("Manufacturer %s\n", dev->mf);
|
||||
debug("Product %s\n", dev->prod);
|
||||
debug("SerialNumber %s\n", dev->serial);
|
||||
/* now prode if the device is a hub */
|
||||
usb_hub_probe(dev, 0);
|
||||
return 0;
|
||||
|
|
162
common/usb_hub.c
162
common/usb_hub.c
|
@ -53,17 +53,6 @@
|
|||
#include <asm/4xx_pci.h>
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
#define USB_DEBUG 1
|
||||
#define USB_HUB_DEBUG 1
|
||||
#else
|
||||
#define USB_DEBUG 0
|
||||
#define USB_HUB_DEBUG 0
|
||||
#endif
|
||||
|
||||
#define USB_PRINTF(fmt, args...) debug_cond(USB_DEBUG, fmt, ##args)
|
||||
#define USB_HUB_PRINTF(fmt, args...) debug_cond(USB_HUB_DEBUG, fmt, ##args)
|
||||
|
||||
#define USB_BUFSIZ 512
|
||||
|
||||
static struct usb_hub_device hub_dev[USB_MAX_HUB];
|
||||
|
@ -114,10 +103,10 @@ static void usb_hub_power_on(struct usb_hub_device *hub)
|
|||
|
||||
dev = hub->pusb_dev;
|
||||
/* Enable power to the ports */
|
||||
USB_HUB_PRINTF("enabling power on all ports\n");
|
||||
debug("enabling power on all ports\n");
|
||||
for (i = 0; i < dev->maxchild; i++) {
|
||||
usb_set_port_feature(dev, i + 1, USB_PORT_FEAT_POWER);
|
||||
USB_HUB_PRINTF("port %d returns %lX\n", i + 1, dev->status);
|
||||
debug("port %d returns %lX\n", i + 1, dev->status);
|
||||
}
|
||||
|
||||
/* Wait at least 100 msec for power to become stable */
|
||||
|
@ -157,29 +146,28 @@ int hub_port_reset(struct usb_device *dev, int port,
|
|||
ALLOC_CACHE_ALIGN_BUFFER(struct usb_port_status, portsts, 1);
|
||||
unsigned short portstatus, portchange;
|
||||
|
||||
USB_HUB_PRINTF("hub_port_reset: resetting port %d...\n", port);
|
||||
debug("hub_port_reset: resetting port %d...\n", port);
|
||||
for (tries = 0; tries < MAX_TRIES; tries++) {
|
||||
|
||||
usb_set_port_feature(dev, port + 1, USB_PORT_FEAT_RESET);
|
||||
mdelay(200);
|
||||
|
||||
if (usb_get_port_status(dev, port + 1, portsts) < 0) {
|
||||
USB_HUB_PRINTF("get_port_status failed status %lX\n",
|
||||
dev->status);
|
||||
debug("get_port_status failed status %lX\n",
|
||||
dev->status);
|
||||
return -1;
|
||||
}
|
||||
portstatus = le16_to_cpu(portsts->wPortStatus);
|
||||
portchange = le16_to_cpu(portsts->wPortChange);
|
||||
|
||||
USB_HUB_PRINTF("portstatus %x, change %x, %s\n",
|
||||
portstatus, portchange,
|
||||
portspeed(portstatus));
|
||||
debug("portstatus %x, change %x, %s\n", portstatus, portchange,
|
||||
portspeed(portstatus));
|
||||
|
||||
USB_HUB_PRINTF("STAT_C_CONNECTION = %d STAT_CONNECTION = %d" \
|
||||
" USB_PORT_STAT_ENABLE %d\n",
|
||||
(portchange & USB_PORT_STAT_C_CONNECTION) ? 1 : 0,
|
||||
(portstatus & USB_PORT_STAT_CONNECTION) ? 1 : 0,
|
||||
(portstatus & USB_PORT_STAT_ENABLE) ? 1 : 0);
|
||||
debug("STAT_C_CONNECTION = %d STAT_CONNECTION = %d" \
|
||||
" USB_PORT_STAT_ENABLE %d\n",
|
||||
(portchange & USB_PORT_STAT_C_CONNECTION) ? 1 : 0,
|
||||
(portstatus & USB_PORT_STAT_CONNECTION) ? 1 : 0,
|
||||
(portstatus & USB_PORT_STAT_ENABLE) ? 1 : 0);
|
||||
|
||||
if ((portchange & USB_PORT_STAT_C_CONNECTION) ||
|
||||
!(portstatus & USB_PORT_STAT_CONNECTION))
|
||||
|
@ -192,9 +180,9 @@ int hub_port_reset(struct usb_device *dev, int port,
|
|||
}
|
||||
|
||||
if (tries == MAX_TRIES) {
|
||||
USB_HUB_PRINTF("Cannot enable port %i after %i retries, " \
|
||||
"disabling port.\n", port + 1, MAX_TRIES);
|
||||
USB_HUB_PRINTF("Maybe the USB cable is bad?\n");
|
||||
debug("Cannot enable port %i after %i retries, " \
|
||||
"disabling port.\n", port + 1, MAX_TRIES);
|
||||
debug("Maybe the USB cable is bad?\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -212,15 +200,15 @@ void usb_hub_port_connect_change(struct usb_device *dev, int port)
|
|||
|
||||
/* Check status */
|
||||
if (usb_get_port_status(dev, port + 1, portsts) < 0) {
|
||||
USB_HUB_PRINTF("get_port_status failed\n");
|
||||
debug("get_port_status failed\n");
|
||||
return;
|
||||
}
|
||||
|
||||
portstatus = le16_to_cpu(portsts->wPortStatus);
|
||||
USB_HUB_PRINTF("portstatus %x, change %x, %s\n",
|
||||
portstatus,
|
||||
le16_to_cpu(portsts->wPortChange),
|
||||
portspeed(portstatus));
|
||||
debug("portstatus %x, change %x, %s\n",
|
||||
portstatus,
|
||||
le16_to_cpu(portsts->wPortChange),
|
||||
portspeed(portstatus));
|
||||
|
||||
/* Clear the connection change status */
|
||||
usb_clear_port_feature(dev, port + 1, USB_PORT_FEAT_C_CONNECTION);
|
||||
|
@ -228,7 +216,7 @@ void usb_hub_port_connect_change(struct usb_device *dev, int port)
|
|||
/* Disconnect any existing devices under this port */
|
||||
if (((!(portstatus & USB_PORT_STAT_CONNECTION)) &&
|
||||
(!(portstatus & USB_PORT_STAT_ENABLE))) || (dev->children[port])) {
|
||||
USB_HUB_PRINTF("usb_disconnect(&hub->children[port]);\n");
|
||||
debug("usb_disconnect(&hub->children[port]);\n");
|
||||
/* Return now if nothing is connected */
|
||||
if (!(portstatus & USB_PORT_STAT_CONNECTION))
|
||||
return;
|
||||
|
@ -261,7 +249,7 @@ void usb_hub_port_connect_change(struct usb_device *dev, int port)
|
|||
/* Woops, disable the port */
|
||||
usb_free_device();
|
||||
dev->children[port] = NULL;
|
||||
USB_HUB_PRINTF("hub: disabling port %d\n", port + 1);
|
||||
debug("hub: disabling port %d\n", port + 1);
|
||||
usb_clear_port_feature(dev, port + 1, USB_PORT_FEAT_ENABLE);
|
||||
}
|
||||
}
|
||||
|
@ -275,9 +263,7 @@ static int usb_hub_configure(struct usb_device *dev)
|
|||
short hubCharacteristics;
|
||||
struct usb_hub_descriptor *descriptor;
|
||||
struct usb_hub_device *hub;
|
||||
#ifdef USB_HUB_DEBUG
|
||||
struct usb_hub_status *hubsts;
|
||||
#endif
|
||||
__maybe_unused struct usb_hub_status *hubsts;
|
||||
|
||||
/* "allocate" Hub device */
|
||||
hub = usb_hub_allocate();
|
||||
|
@ -286,8 +272,8 @@ static int usb_hub_configure(struct usb_device *dev)
|
|||
hub->pusb_dev = dev;
|
||||
/* Get the the hub descriptor */
|
||||
if (usb_get_hub_descriptor(dev, buffer, 4) < 0) {
|
||||
USB_HUB_PRINTF("usb_hub_configure: failed to get hub " \
|
||||
"descriptor, giving up %lX\n", dev->status);
|
||||
debug("usb_hub_configure: failed to get hub " \
|
||||
"descriptor, giving up %lX\n", dev->status);
|
||||
return -1;
|
||||
}
|
||||
descriptor = (struct usb_hub_descriptor *)buffer;
|
||||
|
@ -295,15 +281,14 @@ static int usb_hub_configure(struct usb_device *dev)
|
|||
/* silence compiler warning if USB_BUFSIZ is > 256 [= sizeof(char)] */
|
||||
i = descriptor->bLength;
|
||||
if (i > USB_BUFSIZ) {
|
||||
USB_HUB_PRINTF("usb_hub_configure: failed to get hub " \
|
||||
"descriptor - too long: %d\n",
|
||||
descriptor->bLength);
|
||||
debug("usb_hub_configure: failed to get hub " \
|
||||
"descriptor - too long: %d\n", descriptor->bLength);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (usb_get_hub_descriptor(dev, buffer, descriptor->bLength) < 0) {
|
||||
USB_HUB_PRINTF("usb_hub_configure: failed to get hub " \
|
||||
"descriptor 2nd giving up %lX\n", dev->status);
|
||||
debug("usb_hub_configure: failed to get hub " \
|
||||
"descriptor 2nd giving up %lX\n", dev->status);
|
||||
return -1;
|
||||
}
|
||||
memcpy((unsigned char *)&hub->desc, buffer, descriptor->bLength);
|
||||
|
@ -325,74 +310,75 @@ static int usb_hub_configure(struct usb_device *dev)
|
|||
hub->desc.PortPowerCtrlMask[i] = descriptor->PortPowerCtrlMask[i];
|
||||
|
||||
dev->maxchild = descriptor->bNbrPorts;
|
||||
USB_HUB_PRINTF("%d ports detected\n", dev->maxchild);
|
||||
debug("%d ports detected\n", dev->maxchild);
|
||||
|
||||
hubCharacteristics = get_unaligned(&hub->desc.wHubCharacteristics);
|
||||
switch (hubCharacteristics & HUB_CHAR_LPSM) {
|
||||
case 0x00:
|
||||
USB_HUB_PRINTF("ganged power switching\n");
|
||||
debug("ganged power switching\n");
|
||||
break;
|
||||
case 0x01:
|
||||
USB_HUB_PRINTF("individual port power switching\n");
|
||||
debug("individual port power switching\n");
|
||||
break;
|
||||
case 0x02:
|
||||
case 0x03:
|
||||
USB_HUB_PRINTF("unknown reserved power switching mode\n");
|
||||
debug("unknown reserved power switching mode\n");
|
||||
break;
|
||||
}
|
||||
|
||||
if (hubCharacteristics & HUB_CHAR_COMPOUND)
|
||||
USB_HUB_PRINTF("part of a compound device\n");
|
||||
debug("part of a compound device\n");
|
||||
else
|
||||
USB_HUB_PRINTF("standalone hub\n");
|
||||
debug("standalone hub\n");
|
||||
|
||||
switch (hubCharacteristics & HUB_CHAR_OCPM) {
|
||||
case 0x00:
|
||||
USB_HUB_PRINTF("global over-current protection\n");
|
||||
debug("global over-current protection\n");
|
||||
break;
|
||||
case 0x08:
|
||||
USB_HUB_PRINTF("individual port over-current protection\n");
|
||||
debug("individual port over-current protection\n");
|
||||
break;
|
||||
case 0x10:
|
||||
case 0x18:
|
||||
USB_HUB_PRINTF("no over-current protection\n");
|
||||
debug("no over-current protection\n");
|
||||
break;
|
||||
}
|
||||
|
||||
USB_HUB_PRINTF("power on to power good time: %dms\n",
|
||||
descriptor->bPwrOn2PwrGood * 2);
|
||||
USB_HUB_PRINTF("hub controller current requirement: %dmA\n",
|
||||
descriptor->bHubContrCurrent);
|
||||
debug("power on to power good time: %dms\n",
|
||||
descriptor->bPwrOn2PwrGood * 2);
|
||||
debug("hub controller current requirement: %dmA\n",
|
||||
descriptor->bHubContrCurrent);
|
||||
|
||||
for (i = 0; i < dev->maxchild; i++)
|
||||
USB_HUB_PRINTF("port %d is%s removable\n", i + 1,
|
||||
hub->desc.DeviceRemovable[(i + 1) / 8] & \
|
||||
(1 << ((i + 1) % 8)) ? " not" : "");
|
||||
debug("port %d is%s removable\n", i + 1,
|
||||
hub->desc.DeviceRemovable[(i + 1) / 8] & \
|
||||
(1 << ((i + 1) % 8)) ? " not" : "");
|
||||
|
||||
if (sizeof(struct usb_hub_status) > USB_BUFSIZ) {
|
||||
USB_HUB_PRINTF("usb_hub_configure: failed to get Status - " \
|
||||
"too long: %d\n", descriptor->bLength);
|
||||
debug("usb_hub_configure: failed to get Status - " \
|
||||
"too long: %d\n", descriptor->bLength);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (usb_get_hub_status(dev, buffer) < 0) {
|
||||
USB_HUB_PRINTF("usb_hub_configure: failed to get Status %lX\n",
|
||||
dev->status);
|
||||
debug("usb_hub_configure: failed to get Status %lX\n",
|
||||
dev->status);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifdef USB_HUB_DEBUG
|
||||
#ifdef DEBUG
|
||||
hubsts = (struct usb_hub_status *)buffer;
|
||||
#endif
|
||||
USB_HUB_PRINTF("get_hub_status returned status %X, change %X\n",
|
||||
le16_to_cpu(hubsts->wHubStatus),
|
||||
le16_to_cpu(hubsts->wHubChange));
|
||||
USB_HUB_PRINTF("local power source is %s\n",
|
||||
(le16_to_cpu(hubsts->wHubStatus) & HUB_STATUS_LOCAL_POWER) ? \
|
||||
"lost (inactive)" : "good");
|
||||
USB_HUB_PRINTF("%sover-current condition exists\n",
|
||||
(le16_to_cpu(hubsts->wHubStatus) & HUB_STATUS_OVERCURRENT) ? \
|
||||
"" : "no ");
|
||||
|
||||
debug("get_hub_status returned status %X, change %X\n",
|
||||
le16_to_cpu(hubsts->wHubStatus),
|
||||
le16_to_cpu(hubsts->wHubChange));
|
||||
debug("local power source is %s\n",
|
||||
(le16_to_cpu(hubsts->wHubStatus) & HUB_STATUS_LOCAL_POWER) ? \
|
||||
"lost (inactive)" : "good");
|
||||
debug("%sover-current condition exists\n",
|
||||
(le16_to_cpu(hubsts->wHubStatus) & HUB_STATUS_OVERCURRENT) ? \
|
||||
"" : "no ");
|
||||
usb_hub_power_on(hub);
|
||||
|
||||
for (i = 0; i < dev->maxchild; i++) {
|
||||
|
@ -412,7 +398,7 @@ static int usb_hub_configure(struct usb_device *dev)
|
|||
do {
|
||||
ret = usb_get_port_status(dev, i + 1, portsts);
|
||||
if (ret < 0) {
|
||||
USB_HUB_PRINTF("get_port_status failed\n");
|
||||
debug("get_port_status failed\n");
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -429,16 +415,16 @@ static int usb_hub_configure(struct usb_device *dev)
|
|||
if (ret < 0)
|
||||
continue;
|
||||
|
||||
USB_HUB_PRINTF("Port %d Status %X Change %X\n",
|
||||
i + 1, portstatus, portchange);
|
||||
debug("Port %d Status %X Change %X\n",
|
||||
i + 1, portstatus, portchange);
|
||||
|
||||
if (portchange & USB_PORT_STAT_C_CONNECTION) {
|
||||
USB_HUB_PRINTF("port %d connection change\n", i + 1);
|
||||
debug("port %d connection change\n", i + 1);
|
||||
usb_hub_port_connect_change(dev, i);
|
||||
}
|
||||
if (portchange & USB_PORT_STAT_C_ENABLE) {
|
||||
USB_HUB_PRINTF("port %d enable change, status %x\n",
|
||||
i + 1, portstatus);
|
||||
debug("port %d enable change, status %x\n",
|
||||
i + 1, portstatus);
|
||||
usb_clear_port_feature(dev, i + 1,
|
||||
USB_PORT_FEAT_C_ENABLE);
|
||||
|
||||
|
@ -448,27 +434,27 @@ static int usb_hub_configure(struct usb_device *dev)
|
|||
if (!(portstatus & USB_PORT_STAT_ENABLE) &&
|
||||
(portstatus & USB_PORT_STAT_CONNECTION) &&
|
||||
((dev->children[i]))) {
|
||||
USB_HUB_PRINTF("already running port %i " \
|
||||
"disabled by hub (EMI?), " \
|
||||
"re-enabling...\n", i + 1);
|
||||
usb_hub_port_connect_change(dev, i);
|
||||
debug("already running port %i " \
|
||||
"disabled by hub (EMI?), " \
|
||||
"re-enabling...\n", i + 1);
|
||||
usb_hub_port_connect_change(dev, i);
|
||||
}
|
||||
}
|
||||
if (portstatus & USB_PORT_STAT_SUSPEND) {
|
||||
USB_HUB_PRINTF("port %d suspend change\n", i + 1);
|
||||
debug("port %d suspend change\n", i + 1);
|
||||
usb_clear_port_feature(dev, i + 1,
|
||||
USB_PORT_FEAT_SUSPEND);
|
||||
}
|
||||
|
||||
if (portchange & USB_PORT_STAT_C_OVERCURRENT) {
|
||||
USB_HUB_PRINTF("port %d over-current change\n", i + 1);
|
||||
debug("port %d over-current change\n", i + 1);
|
||||
usb_clear_port_feature(dev, i + 1,
|
||||
USB_PORT_FEAT_C_OVER_CURRENT);
|
||||
usb_hub_power_on(hub);
|
||||
}
|
||||
|
||||
if (portchange & USB_PORT_STAT_C_RESET) {
|
||||
USB_HUB_PRINTF("port %d reset change\n", i + 1);
|
||||
debug("port %d reset change\n", i + 1);
|
||||
usb_clear_port_feature(dev, i + 1,
|
||||
USB_PORT_FEAT_C_RESET);
|
||||
}
|
||||
|
@ -503,7 +489,7 @@ int usb_hub_probe(struct usb_device *dev, int ifnum)
|
|||
if ((ep->bmAttributes & 3) != 3)
|
||||
return 0;
|
||||
/* We found a hub */
|
||||
USB_HUB_PRINTF("USB hub found\n");
|
||||
debug("USB hub found\n");
|
||||
ret = usb_hub_configure(dev);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -31,12 +31,6 @@
|
|||
|
||||
#include <usb.h>
|
||||
|
||||
#ifdef USB_KBD_DEBUG
|
||||
#define USB_KBD_PRINTF(fmt, args...) printf(fmt, ##args)
|
||||
#else
|
||||
#define USB_KBD_PRINTF(fmt, args...)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* If overwrite_console returns 1, the stdin, stderr and stdout
|
||||
* are switched to the serial port, else the settings in the
|
||||
|
@ -262,7 +256,7 @@ static int usb_kbd_translate(struct usb_kbd_pdata *data, unsigned char scancode,
|
|||
|
||||
/* Report keycode if any */
|
||||
if (keycode) {
|
||||
USB_KBD_PRINTF("%c", keycode);
|
||||
debug("%c", keycode);
|
||||
usb_kbd_put_queue(data, keycode);
|
||||
}
|
||||
|
||||
|
@ -324,8 +318,8 @@ static int usb_kbd_irq_worker(struct usb_device *dev)
|
|||
static int usb_kbd_irq(struct usb_device *dev)
|
||||
{
|
||||
if ((dev->irq_status != 0) || (dev->irq_act_len != 8)) {
|
||||
USB_KBD_PRINTF("USB KBD: Error %lX, len %d\n",
|
||||
dev->irq_status, dev->irq_act_len);
|
||||
debug("USB KBD: Error %lX, len %d\n",
|
||||
dev->irq_status, dev->irq_act_len);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -437,7 +431,7 @@ static int usb_kbd_probe(struct usb_device *dev, unsigned int ifnum)
|
|||
if ((ep->bmAttributes & 3) != 3)
|
||||
return 0;
|
||||
|
||||
USB_KBD_PRINTF("USB KBD: found set protocol...\n");
|
||||
debug("USB KBD: found set protocol...\n");
|
||||
|
||||
data = malloc(sizeof(struct usb_kbd_pdata));
|
||||
if (!data) {
|
||||
|
@ -463,10 +457,10 @@ static int usb_kbd_probe(struct usb_device *dev, unsigned int ifnum)
|
|||
/* We found a USB Keyboard, install it. */
|
||||
usb_set_protocol(dev, iface->desc.bInterfaceNumber, 0);
|
||||
|
||||
USB_KBD_PRINTF("USB KBD: found set idle...\n");
|
||||
debug("USB KBD: found set idle...\n");
|
||||
usb_set_idle(dev, iface->desc.bInterfaceNumber, REPEAT_RATE, 0);
|
||||
|
||||
USB_KBD_PRINTF("USB KBD: enable interrupt pipe...\n");
|
||||
debug("USB KBD: enable interrupt pipe...\n");
|
||||
usb_submit_int_msg(dev, pipe, data->new, maxp > 8 ? 8 : maxp,
|
||||
ep->bInterval);
|
||||
|
||||
|
@ -497,16 +491,16 @@ int drv_usb_kbd_init(void)
|
|||
continue;
|
||||
|
||||
/* We found a keyboard, check if it is already registered. */
|
||||
USB_KBD_PRINTF("USB KBD: found set up device.\n");
|
||||
debug("USB KBD: found set up device.\n");
|
||||
old_dev = stdio_get_by_name(DEVNAME);
|
||||
if (old_dev) {
|
||||
/* Already registered, just return ok. */
|
||||
USB_KBD_PRINTF("USB KBD: is already registered.\n");
|
||||
debug("USB KBD: is already registered.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Register the keyboard */
|
||||
USB_KBD_PRINTF("USB KBD: register.\n");
|
||||
debug("USB KBD: register.\n");
|
||||
memset(&usb_kbd_dev, 0, sizeof(struct stdio_dev));
|
||||
strcpy(usb_kbd_dev.name, DEVNAME);
|
||||
usb_kbd_dev.flags = DEV_FLAGS_INPUT | DEV_FLAGS_SYSTEM;
|
||||
|
|
|
@ -59,14 +59,6 @@
|
|||
#undef BBB_COMDAT_TRACE
|
||||
#undef BBB_XPORT_TRACE
|
||||
|
||||
#ifdef USB_STOR_DEBUG
|
||||
#define USB_BLK_DEBUG 1
|
||||
#else
|
||||
#define USB_BLK_DEBUG 0
|
||||
#endif
|
||||
|
||||
#define USB_STOR_PRINTF(fmt, args...) debug_cond(USB_BLK_DEBUG, fmt, ##args)
|
||||
|
||||
#include <scsi.h>
|
||||
/* direction table -- this indicates the direction of the data
|
||||
* transfer for each command code -- a 1 indicates input
|
||||
|
@ -228,8 +220,7 @@ static unsigned int usb_get_max_lun(struct us_data *us)
|
|||
0, us->ifnum,
|
||||
result, sizeof(char),
|
||||
USB_CNTL_TIMEOUT * 5);
|
||||
USB_STOR_PRINTF("Get Max LUN -> len = %i, result = %i\n",
|
||||
len, (int) *result);
|
||||
debug("Get Max LUN -> len = %i, result = %i\n", len, (int) *result);
|
||||
return (len > 0) ? *result : 0;
|
||||
}
|
||||
|
||||
|
@ -262,7 +253,7 @@ int usb_stor_scan(int mode)
|
|||
usb_max_devs = 0;
|
||||
for (i = 0; i < USB_MAX_DEVICE; i++) {
|
||||
dev = usb_get_dev_index(i); /* get device */
|
||||
USB_STOR_PRINTF("i=%d\n", i);
|
||||
debug("i=%d\n", i);
|
||||
if (dev == NULL)
|
||||
break; /* no more devices available */
|
||||
|
||||
|
@ -309,7 +300,7 @@ static int usb_stor_irq(struct usb_device *dev)
|
|||
}
|
||||
|
||||
|
||||
#ifdef USB_STOR_DEBUG
|
||||
#ifdef DEBUG
|
||||
|
||||
static void usb_show_srb(ccb *pccb)
|
||||
{
|
||||
|
@ -361,45 +352,49 @@ static int us_one_transfer(struct us_data *us, int pipe, char *buf, int length)
|
|||
/* set up the transfer loop */
|
||||
do {
|
||||
/* transfer the data */
|
||||
USB_STOR_PRINTF("Bulk xfer 0x%x(%d) try #%d\n",
|
||||
(unsigned int)buf, this_xfer, 11 - maxtry);
|
||||
debug("Bulk xfer 0x%x(%d) try #%d\n",
|
||||
(unsigned int)buf, this_xfer, 11 - maxtry);
|
||||
result = usb_bulk_msg(us->pusb_dev, pipe, buf,
|
||||
this_xfer, &partial,
|
||||
USB_CNTL_TIMEOUT * 5);
|
||||
USB_STOR_PRINTF("bulk_msg returned %d xferred %d/%d\n",
|
||||
result, partial, this_xfer);
|
||||
debug("bulk_msg returned %d xferred %d/%d\n",
|
||||
result, partial, this_xfer);
|
||||
if (us->pusb_dev->status != 0) {
|
||||
/* if we stall, we need to clear it before
|
||||
* we go on
|
||||
*/
|
||||
#ifdef USB_STOR_DEBUG
|
||||
#ifdef DEBUG
|
||||
display_int_status(us->pusb_dev->status);
|
||||
#endif
|
||||
if (us->pusb_dev->status & USB_ST_STALLED) {
|
||||
USB_STOR_PRINTF("stalled ->clearing endpoint halt for pipe 0x%x\n", pipe);
|
||||
debug("stalled ->clearing endpoint" \
|
||||
"halt for pipe 0x%x\n", pipe);
|
||||
stat = us->pusb_dev->status;
|
||||
usb_clear_halt(us->pusb_dev, pipe);
|
||||
us->pusb_dev->status = stat;
|
||||
if (this_xfer == partial) {
|
||||
USB_STOR_PRINTF("bulk transferred with error %lX, but data ok\n", us->pusb_dev->status);
|
||||
debug("bulk transferred" \
|
||||
"with error %lX," \
|
||||
" but data ok\n",
|
||||
us->pusb_dev->status);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
return result;
|
||||
}
|
||||
if (us->pusb_dev->status & USB_ST_NAK_REC) {
|
||||
USB_STOR_PRINTF("Device NAKed bulk_msg\n");
|
||||
debug("Device NAKed bulk_msg\n");
|
||||
return result;
|
||||
}
|
||||
USB_STOR_PRINTF("bulk transferred with error");
|
||||
debug("bulk transferred with error");
|
||||
if (this_xfer == partial) {
|
||||
USB_STOR_PRINTF(" %ld, but data ok\n",
|
||||
us->pusb_dev->status);
|
||||
debug(" %ld, but data ok\n",
|
||||
us->pusb_dev->status);
|
||||
return 0;
|
||||
}
|
||||
/* if our try counter reaches 0, bail out */
|
||||
USB_STOR_PRINTF(" %ld, data %d\n",
|
||||
us->pusb_dev->status, partial);
|
||||
debug(" %ld, data %d\n",
|
||||
us->pusb_dev->status, partial);
|
||||
if (!maxtry--)
|
||||
return result;
|
||||
}
|
||||
|
@ -433,35 +428,34 @@ static int usb_stor_BBB_reset(struct us_data *us)
|
|||
*
|
||||
* This comment stolen from FreeBSD's /sys/dev/usb/umass.c.
|
||||
*/
|
||||
USB_STOR_PRINTF("BBB_reset\n");
|
||||
debug("BBB_reset\n");
|
||||
result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev, 0),
|
||||
US_BBB_RESET,
|
||||
USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
0, us->ifnum, NULL, 0, USB_CNTL_TIMEOUT * 5);
|
||||
|
||||
if ((result < 0) && (us->pusb_dev->status & USB_ST_STALLED)) {
|
||||
USB_STOR_PRINTF("RESET:stall\n");
|
||||
debug("RESET:stall\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* long wait for reset */
|
||||
mdelay(150);
|
||||
USB_STOR_PRINTF("BBB_reset result %d: status %lX reset\n", result,
|
||||
us->pusb_dev->status);
|
||||
debug("BBB_reset result %d: status %lX reset\n",
|
||||
result, us->pusb_dev->status);
|
||||
pipe = usb_rcvbulkpipe(us->pusb_dev, us->ep_in);
|
||||
result = usb_clear_halt(us->pusb_dev, pipe);
|
||||
/* long wait for reset */
|
||||
mdelay(150);
|
||||
USB_STOR_PRINTF("BBB_reset result %d: status %lX clearing IN endpoint\n",
|
||||
result, us->pusb_dev->status);
|
||||
debug("BBB_reset result %d: status %lX clearing IN endpoint\n",
|
||||
result, us->pusb_dev->status);
|
||||
/* long wait for reset */
|
||||
pipe = usb_sndbulkpipe(us->pusb_dev, us->ep_out);
|
||||
result = usb_clear_halt(us->pusb_dev, pipe);
|
||||
mdelay(150);
|
||||
USB_STOR_PRINTF("BBB_reset result %d: status %lX"
|
||||
" clearing OUT endpoint\n", result,
|
||||
us->pusb_dev->status);
|
||||
USB_STOR_PRINTF("BBB_reset done\n");
|
||||
debug("BBB_reset result %d: status %lX clearing OUT endpoint\n",
|
||||
result, us->pusb_dev->status);
|
||||
debug("BBB_reset done\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -474,7 +468,7 @@ static int usb_stor_CB_reset(struct us_data *us)
|
|||
unsigned char cmd[12];
|
||||
int result;
|
||||
|
||||
USB_STOR_PRINTF("CB_reset\n");
|
||||
debug("CB_reset\n");
|
||||
memset(cmd, 0xff, sizeof(cmd));
|
||||
cmd[0] = SCSI_SEND_DIAG;
|
||||
cmd[1] = 4;
|
||||
|
@ -486,13 +480,12 @@ static int usb_stor_CB_reset(struct us_data *us)
|
|||
|
||||
/* long wait for reset */
|
||||
mdelay(1500);
|
||||
USB_STOR_PRINTF("CB_reset result %d: status %lX"
|
||||
" clearing endpoint halt\n", result,
|
||||
us->pusb_dev->status);
|
||||
debug("CB_reset result %d: status %lX clearing endpoint halt\n",
|
||||
result, us->pusb_dev->status);
|
||||
usb_clear_halt(us->pusb_dev, usb_rcvbulkpipe(us->pusb_dev, us->ep_in));
|
||||
usb_clear_halt(us->pusb_dev, usb_rcvbulkpipe(us->pusb_dev, us->ep_out));
|
||||
|
||||
USB_STOR_PRINTF("CB_reset done\n");
|
||||
debug("CB_reset done\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -522,7 +515,7 @@ static int usb_stor_BBB_comdat(ccb *srb, struct us_data *us)
|
|||
#endif
|
||||
/* sanity checks */
|
||||
if (!(srb->cmdlen <= CBWCDBLENGTH)) {
|
||||
USB_STOR_PRINTF("usb_stor_BBB_comdat:cmdlen too large\n");
|
||||
debug("usb_stor_BBB_comdat:cmdlen too large\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -541,7 +534,7 @@ static int usb_stor_BBB_comdat(ccb *srb, struct us_data *us)
|
|||
result = usb_bulk_msg(us->pusb_dev, pipe, cbw, UMASS_BBB_CBW_SIZE,
|
||||
&actlen, USB_CNTL_TIMEOUT * 5);
|
||||
if (result < 0)
|
||||
USB_STOR_PRINTF("usb_stor_BBB_comdat:usb_bulk_msg error\n");
|
||||
debug("usb_stor_BBB_comdat:usb_bulk_msg error\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -564,8 +557,8 @@ static int usb_stor_CB_comdat(ccb *srb, struct us_data *us)
|
|||
pipe = usb_sndbulkpipe(us->pusb_dev, us->ep_out);
|
||||
|
||||
while (retry--) {
|
||||
USB_STOR_PRINTF("CBI gets a command: Try %d\n", 5 - retry);
|
||||
#ifdef USB_STOR_DEBUG
|
||||
debug("CBI gets a command: Try %d\n", 5 - retry);
|
||||
#ifdef DEBUG
|
||||
usb_show_srb(srb);
|
||||
#endif
|
||||
/* let's send the command via the control pipe */
|
||||
|
@ -576,35 +569,35 @@ static int usb_stor_CB_comdat(ccb *srb, struct us_data *us)
|
|||
0, us->ifnum,
|
||||
srb->cmd, srb->cmdlen,
|
||||
USB_CNTL_TIMEOUT * 5);
|
||||
USB_STOR_PRINTF("CB_transport: control msg returned %d,"
|
||||
" status %lX\n", result, us->pusb_dev->status);
|
||||
debug("CB_transport: control msg returned %d, status %lX\n",
|
||||
result, us->pusb_dev->status);
|
||||
/* check the return code for the command */
|
||||
if (result < 0) {
|
||||
if (us->pusb_dev->status & USB_ST_STALLED) {
|
||||
status = us->pusb_dev->status;
|
||||
USB_STOR_PRINTF(" stall during command found,"
|
||||
" clear pipe\n");
|
||||
debug(" stall during command found," \
|
||||
" clear pipe\n");
|
||||
usb_clear_halt(us->pusb_dev,
|
||||
usb_sndctrlpipe(us->pusb_dev, 0));
|
||||
us->pusb_dev->status = status;
|
||||
}
|
||||
USB_STOR_PRINTF(" error during command %02X"
|
||||
" Stat = %lX\n", srb->cmd[0],
|
||||
us->pusb_dev->status);
|
||||
debug(" error during command %02X" \
|
||||
" Stat = %lX\n", srb->cmd[0],
|
||||
us->pusb_dev->status);
|
||||
return result;
|
||||
}
|
||||
/* transfer the data payload for this command, if one exists*/
|
||||
|
||||
USB_STOR_PRINTF("CB_transport: control msg returned %d,"
|
||||
" direction is %s to go 0x%lx\n", result,
|
||||
dir_in ? "IN" : "OUT", srb->datalen);
|
||||
debug("CB_transport: control msg returned %d," \
|
||||
" direction is %s to go 0x%lx\n", result,
|
||||
dir_in ? "IN" : "OUT", srb->datalen);
|
||||
if (srb->datalen) {
|
||||
result = us_one_transfer(us, pipe, (char *)srb->pdata,
|
||||
srb->datalen);
|
||||
USB_STOR_PRINTF("CBI attempted to transfer data,"
|
||||
" result is %d status %lX, len %d\n",
|
||||
result, us->pusb_dev->status,
|
||||
us->pusb_dev->act_len);
|
||||
debug("CBI attempted to transfer data," \
|
||||
" result is %d status %lX, len %d\n",
|
||||
result, us->pusb_dev->status,
|
||||
us->pusb_dev->act_len);
|
||||
if (!(us->pusb_dev->status & USB_ST_NAK_REC))
|
||||
break;
|
||||
} /* if (srb->datalen) */
|
||||
|
@ -635,10 +628,9 @@ static int usb_stor_CBI_get_status(ccb *srb, struct us_data *us)
|
|||
us->ip_wanted = 0;
|
||||
return USB_STOR_TRANSPORT_ERROR;
|
||||
}
|
||||
USB_STOR_PRINTF
|
||||
("Got interrupt data 0x%x, transfered %d status 0x%lX\n",
|
||||
us->ip_data, us->pusb_dev->irq_act_len,
|
||||
us->pusb_dev->irq_status);
|
||||
debug("Got interrupt data 0x%x, transfered %d status 0x%lX\n",
|
||||
us->ip_data, us->pusb_dev->irq_act_len,
|
||||
us->pusb_dev->irq_status);
|
||||
/* UFI gives us ASC and ASCQ, like a request sense */
|
||||
if (us->subclass == US_SC_UFI) {
|
||||
if (srb->cmd[0] == SCSI_REQ_SENSE ||
|
||||
|
@ -691,11 +683,11 @@ static int usb_stor_BBB_transport(ccb *srb, struct us_data *us)
|
|||
dir_in = US_DIRECTION(srb->cmd[0]);
|
||||
|
||||
/* COMMAND phase */
|
||||
USB_STOR_PRINTF("COMMAND phase\n");
|
||||
debug("COMMAND phase\n");
|
||||
result = usb_stor_BBB_comdat(srb, us);
|
||||
if (result < 0) {
|
||||
USB_STOR_PRINTF("failed to send CBW status %ld\n",
|
||||
us->pusb_dev->status);
|
||||
debug("failed to send CBW status %ld\n",
|
||||
us->pusb_dev->status);
|
||||
usb_stor_BBB_reset(us);
|
||||
return USB_STOR_TRANSPORT_FAILED;
|
||||
}
|
||||
|
@ -708,7 +700,7 @@ static int usb_stor_BBB_transport(ccb *srb, struct us_data *us)
|
|||
/* no data, go immediately to the STATUS phase */
|
||||
if (srb->datalen == 0)
|
||||
goto st;
|
||||
USB_STOR_PRINTF("DATA phase\n");
|
||||
debug("DATA phase\n");
|
||||
if (dir_in)
|
||||
pipe = pipein;
|
||||
else
|
||||
|
@ -717,7 +709,7 @@ static int usb_stor_BBB_transport(ccb *srb, struct us_data *us)
|
|||
&data_actlen, USB_CNTL_TIMEOUT * 5);
|
||||
/* special handling of STALL in DATA phase */
|
||||
if ((result < 0) && (us->pusb_dev->status & USB_ST_STALLED)) {
|
||||
USB_STOR_PRINTF("DATA:stall\n");
|
||||
debug("DATA:stall\n");
|
||||
/* clear the STALL on the endpoint */
|
||||
result = usb_stor_BBB_clear_endpt_stall(us,
|
||||
dir_in ? us->ep_in : us->ep_out);
|
||||
|
@ -726,8 +718,8 @@ static int usb_stor_BBB_transport(ccb *srb, struct us_data *us)
|
|||
goto st;
|
||||
}
|
||||
if (result < 0) {
|
||||
USB_STOR_PRINTF("usb_bulk_msg error status %ld\n",
|
||||
us->pusb_dev->status);
|
||||
debug("usb_bulk_msg error status %ld\n",
|
||||
us->pusb_dev->status);
|
||||
usb_stor_BBB_reset(us);
|
||||
return USB_STOR_TRANSPORT_FAILED;
|
||||
}
|
||||
|
@ -740,14 +732,14 @@ static int usb_stor_BBB_transport(ccb *srb, struct us_data *us)
|
|||
st:
|
||||
retry = 0;
|
||||
again:
|
||||
USB_STOR_PRINTF("STATUS phase\n");
|
||||
debug("STATUS phase\n");
|
||||
result = usb_bulk_msg(us->pusb_dev, pipein, csw, UMASS_BBB_CSW_SIZE,
|
||||
&actlen, USB_CNTL_TIMEOUT*5);
|
||||
|
||||
/* special handling of STALL in STATUS phase */
|
||||
if ((result < 0) && (retry < 1) &&
|
||||
(us->pusb_dev->status & USB_ST_STALLED)) {
|
||||
USB_STOR_PRINTF("STATUS:stall\n");
|
||||
debug("STATUS:stall\n");
|
||||
/* clear the STALL on the endpoint */
|
||||
result = usb_stor_BBB_clear_endpt_stall(us, us->ep_in);
|
||||
if (result >= 0 && (retry++ < 1))
|
||||
|
@ -755,8 +747,8 @@ again:
|
|||
goto again;
|
||||
}
|
||||
if (result < 0) {
|
||||
USB_STOR_PRINTF("usb_bulk_msg error status %ld\n",
|
||||
us->pusb_dev->status);
|
||||
debug("usb_bulk_msg error status %ld\n",
|
||||
us->pusb_dev->status);
|
||||
usb_stor_BBB_reset(us);
|
||||
return USB_STOR_TRANSPORT_FAILED;
|
||||
}
|
||||
|
@ -771,27 +763,27 @@ again:
|
|||
if (pipe == 0 && srb->datalen != 0 && srb->datalen - data_actlen != 0)
|
||||
pipe = srb->datalen - data_actlen;
|
||||
if (CSWSIGNATURE != le32_to_cpu(csw->dCSWSignature)) {
|
||||
USB_STOR_PRINTF("!CSWSIGNATURE\n");
|
||||
debug("!CSWSIGNATURE\n");
|
||||
usb_stor_BBB_reset(us);
|
||||
return USB_STOR_TRANSPORT_FAILED;
|
||||
} else if ((CBWTag - 1) != le32_to_cpu(csw->dCSWTag)) {
|
||||
USB_STOR_PRINTF("!Tag\n");
|
||||
debug("!Tag\n");
|
||||
usb_stor_BBB_reset(us);
|
||||
return USB_STOR_TRANSPORT_FAILED;
|
||||
} else if (csw->bCSWStatus > CSWSTATUS_PHASE) {
|
||||
USB_STOR_PRINTF(">PHASE\n");
|
||||
debug(">PHASE\n");
|
||||
usb_stor_BBB_reset(us);
|
||||
return USB_STOR_TRANSPORT_FAILED;
|
||||
} else if (csw->bCSWStatus == CSWSTATUS_PHASE) {
|
||||
USB_STOR_PRINTF("=PHASE\n");
|
||||
debug("=PHASE\n");
|
||||
usb_stor_BBB_reset(us);
|
||||
return USB_STOR_TRANSPORT_FAILED;
|
||||
} else if (data_actlen > srb->datalen) {
|
||||
USB_STOR_PRINTF("transferred %dB instead of %ldB\n",
|
||||
data_actlen, srb->datalen);
|
||||
debug("transferred %dB instead of %ldB\n",
|
||||
data_actlen, srb->datalen);
|
||||
return USB_STOR_TRANSPORT_FAILED;
|
||||
} else if (csw->bCSWStatus == CSWSTATUS_FAILED) {
|
||||
USB_STOR_PRINTF("FAILED\n");
|
||||
debug("FAILED\n");
|
||||
return USB_STOR_TRANSPORT_FAILED;
|
||||
}
|
||||
|
||||
|
@ -812,14 +804,14 @@ static int usb_stor_CB_transport(ccb *srb, struct us_data *us)
|
|||
/* issue the command */
|
||||
do_retry:
|
||||
result = usb_stor_CB_comdat(srb, us);
|
||||
USB_STOR_PRINTF("command / Data returned %d, status %lX\n",
|
||||
result, us->pusb_dev->status);
|
||||
debug("command / Data returned %d, status %lX\n",
|
||||
result, us->pusb_dev->status);
|
||||
/* if this is an CBI Protocol, get IRQ */
|
||||
if (us->protocol == US_PR_CBI) {
|
||||
status = usb_stor_CBI_get_status(srb, us);
|
||||
/* if the status is error, report it */
|
||||
if (status == USB_STOR_TRANSPORT_ERROR) {
|
||||
USB_STOR_PRINTF(" USB CBI Command Error\n");
|
||||
debug(" USB CBI Command Error\n");
|
||||
return status;
|
||||
}
|
||||
srb->sense_buf[12] = (unsigned char)(us->ip_data >> 8);
|
||||
|
@ -827,7 +819,7 @@ do_retry:
|
|||
if (!us->ip_data) {
|
||||
/* if the status is good, report it */
|
||||
if (status == USB_STOR_TRANSPORT_GOOD) {
|
||||
USB_STOR_PRINTF(" USB CBI Command Good\n");
|
||||
debug(" USB CBI Command Good\n");
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
@ -835,7 +827,7 @@ do_retry:
|
|||
/* do we have to issue an auto request? */
|
||||
/* HERE we have to check the result */
|
||||
if ((result < 0) && !(us->pusb_dev->status & USB_ST_STALLED)) {
|
||||
USB_STOR_PRINTF("ERROR %lX\n", us->pusb_dev->status);
|
||||
debug("ERROR %lX\n", us->pusb_dev->status);
|
||||
us->transport_reset(us);
|
||||
return USB_STOR_TRANSPORT_ERROR;
|
||||
}
|
||||
|
@ -843,7 +835,7 @@ do_retry:
|
|||
((srb->cmd[0] == SCSI_REQ_SENSE) ||
|
||||
(srb->cmd[0] == SCSI_INQUIRY))) {
|
||||
/* do not issue an autorequest after request sense */
|
||||
USB_STOR_PRINTF("No auto request and good\n");
|
||||
debug("No auto request and good\n");
|
||||
return USB_STOR_TRANSPORT_GOOD;
|
||||
}
|
||||
/* issue an request_sense */
|
||||
|
@ -856,19 +848,19 @@ do_retry:
|
|||
psrb->cmdlen = 12;
|
||||
/* issue the command */
|
||||
result = usb_stor_CB_comdat(psrb, us);
|
||||
USB_STOR_PRINTF("auto request returned %d\n", result);
|
||||
debug("auto request returned %d\n", result);
|
||||
/* if this is an CBI Protocol, get IRQ */
|
||||
if (us->protocol == US_PR_CBI)
|
||||
status = usb_stor_CBI_get_status(psrb, us);
|
||||
|
||||
if ((result < 0) && !(us->pusb_dev->status & USB_ST_STALLED)) {
|
||||
USB_STOR_PRINTF(" AUTO REQUEST ERROR %ld\n",
|
||||
us->pusb_dev->status);
|
||||
debug(" AUTO REQUEST ERROR %ld\n",
|
||||
us->pusb_dev->status);
|
||||
return USB_STOR_TRANSPORT_ERROR;
|
||||
}
|
||||
USB_STOR_PRINTF("autorequest returned 0x%02X 0x%02X 0x%02X 0x%02X\n",
|
||||
srb->sense_buf[0], srb->sense_buf[2],
|
||||
srb->sense_buf[12], srb->sense_buf[13]);
|
||||
debug("autorequest returned 0x%02X 0x%02X 0x%02X 0x%02X\n",
|
||||
srb->sense_buf[0], srb->sense_buf[2],
|
||||
srb->sense_buf[12], srb->sense_buf[13]);
|
||||
/* Check the auto request result */
|
||||
if ((srb->sense_buf[2] == 0) &&
|
||||
(srb->sense_buf[12] == 0) &&
|
||||
|
@ -923,7 +915,7 @@ static int usb_inquiry(ccb *srb, struct us_data *ss)
|
|||
srb->datalen = 36;
|
||||
srb->cmdlen = 12;
|
||||
i = ss->transport(srb, ss);
|
||||
USB_STOR_PRINTF("inquiry returns %d\n", i);
|
||||
debug("inquiry returns %d\n", i);
|
||||
if (i == 0)
|
||||
break;
|
||||
} while (--retry);
|
||||
|
@ -948,9 +940,9 @@ static int usb_request_sense(ccb *srb, struct us_data *ss)
|
|||
srb->pdata = &srb->sense_buf[0];
|
||||
srb->cmdlen = 12;
|
||||
ss->transport(srb, ss);
|
||||
USB_STOR_PRINTF("Request Sense returned %02X %02X %02X\n",
|
||||
srb->sense_buf[2], srb->sense_buf[12],
|
||||
srb->sense_buf[13]);
|
||||
debug("Request Sense returned %02X %02X %02X\n",
|
||||
srb->sense_buf[2], srb->sense_buf[12],
|
||||
srb->sense_buf[13]);
|
||||
srb->pdata = (uchar *)ptr;
|
||||
return 0;
|
||||
}
|
||||
|
@ -1017,7 +1009,7 @@ static int usb_read_10(ccb *srb, struct us_data *ss, unsigned long start,
|
|||
srb->cmd[7] = ((unsigned char) (blocks >> 8)) & 0xff;
|
||||
srb->cmd[8] = (unsigned char) blocks & 0xff;
|
||||
srb->cmdlen = 12;
|
||||
USB_STOR_PRINTF("read10: start %lx blocks %x\n", start, blocks);
|
||||
debug("read10: start %lx blocks %x\n", start, blocks);
|
||||
return ss->transport(srb, ss);
|
||||
}
|
||||
|
||||
|
@ -1034,7 +1026,7 @@ static int usb_write_10(ccb *srb, struct us_data *ss, unsigned long start,
|
|||
srb->cmd[7] = ((unsigned char) (blocks >> 8)) & 0xff;
|
||||
srb->cmd[8] = (unsigned char) blocks & 0xff;
|
||||
srb->cmdlen = 12;
|
||||
USB_STOR_PRINTF("write10: start %lx blocks %x\n", start, blocks);
|
||||
debug("write10: start %lx blocks %x\n", start, blocks);
|
||||
return ss->transport(srb, ss);
|
||||
}
|
||||
|
||||
|
@ -1078,7 +1070,7 @@ unsigned long usb_stor_read(int device, unsigned long blknr,
|
|||
|
||||
device &= 0xff;
|
||||
/* Setup device */
|
||||
USB_STOR_PRINTF("\nusb_read: dev %d \n", device);
|
||||
debug("\nusb_read: dev %d \n", device);
|
||||
dev = NULL;
|
||||
for (i = 0; i < USB_MAX_DEVICE; i++) {
|
||||
dev = usb_get_dev_index(i);
|
||||
|
@ -1095,8 +1087,8 @@ unsigned long usb_stor_read(int device, unsigned long blknr,
|
|||
start = blknr;
|
||||
blks = blkcnt;
|
||||
|
||||
USB_STOR_PRINTF("\nusb_read: dev %d startblk " LBAF ", blccnt " LBAF
|
||||
" buffer %lx\n", device, start, blks, buf_addr);
|
||||
debug("\nusb_read: dev %d startblk " LBAF ", blccnt " LBAF
|
||||
" buffer %lx\n", device, start, blks, buf_addr);
|
||||
|
||||
do {
|
||||
/* XXX need some comment here */
|
||||
|
@ -1112,7 +1104,7 @@ retry_it:
|
|||
srb->datalen = usb_dev_desc[device].blksz * smallblks;
|
||||
srb->pdata = (unsigned char *)buf_addr;
|
||||
if (usb_read_10(srb, ss, start, smallblks)) {
|
||||
USB_STOR_PRINTF("Read ERROR\n");
|
||||
debug("Read ERROR\n");
|
||||
usb_request_sense(srb, ss);
|
||||
if (retry--)
|
||||
goto retry_it;
|
||||
|
@ -1125,9 +1117,9 @@ retry_it:
|
|||
} while (blks != 0);
|
||||
ss->flags &= ~USB_READY;
|
||||
|
||||
USB_STOR_PRINTF("usb_read: end startblk " LBAF
|
||||
", blccnt %x buffer %lx\n",
|
||||
start, smallblks, buf_addr);
|
||||
debug("usb_read: end startblk " LBAF
|
||||
", blccnt %x buffer %lx\n",
|
||||
start, smallblks, buf_addr);
|
||||
|
||||
usb_disable_asynch(0); /* asynch transfer allowed */
|
||||
if (blkcnt >= USB_MAX_XFER_BLK)
|
||||
|
@ -1151,7 +1143,7 @@ unsigned long usb_stor_write(int device, unsigned long blknr,
|
|||
|
||||
device &= 0xff;
|
||||
/* Setup device */
|
||||
USB_STOR_PRINTF("\nusb_write: dev %d \n", device);
|
||||
debug("\nusb_write: dev %d \n", device);
|
||||
dev = NULL;
|
||||
for (i = 0; i < USB_MAX_DEVICE; i++) {
|
||||
dev = usb_get_dev_index(i);
|
||||
|
@ -1169,8 +1161,8 @@ unsigned long usb_stor_write(int device, unsigned long blknr,
|
|||
start = blknr;
|
||||
blks = blkcnt;
|
||||
|
||||
USB_STOR_PRINTF("\nusb_write: dev %d startblk " LBAF ", blccnt " LBAF
|
||||
" buffer %lx\n", device, start, blks, buf_addr);
|
||||
debug("\nusb_write: dev %d startblk " LBAF ", blccnt " LBAF
|
||||
" buffer %lx\n", device, start, blks, buf_addr);
|
||||
|
||||
do {
|
||||
/* If write fails retry for max retry count else
|
||||
|
@ -1188,7 +1180,7 @@ retry_it:
|
|||
srb->datalen = usb_dev_desc[device].blksz * smallblks;
|
||||
srb->pdata = (unsigned char *)buf_addr;
|
||||
if (usb_write_10(srb, ss, start, smallblks)) {
|
||||
USB_STOR_PRINTF("Write ERROR\n");
|
||||
debug("Write ERROR\n");
|
||||
usb_request_sense(srb, ss);
|
||||
if (retry--)
|
||||
goto retry_it;
|
||||
|
@ -1201,9 +1193,8 @@ retry_it:
|
|||
} while (blks != 0);
|
||||
ss->flags &= ~USB_READY;
|
||||
|
||||
USB_STOR_PRINTF("usb_write: end startblk " LBAF
|
||||
", blccnt %x buffer %lx\n",
|
||||
start, smallblks, buf_addr);
|
||||
debug("usb_write: end startblk " LBAF ", blccnt %x buffer %lx\n",
|
||||
start, smallblks, buf_addr);
|
||||
|
||||
usb_disable_asynch(0); /* asynch transfer allowed */
|
||||
if (blkcnt >= USB_MAX_XFER_BLK)
|
||||
|
@ -1228,12 +1219,12 @@ int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,
|
|||
|
||||
#if 0
|
||||
/* this is the place to patch some storage devices */
|
||||
USB_STOR_PRINTF("iVendor %X iProduct %X\n", dev->descriptor.idVendor,
|
||||
debug("iVendor %X iProduct %X\n", dev->descriptor.idVendor,
|
||||
dev->descriptor.idProduct);
|
||||
|
||||
if ((dev->descriptor.idVendor) == 0x066b &&
|
||||
(dev->descriptor.idProduct) == 0x0103) {
|
||||
USB_STOR_PRINTF("patched for E-USB\n");
|
||||
debug("patched for E-USB\n");
|
||||
protocol = US_PR_CB;
|
||||
subclass = US_SC_UFI; /* an assumption */
|
||||
}
|
||||
|
@ -1250,7 +1241,7 @@ int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,
|
|||
memset(ss, 0, sizeof(struct us_data));
|
||||
|
||||
/* At this point, we know we've got a live one */
|
||||
USB_STOR_PRINTF("\n\nUSB Mass Storage device detected\n");
|
||||
debug("\n\nUSB Mass Storage device detected\n");
|
||||
|
||||
/* Initialize the us_data structure with some useful info */
|
||||
ss->flags = flags;
|
||||
|
@ -1270,21 +1261,21 @@ int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,
|
|||
}
|
||||
|
||||
/* set the handler pointers based on the protocol */
|
||||
USB_STOR_PRINTF("Transport: ");
|
||||
debug("Transport: ");
|
||||
switch (ss->protocol) {
|
||||
case US_PR_CB:
|
||||
USB_STOR_PRINTF("Control/Bulk\n");
|
||||
debug("Control/Bulk\n");
|
||||
ss->transport = usb_stor_CB_transport;
|
||||
ss->transport_reset = usb_stor_CB_reset;
|
||||
break;
|
||||
|
||||
case US_PR_CBI:
|
||||
USB_STOR_PRINTF("Control/Bulk/Interrupt\n");
|
||||
debug("Control/Bulk/Interrupt\n");
|
||||
ss->transport = usb_stor_CB_transport;
|
||||
ss->transport_reset = usb_stor_CB_reset;
|
||||
break;
|
||||
case US_PR_BULK:
|
||||
USB_STOR_PRINTF("Bulk/Bulk/Bulk\n");
|
||||
debug("Bulk/Bulk/Bulk\n");
|
||||
ss->transport = usb_stor_BBB_transport;
|
||||
ss->transport_reset = usb_stor_BBB_reset;
|
||||
break;
|
||||
|
@ -1320,14 +1311,14 @@ int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,
|
|||
ss->irqinterval = iface->ep_desc[i].bInterval;
|
||||
}
|
||||
}
|
||||
USB_STOR_PRINTF("Endpoints In %d Out %d Int %d\n",
|
||||
ss->ep_in, ss->ep_out, ss->ep_int);
|
||||
debug("Endpoints In %d Out %d Int %d\n",
|
||||
ss->ep_in, ss->ep_out, ss->ep_int);
|
||||
|
||||
/* Do some basic sanity checks, and bail if we find a problem */
|
||||
if (usb_set_interface(dev, iface->desc.bInterfaceNumber, 0) ||
|
||||
!ss->ep_in || !ss->ep_out ||
|
||||
(ss->protocol == US_PR_CBI && ss->ep_int == 0)) {
|
||||
USB_STOR_PRINTF("Problems with device\n");
|
||||
debug("Problems with device\n");
|
||||
return 0;
|
||||
}
|
||||
/* set class specific stuff */
|
||||
|
@ -1366,7 +1357,7 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
|
|||
|
||||
dev_desc->target = dev->devnum;
|
||||
pccb->lun = dev_desc->lun;
|
||||
USB_STOR_PRINTF(" address %d\n", dev_desc->target);
|
||||
debug(" address %d\n", dev_desc->target);
|
||||
|
||||
if (usb_inquiry(pccb, ss))
|
||||
return -1;
|
||||
|
@ -1392,8 +1383,8 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
|
|||
usb_bin_fixup(dev->descriptor, (uchar *)dev_desc->vendor,
|
||||
(uchar *)dev_desc->product);
|
||||
#endif /* CONFIG_USB_BIN_FIXUP */
|
||||
USB_STOR_PRINTF("ISO Vers %X, Response Data %X\n", usb_stor_buf[2],
|
||||
usb_stor_buf[3]);
|
||||
debug("ISO Vers %X, Response Data %X\n", usb_stor_buf[2],
|
||||
usb_stor_buf[3]);
|
||||
if (usb_test_unit_ready(pccb, ss)) {
|
||||
printf("Device NOT ready\n"
|
||||
" Request Sense returned %02X %02X %02X\n",
|
||||
|
@ -1413,8 +1404,7 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
|
|||
cap[1] = 0x200;
|
||||
}
|
||||
ss->flags &= ~USB_READY;
|
||||
USB_STOR_PRINTF("Read Capacity returns: 0x%lx, 0x%lx\n", cap[0],
|
||||
cap[1]);
|
||||
debug("Read Capacity returns: 0x%lx, 0x%lx\n", cap[0], cap[1]);
|
||||
#if 0
|
||||
if (cap[0] > (0x200000 * 10)) /* greater than 10 GByte */
|
||||
cap[0] >>= 16;
|
||||
|
@ -1426,17 +1416,16 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
|
|||
cap[0] += 1;
|
||||
capacity = &cap[0];
|
||||
blksz = &cap[1];
|
||||
USB_STOR_PRINTF("Capacity = 0x%lx, blocksz = 0x%lx\n",
|
||||
*capacity, *blksz);
|
||||
debug("Capacity = 0x%lx, blocksz = 0x%lx\n", *capacity, *blksz);
|
||||
dev_desc->lba = *capacity;
|
||||
dev_desc->blksz = *blksz;
|
||||
dev_desc->log2blksz = LOG2(dev_desc->blksz);
|
||||
dev_desc->type = perq;
|
||||
USB_STOR_PRINTF(" address %d\n", dev_desc->target);
|
||||
USB_STOR_PRINTF("partype: %d\n", dev_desc->part_type);
|
||||
debug(" address %d\n", dev_desc->target);
|
||||
debug("partype: %d\n", dev_desc->part_type);
|
||||
|
||||
init_part(dev_desc);
|
||||
|
||||
USB_STOR_PRINTF("partype: %d\n", dev_desc->part_type);
|
||||
debug("partype: %d\n", dev_desc->part_type);
|
||||
return 1;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue