[infiniband] Do not use GRH for local paths
[ipxe.git] / src / interface / efi / efi_time.c
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 ) {
44 EFI_RUNTIME_SERVICES *rs = efi_systab->RuntimeServices;
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 ),
69 tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec );
70
71 /* Convert to seconds since the Epoch */
72 return mktime ( &tm );
73 }
74
75 PROVIDE_TIME ( efi, time_now, efi_get_time );