1*da367edfSSascha Wildner.\"- 2*da367edfSSascha Wildner.\" SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3*da367edfSSascha Wildner.\" 4*da367edfSSascha Wildner.\" Copyright (c) 2018 Kyle Evans <kevans@FreeBSD.org> 5*da367edfSSascha Wildner.\" 6*da367edfSSascha Wildner.\" Redistribution and use in source and binary forms, with or without 7*da367edfSSascha Wildner.\" modification, are permitted provided that the following conditions 8*da367edfSSascha Wildner.\" are met: 9*da367edfSSascha Wildner.\" 1. Redistributions of source code must retain the above copyright 10*da367edfSSascha Wildner.\" notice, this list of conditions and the following disclaimer. 11*da367edfSSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright 12*da367edfSSascha Wildner.\" notice, this list of conditions and the following disclaimer in the 13*da367edfSSascha Wildner.\" documentation and/or other materials provided with the distribution. 14*da367edfSSascha Wildner.\" 15*da367edfSSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16*da367edfSSascha Wildner.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17*da367edfSSascha Wildner.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18*da367edfSSascha Wildner.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19*da367edfSSascha Wildner.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20*da367edfSSascha Wildner.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21*da367edfSSascha Wildner.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22*da367edfSSascha Wildner.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23*da367edfSSascha Wildner.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24*da367edfSSascha Wildner.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25*da367edfSSascha Wildner.\" SUCH DAMAGE. 26*da367edfSSascha Wildner.\" 27*da367edfSSascha Wildner.\" $FreeBSD: head/share/man/man4/efidev.4 338121 2018-08-20 22:16:15Z 0mp $ 28*da367edfSSascha Wildner.\" 29*da367edfSSascha Wildner.Dd December 15, 2018 30*da367edfSSascha Wildner.Dt EFIDEV 4 31*da367edfSSascha Wildner.Os 32*da367edfSSascha Wildner.Sh NAME 33*da367edfSSascha Wildner.Nm efidev , 34*da367edfSSascha Wildner.Nm efirtc 35*da367edfSSascha Wildner.Nd user-mode access to UEFI runtime services 36*da367edfSSascha Wildner.Sh SYNOPSIS 37*da367edfSSascha WildnerTo compile this driver into the kernel, place the following lines in your 38*da367edfSSascha Wildnerkernel configuration file: 39*da367edfSSascha Wildner.Bd -ragged -offset -indent 40*da367edfSSascha Wildner.Cd "options EFIRT" 41*da367edfSSascha Wildner.Ed 42*da367edfSSascha Wildner.Pp 43*da367edfSSascha WildnerAlternatively, to load the driver as a module at boot time, place the following 44*da367edfSSascha Wildnerline in 45*da367edfSSascha Wildner.Xr loader.conf 5 : 46*da367edfSSascha Wildner.Bd -literal -offset indent 47*da367edfSSascha Wildnerefirt_load="YES" 48*da367edfSSascha Wildner.Ed 49*da367edfSSascha Wildner.\".Pp 50*da367edfSSascha Wildner.\"The driver may be disabled by setting the 51*da367edfSSascha Wildner.\".Xr loader 8 52*da367edfSSascha Wildner.\"tunable 53*da367edfSSascha Wildner.\".Va efi.rt.disabled 54*da367edfSSascha Wildner.\"to 55*da367edfSSascha Wildner.\".Dq Li 1 . 56*da367edfSSascha Wildner.Sh DESCRIPTION 57*da367edfSSascha WildnerThe 58*da367edfSSascha Wildner.Nm 59*da367edfSSascha Wildnerdevice provides user-mode access to UEFI runtime services. 60*da367edfSSascha Wildner.Nm 61*da367edfSSascha Wildneralso includes a driver to provide a time-of-day clock using the UEFI 62*da367edfSSascha Wildnerreal time clock (RTC). 63*da367edfSSascha WildnerHowever, the RTC may not always be available, based on the UEFI firmware. 64*da367edfSSascha WildnerIf the RTC is not available, it will not be registered as a time-of-day clock 65*da367edfSSascha Wildnerand the time related ioctls below will not be functional. 66*da367edfSSascha Wildner.Pp 67*da367edfSSascha Wildner.Nm 68*da367edfSSascha Wildnerprovides the following ioctls defined in 69*da367edfSSascha Wildner.In sys/efiio.h 70*da367edfSSascha Wildnerwith supplemental structures and constants defined in 71*da367edfSSascha Wildner.In sys/efi.h : 72*da367edfSSascha Wildner.Bl -tag -width indent 73*da367edfSSascha Wildner.It Dv EFIIOC_GET_TABLE Pq Vt "struct efi_get_table_ioc" 74*da367edfSSascha WildnerGet a table by uuid from the UEFI system table. 75*da367edfSSascha Wildner.Bd -literal -offset indent 76*da367edfSSascha Wildnerstruct efi_get_table_ioc { 77*da367edfSSascha Wildner struct uuid uuid; 78*da367edfSSascha Wildner void *ptr; 79*da367edfSSascha Wildner}; 80*da367edfSSascha Wildner.Ed 81*da367edfSSascha Wildner.It Dv EFIIOC_GET_TIME Pq Vt "struct efi_tm" 82*da367edfSSascha WildnerGet the time from the RTC, if the RTC is available. 83*da367edfSSascha WildnerThe 84*da367edfSSascha Wildner.Vt struct efi_tm 85*da367edfSSascha Wildnerpassed is populated with the current time, unless an error occurs. 86*da367edfSSascha Wildner.Bd -literal -offset indent 87*da367edfSSascha Wildnerstruct efi_tm { 88*da367edfSSascha Wildner uint16_t tm_year; 89*da367edfSSascha Wildner uint8_t tm_mon 90*da367edfSSascha Wildner uint8_t tm_mday 91*da367edfSSascha Wildner uint8_t tm_hour; 92*da367edfSSascha Wildner uint8_t tm_min; 93*da367edfSSascha Wildner uint8_t tm_sec; 94*da367edfSSascha Wildner uint8_t __pad1; 95*da367edfSSascha Wildner uint32_t tm_nsec; 96*da367edfSSascha Wildner int16_t tm_tz; 97*da367edfSSascha Wildner uint8_t tm_dst; 98*da367edfSSascha Wildner uint8_t __pad2; 99*da367edfSSascha Wildner}; 100*da367edfSSascha Wildner.Ed 101*da367edfSSascha Wildner.It Dv EFIIOC_SET_TIME Pq Vt "struct efi_tm" 102*da367edfSSascha WildnerSets the time stored by the RTC, if the RTC is available. 103*da367edfSSascha Wildner.It Dv EFIIOC_VAR_GET Pq Vt "struct efi_var_ioc" 104*da367edfSSascha WildnerGets data from the variable described by the vendor and name fields of the 105*da367edfSSascha Wildner.Vt struct efi_var_ioc 106*da367edfSSascha Wildnerinto the 107*da367edfSSascha Wildner.Fa data 108*da367edfSSascha Wildnerfield. 109*da367edfSSascha Wildner.Dv EFIIOC_VAR_GET Pq Vt "struct efi_var_ioc" 110*da367edfSSascha Wildnerwill also populate the 111*da367edfSSascha Wildner.Fa attrib 112*da367edfSSascha Wildnerfield. 113*da367edfSSascha Wildner.Bd -literal 114*da367edfSSascha Wildnerstruct efi_var_ioc { 115*da367edfSSascha Wildner efi_char *name; 116*da367edfSSascha Wildner size_t namesize; 117*da367edfSSascha Wildner struct uuid vendor; 118*da367edfSSascha Wildner uint32_t attrib; 119*da367edfSSascha Wildner void *data; 120*da367edfSSascha Wildner size_t datasize; 121*da367edfSSascha Wildner}; 122*da367edfSSascha Wildner.Ed 123*da367edfSSascha Wildner.It Dv EFIIOC_VAR_NEXT Pq Vt "struct efi_var_ioc" 124*da367edfSSascha WildnerUsed for enumerating all UEFI variables. 125*da367edfSSascha WildnerThe initial call should use an empty string for the name attribute. 126*da367edfSSascha WildnerSubsequent calls should supply the vendor uuid and name of the last variable 127*da367edfSSascha Wildnerreturned. 128*da367edfSSascha Wildner.It Dv EFIIOC_VAR_SET Pq Vt "struct efi_var_ioc" 129*da367edfSSascha WildnerSets data and attributes for the variable described by the name and vendor in 130*da367edfSSascha Wildnerthe 131*da367edfSSascha Wildner.Vt struct efi_var_ioc . 132*da367edfSSascha Wildner.El 133*da367edfSSascha Wildner.Sh FILES 134*da367edfSSascha Wildner.Bl -tag -width /dev/efi 135*da367edfSSascha Wildner.It Pa /dev/efi 136*da367edfSSascha Wildner.El 137*da367edfSSascha Wildner.Sh SEE ALSO 138*da367edfSSascha Wildner.Xr efivar 3 , 139*da367edfSSascha Wildner.Xr efirt 9 140*da367edfSSascha Wildner.Sh HISTORY 141*da367edfSSascha WildnerA 142*da367edfSSascha Wildner.Nm 143*da367edfSSascha Wildnerdevice first appeared in 144*da367edfSSascha Wildner.Fx 11.1 . 145*da367edfSSascha Wildner.\".Sh BUGS 146*da367edfSSascha Wildner.\".Nm 147*da367edfSSascha Wildner.\"is currently only available on amd64 and arm64. 148