logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

efidev, efirtc — user-mode access to UEFI runtime services

Bugs

efidev is currently only available on amd64 and arm64.

Debian                                           August 12, 2018                                       EFIDEV(4)

Description

       The  efidev  device provides user-mode access to UEFI runtime services.  efidev also includes a driver to
       provide a time-of-day clock using the UEFI real time clock (RTC).  However, the RTC  may  not  always  be
       available, based on the UEFI firmware.  If the RTC is not available, it will not be registered as a time-
       of-day clock and the time related ioctls below will not be functional.

       efidev  provides the following ioctls defined in <sys/efiio.h> with supplemental structures and constants
       defined in <sys/efi.h>:

       EFIIOC_GET_TABLE (structefi_get_table_ioc)
               Get a table by uuid from the UEFI system table.

                     struct efi_get_table_ioc {
                             struct uuid uuid;
                             void *ptr;
                     };

       EFIIOC_GET_TIME (structefi_tm)
               Get the time from the RTC, if the RTC is available.  The structefi_tm passed is  populated  with
               the current time, unless an error occurs.

                     struct efi_tm {
                             uint16_t        tm_year;
                             uint8_t         tm_mon
                             uint8_t         tm_mday
                             uint8_t         tm_hour;
                             uint8_t         tm_min;
                             uint8_t         tm_sec;
                             uint8_t          __pad1;
                             uint32_t        tm_nsec;
                             int16_t         tm_tz;
                             uint8_t         tm_dst;
                             uint8_t         __pad2;
                     };

       EFIIOC_SET_TIME (structefi_tm)
               Sets the time stored by the RTC, if the RTC is available.

       EFIIOC_VAR_GET (structefi_var_ioc)
               Gets  data  from  the  variable described by the vendor and name fields of the structefi_var_ioc
               into the data field.  EFIIOC_VAR_GET (structefi_var_ioc) will also populate the attrib field.

               struct efi_var_ioc {
                       efi_char        *name;
                       size_t           namesize;
                       struct uuid      vendor;
                       uint32_t         attrib;
                       void            *data;
                       size_t           datasize;
               };

       EFIIOC_VAR_NEXT (structefi_var_ioc)
               Used for enumerating all UEFI variables.  The initial call should use an  empty  string  for  the
               name  attribute.   Subsequent  calls  should supply the vendor uuid and name of the last variable
               returned.

       EFIIOC_VAR_SET (structefi_var_ioc)
               Sets data and attributes for the variable  described  by  the  name  and  vendor  in  the  structefi_var_ioc.

Files

/dev/efi

History

       A efidev device first appeared in FreeBSD 11.1.

Name

       efidev, efirtc — user-mode access to UEFI runtime services

See Also

efivar(3), efirt(9)

Synopsis

       To compile this driver into the kernel, place the following lines in your kernel configuration file:

              optionsEFIRT

       Alternatively, to load the driver as a module at boot time, place the following line in loader.conf(5):

             efirt_load="YES"

       The driver may be disabled by setting the loader(8) tunable efi.rt.disabled to “1”.

See Also