Skip to content
  • Rob Clark's avatar
    efi_loader: efi variable support · ad644e7c
    Rob Clark authored
    
    
    Add EFI variable support, mapping to u-boot environment variables.
    Variables are pretty important for setting up boot order, among other
    things.  If the board supports saveenv, then it will be called in
    ExitBootServices() to persist variables set by the efi payload.  (For
    example, fallback.efi configuring BootOrder and BootXXXX load-option
    variables.)
    
    Variables are *not* currently exposed at runtime, post ExitBootServices.
    On boards without a dedicated device for storage, which the loaded OS
    is not trying to also use, this is rather tricky.  One idea, at least
    for boards that can persist RAM across reboot, is to keep a "journal"
    of modified variables in RAM, and then turn halt into a reboot into
    u-boot, plus store variables, plus halt.  Whatever the solution, it
    likely involves some per-board support.
    
    Mapping between EFI variables and u-boot variables:
    
      efi_$guid_$varname = {attributes}(type)value
    
    For example:
    
      efi_8be4df61-93ca-11d2-aa0d-00e098032b8c_OsIndicationsSupported=
         "{ro,boot,run}(blob)0000000000000000"
      efi_8be4df61-93ca-11d2-aa0d-00e098032b8c_BootOrder=
         "(blob)00010000"
    
    The attributes are a comma separated list of these possible
    attributes:
    
      + ro   - read-only
      + boot - boot-services access
      + run  - runtime access
    
    NOTE: with current implementation, no variables are available after
    ExitBootServices, and all are persisted (if possible).
    
    If not specified, the attributes default to "{boot}".
    
    The required type is one of:
    
      + utf8 - raw utf8 string
      + blob - arbitrary length hex string
    
    Signed-off-by: default avatarRob Clark <robdclark@gmail.com>
    Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
    ad644e7c