]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/PiSmmCpuDxeSmm/CpuS3.c
MdeModulePkg/UsbMassStorageDxe: Enhance Request Sense Handling
[mirror_edk2.git] / UefiCpuPkg / PiSmmCpuDxeSmm / CpuS3.c
index ae4b5162eb2f69778a64139760d20843f7b891da..94e5ab2c0ee22398fb846ac720ada8a3535be9e4 100644 (file)
@@ -208,18 +208,32 @@ Returns:
 \r
   This function programs registers for the calling processor.\r
 \r
-  @param  RegisterTable Pointer to register table of the running processor.\r
+  @param  RegisterTables        Pointer to register table of the running processor.\r
+  @param  RegisterTableCount    Register table count.\r
 \r
 **/\r
 VOID\r
 SetProcessorRegister (\r
-  IN CPU_REGISTER_TABLE        *RegisterTable\r
+  IN CPU_REGISTER_TABLE        *RegisterTables,\r
+  IN UINTN                     RegisterTableCount\r
   )\r
 {\r
   CPU_REGISTER_TABLE_ENTRY  *RegisterTableEntry;\r
   UINTN                     Index;\r
   UINTN                     Value;\r
   SPIN_LOCK                 *MsrSpinLock;\r
+  UINT32                    InitApicId;\r
+  CPU_REGISTER_TABLE        *RegisterTable;\r
+\r
+  InitApicId = GetInitialApicId ();\r
+  RegisterTable = NULL;\r
+  for (Index = 0; Index < RegisterTableCount; Index++) {\r
+    if (RegisterTables[Index].InitialApicId == InitApicId) {\r
+      RegisterTable =  &RegisterTables[Index];\r
+      break;\r
+    }\r
+  }\r
+  ASSERT (RegisterTable != NULL);\r
 \r
   //\r
   // Traverse Register Table of this logical processor\r
@@ -347,36 +361,20 @@ SetProcessorRegister (
   }\r
 }\r
 \r
-\r
-\r
 /**\r
   AP initialization before then after SMBASE relocation in the S3 boot path.\r
 **/\r
 VOID\r
