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