iPXE
efi_time.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2015 Michael Brown <mbrown@fensystems.co.uk>.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License as
6  * published by the Free Software Foundation; either version 2 of the
7  * License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17  * 02110-1301, USA.
18  *
19  * You can also choose to distribute this program under the terms of
20  * the Unmodified Binary Distribution Licence (as given in the file
21  * COPYING.UBDL), provided that you have satisfied its requirements.
22  */
23 
24 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
25 
26 #include <string.h>
27 #include <errno.h>
28 #include <time.h>
29 #include <ipxe/time.h>
30 #include <ipxe/efi/efi.h>
31 
32 /** @file
33  *
34  * EFI time source
35  *
36  */
37 
38 /**
39  * Get current time in seconds
40  *
41  * @ret time Time, in seconds
42  */
43 static time_t efi_get_time ( void ) {
45  EFI_TIME time;
46  struct tm tm;
47  EFI_STATUS efirc;
48  int rc;
49 
50  /* Get current time and date */
51  if ( ( efirc = rs->GetTime ( &time, NULL ) ) != 0 ) {
52  rc = -EEFI ( efirc );
53  DBGC ( rs, "EFITIME could not get system time: %s\n",
54  strerror ( rc ) );
55  /* Nothing meaningful we can return */
56  return 0;
57  }
58 
59  /* Construct broken-down time */
60  memset ( &tm, 0, sizeof ( tm ) );
61  tm.tm_sec = time.Second;
62  tm.tm_min = time.Minute;
63  tm.tm_hour = time.Hour;
64  tm.tm_mday = time.Day;
65  tm.tm_mon = ( time.Month - 1 );
66  tm.tm_year = ( time.Year - 1900 );
67  DBGC ( rs, "EFITIME is %04d-%02d-%02d %02d:%02d:%02d\n",
68  ( tm.tm_year + 1900 ), ( tm.tm_mon + 1 ),
70 
71  /* Convert to seconds since the Epoch */
72  return mktime ( &tm );
73 }
74 
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
int tm_min
Minutes [0,59].
Definition: time.h:19
#define EEFI(efirc)
Convert an EFI status code to an iPXE status code.
Definition: efi.h:157
Error codes.
int tm_mday
Day of month [1,31].
Definition: time.h:23
#define DBGC(...)
Definition: compiler.h:505
PROVIDE_TIME(efi, time_now, efi_get_time)
int tm_year
Years since 1900.
Definition: time.h:27
time_t time_now(void)
Get current time in seconds (ignoring system clock offset)
int tm_mon
Month of year [0,11].
Definition: time.h:25
time_t mktime(struct tm *tm)
Calculate seconds since the Epoch.
Definition: time.c:117
EFI Runtime Services Table.
Definition: UefiSpec.h:1784
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:78
EFI_GET_TIME GetTime
Definition: UefiSpec.h:1793
Broken-down time.
Definition: time.h:15
EFI API.
EFI Time Abstraction: Year: 1900 - 9999 Month: 1 - 12 Day: 1 - 31 Hour: 0 - 23 Minute: 0 - 59 Second:...
Definition: UefiBaseType.h:74
EFI_RUNTIME_SERVICES * RuntimeServices
A pointer to the EFI Runtime Services Table.
Definition: UefiSpec.h:1996
RETURN_STATUS EFI_STATUS
Function return status for EFI API.
Definition: UefiBaseType.h:35
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
int tm_sec
Seconds [0,60].
Definition: time.h:17
EFI_SYSTEM_TABLE * efi_systab
static time_t efi_get_time(void)
Get current time in seconds.
Definition: efi_time.c:43
int tm_hour
Hour [0,23].
Definition: time.h:21
int64_t time_t
Seconds since the Epoch.
Definition: time.h:18
Time source.
uint64_t time
Current time.
Definition: ntlm.h:20
#define NULL
NULL pointer (VOID *)
Definition: Base.h:362
String functions.
void * memset(void *dest, int character, size_t len) __nonnull