IN UINT64 Value\r
);\r
\r
+/**\r
+ Adds an entry in specified register table.\r
+\r
+ This function adds an entry in specified register table, with given register type,\r
+ register index, bit section and value.\r
+\r
+ Driver will test the current value before setting new value.\r
+\r
+ @param[in] ProcessorNumber The index of the CPU to add a register table entry\r
+ @param[in] RegisterType Type of the register to program\r
+ @param[in] Index Index of the register to program\r
+ @param[in] ValueMask Mask of bits in register to write\r
+ @param[in] Value Value to write\r
+\r
+ @note This service could be called by BSP only.\r
+**/\r
+VOID\r
+EFIAPI\r
+CpuRegisterTableTestThenWrite (\r
+ IN UINTN ProcessorNumber,\r
+ IN REGISTER_TYPE RegisterType,\r
+ IN UINT64 Index,\r
+ IN UINT64 ValueMask,\r
+ IN UINT64 Value\r
+ );\r
+\r
/**\r
Adds an entry in specified Pre-SMM register table.\r
\r
CpuRegisterTableWrite (ProcessorNumber, RegisterType, Index, MAX_UINT32, Value); \\r
} while(FALSE);\r
\r
+/**\r
+ Adds a 32-bit register write entry in specified register table.\r
+\r
+ This macro adds an entry in specified register table, with given register type,\r
+ register index, and value.\r
+\r
+ Driver will test the current value before setting new value.\r
+\r
+ @param[in] ProcessorNumber The index of the CPU to add a register table entry.\r
+ @param[in] RegisterType Type of the register to program\r
+ @param[in] Index Index of the register to program\r
+ @param[in] Value Value to write\r
+\r
+ @note This service could be called by BSP only.\r
+**/\r
+#define CPU_REGISTER_TABLE_TEST_THEN_WRITE32(ProcessorNumber, RegisterType, Index, Value) \\r
+ do { \\r
+ CpuRegisterTableTestThenWrite (ProcessorNumber, RegisterType, Index, MAX_UINT32, Value); \\r
+ } while(FALSE);\r
+\r
/**\r
Adds a 64-bit register write entry in specified register table.\r
\r
CpuRegisterTableWrite (ProcessorNumber, RegisterType, Index, MAX_UINT64, Value); \\r
} while(FALSE);\r
\r
+/**\r
+ Adds a 64-bit register write entry in specified register table.\r
+\r
+ This macro adds an entry in specified register table, with given register type,\r
+ register index, and value.\r
+\r
+ Driver will test the current value before setting new value.\r
+\r
+ @param[in] ProcessorNumber The index of the CPU to add a register table entry.\r
+ @param[in] RegisterType Type of the register to program\r
+ @param[in] Index Index of the register to program\r
+ @param[in] Value Value to write\r
+\r
+ @note This service could be called by BSP only.\r
+**/\r
+#define CPU_REGISTER_TABLE_TEST_THEN_WRITE64(ProcessorNumber, RegisterType, Index, Value) \\r
+ do { \\r
+ CpuRegisterTableTestThenWrite (ProcessorNumber, RegisterType, Index, MAX_UINT64, Value); \\r
+ } while(FALSE);\r
+\r
/**\r
Adds a bit field write entry in specified register table.\r
\r
CpuRegisterTableWrite (ProcessorNumber, RegisterType, Index, ~ValueMask, Value); \\r
} while(FALSE);\r
\r
+/**\r
+ Adds a bit field write entry in specified register table.\r
+\r
+ This macro adds an entry in specified register table, with given register type,\r
+ register index, bit field section, and value.\r
+\r
+ Driver will test the current value before setting new value.\r
+\r
+ @param[in] ProcessorNumber The index of the CPU to add a register table entry.\r
+ @param[in] RegisterType Type of the register to program.\r
+ @param[in] Index Index of the register to program.\r
+ @param[in] Type The data type name of a register structure.\r
+ @param[in] Field The bit fiel name in register structure to write.\r
+ @param[in] Value Value to write to the bit field.\r
+\r
+ @note This service could be called by BSP only.\r
+**/\r
+#define CPU_REGISTER_TABLE_TEST_THEN_WRITE_FIELD(ProcessorNumber, RegisterType, Index, Type, Field, Value) \\r
+ do { \\r
+ UINT64 ValueMask; \\r
+ ValueMask = MAX_UINT64; \\r
+ ((Type *)(&ValueMask))->Field = 0; \\r
+ CpuRegisterTableTestThenWrite (ProcessorNumber, RegisterType, Index, ~ValueMask, Value); \\r
+ } while(FALSE);\r
+\r
/**\r
Adds a 32-bit register write entry in specified register table.\r
\r