/*	$NetBSD: sal.h,v 1.1 2006/04/07 14:21:18 cherry Exp $	*/

/*-
 * Copyright (c) 2001 Doug Rabson
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * $FreeBSD$
 */

#ifndef _MACHINE_SAL_H_
#define _MACHINE_SAL_H_

struct sal_system_table {
	char		sal_signature[4];
#define	SAL_SIGNATURE	"SST_"
	u_int32_t	sal_length;
	u_int8_t	sal_rev[2];
	u_int16_t	sal_entry_count;
	u_int8_t	sal_checksum;
	u_int8_t	sal_reserved1[7];
	u_int8_t	sal_a_version[2];
	u_int8_t	sal_b_version[2];
	char		sal_oem_id[32];
	char		sal_product_id[32];
	u_int8_t	sal_reserved2[8];
};

struct sal_entrypoint_descriptor {
	u_int8_t	sale_type;	/* == 0 */
	u_int8_t	sale_reserved1[7];
	u_int64_t	sale_pal_proc;
	u_int64_t	sale_sal_proc;
	u_int64_t	sale_sal_gp;
	u_int8_t	sale_reserved2[16];
};

struct sal_memory_descriptor {
	u_int8_t	sale_type;	/* == 1 */
	u_int8_t	sale_need_virtual;
	u_int8_t	sale_current_attribute;
	u_int8_t	sale_access_rights;
	u_int8_t	sale_supported_attributes;
	u_int8_t	sale_reserved1;
	u_int8_t	sale_memory_type[2];
	u_int64_t	sale_physical_address;
	u_int32_t	sale_length;
	u_int8_t	sale_reserved2[12];
};

struct sal_platform_descriptor {
	u_int8_t	sale_type;	/* == 2 */
	u_int8_t	sale_features;
	u_int8_t	sale_reserved[14];
};

struct sal_tr_descriptor {
	u_int8_t	sale_type;	/* == 3 */
	u_int8_t	sale_register_type;
	u_int8_t	sale_register_number;
	u_int8_t	sale_reserved1[5];
	u_int64_t	sale_virtual_address;
	u_int64_t	sale_page_size;
	u_int8_t	sale_reserved2[8];
};

struct sal_ptc_cache_descriptor {
	u_int8_t	sale_type;	/* == 4 */
	u_int8_t	sale_reserved[3];
	u_int32_t	sale_domains;
	u_int64_t	sale_address;
};

struct sal_ap_wakeup_descriptor {
	u_int8_t	sale_type;	/* == 5 */
	u_int8_t	sale_mechanism;
	u_int8_t	sale_reserved[6];
	u_int64_t	sale_vector;
};

/*
 * SAL Procedure numbers.
 */

#define SAL_SET_VECTORS		0x01000000
#define SAL_GET_STATE_INFO	0x01000001
#define SAL_GET_STATE_INFO_SIZE	0x01000002
#define SAL_CLEAR_STATE_INFO	0x01000003
#define SAL_MC_RENDEZ		0x01000004
#define SAL_MC_SET_PARAMS	0x01000005
#define SAL_REGISTER_PHYSICAL_ADDR 0x01000006
#define SAL_CACHE_FLUSH		0x01000008
#define SAL_CACHE_INIT		0x01000009
#define SAL_PCI_CONFIG_READ	0x01000010
#define SAL_PCI_CONFIG_WRITE	0x01000011
#define SAL_FREQ_BASE		0x01000012
#define SAL_UPDATE_PAL		0x01000020

/* SAL_SET_VECTORS event handler types */
#define	SAL_OS_MCA		0
#define	SAL_OS_INIT		1
#define	SAL_OS_BOOT_RENDEZ	2

/* SAL_GET_STATE_INFO, SAL_GET_STATE_INFO_SIZE types */
#define	SAL_INFO_MCA		0
#define	SAL_INFO_INIT		1
#define	SAL_INFO_CMC		2
#define	SAL_INFO_CPE		3
#define	SAL_INFO_TYPES		4	/* number of types we know about */

struct ia64_sal_result {
	int64_t		sal_status;
	u_int64_t	sal_result[3];
};

typedef struct ia64_sal_result sal_entry_t
	(u_int64_t, u_int64_t, u_int64_t, u_int64_t,
	 u_int64_t, u_int64_t, u_int64_t, u_int64_t);

extern sal_entry_t *ia64_sal_entry;

extern void ia64_sal_init(void);

#endif /* _MACHINE_SAL_H_ */
