Revert "openfirmware: remove real_time_clock."

This reverts commit 4e134b546a.

It breaks bootloader build on powerpc.
This commit is contained in:
Adrien Destugues
2020-12-22 19:39:31 +01:00
parent acd5d4fddf
commit e050005a07
4 changed files with 86 additions and 0 deletions
@@ -21,6 +21,7 @@ local platform_src =
menu.cpp
mmu.cpp
network.cpp
real_time_clock.cpp
start.cpp
support.cpp
video.cpp
@@ -0,0 +1,57 @@
/*
* Copyright 2006, Ingo Weinhold <[email protected]>.
* Copyright 2010, Andreas Färber <[email protected]>
* All rights reserved. Distributed under the terms of the MIT License.
*/
#include "real_time_clock.h"
#include <stdio.h>
#include <boot/kernel_args.h>
#include <boot/stage2.h>
#include <platform/openfirmware/devices.h>
#include <platform/openfirmware/openfirmware.h>
static int sHandle = OF_FAILED;
status_t
init_real_time_clock(void)
{
// find RTC
intptr_t rtcCookie = 0;
if (of_get_next_device(&rtcCookie, 0, "rtc",
gKernelArgs.platform_args.rtc_path,
sizeof(gKernelArgs.platform_args.rtc_path)) != B_OK) {
printf("init_real_time_clock(): Found no RTC device!");
return B_ERROR;
}
sHandle = of_open(gKernelArgs.platform_args.rtc_path);
if (sHandle == OF_FAILED) {
printf("%s(): Could not open RTC device!\n", __func__);
return B_ERROR;
}
return B_OK;
}
bigtime_t
real_time_clock_usecs(void)
{
if (sHandle == OF_FAILED)
return OF_FAILED;
int second, minute, hour, day, month, year;
if (of_call_method(sHandle, "get-time", 0, 6, &year, &month, &day,
&hour, &minute, &second) == OF_FAILED)
return OF_FAILED;
int days = day;
// TODO: Apply algorithm from kernel
// to assure monotonically increasing date.
return (((days * 24 + hour) * 60ULL + minute) * 60ULL + second)
* 1000000ULL;
}
@@ -0,0 +1,24 @@
/*
* Copyright 2006, Ingo Weinhold <[email protected]>.
* Copyright 2010, Andreas Färber <[email protected]>
* All rights reserved. Distributed under the terms of the MIT License.
*/
#ifndef OPENFIRMWARE_REAL_TIME_CLOCK_H
#define OPENFIRMWARE_REAL_TIME_CLOCK_H
#include <SupportDefs.h>
#ifdef __cplusplus
extern "C" {
#endif
status_t init_real_time_clock(void);
bigtime_t real_time_clock_usecs(void);
#ifdef __cplusplus
} // extern "C"
#endif
#endif /* OPENFIRMWARE_REAL_TIME_CLOCK_H */
@@ -20,6 +20,7 @@
#include "console.h"
#include "machine.h"
#include "real_time_clock.h"
#define HEAP_SIZE 65536
@@ -125,6 +126,9 @@ start(void *openFirmwareEntry)
if (boot_arch_cpu_init() != B_OK)
of_exit();
if (init_real_time_clock() != B_OK)
of_exit();
// check for key presses once
sBootOptions = 0;
int key = console_check_for_key();