mirror of
https://github.com/apache/nuttx.git
synced 2026-09-22 14:41:29 +08:00
Add bugfixes recommended by Sheref Younan
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3737 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
@@ -1833,5 +1833,11 @@
|
||||
|
||||
* drivers/mtd/ramtron.c, net/net_checksd.c, fs/fs_fdopen.c, and include/nuttx/mii.h:
|
||||
Several structural changes made to get a clean compile under the ez80 ZDS-II
|
||||
toolchain (no design changes).
|
||||
toolchain (no design changes).
|
||||
* drivers/usbhost/usbhost_storage.c: Incorpated bugfixes reported by Sheref H.
|
||||
Younan: (1) Read capacity logic read largest block, not the number of blocks
|
||||
and was, therefore, off by one, and (2) Some devices stall of get Max LUN request
|
||||
if they support only a single LUN. Logic now assumes a single LUN if the get
|
||||
Max LUN request fails.
|
||||
|
||||
|
||||
|
||||
@@ -669,6 +669,7 @@ static inline int usbhost_maxlunreq(FAR struct usbhost_state_s *priv)
|
||||
{
|
||||
FAR struct usb_ctrlreq_s *req = (FAR struct usb_ctrlreq_s *)priv->tbuffer;
|
||||
DEBUGASSERT(priv && priv->tbuffer);
|
||||
int ret;
|
||||
|
||||
/* Request maximum logical unit number. NOTE: On an IN transaction, The
|
||||
* req and buffer pointers passed to DRVR_CTRLIN may refer to the same
|
||||
@@ -680,7 +681,17 @@ static inline int usbhost_maxlunreq(FAR struct usbhost_state_s *priv)
|
||||
req->type = USB_DIR_IN|USB_REQ_TYPE_CLASS|USB_REQ_RECIPIENT_INTERFACE;
|
||||
req->req = USBSTRG_REQ_GETMAXLUN;
|
||||
usbhost_putle16(req->len, 1);
|
||||
return DRVR_CTRLIN(priv->drvr, req, priv->tbuffer);
|
||||
|
||||
ret = DRVR_CTRLIN(priv->drvr, req, priv->tbuffer);
|
||||
if (ret != OK)
|
||||
{
|
||||
/* Devices that do not support multiple LUNs may stall this command.
|
||||
* On a failure, a single LUN is assumed.
|
||||
*/
|
||||
|
||||
*(priv->tbuffer) = 0;
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
||||
static inline int usbhost_testunitready(FAR struct usbhost_state_s *priv)
|
||||
@@ -788,7 +799,7 @@ static inline int usbhost_readcapacity(FAR struct usbhost_state_s *priv)
|
||||
/* Save the capacity information */
|
||||
|
||||
resp = (FAR struct scsiresp_readcapacity10_s *)priv->tbuffer;
|
||||
priv->nblocks = usbhost_getbe32(resp->lba);
|
||||
priv->nblocks = usbhost_getbe32(resp->lba) + 1;
|
||||
priv->blocksize = usbhost_getbe32(resp->blklen);
|
||||
|
||||
/* Receive the CSW */
|
||||
|
||||
Reference in New Issue
Block a user