2 * Copyright (C) 2015 Michael Brown <mbrown@fensystems.co.uk>.
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.
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.
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
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.
24 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
29 #include <ipxe/time.h>
30 #include <ipxe/efi/efi.h>
39 * Get current time in seconds
41 * @ret time Time, in seconds
43 static time_t efi_get_time ( void ) {
44 EFI_RUNTIME_SERVICES *rs = efi_systab->RuntimeServices;
50 /* Get current time and date */
51 if ( ( efirc = rs->GetTime ( &time, NULL ) ) != 0 ) {
53 DBGC ( rs, "EFITIME could not get system time: %s\n",
55 /* Nothing meaningful we can return */
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 ),
69 tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec );
71 /* Convert to seconds since the Epoch */
72 return mktime ( &tm );
75 PROVIDE_TIME ( efi, time_now, efi_get_time );