xref: /dflybsd-src/share/man/man9/efirt.9 (revision e337742ba7a83bab13c251161f33f82ed7fc0e26)
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