mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-25 23:06:15 +00:00
USB: Align buffers at cacheline
This avoids cache-alignment warnings shown in console when a usb command is entered. Whenever X bytes of unaligned buffer is invalidated, arm core invalidates X + Y bytes as per the cache line size and throws these warnings. Signed-off-by: Puneet Saxena <puneets@nvidia.com> Signed-off-by: Marek Vasut <marex@denx.de>
This commit is contained in:
parent
66cf64107b
commit
f57661394a
6 changed files with 61 additions and 58 deletions
|
@ -150,7 +150,8 @@ void usb_display_class_sub(unsigned char dclass, unsigned char subclass,
|
||||||
|
|
||||||
void usb_display_string(struct usb_device *dev, int index)
|
void usb_display_string(struct usb_device *dev, int index)
|
||||||
{
|
{
|
||||||
char buffer[256];
|
ALLOC_CACHE_ALIGN_BUFFER(char, buffer, 256);
|
||||||
|
|
||||||
if (index != 0) {
|
if (index != 0) {
|
||||||
if (usb_string(dev, index, &buffer[0], 256) > 0)
|
if (usb_string(dev, index, &buffer[0], 256) > 0)
|
||||||
printf("String: \"%s\"", buffer);
|
printf("String: \"%s\"", buffer);
|
||||||
|
|
22
common/usb.c
22
common/usb.c
|
@ -170,7 +170,7 @@ int usb_control_msg(struct usb_device *dev, unsigned int pipe,
|
||||||
unsigned short value, unsigned short index,
|
unsigned short value, unsigned short index,
|
||||||
void *data, unsigned short size, int timeout)
|
void *data, unsigned short size, int timeout)
|
||||||
{
|
{
|
||||||
struct devrequest setup_packet;
|
ALLOC_CACHE_ALIGN_BUFFER(struct devrequest, setup_packet, 1);
|
||||||
|
|
||||||
if ((timeout == 0) && (!asynch_allowed)) {
|
if ((timeout == 0) && (!asynch_allowed)) {
|
||||||
/* request for a asynch control pipe is not allowed */
|
/* request for a asynch control pipe is not allowed */
|
||||||
|
@ -178,17 +178,17 @@ int usb_control_msg(struct usb_device *dev, unsigned int pipe,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set setup command */
|
/* set setup command */
|
||||||
setup_packet.requesttype = requesttype;
|
setup_packet->requesttype = requesttype;
|
||||||
setup_packet.request = request;
|
setup_packet->request = request;
|
||||||
setup_packet.value = cpu_to_le16(value);
|
setup_packet->value = cpu_to_le16(value);
|
||||||
setup_packet.index = cpu_to_le16(index);
|
setup_packet->index = cpu_to_le16(index);
|
||||||
setup_packet.length = cpu_to_le16(size);
|
setup_packet->length = cpu_to_le16(size);
|
||||||
USB_PRINTF("usb_control_msg: request: 0x%X, requesttype: 0x%X, " \
|
USB_PRINTF("usb_control_msg: request: 0x%X, requesttype: 0x%X, " \
|
||||||
"value 0x%X index 0x%X length 0x%X\n",
|
"value 0x%X index 0x%X length 0x%X\n",
|
||||||
request, requesttype, value, index, size);
|
request, requesttype, value, index, size);
|
||||||
dev->status = USB_ST_NOT_PROC; /*not yet processed */
|
dev->status = USB_ST_NOT_PROC; /*not yet processed */
|
||||||
|
|
||||||
submit_control_msg(dev, pipe, data, size, &setup_packet);
|
submit_control_msg(dev, pipe, data, size, setup_packet);
|
||||||
if (timeout == 0)
|
if (timeout == 0)
|
||||||
return (int)size;
|
return (int)size;
|
||||||
|
|
||||||
|
@ -682,7 +682,7 @@ static int usb_string_sub(struct usb_device *dev, unsigned int langid,
|
||||||
*/
|
*/
|
||||||
int usb_string(struct usb_device *dev, int index, char *buf, size_t size)
|
int usb_string(struct usb_device *dev, int index, char *buf, size_t size)
|
||||||
{
|
{
|
||||||
unsigned char mybuf[USB_BUFSIZ];
|
ALLOC_CACHE_ALIGN_BUFFER(unsigned char, mybuf, USB_BUFSIZ);
|
||||||
unsigned char *tbuf;
|
unsigned char *tbuf;
|
||||||
int err;
|
int err;
|
||||||
unsigned int u, idx;
|
unsigned int u, idx;
|
||||||
|
@ -782,7 +782,7 @@ int usb_new_device(struct usb_device *dev)
|
||||||
{
|
{
|
||||||
int addr, err;
|
int addr, err;
|
||||||
int tmp;
|
int tmp;
|
||||||
unsigned char tmpbuf[USB_BUFSIZ];
|
ALLOC_CACHE_ALIGN_BUFFER(unsigned char, tmpbuf, USB_BUFSIZ);
|
||||||
|
|
||||||
/* We still haven't set the Address yet */
|
/* We still haven't set the Address yet */
|
||||||
addr = dev->devnum;
|
addr = dev->devnum;
|
||||||
|
@ -909,8 +909,8 @@ int usb_new_device(struct usb_device *dev)
|
||||||
le16_to_cpus(&dev->descriptor.idProduct);
|
le16_to_cpus(&dev->descriptor.idProduct);
|
||||||
le16_to_cpus(&dev->descriptor.bcdDevice);
|
le16_to_cpus(&dev->descriptor.bcdDevice);
|
||||||
/* only support for one config for now */
|
/* only support for one config for now */
|
||||||
usb_get_configuration_no(dev, &tmpbuf[0], 0);
|
usb_get_configuration_no(dev, tmpbuf, 0);
|
||||||
usb_parse_config(dev, &tmpbuf[0], 0);
|
usb_parse_config(dev, tmpbuf, 0);
|
||||||
usb_set_maxpacket(dev);
|
usb_set_maxpacket(dev);
|
||||||
/* we set the default configuration here */
|
/* we set the default configuration here */
|
||||||
if (usb_set_configuration(dev, dev->config.desc.bConfigurationValue)) {
|
if (usb_set_configuration(dev, dev->config.desc.bConfigurationValue)) {
|
||||||
|
|
|
@ -153,7 +153,7 @@ int hub_port_reset(struct usb_device *dev, int port,
|
||||||
unsigned short *portstat)
|
unsigned short *portstat)
|
||||||
{
|
{
|
||||||
int tries;
|
int tries;
|
||||||
struct usb_port_status portsts;
|
ALLOC_CACHE_ALIGN_BUFFER(struct usb_port_status, portsts, 1);
|
||||||
unsigned short portstatus, portchange;
|
unsigned short portstatus, portchange;
|
||||||
|
|
||||||
USB_HUB_PRINTF("hub_port_reset: resetting port %d...\n", port);
|
USB_HUB_PRINTF("hub_port_reset: resetting port %d...\n", port);
|
||||||
|
@ -162,13 +162,13 @@ int hub_port_reset(struct usb_device *dev, int port,
|
||||||
usb_set_port_feature(dev, port + 1, USB_PORT_FEAT_RESET);
|
usb_set_port_feature(dev, port + 1, USB_PORT_FEAT_RESET);
|
||||||
mdelay(200);
|
mdelay(200);
|
||||||
|
|
||||||
if (usb_get_port_status(dev, port + 1, &portsts) < 0) {
|
if (usb_get_port_status(dev, port + 1, portsts) < 0) {
|
||||||
USB_HUB_PRINTF("get_port_status failed status %lX\n",
|
USB_HUB_PRINTF("get_port_status failed status %lX\n",
|
||||||
dev->status);
|
dev->status);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
portstatus = le16_to_cpu(portsts.wPortStatus);
|
portstatus = le16_to_cpu(portsts->wPortStatus);
|
||||||
portchange = le16_to_cpu(portsts.wPortChange);
|
portchange = le16_to_cpu(portsts->wPortChange);
|
||||||
|
|
||||||
USB_HUB_PRINTF("portstatus %x, change %x, %s\n",
|
USB_HUB_PRINTF("portstatus %x, change %x, %s\n",
|
||||||
portstatus, portchange,
|
portstatus, portchange,
|
||||||
|
@ -206,19 +206,19 @@ int hub_port_reset(struct usb_device *dev, int port,
|
||||||
void usb_hub_port_connect_change(struct usb_device *dev, int port)
|
void usb_hub_port_connect_change(struct usb_device *dev, int port)
|
||||||
{
|
{
|
||||||
struct usb_device *usb;
|
struct usb_device *usb;
|
||||||
struct usb_port_status portsts;
|
ALLOC_CACHE_ALIGN_BUFFER(struct usb_port_status, portsts, 1);
|
||||||
unsigned short portstatus;
|
unsigned short portstatus;
|
||||||
|
|
||||||
/* Check status */
|
/* Check status */
|
||||||
if (usb_get_port_status(dev, port + 1, &portsts) < 0) {
|
if (usb_get_port_status(dev, port + 1, portsts) < 0) {
|
||||||
USB_HUB_PRINTF("get_port_status failed\n");
|
USB_HUB_PRINTF("get_port_status failed\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
portstatus = le16_to_cpu(portsts.wPortStatus);
|
portstatus = le16_to_cpu(portsts->wPortStatus);
|
||||||
USB_HUB_PRINTF("portstatus %x, change %x, %s\n",
|
USB_HUB_PRINTF("portstatus %x, change %x, %s\n",
|
||||||
portstatus,
|
portstatus,
|
||||||
le16_to_cpu(portsts.wPortChange),
|
le16_to_cpu(portsts->wPortChange),
|
||||||
portspeed(portstatus));
|
portspeed(portstatus));
|
||||||
|
|
||||||
/* Clear the connection change status */
|
/* Clear the connection change status */
|
||||||
|
@ -267,7 +267,8 @@ void usb_hub_port_connect_change(struct usb_device *dev, int port)
|
||||||
static int usb_hub_configure(struct usb_device *dev)
|
static int usb_hub_configure(struct usb_device *dev)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
unsigned char buffer[USB_BUFSIZ], *bitmap;
|
ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, USB_BUFSIZ);
|
||||||
|
unsigned char *bitmap;
|
||||||
struct usb_hub_descriptor *descriptor;
|
struct usb_hub_descriptor *descriptor;
|
||||||
struct usb_hub_device *hub;
|
struct usb_hub_device *hub;
|
||||||
#ifdef USB_HUB_DEBUG
|
#ifdef USB_HUB_DEBUG
|
||||||
|
@ -389,16 +390,16 @@ static int usb_hub_configure(struct usb_device *dev)
|
||||||
usb_hub_power_on(hub);
|
usb_hub_power_on(hub);
|
||||||
|
|
||||||
for (i = 0; i < dev->maxchild; i++) {
|
for (i = 0; i < dev->maxchild; i++) {
|
||||||
struct usb_port_status portsts;
|
ALLOC_CACHE_ALIGN_BUFFER(struct usb_port_status, portsts, 1);
|
||||||
unsigned short portstatus, portchange;
|
unsigned short portstatus, portchange;
|
||||||
|
|
||||||
if (usb_get_port_status(dev, i + 1, &portsts) < 0) {
|
if (usb_get_port_status(dev, i + 1, portsts) < 0) {
|
||||||
USB_HUB_PRINTF("get_port_status failed\n");
|
USB_HUB_PRINTF("get_port_status failed\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
portstatus = le16_to_cpu(portsts.wPortStatus);
|
portstatus = le16_to_cpu(portsts->wPortStatus);
|
||||||
portchange = le16_to_cpu(portsts.wPortChange);
|
portchange = le16_to_cpu(portsts->wPortChange);
|
||||||
USB_HUB_PRINTF("Port %d Status %X Change %X\n",
|
USB_HUB_PRINTF("Port %d Status %X Change %X\n",
|
||||||
i + 1, portstatus, portchange);
|
i + 1, portstatus, portchange);
|
||||||
|
|
||||||
|
|
|
@ -79,8 +79,7 @@ static const unsigned char us_direction[256/8] = {
|
||||||
};
|
};
|
||||||
#define US_DIRECTION(x) ((us_direction[x>>3] >> (x & 7)) & 1)
|
#define US_DIRECTION(x) ((us_direction[x>>3] >> (x & 7)) & 1)
|
||||||
|
|
||||||
static unsigned char usb_stor_buf[512];
|
static ccb usb_ccb __attribute__((aligned(ARCH_DMA_MINALIGN)));
|
||||||
static ccb usb_ccb;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CBI style
|
* CBI style
|
||||||
|
@ -210,17 +209,17 @@ int usb_stor_info(void)
|
||||||
static unsigned int usb_get_max_lun(struct us_data *us)
|
static unsigned int usb_get_max_lun(struct us_data *us)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
unsigned char result;
|
ALLOC_CACHE_ALIGN_BUFFER(unsigned char, result, 1);
|
||||||
len = usb_control_msg(us->pusb_dev,
|
len = usb_control_msg(us->pusb_dev,
|
||||||
usb_rcvctrlpipe(us->pusb_dev, 0),
|
usb_rcvctrlpipe(us->pusb_dev, 0),
|
||||||
US_BBB_GET_MAX_LUN,
|
US_BBB_GET_MAX_LUN,
|
||||||
USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_IN,
|
USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_IN,
|
||||||
0, us->ifnum,
|
0, us->ifnum,
|
||||||
&result, sizeof(result),
|
result, sizeof(char),
|
||||||
USB_CNTL_TIMEOUT * 5);
|
USB_CNTL_TIMEOUT * 5);
|
||||||
USB_STOR_PRINTF("Get Max LUN -> len = %i, result = %i\n",
|
USB_STOR_PRINTF("Get Max LUN -> len = %i, result = %i\n",
|
||||||
len, (int) result);
|
len, (int) *result);
|
||||||
return (len > 0) ? result : 0;
|
return (len > 0) ? *result : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
@ -233,9 +232,6 @@ int usb_stor_scan(int mode)
|
||||||
unsigned char i;
|
unsigned char i;
|
||||||
struct usb_device *dev;
|
struct usb_device *dev;
|
||||||
|
|
||||||
/* GJ */
|
|
||||||
memset(usb_stor_buf, 0, sizeof(usb_stor_buf));
|
|
||||||
|
|
||||||
if (mode == 1)
|
if (mode == 1)
|
||||||
printf(" scanning bus for storage devices... ");
|
printf(" scanning bus for storage devices... ");
|
||||||
|
|
||||||
|
@ -499,7 +495,7 @@ int usb_stor_BBB_comdat(ccb *srb, struct us_data *us)
|
||||||
int actlen;
|
int actlen;
|
||||||
int dir_in;
|
int dir_in;
|
||||||
unsigned int pipe;
|
unsigned int pipe;
|
||||||
umass_bbb_cbw_t cbw;
|
ALLOC_CACHE_ALIGN_BUFFER(umass_bbb_cbw_t, cbw, 1);
|
||||||
|
|
||||||
dir_in = US_DIRECTION(srb->cmd[0]);
|
dir_in = US_DIRECTION(srb->cmd[0]);
|
||||||
|
|
||||||
|
@ -522,16 +518,16 @@ int usb_stor_BBB_comdat(ccb *srb, struct us_data *us)
|
||||||
/* always OUT to the ep */
|
/* always OUT to the ep */
|
||||||
pipe = usb_sndbulkpipe(us->pusb_dev, us->ep_out);
|
pipe = usb_sndbulkpipe(us->pusb_dev, us->ep_out);
|
||||||
|
|
||||||
cbw.dCBWSignature = cpu_to_le32(CBWSIGNATURE);
|
cbw->dCBWSignature = cpu_to_le32(CBWSIGNATURE);
|
||||||
cbw.dCBWTag = cpu_to_le32(CBWTag++);
|
cbw->dCBWTag = cpu_to_le32(CBWTag++);
|
||||||
cbw.dCBWDataTransferLength = cpu_to_le32(srb->datalen);
|
cbw->dCBWDataTransferLength = cpu_to_le32(srb->datalen);
|
||||||
cbw.bCBWFlags = (dir_in ? CBWFLAGS_IN : CBWFLAGS_OUT);
|
cbw->bCBWFlags = (dir_in ? CBWFLAGS_IN : CBWFLAGS_OUT);
|
||||||
cbw.bCBWLUN = srb->lun;
|
cbw->bCBWLUN = srb->lun;
|
||||||
cbw.bCDBLength = srb->cmdlen;
|
cbw->bCDBLength = srb->cmdlen;
|
||||||
/* copy the command data into the CBW command data buffer */
|
/* copy the command data into the CBW command data buffer */
|
||||||
/* DST SRC LEN!!! */
|
/* DST SRC LEN!!! */
|
||||||
memcpy(cbw.CBWCDB, srb->cmd, srb->cmdlen);
|
memcpy(cbw->CBWCDB, srb->cmd, srb->cmdlen);
|
||||||
result = usb_bulk_msg(us->pusb_dev, pipe, &cbw, UMASS_BBB_CBW_SIZE,
|
result = usb_bulk_msg(us->pusb_dev, pipe, cbw, UMASS_BBB_CBW_SIZE,
|
||||||
&actlen, USB_CNTL_TIMEOUT * 5);
|
&actlen, USB_CNTL_TIMEOUT * 5);
|
||||||
if (result < 0)
|
if (result < 0)
|
||||||
USB_STOR_PRINTF("usb_stor_BBB_comdat:usb_bulk_msg error\n");
|
USB_STOR_PRINTF("usb_stor_BBB_comdat:usb_bulk_msg error\n");
|
||||||
|
@ -675,7 +671,7 @@ int usb_stor_BBB_transport(ccb *srb, struct us_data *us)
|
||||||
int dir_in;
|
int dir_in;
|
||||||
int actlen, data_actlen;
|
int actlen, data_actlen;
|
||||||
unsigned int pipe, pipein, pipeout;
|
unsigned int pipe, pipein, pipeout;
|
||||||
umass_bbb_csw_t csw;
|
ALLOC_CACHE_ALIGN_BUFFER(umass_bbb_csw_t, csw, 1);
|
||||||
#ifdef BBB_XPORT_TRACE
|
#ifdef BBB_XPORT_TRACE
|
||||||
unsigned char *ptr;
|
unsigned char *ptr;
|
||||||
int index;
|
int index;
|
||||||
|
@ -733,7 +729,7 @@ st:
|
||||||
retry = 0;
|
retry = 0;
|
||||||
again:
|
again:
|
||||||
USB_STOR_PRINTF("STATUS phase\n");
|
USB_STOR_PRINTF("STATUS phase\n");
|
||||||
result = usb_bulk_msg(us->pusb_dev, pipein, &csw, UMASS_BBB_CSW_SIZE,
|
result = usb_bulk_msg(us->pusb_dev, pipein, csw, UMASS_BBB_CSW_SIZE,
|
||||||
&actlen, USB_CNTL_TIMEOUT*5);
|
&actlen, USB_CNTL_TIMEOUT*5);
|
||||||
|
|
||||||
/* special handling of STALL in STATUS phase */
|
/* special handling of STALL in STATUS phase */
|
||||||
|
@ -753,28 +749,28 @@ again:
|
||||||
return USB_STOR_TRANSPORT_FAILED;
|
return USB_STOR_TRANSPORT_FAILED;
|
||||||
}
|
}
|
||||||
#ifdef BBB_XPORT_TRACE
|
#ifdef BBB_XPORT_TRACE
|
||||||
ptr = (unsigned char *)&csw;
|
ptr = (unsigned char *)csw;
|
||||||
for (index = 0; index < UMASS_BBB_CSW_SIZE; index++)
|
for (index = 0; index < UMASS_BBB_CSW_SIZE; index++)
|
||||||
printf("ptr[%d] %#x ", index, ptr[index]);
|
printf("ptr[%d] %#x ", index, ptr[index]);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
#endif
|
#endif
|
||||||
/* misuse pipe to get the residue */
|
/* misuse pipe to get the residue */
|
||||||
pipe = le32_to_cpu(csw.dCSWDataResidue);
|
pipe = le32_to_cpu(csw->dCSWDataResidue);
|
||||||
if (pipe == 0 && srb->datalen != 0 && srb->datalen - data_actlen != 0)
|
if (pipe == 0 && srb->datalen != 0 && srb->datalen - data_actlen != 0)
|
||||||
pipe = srb->datalen - data_actlen;
|
pipe = srb->datalen - data_actlen;
|
||||||
if (CSWSIGNATURE != le32_to_cpu(csw.dCSWSignature)) {
|
if (CSWSIGNATURE != le32_to_cpu(csw->dCSWSignature)) {
|
||||||
USB_STOR_PRINTF("!CSWSIGNATURE\n");
|
USB_STOR_PRINTF("!CSWSIGNATURE\n");
|
||||||
usb_stor_BBB_reset(us);
|
usb_stor_BBB_reset(us);
|
||||||
return USB_STOR_TRANSPORT_FAILED;
|
return USB_STOR_TRANSPORT_FAILED;
|
||||||
} else if ((CBWTag - 1) != le32_to_cpu(csw.dCSWTag)) {
|
} else if ((CBWTag - 1) != le32_to_cpu(csw->dCSWTag)) {
|
||||||
USB_STOR_PRINTF("!Tag\n");
|
USB_STOR_PRINTF("!Tag\n");
|
||||||
usb_stor_BBB_reset(us);
|
usb_stor_BBB_reset(us);
|
||||||
return USB_STOR_TRANSPORT_FAILED;
|
return USB_STOR_TRANSPORT_FAILED;
|
||||||
} else if (csw.bCSWStatus > CSWSTATUS_PHASE) {
|
} else if (csw->bCSWStatus > CSWSTATUS_PHASE) {
|
||||||
USB_STOR_PRINTF(">PHASE\n");
|
USB_STOR_PRINTF(">PHASE\n");
|
||||||
usb_stor_BBB_reset(us);
|
usb_stor_BBB_reset(us);
|
||||||
return USB_STOR_TRANSPORT_FAILED;
|
return USB_STOR_TRANSPORT_FAILED;
|
||||||
} else if (csw.bCSWStatus == CSWSTATUS_PHASE) {
|
} else if (csw->bCSWStatus == CSWSTATUS_PHASE) {
|
||||||
USB_STOR_PRINTF("=PHASE\n");
|
USB_STOR_PRINTF("=PHASE\n");
|
||||||
usb_stor_BBB_reset(us);
|
usb_stor_BBB_reset(us);
|
||||||
return USB_STOR_TRANSPORT_FAILED;
|
return USB_STOR_TRANSPORT_FAILED;
|
||||||
|
@ -782,7 +778,7 @@ again:
|
||||||
USB_STOR_PRINTF("transferred %dB instead of %ldB\n",
|
USB_STOR_PRINTF("transferred %dB instead of %ldB\n",
|
||||||
data_actlen, srb->datalen);
|
data_actlen, srb->datalen);
|
||||||
return USB_STOR_TRANSPORT_FAILED;
|
return USB_STOR_TRANSPORT_FAILED;
|
||||||
} else if (csw.bCSWStatus == CSWSTATUS_FAILED) {
|
} else if (csw->bCSWStatus == CSWSTATUS_FAILED) {
|
||||||
USB_STOR_PRINTF("FAILED\n");
|
USB_STOR_PRINTF("FAILED\n");
|
||||||
return USB_STOR_TRANSPORT_FAILED;
|
return USB_STOR_TRANSPORT_FAILED;
|
||||||
}
|
}
|
||||||
|
@ -1343,7 +1339,8 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
|
||||||
block_dev_desc_t *dev_desc)
|
block_dev_desc_t *dev_desc)
|
||||||
{
|
{
|
||||||
unsigned char perq, modi;
|
unsigned char perq, modi;
|
||||||
unsigned long cap[2];
|
ALLOC_CACHE_ALIGN_BUFFER(unsigned long, cap, 2);
|
||||||
|
ALLOC_CACHE_ALIGN_BUFFER(unsigned char, usb_stor_buf, 36);
|
||||||
unsigned long *capacity, *blksz;
|
unsigned long *capacity, *blksz;
|
||||||
ccb *pccb = &usb_ccb;
|
ccb *pccb = &usb_ccb;
|
||||||
|
|
||||||
|
@ -1367,9 +1364,9 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
|
||||||
/* drive is removable */
|
/* drive is removable */
|
||||||
dev_desc->removable = 1;
|
dev_desc->removable = 1;
|
||||||
}
|
}
|
||||||
memcpy(&dev_desc->vendor[0], &usb_stor_buf[8], 8);
|
memcpy(&dev_desc->vendor[0], (const void *) &usb_stor_buf[8], 8);
|
||||||
memcpy(&dev_desc->product[0], &usb_stor_buf[16], 16);
|
memcpy(&dev_desc->product[0], (const void *) &usb_stor_buf[16], 16);
|
||||||
memcpy(&dev_desc->revision[0], &usb_stor_buf[32], 4);
|
memcpy(&dev_desc->revision[0], (const void *) &usb_stor_buf[32], 4);
|
||||||
dev_desc->vendor[8] = 0;
|
dev_desc->vendor[8] = 0;
|
||||||
dev_desc->product[16] = 0;
|
dev_desc->product[16] = 0;
|
||||||
dev_desc->revision[4] = 0;
|
dev_desc->revision[4] = 0;
|
||||||
|
|
|
@ -26,7 +26,9 @@
|
||||||
|
|
||||||
typedef struct SCSI_cmd_block{
|
typedef struct SCSI_cmd_block{
|
||||||
unsigned char cmd[16]; /* command */
|
unsigned char cmd[16]; /* command */
|
||||||
unsigned char sense_buf[64]; /* for request sense */
|
/* for request sense */
|
||||||
|
unsigned char sense_buf[64]
|
||||||
|
__attribute__((aligned(ARCH_DMA_MINALIGN)));
|
||||||
unsigned char status; /* SCSI Status */
|
unsigned char status; /* SCSI Status */
|
||||||
unsigned char target; /* Target ID */
|
unsigned char target; /* Target ID */
|
||||||
unsigned char lun; /* Target LUN */
|
unsigned char lun; /* Target LUN */
|
||||||
|
|
|
@ -109,7 +109,9 @@ struct usb_device {
|
||||||
int epmaxpacketout[16]; /* OUTput endpoint specific maximums */
|
int epmaxpacketout[16]; /* OUTput endpoint specific maximums */
|
||||||
|
|
||||||
int configno; /* selected config number */
|
int configno; /* selected config number */
|
||||||
struct usb_device_descriptor descriptor; /* Device Descriptor */
|
/* Device Descriptor */
|
||||||
|
struct usb_device_descriptor descriptor
|
||||||
|
__attribute__((aligned(ARCH_DMA_MINALIGN)));
|
||||||
struct usb_config config; /* config descriptor */
|
struct usb_config config; /* config descriptor */
|
||||||
|
|
||||||
int have_langid; /* whether string_langid is valid yet */
|
int have_langid; /* whether string_langid is valid yet */
|
||||||
|
|
Loading…
Add table
Reference in a new issue