CMOS support on sparc.
* gentpl.py (cmos): Add powerpc and sparc. * grub-core/Makefile.core.def (datetime): Add lib/ieee1275/cmos.c on powerpc and sparc. * grub-core/lib/cmos_datetime.c (grub_get_datetime) [__powerpc__ || __sparc__]: Rename to grub_get_datetime_cmos. (grub_set_datetime) [__powerpc__ || __sparc__]: Likewise to grub_set_datetime_cmos. * grub-core/lib/ieee1275/cmos.c: New file. * grub-core/lib/ieee1275/datetime.c (no_ieee1275_rtc): New vaiable. (find_rtc): Set no_ieee1275_rtc on error. (grub_get_datetime): Call grub_get_datetime_cmos on error. (grub_set_datetime): Call grub_set_datetime_cmos on error. * include/grub/cmos.h (grub_cmos_read): Return grub_err_t since it may fail. Move value to argument. All users updated (grub_cmos_write): Likewise. (grub_cmos_read) [__powerpc__ || __sparc__]: Rewritten. (grub_cmos_write) [__powerpc__ || __sparc__]: Likewise. * include/grub/datetime.h [__powerpc__ || __sparc__]: Declare grub_get_datetime_cmos and grub_set_datetime_cmos.
This commit is contained in:
parent
77546584e1
commit
a07a81b335
9 changed files with 231 additions and 26 deletions
|
@ -21,10 +21,14 @@
|
|||
#include <grub/ieee1275/ieee1275.h>
|
||||
#include <grub/misc.h>
|
||||
#include <grub/dl.h>
|
||||
#if defined (__powerpc__) || defined (__sparc__)
|
||||
#include <grub/cmos.h>
|
||||
#endif
|
||||
|
||||
GRUB_MOD_LICENSE ("GPLv3+");
|
||||
|
||||
static char *rtc = 0;
|
||||
static int no_ieee1275_rtc = 0;
|
||||
|
||||
static void
|
||||
find_rtc (void)
|
||||
|
@ -42,6 +46,8 @@ find_rtc (void)
|
|||
}
|
||||
|
||||
grub_ieee1275_devices_iterate (hook);
|
||||
if (!rtc)
|
||||
no_ieee1275_rtc = 1;
|
||||
}
|
||||
|
||||
grub_err_t
|
||||
|
@ -64,10 +70,12 @@ grub_get_datetime (struct grub_datetime *datetime)
|
|||
int status;
|
||||
grub_ieee1275_ihandle_t ihandle;
|
||||
|
||||
if (no_ieee1275_rtc)
|
||||
return grub_get_datetime_cmos (datetime);
|
||||
if (!rtc)
|
||||
find_rtc ();
|
||||
if (!rtc)
|
||||
return grub_error (GRUB_ERR_IO, "no RTC found");
|
||||
return grub_get_datetime_cmos (datetime);
|
||||
|
||||
status = grub_ieee1275_open (rtc, &ihandle);
|
||||
if (status == -1)
|
||||
|
@ -114,10 +122,12 @@ grub_set_datetime (struct grub_datetime *datetime)
|
|||
int status;
|
||||
grub_ieee1275_ihandle_t ihandle;
|
||||
|
||||
if (no_ieee1275_rtc)
|
||||
return grub_set_datetime_cmos (datetime);
|
||||
if (!rtc)
|
||||
find_rtc ();
|
||||
if (!rtc)
|
||||
return grub_error (GRUB_ERR_IO, "no RTC found");
|
||||
return grub_set_datetime_cmos (datetime);
|
||||
|
||||
status = grub_ieee1275_open (rtc, &ihandle);
|
||||
if (status == -1)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue