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, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22/* 23 * Copyright (c) 1996-2000 by Sun Microsystems, Inc. 24 * All rights reserved. 25 */ 26 27#ifndef _SCAT_CONST_H 28#define _SCAT_CONST_H 29 30#pragma ident "%Z%%M% %I% %E% SMI" 31 32/* 33 * This file contains definitions fundamental to the Starcat architecture; 34 * how many exps, how many of each asic type, etc. 35 */ 36 37/* 38 * POST DEVELOPERS: 39 * This file is copied to the OS workspace, and thus must abide by the OS 40 * coding standards. This file must always pass cstyle and hdrchk. 41 */ 42 43#ifdef __cplusplus 44extern "C" { 45#endif 46 47 48#define SSC_COUNT (2) 49#define SSC_MAX (SSC_COUNT - 1) 50#define IS_VALID_SSC(ssc) ((ssc) >= 0 && (ssc) < SSC_COUNT) 51 52#define EXP_COUNT (18) 53#define EXP_MAX (EXP_COUNT - 1) 54#define IS_VALID_EXP(exp) ((exp) >= 0 && (exp) < EXP_COUNT) 55 56#define EXB_COUNT EXP_COUNT 57#define EXB_MAX EXP_MAX 58#define IS_VALID_EXB(exb) IS_VALID_EXP(exb) 59 60#ifdef No_More_No_More 61 /* Support this for awhile until we purge everywhere: */ 62#define NODE_COUNT EXP_COUNT 63#define NODE_MAX EXP_MAX 64#define IS_VALID_NODE(node) IS_VALID_EXP(node) 65#endif /* No_More_No_More */ 66 67 /* Slots are L1 boards within an expander */ 68#define SLOT_COUNT (2) 69#define SLOT_MAX (SLOT_COUNT - 1) 70#define IS_VALID_SLOT(slot) ((slot) >= 0 && (slot) < SLOT_COUNT) 71 72 73#ifdef REFERENCE 74 /* XXX: temporary definitions till Dan decides what he wants */ 75#define L1_COUNT (SLOT_COUNT * EXP_COUNT) 76#define L1_MAX (L1_COUNT - 1) 77#define IS_VALID_L1_BOARD(brd) ((brd) >= 0 && (brd) < L1_COUNT) 78 79#define S0_PROC_COUNT (4) /* max procs on slot 0 L1 board */ 80#define S1_PROC_COUNT (2) /* max procs on slot 1 L1 board */ 81 82#define SPM_COUNT (S0_PROC_COUNT + S1_PROC_COUNT) 83 84#define PROC_COUNT ((S0_PROC_COUNT * EXP_COUNT) + \ 85 (S1_PROC_COUNT * EXP_COUNT)) 86#define PROC_MAX (PROC_COUNT - 1) 87#define IS_VALID_PROC(proc) ((proc) >= 0 && (proc) < PROC_COUNT) 88 89#define EXP2PROC(exp, spm) ((exp) * (spm)) 90#define EXPSLTBBC2SRAM(exp, slt, bbc) ((exp * 3) + (slt * 2) + (bbc)) 91 92#define PROC2EXP(proc) ((proc) / 6) 93#define PROC2SPM(proc) ((proc) % 6) 94#define PROC2CPU(proc) (PROC2SPM(proc) & 0x3) 95#define PROC2SLT(proc) (PROC2SPM(proc) >> 2) 96#define PROC2BBC(proc) (((PROC2CPU(proc)) & 0x2) >> 1) 97#define PROC2PRT(proc) ((proc) & 0x1) 98#define EXPSLT(proc) PROC2EXP(proc), PROC2SLT(proc) 99#define EXPSLTCPU(proc) PROC2EXP(proc), PROC2SLT(proc), PROC2CPU(proc) 100#endif /* REFERENCE */ 101 102 103 /* 104 * PFP = Packed flat port. 105 * For cases where one might need to maintain information 106 * (pcd arrays), or write loops, over all 18 X 6 = 108 ports. 107 * It is expected that this flat view of the ports is not made 108 * visible to the user, they should see only the ordered triple 109 * <exp>.<slot>.<lport> or the 10-bit Safari PortId. 110 * PWE = Port Within Expander. [0-5]. Comes along with the 111 * PFP model, should also not be externally visible. 112 */ 113#define PORT_PER_EXP 6 114#define PWE_COUNT PORT_PER_EXP 115#define PWE_MAX (PWE_COUNT - 1) 116#define IS_VALID_PWE(pwe) ((pwe) >= 0 && (pwe) < PWE_COUNT) 117 118#define PFP_COUNT (EXP_COUNT * PORT_PER_EXP) 119#define PFP_MAX (PFP_COUNT - 1) 120#define IS_VALID_PFP(pfp) ((pfp) >= 0 && (pfp) < PFP_COUNT) 121 122#define PFP2EXP(pfp) ((pfp) / 6) 123#define PFP2PWE(pfp) ((pfp) % 6) 124#define PWE2SLOT(pwe) ((pwe) >> 2) 125#define PWE2LPORT(pwe) ((pwe) & 0x3) 126#define PFP2SLOT(pfp) (PWE2SLOT(PFP2PWE(pfp))) 127#define PFP2LPORT(pfp) (PWE2LPORT(PFP2PWE(pfp))) 128#define PFP2BBC(pfp) (((PFP2PWE(pfp)) >> 1) & 1) 129#define PFP2BBCPORT(pfp) ((pfp) & 1) 130 131#define SL2PWE(slot, lport) (((slot) << 2) + (lport)) 132#define EPWE2PFP(exp, pwe) (((exp) * 6) + (pwe)) 133#define ESL2PFP(exp, slot, lport) (EPWE2PFP((exp), SL2PWE((slot), (lport)))) 134 135#define S0_LPORT_COUNT 4 /* Ports on slot 0 L1 board */ 136#define S0_LPORT_MAX (S0_LPORT_COUNT - 1) 137#define IS_VALID_S0LPORT(lport) ((lport) >= 0 && (lport) < S0_LPORT_COUNT) 138#define S1_LPORT_COUNT 2 /* Ports on slot 1 L1 board */ 139#define S1_LPORT_MAX (S1_LPORT_COUNT - 1) 140#define IS_VALID_S1LPORT(lport) ((lport) >= 0 && (lport) < S1_LPORT_COUNT) 141#define LPORT_COUNT(slot) ((slot) ? S1_LPORT_COUNT : S0_LPORT_COUNT) 142#define LPORT_MAX(slot) (LPORT_COUNT(slot) - 1) 143#define IS_VALID_LPORT(slot, lport) \ 144 ((lport) >= 0 && (lport) < LPORT_COUNT(slot)) 145#define XC_IOBUS_PER_PORT 2 146#define XC_IOCARD_PER_PORT 1 147#define IS_VALID_IOBUS(bus) ((bus) >= 0 && (bus) < XC_IOBUS_PER_PORT) 148#define IS_VALID_IOCARD(card) ((card) >= 0 && (card) < XC_IOCARD_PER_PORT) 149 150 /* BBC in these macros is local to a slot, either 0 or 1: */ 151#define S0_BBC_COUNT 2 /* BBCs on slot 0 L1 board */ 152#define S0_BBC_MAX (S0_BBC_COUNT - 1) 153#define IS_VALID_S0BBC(bbc) ((bbc) >= 0 && (bbc) < S0_BBC_COUNT) 154#define S1_BBC_COUNT 1 /* BBCs on slot 1 L1 board */ 155#define S1_BBC_MAX (S1_BBC_COUNT - 1) 156#define IS_VALID_S1BBC(bbc) ((bbc) >= 0 && (bbc) < S1_BBC_COUNT) 157#define BBC_COUNT(slot) ((slot) ? S1_BBC_COUNT : S0_BBC_COUNT) 158#define BBC_MAX(slot) (BBC_COUNT(slot) - 1) 159#define IS_VALID_BBC(slot, bbc) \ 160 ((bbc) >= 0 && (bbc) < BBC_COUNT(slot)) 161 162#define LPORT2BBC(lport) ((lport) >> 1) 163#define PWE2BBC(pwe) (((pwe) >> 1) & 1) 164 165 166 /* These are for use as printf() arguments for "%2d.%d", etc.: */ 167#define EXPSLOT(pfp) PFP2EXP(pfp), PFP2SLOT(pfp) 168#define EXPSLOTLPORT(pfp) PFP2EXP(pfp), PFP2SLOT(pfp), PFP2LPORT(pfp) 169 170 171 /* Build a 5-bit Safari Agent ID: */ 172#define SAFAGENT(slot, lport, is_ioport) \ 173 (((slot) ? ((is_ioport) ? 0x1C : 8) : 0) + (lport)) 174 175 /* Build a 10-bit Safari ID: */ 176#define SAFARI_ID(exp, slot, lport, is_ioport) \ 177 (SAFAGENT(slot, lport, is_ioport) | ((exp) << 5)) 178 179 /* Given a Safari Agent ID, extract the expander number */ 180#define GET_EXP(aid) ((aid & 0x3E0ull) >> 5) 181 182 /* Cacheable memory per (CPU) port */ 183#define DIMMS_PER_PORT 8 184#define IS_VALID_DIMM(dimm) \ 185 (((dimm) >= 0) && (dimm < (DIMMS_PER_PORT))) 186#define PMBANKS_PER_PORT 2 187#define LMBANKS_PER_PMBANK 2 188#define IS_VALID_PMBANK(pmbank) \ 189 (((pmbank) >= 0) && (pmbank < PMBANKS_PER_PORT)) 190#define IS_VALID_LMBANK(lmbank) \ 191 (((lmbank) >= 0) && (lmbank < PMBANKS_PER_PORT)) 192 193 /* Ecache per (CPU) port */ 194#define ECDIMMS_PER_PORT 2 195#define IS_VALID_ECACHE(ecache) \ 196 (((ecache) >= 0) && (ecache < ECDIMMS_PER_PORT)) 197 198 /* SCM asics per CSB: */ 199#define SCM_COUNT (2) 200#define SCM_MAX (SCM_COUNT - 1) 201#define IS_VALID_SCM(scm) ((scm) >= 0 && (scm) < SCM_COUNT) 202 203 /* Master ports in an SCM: */ 204#define SCM_MPORT_COUNT 10 205 206 /* SDI asics per EXB: */ 207#define SDI_COUNT (6) 208#define SDI_MAX (SDI_COUNT - 1) 209#define IS_VALID_SDI(sdi) ((sdi) >= 0 && (sdi) < SDI_COUNT) 210 211 /* Half-centerplanes, CSBs, etc. */ 212#define CP_COUNT (2) 213#define CP_MAX (CP_COUNT - 1) 214#define IS_VALID_CP(cp) ((cp) >= 0 && (cp) < CP_COUNT) 215 216 /* DMX asics on the half-centerplane: */ 217#define DMX_COUNT (6) 218#define DMX_MAX (DMX_COUNT - 1) 219#define IS_VALID_DMX(dmx) ((dmx) >= 0 && (dmx) < DMX_COUNT) 220 221 /* AMX asics on the half-centerplane: */ 222#define AMX_COUNT (2) 223#define AMX_MAX (AMX_COUNT - 1) 224#define IS_VALID_AMX(amx) ((amx) >= 0 && (amx) < AMX_COUNT) 225 226 /* Number of CPUs per SBBC on the various boards: */ 227#define CPU_COUNT (2) 228 229 /* Number of WCI per WIB: */ 230#define S0_WCI_COUNT (2) 231#define S0_WCI_MIN (2) 232#define S0_WCI_MAX (S0_WCI_MIN + S0_WCI_COUNT - 1) 233#define S0_IS_VALID_WCI(wci) ((wci) >= S0_WCI_MIN && (wci) <= S0_WCI_MAX) 234#define S1_WCI_COUNT (1) 235#define S1_WCI_MIN (1) 236#define S1_WCI_MAX (S1_WCI_MIN + S1_WCI_COUNT - 1) 237#define WCI_COUNT(slot) ((slot) ? S1_WCI_COUNT : S0_WCI_COUNT) 238#define WCI_MIN(slot) ((slot) ? S1_WCI_MIN : S0_WCI_MIN) 239#define WCI_MAX(slot) ((slot) ? S1_WCI_MAX : S0_WCI_MAX) 240#define S1_IS_VALID_WCI(wci) ((wci) >= S1_WCI_MIN && (wci) <= S1_WCI_MAX) 241#define IS_VALID_WCI(slot, wci) ((slot) ? S1_IS_VALID_WCI((wci)) : \ 242 S0_IS_VALID_WCI((wci))) 243 244 /* Safari reset number (within sbbc) given slot & lport */ 245#define WCI_RST_NUM(slot, lport) \ 246 ((slot) ? 1 : ((lport) & 1 ? 1 : 0)) 247 248 /* Number of non WCI safari devices per WIB */ 249#define S0_WIB_PROC_COUNT (2) /* max procs on slot 0 WIB */ 250#define S1_WIB_SCHIZO_COUNT (1) /* max schizos on slot 1 WIB */ 251 252 /* Number of Schizo per PCI I/O board: */ 253#define SCHIZO_COUNT (2) 254 255 /* 256 * CPU and Maxcat L1 boards have 4 DXs, I/O boards have 2. 257 * But it's useful to have this for array dimensions, etc. 258 */ 259#define DX_COUNT_MAX (4) 260#define IS_VALID_CPU_DX(dx) ((dx) >= 0 && (dx) < DX_COUNT_MAX) 261 262 /* 263 * DCDS asics for half of a CPU board. The DCDS is a data slice, 264 * 8 are required for a full Safari data path. 265 */ 266#define DCDS_COUNT (8) 267#define DCDS_MAX (DCDS_COUNT - 1) 268#define IS_VALID_DCDS(dcds) ((dcds) >= 0 && (dcds) < DCDS_COUNT) 269 270 271 /* 272 * Address, Data, or Response Bus. 273 * For all three, 0 or 1 is a valid value. 274 */ 275#define BUS_COUNT (CP_COUNT) 276#define BUS_MAX (BUS_COUNT - 1) 277#define IS_VALID_BUS(bus) ((bus) >= 0 && (bus) < BUS_COUNT) 278 279 /* 280 * Address, Data, or Response Bus configuration. 281 * For all three, 1. 2. or 3 is a valid value. 282 */ 283#define BCONF_MIN 0x1 284#define BCONF_MAX 0x3 285#define BCONF_COUNT 3 286#define IS_VALID_BCONF(bconf) ((bconf) >= BCONF_MIN && (bconf) <= BCONF_MAX) 287 288 /* 289 * This might seem a little obscure to be here, but it's needed 290 * for some array sizes and function prototypes: 291 */ 292#define AXQ_NASM_SIZE 256 293 294 295#ifdef __cplusplus 296} 297#endif 298 299#endif /* !_SCAT_CONST_H */ 300