]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/Include/Library/LocalApicLib.h
UefiCpuPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / UefiCpuPkg / Include / Library / LocalApicLib.h
index ed847b9579319d3bce53ea0de9441cc7e2318109..96b93aa347ace4a2d6ec3e684ce5d732523b30ff 100644 (file)
@@ -4,14 +4,8 @@
   Local APIC library assumes local APIC is enabled. It does not\r
   handles cases where local APIC is disabled.\r
 \r
-  Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>\r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
@@ -68,6 +62,9 @@ GetApicMode (
   If the specified local APIC mode can't be set as current, then ASSERT.\r
 \r
   @param ApicMode APIC mode to be set.\r
+\r
+  @note  This API must not be called from an interrupt handler or SMI handler.\r
+         It may result in unpredictable behavior.\r
 **/\r
 VOID\r
 EFIAPI\r
@@ -78,8 +75,8 @@ SetApicMode (
 /**\r
   Get the initial local APIC ID of the executing processor assigned by hardware upon power on or reset.\r
 \r
-  In xAPIC mode, the initial local APIC ID is 8-bit, and may be different from current APIC ID.\r
-  In x2APIC mode, the local APIC ID can't be changed and there is no concept of initial APIC ID. In this case, \r
+  In xAPIC mode, the initial local APIC ID may be different from current APIC ID.\r
+  In x2APIC mode, the local APIC ID can't be changed and there is no concept of initial APIC ID. In this case,\r
   the 32-bit local APIC ID is returned as initial APIC ID.\r
 \r
   @return  32-bit initial local APIC ID of the executing processor.\r
@@ -115,7 +112,7 @@ GetApicVersion (
 /**\r
   Send a Fixed IPI to a specified target processor.\r
 \r
-  This function returns after the IPI has been accepted by the target processor. \r
+  This function returns after the IPI has been accepted by the target processor.\r
 \r
   @param  ApicId   The local APIC ID of the target processor.\r
   @param  Vector   The vector number of the interrupt being sent.\r
@@ -130,7 +127,7 @@ SendFixedIpi (
 /**\r
   Send a Fixed IPI to all processors excluding self.\r
 \r
-  This function returns after the IPI has been accepted by the target processors. \r
+  This function returns after the IPI has been accepted by the target processors.\r
 \r
   @param  Vector   The vector number of the interrupt being sent.\r
 **/\r
@@ -143,7 +140,7 @@ SendFixedIpiAllExcludingSelf (
 /**\r
   Send a SMI IPI to a specified target processor.\r
 \r
-  This function returns after the IPI has been accepted by the target processor. \r
+  This function returns after the IPI has been accepted by the target processor.\r
 \r
   @param  ApicId   Specify the local APIC ID of the target processor.\r
 **/\r
@@ -156,7 +153,7 @@ SendSmiIpi (
 /**\r
   Send a SMI IPI to all processors excluding self.\r
 \r
-  This function returns after the IPI has been accepted by the target processors. \r
+  This function returns after the IPI has been accepted by the target processors.\r
 **/\r
 VOID\r
 EFIAPI\r
@@ -167,7 +164,7 @@ SendSmiIpiAllExcludingSelf (
 /**\r
   Send an INIT IPI to a specified target processor.\r
 \r
-  This function returns after the IPI has been accepted by the target processor. \r
+  This function returns after the IPI has been accepted by the target processor.\r
 \r
   @param  ApicId   Specify the local APIC ID of the target processor.\r
 **/\r
@@ -180,7 +177,7 @@ SendInitIpi (
 /**\r
   Send an INIT IPI to all processors excluding self.\r
 \r
-  This function returns after the IPI has been accepted by the target processors. \r
+  This function returns after the IPI has been accepted by the target processors.\r
 **/\r
 VOID\r
 EFIAPI\r
@@ -191,7 +188,7 @@ SendInitIpiAllExcludingSelf (
 /**\r
   Send an INIT-Start-up-Start-up IPI sequence to a specified target processor.\r
 \r
-  This function returns after the IPI has been accepted by the target processor. \r
+  This function returns after the IPI has been accepted by the target processor.\r
 \r
   if StartupRoutine >= 1M, then ASSERT.\r
   if StartupRoutine is not multiple of 4K, then ASSERT.\r
@@ -210,7 +207,7 @@ SendInitSipiSipi (
 /**\r
   Send an INIT-Start-up-Start-up IPI sequence to all processors excluding self.\r
 \r
-  This function returns after the IPI has been accepted by the target processors. \r
+  This function returns after the IPI has been accepted by the target processors.\r
 \r
   if StartupRoutine >= 1M, then ASSERT.\r
   if StartupRoutine is not multiple of 4K, then ASSERT.\r
@@ -224,6 +221,20 @@ SendInitSipiSipiAllExcludingSelf (
   IN UINT32          StartupRoutine\r
   );\r
 \r
+/**\r
+  Initialize the state of the SoftwareEnable bit in the Local APIC\r
+  Spurious Interrupt Vector register.\r
+\r
+  @param  Enable  If TRUE, then set SoftwareEnable to 1\r
+                  If FALSE, then set SoftwareEnable to 0.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+InitializeLocalApicSoftwareEnable (\r
+  IN BOOLEAN  Enable\r
+  );\r
+\r
 /**\r
   Programming Virtual Wire Mode.\r
 \r
@@ -346,27 +357,27 @@ SendApicEoi (
   );\r
 \r
 /**\r
-  Get the 32-bit address that a device should use to send a Message Signaled \r
+  Get the 32-bit address that a device should use to send a Message Signaled\r
   Interrupt (MSI) to the Local APIC of the currently executing processor.\r
 \r
   @return 32-bit address used to send an MSI to the Local APIC.\r
 **/\r
 UINT32\r
-EFIAPI    \r
+EFIAPI\r
 GetApicMsiAddress (\r
   VOID\r
   );\r
-    \r
+\r
 /**\r
-  Get the 64-bit data value that a device should use to send a Message Signaled \r
+  Get the 64-bit data value that a device should use to send a Message Signaled\r
   Interrupt (MSI) to the Local APIC of the currently executing processor.\r
 \r
   If Vector is not in range 0x10..0xFE, then ASSERT().\r
   If DeliveryMode is not supported, then ASSERT().\r
-  \r
-  @param  Vector          The 8-bit interrupt vector associated with the MSI.  \r
+\r
+  @param  Vector          The 8-bit interrupt vector associated with the MSI.\r
                           Must be in the range 0x10..0xFE\r
-  @param  DeliveryMode    A 3-bit value that specifies how the recept of the MSI \r
+  @param  DeliveryMode    A 3-bit value that specifies how the recept of the MSI\r
                           is handled.  The only supported values are:\r
                             0: LOCAL_APIC_DELIVERY_MODE_FIXED\r
                             1: LOCAL_APIC_DELIVERY_MODE_LOWEST_PRIORITY\r
@@ -374,25 +385,73 @@ GetApicMsiAddress (
                             4: LOCAL_APIC_DELIVERY_MODE_NMI\r
                             5: LOCAL_APIC_DELIVERY_MODE_INIT\r
                             7: LOCAL_APIC_DELIVERY_MODE_EXTINT\r
-                          \r
-  @param  LevelTriggered  TRUE specifies a level triggered interrupt.  \r
+\r
+  @param  LevelTriggered  TRUE specifies a level triggered interrupt.\r
                           FALSE specifies an edge triggered interrupt.\r
   @param  AssertionLevel  Ignored if LevelTriggered is FALSE.\r
-                          TRUE specifies a level triggered interrupt that active \r
+                          TRUE specifies a level triggered interrupt that active\r
                           when the interrupt line is asserted.\r
-                          FALSE specifies a level triggered interrupt that active \r
+                          FALSE specifies a level triggered interrupt that active\r
                           when the interrupt line is deasserted.\r
 \r
   @return 64-bit data value used to send an MSI to the Local APIC.\r
 **/\r
 UINT64\r
-EFIAPI    \r
+EFIAPI\r
 GetApicMsiValue (\r
   IN UINT8    Vector,\r
   IN UINTN    DeliveryMode,\r
   IN BOOLEAN  LevelTriggered,\r
   IN BOOLEAN  AssertionLevel\r
   );\r
-  \r
+\r
+/**\r
+  Get Package ID/Core ID/Thread ID of a processor.\r
+\r
+  The algorithm assumes the target system has symmetry across physical\r
+  package  boundaries with respect to the number of logical processors\r
+  per package,  number of cores per package.\r
+\r
+  @param[in]  InitialApicId  Initial APIC ID of the target logical processor.\r
+  @param[out]  Package       Returns the processor package ID.\r
+  @param[out]  Core          Returns the processor core ID.\r
+  @param[out]  Thread        Returns the processor thread ID.\r
+**/\r
+VOID\r
+EFIAPI\r
+GetProcessorLocationByApicId (\r
+  IN  UINT32  InitialApicId,\r
+  OUT UINT32  *Package  OPTIONAL,\r
+  OUT UINT32  *Core    OPTIONAL,\r
+  OUT UINT32  *Thread  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Get Package ID/Module ID/Tile ID/Die ID/Core ID/Thread ID of a processor.\r
+\r
+  The algorithm assumes the target system has symmetry across physical\r
+  package boundaries with respect to the number of threads per core, number of\r
+  cores per module, number of modules per tile, number of tiles per die, number\r
+  of dies per package.\r
+\r
+  @param[in]   InitialApicId Initial APIC ID of the target logical processor.\r
+  @param[out]  Package       Returns the processor package ID.\r
+  @param[out]  Die           Returns the processor die ID.\r
+  @param[out]  Tile          Returns the processor tile ID.\r
+  @param[out]  Module        Returns the processor module ID.\r
+  @param[out]  Core          Returns the processor core ID.\r
+  @param[out]  Thread        Returns the processor thread ID.\r
+**/\r
+VOID\r
+EFIAPI\r
+GetProcessorLocation2ByApicId (\r
+  IN  UINT32  InitialApicId,\r
+  OUT UINT32  *Package  OPTIONAL,\r
+  OUT UINT32  *Die      OPTIONAL,\r
+  OUT UINT32  *Tile     OPTIONAL,\r
+  OUT UINT32  *Module   OPTIONAL,\r
+  OUT UINT32  *Core     OPTIONAL,\r
+  OUT UINT32  *Thread   OPTIONAL\r
+  );\r
 #endif\r
 \r