From: "Vladimir 'φ-coder/phcoder' Serbinenko" <phcoder@gmail.com>
To: The development of GRUB 2 <grub-devel@gnu.org>
Subject: [RFT] Rewrite timer on arm efi and remove leftover in startup code
Date: Fri, 04 Oct 2013 00:46:53 +0200 [thread overview]
Message-ID: <524DF3DD.9030208@gmail.com> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 65 bytes --]
Current timer code for ARM EFI is horror. Can anyone test this?
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: arm_efi.diff --]
[-- Type: text/x-diff; name="arm_efi.diff", Size: 2341 bytes --]
=== modified file 'grub-core/kern/arm/efi/init.c'
--- grub-core/kern/arm/efi/init.c 2013-04-07 00:41:07 +0000
+++ grub-core/kern/arm/efi/init.c 2013-10-03 22:19:23 +0000
@@ -24,45 +24,47 @@
#include <grub/time.h>
#include <grub/efi/efi.h>
-/*
- * A bit ugly, but functional - and should be completely portable.
- */
+static grub_uint64_t tmr;
+static grub_efi_event_t tmr_evt;
+
static grub_uint64_t
-grub_efi_get_time_ms(void)
-{
- grub_efi_time_t now;
- grub_uint64_t retval;
- grub_efi_status_t status;
-
- status = efi_call_2 (grub_efi_system_table->runtime_services->get_time,
- &now, NULL);
- if (status != GRUB_EFI_SUCCESS)
- {
- grub_printf("No time!\n");
- return 0;
- }
- retval = now.year * 365 * 24 * 60 * 60 * 1000;
- retval += now.month * 30 * 24 * 60 * 60 * 1000;
- retval += now.day * 24 * 60 * 60 * 1000;
- retval += now.hour * 60 * 60 * 1000;
- retval += now.minute * 60 * 1000;
- retval += now.second * 1000;
- retval += now.nanosecond / 1000;
-
- grub_dprintf("timer", "timestamp: 0x%llx\n", retval);
-
- return retval;
+grub_efi_get_time_ms (void)
+{
+ return tmr;
+}
+
+static void
+increment_timer (grub_efi_event_t event __attribute__ ((unused)),
+ void *context __attribute__ ((unused)))
+{
+ tmr++;
}
void
grub_machine_init (void)
{
+ grub_efi_boot_services_t *b;
+
grub_efi_init ();
+
+ b = grub_efi_system_table->boot_services;
+
+ efi_call_5 (b->create_event, GRUB_EFI_EVT_TIMER | GRUB_EFI_EVT_NOTIFY_SIGNAL,
+ GRUB_EFI_TPL_CALLBACK, increment_timer, NULL, &tmr_evt);
+ efi_call_3 (b->set_timer, tmr_evt, GRUB_EFI_TIMER_PERIODIC, 10000);
+
grub_install_get_time_ms (grub_efi_get_time_ms);
}
void
grub_machine_fini (void)
{
+ grub_efi_boot_services_t *b;
+
+ b = grub_efi_system_table->boot_services;
+
+ efi_call_3 (b->set_timer, tmr_evt, GRUB_EFI_TIMER_PERIODIC, 0);
+ efi_call_1 (b->close_event, tmr_evt);
+
grub_efi_fini ();
}
=== modified file 'grub-core/kern/arm/efi/startup.S'
--- grub-core/kern/arm/efi/startup.S 2013-04-07 00:41:07 +0000
+++ grub-core/kern/arm/efi/startup.S 2013-10-03 22:20:58 +0000
@@ -33,6 +33,4 @@
str r1, [ip]
ldr ip, =EXT_C(grub_main)
bx ip
- .thumb @ For relocation debugging
- blx _start
.end
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 291 bytes --]
next reply other threads:[~2013-10-03 22:47 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-03 22:46 Vladimir 'φ-coder/phcoder' Serbinenko [this message]
2013-10-07 11:30 ` [RFT] Rewrite timer on arm efi and remove leftover in startup code Leif Lindholm
2013-10-07 16:31 ` Vladimir 'φ-coder/phcoder' Serbinenko
2013-10-28 11:00 ` Francesco Lavra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=524DF3DD.9030208@gmail.com \
--to=phcoder@gmail.com \
--cc=grub-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).