Subversion Repositories HelenOS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #ifndef _EFI_DEF_H
  2. #define _EFI_DEF_H
  3.  
  4. /*++
  5.  
  6. Copyright (c) 1998  Intel Corporation
  7.  
  8. Module Name:
  9.  
  10.     efidef.h
  11.  
  12. Abstract:
  13.  
  14.     EFI definitions
  15.  
  16.  
  17.  
  18.  
  19. Revision History
  20.  
  21. --*/
  22.  
  23. typedef UINT16          CHAR16;
  24. typedef UINT8           CHAR8;
  25. typedef UINT8           BOOLEAN;
  26.  
  27. #ifndef TRUE
  28.     #define TRUE    ((BOOLEAN) 1)
  29.     #define FALSE   ((BOOLEAN) 0)
  30. #endif
  31.  
  32. #ifndef NULL
  33.     #define NULL    ((VOID *) 0)
  34. #endif
  35.  
  36. typedef UINTN           EFI_STATUS;
  37. typedef UINT64          EFI_LBA;
  38. typedef UINTN           EFI_TPL;
  39. typedef VOID            *EFI_HANDLE;
  40. typedef VOID            *EFI_EVENT;
  41.  
  42.  
  43. //
  44. // Prototype argument decoration for EFI parameters to indicate
  45. // their direction
  46. //
  47. // IN - argument is passed into the function
  48. // OUT - argument (pointer) is returned from the function
  49. // OPTIONAL - argument is optional
  50. //
  51.  
  52. #ifndef IN
  53.     #define IN
  54.     #define OUT
  55.     #define OPTIONAL
  56. #endif
  57.  
  58.  
  59. //
  60. // A GUID
  61. //
  62.  
  63. typedef struct {          
  64.     UINT32  Data1;
  65.     UINT16  Data2;
  66.     UINT16  Data3;
  67.     UINT8   Data4[8];
  68. } EFI_GUID;
  69.  
  70.  
  71. //
  72. // Time
  73. //
  74.  
  75. typedef struct {          
  76.     UINT16      Year;       // 1998 - 20XX
  77.     UINT8       Month;      // 1 - 12
  78.     UINT8       Day;        // 1 - 31
  79.     UINT8       Hour;       // 0 - 23
  80.     UINT8       Minute;     // 0 - 59
  81.     UINT8       Second;     // 0 - 59
  82.     UINT8       Pad1;
  83.     UINT32      Nanosecond; // 0 - 999,999,999
  84.     INT16       TimeZone;   // -1440 to 1440 or 2047
  85.     UINT8       Daylight;
  86.     UINT8       Pad2;
  87. } EFI_TIME;
  88.  
  89. // Bit definitions for EFI_TIME.Daylight
  90. #define EFI_TIME_ADJUST_DAYLIGHT    0x01
  91. #define EFI_TIME_IN_DAYLIGHT        0x02
  92.  
  93. // Value definition for EFI_TIME.TimeZone
  94. #define EFI_UNSPECIFIED_TIMEZONE    0x07FF
  95.  
  96.  
  97.  
  98. //
  99. // Networking
  100. //
  101.  
  102. typedef struct {
  103.     UINT8                   Addr[4];
  104. } EFI_IPv4_ADDRESS;
  105.  
  106. typedef struct {
  107.     UINT8                   Addr[16];
  108. } EFI_IPv6_ADDRESS;
  109.  
  110. typedef struct {
  111.     UINT8                   Addr[32];
  112. } EFI_MAC_ADDRESS;
  113.  
  114. //
  115. // Memory
  116. //
  117.  
  118. typedef UINT64          EFI_PHYSICAL_ADDRESS;
  119. typedef UINT64          EFI_VIRTUAL_ADDRESS;
  120.  
  121. typedef enum {
  122.     AllocateAnyPages,
  123.     AllocateMaxAddress,
  124.     AllocateAddress,
  125.     MaxAllocateType
  126. } EFI_ALLOCATE_TYPE;
  127.  
  128. //Preseve the attr on any range supplied.
  129. //ConventialMemory must have WB,SR,SW when supplied.
  130. //When allocating from ConventialMemory always make it WB,SR,SW
  131. //When returning to ConventialMemory always make it WB,SR,SW
  132. //When getting the memory map, or on RT for runtime types
  133.  
  134.  
  135. typedef enum {
  136.     EfiReservedMemoryType,
  137.     EfiLoaderCode,
  138.     EfiLoaderData,
  139.     EfiBootServicesCode,
  140.     EfiBootServicesData,
  141.     EfiRuntimeServicesCode,
  142.     EfiRuntimeServicesData,
  143.     EfiConventionalMemory,
  144.     EfiUnusableMemory,
  145.     EfiACPIReclaimMemory,
  146.     EfiACPIMemoryNVS,
  147.     EfiMemoryMappedIO,
  148.     EfiMemoryMappedIOPortSpace,
  149.     EfiPalCode,
  150.     EfiMaxMemoryType
  151. } EFI_MEMORY_TYPE;
  152.  
  153. // possible caching types for the memory range
  154. #define EFI_MEMORY_UC           0x0000000000000001
  155. #define EFI_MEMORY_WC           0x0000000000000002
  156. #define EFI_MEMORY_WT           0x0000000000000004
  157. #define EFI_MEMORY_WB           0x0000000000000008
  158. #define EFI_MEMORY_UCE          0x0000000000000010  
  159.  
  160. // physical memory protection on range
  161. #define EFI_MEMORY_WP           0x0000000000001000
  162. #define EFI_MEMORY_RP           0x0000000000002000
  163. #define EFI_MEMORY_XP           0x0000000000004000
  164.  
  165. // range requires a runtime mapping
  166. #define EFI_MEMORY_RUNTIME      0x8000000000000000
  167.  
  168. #define EFI_MEMORY_DESCRIPTOR_VERSION  1
  169. typedef struct {
  170.     UINT32                          Type;           // Field size is 32 bits followed by 32 bit pad
  171.     EFI_PHYSICAL_ADDRESS            PhysicalStart;  // Field size is 64 bits
  172.     EFI_VIRTUAL_ADDRESS             VirtualStart;   // Field size is 64 bits
  173.     UINT64                          NumberOfPages;  // Field size is 64 bits
  174.     UINT64                          Attribute;      // Field size is 64 bits
  175. } EFI_MEMORY_DESCRIPTOR;
  176.  
  177. //
  178. // International Language
  179. //
  180.  
  181. typedef UINT8   ISO_639_2;
  182. #define ISO_639_2_ENTRY_SIZE    3
  183.  
  184. //
  185. //
  186. //
  187.  
  188. #define EFI_PAGE_SIZE   4096
  189. #define EFI_PAGE_MASK   0xFFF
  190. #define EFI_PAGE_SHIFT  12
  191.  
  192. #define EFI_SIZE_TO_PAGES(a)  \
  193.     ( ((a) >> EFI_PAGE_SHIFT) + ((a) & EFI_PAGE_MASK ? 1 : 0) )
  194.  
  195. #endif
  196.