Home | History | Annotate | Line # | Download | only in ia64
      1 /*	$NetBSD: salproc.h,v 1.1.1.1 2014/04/01 16:16:07 jakllsch Exp $	*/
      2 
      3 #ifndef _SAL_PROC_H
      4 #define _SAL_PROC_H
      5 //
      6 //
      7 //Copyright (c) 1999  Intel Corporation
      8 //
      9 //Module Name:
     10 //
     11 //    SalProc.h
     12 //
     13 //Abstract:
     14 //
     15 //    Main SAL interface routins for IA-64 calls.
     16 //
     17 //
     18 //Revision History
     19 //
     20 //
     21 
     22 //  return value that mimicks r8,r9,r10 & r11 registers
     23 typedef struct {
     24     UINT64     p0;
     25     UINT64     p1;
     26     UINT64     p2;
     27     UINT64     p3;
     28 } rArg;
     29 
     30 #define  SAL_PCI_CONFIG_READ                    0x01000010
     31 #define  SAL_PCI_CONFIG_WRITE                   0x01000011
     32 
     33 typedef VOID (*PFN)();
     34 typedef rArg (*PFN_SAL_PROC)(UINT64,UINT64,UINT64,UINT64,UINT64,UINT64,UINT64,UINT64);
     35 typedef rArg (*PFN_SAL_CALLBACK)(UINT64,UINT64,UINT64,UINT64,UINT64,UINT64,UINT64,UINT64);
     36 
     37 typedef struct _PLABEL {
     38    UINT64 ProcEntryPoint;
     39    UINT64 GP;
     40 } PLABEL;
     41 
     42 typedef struct tagIA32_BIOS_REGISTER_STATE {
     43 
     44     // general registers
     45     UINT32 eax;
     46     UINT32 ecx;
     47     UINT32 edx;
     48     UINT32 ebx;
     49 
     50     // stack registers
     51     UINT32 esp;
     52     UINT32 ebp;
     53     UINT32 esi;
     54     UINT32 edi;
     55 
     56     // eflags
     57     UINT32 eflags;
     58 
     59     // instruction pointer
     60     UINT32 eip;
     61 
     62     UINT16 cs;
     63     UINT16 ds;
     64     UINT16 es;
     65     UINT16 fs;
     66     UINT16 gs;
     67     UINT16 ss;
     68 
     69     // Reserved
     70     UINT32 Reserved1;
     71     UINT64 Reserved2;
     72 } IA32_BIOS_REGISTER_STATE;
     73 
     74 VOID EFIInitMsg(VOID);
     75 
     76 EFI_STATUS
     77 PlRegisterAndStartTimer(
     78     IN UINTN Period
     79     );
     80 
     81 EFI_STATUS
     82 PlDeRegisterAndCancelTimer(VOID);
     83 
     84 VOID
     85 SalProc (
     86     IN  UINT64    Arg1,
     87     IN  UINT64    Arg2,
     88     IN  UINT64    Arg3,
     89     IN  UINT64    Arg4,
     90     IN  UINT64    Arg5,
     91     IN  UINT64    Arg6,
     92     IN  UINT64    Arg7,
     93     IN  UINT64    Arg8,
     94     OUT rArg      *Results  OPTIONAL
     95     );
     96 
     97 VOID
     98 SalCallBack (
     99     IN  UINT64    Arg1,
    100     IN  UINT64    Arg2,
    101     IN  UINT64    Arg3,
    102     IN  UINT64    Arg4,
    103     IN  UINT64    Arg5,
    104     IN  UINT64    Arg6,
    105     IN  UINT64    Arg7,
    106     IN  UINT64    Arg8,
    107     OUT rArg      *Results  OPTIONAL
    108     );
    109 
    110 VOID
    111 RUNTIMEFUNCTION
    112 RtSalCallBack (
    113     IN  UINT64    Arg1,
    114     IN  UINT64    Arg2,
    115     IN  UINT64    Arg3,
    116     IN  UINT64    Arg4,
    117     IN  UINT64    Arg5,
    118     IN  UINT64    Arg6,
    119     IN  UINT64    Arg7,
    120     IN  UINT64    Arg8,
    121     OUT rArg      *Results  OPTIONAL
    122     );
    123 
    124 
    125 extern PLABEL   RtGlobalSalProcEntry;
    126 extern PLABEL   RtGlobalSALCallBack;
    127 
    128 #pragma pack(1)
    129 //
    130 // SAL System Table
    131 //
    132 typedef struct {
    133     UINT32 Signature;
    134     UINT32 Length;
    135     UINT16 Revision;
    136     UINT16 EntryCount;
    137     UINT8  CheckSum;
    138     UINT8  Reserved[7];
    139     UINT16 SALA_Ver;
    140     UINT16 SALB_Ver;
    141     UINT8  OemId[32];
    142     UINT8  ProductID[32];
    143     UINT8  Reserved2[8];
    144 } SAL_SYSTEM_TABLE_HDR;
    145 
    146 #define SAL_ST_ENTRY_POINT          0
    147 #define SAL_ST_MEMORY_DESCRIPTOR    1
    148 #define SAL_ST_PLATFORM_FEATURES    2
    149 #define SAL_ST_TR_USAGE             3
    150 #define SAL_ST_PTC                  4
    151 #define SAL_ST_AP_WAKEUP            5
    152 
    153 typedef struct {
    154     UINT8   Type;   //  Type == 0
    155     UINT8   Reserved[7];
    156     UINT64  PalProcEntry;
    157     UINT64  SalProcEntry;
    158     UINT64  GlobalDataPointer;
    159     UINT64  Reserved2[2];
    160 } SAL_ST_ENTRY_POINT_DESCRIPTOR;
    161 
    162 typedef struct {
    163     UINT8   Type;   //  Type == 1
    164     UINT8   NeedVirtualRegistration;
    165     UINT8   MemoryAttributes;
    166     UINT8   PageAccessRights;
    167     UINT8   SupportedAttributes;
    168     UINT8   Reserved;
    169     UINT16  MemoryType;
    170     UINT64  PhysicalMemoryAddress;
    171     UINT32  Length;
    172     UINT32  Reserved1;
    173     UINT64  OemReserved;
    174 } SAL_ST_MEMORY_DESCRIPTOR_ENTRY;
    175 
    176 //
    177 // MemoryType info
    178 //
    179 #define SAL_SAPIC_IPI_BLOCK 0x0002
    180 #define SAL_IO_PORT_MAPPING 0x0003
    181 
    182 typedef struct {
    183     UINT8   Type;   // Type == 2
    184     UINT8   PlatformFeatures;
    185     UINT8   Reserved[14];
    186 } SAL_ST_MEMORY_DECRIPTOR;
    187 
    188 typedef struct {
    189     UINT8   Type;   // Type == 3
    190     UINT8   TRType;
    191     UINT8   TRNumber;
    192     UINT8   Reserved[5];
    193     UINT64  VirtualAddress;
    194     UINT64  EncodedPageSize;
    195     UINT64  Reserved1;
    196 } SAL_ST_TR_DECRIPTOR;
    197 
    198 typedef struct {
    199     UINT64  NumberOfProcessors;
    200     UINT64  LocalIDRegister;
    201 } SAL_COHERENCE_DOMAIN_INFO;
    202 
    203 typedef struct {
    204     UINT8                       Type;   // Type == 4
    205     UINT8                       Reserved[3];
    206     UINT32                      NumberOfDomains;
    207     SAL_COHERENCE_DOMAIN_INFO  *DomainInformation;
    208 } SAL_ST_CACHE_COHERENCE_DECRIPTOR;
    209 
    210 typedef struct {
    211     UINT8   Type;   // Type == 5
    212     UINT8   WakeUpType;
    213     UINT8   Reserved[6];
    214     UINT64  ExternalInterruptVector;
    215 } SAL_ST_AP_WAKEUP_DECRIPTOR;
    216 
    217 typedef struct {
    218     SAL_SYSTEM_TABLE_HDR            Header;
    219     SAL_ST_ENTRY_POINT_DESCRIPTOR   Entry0;
    220 } SAL_SYSTEM_TABLE_ASCENDING_ORDER;
    221 
    222 #define     FIT_ENTRY_PTR       (0x100000000 - 32)  // 4GB - 24
    223 #define     FIT_PALA_ENTRY      (0x100000000 - 48)  // 4GB - 32
    224 #define     FIT_PALB_TYPE       01
    225 
    226 typedef struct {
    227     UINT64  Address;
    228     UINT8   Size[3];
    229     UINT8   Reserved;
    230     UINT16  Revision;
    231     UINT8   Type:7;
    232     UINT8   CheckSumValid:1;
    233     UINT8   CheckSum;
    234 } FIT_ENTRY;
    235 
    236 #pragma pack()
    237 
    238 typedef
    239  rArg
    240 (*CALL_SAL_PROC)(
    241     IN  UINT64    Arg1,
    242     IN  UINT64    Arg2,
    243     IN  UINT64    Arg3,
    244     IN  UINT64    Arg4,
    245     IN  UINT64    Arg5,
    246     IN  UINT64    Arg6,
    247     IN  UINT64    Arg7,
    248     IN  UINT64    Arg8
    249     );
    250 
    251 typedef
    252  rArg
    253 (*CALL_PAL_PROC)(
    254     IN  UINT64    Arg1,
    255     IN  UINT64    Arg2,
    256     IN  UINT64    Arg3,
    257     IN  UINT64    Arg4
    258     );
    259 
    260 extern CALL_SAL_PROC   GlobalSalProc;
    261 extern CALL_PAL_PROC   GlobalPalProc;
    262 extern PLABEL   SalProcPlabel;
    263 extern PLABEL   PalProcPlabel;
    264 
    265 #endif
    266 
    267