]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Error handling refinement at UsbIoResetPort() to avoid device state machine getting...
authorerictian <erictian@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 25 Aug 2011 05:13:22 +0000 (05:13 +0000)
committererictian <erictian@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 25 Aug 2011 05:13:22 +0000 (05:13 +0000)
Signed-off-by: erictian
Reviewed-by: niruiyu
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12204 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBus.c

index b592913bd3b2e80bc0a51437dcfbd7cb13cf3dc3..c3a9c734b88a8b42efe9ab48f53e73d065dc50db 100644 (file)
@@ -818,7 +818,6 @@ UsbIoPortReset (
   USB_INTERFACE           *UsbIf;\r
   USB_INTERFACE           *HubIf;\r
   USB_DEVICE              *Dev;\r
-  UINT8                   Address;\r
   EFI_TPL                 OldTpl;\r
   EFI_STATUS              Status;\r
 \r
@@ -843,27 +842,26 @@ UsbIoPortReset (
   }\r
 \r
   //\r
-  // Reset the device to its current address. The device now has a\r
-  // address of ZERO, so need to set Dev->Address to zero first for\r
-  // host to communicate with the device\r
+  // Reset the device to its current address. The device now has an address\r
+  // of ZERO after port reset, so need to set Dev->Address to the device again for\r
+  // host to communicate with it.\r
   //\r
-  Address       = Dev->Address;\r
-  Dev->Address  = 0;\r
-  Status        = UsbSetAddress (Dev, Address);\r
+  Status  = UsbSetAddress (Dev, Dev->Address);\r
 \r
   gBS->Stall (USB_SET_DEVICE_ADDRESS_STALL);\r
   \r
   if (EFI_ERROR (Status)) {\r
+    //\r
+    // It may fail due to device disconnection or other reasons.\r
+    //\r
     DEBUG (( EFI_D_ERROR, "UsbIoPortReset: failed to set address for device %d - %r\n",\r
-                Address, Status));\r
+                Dev->Address, Status));\r
 \r
     goto ON_EXIT;\r
   }\r
 \r
-  Dev->Address  = Address;\r
+  DEBUG (( EFI_D_INFO, "UsbIoPortReset: device is now ADDRESSED at %d\n", Dev->Address));\r
 \r
-  DEBUG (( EFI_D_INFO, "UsbIoPortReset: device is now ADDRESSED at %d\n", Address));\r
-  \r
   //\r
   // Reset the current active configure, after this device\r
   // is in CONFIGURED state.\r
@@ -873,7 +871,7 @@ UsbIoPortReset (
 \r
     if (EFI_ERROR (Status)) {\r
       DEBUG (( EFI_D_ERROR, "UsbIoPortReset: failed to set configure for device %d - %r\n",\r
-                  Address, Status));\r
+                  Dev->Address, Status));\r
     }\r
   }\r
 \r