]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/XhciDxe: Input context update for Evaluate Context command
authorjdzhang <jdzhang@kunluntech.com.cn>
Wed, 21 Sep 2022 03:05:40 +0000 (11:05 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Tue, 27 Sep 2022 02:44:24 +0000 (02:44 +0000)
REF:https://bugzilla.tianocore.org/show_bug.cgi?id=4074

Update XhcEvaluateContext/XhcEvaluateContext64 to properly initialize the
input context for Evaluate Context command.

Signed-off-by: jdzhang <jdzhang@kunluntech.com.cn>
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
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