1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27#ifndef	_SYS_SGSBBC_IOSRAM_H
28#define	_SYS_SGSBBC_IOSRAM_H
29
30#pragma ident	"%Z%%M%	%I%	%E% SMI"
31
32#ifdef	__cplusplus
33extern "C" {
34#endif
35
36#include <sys/types.h>
37#include <sys/errno.h>
38#include <sys/sgsbbc.h>
39
40/*
41 * IOSRAM TOC as laid out for the OS by the SC/POST
42 *
43 * NB Any changes in the way POST/SC lays out the SRAM
44 * must be reflected here.
45 */
46#define	SBBC_MAX_KEYS		32
47
48#define	SBBC_CONSOLE_KEY	1	/* Solaris Console Buffer */
49#define	SBBC_TOD_KEY		2	/* Solaris TOD struct */
50#define	SBBC_INTR_SC_KEY	3	/* Solaris -> SC Interrupts reason */
51#define	SBBC_SC_INTR_KEY	4	/* SC -> Solaris Interrupts reason */
52#define	SBBC_DOMAIN_KEY		5	/* Domain state */
53#define	SBBC_KEYSWITCH_KEY	6	/* Keyswitch */
54#define	SBBC_MAILBOX_KEY	7	/* Solaris<->SC Mailbox */
55#define	SBBC_ENVCTRL_KEY	8	/* environmental data */
56#define	SBBC_SC_INTR_ENABLED_KEY	9	/* SC -> Solaris Interrupts */
57#define	SBBC_INTR_SC_ENABLED_KEY	10	/* Solaris -> SC  Interrupts */
58#define	SBBC_SIGBLCK_KEY	11	/* Signature block */
59
60/*
61 * size of the IOSRAM key
62 */
63#define	KEY_SIZE	8
64#define	MAGIC_SIZE	8
65
66typedef struct iosram_key {
67	char		key[KEY_SIZE];	/* Key value as defined above */
68	uint32_t	size;		/* length of this SRAM chunk */
69	uint32_t	offset;		/* Offset from base of SRAM */
70} iosram_key_t;
71
72struct iosram_toc {
73	char		iosram_magic[MAGIC_SIZE];	/* magic: TOCSRAM */
74	uint8_t		resvd;				/* reserved */
75	/* sram type: cpu, local io, global io, etc */
76	uint8_t		iosram_type;
77	uint16_t	iosram_version;			/* structure version */
78	uint32_t	iosram_tagno;			/* # of tags used */
79	iosram_key_t	iosram_keys[SBBC_MAX_KEYS];
80};
81
82
83/*
84 * interrupt related routines
85 */
86extern int	iosram_reg_intr(uint32_t, sbbc_intrfunc_t, caddr_t,
87			uint_t	*, kmutex_t *);
88extern int	iosram_unreg_intr(uint32_t);
89extern int	iosram_send_intr(uint32_t);
90
91/*
92 * IOSRAM read write routines
93 */
94extern int	iosram_read(int, uint32_t, caddr_t, uint32_t);
95extern int	iosram_write(int, uint32_t, caddr_t, uint32_t);
96
97/*
98 * Misc routines
99 */
100extern int	iosram_size(int);
101
102/* cached chosen node_id */
103extern pnode_t chosen_nodeid;
104
105#ifdef	__cplusplus
106}
107#endif
108
109#endif	/* _SYS_SGSBBC_IOSRAM_H */
110