1 #ifndef _ASM_X86_UV_BIOS_H 2 #define _ASM_X86_UV_BIOS_H 3 4 /* 5 * UV BIOS layer definitions. 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 * 21 * Copyright (c) 2008-2009 Silicon Graphics, Inc. All Rights Reserved. 22 * Copyright (c) Russ Anderson <rja@sgi.com> 23 */ 24 25 #include <linux/rtc.h> 26 27 /* 28 * Values for the BIOS calls. It is passed as the first * argument in the 29 * BIOS call. Passing any other value in the first argument will result 30 * in a BIOS_STATUS_UNIMPLEMENTED return status. 31 */ 32 enum uv_bios_cmd { 33 UV_BIOS_COMMON, 34 UV_BIOS_GET_SN_INFO, 35 UV_BIOS_FREQ_BASE, 36 UV_BIOS_WATCHLIST_ALLOC, 37 UV_BIOS_WATCHLIST_FREE, 38 UV_BIOS_MEMPROTECT, 39 UV_BIOS_GET_PARTITION_ADDR, 40 UV_BIOS_SET_LEGACY_VGA_TARGET 41 }; 42 43 /* 44 * Status values returned from a BIOS call. 45 */ 46 enum { 47 BIOS_STATUS_MORE_PASSES = 1, 48 BIOS_STATUS_SUCCESS = 0, 49 BIOS_STATUS_UNIMPLEMENTED = -ENOSYS, 50 BIOS_STATUS_EINVAL = -EINVAL, 51 BIOS_STATUS_UNAVAIL = -EBUSY 52 }; 53 54 /* 55 * The UV system table describes specific firmware 56 * capabilities available to the Linux kernel at runtime. 57 */ 58 struct uv_systab { 59 char signature[4]; /* must be "UVST" */ 60 u32 revision; /* distinguish different firmware revs */ 61 u64 function; /* BIOS runtime callback function ptr */ 62 }; 63 64 enum { 65 BIOS_FREQ_BASE_PLATFORM = 0, 66 BIOS_FREQ_BASE_INTERVAL_TIMER = 1, 67 BIOS_FREQ_BASE_REALTIME_CLOCK = 2 68 }; 69 70 union partition_info_u { 71 u64 val; 72 struct { 73 u64 hub_version : 8, 74 partition_id : 16, 75 coherence_id : 16, 76 region_size : 24; 77 }; 78 }; 79 80 enum uv_memprotect { 81 UV_MEMPROT_RESTRICT_ACCESS, 82 UV_MEMPROT_ALLOW_AMO, 83 UV_MEMPROT_ALLOW_RW 84 }; 85 86 /* 87 * bios calls have 6 parameters 88 */ 89 extern s64 uv_bios_call(enum uv_bios_cmd, u64, u64, u64, u64, u64); 90 extern s64 uv_bios_call_irqsave(enum uv_bios_cmd, u64, u64, u64, u64, u64); 91 extern s64 uv_bios_call_reentrant(enum uv_bios_cmd, u64, u64, u64, u64, u64); 92 93 extern s64 uv_bios_get_sn_info(int, int *, long *, long *, long *, long *); 94 extern s64 uv_bios_freq_base(u64, u64 *); 95 extern int uv_bios_mq_watchlist_alloc(unsigned long, unsigned int, 96 unsigned long *); 97 extern int uv_bios_mq_watchlist_free(int, int); 98 extern s64 uv_bios_change_memprotect(u64, u64, enum uv_memprotect); 99 extern s64 uv_bios_reserved_page_pa(u64, u64 *, u64 *, u64 *); 100 extern int uv_bios_set_legacy_vga_target(bool decode, int domain, int bus); 101 102 extern void uv_bios_init(void); 103 104 extern unsigned long sn_rtc_cycles_per_second; 105 extern int uv_type; 106 extern long sn_partition_id; 107 extern long sn_coherency_id; 108 extern long sn_region_size; 109 extern long system_serial_number; 110 #define partition_coherence_id() (sn_coherency_id) 111 112 extern struct kobject *sgi_uv_kobj; /* /sys/firmware/sgi_uv */ 113 114 #endif /* _ASM_X86_UV_BIOS_H */ 115