1;; @file
2;  Provide FSP helper function.
3;
4; Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
5; This program and the accompanying materials
6; are licensed and made available under the terms and conditions of the BSD License
7; which accompanies this distribution.  The full text of the license may be found at
8; http://opensource.org/licenses/bsd-license.php.
9;
10; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12;;
13
14    .586p
15    .model  flat,C
16    .code
17
18;
19; FspInfoHeaderRelativeOff is patched during build process and initialized to offset of the  AsmGetFspBaseAddress
20; from the FSP Info header.
21;
22FspInfoHeaderRelativeOff    PROC      NEAR    PUBLIC
23   ;
24   ; This value will be pached by the build script
25   ;
26   DD    012345678h
27FspInfoHeaderRelativeOff    ENDP
28
29;
30; Returns FSP Base Address.
31;
32; This function gets the FSP Info Header using relative addressing and returns the FSP Base from the header structure
33;
34AsmGetFspBaseAddress        PROC      NEAR    PUBLIC
35   mov   eax, AsmGetFspBaseAddress
36   sub   eax, dword ptr [FspInfoHeaderRelativeOff]
37   add   eax, 01Ch
38   mov   eax, dword ptr [eax]
39   ret
40AsmGetFspBaseAddress        ENDP
41
42;
43; No stack counter part of AsmGetFspBaseAddress. Return address is in edi.
44;
45AsmGetFspBaseAddressNoStack    PROC      NEAR    PUBLIC
46   mov   eax, AsmGetFspBaseAddress
47   sub   eax, dword ptr [FspInfoHeaderRelativeOff]
48   add   eax, 01Ch
49   mov   eax, dword ptr [eax]
50   jmp   edi
51AsmGetFspBaseAddressNoStack    ENDP
52
53;
54; Returns FSP Info Header.
55;
56; This function gets the FSP Info Header using relative addressing and returns it
57;
58AsmGetFspInfoHeader         PROC      NEAR    PUBLIC
59   mov   eax, AsmGetFspBaseAddress
60   sub   eax, dword ptr [FspInfoHeaderRelativeOff]
61   ret
62AsmGetFspInfoHeader         ENDP
63
64;
65; No stack counter part of AsmGetFspInfoHeader. Return address is in edi.
66;
67AsmGetFspInfoHeaderNoStack         PROC      NEAR    PUBLIC
68   mov   eax, AsmGetFspBaseAddress
69   sub   eax, dword ptr [FspInfoHeaderRelativeOff]
70   jmp   edi
71AsmGetFspInfoHeaderNoStack         ENDP
72
73     END