Home | History | Annotate | Download | only in Ipf
      1 /// @file
      2 ///  Assembly procedures to get and set ESAL entry point.
      3 ///
      4 /// Copyright (c) 2006 - 2011, 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 .auto
     15 .text
     16 
     17 #include  "IpfMacro.i"
     18 
     19 //
     20 // Exports
     21 //
     22 ASM_GLOBAL GetEsalEntryPoint
     23 
     24 //-----------------------------------------------------------------------------
     25 //++
     26 // GetEsalEntryPoint
     27 //
     28 // Return Esal global and PSR register.
     29 //
     30 // On Entry :
     31 //
     32 //
     33 // Return Value:
     34 //        r8  = EFI_SAL_SUCCESS
     35 //        r9  = Physical Plabel
     36 //        r10 = Virtual Plabel
     37 //        r11 = psr
     38 //
     39 // As per static calling conventions.
     40 //
     41 //--
     42 //---------------------------------------------------------------------------
     43 PROCEDURE_ENTRY (GetEsalEntryPoint)
     44 
     45       NESTED_SETUP (0,8,0,0)
     46 
     47 EsalCalcStart:
     48       mov   r8  = ip;;
     49       add   r8  = (EsalEntryPoint - EsalCalcStart), r8;;
     50       mov   r9  = r8;;
     51       add   r10 = 0x10, r8;;
     52       mov   r11 = psr;;
     53       mov   r8  = r0;;
     54 
     55       NESTED_RETURN
     56 
     57 PROCEDURE_EXIT (GetEsalEntryPoint)
     58 
     59 //-----------------------------------------------------------------------------
     60 //++
     61 // SetEsalPhysicalEntryPoint
     62 //
     63 // Set the dispatcher entry point
     64 //
     65 // On Entry:
     66 //  in0 = Physical address of Esal Dispatcher
     67 //  in1 = Physical GP
     68 //
     69 // Return Value:
     70 //   r8 = EFI_SAL_SUCCESS
     71 //
     72 // As per static calling conventions.
     73 //
     74 //--
     75 //---------------------------------------------------------------------------
     76 PROCEDURE_ENTRY (SetEsalPhysicalEntryPoint)
     77 
     78       NESTED_SETUP (2,8,0,0)
     79 
     80 EsalCalcStart1:
     81       mov   r8   = ip;;
     82       add   r8   = (EsalEntryPoint - EsalCalcStart1), r8;;
     83       st8   [r8] = in0;;
     84       add   r8   = 0x08, r8;;
     85       st8   [r8] = in1;;
     86       mov   r8   = r0;;
     87 
     88       NESTED_RETURN
     89 
     90 PROCEDURE_EXIT (SetEsalPhysicalEntryPoint)
     91 
     92 //-----------------------------------------------------------------------------
     93 //++
     94 // SetEsalVirtualEntryPoint
     95 //
     96 // Register physical address of Esal globals.
     97 //
     98 // On Entry :
     99 //  in0 = Virtual address of Esal Dispatcher
    100 //  in1 = Virtual GP
    101 //
    102 // Return Value:
    103 //  r8 = EFI_SAL_ERROR
    104 //
    105 // As per static calling conventions.
    106 //
    107 //--
    108 //---------------------------------------------------------------------------
    109 PROCEDURE_ENTRY (SetEsalVirtualEntryPoint)
    110 
    111       NESTED_SETUP (2,8,0,0)
    112 
    113 EsalCalcStart2:
    114       mov   r8   = ip;;
    115       add   r8   = (EsalEntryPoint - EsalCalcStart2), r8;;
    116       add   r8   = 0x10, r8;;
    117       st8   [r8] = in0;;
    118       add   r8   = 0x08, r8;;
    119       st8   [r8] = in1;;
    120       mov   r8   = r0;;
    121 
    122       NESTED_RETURN
    123 
    124 PROCEDURE_EXIT (SetEsalVirtualEntryPoint)
    125 
    126 .align 32
    127 EsalEntryPoint:
    128     data8 0   // Physical Entry
    129     data8 0   //         GP
    130     data8 0   // Virtual Entry
    131     data8 0   //         GP
    132