aboutsummaryrefslogtreecommitdiff
path: root/grub-core/disk/usbms.c
diff options
context:
space:
mode:
Diffstat (limited to 'grub-core/disk/usbms.c')
-rw-r--r--grub-core/disk/usbms.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/grub-core/disk/usbms.c b/grub-core/disk/usbms.c
index 50f0caf..da01be3 100644
--- a/grub-core/disk/usbms.c
+++ b/grub-core/disk/usbms.c
@@ -151,6 +151,8 @@ grub_usbms_attach (grub_usb_device_t usbdev, int configno, int interfno)
unsigned curnum;
grub_usb_err_t err = GRUB_ERR_NONE;
+ grub_boot_time ("Attaching USB mass storage");
+
if (first_available_slot == ARRAY_SIZE (grub_usbms_devices))
return 0;
@@ -246,6 +248,8 @@ grub_usbms_attach (grub_usb_device_t usbdev, int configno, int interfno)
usbdev->config[configno].interf[interfno].detach_hook = grub_usbms_detach;
+ grub_boot_time ("Attached USB mass storage");
+
#if 0 /* All this part should be probably deleted.
* This make trouble on some devices if they are not in
* Phase Error state - and there they should be not in such state...
@@ -273,7 +277,7 @@ grub_usbms_iterate (grub_scsi_dev_iterate_hook_t hook, void *hook_data,
if (pull != GRUB_DISK_PULL_NONE)
return 0;
- grub_usb_poll_devices ();
+ grub_usb_poll_devices (1);
for (i = 0; i < ARRAY_SIZE (grub_usbms_devices); i++)
if (grub_usbms_devices[i])
@@ -326,7 +330,7 @@ grub_usbms_transfer_bo (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd,
/* Write the request.
* XXX: Error recovery is maybe still not fully correct. */
- err = grub_usb_bulk_write (dev->dev, dev->out->endp_addr,
+ err = grub_usb_bulk_write (dev->dev, dev->out,
sizeof (cbw), (char *) &cbw);
if (err)
{
@@ -341,7 +345,7 @@ grub_usbms_transfer_bo (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd,
/* Read/write the data, (maybe) according to specification. */
if (size && (read_write == 0))
{
- err = grub_usb_bulk_read (dev->dev, dev->in->endp_addr, size, buf);
+ err = grub_usb_bulk_read (dev->dev, dev->in, size, buf);
grub_dprintf ("usb", "read: %d %d\n", err, GRUB_USB_ERR_STALL);
if (err)
{
@@ -362,7 +366,7 @@ grub_usbms_transfer_bo (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd,
}
else if (size)
{
- err = grub_usb_bulk_write (dev->dev, dev->out->endp_addr, size, buf);
+ err = grub_usb_bulk_write (dev->dev, dev->out, size, buf);
grub_dprintf ("usb", "write: %d %d\n", err, GRUB_USB_ERR_STALL);
grub_dprintf ("usb", "First 16 bytes of sent data:\n %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
buf[ 0], buf[ 1], buf[ 2], buf[ 3],
@@ -388,12 +392,12 @@ grub_usbms_transfer_bo (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd,
/* Read the status - (maybe) according to specification. */
CheckCSW:
- errCSW = grub_usb_bulk_read (dev->dev, dev->in->endp_addr,
+ errCSW = grub_usb_bulk_read (dev->dev, dev->in,
sizeof (status), (char *) &status);
if (errCSW)
{
grub_usb_clear_halt (dev->dev, dev->in->endp_addr);
- errCSW = grub_usb_bulk_read (dev->dev, dev->in->endp_addr,
+ errCSW = grub_usb_bulk_read (dev->dev, dev->in,
sizeof (status), (char *) &status);
if (errCSW)
{ /* Bulk-only reset device. */
@@ -476,7 +480,7 @@ grub_usbms_transfer_cbi (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd,
else if (dev->protocol == GRUB_USBMS_PROTOCOL_CBI)
{
/* Try to get status from interrupt pipe */
- err = grub_usb_bulk_read (dev->dev, dev->intrpt->endp_addr,
+ err = grub_usb_bulk_read (dev->dev, dev->intrpt,
2, (char*)&status);
grub_dprintf ("usb", "CBI cmdcb setup status: err=%d, status=0x%x\n", err, status);
}
@@ -487,7 +491,7 @@ grub_usbms_transfer_cbi (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd,
/* Read/write the data, (maybe) according to specification. */
if (size && (read_write == 0))
{
- err = grub_usb_bulk_read (dev->dev, dev->in->endp_addr, size, buf);
+ err = grub_usb_bulk_read (dev->dev, dev->in, size, buf);
grub_dprintf ("usb", "read: %d\n", err);
if (err)
{
@@ -498,7 +502,7 @@ grub_usbms_transfer_cbi (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd,
}
else if (size)
{
- err = grub_usb_bulk_write (dev->dev, dev->out->endp_addr, size, buf);
+ err = grub_usb_bulk_write (dev->dev, dev->out, size, buf);
grub_dprintf ("usb", "write: %d\n", err);
if (err)
{
@@ -517,7 +521,7 @@ grub_usbms_transfer_cbi (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd,
* (we do not it yet) - ? */
if (dev->protocol == GRUB_USBMS_PROTOCOL_CBI)
{ /* Check status in interrupt pipe */
- err = grub_usb_bulk_read (dev->dev, dev->intrpt->endp_addr,
+ err = grub_usb_bulk_read (dev->dev, dev->intrpt,
2, (char*)&status);
grub_dprintf ("usb", "read status: %d\n", err);
if (err)
@@ -607,7 +611,8 @@ grub_usbms_open (int id, int devnum, struct grub_scsi *scsi)
return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
"not USB Mass Storage device");
- grub_usb_poll_devices ();
+ if (!grub_usbms_devices[devnum])
+ grub_usb_poll_devices (1);
if (!grub_usbms_devices[devnum])
return grub_error (GRUB_ERR_UNKNOWN_DEVICE,