summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys/scsi/adapters/pmcs/pmcs_param.h
blob: b65c0ac08ca33c124b4951ae4ec4f6aaa10a7b0f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
 */

/*
 * PMC Compile Time Tunable Parameters
 */
#ifndef	_PMCS_PARAM_H
#define	_PMCS_PARAM_H
#ifdef	__cplusplus
extern "C" {
#endif

/*
 * Maximum number of microseconds we will try to configure a PHY
 */
#define	PMCS_MAX_CONFIG_TIME	(60 * 1000000)

#define	PMCS_MAX_OQ		64	/* maximum number of OutBound Queues */
#define	PMCS_MAX_IQ		64	/* maximum number of InBound Queues */

#define	PMCS_MAX_PORTS		16	/* maximum port contexts */

#define	PMCS_MAX_XPND		16	/* 16 levels of expansion */

#define	PMCS_INDICES_SIZE	512

#define	PMCS_MIN_CHUNK_PAGES	512
#define	PMCS_ADDTL_CHUNK_PAGES	8

/*
 * Maximum amount of time (in milliseconds) we'll wait for writing one chunk
 * of firmware image data to the chip
 */
#define	PMCS_FLASH_WAIT_TIME	10000	/* 10 seconds */

/*
 * Scratch area has to hold Max SMP Request and Max SMP Response,
 * plus some slop.
 */
#define	PMCS_SCRATCH_SIZE	2304
#define	PMCS_INITIAL_DMA_OFF	PMCS_INDICES_SIZE+PMCS_SCRATCH_SIZE
#define	PMCS_CONTROL_SIZE	ptob(1)

/*
 * 2M bytes was allocated to firmware log and split between two logs
 */
#define	PMCS_FWLOG_SIZE		(2 << 20)
#define	PMCS_FWLOG_MAX		5	/* maximum logging level */
#define	PMCS_FWLOG_THRESH	75	/* Write to file when log this % full */

#define	SATLSIZE		1024

/*
 * PMCS_NQENTRY is tunable by setting pmcs-num-io-qentries
 */
#define	PMCS_NQENTRY		512	/* 512 entries per queue */
#define	PMCS_MIN_NQENTRY	32	/* No less than 32 entries per queue */
#define	PMCS_QENTRY_SIZE	64	/* 64 bytes per entry */
#define	PMCS_MSG_SIZE		(PMCS_QENTRY_SIZE >> 2)

/*
 * Watchdog interval, in usecs.
 * NB: Needs to be evenly divisible by 10
 */
#define	PMCS_WATCH_INTERVAL	250000	/* watchdog interval in us */

/*
 * Forward progress trigger. This is the number of times we run through
 * watchdog before checking for forward progress.  Implicitly bound to
 * PMCS_WATCH_INTERVAL above. For example, with a PMCS_WATCH_INTERVAL of
 * 250000, the watchdog will run every quarter second, so forward progress
 * will be checked every 16th watchdog fire, or every four seconds.
 */
#define	PMCS_FWD_PROG_TRIGGER	16

/*
 * Inbound Queue definitions
 */
#define	PMCS_NIQ		9	/* 9 Inbound Queues */
#define	PMCS_IO_IQ_MASK		7	/* IO queues are 0..7 */
#define	PMCS_IQ_OTHER		8	/* "Other" queue is 8 (HiPri) */
#define	PMCS_NON_HIPRI_QUEUES	PMCS_IO_IQ_MASK

/*
 * Outbound Queue definitions
 *
 * Note that the OQ definitions map to bits set in
 * the Outbound Doorbell register to indicate service
 * is needed on one of these queues.
 */
#define	PMCS_NOQ		3	/* 3 Outbound Queues */

#define	PMCS_OQ_IODONE		0	/* I/O completion Outbound Queue */
#define	PMCS_OQ_GENERAL		1	/* General Outbound Queue */
#define	PMCS_OQ_EVENTS		2	/* Event Outbound Queue */


/*
 * External Scatter Gather come in chunks- each this many deep.
 */
#define	PMCS_SGL_NCHUNKS	16	/* S/G List Chunk Size */
#define	PMCS_MAX_CHUNKS		32	/* max chunks per command */

/*
 * MSI/MSI-X related definitions.
 *
 * These are the maximum number of interrupt vectors we could use.
 */
#define	PMCS_MAX_MSIX		(PMCS_NOQ + 1)
#define	PMCS_MAX_MSI		PMCS_MAX_MSIX
#define	PMCS_MAX_FIXED		1

#define	PMCS_MSIX_IODONE	PMCS_OQ_IODONE	/* I/O Interrupt vector */
#define	PMCS_MSIX_GENERAL	PMCS_OQ_GENERAL	/* General Interrupt vector */
#define	PMCS_MSIX_EVENTS	PMCS_OQ_EVENTS	/* Events Interrupt vector */
#define	PMCS_MSIX_FATAL		(PMCS_MAX_MSIX-1)	/* Fatal Int vector */

#define	PMCS_FATAL_INTERRUPT	15	/* fatal interrupt OBDB bit */

/*
 * Blessed firmware version
 */
#define	PMCS_FIRMWARE_CODE_NAME		"firmware"
#define	PMCS_FIRMWARE_ILA_NAME		"ila"
#define	PMCS_FIRMWARE_SPCBOOT_NAME	"SPCBoot"
#define	PMCS_FIRMWARE_START_SUF		".bin_start"
#define	PMCS_FIRMWARE_END_SUF		".bin_end"
#define	PMCS_FIRMWARE_FILENAME		"misc/pmcs/pmcs8001fw"
#define	PMCS_FIRMWARE_VERSION_NAME	"pmcs8001_fwversion"

/*
 * These are offsets from the end of the image
 */
#define	PMCS_FW_VER_OFFSET		528
#define	PMCS_ILA_VER_OFFSET		528

#ifdef	__cplusplus
}
#endif
#endif	/* _PMCS_PARAM_H */