110696SDavid.Hollister@Sun.COM /* 210696SDavid.Hollister@Sun.COM * CDDL HEADER START 310696SDavid.Hollister@Sun.COM * 410696SDavid.Hollister@Sun.COM * The contents of this file are subject to the terms of the 510696SDavid.Hollister@Sun.COM * Common Development and Distribution License (the "License"). 610696SDavid.Hollister@Sun.COM * You may not use this file except in compliance with the License. 710696SDavid.Hollister@Sun.COM * 810696SDavid.Hollister@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 910696SDavid.Hollister@Sun.COM * or http://www.opensolaris.org/os/licensing. 1010696SDavid.Hollister@Sun.COM * See the License for the specific language governing permissions 1110696SDavid.Hollister@Sun.COM * and limitations under the License. 1210696SDavid.Hollister@Sun.COM * 1310696SDavid.Hollister@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 1410696SDavid.Hollister@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1510696SDavid.Hollister@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 1610696SDavid.Hollister@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 1710696SDavid.Hollister@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 1810696SDavid.Hollister@Sun.COM * 1910696SDavid.Hollister@Sun.COM * CDDL HEADER END 2010696SDavid.Hollister@Sun.COM */ 2110696SDavid.Hollister@Sun.COM /* 22*12120SDavid.Hollister@Sun.COM * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. 23*12120SDavid.Hollister@Sun.COM */ 24*12120SDavid.Hollister@Sun.COM 25*12120SDavid.Hollister@Sun.COM /* 2610696SDavid.Hollister@Sun.COM * PMC Compile Time Tunable Parameters 2710696SDavid.Hollister@Sun.COM */ 2810696SDavid.Hollister@Sun.COM #ifndef _PMCS_PARAM_H 2910696SDavid.Hollister@Sun.COM #define _PMCS_PARAM_H 3010696SDavid.Hollister@Sun.COM #ifdef __cplusplus 3110696SDavid.Hollister@Sun.COM extern "C" { 3210696SDavid.Hollister@Sun.COM #endif 3310696SDavid.Hollister@Sun.COM 3410696SDavid.Hollister@Sun.COM /* 3510696SDavid.Hollister@Sun.COM * Maximum number of microseconds we will try to configure a PHY 3610696SDavid.Hollister@Sun.COM */ 3710696SDavid.Hollister@Sun.COM #define PMCS_MAX_CONFIG_TIME (60 * 1000000) 3810696SDavid.Hollister@Sun.COM 3910696SDavid.Hollister@Sun.COM #define PMCS_MAX_OQ 64 /* maximum number of OutBound Queues */ 4010696SDavid.Hollister@Sun.COM #define PMCS_MAX_IQ 64 /* maximum number of InBound Queues */ 4110696SDavid.Hollister@Sun.COM 4210696SDavid.Hollister@Sun.COM #define PMCS_MAX_PORTS 16 /* maximum port contexts */ 4310696SDavid.Hollister@Sun.COM 4410696SDavid.Hollister@Sun.COM #define PMCS_MAX_XPND 16 /* 16 levels of expansion */ 4510696SDavid.Hollister@Sun.COM 4610696SDavid.Hollister@Sun.COM #define PMCS_INDICES_SIZE 512 4710696SDavid.Hollister@Sun.COM 4810696SDavid.Hollister@Sun.COM #define PMCS_MIN_CHUNK_PAGES 512 4910696SDavid.Hollister@Sun.COM #define PMCS_ADDTL_CHUNK_PAGES 8 5010696SDavid.Hollister@Sun.COM 5110696SDavid.Hollister@Sun.COM /* 52*12120SDavid.Hollister@Sun.COM * Maximum amount of time (in milliseconds) we'll wait for writing one chunk 53*12120SDavid.Hollister@Sun.COM * of firmware image data to the chip 54*12120SDavid.Hollister@Sun.COM */ 55*12120SDavid.Hollister@Sun.COM #define PMCS_FLASH_WAIT_TIME 10000 /* 10 seconds */ 56*12120SDavid.Hollister@Sun.COM 57*12120SDavid.Hollister@Sun.COM /* 5810696SDavid.Hollister@Sun.COM * Scratch area has to hold Max SMP Request and Max SMP Response, 5910696SDavid.Hollister@Sun.COM * plus some slop. 6010696SDavid.Hollister@Sun.COM */ 6110696SDavid.Hollister@Sun.COM #define PMCS_SCRATCH_SIZE 2304 6210696SDavid.Hollister@Sun.COM #define PMCS_INITIAL_DMA_OFF PMCS_INDICES_SIZE+PMCS_SCRATCH_SIZE 6310696SDavid.Hollister@Sun.COM #define PMCS_CONTROL_SIZE ptob(1) 6410696SDavid.Hollister@Sun.COM 6510696SDavid.Hollister@Sun.COM /* 6610696SDavid.Hollister@Sun.COM * 2M bytes was allocated to firmware log and split between two logs 6710696SDavid.Hollister@Sun.COM */ 6810696SDavid.Hollister@Sun.COM #define PMCS_FWLOG_SIZE (2 << 20) 6910696SDavid.Hollister@Sun.COM #define PMCS_FWLOG_MAX 5 /* maximum logging level */ 7011694SDavid.Hollister@Sun.COM #define PMCS_FWLOG_THRESH 75 /* Write to file when log this % full */ 7111694SDavid.Hollister@Sun.COM 7210696SDavid.Hollister@Sun.COM #define SATLSIZE 1024 7310696SDavid.Hollister@Sun.COM 7410696SDavid.Hollister@Sun.COM /* 7510696SDavid.Hollister@Sun.COM * PMCS_NQENTRY is tunable by setting pmcs-num-io-qentries 7610696SDavid.Hollister@Sun.COM */ 7710696SDavid.Hollister@Sun.COM #define PMCS_NQENTRY 512 /* 512 entries per queue */ 7810696SDavid.Hollister@Sun.COM #define PMCS_MIN_NQENTRY 32 /* No less than 32 entries per queue */ 7910696SDavid.Hollister@Sun.COM #define PMCS_QENTRY_SIZE 64 /* 64 bytes per entry */ 8010696SDavid.Hollister@Sun.COM #define PMCS_MSG_SIZE (PMCS_QENTRY_SIZE >> 2) 8110696SDavid.Hollister@Sun.COM 8210696SDavid.Hollister@Sun.COM /* 8310696SDavid.Hollister@Sun.COM * Watchdog interval, in usecs. 8410696SDavid.Hollister@Sun.COM * NB: Needs to be evenly divisible by 10 8510696SDavid.Hollister@Sun.COM */ 8610696SDavid.Hollister@Sun.COM #define PMCS_WATCH_INTERVAL 250000 /* watchdog interval in us */ 8710696SDavid.Hollister@Sun.COM 8810696SDavid.Hollister@Sun.COM /* 8911692SJesse.Butler@Sun.COM * Forward progress trigger. This is the number of times we run through 9011692SJesse.Butler@Sun.COM * watchdog before checking for forward progress. Implicitly bound to 9111692SJesse.Butler@Sun.COM * PMCS_WATCH_INTERVAL above. For example, with a PMCS_WATCH_INTERVAL of 9211692SJesse.Butler@Sun.COM * 250000, the watchdog will run every quarter second, so forward progress 9311692SJesse.Butler@Sun.COM * will be checked every 16th watchdog fire, or every four seconds. 9411692SJesse.Butler@Sun.COM */ 9511692SJesse.Butler@Sun.COM #define PMCS_FWD_PROG_TRIGGER 16 9611692SJesse.Butler@Sun.COM 9711692SJesse.Butler@Sun.COM /* 9810696SDavid.Hollister@Sun.COM * Inbound Queue definitions 9910696SDavid.Hollister@Sun.COM */ 10010696SDavid.Hollister@Sun.COM #define PMCS_NIQ 9 /* 9 Inbound Queues */ 10110696SDavid.Hollister@Sun.COM #define PMCS_IO_IQ_MASK 7 /* IO queues are 0..7 */ 10210696SDavid.Hollister@Sun.COM #define PMCS_IQ_OTHER 8 /* "Other" queue is 8 (HiPri) */ 10310696SDavid.Hollister@Sun.COM #define PMCS_NON_HIPRI_QUEUES PMCS_IO_IQ_MASK 10410696SDavid.Hollister@Sun.COM 10510696SDavid.Hollister@Sun.COM /* 10610696SDavid.Hollister@Sun.COM * Outbound Queue definitions 10710696SDavid.Hollister@Sun.COM * 10810696SDavid.Hollister@Sun.COM * Note that the OQ definitions map to bits set in 10910696SDavid.Hollister@Sun.COM * the Outbound Doorbell register to indicate service 11010696SDavid.Hollister@Sun.COM * is needed on one of these queues. 11110696SDavid.Hollister@Sun.COM */ 11210696SDavid.Hollister@Sun.COM #define PMCS_NOQ 3 /* 3 Outbound Queues */ 11310696SDavid.Hollister@Sun.COM 11410696SDavid.Hollister@Sun.COM #define PMCS_OQ_IODONE 0 /* I/O completion Outbound Queue */ 11510696SDavid.Hollister@Sun.COM #define PMCS_OQ_GENERAL 1 /* General Outbound Queue */ 11610696SDavid.Hollister@Sun.COM #define PMCS_OQ_EVENTS 2 /* Event Outbound Queue */ 11710696SDavid.Hollister@Sun.COM 11810696SDavid.Hollister@Sun.COM 11910696SDavid.Hollister@Sun.COM /* 12010696SDavid.Hollister@Sun.COM * External Scatter Gather come in chunks- each this many deep. 12110696SDavid.Hollister@Sun.COM */ 12210696SDavid.Hollister@Sun.COM #define PMCS_SGL_NCHUNKS 16 /* S/G List Chunk Size */ 12310696SDavid.Hollister@Sun.COM #define PMCS_MAX_CHUNKS 32 /* max chunks per command */ 12410696SDavid.Hollister@Sun.COM 12510696SDavid.Hollister@Sun.COM /* 12610696SDavid.Hollister@Sun.COM * MSI/MSI-X related definitions. 12710696SDavid.Hollister@Sun.COM * 12810696SDavid.Hollister@Sun.COM * These are the maximum number of interrupt vectors we could use. 12910696SDavid.Hollister@Sun.COM */ 13010696SDavid.Hollister@Sun.COM #define PMCS_MAX_MSIX (PMCS_NOQ + 1) 13110696SDavid.Hollister@Sun.COM #define PMCS_MAX_MSI PMCS_MAX_MSIX 13210696SDavid.Hollister@Sun.COM #define PMCS_MAX_FIXED 1 13310696SDavid.Hollister@Sun.COM 13410696SDavid.Hollister@Sun.COM #define PMCS_MSIX_IODONE PMCS_OQ_IODONE /* I/O Interrupt vector */ 13510696SDavid.Hollister@Sun.COM #define PMCS_MSIX_GENERAL PMCS_OQ_GENERAL /* General Interrupt vector */ 13610696SDavid.Hollister@Sun.COM #define PMCS_MSIX_EVENTS PMCS_OQ_EVENTS /* Events Interrupt vector */ 13710696SDavid.Hollister@Sun.COM #define PMCS_MSIX_FATAL (PMCS_MAX_MSIX-1) /* Fatal Int vector */ 13810696SDavid.Hollister@Sun.COM 13910696SDavid.Hollister@Sun.COM #define PMCS_FATAL_INTERRUPT 15 /* fatal interrupt OBDB bit */ 14010696SDavid.Hollister@Sun.COM 14110696SDavid.Hollister@Sun.COM /* 14210696SDavid.Hollister@Sun.COM * Blessed firmware version 14310696SDavid.Hollister@Sun.COM */ 14410696SDavid.Hollister@Sun.COM #define PMCS_FIRMWARE_CODE_NAME "firmware" 14510696SDavid.Hollister@Sun.COM #define PMCS_FIRMWARE_ILA_NAME "ila" 14610696SDavid.Hollister@Sun.COM #define PMCS_FIRMWARE_SPCBOOT_NAME "SPCBoot" 14710696SDavid.Hollister@Sun.COM #define PMCS_FIRMWARE_START_SUF ".bin_start" 14810696SDavid.Hollister@Sun.COM #define PMCS_FIRMWARE_END_SUF ".bin_end" 14910696SDavid.Hollister@Sun.COM #define PMCS_FIRMWARE_FILENAME "misc/pmcs/pmcs8001fw" 15010696SDavid.Hollister@Sun.COM #define PMCS_FIRMWARE_VERSION_NAME "pmcs8001_fwversion" 15110696SDavid.Hollister@Sun.COM 15211980SDavid.Hollister@Sun.COM /* 15311980SDavid.Hollister@Sun.COM * These are offsets from the end of the image 15411980SDavid.Hollister@Sun.COM */ 15511980SDavid.Hollister@Sun.COM #define PMCS_FW_VER_OFFSET 528 15611980SDavid.Hollister@Sun.COM #define PMCS_ILA_VER_OFFSET 528 15711980SDavid.Hollister@Sun.COM 15810696SDavid.Hollister@Sun.COM #ifdef __cplusplus 15910696SDavid.Hollister@Sun.COM } 16010696SDavid.Hollister@Sun.COM #endif 16110696SDavid.Hollister@Sun.COM #endif /* _PMCS_PARAM_H */ 162