]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Usb/UsbBusDxe/UsbHub.c
Support ICC build .
[mirror_edk2.git] / MdeModulePkg / Bus / Usb / UsbBusDxe / UsbHub.c
index 25332f432f90285a6021c37eb5046150e5da79c5..171a780d0ccba1bf4b144342091187672578fbf6 100644 (file)
@@ -98,7 +98,7 @@ UsbHubCtrlClearPortFeature (
              USB_HUB_TARGET_PORT,\r
              USB_HUB_REQ_CLEAR_FEATURE,\r
              Feature,\r
-             Port + 1,\r
+             (UINT16) (Port + 1),\r
              NULL,\r
              0\r
              );\r
@@ -140,8 +140,8 @@ UsbHubCtrlClearTTBuffer (
   //\r
   // Check USB2.0 spec page 424 for wValue's encoding\r
   //\r
-  Value = (EpNum & 0x0F) | (DevAddr << 4) |\r
-          ((EpType & 0x03) << 11) | ((EpNum & 0x80) << 15);\r
+  Value = (UINT16) ((EpNum & 0x0F) | (DevAddr << 4) |\r
+          ((EpType & 0x03) << 11) | ((EpNum & 0x80) << 15));\r
 \r
   Status = UsbCtrlRequest (\r
              HubDev,\r
@@ -150,7 +150,7 @@ UsbHubCtrlClearTTBuffer (
              USB_HUB_TARGET_PORT,\r
              USB_HUB_REQ_CLEAR_TT,\r
              Value,\r
-             Port + 1,\r
+             (UINT16) (Port + 1),\r
              NULL,\r
              0\r
              );\r
@@ -265,7 +265,7 @@ UsbHubCtrlGetPortStatus (
              USB_HUB_TARGET_PORT,\r
              USB_HUB_REQ_GET_STATUS,\r
              0,\r
-             Port + 1,\r
+             (UINT16) (Port + 1),\r
              State,\r
              4\r
              );\r
@@ -284,7 +284,6 @@ UsbHubCtrlGetPortStatus (
   @retval Others                Failed to reset the port\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 UsbHubCtrlResetTT (\r
   IN  USB_DEVICE          *HubDev,\r
@@ -300,7 +299,7 @@ UsbHubCtrlResetTT (
              USB_HUB_TARGET_HUB,\r
              USB_HUB_REQ_RESET_TT,\r
              0,\r
-             Port + 1,\r
+             (UINT16) (Port + 1),\r
              NULL,\r
              0\r
              );\r
@@ -319,7 +318,6 @@ UsbHubCtrlResetTT (
   @retval Others                Failed to set the feature\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 UsbHubCtrlSetHubFeature (\r
   IN  USB_DEVICE          *HubDev,\r
@@ -376,7 +374,7 @@ UsbHubCtrlSetPortFeature (
              USB_HUB_TARGET_PORT,\r
              USB_HUB_REQ_SET_FEATURE,\r
              Feature,\r
-             Port + 1,\r
+             (UINT16) (Port + 1),\r
              NULL,\r
              0\r
              );\r
@@ -553,7 +551,7 @@ UsbOnHubInterrupt (
                       );\r
 \r
     if (EFI_ERROR (Status)) {\r
-      USB_ERROR (("UsbOnHubInterrupt: failed to remove async transfer - %r\n", Status));\r
+      DEBUG (( EFI_D_ERROR, "UsbOnHubInterrupt: failed to remove async transfer - %r\n", Status));\r
       return Status;\r
     }\r
 \r
@@ -568,7 +566,7 @@ UsbOnHubInterrupt (
                       );\r
 \r
     if (EFI_ERROR (Status)) {\r
-      USB_ERROR (("UsbOnHubInterrupt: failed to submit new async transfer - %r\n", Status));\r
+      DEBUG (( EFI_D_ERROR, "UsbOnHubInterrupt: failed to submit new async transfer - %r\n", Status));\r
     }\r
 \r
     return Status;\r
@@ -606,11 +604,11 @@ UsbOnHubInterrupt (
 #define USB_HUB_MAP_SIZE  5\r
 \r
 USB_CHANGE_FEATURE_MAP  mHubFeatureMap[USB_HUB_MAP_SIZE] = {\r
-  {USB_PORT_STAT_C_CONNECTION,  USB_HUB_C_PORT_CONNECT},\r
-  {USB_PORT_STAT_C_ENABLE,      USB_HUB_C_PORT_ENABLE},\r
-  {USB_PORT_STAT_C_SUSPEND,     USB_HUB_C_PORT_SUSPEND},\r
-  {USB_PORT_STAT_C_OVERCURRENT, USB_HUB_C_PORT_OVER_CURRENT},\r
-  {USB_PORT_STAT_C_RESET,       USB_HUB_C_PORT_RESET},\r
+  {USB_PORT_STAT_C_CONNECTION,  EfiUsbPortConnectChange},\r
+  {USB_PORT_STAT_C_ENABLE,      EfiUsbPortEnableChange},\r
+  {USB_PORT_STAT_C_SUSPEND,     EfiUsbPortSuspendChange},\r
+  {USB_PORT_STAT_C_OVERCURRENT, EfiUsbPortOverCurrentChange},\r
+  {USB_PORT_STAT_C_RESET,       EfiUsbPortResetChange},\r
 };\r
 \r
 #define USB_ROOT_HUB_MAP_SIZE 5\r
@@ -668,20 +666,20 @@ UsbHubInit (
   }\r
 \r
   if (Index == Setting->Desc.NumEndpoints) {\r
-    USB_ERROR (("UsbHubInit: no interrupt endpoint found for hub %d\n", HubDev->Address));\r
+    DEBUG (( EFI_D_ERROR, "UsbHubInit: no interrupt endpoint found for hub %d\n", HubDev->Address));\r
     return EFI_DEVICE_ERROR;\r
   }\r
 \r
   Status = UsbHubReadDesc (HubDev, &HubDesc);\r
 \r
   if (EFI_ERROR (Status)) {\r
-    USB_ERROR (("UsbHubInit: failed to read HUB descriptor %r\n", Status));\r
+    DEBUG (( EFI_D_ERROR, "UsbHubInit: failed to read HUB descriptor %r\n", Status));\r
     return Status;\r
   }\r
 \r
   HubIf->NumOfPort = HubDesc.NumPorts;\r
 \r
-  USB_DEBUG (("UsbHubInit: hub %d has %d ports\n", HubDev->Address,HubIf->NumOfPort));\r
+  DEBUG (( EFI_D_INFO, "UsbHubInit: hub %d has %d ports\n", HubDev->Address,HubIf->NumOfPort));\r
 \r
   //\r
   // Create an event to enumerate the hub's port. On\r
@@ -695,7 +693,7 @@ UsbHubInit (
                   );\r
 \r
   if (EFI_ERROR (Status)) {\r
-    USB_ERROR (("UsbHubInit: failed to create signal for hub %d - %r\n",\r
+    DEBUG (( EFI_D_ERROR, "UsbHubInit: failed to create signal for hub %d - %r\n",\r
                 HubDev->Address, Status));\r
 \r
     return Status;\r
@@ -720,7 +718,7 @@ UsbHubInit (
                     );\r
 \r
   if (EFI_ERROR (Status)) {\r
-    USB_ERROR (("UsbHubInit: failed to queue interrupt transfer for hub %d - %r\n",\r
+    DEBUG (( EFI_D_ERROR, "UsbHubInit: failed to queue interrupt transfer for hub %d - %r\n",\r
                 HubDev->Address, Status));\r
 \r
     gBS->CloseEvent (HubIf->HubNotify);\r
@@ -744,13 +742,13 @@ UsbHubInit (
   // for both gang/individual powered hubs.\r
   //\r
   for (Index = 0; Index < HubDesc.NumPorts; Index++) {\r
-    UsbHubCtrlSetPortFeature (HubIf->Device, Index, USB_HUB_PORT_POWER);\r
+    UsbHubCtrlSetPortFeature (HubIf->Device, Index, (EFI_USB_PORT_FEATURE) USB_HUB_PORT_POWER);\r
   }\r
 \r
-  gBS->Stall (HubDesc.PwrOn2PwrGood * 2 * USB_STALL_1_MS);\r
+  gBS->Stall (HubDesc.PwrOn2PwrGood * USB_SET_PORT_POWER_STALL);\r
   UsbHubAckHubStatus (HubIf->Device);\r
 \r
-  USB_DEBUG (("UsbHubInit: hub %d initialized\n", HubDev->Address));\r
+  DEBUG (( EFI_D_INFO, "UsbHubInit: hub %d initialized\n", HubDev->Address));\r
   return Status;\r
 }\r
 \r
@@ -824,7 +822,7 @@ UsbHubClearPortChange (
     Map = &mHubFeatureMap[Index];\r
 \r
     if (USB_BIT_IS_SET (PortState.PortChangeStatus, Map->ChangedBit)) {\r
-      UsbHubCtrlClearPortFeature (HubIf->Device, Port, Map->Feature);\r
+      UsbHubCtrlClearPortFeature (HubIf->Device, Port, (UINT16) Map->Feature);\r
     }\r
   }\r
 }\r
@@ -852,7 +850,7 @@ UsbHubSetPortFeature (
 {\r
   EFI_STATUS              Status;\r
 \r
-  Status = UsbHubCtrlSetPortFeature (HubIf->Device, Port, Feature);\r
+  Status = UsbHubCtrlSetPortFeature (HubIf->Device, Port, (UINT8) Feature);\r
 \r
   return Status;\r
 }\r
@@ -879,7 +877,7 @@ UsbHubClearPortFeature (
 {\r
   EFI_STATUS              Status;\r
 \r
-  Status = UsbHubCtrlClearPortFeature (HubIf->Device, Port, Feature);\r
+  Status = UsbHubCtrlClearPortFeature (HubIf->Device, Port, (UINT8) Feature);\r
 \r
   return Status;\r
 }\r
@@ -907,7 +905,7 @@ UsbHubResetPort (
   UINTN                   Index;\r
   EFI_STATUS              Status;\r
 \r
-  Status  = UsbHubSetPortFeature (HubIf, Port, USB_HUB_PORT_RESET);\r
+  Status  = UsbHubSetPortFeature (HubIf, Port, (EFI_USB_PORT_FEATURE) USB_HUB_PORT_RESET);\r
 \r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
@@ -917,14 +915,14 @@ UsbHubResetPort (
   // Drive the reset signal for at least 10ms. Check USB 2.0 Spec\r
   // section 7.1.7.5 for timing requirements.\r
   //\r
-  gBS->Stall (20 * USB_STALL_1_MS);\r
+  gBS->Stall (USB_SET_PORT_RESET_STALL);\r
 \r
   //\r
   // USB hub will clear RESET bit if reset is actually finished.\r
   //\r
   ZeroMem (&PortState, sizeof (EFI_USB_PORT_STATUS));\r
 \r
-  for (Index = 0; Index < 20; Index++) {\r
+  for (Index = 0; Index < USB_WAIT_PORT_STS_CHANGE_LOOP; Index++) {\r
     Status = UsbHubGetPortStatus (HubIf, Port, &PortState);\r
 \r
     if (!EFI_ERROR (Status) &&\r
@@ -933,7 +931,7 @@ UsbHubResetPort (
       return EFI_SUCCESS;\r
     }\r
 \r
-    gBS->Stall (5 * USB_STALL_1_MS);\r
+    gBS->Stall (USB_WAIT_PORT_STS_CHANGE_STALL);\r
   }\r
 \r
   return EFI_TIMEOUT;\r
@@ -979,7 +977,7 @@ UsbHubRelease (
   HubIf->HubEp      = NULL;\r
   HubIf->HubNotify  = NULL;\r
 \r
-  USB_DEBUG (("UsbHubRelease: hub device %d released\n", HubIf->Device->Address));\r
+  DEBUG (( EFI_D_INFO, "UsbHubRelease: hub device %d released\n", HubIf->Device->Address));\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -1011,7 +1009,7 @@ UsbRootHubInit (
     return Status;\r
   }\r
 \r
-  USB_DEBUG (("UsbRootHubInit: root hub %x - max speed %d, %d ports\n",\r
+  DEBUG (( EFI_D_INFO, "UsbRootHubInit: root hub %x - max speed %d, %d ports\n",\r
               HubIf, MaxSpeed, NumOfPort));\r
 \r
   HubIf->IsHub      = TRUE;\r
@@ -1036,6 +1034,12 @@ UsbRootHubInit (
     return Status;\r
   }\r
 \r
+  //\r
+  // It should signal the event immediately here, or device detection\r
+  // by bus enumeration might be delayed by the timer interval.\r
+  //\r
+  gBS->SignalEvent (HubIf->HubNotify);\r
+\r
   Status = gBS->SetTimer (\r
                   HubIf->HubNotify,\r
                   TimerPeriodic,\r
@@ -1121,7 +1125,7 @@ UsbRootHubClearPortChange (
     Map = &mRootHubFeatureMap[Index];\r
 \r
     if (USB_BIT_IS_SET (PortState.PortChangeStatus, Map->ChangedBit)) {\r
-      UsbHcClearRootHubPortFeature (HubIf->Device->Bus, Port, Map->Feature);\r
+      UsbHcClearRootHubPortFeature (HubIf->Device->Bus, Port, (EFI_USB_PORT_FEATURE) Map->Feature);\r
     }\r
   }\r
 }\r
@@ -1216,7 +1220,7 @@ UsbRootHubResetPort (
   Status  = UsbHcSetRootHubPortFeature (Bus, Port, EfiUsbPortReset);\r
 \r
   if (EFI_ERROR (Status)) {\r
-    USB_ERROR (("UsbRootHubResetPort: failed to start reset on port %d\n", Port));\r
+    DEBUG (( EFI_D_ERROR, "UsbRootHubResetPort: failed to start reset on port %d\n", Port));\r
     return Status;\r
   }\r
 \r
@@ -1224,16 +1228,16 @@ UsbRootHubResetPort (
   // Drive the reset signal for at least 50ms. Check USB 2.0 Spec\r
   // section 7.1.7.5 for timing requirements.\r
   //\r
-  gBS->Stall (50 * USB_STALL_1_MS);\r
+  gBS->Stall (USB_SET_ROOT_PORT_RESET_STALL);\r
 \r
   Status = UsbHcClearRootHubPortFeature (Bus, Port, EfiUsbPortReset);\r
 \r
   if (EFI_ERROR (Status)) {\r
-    USB_ERROR (("UsbRootHubResetPort: failed to clear reset on port %d\n", Port));\r
+    DEBUG (( EFI_D_ERROR, "UsbRootHubResetPort: failed to clear reset on port %d\n", Port));\r
     return Status;\r
   }\r
 \r
-  gBS->Stall (USB_STALL_1_MS);\r
+  gBS->Stall (USB_CLR_ROOT_PORT_RESET_STALL);\r
 \r
   //\r
   // USB host controller won't clear the RESET bit until\r
@@ -1241,7 +1245,7 @@ UsbRootHubResetPort (
   //\r
   ZeroMem (&PortState, sizeof (EFI_USB_PORT_STATUS));\r
 \r
-  for (Index = 0; Index < USB_HUB_LOOP; Index++) {\r
+  for (Index = 0; Index < USB_WAIT_PORT_STS_CHANGE_LOOP; Index++) {\r
     Status = UsbHcGetRootHubPortStatus (Bus, Port, &PortState);\r
 \r
     if (EFI_ERROR (Status)) {\r
@@ -1252,11 +1256,11 @@ UsbRootHubResetPort (
       break;\r
     }\r
 \r
-    gBS->Stall (10 * USB_STALL_1_MS);\r
+    gBS->Stall (USB_WAIT_PORT_STS_CHANGE_STALL);\r
   }\r
 \r
-  if (Index == USB_HUB_LOOP) {\r
-    USB_ERROR (("UsbRootHubResetPort: reset not finished in time on port %d\n", Port));\r
+  if (Index == USB_WAIT_PORT_STS_CHANGE_LOOP) {\r
+    DEBUG ((EFI_D_ERROR, "UsbRootHubResetPort: reset not finished in time on port %d\n", Port));\r
     return EFI_TIMEOUT;\r
   }\r
 \r
@@ -1268,7 +1272,7 @@ UsbRootHubResetPort (
     // automatically enable the port, we need to enable it manually.\r
     //\r
     if (RootIf->MaxSpeed == EFI_USB_SPEED_HIGH) {\r
-      USB_ERROR (("UsbRootHubResetPort: release low/full speed device (%d) to UHCI\n", Port));\r
+      DEBUG (( EFI_D_ERROR, "UsbRootHubResetPort: release low/full speed device (%d) to UHCI\n", Port));\r
 \r
       UsbRootHubSetPortFeature (RootIf, Port, EfiUsbPortOwner);\r
       return EFI_NOT_FOUND;\r
@@ -1278,11 +1282,11 @@ UsbRootHubResetPort (
       Status = UsbRootHubSetPortFeature (RootIf, Port, EfiUsbPortEnable);\r
 \r
       if (EFI_ERROR (Status)) {\r
-        USB_ERROR (("UsbRootHubResetPort: failed to enable port %d for UHCI\n", Port));\r
+        DEBUG (( EFI_D_ERROR, "UsbRootHubResetPort: failed to enable port %d for UHCI\n", Port));\r
         return Status;\r
       }\r
 \r
-      gBS->Stall (20 * USB_STALL_1_MS);\r
+      gBS->Stall (USB_SET_ROOT_PORT_ENABLE_STALL);\r
     }\r
   }\r
 \r
@@ -1305,7 +1309,7 @@ UsbRootHubRelease (
   IN USB_INTERFACE        *HubIf\r
   )\r
 {\r
-  USB_DEBUG (("UsbRootHubRelease: root hub released for hub %x\n", HubIf));\r
+  DEBUG (( EFI_D_INFO, "UsbRootHubRelease: root hub released for hub %x\n", HubIf));\r
 \r
   gBS->SetTimer (HubIf->HubNotify, TimerCancel, USB_ROOTHUB_POLL_INTERVAL);\r
   gBS->CloseEvent (HubIf->HubNotify);\r