-MPRendezvousProcedure (\r
+InitializeAp (\r
   VOID\r
   )\r
 {\r
-  CPU_REGISTER_TABLE         *RegisterTableList;\r
-  UINT32                     InitApicId;\r
-  UINTN                      Index;\r
   UINTN                      TopOfStack;\r
   UINT8                      Stack[128];\r
 \r
   LoadMtrrData (mAcpiCpuData.MtrrTable);\r
 \r
-  //\r
-  // Find processor number for this CPU.\r
-  //\r
-  RegisterTableList = (CPU_REGISTER_TABLE *) (UINTN) mAcpiCpuData.PreSmmInitRegisterTable;\r
-  InitApicId = GetInitialApicId ();\r
-  for (Index = 0; Index < mAcpiCpuData.NumberOfCpus; Index++) {\r
-    if (RegisterTableList[Index].InitialApicId == InitApicId) {\r
-      SetProcessorRegister (&RegisterTableList[Index]);\r
-      break;\r
-    }\r
-  }\r
-\r
+  SetProcessorRegister ((CPU_REGISTER_TABLE *) (UINTN) mAcpiCpuData.PreSmmInitRegisterTable, mAcpiCpuData.NumberOfCpus);\r
 \r
   //\r
   // Count down the number with lock mechanism.\r
@@ -393,14 +391,7 @@ MPRendezvousProcedure (
   ProgramVirtualWireMode ();\r
   DisableLvtInterrupts ();\r
 \r
-  RegisterTableList = (CPU_REGISTER_TABLE *) (UINTN) mAcpiCpuData.RegisterTable;\r
-  InitApicId = GetInitialApicId ();\r
-  for (Index = 0; Index < mAcpiCpuData.NumberOfCpus; Index++) {\r
-    if (RegisterTableList[Index].InitialApicId == InitApicId) {\r
-      SetProcessorRegister (&RegisterTableList[Index]);\r
-      break;\r
-    }\r
-  }\r
+  SetProcessorRegister ((CPU_REGISTER_TABLE *) (UINTN) mAcpiCpuData.RegisterTable, mAcpiCpuData.NumberOfCpus);\r
 \r
   //\r
   // Place AP into the safe code, count down the number with lock mechanism in the safe code.\r
@@ -475,34 +466,20 @@ PrepareApStartupVector (
 \r
 **/\r
 VOID\r
-EarlyInitializeCpu (\r
+InitializeCpuBeforeRebase (\r
   VOID\r
   )\r
 {\r
-  CPU_REGISTER_TABLE         *RegisterTableList;\r
-  UINT32                     InitApicId;\r
-  UINTN                      Index;\r
-\r
   LoadMtrrData (mAcpiCpuData.MtrrTable);\r
 \r
-  //\r
-  // Find processor number for this CPU.\r
-  //\r
-  RegisterTableList = (CPU_REGISTER_TABLE *) (UINTN) mAcpiCpuData.PreSmmInitRegisterTable;\r
-  InitApicId = GetInitialApicId ();\r
-  for (Index = 0; Index < mAcpiCpuData.NumberOfCpus; Index++) {\r
-    if (RegisterTableList[Index].InitialApicId == InitApicId) {\r
-      SetProcessorRegister (&RegisterTableList[Index]);\r
-      break;\r
-    }\r
-  }\r
+  SetProcessorRegister ((CPU_REGISTER_TABLE *) (UINTN) mAcpiCpuData.PreSmmInitRegisterTable, mAcpiCpuData.NumberOfCpus);\r
 \r
   ProgramVirtualWireMode ();\r
 \r
   PrepareApStartupVector (mAcpiCpuData.StartupVector);\r
 \r
   mNumberToFinish = mAcpiCpuData.NumberOfCpus - 1;\r
-  mExchangeInfo->ApFunction  = (VOID *) (UINTN) MPRendezvousProcedure;\r
+  mExchangeInfo->ApFunction  = (VOID *) (UINTN) InitializeAp;\r
 \r
   //\r
   // Execute code for before SmmBaseReloc. Note: This flag is maintained across S3 boots.\r
@@ -527,22 +504,11 @@ EarlyInitializeCpu (
 \r
 **/\r
 VOID\r
-InitializeCpu (\r
+InitializeCpuAfterRebase (\r
   VOID\r
   )\r
 {\r
-  CPU_REGISTER_TABLE         *RegisterTableList;\r
-  UINT32                     InitApicId;\r
-  UINTN                      Index;\r
-\r
-  RegisterTableList = (CPU_REGISTER_TABLE *) (UINTN) mAcpiCpuData.RegisterTable;\r
-  InitApicId = GetInitialApicId ();\r
-  for (Index = 0; Index < mAcpiCpuData.NumberOfCpus; Index++) {\r
-    if (RegisterTableList[Index].InitialApicId == InitApicId) {\r
-      SetProcessorRegister (&RegisterTableList[Index]);\r
-      break;\r
-    }\r
-  }\r
+  SetProcessorRegister ((CPU_REGISTER_TABLE *) (UINTN) mAcpiCpuData.RegisterTable, mAcpiCpuData.NumberOfCpus);\r
 \r
   mNumberToFinish = mAcpiCpuData.NumberOfCpus - 1;\r
 \r
@@ -660,7 +626,7 @@ SmmRestoreCpu (
     //\r
     // First time microcode load and restore MTRRs\r
     //\r
-    EarlyInitializeCpu ();\r
+    InitializeCpuBeforeRebase ();\r
   }\r
 \r
   //\r
@@ -675,7 +641,7 @@ SmmRestoreCpu (
     //\r
     // Restore MSRs for BSP and all APs\r
     //\r
-    InitializeCpu ();\r
+    InitializeCpuAfterRebase ();\r
   }\r
 \r
   //\r