USB_INTERFACE *UsbIf;\r
USB_INTERFACE *HubIf;\r
USB_DEVICE *Dev;\r
- UINT8 Address;\r
EFI_TPL OldTpl;\r
EFI_STATUS Status;\r
\r
}\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
\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