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_PRIV_H 28 #define _SYS_SGSBBC_IOSRAM_PRIV_H 29 30 #pragma ident "%Z%%M% %I% %E% SMI" 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 #include <sys/types.h> 37 #include <sys/errno.h> 38 #include <sys/sgsbbc_priv.h> 39 #include <sys/sgsbbc_iosram.h> 40 41 /* 42 * The following keys are in I/O SRAM TOC 43 * and used by the OS and SC-APP 44 * These are mapped to the numeric values below 45 * 46 * NB These must be kept in sync with POST/SC keys. 47 */ 48 #define TOCKEY_DOMSTAT "DOMSTAT" /* SBBC_DOMAIN_KEY */ 49 #define TOCKEY_KEYSWPO "KEYSWPO" /* SBBC_KEYSWITCH_KEY */ 50 #define TOCKEY_TODDATA "TODDATA" /* SBBC_TOD_KEY */ 51 #define TOCKEY_SOLCONS "SOLCONS" /* SBBC_CONSOLE_KEY */ 52 #define TOCKEY_SOLMBOX "SOLMBOX" /* SBBC_MAILBOX_KEY */ 53 #define TOCKEY_SOLSCIR "SOLSCIR" /* SBBC_INTR_SC_KEY */ 54 #define TOCKEY_SCSOLIR "SCSOLIR" /* SBBC_SC_INTR_KEY */ 55 #define TOCKEY_ENVINFO "ENVINFO" /* SBBC_ENVCTRL_KEY */ 56 /* 57 * Interrupts enabled that SC can send to OS 58 * read/only for SC 59 */ 60 #define TOCKEY_SOLSCIE "SOLSCIE" /* SBBC_SC_INTR_ENABLED_KEY */ 61 /* 62 * Interrupts enabled that OS can send to SC 63 * read/only for OS 64 */ 65 #define TOCKEY_SCSOLIE "SCSOLIE" /* SBBC_INTR_SC_ENABLED_KEY */ 66 /* 67 * CPU/Domain signatures block 68 */ 69 #define TOCKEY_SIGBLCK "SIGBLCK" /* SBBC_SIGBLCK_KEY */ 70 71 72 /* 73 * different sram types 74 */ 75 #define CPU_SRAM 1 76 #define LOCAL_IO_SRAM 2 77 #define GLOBAL_IO_SRAM 3 78 #define WCI_SRAM 4 79 80 #define INVALID_KEY(tunnel, x) (tunnel->tunnel_keys[(x)].key == 0) 81 82 /* 83 * Macros used for version checking 84 * The SBBC driver will check the major version number in the IOSRAM 85 * TOC entry. If the major version number in the TOC entry is larger 86 * than the maximum number Solaris supports, Solaris will panic. 87 */ 88 #define IOSRAM_TOC_VER_SHIFT 0x8 /* top 8 bit for major */ 89 #define IOSRAM_TOC_VER_MASK 0xff /* 8-bit for major, 8-bit for minor */ 90 91 /* 92 * IOSRAM/TOC propertes on chosen node 93 */ 94 #define IOSRAM_CHOSEN_PROP "iosram" 95 #define IOSRAM_TOC_PROP "iosram-toc" 96 97 typedef struct tunnel_key { 98 int key; 99 caddr_t base; /* VA of this tunnel SRAM area */ 100 int size; 101 ddi_acc_handle_t reg_handle; 102 } tunnel_key_t; 103 104 typedef struct tunnel { 105 tunnel_key_t tunnel_keys[SBBC_MAX_KEYS]; 106 } tunnel_t; 107 108 struct chosen_iosram { 109 /* 110 * Global IOSRAM lock 111 */ 112 kmutex_t iosram_lock; 113 /* 114 * Tunnel lock to synchronize IOSRAM access 115 */ 116 krwlock_t tunnel_lock; 117 /* 118 * 'chosen' SBBC 119 */ 120 sbbc_softstate_t *iosram_sbbc; 121 sbbc_softstate_t *sgsbbc; /* cross reference */ 122 123 /* 124 * pointer to an array of SBBC_MAX_KEYS tunnel entries 125 */ 126 tunnel_t *tunnel; 127 /* 128 * interrupt handlers 129 */ 130 sbbc_intrs_t intrs[SBBC_MAX_INTRS]; 131 }; 132 133 134 extern void iosram_init(void); 135 extern void iosram_fini(void); 136 extern int sgsbbc_iosram_is_chosen(sbbc_softstate_t *); 137 138 /* 139 * tunnel switch related routines 140 */ 141 extern int iosram_tunnel_init(sbbc_softstate_t *); 142 extern int sgsbbc_iosram_switchfrom(sbbc_softstate_t *); 143 extern int iosram_switch_tunnel(int); 144 145 extern struct chosen_iosram *master_iosram; 146 extern struct sbbc_softstate *sgsbbc_instances; 147 148 #ifdef __cplusplus 149 } 150 #endif 151 152 #endif /* _SYS_SGSBBC_IOSRAM_PRIV_H */ 153