-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
x86 BIOS interface for RTC on SGI UV
Real-time code needs to know the number of cycles per second on SGI UV. The information is provided via a run time BIOS call. This patch provides the linux side of that interface. This is the first of several run time BIOS calls to be defined in uv/bios.h and bios_uv.c. Note that BIOS_CALL() is just a stub for now. The bios side is being worked on. Signed-off-by: Russ Anderson <rja@sgi.com> Cc: Jack Steiner <steiner@sgi.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
- Loading branch information
Russ Anderson
authored and
Ingo Molnar
committed
Jul 18, 2008
1 parent
5b664cb
commit 7019cc2
Showing
4 changed files
with
140 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
/* | ||
* BIOS run time interface routines. | ||
* | ||
* Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. | ||
* | ||
* This program 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 2 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program 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 this program; if not, write to the Free Software | ||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
*/ | ||
|
||
#include <asm/uv/bios.h> | ||
|
||
const char * | ||
x86_bios_strerror(long status) | ||
{ | ||
const char *str; | ||
switch (status) { | ||
case 0: str = "Call completed without error"; break; | ||
case -1: str = "Not implemented"; break; | ||
case -2: str = "Invalid argument"; break; | ||
case -3: str = "Call completed with error"; break; | ||
default: str = "Unknown BIOS status code"; break; | ||
} | ||
return str; | ||
} | ||
|
||
long | ||
x86_bios_freq_base(unsigned long which, unsigned long *ticks_per_second, | ||
unsigned long *drift_info) | ||
{ | ||
struct uv_bios_retval isrv; | ||
|
||
BIOS_CALL(isrv, BIOS_FREQ_BASE, which, 0, 0, 0, 0, 0, 0); | ||
*ticks_per_second = isrv.v0; | ||
*drift_info = isrv.v1; | ||
return isrv.status; | ||
} | ||
EXPORT_SYMBOL_GPL(x86_bios_freq_base); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
#ifndef _ASM_X86_BIOS_H | ||
#define _ASM_X86_BIOS_H | ||
|
||
/* | ||
* BIOS layer definitions. | ||
* | ||
* Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. | ||
* | ||
* This program 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 2 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program 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 this program; if not, write to the Free Software | ||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
*/ | ||
|
||
#include <linux/rtc.h> | ||
|
||
#define BIOS_FREQ_BASE 0x01000001 | ||
|
||
enum { | ||
BIOS_FREQ_BASE_PLATFORM = 0, | ||
BIOS_FREQ_BASE_INTERVAL_TIMER = 1, | ||
BIOS_FREQ_BASE_REALTIME_CLOCK = 2 | ||
}; | ||
|
||
# define BIOS_CALL(result, a0, a1, a2, a3, a4, a5, a6, a7) \ | ||
do { \ | ||
/* XXX - the real call goes here */ \ | ||
result.status = BIOS_STATUS_UNIMPLEMENTED; \ | ||
isrv.v0 = 0; \ | ||
isrv.v1 = 0; \ | ||
} while (0) | ||
|
||
enum { | ||
BIOS_STATUS_SUCCESS = 0, | ||
BIOS_STATUS_UNIMPLEMENTED = -1, | ||
BIOS_STATUS_EINVAL = -2, | ||
BIOS_STATUS_ERROR = -3 | ||
}; | ||
|
||
struct uv_bios_retval { | ||
/* | ||
* A zero status value indicates call completed without error. | ||
* A negative status value indicates reason of call failure. | ||
* A positive status value indicates success but an | ||
* informational value should be printed (e.g., "reboot for | ||
* change to take effect"). | ||
*/ | ||
s64 status; | ||
u64 v0; | ||
u64 v1; | ||
u64 v2; | ||
}; | ||
|
||
extern long | ||
x86_bios_freq_base(unsigned long which, unsigned long *ticks_per_second, | ||
unsigned long *drift_info); | ||
extern const char *x86_bios_strerror(long status); | ||
|
||
#endif /* _ASM_X86_BIOS_H */ |