]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c
MdeModulePkg/XhciDxe: Input context update for Evaluate Context command
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / XhciDxe / XhciSched.c
index c2906e06fd8478a7b77519e6855bf3c2d46bab05..4ae02976079b6af01cbf3f1a1718dca9a73e9cf4 100644 (file)
@@ -3957,6 +3957,7 @@ XhcEvaluateContext (
   CMD_TRB_EVALUATE_CONTEXT    CmdTrbEvalu;\r
   EVT_TRB_COMMAND_COMPLETION  *EvtTrb;\r
   INPUT_CONTEXT               *InputContext;\r
+  DEVICE_CONTEXT              *OutputContext;\r
   EFI_PHYSICAL_ADDRESS        PhyAddr;\r
 \r
   ASSERT (Xhc->UsbDevContext[SlotId].SlotId != 0);\r
@@ -3964,11 +3965,15 @@ XhcEvaluateContext (
   //\r
   // 4.6.7 Evaluate Context\r
   //\r
-  InputContext = Xhc->UsbDevContext[SlotId].InputContext;\r
+  InputContext  = Xhc->UsbDevContext[SlotId].InputContext;\r
+  OutputContext = Xhc->UsbDevContext[SlotId].OutputContext;\r
   ZeroMem (InputContext, sizeof (INPUT_CONTEXT));\r
 \r
+  CopyMem (&InputContext->EP[0], &OutputContext->EP[0], sizeof (ENDPOINT_CONTEXT));\r
+\r
   InputContext->InputControlContext.Dword2 |= BIT1;\r
   InputContext->EP[0].MaxPacketSize         = MaxPacketSize;\r
+  InputContext->EP[0].EPState               = 0;\r
 \r
   ZeroMem (&CmdTrbEvalu, sizeof (CmdTrbEvalu));\r
   PhyAddr              = UsbHcGetPciAddrForHostAddr (Xhc->MemPool, InputContext, sizeof (INPUT_CONTEXT));\r
@@ -4013,6 +4018,7 @@ XhcEvaluateContext64 (
   CMD_TRB_EVALUATE_CONTEXT    CmdTrbEvalu;\r
   EVT_TRB_COMMAND_COMPLETION  *EvtTrb;\r
   INPUT_CONTEXT_64            *InputContext;\r
+  DEVICE_CONTEXT_64           *OutputContext;\r
   EFI_PHYSICAL_ADDRESS        PhyAddr;\r
 \r
   ASSERT (Xhc->UsbDevContext[SlotId].SlotId != 0);\r
@@ -4020,11 +4026,15 @@ XhcEvaluateContext64 (
   //\r
   // 4.6.7 Evaluate Context\r
   //\r
-  InputContext = Xhc->UsbDevContext[SlotId].InputContext;\r
+  InputContext  = Xhc->UsbDevContext[SlotId].InputContext;\r
+  OutputContext = Xhc->UsbDevContext[SlotId].OutputContext;\r
   ZeroMem (InputContext, sizeof (INPUT_CONTEXT_64));\r
 \r
+  CopyMem (&InputContext->EP[0], &OutputContext->EP[0], sizeof (ENDPOINT_CONTEXT_64));\r
+\r
   InputContext->InputControlContext.Dword2 |= BIT1;\r
   InputContext->EP[0].MaxPacketSize         = MaxPacketSize;\r
+  InputContext->EP[0].EPState               = 0;\r
 \r
   ZeroMem (&CmdTrbEvalu, sizeof (CmdTrbEvalu));\r
   PhyAddr              = UsbHcGetPciAddrForHostAddr (Xhc->MemPool, InputContext, sizeof (INPUT_CONTEXT_64));\r