#\r
#------------------------------------------------------------------------------\r
\r
+#\r
+# FspInfoHeaderRelativeOff is patched during build process and initialized to offset of the AsmGetFspBaseAddress \r
+# from the FSP Info header. \r
+#\r
ASM_GLOBAL ASM_PFX(FspInfoHeaderRelativeOff)\r
ASM_PFX(FspInfoHeaderRelativeOff):\r
#\r
#\r
.long 0x012345678\r
\r
-\r
+#\r
+# Returns FSP Base Address. \r
+#\r
+# This function gets the FSP Info Header using relative addressing and returns the FSP Base from the header structure\r
+#\r
ASM_GLOBAL ASM_PFX(AsmGetFspBaseAddress)\r
ASM_PFX(AsmGetFspBaseAddress):\r
mov $AsmGetFspBaseAddress, %eax\r
- sub $FspInfoHeaderRelativeOff, %eax\r
+ sub FspInfoHeaderRelativeOff, %eax\r
add $0x01C, %eax\r
mov (%eax), %eax\r
ret\r
\r
+#\r
+# No stack counter part of AsmGetFspBaseAddress. Return address is in edi.\r
+#\r
+ASM_GLOBAL ASM_PFX(AsmGetFspBaseAddressNoStack)\r
+ASM_PFX(AsmGetFspBaseAddressNoStack):\r
+ mov $AsmGetFspBaseAddress, %eax\r
+ sub FspInfoHeaderRelativeOff, %eax\r
+ add $0x01C, %eax \r
+ mov (%eax), %eax\r
+ jmp *%edi\r
+\r
+#\r
+# Returns FSP Info Header. \r
+#\r
+# This function gets the FSP Info Header using relative addressing and returns it\r
+#\r
ASM_GLOBAL ASM_PFX(AsmGetFspInfoHeader)\r
ASM_PFX(AsmGetFspInfoHeader):\r
mov $AsmGetFspBaseAddress, %eax\r
- sub $FspInfoHeaderRelativeOff, %eax\r
+ sub FspInfoHeaderRelativeOff, %eax\r
ret\r
+ \r
+#\r
+# No stack counter part of AsmGetFspInfoHeader. Return address is in edi.\r
+#\r
+ASM_GLOBAL ASM_PFX(AsmGetFspInfoHeaderNoStack)\r
+ASM_PFX(AsmGetFspInfoHeaderNoStack):\r
+ mov $AsmGetFspBaseAddress, %eax\r
+ sub FspInfoHeaderRelativeOff, %eax\r
+ jmp *%edi\r