1da367edfSSascha Wildner.\"- 2da367edfSSascha Wildner.\" SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3da367edfSSascha Wildner.\" 4da367edfSSascha Wildner.\" Copyright (c) 2018 Kyle Evans <kevans@FreeBSD.org> 5da367edfSSascha Wildner.\" 6da367edfSSascha Wildner.\" Redistribution and use in source and binary forms, with or without 7da367edfSSascha Wildner.\" modification, are permitted provided that the following conditions 8da367edfSSascha Wildner.\" are met: 9da367edfSSascha Wildner.\" 1. Redistributions of source code must retain the above copyright 10da367edfSSascha Wildner.\" notice, this list of conditions and the following disclaimer. 11da367edfSSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright 12da367edfSSascha Wildner.\" notice, this list of conditions and the following disclaimer in the 13da367edfSSascha Wildner.\" documentation and/or other materials provided with the distribution. 14da367edfSSascha Wildner.\" 15da367edfSSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16da367edfSSascha Wildner.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17da367edfSSascha Wildner.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18da367edfSSascha Wildner.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19da367edfSSascha Wildner.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20da367edfSSascha Wildner.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21da367edfSSascha Wildner.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22da367edfSSascha Wildner.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23da367edfSSascha Wildner.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24da367edfSSascha Wildner.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25da367edfSSascha Wildner.\" SUCH DAMAGE. 26da367edfSSascha Wildner.\" 27da367edfSSascha Wildner.\" $FreeBSD: head/share/man/man9/efirt.9 337957 2018-08-17 04:17:51Z kevans $ 28da367edfSSascha Wildner.\" 29*e337742bSSascha Wildner.Dd January 21, 2019 30da367edfSSascha Wildner.Dt EFIRT 9 31da367edfSSascha Wildner.Os 32da367edfSSascha Wildner.Sh NAME 33da367edfSSascha Wildner.Nm efirt , 34da367edfSSascha Wildner.\".Nm efi_rt_ok , 35da367edfSSascha Wildner.Nm efi_get_table , 36da367edfSSascha Wildner.Nm efi_get_time , 37*e337742bSSascha Wildner.\".Nm efi_get_time_capabilities , 38da367edfSSascha Wildner.Nm efi_reset_system , 39da367edfSSascha Wildner.Nm efi_set_time , 40da367edfSSascha Wildner.Nm efi_var_get , 41da367edfSSascha Wildner.Nm efi_var_nextname , 42da367edfSSascha Wildner.Nm efi_var_set 43da367edfSSascha Wildner.Nd kernel access to UEFI runtime services 44da367edfSSascha Wildner.Sh SYNOPSIS 45da367edfSSascha Wildner.Cd "options EFIRT" 46da367edfSSascha Wildner.Pp 47da367edfSSascha Wildner.In sys/efi.h 48a5c17229SSascha Wildner.In machine/efi.h 49da367edfSSascha Wildner.\".Ft int 50da367edfSSascha Wildner.\".Fn efi_rt_ok "void" 51da367edfSSascha Wildner.Ft int 52da367edfSSascha Wildner.Fn efi_get_table "struct uuid *uuid" "void **ptr" 53da367edfSSascha Wildner.Ft int 54da367edfSSascha Wildner.Fn efi_get_time "struct efi_tm *tm" 55da367edfSSascha Wildner.\".Ft int 56da367edfSSascha Wildner.\".Fn efi_get_time_locked "struct efi_tm *tm" 57da367edfSSascha Wildner.\".Ft int 58da367edfSSascha Wildner.\".Fn efi_get_time_capabilities "struct efi_tmcap *tmcap" 59da367edfSSascha Wildner.Ft int 60da367edfSSascha Wildner.Fn efi_reset_system "void" 61da367edfSSascha Wildner.Ft int 62da367edfSSascha Wildner.Fn efi_set_time "struct efi_tm *tm" 63da367edfSSascha Wildner.\".Ft int 64da367edfSSascha Wildner.\".Fn efi_set_time_locked "struct efi_tm *tm" 65da367edfSSascha Wildner.Ft int 66da367edfSSascha Wildner.Fn efi_var_get "uint16_t *name" "struct uuid *vendor" "uint32_t *attrib" \ 67da367edfSSascha Wildner "size_t *datasize" "void *data" 68da367edfSSascha Wildner.Ft int 69da367edfSSascha Wildner.Fn efi_var_nextname "size_t *namesize" "uint16_t *name" "struct uuid *vendor" 70da367edfSSascha Wildner.Ft int 711e5f8ca0SSascha Wildner.Fn efi_var_set "uint16_t *name" "struct uuid *vendor" "uint32_t attrib" \ 72622c771bSSascha Wildner "size_t datasize" "void *data" 73da367edfSSascha Wildner.Sh DESCRIPTION 74da367edfSSascha Wildner.\"All of the following calls will return 7531095ec4SSascha Wildner.\".Er ENXIO 76da367edfSSascha Wildner.\"if UEFI runtime services are not available. 77da367edfSSascha Wildner.\".Nm 78da367edfSSascha Wildner.\"is currently only available on amd64 and arm64. 79da367edfSSascha Wildner.\".Pp 80da367edfSSascha Wildner.\"The 81da367edfSSascha Wildner.\".Fn efi_rt_ok 82da367edfSSascha Wildner.\"Returns 0 if UEFI runtime services are present and functional, or 8331095ec4SSascha Wildner.\".Er ENXIO 84da367edfSSascha Wildner.\"if not. 85da367edfSSascha Wildner.\".Pp 86da367edfSSascha WildnerThe 87da367edfSSascha Wildner.Fn efi_get_table 88da367edfSSascha Wildnerfunction gets a table by uuid from the UEFI system table. 89da367edfSSascha WildnerReturns 0 if the table was found and populates *ptr with the address. 90da367edfSSascha WildnerReturns 9131095ec4SSascha Wildner.Er ENXIO 92da367edfSSascha Wildnerif the configuration table or system table are unset. 93da367edfSSascha WildnerReturns 9431095ec4SSascha Wildner.Er ENOENT 95da367edfSSascha Wildnerif the requested table cannot be found. 96da367edfSSascha Wildner.Pp 97da367edfSSascha WildnerThe 98da367edfSSascha Wildner.Fn efi_get_time 99da367edfSSascha Wildnerfunction gets the current time from the RTC, if available. 100da367edfSSascha WildnerReturns 0 and populates the 101da367edfSSascha Wildner.Vt struct efi_tm 102da367edfSSascha Wildneron success. 103da367edfSSascha WildnerReturns 10431095ec4SSascha Wildner.Er EINVAL 105da367edfSSascha Wildnerif the 106da367edfSSascha Wildner.Vt struct efi_tm 107da367edfSSascha Wildneris 108da367edfSSascha Wildner.Dv NULL , 109da367edfSSascha Wildneror 11031095ec4SSascha Wildner.Er EIO 111da367edfSSascha Wildnerif the time could not be retrieved due to a hardware error. 112da367edfSSascha Wildner.Pp 113da367edfSSascha Wildner.\"The 114da367edfSSascha Wildner.\".Fn efi_get_time_capabilities 115da367edfSSascha Wildner.\"function gets the capabilities from the RTC. 116da367edfSSascha Wildner.\"Returns 0 and populates the 117da367edfSSascha Wildner.\".Vt struct efi_tmcap 118da367edfSSascha Wildner.\"on success. 119da367edfSSascha Wildner.\"Returns 12031095ec4SSascha Wildner.\".Er EINVAL 121da367edfSSascha Wildner.\"if the 122da367edfSSascha Wildner.\".Vt struct efi_tm 123da367edfSSascha Wildner.\"is 124da367edfSSascha Wildner.\".Dv NULL , 125da367edfSSascha Wildner.\"or 12631095ec4SSascha Wildner.\".Er EIO 127da367edfSSascha Wildner.\"if the time could not be retrieved due to a hardware error. 128da367edfSSascha Wildner.\".Pp 129da367edfSSascha WildnerThe 130da367edfSSascha Wildner.Fn efi_reset_system 131da367edfSSascha Wildnerfunction requests a warm reset and reboot of the system. 132da367edfSSascha Wildner.Pp 133da367edfSSascha WildnerThe 134da367edfSSascha Wildner.Fn efi_set_time 135da367edfSSascha Wildnerfunction sets the time on the RTC to the time described by the 136da367edfSSascha Wildner.Vt struct efi_tm 137da367edfSSascha Wildnerpassed in. 138da367edfSSascha WildnerReturns 0 on success, 13931095ec4SSascha Wildner.Er EINVAL 140da367edfSSascha Wildnerif a time field is out of range, or 14131095ec4SSascha Wildner.Er EIO 142da367edfSSascha Wildnerif the time could not be set due to a hardware error. 143da367edfSSascha Wildner.Pp 144da367edfSSascha WildnerThe 145da367edfSSascha Wildner.Fn efi_var_get 146da367edfSSascha Wildnerfunction fetches the variable identified by 147da367edfSSascha Wildner.Fa vendor 148da367edfSSascha Wildnerand 149da367edfSSascha Wildner.Fa name . 150da367edfSSascha WildnerReturns 0 and populates 151da367edfSSascha Wildner.Fa attrib , 152da367edfSSascha Wildner.Fa datasize , 153da367edfSSascha Wildnerand 154da367edfSSascha Wildner.Fa data 155da367edfSSascha Wildneron success. 156da367edfSSascha WildnerOtherwise, one of the following errors are returned: 15731095ec4SSascha Wildner.Bl -tag -width ".Er EOVERFLOW" 15831095ec4SSascha Wildner.It Er ENOENT 159da367edfSSascha WildnerThe variable was not found. 16031095ec4SSascha Wildner.It Er EOVERFLOW 161da367edfSSascha Wildner.Fa datasize 162da367edfSSascha Wildneris not sufficient to hold the variable data. 163da367edfSSascha Wildner.Fa namesize 164da367edfSSascha Wildneris updated to reflect the size needed to complete the request. 16531095ec4SSascha Wildner.It Er EINVAL 166da367edfSSascha WildnerOne of 167da367edfSSascha Wildner.Fa name , 168da367edfSSascha Wildner.Fa vendor , 169da367edfSSascha Wildneror 170da367edfSSascha Wildner.Fa datasize 171da367edfSSascha Wildnerare NULL. 172da367edfSSascha WildnerAlternatively, 173da367edfSSascha Wildner.Fa datasize 174da367edfSSascha Wildneris large enough to hold the response but 175da367edfSSascha Wildner.Fa data 176da367edfSSascha Wildneris NULL. 17731095ec4SSascha Wildner.It Er EIO 178da367edfSSascha WildnerThe variable could not be retrieved due to a hardware error. 17931095ec4SSascha Wildner.It Er EDOOFUS 180da367edfSSascha WildnerThe variable could not be retireved due to an authentication failure. 181da367edfSSascha Wildner.El 182da367edfSSascha Wildner.Pp 183da367edfSSascha WildnerThe 184da367edfSSascha Wildner.Fn efi_var_nextname 185da367edfSSascha Wildnerfunction is used for enumeration of variables. 186da367edfSSascha WildnerOn the initial call to 187da367edfSSascha Wildner.Fn efi_var_nextname , 188da367edfSSascha Wildner.Fa name 189da367edfSSascha Wildnershould be an empty string. 190da367edfSSascha WildnerSubsequent calls should pass in the last 191da367edfSSascha Wildner.Fa name 192da367edfSSascha Wildnerand 193da367edfSSascha Wildner.Fa vendor 194da367edfSSascha Wildnerreturned until 19531095ec4SSascha Wildner.Er ENOENT 196da367edfSSascha Wildneris returned. 197da367edfSSascha WildnerReturns 0 and populates 198da367edfSSascha Wildner.Fa namesize , 199da367edfSSascha Wildner.Fa name , 200da367edfSSascha Wildnerand 201da367edfSSascha Wildner.Fa vendor 202da367edfSSascha Wildnerwith the next variable's data. 203da367edfSSascha WildnerOtherwise, returns one of the following errors: 20431095ec4SSascha Wildner.Bl -tag -width ".Er EOVERFLOW" 20531095ec4SSascha Wildner.It Er ENOENT 206da367edfSSascha WildnerThe next variable was not found. 20731095ec4SSascha Wildner.It Er EOVERFLOW 208da367edfSSascha Wildner.Fa datasize 209da367edfSSascha Wildneris not sufficient to hold the variable data. 210da367edfSSascha Wildner.Fa namesize 211da367edfSSascha Wildneris updated to reflect the size needed to complete the request. 21231095ec4SSascha Wildner.It Er EINVAL 213da367edfSSascha WildnerOne of 214da367edfSSascha Wildner.Fa name , 215da367edfSSascha Wildner.Fa vendor , 216da367edfSSascha Wildneror 217da367edfSSascha Wildner.Fa datasize 218da367edfSSascha Wildnerare NULL. 21931095ec4SSascha Wildner.It Er EIO 220da367edfSSascha WildnerThe variable could not be retrieved due to a hardware error. 221da367edfSSascha Wildner.El 222da367edfSSascha Wildner.Pp 223da367edfSSascha WildnerThe 224da367edfSSascha Wildner.Fn efi_var_set 225da367edfSSascha Wildnerfunction sets the variable described by 226da367edfSSascha Wildner.Fa name 227da367edfSSascha Wildnerand 228da367edfSSascha Wildner.Fa vendor . 229da367edfSSascha WildnerReturns 0 if the variable has been successfully. 230da367edfSSascha WildnerOtherwise, returns one of the following errors: 23131095ec4SSascha Wildner.Bl -tag -width ".Er EOVERFLOW" 23231095ec4SSascha Wildner.It Er EINVAL 233da367edfSSascha WildnerEither 234da367edfSSascha Wildner.Fa attrib 235da367edfSSascha Wildnerwas an invalid combination of attributes, 236da367edfSSascha Wildner.Fa datasize 237da367edfSSascha Wildnerexceeds the maximum allowed size, or 238da367edfSSascha Wildner.Fa name 239da367edfSSascha Wildneris an empty Unicode stirng. 24031095ec4SSascha Wildner.It Er EAGAIN 241da367edfSSascha WildnerNot enough storage is available to hold the variable and its data. 24231095ec4SSascha Wildner.It Er EIO 243da367edfSSascha WildnerThe variable could not be saved due to a hardware error. 24431095ec4SSascha Wildner.It Er EROFS 245da367edfSSascha WildnerThe variable in question is read-only or may not be deleted. 24631095ec4SSascha Wildner.It Er EDOOFUS 247da367edfSSascha WildnerThe varialbe could not be set due to an authentication failure. 24831095ec4SSascha Wildner.It Er ENOENT 249da367edfSSascha WildnerThe variable trying to be updated or deleted was not found. 250da367edfSSascha Wildner.El 251da367edfSSascha Wildner.Sh SEE ALSO 252da367edfSSascha Wildner.Xr efidev 4 253da367edfSSascha Wildner.Sh AUTHORS 254da367edfSSascha WildnerThis manual page was written by 255da367edfSSascha Wildner.An Kyle Evans Aq Mt kevans@FreeBSD.org . 256