2008-10-23 00:01:39 -07:00
# ifndef _ASM_X86_UV_BIOS_H
# define _ASM_X86_UV_BIOS_H
2008-07-09 15:27:19 -05:00
/*
2008-10-03 11:59:15 -05:00
* UV BIOS layer definitions .
2008-07-09 15:27:19 -05:00
*
* 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
2008-10-03 11:59:15 -05:00
*
2009-12-17 10:53:25 -06:00
* Copyright ( c ) 2008 - 2009 Silicon Graphics , Inc . All Rights Reserved .
* Copyright ( c ) Russ Anderson < rja @ sgi . com >
2008-07-09 15:27:19 -05:00
*/
# include <linux/rtc.h>
2008-10-03 11:59:15 -05:00
/*
* Values for the BIOS calls . It is passed as the first * argument in the
* BIOS call . Passing any other value in the first argument will result
* in a BIOS_STATUS_UNIMPLEMENTED return status .
*/
enum uv_bios_cmd {
UV_BIOS_COMMON ,
UV_BIOS_GET_SN_INFO ,
2008-11-05 22:11:56 -06:00
UV_BIOS_FREQ_BASE ,
UV_BIOS_WATCHLIST_ALLOC ,
2008-11-05 22:13:44 -06:00
UV_BIOS_WATCHLIST_FREE ,
2008-11-05 22:15:13 -06:00
UV_BIOS_MEMPROTECT ,
2010-02-02 14:38:14 -08:00
UV_BIOS_GET_PARTITION_ADDR ,
UV_BIOS_SET_LEGACY_VGA_TARGET
2008-10-03 11:59:15 -05:00
} ;
2008-07-09 15:27:19 -05:00
2008-10-03 11:59:15 -05:00
/*
* Status values returned from a BIOS call .
*/
2008-07-09 15:27:19 -05:00
enum {
2008-11-05 22:15:13 -06:00
BIOS_STATUS_MORE_PASSES = 1 ,
2008-10-03 11:59:15 -05:00
BIOS_STATUS_SUCCESS = 0 ,
BIOS_STATUS_UNIMPLEMENTED = - ENOSYS ,
BIOS_STATUS_EINVAL = - EINVAL ,
BIOS_STATUS_UNAVAIL = - EBUSY
2008-07-09 15:27:19 -05:00
} ;
2008-10-03 11:59:15 -05:00
/*
* The UV system table describes specific firmware
* capabilities available to the Linux kernel at runtime .
*/
struct uv_systab {
char signature [ 4 ] ; /* must be "UVST" */
u32 revision ; /* distinguish different firmware revs */
u64 function ; /* BIOS runtime callback function ptr */
} ;
2008-07-09 15:27:19 -05:00
enum {
2008-10-03 11:59:15 -05:00
BIOS_FREQ_BASE_PLATFORM = 0 ,
BIOS_FREQ_BASE_INTERVAL_TIMER = 1 ,
BIOS_FREQ_BASE_REALTIME_CLOCK = 2
2008-07-09 15:27:19 -05:00
} ;
2008-10-03 11:59:33 -05:00
union partition_info_u {
u64 val ;
struct {
u64 hub_version : 8 ,
partition_id : 16 ,
coherence_id : 16 ,
region_size : 24 ;
} ;
} ;
2008-11-05 22:13:44 -06:00
enum uv_memprotect {
UV_MEMPROT_RESTRICT_ACCESS ,
UV_MEMPROT_ALLOW_AMO ,
UV_MEMPROT_ALLOW_RW
} ;
2008-10-03 11:59:15 -05:00
/*
* bios calls have 6 parameters
*/
extern s64 uv_bios_call ( enum uv_bios_cmd , u64 , u64 , u64 , u64 , u64 ) ;
extern s64 uv_bios_call_irqsave ( enum uv_bios_cmd , u64 , u64 , u64 , u64 , u64 ) ;
extern s64 uv_bios_call_reentrant ( enum uv_bios_cmd , u64 , u64 , u64 , u64 , u64 ) ;
2009-12-17 10:53:25 -06:00
extern s64 uv_bios_get_sn_info ( int , int * , long * , long * , long * , long * ) ;
2008-10-03 11:59:33 -05:00
extern s64 uv_bios_freq_base ( u64 , u64 * ) ;
2009-12-15 16:47:56 -08:00
extern int uv_bios_mq_watchlist_alloc ( unsigned long , unsigned int ,
2008-11-05 22:11:56 -06:00
unsigned long * ) ;
extern int uv_bios_mq_watchlist_free ( int , int ) ;
2008-11-05 22:13:44 -06:00
extern s64 uv_bios_change_memprotect ( u64 , u64 , enum uv_memprotect ) ;
2008-11-05 22:15:13 -06:00
extern s64 uv_bios_reserved_page_pa ( u64 , u64 * , u64 * , u64 * ) ;
2010-02-02 14:38:14 -08:00
extern int uv_bios_set_legacy_vga_target ( bool decode , int domain , int bus ) ;
2008-10-03 11:59:33 -05:00
2008-10-03 11:59:15 -05:00
extern void uv_bios_init ( void ) ;
2008-07-09 15:27:19 -05:00
2008-11-05 22:11:56 -06:00
extern unsigned long sn_rtc_cycles_per_second ;
2008-10-03 11:59:33 -05:00
extern int uv_type ;
extern long sn_partition_id ;
2008-10-21 14:09:51 -05:00
extern long sn_coherency_id ;
extern long sn_region_size ;
2009-12-17 10:53:25 -06:00
extern long system_serial_number ;
2008-10-21 14:09:51 -05:00
# define partition_coherence_id() (sn_coherency_id)
2008-10-03 11:59:33 -05:00
2008-10-03 11:59:50 -05:00
extern struct kobject * sgi_uv_kobj ; /* /sys/firmware/sgi_uv */
2008-07-09 15:27:19 -05:00
2008-10-23 00:01:39 -07:00
# endif /* _ASM_X86_UV_BIOS_H */