#ifndef _IPXE_EFI_HII_H #define _IPXE_EFI_HII_H /** @file * * EFI human interface infrastructure */ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #include #include #include /** GUID indicating formset compliance for IBM Unified Configuration Manager */ #define EFI_HII_IBM_UCM_COMPLIANT_FORMSET_GUID \ { 0x5c8e9746, 0xa5f7, 0x4593, \ { 0xaf, 0x1f, 0x66, 0xa8, 0x2a, 0xa1, 0x9c, 0xb1 } } /** An EFI IFR builder */ struct efi_ifr_builder { /** IFR opcodes */ EFI_IFR_OP_HEADER *ops; /** Length of IFR opcodes */ size_t ops_len; /** Strings */ EFI_HII_STRING_BLOCK *strings; /** Length of strings */ size_t strings_len; /** Current string identifier */ unsigned int string_id; /** Current variable store identifier */ unsigned int varstore_id; /** Current form identifier */ unsigned int form_id; /** An allocation has failed */ int failed; }; /** * Initialise IFR builder * * @v ifr IFR builder * * The caller must eventually call efi_ifr_free() to free the dynamic * storage associated with the IFR builder. */ static inline void efi_ifr_init ( struct efi_ifr_builder *ifr ) { memset ( ifr, 0, sizeof ( *ifr ) ); } extern unsigned int efi_ifr_string ( struct efi_ifr_builder *ifr, const char *fmt, ... ); extern void efi_ifr_end_op ( struct efi_ifr_builder *ifr ); extern void efi_ifr_false_op ( struct efi_ifr_builder *ifr ); extern unsigned int efi_ifr_form_op ( struct efi_ifr_builder *ifr, unsigned int title_id ); extern void efi_ifr_form_set_op ( struct efi_ifr_builder *ifr, const EFI_GUID *guid, unsigned int title_id, unsigned int help_id, ... ); void efi_ifr_get_op ( struct efi_ifr_builder *ifr, unsigned int varstore_id, unsigned int varstore_info, unsigned int varstore_type ); extern void efi_ifr_guid_class_op ( struct efi_ifr_builder *ifr, unsigned int class ); extern void efi_ifr_guid_subclass_op ( struct efi_ifr_builder *ifr, unsigned int subclass ); extern void efi_ifr_numeric_op ( struct efi_ifr_builder *ifr, unsigned int prompt_id, unsigned int help_id, unsigned int question_id, unsigned int varstore_id, unsigned int varstore_info, unsigned int vflags, unsigned long min_value, unsigned long max_value, unsigned int step, unsigned int flags ); extern void efi_ifr_string_op ( struct efi_ifr_builder *ifr, unsigned int prompt_id, unsigned int help_id, unsigned int question_id, unsigned int varstore_id, unsigned int varstore_info, unsigned int vflags, unsigned int min_size, unsigned int max_size, unsigned int flags ); extern void efi_ifr_suppress_if_op ( struct efi_ifr_builder *ifr ); extern void efi_ifr_text_op ( struct efi_ifr_builder *ifr, unsigned int prompt_id, unsigned int help_id, unsigned int text_id ); extern void efi_ifr_true_op ( struct efi_ifr_builder *ifr ); extern unsigned int efi_ifr_varstore_name_value_op ( struct efi_ifr_builder *ifr, const EFI_GUID *guid ); extern void efi_ifr_free ( struct efi_ifr_builder *ifr ); extern EFI_HII_PACKAGE_LIST_HEADER * efi_ifr_package ( struct efi_ifr_builder *ifr, const EFI_GUID *guid, const char *language, unsigned int language_id ); #endif /* _IPXE_EFI_HII_H */