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