arm: at91: Makefile: Compile lowlevel_init only when really necessary
[oweals/u-boot.git] / include / efi_api.h
index 6728f9a32704795fa4f64125cfca4e3944cb5970..8647bfa6629bb576083dc394757dc4a821e0d890 100644 (file)
@@ -39,6 +39,9 @@ typedef void *efi_hii_handle_t;
 typedef u16 *efi_string_t;
 typedef u16 efi_string_id_t;
 typedef u32 efi_hii_font_style_t;
+typedef u16 efi_question_id_t;
+typedef u16 efi_image_id_t;
+typedef u16 efi_form_id_t;
 
 #define EVT_TIMER                              0x80000000
 #define EVT_RUNTIME                            0x40000000
@@ -799,6 +802,101 @@ efi_hii_sibt_string_ucs2_block_next(struct efi_hii_sibt_string_ucs2_block *blk)
                (u16_strlen(blk->string_text) + 1) * 2;
 }
 
+/*
+ * HII forms package
+ * TODO: full scope of definitions
+ */
+struct efi_hii_time {
+       u8 hour;
+       u8 minute;
+       u8 second;
+};
+
+struct efi_hii_date {
+       u16 year;
+       u8 month;
+       u8 day;
+};
+
+struct efi_hii_ref {
+       efi_question_id_t question_id;
+       efi_form_id_t form_id;
+       efi_guid_t form_set_guid;
+       efi_string_id_t device_path;
+};
+
+union efi_ifr_type_value {
+       u8 u8;                          // EFI_IFR_TYPE_NUM_SIZE_8
+       u16 u16;                        // EFI_IFR_TYPE_NUM_SIZE_16
+       u32 u32;                        // EFI_IFR_TYPE_NUM_SIZE_32
+       u64 u64;                        // EFI_IFR_TYPE_NUM_SIZE_64
+       bool b;                         // EFI_IFR_TYPE_BOOLEAN
+       struct efi_hii_time time;       // EFI_IFR_TYPE_TIME
+       struct efi_hii_date date;       // EFI_IFR_TYPE_DATE
+       efi_string_id_t string; // EFI_IFR_TYPE_STRING, EFI_IFR_TYPE_ACTION
+       struct efi_hii_ref ref;         // EFI_IFR_TYPE_REF
+       // u8 buffer[];                 // EFI_IFR_TYPE_BUFFER
+};
+
+#define EFI_IFR_TYPE_NUM_SIZE_8                0x00
+#define EFI_IFR_TYPE_NUM_SIZE_16       0x01
+#define EFI_IFR_TYPE_NUM_SIZE_32       0x02
+#define EFI_IFR_TYPE_NUM_SIZE_64       0x03
+#define EFI_IFR_TYPE_BOOLEAN           0x04
+#define EFI_IFR_TYPE_TIME              0x05
+#define EFI_IFR_TYPE_DATE              0x06
+#define EFI_IFR_TYPE_STRING            0x07
+#define EFI_IFR_TYPE_OTHER             0x08
+#define EFI_IFR_TYPE_UNDEFINED         0x09
+#define EFI_IFR_TYPE_ACTION            0x0A
+#define EFI_IFR_TYPE_BUFFER            0x0B
+#define EFI_IFR_TYPE_REF               0x0C
+#define EFI_IFR_OPTION_DEFAULT         0x10
+#define EFI_IFR_OPTION_DEFAULT_MFG     0x20
+
+#define EFI_IFR_ONE_OF_OPTION_OP       0x09
+
+struct efi_ifr_op_header {
+       u8 opCode;
+       u8 length:7;
+       u8 scope:1;
+};
+
+struct efi_ifr_one_of_option {
+       struct efi_ifr_op_header header;
+       efi_string_id_t option;
+       u8 flags;
+       u8 type;
+       union efi_ifr_type_value value;
+};
+
+typedef efi_uintn_t efi_browser_action_t;
+
+#define EFI_BROWSER_ACTION_REQUEST_NONE                        0
+#define EFI_BROWSER_ACTION_REQUEST_RESET               1
+#define EFI_BROWSER_ACTION_REQUEST_SUBMIT              2
+#define EFI_BROWSER_ACTION_REQUEST_EXIT                        3
+#define EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT    4
+#define EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT   5
+#define EFI_BROWSER_ACTION_REQUEST_FORM_APPLY          6
+#define EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD                7
+#define EFI_BROWSER_ACTION_REQUEST_RECONNECT           8
+
+typedef efi_uintn_t efi_browser_action_request_t;
+
+#define EFI_BROWSER_ACTION_CHANGING                    0
+#define EFI_BROWSER_ACTION_CHANGED                     1
+#define EFI_BROWSER_ACTION_RETRIEVE                    2
+#define EFI_BROWSER_ACTION_FORM_OPEN                   3
+#define EFI_BROWSER_ACTION_FORM_CLOSE                  4
+#define EFI_BROWSER_ACTION_SUBMITTED                   5
+#define EFI_BROWSER_ACTION_DEFAULT_STANDARD            0x1000
+#define EFI_BROWSER_ACTION_DEFAULT_MANUFACTURING       0x1001
+#define EFI_BROWSER_ACTION_DEFAULT_SAFE                        0x1002
+#define EFI_BROWSER_ACTION_DEFAULT_PLATFORM            0x2000
+#define EFI_BROWSER_ACTION_DEFAULT_HARDWARE            0x3000
+#define EFI_BROWSER_ACTION_DEFAULT_FIRMWARE            0x4000
+
 /*
  * HII keyboard package
  */
