xref: /onnv-gate/usr/src/uts/common/sys/scsi/adapters/pmcs/pmcs_param.h (revision 12120:8a783f4db0ad)
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