Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
EFIDEV(4)		    Kernel Interfaces Manual		     EFIDEV(4)

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

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

	     options EFIRT

       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".

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	avail-
       able, 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 sup-
       plemental structures and	constants defined in <sys/efi.h>:

       EFIIOC_GET_TABLE	(struct	efi_get_table_ioc)
	       Copy the	UEFI table specified by	the uuid field of  the	struct
	       efi_get_table_ioc  into the buf field.  The memory size for the
	       buf field can be	queried	by  passing  NULL  pointer  as	a  buf
	       value.	The  required  size  will  be  stored in the table_len
	       field.  The size	of the allocated memory	must be	 specified  in
	       the buf_len field.

		     struct efi_get_table_ioc {
			     void *buf;
			     struct uuid uuid;
			     size_t table_len;
			     size_t buf_len;
		     };

       EFIIOC_GET_TIME (struct efi_tm)
	       Get the time from the RTC, if the RTC is	available.  The	struct
	       efi_tm passed is	populated with the current time, unless	an er-
	       ror 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 (struct efi_tm)
	       Sets the	time stored by the RTC,	if the RTC is available.

       EFIIOC_VAR_GET (struct efi_var_ioc)
	       Gets  data  from	 the variable described	by the vendor and name
	       fields  of  the	struct	efi_var_ioc  into  the	 data	field.
	       EFIIOC_VAR_GET  (struct	efi_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 (struct efi_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	 vari-
	       able returned.

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

FILES
       /dev/efi

SEE ALSO
       efivar(3), efirt(9)

HISTORY
       A efidev	device first appeared in FreeBSD 11.1.

BUGS
       efidev is currently only	available on amd64 and arm64.

FreeBSD	14.3			 June 18, 2021			     EFIDEV(4)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=efidev&sektion=4&manpath=FreeBSD+14.3-RELEASE+and+Ports>

home | help