1 /* $NetBSD: sal.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */ 2 3 /*- 4 * Copyright (c) 2001 Doug Rabson 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 * 28 * $FreeBSD$ 29 */ 30 31 #ifndef _MACHINE_SAL_H_ 32 #define _MACHINE_SAL_H_ 33 34 struct sal_system_table { 35 char sal_signature[4]; 36 #define SAL_SIGNATURE "SST_" 37 u_int32_t sal_length; 38 u_int8_t sal_rev[2]; 39 u_int16_t sal_entry_count; 40 u_int8_t sal_checksum; 41 u_int8_t sal_reserved1[7]; 42 u_int8_t sal_a_version[2]; 43 u_int8_t sal_b_version[2]; 44 char sal_oem_id[32]; 45 char sal_product_id[32]; 46 u_int8_t sal_reserved2[8]; 47 }; 48 49 struct sal_entrypoint_descriptor { 50 u_int8_t sale_type; /* == 0 */ 51 u_int8_t sale_reserved1[7]; 52 u_int64_t sale_pal_proc; 53 u_int64_t sale_sal_proc; 54 u_int64_t sale_sal_gp; 55 u_int8_t sale_reserved2[16]; 56 }; 57 58 struct sal_memory_descriptor { 59 u_int8_t sale_type; /* == 1 */ 60 u_int8_t sale_need_virtual; 61 u_int8_t sale_current_attribute; 62 u_int8_t sale_access_rights; 63 u_int8_t sale_supported_attributes; 64 u_int8_t sale_reserved1; 65 u_int8_t sale_memory_type[2]; 66 u_int64_t sale_physical_address; 67 u_int32_t sale_length; 68 u_int8_t sale_reserved2[12]; 69 }; 70 71 struct sal_platform_descriptor { 72 u_int8_t sale_type; /* == 2 */ 73 u_int8_t sale_features; 74 u_int8_t sale_reserved[14]; 75 }; 76 77 struct sal_tr_descriptor { 78 u_int8_t sale_type; /* == 3 */ 79 u_int8_t sale_register_type; 80 u_int8_t sale_register_number; 81 u_int8_t sale_reserved1[5]; 82 u_int64_t sale_virtual_address; 83 u_int64_t sale_page_size; 84 u_int8_t sale_reserved2[8]; 85 }; 86 87 struct sal_ptc_cache_descriptor { 88 u_int8_t sale_type; /* == 4 */ 89 u_int8_t sale_reserved[3]; 90 u_int32_t sale_domains; 91 u_int64_t sale_address; 92 }; 93 94 struct sal_ap_wakeup_descriptor { 95 u_int8_t sale_type; /* == 5 */ 96 u_int8_t sale_mechanism; 97 u_int8_t sale_reserved[6]; 98 u_int64_t sale_vector; 99 }; 100 101 /* 102 * SAL Procedure numbers. 103 */ 104 105 #define SAL_SET_VECTORS 0x01000000 106 #define SAL_GET_STATE_INFO 0x01000001 107 #define SAL_GET_STATE_INFO_SIZE 0x01000002 108 #define SAL_CLEAR_STATE_INFO 0x01000003 109 #define SAL_MC_RENDEZ 0x01000004 110 #define SAL_MC_SET_PARAMS 0x01000005 111 #define SAL_REGISTER_PHYSICAL_ADDR 0x01000006 112 #define SAL_CACHE_FLUSH 0x01000008 113 #define SAL_CACHE_INIT 0x01000009 114 #define SAL_PCI_CONFIG_READ 0x01000010 115 #define SAL_PCI_CONFIG_WRITE 0x01000011 116 #define SAL_FREQ_BASE 0x01000012 117 #define SAL_UPDATE_PAL 0x01000020 118 119 /* SAL_SET_VECTORS event handler types */ 120 #define SAL_OS_MCA 0 121 #define SAL_OS_INIT 1 122 #define SAL_OS_BOOT_RENDEZ 2 123 124 /* SAL_GET_STATE_INFO, SAL_GET_STATE_INFO_SIZE types */ 125 #define SAL_INFO_MCA 0 126 #define SAL_INFO_INIT 1 127 #define SAL_INFO_CMC 2 128 #define SAL_INFO_CPE 3 129 #define SAL_INFO_TYPES 4 /* number of types we know about */ 130 131 struct ia64_sal_result { 132 int64_t sal_status; 133 u_int64_t sal_result[3]; 134 }; 135 136 typedef struct ia64_sal_result sal_entry_t 137 (u_int64_t, u_int64_t, u_int64_t, u_int64_t, 138 u_int64_t, u_int64_t, u_int64_t, u_int64_t); 139 140 extern sal_entry_t *ia64_sal_entry; 141 142 extern void ia64_sal_init(void); 143 144 #endif /* _MACHINE_SAL_H_ */ 145