From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1IhR6T-0006uu-66 for mharc-grub-devel@gnu.org; Mon, 15 Oct 2007 10:39:33 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IhR6R-0006uj-4M for grub-devel@gnu.org; Mon, 15 Oct 2007 10:39:31 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IhR6P-0006tw-OA for grub-devel@gnu.org; Mon, 15 Oct 2007 10:39:29 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IhR6P-0006tt-JQ for grub-devel@gnu.org; Mon, 15 Oct 2007 10:39:29 -0400 Received: from aybabtu.com ([69.60.117.155]) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1IhR6O-0001rt-SK for grub-devel@gnu.org; Mon, 15 Oct 2007 10:39:29 -0400 Received: from [192.168.10.6] (helo=thorin) by aybabtu.com with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.63) (envelope-from ) id 1IhR6L-0002Ds-1O for grub-devel@gnu.org; Mon, 15 Oct 2007 16:39:28 +0200 Received: from rmh by thorin with local (Exim 4.63) (envelope-from ) id 1IhR5t-0006wW-CB for grub-devel@gnu.org; Mon, 15 Oct 2007 16:38:57 +0200 Date: Mon, 15 Oct 2007 16:38:57 +0200 From: Robert Millan To: grub-devel@gnu.org Message-ID: <20071015143857.GA26571@thorin> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="RnlQjJ0d97Da+TV1" Content-Disposition: inline Organization: free as in freedom X-Message-Flag: Microsoft discourages use of Outlook. X-Debbugs-No-Ack: true User-Agent: Mutt/1.5.13 (2006-08-11) X-detected-kernel: by monty-python.gnu.org: Genre and OS details not recognized. Subject: [PATCH] Implement grub_sleep() and grub_ticksleep() X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Oct 2007 14:39:31 -0000 --RnlQjJ0d97Da+TV1 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline This patch implements grub_sleep() and grub_ticksleep(). -- Robert Millan I know my rights; I want my phone call! What use is a phone call, if you are unable to speak? (as seen on /.) --RnlQjJ0d97Da+TV1 Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="ticksleep.diff" 2007-10-15 Robert Millan * include/grub/time.h: New file. * include/grub/i386/pc/time.h (KERNEL_TIME_HEADER): Rename all instances to ... (KERNEL_MACHINE_TIME_HEADER): ... this. * include/grub/powerpc/ieee1275/time.h: Likewise. * include/grub/sparc64/ieee1275/time.h: Likewise. * kern/i386/efi/init.c: Include `grub/time.h'. (grub_ticksleep): New function. * kern/i386/pc/init.c: Likewise. * kern/powerpc/ieee1275/init.c: Likewise. * kern/sparc64/ieee1275/init.c: Likewise. diff -Nur grub2/include/grub/i386/pc/time.h grub2.ticks/include/grub/i386/pc/time.h --- grub2/include/grub/i386/pc/time.h 2007-07-22 01:32:24.000000000 +0200 +++ grub2.ticks/include/grub/i386/pc/time.h 2007-10-15 16:23:25.000000000 +0200 @@ -16,8 +16,8 @@ * along with GRUB. If not, see . */ -#ifndef KERNEL_TIME_HEADER -#define KERNEL_TIME_HEADER 1 +#ifndef KERNEL_MACHINE_TIME_HEADER +#define KERNEL_MACHINE_TIME_HEADER 1 #include @@ -26,4 +26,4 @@ /* Return the real time in ticks. */ grub_uint32_t EXPORT_FUNC (grub_get_rtc) (void); -#endif /* ! KERNEL_TIME_HEADER */ +#endif /* ! KERNEL_MACHINE_TIME_HEADER */ diff -Nur grub2/include/grub/powerpc/ieee1275/time.h grub2.ticks/include/grub/powerpc/ieee1275/time.h --- grub2/include/grub/powerpc/ieee1275/time.h 2007-07-22 01:32:24.000000000 +0200 +++ grub2.ticks/include/grub/powerpc/ieee1275/time.h 2007-10-15 16:20:12.000000000 +0200 @@ -16,8 +16,8 @@ * along with GRUB. If not, see . */ -#ifndef KERNEL_TIME_HEADER -#define KERNEL_TIME_HEADER 1 +#ifndef KERNEL_MACHINE_TIME_HEADER +#define KERNEL_MACHINE_TIME_HEADER 1 #include @@ -26,4 +26,4 @@ /* Return the real time in ticks. */ grub_uint32_t EXPORT_FUNC (grub_get_rtc) (void); -#endif /* ! KERNEL_TIME_HEADER */ +#endif /* ! KERNEL_MACHINE_TIME_HEADER */ diff -Nur grub2/include/grub/sparc64/ieee1275/time.h grub2.ticks/include/grub/sparc64/ieee1275/time.h --- grub2/include/grub/sparc64/ieee1275/time.h 2007-07-22 01:32:25.000000000 +0200 +++ grub2.ticks/include/grub/sparc64/ieee1275/time.h 2007-10-15 16:20:12.000000000 +0200 @@ -16,8 +16,8 @@ * along with GRUB. If not, see . */ -#ifndef KERNEL_TIME_HEADER -#define KERNEL_TIME_HEADER 1 +#ifndef KERNEL_MACHINE_TIME_HEADER +#define KERNEL_MACHINE_TIME_HEADER 1 #include @@ -26,4 +26,4 @@ /* Return the real time in ticks. */ grub_uint32_t EXPORT_FUNC (grub_get_rtc) (void); -#endif /* ! KERNEL_TIME_HEADER */ +#endif /* ! KERNEL_MACHINE_TIME_HEADER */ diff -Nur grub2/include/grub/time.h grub2.ticks/include/grub/time.h --- grub2/include/grub/time.h 1970-01-01 01:00:00.000000000 +0100 +++ grub2.ticks/include/grub/time.h 2007-10-15 16:22:44.000000000 +0200 @@ -0,0 +1,42 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#ifndef KERNEL_TIME_HEADER +#define KERNEL_TIME_HEADER 1 + +#include +#include + +void EXPORT_FUNC(grub_ticksleep) (grub_uint32_t ticks); + +static __inline void +grub_sleep (grub_uint32_t s) +{ + grub_ticksleep (s * GRUB_TICKS_PER_SECOND); +} + +static __inline void +grub_cpu_idle () +{ +#if defined(__i386__) + __asm__ __volatile__ ("hlt"); + /* FIXME: add other CPUs here */ +#endif +} + +#endif /* ! KERNEL_TIME_HEADER */ diff -Nur grub2/kern/i386/efi/init.c grub2.ticks/kern/i386/efi/init.c --- grub2/kern/i386/efi/init.c 2007-07-22 01:32:27.000000000 +0200 +++ grub2.ticks/kern/i386/efi/init.c 2007-10-15 16:28:06.000000000 +0200 @@ -25,6 +25,16 @@ #include #include #include +#include + +void +grub_ticksleep (grub_uint32_t ticks) +{ + grub_uint32_t end_at; + end_at = grub_get_rtc () + ticks; + while (grub_get_rtc () < end_at) + grub_cpu_idle (); +} void grub_machine_init (void) diff -Nur grub2/kern/i386/pc/init.c grub2.ticks/kern/i386/pc/init.c --- grub2/kern/i386/pc/init.c 2007-09-07 23:55:26.000000000 +0200 +++ grub2.ticks/kern/i386/pc/init.c 2007-10-15 16:27:53.000000000 +0200 @@ -30,6 +30,7 @@ #include #include #include +#include struct mem_region { @@ -46,6 +47,15 @@ grub_size_t grub_os_area_size; grub_size_t grub_lower_mem, grub_upper_mem; +void +grub_ticksleep (grub_uint32_t ticks) +{ + grub_uint32_t end_at; + end_at = grub_get_rtc () + ticks; + while (grub_get_rtc () < end_at) + grub_cpu_idle (); +} + void grub_arch_sync_caches (void *address __attribute__ ((unused)), grub_size_t len __attribute__ ((unused))) diff -Nur grub2/kern/powerpc/ieee1275/init.c grub2.ticks/kern/powerpc/ieee1275/init.c --- grub2/kern/powerpc/ieee1275/init.c 2007-10-12 12:22:27.000000000 +0200 +++ grub2.ticks/kern/powerpc/ieee1275/init.c 2007-10-15 16:28:30.000000000 +0200 @@ -27,8 +27,8 @@ #include #include #include +#include #include -#include #include #include #include @@ -47,6 +47,15 @@ extern char _end[]; void +grub_ticksleep (grub_uint32_t ticks) +{ + grub_uint32_t end_at; + end_at = grub_get_rtc () + ticks; + while (grub_get_rtc () < end_at) + grub_cpu_idle (); +} + +void grub_exit (void) { /* Trap to Open Firmware. */ diff -Nur grub2/kern/sparc64/ieee1275/init.c grub2.ticks/kern/sparc64/ieee1275/init.c --- grub2/kern/sparc64/ieee1275/init.c 2007-07-22 01:32:28.000000000 +0200 +++ grub2.ticks/kern/sparc64/ieee1275/init.c 2007-10-15 16:28:44.000000000 +0200 @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -66,6 +67,15 @@ /* Never reached. */ } +void +grub_ticksleep (grub_uint32_t ticks) +{ + grub_uint32_t end_at; + end_at = grub_get_rtc () + ticks; + while (grub_get_rtc () < end_at) + grub_cpu_idle (); +} + int grub_ieee1275_test_flag (enum grub_ieee1275_flag flag) { --RnlQjJ0d97Da+TV1--