@@ -845,6 +943,12 @@ struct efi_hii_keyboard_layout {
        struct efi_key_descriptor descriptors[];
 } __packed;
 
+struct efi_hii_keyboard_package {
+       struct efi_hii_package_header header;
+       u16 layout_count;
+       struct efi_hii_keyboard_layout layout[];
+} __packed;
+
 /*
  * HII protocols
  */
@@ -952,6 +1056,69 @@ struct efi_hii_database_protocol {
                efi_handle_t *driver_handle);
 };
 
+#define EFI_HII_CONFIG_ROUTING_PROTOCOL_GUID \
+       EFI_GUID(0x587e72d7, 0xcc50, 0x4f79, \
+                0x82, 0x09, 0xca, 0x29, 0x1f, 0xc1, 0xa1, 0x0f)
+
+struct efi_hii_config_routing_protocol {
+       efi_status_t(EFIAPI *extract_config)(
+               const struct efi_hii_config_routing_protocol *this,
+               const efi_string_t request,
+               efi_string_t *progress,
+               efi_string_t *results);
+       efi_status_t(EFIAPI *export_config)(
+               const struct efi_hii_config_routing_protocol *this,
+               efi_string_t *results);
+       efi_status_t(EFIAPI *route_config)(
+               const struct efi_hii_config_routing_protocol *this,
+               const efi_string_t configuration,
+               efi_string_t *progress);
+       efi_status_t(EFIAPI *block_to_config)(
+               const struct efi_hii_config_routing_protocol *this,
+               const efi_string_t config_request,
+               const uint8_t *block,
+               const efi_uintn_t block_size,
+               efi_string_t *config,
+               efi_string_t *progress);
+       efi_status_t(EFIAPI *config_to_block)(
+               const struct efi_hii_config_routing_protocol *this,
+               const efi_string_t config_resp,
+               const uint8_t *block,
+               const efi_uintn_t *block_size,
+               efi_string_t *progress);
+       efi_status_t(EFIAPI *get_alt_config)(
+               const struct efi_hii_config_routing_protocol *this,
+               const efi_string_t config_resp,
+               const efi_guid_t *guid,
+               const efi_string_t name,
+               const struct efi_device_path *device_path,
+               const efi_string_t alt_cfg_id,
+               efi_string_t *alt_cfg_resp);
+};
+
+#define EFI_HII_CONFIG_ACCESS_PROTOCOL_GUID \
+       EFI_GUID(0x330d4706, 0xf2a0, 0x4e4f, \
+                0xa3, 0x69, 0xb6, 0x6f, 0xa8, 0xd5, 0x43, 0x85)
+
+struct efi_hii_config_access_protocol {
+       efi_status_t(EFIAPI *extract_config_access)(
+               const struct efi_hii_config_access_protocol *this,
+               const efi_string_t request,
+               efi_string_t *progress,
+               efi_string_t *results);
+       efi_status_t(EFIAPI *route_config_access)(
+               const struct efi_hii_config_access_protocol *this,
+               const efi_string_t configuration,
+               efi_string_t *progress);
+       efi_status_t(EFIAPI *form_callback)(
+               const struct efi_hii_config_access_protocol *this,
+               efi_browser_action_t action,
+               efi_question_id_t question_id,
+               u8 type,
+               union efi_ifr_type_value *value,
+               efi_browser_action_request_t *action_request);
+};
+
 #define EFI_GOP_GUID \
        EFI_GUID(0x9042a9de, 0x23dc, 0x4a38, \
                 0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a)
@@ -1155,7 +1322,9 @@ struct efi_pxe {
 #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \
        EFI_GUID(0x964e5b22, 0x6459, 0x11d2, \
                 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
-#define EFI_FILE_PROTOCOL_REVISION 0x00010000
+#define EFI_FILE_PROTOCOL_REVISION     0x00010000
+#define EFI_FILE_PROTOCOL_REVISION2    0x00020000
+#define EFI_FILE_PROTOCOL_LATEST_REVISION EFI_FILE_PROTOCOL_REVISION2
 
 struct efi_file_handle {
        u64 rev;
@@ -1179,6 +1348,10 @@ struct efi_file_handle {
                        const efi_guid_t *info_type, efi_uintn_t buffer_size,
                        void *buffer);
        efi_status_t (EFIAPI *flush)(struct efi_file_handle *file);
+       /*
+        * TODO: We currently only support EFI file protocol revision 0x00010000
+        *       while UEFI specs 2.4 - 2.7 prescribe revision 0x00020000.
+        */
 };
 
 #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION 0x00010000
@@ -1271,4 +1444,13 @@ struct efi_unicode_collation_protocol {
        char *supported_languages;
 };
 
+/* Boot manager load options */
+#define LOAD_OPTION_ACTIVE             0x00000001
+#define LOAD_OPTION_FORCE_RECONNECT    0x00000002
+#define LOAD_OPTION_HIDDEN             0x00000008
+/* All values 0x00000200-0x00001F00 are reserved */
+#define LOAD_OPTION_CATEGORY           0x00001F00
+#define LOAD_OPTION_CATEGORY_BOOT      0x00000000
+#define LOAD_OPTION_CATEGORY_APP       0x00000100
+
 #endif