USB core: Allocate tmpbuf using dma_alloc
This needs to be dma save. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
95aea88175
commit
0c35d2210e
|
@ -299,12 +299,14 @@ static int usb_new_device(struct usb_device *dev)
|
|||
{
|
||||
int addr, err;
|
||||
int tmp;
|
||||
unsigned char tmpbuf[USB_BUFSIZ];
|
||||
void *buf;
|
||||
struct usb_device_descriptor *desc;
|
||||
int port = -1;
|
||||
struct usb_device *parent = dev->parent;
|
||||
unsigned short portstatus;
|
||||
|
||||
buf = dma_alloc(USB_BUFSIZ);
|
||||
|
||||
/* We still haven't set the Address yet */
|
||||
addr = dev->devnum;
|
||||
dev->devnum = 0;
|
||||
|
@ -322,7 +324,7 @@ static int usb_new_device(struct usb_device *dev)
|
|||
* the maxpacket size is 8 or 16 the device may be waiting to transmit
|
||||
* some more, or keeps on retransmitting the 8 byte header. */
|
||||
|
||||
desc = (struct usb_device_descriptor *)tmpbuf;
|
||||
desc = buf;
|
||||
dev->descriptor->bMaxPacketSize0 = 64; /* Start off at 64 bytes */
|
||||
/* Default to 64 byte max packet size */
|
||||
dev->maxpacketsize = PACKET_SIZE_64;
|
||||
|
@ -332,7 +334,7 @@ static int usb_new_device(struct usb_device *dev)
|
|||
err = usb_get_descriptor(dev, USB_DT_DEVICE, 0, desc, 64);
|
||||
if (err < 0) {
|
||||
USB_PRINTF("%s: usb_get_descriptor() failed with %d\n", __func__, err);
|
||||
return 1;
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
dev->descriptor->bMaxPacketSize0 = desc->bMaxPacketSize0;
|
||||
|
@ -349,14 +351,15 @@ static int usb_new_device(struct usb_device *dev)
|
|||
}
|
||||
if (port < 0) {
|
||||
printf("%s: cannot locate device's port.\n", __func__);
|
||||
return 1;
|
||||
err = -ENODEV;
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
/* reset the port for the second time */
|
||||
err = hub_port_reset(dev->parent, port, &portstatus);
|
||||
if (err < 0) {
|
||||
printf("\n Couldn't reset port %i\n", port);
|
||||
return 1;
|
||||
goto err_out;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -383,7 +386,7 @@ static int usb_new_device(struct usb_device *dev)
|
|||
if (err < 0) {
|
||||
printf("\n USB device not accepting new address " \
|
||||
"(error=%lX)\n", dev->status);
|
||||
return 1;
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
wait_ms(10); /* Let the SET_ADDRESS settle */
|
||||
|
@ -399,7 +402,7 @@ static int usb_new_device(struct usb_device *dev)
|
|||
else
|
||||
printf("USB device descriptor short read " \
|
||||
"(expected %i, got %i)\n", tmp, err);
|
||||
return 1;
|
||||
goto err_out;
|
||||
}
|
||||
/* correct le values */
|
||||
le16_to_cpus(&dev->descriptor->bcdUSB);
|
||||
|
@ -407,14 +410,14 @@ static int usb_new_device(struct usb_device *dev)
|
|||
le16_to_cpus(&dev->descriptor->idProduct);
|
||||
le16_to_cpus(&dev->descriptor->bcdDevice);
|
||||
/* only support for one config for now */
|
||||
usb_get_configuration_no(dev, &tmpbuf[0], 0);
|
||||
usb_parse_config(dev, &tmpbuf[0], 0);
|
||||
usb_get_configuration_no(dev, buf, 0);
|
||||
usb_parse_config(dev, buf, 0);
|
||||
usb_set_maxpacket(dev);
|
||||
/* we set the default configuration here */
|
||||
if (usb_set_configuration(dev, dev->config.bConfigurationValue)) {
|
||||
printf("failed to set default configuration " \
|
||||
"len %d, status %lX\n", dev->act_len, dev->status);
|
||||
return -1;
|
||||
goto err_out;
|
||||
}
|
||||
USB_PRINTF("new device: Mfr=%d, Product=%d, SerialNumber=%d\n",
|
||||
dev->descriptor->iManufacturer, dev->descriptor->iProduct,
|
||||
|
@ -441,7 +444,11 @@ static int usb_new_device(struct usb_device *dev)
|
|||
register_device(&dev->dev);
|
||||
list_add_tail(&dev->list, &usb_device_list);
|
||||
|
||||
return 0;
|
||||
err = 0;
|
||||
|
||||
err_out:
|
||||
dma_free(buf);
|
||||
return err;
|
||||
}
|
||||
|
||||
static struct usb_device *usb_alloc_new_device(void)
|
||||
|
|
Loading…
Reference in New Issue