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 */
|