]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Pci/XhciDxe/Xhci.c
MdeModulePkg: The patch eliminates two assumptions
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / XhciDxe / Xhci.c
index 5ccb78e55b05bb17cf3bccb2f14c126f3091b5d1..8cbb7bab0740175804a3055ede951e8647eb7c9e 100644 (file)
@@ -721,7 +721,6 @@ XhcControlTransfer (
   URB                     *Urb;\r
   UINT8                   Endpoint;\r
   UINT8                   Index;\r
-  UINT8                   XhciDevAddr;\r
   UINT8                   DescriptorType;\r
   UINT8                   SlotId;\r
   UINT8                   TTT;\r
@@ -793,11 +792,6 @@ XhcControlTransfer (
     goto ON_EXIT;\r
   }\r
 \r
-  //\r
-  // Acquire the actual device address assigned by XHCI's Address_Device cmd.\r
-  //\r
-  XhciDevAddr = Xhc->UsbDevContext[SlotId].XhciDevAddr;\r
-\r
   //\r
   // Hook the Set_Address request from UsbBus.\r
   // According to XHCI 1.0 spec, the Set_Address request is replaced by XHCI's Address_Device cmd.\r
@@ -810,7 +804,7 @@ XhcControlTransfer (
     //\r
     for (Index = 0; Index < 255; Index++) {\r
       if (!Xhc->UsbDevContext[Index + 1].Enabled &&\r
-          (Xhc->UsbDevContext[Index + 1].SlotId != 0) &&\r
+          (Xhc->UsbDevContext[Index + 1].SlotId == 0) &&\r
           (Xhc->UsbDevContext[Index + 1].BusDevAddr == (UINT8)Request->Value)) {\r
         Xhc->UsbDevContext[Index + 1].BusDevAddr = 0;\r
       }\r
@@ -850,7 +844,7 @@ XhcControlTransfer (
   Endpoint = (UINT8) (0 | ((TransferDirection == EfiUsbDataIn) ? 0x80 : 0));\r
   Urb = XhcCreateUrb (\r
           Xhc,\r
-          XhciDevAddr,\r
+          DeviceAddress,\r
           Endpoint,\r
           DeviceSpeed,\r
           MaximumPacketLength,\r
@@ -867,7 +861,7 @@ XhcControlTransfer (
     Status = EFI_OUT_OF_RESOURCES;\r
     goto ON_EXIT;\r
   }\r
-  ASSERT (Urb->EvtRing == &Xhc->CtrlTrEventRing);\r
+  ASSERT (Urb->EvtRing == &Xhc->EventRing);\r
   Status = XhcExecTransfer (Xhc, FALSE, Urb, Timeout);\r
 \r
   //\r
@@ -909,7 +903,11 @@ XhcControlTransfer (
           MaxPacket0 = Xhc->UsbDevContext[SlotId].DevDesc.MaxPacketSize0;\r
         }\r
         Xhc->UsbDevContext[SlotId].ConfDesc = AllocateZeroPool (Xhc->UsbDevContext[SlotId].DevDesc.NumConfigurations * sizeof (EFI_USB_CONFIG_DESCRIPTOR *));\r
-        Status = XhcEvaluateContext (Xhc, SlotId, MaxPacket0);\r
+        if (Xhc->HcCParams.Data.Csz == 0) {\r
+          Status = XhcEvaluateContext (Xhc, SlotId, MaxPacket0);\r\r
+        } else {\r
+          Status = XhcEvaluateContext64 (Xhc, SlotId, MaxPacket0);\r\r
+        }\r
         ASSERT_EFI_ERROR (Status);\r
     } else if (DescriptorType == USB_DESC_TYPE_CONFIG) {\r
       ASSERT (Data != NULL);\r
@@ -940,13 +938,12 @@ XhcControlTransfer (
         MTT = 0;\r
       }\r
 \r
-      Status = XhcConfigHubContext (\r
-                 Xhc,\r
-                 SlotId,\r
-                 HubDesc->NumPorts,\r
-                 TTT,\r
-                 MTT\r
-                 );\r
+      if (Xhc->HcCParams.Data.Csz == 0) {\r
+        Status = XhcConfigHubContext (Xhc, SlotId, HubDesc->NumPorts, TTT, MTT);\r
+      } else {\r
+        Status = XhcConfigHubContext64 (Xhc, SlotId, HubDesc->NumPorts, TTT, MTT);\r
+      }\r
+      ASSERT_EFI_ERROR (Status);\r
     }\r
   } else if ((Request->Request     == USB_REQ_SET_CONFIG) &&\r
              (Request->RequestType == USB_REQUEST_TYPE (EfiUsbNoData, USB_REQ_TYPE_STANDARD, USB_TARGET_DEVICE))) {\r
@@ -955,7 +952,12 @@ XhcControlTransfer (
     //\r
     for (Index = 0; Index < Xhc->UsbDevContext[SlotId].DevDesc.NumConfigurations; Index++) {\r
       if (Xhc->UsbDevContext[SlotId].ConfDesc[Index]->ConfigurationValue == (UINT8)Request->Value) {\r
-        XhcSetConfigCmd (Xhc, SlotId, DeviceSpeed, Xhc->UsbDevContext[SlotId].ConfDesc[Index]);\r
+        if (Xhc->HcCParams.Data.Csz == 0) {\r
+          Status = XhcSetConfigCmd (Xhc, SlotId, DeviceSpeed, Xhc->UsbDevContext[SlotId].ConfDesc[Index]);\r
+        } else {\r
+          Status = XhcSetConfigCmd64 (Xhc, SlotId, DeviceSpeed, Xhc->UsbDevContext[SlotId].ConfDesc[Index]);\r
+        }\r
+        ASSERT_EFI_ERROR (Status);\r
         break;\r
       }\r
     }\r
@@ -1073,7 +1075,6 @@ XhcBulkTransfer (
 {\r
   USB_XHCI_INSTANCE       *Xhc;\r
   URB                     *Urb;\r
-  UINT8                   XhciDevAddr;\r
   UINT8                   SlotId;\r
   EFI_STATUS              Status;\r
   EFI_STATUS              RecoveryStatus;\r
@@ -1118,18 +1119,13 @@ XhcBulkTransfer (
     goto ON_EXIT;\r
   }\r
 \r
-  //\r
-  // Acquire the actual device address assigned by XHCI's Address_Device cmd.\r
-  //\r
-  XhciDevAddr = Xhc->UsbDevContext[SlotId].XhciDevAddr;\r
-\r
   //\r
   // Create a new URB, insert it into the asynchronous\r
   // schedule list, then poll the execution status.\r
   //\r
   Urb = XhcCreateUrb (\r
           Xhc,\r
-          XhciDevAddr,\r
+          DeviceAddress,\r
           EndPointAddress,\r
           DeviceSpeed,\r
           MaximumPacketLength,\r
@@ -1147,7 +1143,7 @@ XhcBulkTransfer (
     goto ON_EXIT;\r
   }\r
 \r
-  ASSERT (Urb->EvtRing == &Xhc->BulkTrEventRing);\r
+  ASSERT (Urb->EvtRing == &Xhc->EventRing);\r
 \r
   Status = XhcExecTransfer (Xhc, FALSE, Urb, Timeout);\r
 \r
@@ -1223,7 +1219,6 @@ XhcAsyncInterruptTransfer (
   USB_XHCI_INSTANCE       *Xhc;\r
   URB                     *Urb;\r
   EFI_STATUS              Status;\r
-  UINT8                   XhciDevAddr;\r
   UINT8                   SlotId;\r
   UINT8                   Index;\r
   UINT8                   *Data;\r
@@ -1262,8 +1257,7 @@ XhcAsyncInterruptTransfer (
     // The delete request may happen after device is detached.\r
     //\r
     for (Index = 0; Index < 255; Index++) {\r
-      if ((Xhc->UsbDevContext[Index + 1].SlotId != 0) &&\r
-          (Xhc->UsbDevContext[Index + 1].BusDevAddr == DeviceAddress)) {\r
+      if (Xhc->UsbDevContext[Index + 1].BusDevAddr == DeviceAddress) {\r
         break;\r
       }\r
     }\r
@@ -1273,12 +1267,7 @@ XhcAsyncInterruptTransfer (
       goto ON_EXIT;\r
     }\r
 \r
-    //\r
-    // Acquire the actual device address assigned by XHCI's Address_Device cmd.\r
-    //\r
-    XhciDevAddr = Xhc->UsbDevContext[Index + 1].XhciDevAddr;\r
-\r
-    Status = XhciDelAsyncIntTransfer (Xhc, XhciDevAddr, EndPointAddress);\r
+    Status = XhciDelAsyncIntTransfer (Xhc, DeviceAddress, EndPointAddress);\r
     DEBUG ((EFI_D_INFO, "XhcAsyncInterruptTransfer: remove old transfer, Status = %r\n", Status));\r
     goto ON_EXIT;\r
   }\r
@@ -1299,11 +1288,6 @@ XhcAsyncInterruptTransfer (
     goto ON_EXIT;\r
   }\r
 \r
-  //\r
-  // Acquire the actual device address assigned by XHCI's Address_Device cmd.\r
-  //\r
-  XhciDevAddr = Xhc->UsbDevContext[SlotId].XhciDevAddr;\r
-\r
   Data = AllocateZeroPool (DataLength);\r
 \r
   if (Data == NULL) {\r
@@ -1314,7 +1298,7 @@ XhcAsyncInterruptTransfer (
 \r
   Urb = XhcCreateUrb (\r
           Xhc,\r
-          XhciDevAddr,\r
+          DeviceAddress,\r
           EndPointAddress,\r
           DeviceSpeed,\r
           MaximumPacketLength,\r
@@ -1333,7 +1317,7 @@ XhcAsyncInterruptTransfer (
     goto ON_EXIT;\r
   }\r
 \r
-  ASSERT (Urb->EvtRing == &Xhc->AsynIntTrEventRing);\r
+  ASSERT (Urb->EvtRing == &Xhc->EventRing);\r
 \r
   InsertHeadList (&Xhc->AsyncIntTransfers, &Urb->UrbList);\r
   //\r
@@ -1393,7 +1377,6 @@ XhcSyncInterruptTransfer (
 {\r
   USB_XHCI_INSTANCE       *Xhc;\r
   URB                     *Urb;\r
-  UINT8                   XhciDevAddr;\r
   UINT8                   SlotId;\r
   EFI_STATUS              Status;\r
   EFI_STATUS              RecoveryStatus;\r
@@ -1441,14 +1424,9 @@ XhcSyncInterruptTransfer (
     goto ON_EXIT;\r
   }\r
 \r
-  //\r
-  // Acquire the actual device address assigned by XHCI's Address_Device cmd.\r
-  //\r
-  XhciDevAddr = Xhc->UsbDevContext[SlotId].XhciDevAddr;\r
-\r
   Urb = XhcCreateUrb (\r
           Xhc,\r
-          XhciDevAddr,\r
+          DeviceAddress,\r
           EndPointAddress,\r
           DeviceSpeed,\r
           MaximumPacketLength,\r
@@ -2072,8 +2050,11 @@ XhcDriverBindingStop (
         (Xhc->UsbDevContext[Index + 1].SlotId == 0)) {\r
       continue;\r
     }\r
-\r
-    XhcDisableSlotCmd (Xhc, Xhc->UsbDevContext[Index + 1].SlotId);\r
+    if (Xhc->HcCParams.Data.Csz == 0) {\r
+      XhcDisableSlotCmd (Xhc, Xhc->UsbDevContext[Index + 1].SlotId);\r
+    } else {\r
+      XhcDisableSlotCmd64 (Xhc, Xhc->UsbDevContext[Index + 1].SlotId);\r
+    }\r
   }\r
 \r
   XhcHaltHC (Xhc, XHC_GENERIC_TIMEOUT);\r
@@ -2108,11 +2089,11 @@ XhcDriverBindingStop (
   // Restore original PCI attributes\r
   //\r
   PciIo->Attributes (\r
-                  PciIo,\r
-                  EfiPciIoAttributeOperationSet,\r
-                  Xhc->OriginalPciAttributes,\r
-                  NULL\r
-                  );\r
+           PciIo,\r
+           EfiPciIoAttributeOperationSet,\r
+           Xhc->OriginalPciAttributes,\r
+           NULL\r
+           );\r
 \r
   gBS->CloseProtocol (\r
          Controller,\r