8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / cmd / fm / eversholt / files / common / pciex.esc
blob54e535f2f2bed3fdf44359b664a09660f8a4e37a
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 (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
22  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
26 #pragma dictionary "PCIEX"
28 #include <fm/topo_hc.h>
31  * FIT rates - assume leaf devices are somewhat less reliable than
32  * root complexes, switches and bridges
33  */
34 #define PCIEX_RC_FIT 500
35 #define PCIEX_SW_FIT 500
36 #define PCIEX_BDG_FIT 500
37 #define PCIEX_DEV_FIT 1000
38 #define PCIEX_RC_INV_FIT 500
39 #define PCIEX_DEV_INV_FIT 1000
40 #define PCIEX_RC_NR_FIT 500
41 #define PCIEX_SW_NR_FIT 500
42 #define PCIEX_BDG_NR_FIT 500
43 #define PCIEX_DEV_NR_FIT 1000
44 #define PCIEX_BUS_FIT 500
45 #define PCIEX_BUS_NR_FIT 500
48  * SERD parameters.
49  * 
50  * PCI Express correctable link errors are automatically handled by the
51  * hardware, so have relatively little impact and we can allow quite a
52  * high frequency. We will also be quite conservative about nonfatal internal
53  * errors reported by the driver.
54  *
55  * Nonfatal dpe errors (ptlp/ecrc errors) have to be recovered by the hardened
56  * driver which may cause intermittant performance/responsiveness problems, so
57  * we have tighter serd parameters for these. These are most likely errors in
58  * buffers/caches within devices and bridges, so use similar rates to cpu
59  * data cache parity errors.
60  */
61 #define CORRLINK_COUNT 6
62 #define CORRLINK_TIME 2h
63 #define BTLP_COUNT 6
64 #define BTLP_TIME 2h
65 #define BDLLP_COUNT 6
66 #define BDLLP_TIME 2h
67 #define RTO_COUNT 6
68 #define RTO_TIME 2h
69 #define RNR_COUNT 6
70 #define RNR_TIME 2h
71 #define RE_COUNT 6
72 #define RE_TIME 2h
73 #define NONFATAL_DPE_COUNT 3
74 #define NONFATAL_DPE_TIME 168h
77  * if the source-id payload is valid, then check it matches
78  */
79 #define SOURCE_ID_MATCHES_BDF \
80         (!payloadprop_defined("source-valid") || \
81         payloadprop("source-valid") == 0 || \
82         payloadprop("source-id") == ((b << 8) | (d << 3) | f))
84 #define SOURCE_ID_MATCHES_OWN_BDF \
85         (payloadprop_defined("source-valid") && \
86         payloadprop("source-valid") == 1 && \
87         payloadprop("source-id") == (confprop(pciexrc, TOPO_PCI_BDF) + 0))
90  * Other useful macros. These use the EXCAP property (PCI Express Capabilities
91  * register) to find the type for PCI Express devices, and the CLASS-CODE
92  * property (PCI Class Code register) for to find the type of PCI devices behind
93  * a PCI Express-PCI bridge - note that 60400 and 60401 are defined as PCI-PCI
94  * bridges, everything else is consider a PCI leaf device.
95  */
96 #define PCIEXFN         pciexbus/pciexdev/pciexfn
97 #define PCIEXFNHZ       pciexbus<>/pciexdev<>/pciexfn<>
98 #define PCIEXFN1        pciexbus[b]/pciexdev[d]/pciexfn[f]
99 #define PCIFN           pcibus/pcidev/pcifn
100 #define PCIFNHZ         pcibus<>/pcidev<>/pcifn<>
101 #define PCIFN1          pcibus[b]/pcidev[d]/pcifn[f]
102 #define IS_LF(f)        (confprop(f, TOPO_PCI_EXCAP) == "pciexdev")
103 #define IS_BG(f)        (confprop(f, TOPO_PCI_EXCAP) == "pcibus")
104 #define IS_SD(f)        (confprop(f, TOPO_PCI_EXCAP) == "pciexswd")
105 #define IS_SU(f)        (confprop(f, TOPO_PCI_EXCAP) == "pciexswu")
106 #define IS_PCI_LF(f)    (confprop_defined(f, TOPO_PCI_CLASS) && \
107                         confprop(f, TOPO_PCI_CLASS) != "60400" && \
108                         confprop(f, TOPO_PCI_CLASS) != "60401")
111  * define faults
112  */
113 event fault.io.pciex.fw_corrupt@PCIEXFN, FITrate=PCIEX_DEV_FIT, retire=0;
114 event fault.io.pciex.fw_mismatch@PCIEXFN, FITrate=PCIEX_DEV_FIT, retire=0;
116 event fault.io.pciex.device-interr@PCIEXFN, FITrate=PCIEX_DEV_FIT;
118 event fault.io.pciex.device-interr-deg@PCIEXFN, FITrate=PCIEX_DEV_FIT, retire=0;
120 engine serd.io.pciex.flt-nf@PCIEXFN, N=NONFATAL_DPE_COUNT, T=NONFATAL_DPE_TIME;
121 event fault.io.pciex.device-interr-unaf@PCIEXFN, FITrate=PCIEX_DEV_FIT,
122         engine=serd.io.pciex.flt-nf@PCIEXFN;
124 engine serd.io.device.nonfatal@PCIEXFN, N=CORRLINK_COUNT, T=CORRLINK_TIME;
125 event fault.io.pciex.device-interr-corr@PCIEXFN, FITrate=PCIEX_DEV_FIT,
126         engine=serd.io.device.nonfatal@PCIEXFN;
127 engine serd.io.device.nonfatal@PCIEXFN/PCIEXFN,
128         N=CORRLINK_COUNT, T=CORRLINK_TIME;
129 event fault.io.pciex.device-interr-corr@PCIEXFN/PCIEXFN, FITrate=PCIEX_DEV_FIT,
130         engine=serd.io.device.nonfatal@PCIEXFN/PCIEXFN;
131 engine serd.io.device.nonfatal@pciexrc/PCIEXFN,
132         N=CORRLINK_COUNT, T=CORRLINK_TIME;
133 event fault.io.pciex.device-interr-corr@pciexrc/PCIEXFN, FITrate=PCIEX_DEV_FIT,
134         engine=serd.io.device.nonfatal@pciexrc/PCIEXFN;
136 event fault.io.pciex.device-interr@pciexrc, FITrate=PCIEX_RC_FIT;
138 event fault.io.pciex.device-interr-deg@pciexrc, FITrate=PCIEX_RC_FIT, retire=0;
140 engine serd.io.pciex.flt-nf@pciexrc, N=NONFATAL_DPE_COUNT, T=NONFATAL_DPE_TIME;
141 event fault.io.pciex.device-interr-unaf@pciexrc, FITrate=PCIEX_RC_FIT,
142         engine=serd.io.pciex.flt-nf@pciexrc;
144 engine serd.io.device.nonfatal@pciexrc, N=CORRLINK_COUNT, T=CORRLINK_TIME;
145 event fault.io.pciex.device-interr-corr@pciexrc, FITrate=PCIEX_RC_FIT,
146         engine=serd.io.device.nonfatal@pciexrc;
148 event fault.io.pciex.device-invreq@PCIEXFN, FITrate=PCIEX_DEV_INV_FIT;
150 event fault.io.pciex.device-invreq@pciexrc, FITrate=PCIEX_RC_FIT;
152 event fault.io.pciex.device-noresp@PCIEXFN, FITrate=PCIEX_DEV_NR_FIT;
154 event fault.io.pciex.device-noresp@pciexrc, FITrate=PCIEX_RC_NR_FIT;
156 event fault.io.pciex.bus-noresp@PCIEXFN, FITrate=PCIEX_BUS_NR_FIT;
158 event fault.io.pciex.bus-linkerr@PCIEXFN, FITrate=PCIEX_BUS_FIT;
160 engine serd.io.pciex.corrlink-bus@pciexrc/PCIEXFN,
161         N=CORRLINK_COUNT, T=CORRLINK_TIME;
162 event fault.io.pciex.bus-linkerr-corr@pciexrc/PCIEXFN, FITrate=PCIEX_BUS_FIT,
163         engine=serd.io.pciex.corrlink-bus@pciexrc/PCIEXFN;
164 engine serd.io.pciex.corrlink-bus@PCIEXFN/PCIEXFN,
165         N=CORRLINK_COUNT, T=CORRLINK_TIME;
166 event fault.io.pciex.bus-linkerr-corr@PCIEXFN/PCIEXFN, FITrate=PCIEX_BUS_FIT,
167         engine=serd.io.pciex.corrlink-bus@PCIEXFN/PCIEXFN;
170  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
171  * Handling of leaf driver detected internal errors. Use serd engine if
172  * no service impact - otherwise fail immediately
173  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
174  */
175 event ereport.io.device.inval_state@PCIEXFN{within(5s)};
176 event ereport.io.device.no_response@PCIEXFN{within(5s)};
177 event ereport.io.device.stall@PCIEXFN{within(5s)};
178 event ereport.io.device.badint_limit@PCIEXFN{within(5s)};
179 event ereport.io.device.intern_corr@PCIEXFN{within(5s)};
180 event ereport.io.device.intern_uncorr@PCIEXFN{within(5s)};
181 event ereport.io.service.lost@PCIEXFN{within(5s)};
182 event ereport.io.service.degraded@PCIEXFN{within(5s)};
183 event ereport.io.service.unaffected@PCIEXFN{within(5s)};
184 event ereport.io.service.restored@PCIEXFN{within(30s)};
185 event ereport.io.service.lost@PCIFN{within(5s)};
186 event ereport.io.service.degraded@PCIFN{within(5s)};
187 event ereport.io.service.unaffected@PCIFN{within(5s)};
189 event error.io.pciex.noimpact-d@PCIEXFN;
190 event error.io.pciex.degraded-d@PCIEXFN;
191 event error.io.pciex.lost-d@PCIEXFN;
192 event error.io.service.restored@PCIEXFN;
193 event error.io.service.restored@PCIFN;
194 event error.io.device.nf-device@PCIEXFN;
195 event error.io.device.deg-device@PCIEXFN;
196 event error.io.device.f-device@PCIEXFN;
198 prop error.io.device.f-device@PCIEXFN (1)->
199     ereport.io.device.inval_state@PCIEXFN,
200     ereport.io.device.no_response@PCIEXFN,
201     ereport.io.device.stall@PCIEXFN,
202     ereport.io.device.badint_limit@PCIEXFN,
203     ereport.io.device.intern_corr@PCIEXFN,
204     ereport.io.device.intern_uncorr@PCIEXFN;
206 prop error.io.device.f-device@PCIEXFN (0)->
207     error.io.pciex.lost-d@PCIEXFN;
209 prop error.io.device.deg-device@PCIEXFN (1)->
210     ereport.io.device.inval_state@PCIEXFN,
211     ereport.io.device.no_response@PCIEXFN,
212     ereport.io.device.stall@PCIEXFN,
213     ereport.io.device.badint_limit@PCIEXFN,
214     ereport.io.device.intern_corr@PCIEXFN,
215     ereport.io.device.intern_uncorr@PCIEXFN;
217 prop error.io.device.deg-device@PCIEXFN (1)->
218     error.io.pciex.degraded-d@PCIEXFN;
220 prop error.io.device.nf-device@PCIEXFN (1)->
221     ereport.io.device.inval_state@PCIEXFN,
222     ereport.io.device.no_response@PCIEXFN,
223     ereport.io.device.stall@PCIEXFN,
224     ereport.io.device.badint_limit@PCIEXFN,
225     ereport.io.device.intern_corr@PCIEXFN,
226     ereport.io.device.intern_uncorr@PCIEXFN;
228 prop error.io.device.nf-device@PCIEXFN (1)->
229     error.io.pciex.noimpact-d@PCIEXFN;
232  * handling of service impact ereports.
233  */
234 prop error.io.pciex.lost-d@PCIEXFN (1)->
235     ereport.io.service.lost@PCIEXFNHZ { is_under(PCIEXFN, PCIEXFNHZ) },
236     ereport.io.service.lost@PCIFNHZ { is_under(PCIEXFN, PCIFNHZ) };
238 prop error.io.pciex.lost-d@PCIEXFN (0)->
239     ereport.io.service.unaffected@PCIEXFNHZ { is_under(PCIEXFN, PCIEXFNHZ) },
240     ereport.io.service.unaffected@PCIFNHZ { is_under(PCIEXFN, PCIFNHZ) },
241     ereport.io.service.degraded@PCIEXFNHZ { is_under(PCIEXFN, PCIEXFNHZ) },
242     ereport.io.service.degraded@PCIFNHZ { is_under(PCIEXFN, PCIFNHZ) };
244 prop error.io.pciex.degraded-d@PCIEXFN (1)->
245     ereport.io.service.degraded@PCIEXFNHZ { is_under(PCIEXFN, PCIEXFNHZ) },
246     ereport.io.service.degraded@PCIFNHZ { is_under(PCIEXFN, PCIFNHZ) };
248 prop error.io.pciex.degraded-d@PCIEXFN (0)->
249     ereport.io.service.unaffected@PCIEXFNHZ { is_under(PCIEXFN, PCIEXFNHZ) },
250     ereport.io.service.unaffected@PCIFNHZ { is_under(PCIEXFN, PCIFNHZ) };
252 prop error.io.pciex.noimpact-d@PCIEXFN (1)->
253     ereport.io.service.unaffected@PCIEXFNHZ { is_under(PCIEXFN, PCIEXFNHZ) },
254     ereport.io.service.unaffected@PCIFNHZ { is_under(PCIEXFN, PCIFNHZ) },
255     error.io.service.restored@PCIEXFNHZ { is_under(PCIEXFN, PCIEXFNHZ) },
256     error.io.service.restored@PCIFNHZ { is_under(PCIEXFN, PCIFNHZ) };
258 prop error.io.service.restored@PCIEXFN (1)->
259     ereport.io.service.lost@PCIEXFN,
260     ereport.io.service.degraded@PCIEXFN;
262 prop error.io.service.restored@PCIEXFN (1)->
263     ereport.io.service.restored@PCIEXFN;
266  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
267  * A faulty PCI Express hostbridge (root complex) may cause:
268  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
269  * - nr-d:              the device not to respond to a valid upstream request
270  * - ca-d:              the device to completer abort a valid upstream request
271  * - mtlp-d:            a malformed tlp to be transmitted downstream
272  * - badreq-d:          a bad downstream request - not CRC error (may cause
273  *                      completer to respond with ur or ca)
274  * - ecrcreq-d:         TLP with end-to-end CRC error transmitted downstream
275  * - ecrccomp-d:        TLP with end-to-end CRC error transmitted downstream
276  * - poisreq-d:         poisoned request transmitted downstream
277  * - poiscomp-d:        poisoned completion transmitted downstream
278  * - corrlink:          correctable link or physical level error
279  * - fatlink:           fatal link or physical level error
280  */
281 event error.io.pciex.nr-d@pciexrc/PCIEXFN;
282 event error.io.pciex.ca-d@pciexrc/PCIEXFN;
283 event error.io.pciex.mtlp-d@pciexrc/PCIEXFN;
284 event error.io.pciex.fatlink@pciexrc/PCIEXFN;
285 event error.io.pciex.badreq-d@pciexrc/PCIEXFN;
286 event error.io.pciex.nf-poisecrc-d@pciexrc/PCIEXFN;
287 event error.io.pciex.f-poisecrc-d@pciexrc/PCIEXFN;
288 event error.io.pciex.deg-poisecrc-d@pciexrc/PCIEXFN;
289 event ereport.io.pciex.dl.btlp@pciexrc{within(5s)};
290 event ereport.io.pciex.dl.bdllp@pciexrc{within(5s)};
291 event ereport.io.pciex.dl.rto@pciexrc{within(5s)};
292 event ereport.io.pciex.dl.rnr@pciexrc{within(5s)};
293 event ereport.io.pciex.pl.re@pciexrc{within(5s)};
294 event ereport.io.pciex.dl.btlp@pciexrc/PCIEXFN{within(5s)};
295 event ereport.io.pciex.dl.bdllp@pciexrc/PCIEXFN{within(5s)};
296 event ereport.io.pciex.dl.rto@pciexrc/PCIEXFN{within(5s)};
297 event ereport.io.pciex.dl.rnr@pciexrc/PCIEXFN{within(5s)};
298 event ereport.io.pciex.pl.re@pciexrc/PCIEXFN{within(5s)};
300 prop fault.io.pciex.device-noresp@pciexrc (1)->
301     error.io.pciex.nr-d@pciexrc/PCIEXFNHZ;
303 prop fault.io.pciex.device-invreq@pciexrc (1)->
304     error.io.pciex.badreq-d@pciexrc/PCIEXFNHZ;
306 prop fault.io.pciex.device-interr-corr@pciexrc {
307     payloadprop_defined("detector") && setserdsuffix("_btlp") &&
308     setserdn(BTLP_COUNT) && setserdt(BTLP_TIME) } (0)->
309     ereport.io.pciex.dl.btlp@pciexrc,
310     ereport.io.pciex.dl.btlp@pciexrc/PCIEXFNHZ;
312 prop fault.io.pciex.device-interr-corr@pciexrc {
313     payloadprop_defined("detector") && setserdsuffix("_bdllp") &&
314     setserdn(BDLLP_COUNT) && setserdt(BDLLP_TIME) } (0)->
315     ereport.io.pciex.dl.bdllp@pciexrc,
316     ereport.io.pciex.dl.bdllp@pciexrc/PCIEXFNHZ;
318 prop fault.io.pciex.device-interr-corr@pciexrc {
319     payloadprop_defined("detector") && setserdsuffix("_rto") &&
320     setserdn(RTO_COUNT) && setserdt(RTO_TIME) } (0)->
321     ereport.io.pciex.dl.rto@pciexrc,
322     ereport.io.pciex.dl.rto@pciexrc/PCIEXFNHZ;
324 prop fault.io.pciex.device-interr-corr@pciexrc {
325     payloadprop_defined("detector") && setserdsuffix("_rnr") &&
326     setserdn(RNR_COUNT) && setserdt(RNR_TIME) } (0)->
327     ereport.io.pciex.dl.rnr@pciexrc,
328     ereport.io.pciex.dl.rnr@pciexrc/PCIEXFNHZ;
330 prop fault.io.pciex.device-interr-corr@pciexrc {
331     payloadprop_defined("detector") && setserdsuffix("_re") &&
332     setserdn(RE_COUNT) && setserdt(RE_TIME) } (0)->
333     ereport.io.pciex.pl.re@pciexrc,
334     ereport.io.pciex.pl.re@pciexrc/PCIEXFNHZ;
336 prop fault.io.pciex.device-interr-unaf@pciexrc (1)->
337     error.io.pciex.nf-poisecrc-d@pciexrc/PCIEXFNHZ;
339 prop fault.io.pciex.device-interr-deg@pciexrc (1)->
340     error.io.pciex.deg-poisecrc-d@pciexrc/PCIEXFNHZ;
342 prop fault.io.pciex.device-interr@pciexrc (1)->
343     error.io.pciex.f-poisecrc-d@pciexrc/PCIEXFNHZ,
344     error.io.pciex.ca-d@pciexrc/PCIEXFNHZ,
345     error.io.pciex.mtlp-d@pciexrc/PCIEXFNHZ,
346     error.io.pciex.fatlink@pciexrc/PCIEXFNHZ;
349  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
350  * A faulty PCI Express leaf device or upstream switch port may cause:
351  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
352  * - flt-nr-u:          the device not to respond to a valid downstream request
353  * - flt-ca-u:          the device to completer abort a valid downstream request
354  * - flt-badreq-u:      a bad upstream request - not CRC error (may cause
355  *                      completer to respond with ur or ca) - leaf only
356  * - flt-mtlp-u:        a malformed tlp transmitted upstream - leaf only
357  * - flt-ecrcreq-u:     request with end-to-end CRC error transmitted upstream
358  * - flt-ecrccomp-u:    compl with end-to-end CRC error transmitted upstream
359  * - flt-poisreq-u:     poisoned request transmitted upstream
360  * - flt-poiscomp-u:    poisoned completion transmitted upstream
361  * - device:            internal error reported by leaf device
362  * - corrlink:          correctable link or physical level error
363  * - fatlink:           fatal link or physical level error
364  */
366 event error.io.pciex.flt-nr-u@PCIEXFN;
367 event error.io.pciex.flt-ca-u@PCIEXFN;
368 event error.io.pciex.flt-mtlp-u@PCIEXFN;
369 event error.io.pciex.fatlink@PCIEXFN;
370 event error.io.pciex.flt-badreq-u@PCIEXFN;
371 event error.io.pciex.flt-nf-poisecrc-u@PCIEXFN;
372 event error.io.pciex.flt-f-poisecrc-u@PCIEXFN;
373 event error.io.pciex.flt-deg-poisecrc-u@PCIEXFN;
374 event ereport.io.pciex.dl.btlp@PCIEXFN{within(5s)};
375 event ereport.io.pciex.dl.bdllp@PCIEXFN{within(5s)};
376 event ereport.io.pciex.dl.rto@PCIEXFN{within(5s)};
377 event ereport.io.pciex.dl.rnr@PCIEXFN{within(5s)};
378 event ereport.io.pciex.pl.re@PCIEXFN{within(5s)};
379 event ereport.io.pciex.dl.btlp@PCIEXFN/PCIEXFN{within(5s)};
380 event ereport.io.pciex.dl.bdllp@PCIEXFN/PCIEXFN{within(5s)};
381 event ereport.io.pciex.dl.rto@PCIEXFN/PCIEXFN{within(5s)};
382 event ereport.io.pciex.dl.rnr@PCIEXFN/PCIEXFN{within(5s)};
383 event ereport.io.pciex.pl.re@PCIEXFN/PCIEXFN{within(5s)};
384 event ereport.io.device.fw_corrupt@PCIEXFN{within(5s)};
385 event ereport.io.device.fw_mismatch@PCIEXFN{within(5s)};
387 prop fault.io.pciex.device-noresp@PCIEXFN { IS_LF(PCIEXFN) } (1)->
388     error.io.pciex.flt-nr-u@PCIEXFN;
390 prop fault.io.pciex.device-noresp@PCIEXFN { IS_SU(PCIEXFN) } (1)->
391     error.io.pciex.flt-nr-u@PCIEXFN;
393 prop fault.io.pciex.device-invreq@PCIEXFN { IS_LF(PCIEXFN) } (1)->
394     error.io.pciex.flt-badreq-u@PCIEXFN;
396 prop fault.io.pciex.device-interr-corr@pciexrc/PCIEXFN {
397     payloadprop_defined("detector") && setserdsuffix("_btlp") &&
398     setserdn(BTLP_COUNT) && setserdt(BTLP_TIME) } (0)->
399     ereport.io.pciex.dl.btlp@pciexrc,
400     ereport.io.pciex.dl.btlp@pciexrc/PCIEXFNHZ;
402 prop fault.io.pciex.device-interr-corr@pciexrc/PCIEXFN {
403     payloadprop_defined("detector") && setserdsuffix("_bdllp") &&
404     setserdn(BDLLP_COUNT) && setserdt(BDLLP_TIME) } (0)->
405     ereport.io.pciex.dl.bdllp@pciexrc,
406     ereport.io.pciex.dl.bdllp@pciexrc/PCIEXFNHZ;
408 prop fault.io.pciex.device-interr-corr@pciexrc/PCIEXFN {
409     payloadprop_defined("detector") && setserdsuffix("_rto") &&
410     setserdn(RTO_COUNT) && setserdt(RTO_TIME) } (0)->
411     ereport.io.pciex.dl.rto@pciexrc,
412     ereport.io.pciex.dl.rto@pciexrc/PCIEXFNHZ;
414 prop fault.io.pciex.device-interr-corr@pciexrc/PCIEXFN {
415     payloadprop_defined("detector") && setserdsuffix("_rnr") &&
416     setserdn(RNR_COUNT) && setserdt(RNR_TIME) } (0)->
417     ereport.io.pciex.dl.rnr@pciexrc,
418     ereport.io.pciex.dl.rnr@pciexrc/PCIEXFNHZ;
420 prop fault.io.pciex.device-interr-corr@pciexrc/PCIEXFN {
421     payloadprop_defined("detector") && setserdsuffix("_re") &&
422     setserdn(RE_COUNT) && setserdt(RE_TIME) } (0)->
423     ereport.io.pciex.pl.re@pciexrc,
424     ereport.io.pciex.pl.re@pciexrc/PCIEXFNHZ;
426 prop fault.io.pciex.device-interr-corr@PCIEXFN/PCIEXFN {
427     !IS_SD(PCIEXFN/PCIEXFN) &&
428     payloadprop_defined("detector") && setserdsuffix("_btlp") &&
429     setserdn(BTLP_COUNT) && setserdt(BTLP_TIME) } (0)->
430     ereport.io.pciex.dl.btlp@PCIEXFN,
431     ereport.io.pciex.dl.btlp@PCIEXFN/PCIEXFNHZ;
433 prop fault.io.pciex.device-interr-corr@PCIEXFN/PCIEXFN {
434     !IS_SD(PCIEXFN/PCIEXFN) &&
435     payloadprop_defined("detector") && setserdsuffix("_bdllp") &&
436     setserdn(BDLLP_COUNT) && setserdt(BDLLP_TIME) } (0)->
437     ereport.io.pciex.dl.bdllp@PCIEXFN,
438     ereport.io.pciex.dl.bdllp@PCIEXFN/PCIEXFNHZ;
440 prop fault.io.pciex.device-interr-corr@PCIEXFN/PCIEXFN {
441     !IS_SD(PCIEXFN/PCIEXFN) &&
442     payloadprop_defined("detector") && setserdsuffix("_rto") &&
443     setserdn(RTO_COUNT) && setserdt(RTO_TIME) } (0)->
444     ereport.io.pciex.dl.rto@PCIEXFN,
445     ereport.io.pciex.dl.rto@PCIEXFN/PCIEXFNHZ;
447 prop fault.io.pciex.device-interr-corr@PCIEXFN/PCIEXFN {
448     !IS_SD(PCIEXFN/PCIEXFN) &&
449     payloadprop_defined("detector") && setserdsuffix("_rnr") &&
450     setserdn(RNR_COUNT) && setserdt(RNR_TIME) } (0)->
451     ereport.io.pciex.dl.rnr@PCIEXFN,
452     ereport.io.pciex.dl.rnr@PCIEXFN/PCIEXFNHZ;
454 prop fault.io.pciex.device-interr-corr@PCIEXFN/PCIEXFN {
455     !IS_SD(PCIEXFN/PCIEXFN) &&
456     payloadprop_defined("detector") && setserdsuffix("_re") &&
457     setserdn(RE_COUNT) && setserdt(RE_TIME) } (0)->
458     ereport.io.pciex.pl.re@PCIEXFN,
459     ereport.io.pciex.pl.re@PCIEXFN/PCIEXFNHZ;
461 prop fault.io.pciex.device-interr-unaf@PCIEXFN { IS_SU(PCIEXFN) } (1)->
462     error.io.pciex.flt-nf-poisecrc-u@PCIEXFN;
464 prop fault.io.pciex.device-interr-corr@PCIEXFN { IS_LF(PCIEXFN) } (0)->
465     error.io.device.nf-device@PCIEXFN;
467 prop fault.io.pciex.device-interr-unaf@PCIEXFN { IS_LF(PCIEXFN) } (1)->
468     error.io.pciex.flt-nf-poisecrc-u@PCIEXFN;
470 prop fault.io.pciex.device-interr-deg@PCIEXFN { IS_SU(PCIEXFN) } (1)->
471     error.io.pciex.flt-deg-poisecrc-u@PCIEXFN;
473 prop fault.io.pciex.device-interr@PCIEXFN { IS_SU(PCIEXFN) } (1)->
474     error.io.pciex.flt-f-poisecrc-u@PCIEXFN,
475     error.io.pciex.flt-ca-u@PCIEXFN,
476     error.io.pciex.fatlink@PCIEXFN;
478 prop fault.io.pciex.device-interr-deg@PCIEXFN { IS_LF(PCIEXFN) } (1)->
479     error.io.pciex.flt-deg-poisecrc-u@PCIEXFN,
480     error.io.device.deg-device@PCIEXFN;
482 prop fault.io.pciex.device-interr@PCIEXFN { IS_LF(PCIEXFN) } (1)->
483     error.io.pciex.flt-f-poisecrc-u@PCIEXFN,
484     error.io.device.f-device@PCIEXFN,
485     error.io.pciex.flt-ca-u@PCIEXFN,
486     error.io.pciex.flt-mtlp-u@PCIEXFN,
487     error.io.pciex.fatlink@PCIEXFN;
489 prop fault.io.pciex.fw_corrupt@PCIEXFN { IS_LF(PCIEXFN) } (1)->
490     ereport.io.device.fw_corrupt@PCIEXFN;
492 prop fault.io.pciex.fw_corrupt@PCIEXFN { IS_LF(PCIEXFN) } (0)->
493     ereport.io.service.lost@PCIEXFN,
494     ereport.io.service.degraded@PCIEXFN;
496 prop fault.io.pciex.fw_mismatch@PCIEXFN { IS_LF(PCIEXFN) } (1)->
497     ereport.io.device.fw_mismatch@PCIEXFN;
499 prop fault.io.pciex.fw_mismatch@PCIEXFN { IS_LF(PCIEXFN) } (0)->
500     ereport.io.service.lost@PCIEXFN,
501     ereport.io.service.degraded@PCIEXFN;
504  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
505  * A faulty PCI Express downstream switch port may cause
506  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
507  * - nr-d:              the device not to respond to an upstream request
508  * - ca-d:              the device to completer abort an upstream request
509  * - ecrcreq-d:         TLP with end-to-end CRC error transmitted upstream
510  * - ecrccomp-d:        TLP with end-to-end CRC error transmitted upstream
511  * - poisreq-d:         poisoned request transmitted upstream
512  * - poiscomp-d:        poisoned completion transmitted upstream
513  * - corrlink:          correctable link or physical level error
514  * - fatlink:           fatal link or physical level error
515  */
517 event error.io.pciex.nr-d@PCIEXFN/PCIEXFN;
518 event error.io.pciex.ca-d@PCIEXFN/PCIEXFN;
519 event error.io.pciex.fatlink@PCIEXFN/PCIEXFN;
520 event error.io.pciex.nf-poisecrc-d@PCIEXFN/PCIEXFN;
521 event error.io.pciex.f-poisecrc-d@PCIEXFN/PCIEXFN;
522 event error.io.pciex.deg-poisecrc-d@PCIEXFN/PCIEXFN;
524 prop fault.io.pciex.device-noresp@PCIEXFN { IS_SD(PCIEXFN) } (1)->
525     error.io.pciex.nr-d@PCIEXFN/PCIEXFNHZ;
527 prop fault.io.pciex.device-interr-corr@PCIEXFN { IS_SD(PCIEXFN) &&
528     payloadprop_defined("detector") && setserdsuffix("_btlp") &&
529     setserdn(BTLP_COUNT) && setserdt(BTLP_TIME) } (0)->
530     ereport.io.pciex.dl.btlp@PCIEXFN,
531     ereport.io.pciex.dl.btlp@PCIEXFN/PCIEXFNHZ;
533 prop fault.io.pciex.device-interr-corr@PCIEXFN { IS_SD(PCIEXFN) &&
534     payloadprop_defined("detector") && setserdsuffix("_bdllp") &&
535     setserdn(BDLLP_COUNT) && setserdt(BDLLP_TIME) } (0)->
536     ereport.io.pciex.dl.bdllp@PCIEXFN,
537     ereport.io.pciex.dl.bdllp@PCIEXFN/PCIEXFNHZ;
539 prop fault.io.pciex.device-interr-corr@PCIEXFN { IS_SD(PCIEXFN) &&
540     payloadprop_defined("detector") && setserdsuffix("_rto") &&
541     setserdn(RTO_COUNT) && setserdt(RTO_TIME) } (0)->
542     ereport.io.pciex.dl.rto@PCIEXFN,
543     ereport.io.pciex.dl.rto@PCIEXFN/PCIEXFNHZ;
545 prop fault.io.pciex.device-interr-corr@PCIEXFN { IS_SD(PCIEXFN) &&
546     payloadprop_defined("detector") && setserdsuffix("_rnr") &&
547     setserdn(RNR_COUNT) && setserdt(RNR_TIME) } (0)->
548     ereport.io.pciex.dl.rnr@PCIEXFN,
549     ereport.io.pciex.dl.rnr@PCIEXFN/PCIEXFNHZ;
551 prop fault.io.pciex.device-interr-corr@PCIEXFN { IS_SD(PCIEXFN) &&
552     payloadprop_defined("detector") && setserdsuffix("_re") &&
553     setserdn(RE_COUNT) && setserdt(RE_TIME) } (0)->
554     ereport.io.pciex.pl.re@PCIEXFN,
555     ereport.io.pciex.pl.re@PCIEXFN/PCIEXFNHZ;
557 prop fault.io.pciex.device-interr-unaf@PCIEXFN { IS_SD(PCIEXFN) } (1)->
558     error.io.pciex.nf-poisecrc-d@PCIEXFN/PCIEXFNHZ;
560 prop fault.io.pciex.device-interr-deg@PCIEXFN { IS_SD(PCIEXFN) } (1)->
561     error.io.pciex.deg-poisecrc-d@PCIEXFN/PCIEXFNHZ;
563 prop fault.io.pciex.device-interr@PCIEXFN { IS_SD(PCIEXFN) } (1)->
564     error.io.pciex.ca-d@PCIEXFN/PCIEXFNHZ,
565     error.io.pciex.f-poisecrc-d@PCIEXFN/PCIEXFNHZ,
566     error.io.pciex.fatlink@PCIEXFN/PCIEXFNHZ;
569  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
570  * A faulty PCIEX bus may cause:
571  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
572  * - flt-nr-u:          a device to not respond because the link is down
573  * - nr-d:              a device to not respond because the link is down
574  * - corrlink:          correctable link or physical level error
575  * - fatlink:           fatal link or physical level error
576  */
578 event error.io.pciex.nr-d@PCIEXFN;
580 prop fault.io.pciex.bus-noresp@PCIEXFN { !IS_SD(PCIEXFN) } (0)->
581     error.io.pciex.flt-nr-u@PCIEXFN,
582     error.io.pciex.nr-d@PCIEXFN;
584 prop fault.io.pciex.bus-linkerr-corr@PCIEXFN/PCIEXFN {
585     !IS_SD(PCIEXFN/PCIEXFN) &&
586     payloadprop_defined("detector") && setserdsuffix("_btlp") &&
587     setserdn(BTLP_COUNT) && setserdt(BTLP_TIME) } (0)->
588     ereport.io.pciex.dl.btlp@PCIEXFN,
589     ereport.io.pciex.dl.btlp@PCIEXFN/PCIEXFNHZ;
591 prop fault.io.pciex.bus-linkerr-corr@PCIEXFN/PCIEXFN {
592     !IS_SD(PCIEXFN/PCIEXFN) &&
593     payloadprop_defined("detector") && setserdsuffix("_bdllp") &&
594     setserdn(BDLLP_COUNT) && setserdt(BDLLP_TIME) } (0)->
595     ereport.io.pciex.dl.bdllp@PCIEXFN,
596     ereport.io.pciex.dl.bdllp@PCIEXFN/PCIEXFNHZ;
598 prop fault.io.pciex.bus-linkerr-corr@PCIEXFN/PCIEXFN {
599     !IS_SD(PCIEXFN/PCIEXFN) &&
600     payloadprop_defined("detector") && setserdsuffix("_rto") &&
601     setserdn(RTO_COUNT) && setserdt(RTO_TIME) } (0)->
602     ereport.io.pciex.dl.rto@PCIEXFN,
603     ereport.io.pciex.dl.rto@PCIEXFN/PCIEXFNHZ;
605 prop fault.io.pciex.bus-linkerr-corr@PCIEXFN/PCIEXFN {
606     !IS_SD(PCIEXFN/PCIEXFN) &&
607     payloadprop_defined("detector") && setserdsuffix("_rnr") &&
608     setserdn(RNR_COUNT) && setserdt(RNR_TIME) } (0)->
609     ereport.io.pciex.dl.rnr@PCIEXFN,
610     ereport.io.pciex.dl.rnr@PCIEXFN/PCIEXFNHZ;
612 prop fault.io.pciex.bus-linkerr-corr@PCIEXFN/PCIEXFN {
613     !IS_SD(PCIEXFN/PCIEXFN) &&
614     payloadprop_defined("detector") && setserdsuffix("_re") &&
615     setserdn(RE_COUNT) && setserdt(RE_TIME) } (0)->
616     ereport.io.pciex.pl.re@PCIEXFN,
617     ereport.io.pciex.pl.re@PCIEXFN/PCIEXFNHZ;
619 prop fault.io.pciex.bus-linkerr-corr@pciexrc/PCIEXFN {
620     payloadprop_defined("detector") && setserdsuffix("_btlp") &&
621     setserdn(BTLP_COUNT) && setserdt(BTLP_TIME) } (0)->
622     ereport.io.pciex.dl.btlp@pciexrc,
623     ereport.io.pciex.dl.btlp@pciexrc/PCIEXFNHZ;
625 prop fault.io.pciex.bus-linkerr-corr@pciexrc/PCIEXFN {
626     payloadprop_defined("detector") && setserdsuffix("_bdllp") &&
627     setserdn(BDLLP_COUNT) && setserdt(BDLLP_TIME) } (0)->
628     ereport.io.pciex.dl.bdllp@pciexrc,
629     ereport.io.pciex.dl.bdllp@pciexrc/PCIEXFNHZ;
631 prop fault.io.pciex.bus-linkerr-corr@pciexrc/PCIEXFN {
632     payloadprop_defined("detector") && setserdsuffix("_rto") &&
633     setserdn(RTO_COUNT) && setserdt(RTO_TIME) } (0)->
634     ereport.io.pciex.dl.rto@pciexrc,
635     ereport.io.pciex.dl.rto@pciexrc/PCIEXFNHZ;
637 prop fault.io.pciex.bus-linkerr-corr@pciexrc/PCIEXFN {
638     payloadprop_defined("detector") && setserdsuffix("_rnr") &&
639     setserdn(RNR_COUNT) && setserdt(RNR_TIME) } (0)->
640     ereport.io.pciex.dl.rnr@pciexrc,
641     ereport.io.pciex.dl.rnr@pciexrc/PCIEXFNHZ;
643 prop fault.io.pciex.bus-linkerr-corr@pciexrc/PCIEXFN {
644     payloadprop_defined("detector") && setserdsuffix("_re") &&
645     setserdn(RE_COUNT) && setserdt(RE_TIME) } (0)->
646     ereport.io.pciex.pl.re@pciexrc,
647     ereport.io.pciex.pl.re@pciexrc/PCIEXFNHZ;
649 prop fault.io.pciex.bus-linkerr@PCIEXFN { !IS_SD(PCIEXFN) } (0)->
650     error.io.pciex.fatlink@PCIEXFN;
653  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
654  * A faulty pciex-pci bridge may cause
655  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
656  * The following errors to propagate onto the PCI Express fabric
657  * - flt-nr-u:          the device not to respond to a valid downstream request
658  * - flt-ca-u:          the device to completer abort a valid downstream request
659  * - flt-ecrcreq-u:     request with end-to-end CRC error transmitted upstream
660  * - flt-ecrccomp-u:    compl with end-to-end CRC error transmitted upstream
661  * - flt-poisreq-u:     poisoned request transmitted upstream
662  * - flt-poiscomp-u:    poisoned completion transmitted upstream
663  * - corrlink:          correctable link or physical level error upstream
664  * - fatlink:           fatal link or physical level error upstream
665  * - sec-interr:        internal error on pci express to pci bridge
667  * And the following errors to propagate onto the secondary pci or pci/x bus
668  * (these will be handled by code in the pci.esc file).
669  * - nr-pw-d:           the device not to respond to a valid upstream request
670  * - nr-drw-d:          the device not to respond to a valid upstream request
671  * - retry-to-d:        failure to retry an downstream delayed request
672  * - ta-pw-d:           the device responds with a ta to a valid upstream
673  *                      request
674  * - ta-drw-d:          the device responds with a ta to a valid upstream
675  *                      request
676  * - ape-d:     address/parity to get corrupted during downstream transmission.
677  * - dpe-d:     data/parity to get corrupted during downstream transmission.
678  * - scpe-d:    split completion to get corrupted during downstream transmission
679  */
681 event error.io.pci.ape-d@PCIEXFN/PCIFN;
682 event error.io.pci.f-dpe-d@PCIEXFN/PCIFN;
683 event error.io.pci.deg-dpe-d@PCIEXFN/PCIFN;
684 event error.io.pci.nf-dpe-d@PCIEXFN/PCIFN;
685 event error.io.pci.retry-to-d@PCIEXFN/PCIFN;
686 event error.io.pci.nr-pw-d@PCIEXFN/PCIFN;
687 event error.io.pci.nr-drw-d@PCIEXFN/PCIFN;
688 event error.io.pci.ta-pw-d@PCIEXFN/PCIFN;
689 event error.io.pci.ta-drw-d@PCIEXFN/PCIFN;
690 event error.io.pcix.scpe-d@PCIEXFN/PCIFN;
691 event error.io.pciex.sec-interr@PCIEXFN;
692 event ereport.io.pci.sec-sta@PCIEXFN{within(5s)};
694 prop fault.io.pciex.device-noresp@PCIEXFN { IS_BG(PCIEXFN) } (1)->
695     error.io.pciex.flt-nr-u@PCIEXFN,
696     error.io.pci.retry-to-d@PCIEXFN/PCIFNHZ,
697     error.io.pci.nr-pw-d@PCIEXFN/PCIFNHZ,
698     error.io.pci.nr-drw-d@PCIEXFN/PCIFNHZ;
700 prop fault.io.pciex.device-interr-unaf@PCIEXFN { IS_BG(PCIEXFN) } (1)->
701     error.io.pciex.flt-nf-poisecrc-u@PCIEXFN,
702     error.io.pci.nf-dpe-d@PCIEXFN/PCIFNHZ;
704 prop fault.io.pciex.device-interr-deg@PCIEXFN { IS_BG(PCIEXFN) } (1)->
705     error.io.pciex.flt-deg-poisecrc-u@PCIEXFN,
706     error.io.pci.deg-dpe-d@PCIEXFN/PCIFNHZ;
708 prop fault.io.pciex.device-interr@PCIEXFN { IS_BG(PCIEXFN) } (1)->
709     error.io.pciex.flt-f-poisecrc-u@PCIEXFN,
710     error.io.pciex.flt-ca-u@PCIEXFN,
711     error.io.pciex.flt-mtlp-u@PCIEXFN,
712     error.io.pciex.sec-interr@PCIEXFN,
713     error.io.pciex.fatlink@PCIEXFN,
714     error.io.pci.ta-pw-d@PCIEXFN/PCIFNHZ,
715     error.io.pci.ta-drw-d@PCIEXFN/PCIFNHZ,
716     error.io.pci.ape-d@PCIEXFN/PCIFNHZ,
717     error.io.pcix.scpe-d@PCIEXFN/PCIFNHZ,
718     error.io.pci.f-dpe-d@PCIEXFN/PCIFNHZ;
720 prop fault.io.pciex.device-interr-unaf@PCIEXFN { IS_BG(PCIEXFN) } (0)->
721     ereport.io.pci.sec-sta@PCIEXFN;
723 prop fault.io.pciex.device-interr@PCIEXFN { IS_BG(PCIEXFN) } (0)->
724     ereport.io.pci.sec-sta@PCIEXFN;
727  * the following rules for ptlp and ecrc faults are split into fatal and
728  * nonfatal, depending on the service impact reported by the leaf driver
729  */
730 event error.io.pciex.nf-poisecrc-d@PCIEXFN;
731 event error.io.pciex.deg-poisecrc-d@PCIEXFN;
732 event error.io.pciex.f-poisecrc-d@PCIEXFN;
733 event error.io.pciex.ecrcreq-d@PCIEXFN;
734 event error.io.pciex.ecrccomp-d@PCIEXFN;
735 event error.io.pciex.poisreq-d@PCIEXFN;
736 event error.io.pciex.poiscomp-d@PCIEXFN;
737 event error.io.pciex.flt-poisreq-u@PCIEXFN;
738 event error.io.pciex.flt-poiscomp-u@PCIEXFN;
739 event error.io.pciex.flt-ecrcreq-u@PCIEXFN;
740 event error.io.pciex.flt-ecrccomp-u@PCIEXFN;
742 prop error.io.pciex.nf-poisecrc-d@PCIEXFN (1)->
743     error.io.pciex.ecrcreq-d@PCIEXFN,
744     error.io.pciex.ecrccomp-d@PCIEXFN,
745     error.io.pciex.poisreq-d@PCIEXFN,
746     error.io.pciex.poiscomp-d@PCIEXFN;
748 prop error.io.pciex.nf-poisecrc-d@PCIEXFN (1)->
749     error.io.pciex.noimpact-d@PCIEXFN;
751 prop error.io.pciex.f-poisecrc-d@PCIEXFN (1)->
752     error.io.pciex.ecrcreq-d@PCIEXFN,
753     error.io.pciex.ecrccomp-d@PCIEXFN,
754     error.io.pciex.poisreq-d@PCIEXFN,
755     error.io.pciex.poiscomp-d@PCIEXFN;
757 prop error.io.pciex.f-poisecrc-d@PCIEXFN (0)->
758     error.io.pciex.lost-d@PCIEXFN;
760 prop error.io.pciex.deg-poisecrc-d@PCIEXFN (1)->
761     error.io.pciex.ecrcreq-d@PCIEXFN,
762     error.io.pciex.ecrccomp-d@PCIEXFN,
763     error.io.pciex.poisreq-d@PCIEXFN,
764     error.io.pciex.poiscomp-d@PCIEXFN;
766 prop error.io.pciex.deg-poisecrc-d@PCIEXFN (1)->
767     error.io.pciex.degraded-d@PCIEXFN;
769 prop error.io.pciex.flt-nf-poisecrc-u@PCIEXFN (1)->
770     error.io.pciex.flt-ecrcreq-u@PCIEXFN,
771     error.io.pciex.flt-ecrccomp-u@PCIEXFN,
772     error.io.pciex.flt-poisreq-u@PCIEXFN,
773     error.io.pciex.flt-poiscomp-u@PCIEXFN;
775 prop error.io.pciex.flt-nf-poisecrc-u@PCIEXFN (1)->
776     error.io.pciex.noimpact-d@PCIEXFN;
778 prop error.io.pciex.flt-deg-poisecrc-u@PCIEXFN (1)->
779     error.io.pciex.flt-ecrcreq-u@PCIEXFN,
780     error.io.pciex.flt-ecrccomp-u@PCIEXFN,
781     error.io.pciex.flt-poisreq-u@PCIEXFN,
782     error.io.pciex.flt-poiscomp-u@PCIEXFN;
784 prop error.io.pciex.flt-deg-poisecrc-u@PCIEXFN (1)->
785     error.io.pciex.degraded-d@PCIEXFN;
787 prop error.io.pciex.flt-f-poisecrc-u@PCIEXFN (1)->
788     error.io.pciex.flt-ecrcreq-u@PCIEXFN,
789     error.io.pciex.flt-ecrccomp-u@PCIEXFN,
790     error.io.pciex.flt-poisreq-u@PCIEXFN,
791     error.io.pciex.flt-poiscomp-u@PCIEXFN;
793 prop error.io.pciex.flt-f-poisecrc-u@PCIEXFN (0)->
794     error.io.pciex.lost-d@PCIEXFN;
797  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
798  * declarations
799  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
800  */
801 event error.io.pciex.fatal@PCIEXFN;
802 event error.io.pciex.nonfatal@PCIEXFN;
803 event error.io.pciex.nr-fwd-d@PCIEXFN;
804 event error.io.pciex.mtlp-fwd-d@PCIEXFN;
805 event error.io.pciex.flt-ur-u@PCIEXFN;
806 event error.io.pciex.mtlp-d@PCIEXFN;
807 event error.io.pciex.ca-d@PCIEXFN;
808 event error.io.pciex.ca-fwd-d@PCIEXFN;
809 event error.io.pciex.poisreq-fwd-d@PCIEXFN;
810 event error.io.pciex.poisreq-fwd-d@pciexrc/PCIEXFN;
811 event error.io.pciex.poisreq-fwd-d@PCIEXFN/PCIEXFN;
812 event error.io.pciex.poiscomp-fwd-d@PCIEXFN;
813 event error.io.pciex.poiscomp-fwd-d@PCIEXFN/PCIEXFN;
814 event error.io.pciex.ecrcreq-fwd-d@PCIEXFN;
815 event error.io.pciex.ecrccomp-fwd-d@PCIEXFN;
816 event error.io.pciex.source-ecrcreq-u@PCIEXFN;
817 event error.io.pciex.source-ecrccomp-u@PCIEXFN;
818 event error.io.pciex.source-poiscomp-u@PCIEXFN;
819 event error.io.pciex.source-poisreq-u@PCIEXFN;
820 event error.io.pciex.badreq-d@PCIEXFN;
821 event error.io.pci.badreq-pw-d@PCIEXFN/PCIFN;
822 event error.io.pci.badreq-drw-d@PCIEXFN/PCIFN;
823 event error.io.pci.target-ma-d@PCIEXFN;
824 event error.io.pci.target-rta-d@PCIEXFN;
825 event error.io.pci.dpdata-pw-d@PCIEXFN/PCIFN;
826 event error.io.pci.dpdata-dw-d@PCIEXFN/PCIFN;
827 event error.io.pci.dpdata-dr-d@PCIEXFN/PCIFN;
828 event error.io.pciex.ca-u@PCIEXFN;
829 event error.io.pciex.ca-u@PCIEXFN/PCIEXFN;
830 event error.io.pciex.ca-u@pciexrc/PCIEXFN;
831 event error.io.pciex.ur-u@PCIEXFN;
832 event error.io.pciex.ur-u@PCIEXFN/PCIEXFN;
833 event error.io.pciex.ur-u@pciexrc/PCIEXFN;
834 event error.io.pciex.nr-u@PCIEXFN;
835 event error.io.pciex.nr-u@PCIEXFN/PCIEXFN;
836 event error.io.pciex.nr-u@pciexrc/PCIEXFN;
837 event error.io.pciex.mtlp-u@PCIEXFN;
838 event error.io.pciex.mtlp-u@PCIEXFN/PCIEXFN;
839 event error.io.pciex.mtlp-u@pciexrc/PCIEXFN;
840 event error.io.pciex.badreq-u@PCIEXFN;
841 event error.io.pciex.badreq-u@PCIEXFN/PCIEXFN;
842 event error.io.pciex.badreq-u@pciexrc/PCIEXFN;
843 event error.io.pciex.poisreq-u@PCIEXFN;
844 event error.io.pciex.poisreq-u@PCIEXFN/PCIEXFN;
845 event error.io.pciex.poisreq-u@pciexrc/PCIEXFN;
846 event error.io.pciex.poiscomp-u@PCIEXFN;
847 event error.io.pciex.poiscomp-u@PCIEXFN/PCIEXFN;
848 event error.io.pciex.poiscomp-u@pciexrc/PCIEXFN;
849 event error.io.pciex.ecrcreq-u@PCIEXFN;
850 event error.io.pciex.ecrcreq-u@PCIEXFN/PCIEXFN;
851 event error.io.pciex.ecrccomp-u@PCIEXFN;
852 event error.io.pciex.ecrccomp-u@PCIEXFN/PCIEXFN;
854 event ereport.io.pci.ma@PCIEXFN{within(5s)};
855 event ereport.io.pci.mdpe@PCIEXFN{within(5s)};
856 event ereport.io.pci.dpe@PCIEXFN{within(5s)};
857 event ereport.io.pci.rta@PCIEXFN{within(5s)};
858 event ereport.io.pci.sta@PCIEXFN{within(5s)};
859 event ereport.io.pciex.dl.dllp@PCIEXFN{within(5s)};
860 event ereport.io.pciex.pl.te@PCIEXFN{within(5s)};
861 event ereport.io.pciex.pl.sd@PCIEXFN{within(5s)};
862 event ereport.io.pciex.tl.fcp@PCIEXFN{within(5s)};
863 event ereport.io.pciex.tl.rof@PCIEXFN{within(5s)};
864 event ereport.io.pciex.tl.mtlp@PCIEXFN{within(5s)};
865 event ereport.io.pciex.tl.ur@PCIEXFN{within(5s)};
866 event ereport.io.pciex.tl.ca@PCIEXFN{within(5s)};
867 event ereport.io.pciex.tl.ptlp@PCIEXFN{within(5s)};
868 event ereport.io.pciex.tl.ecrc@PCIEXFN{within(5s)};
869 event ereport.io.pciex.tl.uc@PCIEXFN{within(5s)};
870 event ereport.io.pciex.tl.cto@PCIEXFN{within(5s)};
871 event ereport.io.pciex.dl.dllp@pciexrc{within(5s)};
872 event ereport.io.pciex.pl.te@pciexrc{within(5s)};
873 event ereport.io.pciex.pl.sd@pciexrc{within(5s)};
874 event ereport.io.pciex.tl.fcp@pciexrc{within(5s)};
875 event ereport.io.pciex.tl.rof@pciexrc{within(5s)};
876 event ereport.io.pciex.tl.mtlp@pciexrc{within(5s)};
877 event ereport.io.pciex.tl.ur@pciexrc{within(5s)};
878 event ereport.io.pciex.tl.ca@pciexrc{within(5s)};
879 event ereport.io.pciex.tl.ptlp@pciexrc{within(5s)};
880 event ereport.io.pciex.tl.ecrc@pciexrc{within(5s)};
881 event ereport.io.pciex.tl.cto@pciexrc{within(5s)};
882 event ereport.io.pci.sec-ma@pciexrc{within(5s)};
883 event ereport.io.pci.sec-mdpe@pciexrc{within(5s)};
884 event ereport.io.pci.sec-dpe@pciexrc{within(5s)};
885 event ereport.io.pci.sec-rta@pciexrc{within(5s)};
886 event ereport.io.pci.sec-sta@pciexrc{within(5s)};
887 event ereport.io.pci.sec-mdpe@PCIEXFN{within(5s)};
888 event ereport.io.pci.sec-dpe@PCIEXFN{within(5s)};
889 event ereport.io.pci.sec-rserr@PCIEXFN{within(5s)};
890 event ereport.io.pci.sserr@PCIEXFN{within(5s)};
891 event ereport.io.pci.sec-rserr@pciexrc{within(5s)};
892 event ereport.io.pciex.rc.fe-msg@pciexrc{within(5s)};
893 event ereport.io.pciex.rc.nfe-msg@pciexrc{within(5s)};
894 event ereport.io.pciex.rc.mue-msg@pciexrc{within(5s)};
895 event ereport.io.pciex.bdg.sec-interr@PCIEXFN{within(5s)};
896 event ereport.io.pciex.bdg.sec-ude@PCIEXFN{within(5s)};
897 event ereport.io.pci.target-mdpe@PCIEXFN{within(5s)};
898 event ereport.io.pci.target-mdpe@PCIFN{within(5s)};
901  * handling of fatal and nonfatal error messages propagated up to root complex
903  * Use these for errors reported by root-complex on behalf of another device.
904  * Can use source-id payload to identify where the message came from.
905  */
906 prop error.io.pciex.fatal@PCIEXFN1 (1)->
907     ereport.io.pciex.rc.mue-msg@pciexrc { is_under(pciexrc, PCIEXFN1) },
908     ereport.io.pciex.rc.fe-msg@pciexrc { is_under(pciexrc, PCIEXFN1) &&
909         SOURCE_ID_MATCHES_BDF };
911 prop error.io.pciex.fatal@PCIEXFN (0)->
912     ereport.io.pci.sserr@PCIEXFN;
914 prop error.io.pciex.fatal@PCIEXFN { is_under(PCIEXFN1, PCIEXFN) } (0)->
915     ereport.io.pci.sserr@PCIEXFN1,
916     ereport.io.pci.sec-rserr@PCIEXFN1;
918 prop error.io.pciex.fatal@PCIEXFN { is_under(pciexrc, PCIEXFN) } (0)->
919     ereport.io.pci.sec-rserr@pciexrc;
921 prop error.io.pciex.nonfatal@PCIEXFN1 (1)->
922     ereport.io.pciex.rc.mue-msg@pciexrc { is_under(pciexrc, PCIEXFN1) },
923     ereport.io.pciex.rc.nfe-msg@pciexrc { is_under(pciexrc, PCIEXFN1) &&
924         SOURCE_ID_MATCHES_BDF };
926 prop error.io.pciex.nonfatal@PCIEXFN (0)->
927     ereport.io.pci.sserr@PCIEXFN;
929 prop error.io.pciex.nonfatal@PCIEXFN { is_under(PCIEXFN1, PCIEXFN) } (0)->
930     ereport.io.pci.sserr@PCIEXFN1,
931     ereport.io.pci.sec-rserr@PCIEXFN1;
933 prop error.io.pciex.nonfatal@PCIEXFN { is_under(pciexrc, PCIEXFN) } (0)->
934     ereport.io.pci.sec-rserr@pciexrc;
937  * link-level errors - could generate ereports at either end of link
938  * 
939  * can use may propagations here as these ereports are only seen for these
940  * faults.
941  */
942 prop error.io.pciex.fatlink@PCIEXFN { !IS_SD(PCIEXFN) } (0)->
943     error.io.pciex.fatal@PCIEXFN;
945 prop error.io.pciex.fatlink@PCIEXFN { !IS_SD(PCIEXFN) } (0)->
946     ereport.io.pciex.dl.dllp@PCIEXFN,
947     ereport.io.pciex.tl.fcp@PCIEXFN,
948     ereport.io.pciex.tl.rof@PCIEXFN;
950 prop error.io.pciex.fatlink@PCIEXFN/PCIEXFN { IS_SD(PCIEXFN) } (0)->
951     error.io.pciex.fatal@PCIEXFN;
953 prop error.io.pciex.fatlink@PCIEXFN/PCIEXFN { IS_SD(PCIEXFN) } (0)->
954     ereport.io.pciex.dl.dllp@PCIEXFN,
955     ereport.io.pciex.pl.te@PCIEXFN,
956     ereport.io.pciex.pl.sd@PCIEXFN,
957     ereport.io.pciex.tl.fcp@PCIEXFN,
958     ereport.io.pciex.tl.rof@PCIEXFN;
960 prop error.io.pciex.fatlink@pciexrc/PCIEXFN (0)->
961     ereport.io.pciex.dl.dllp@pciexrc,
962     ereport.io.pciex.pl.te@pciexrc,
963     ereport.io.pciex.pl.sd@pciexrc,
964     ereport.io.pciex.tl.fcp@pciexrc,
965     ereport.io.pciex.tl.rof@pciexrc;
968  * bridge internal error
969  */
970 prop error.io.pciex.sec-interr@PCIEXFN { IS_BG(PCIEXFN) } (2) ->
971     error.io.pciex.nonfatal@PCIEXFN,
972     ereport.io.pciex.bdg.sec-interr@PCIEXFN;
975  * downstream poisoned request
977  * - poisreq-d cascades down to the leaf device/bridge and any switch ports
978  *   on route must raise a ptlp ereport while any switch ports forwarding
979  *   the poisoned request must raise sec-mdpe ereports. The originator of the
980  *   poisoning (be it root complex or downstream port of a switch) also raises
981  *   sec-mdpe. A hardened leaf driver will also raise ptlp. A target-mdpe may
982  *   be seen at the leaf (which may be a pci device beyond the bridge).
984  * Additionally, the leaf/bridge may treat the request as a ur, which the
985  * root complex will see and report an ma. Use flt-ur-u to represent this.
987  * The fault can always be recognized and the source identified using the ptlp
988  * and sec-mdpe ereports.
989  */
990 prop error.io.pciex.poisreq-d@PCIEXFN (1)->
991     error.io.pciex.poisreq-fwd-d@PCIEXFN;
993 prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_SD(PCIEXFN) ||
994     IS_SU(PCIEXFN) } (1)->
995     error.io.pciex.flt-ur-u@PCIEXFN,
996     error.io.pciex.poisreq-fwd-d@PCIEXFN/PCIEXFNHZ; 
998 prop error.io.pciex.poisreq-fwd-d@pciexrc/PCIEXFN (1)->
999     ereport.io.pci.sec-mdpe@pciexrc;
1001 prop error.io.pciex.poisreq-fwd-d@PCIEXFN/PCIEXFN { IS_SU(PCIEXFN) } (0)->
1002     ereport.io.pci.sec-mdpe@PCIEXFN;
1004 prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_SU(PCIEXFN) } (2)->
1005     ereport.io.pci.dpe@PCIEXFN,
1006     ereport.io.pciex.tl.ptlp@PCIEXFN;
1008 prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_SU(PCIEXFN) } (0)->
1009     error.io.pciex.nonfatal@PCIEXFN;
1011 prop error.io.pciex.poisreq-fwd-d@PCIEXFN/PCIEXFN { IS_SD(PCIEXFN) } (1)->
1012     ereport.io.pci.sec-mdpe@PCIEXFN;
1014 prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_SD(PCIEXFN) } (0)->
1015     ereport.io.pci.dpe@PCIEXFN,
1016     ereport.io.pciex.tl.ptlp@PCIEXFN,
1017     error.io.pciex.nonfatal@PCIEXFN;
1019 prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (3)->
1020     ereport.io.pci.dpe@PCIEXFN,
1021     ereport.io.pciex.tl.ptlp@PCIEXFN,
1022     error.io.pciex.nonfatal@PCIEXFN;
1024 prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (1)->
1025     error.io.pci.dpdata-pw-d@PCIEXFN/PCIFNHZ,
1026     error.io.pci.dpdata-dw-d@PCIEXFN/PCIFNHZ;
1028 prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (1)->
1029     error.io.pciex.nonfatal@PCIEXFN;
1031 prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1032     ereport.io.pci.dpe@PCIEXFN,
1033     ereport.io.pciex.tl.ptlp@PCIEXFN,
1034     error.io.pciex.flt-ur-u@PCIEXFN;
1036 prop error.io.pciex.poisreq-fwd-d@PCIEXFN (0)->
1037     ereport.io.pci.target-mdpe@PCIEXFN;
1040  * downstream poisoned completion
1042  * - poiscomp-d cascades down to the leaf device/bridge and any switch ports on
1043  *   route must raise ptlp and mdpe ereports.  A hardened leaf driver will also
1044  *   raise pltp and mdpe. For non-hardened leaf devices, no ptlp/mdpe may be
1045  *   reported, and though we should still see a nonfatal error reported from
1046  *   the root complex identifying the leaf device, we won't actually be informed
1047  *   that the error was an ptlp.
1048  */
1049 prop error.io.pciex.poiscomp-d@PCIEXFN (1)->
1050     error.io.pciex.poiscomp-fwd-d@PCIEXFN;
1052 prop error.io.pciex.poiscomp-fwd-d@PCIEXFN (1)->
1053     error.io.pciex.poiscomp-fwd-d@PCIEXFN/PCIEXFNHZ; 
1055 prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_SU(PCIEXFN) } (2)->
1056     ereport.io.pci.dpe@PCIEXFN,
1057     ereport.io.pciex.tl.ptlp@PCIEXFN;
1059 prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_SU(PCIEXFN) } (1)->
1060     ereport.io.pci.mdpe@PCIEXFN,
1061     ereport.io.pci.sec-mdpe@PCIEXFN;
1063 prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_SU(PCIEXFN) } (0)->
1064     error.io.pciex.nonfatal@PCIEXFN;
1066 prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_SD(PCIEXFN) } (0)->
1067     ereport.io.pci.mdpe@PCIEXFN,
1068     ereport.io.pci.sec-mdpe@PCIEXFN,
1069     ereport.io.pci.dpe@PCIEXFN,
1070     ereport.io.pciex.tl.ptlp@PCIEXFN,
1071     error.io.pciex.nonfatal@PCIEXFN;
1073 prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (4)->
1074     ereport.io.pci.mdpe@PCIEXFN,
1075     ereport.io.pci.dpe@PCIEXFN,
1076     ereport.io.pciex.tl.ptlp@PCIEXFN,
1077     error.io.pciex.nonfatal@PCIEXFN;
1079 prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (1)->
1080     error.io.pci.dpdata-dr-d@PCIEXFN/PCIFNHZ;
1082 prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (1)->
1083     error.io.pciex.nonfatal@PCIEXFN;
1085 prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1086     ereport.io.pci.mdpe@PCIEXFN,
1087     ereport.io.pci.dpe@PCIEXFN,
1088     ereport.io.pciex.tl.ptlp@PCIEXFN;
1091  * downstream request with ecrc error.
1093  * - ecrcreq-d cascades down to the leaf device/bridge and any switches on
1094  *   route can optionally raise an ecrc ereport. A hardened leaf driver may also
1095  *   raise ecrc. For non-hardened leaf devices, no ecrc may be reported, and
1096  *   though we should still see a nonfatal error reported from the root complex
1097  *   identifying the leaf device, we won't actually be informed that the error
1098  *   was an ecrc.
1100  * Additionally, as the leaf/bridge will just throw away the packet, we should
1101  * eventually get a cto at the root complex - so use an nr-u at the pciex
1102  * leaf or bridge to get the appropriate behaviour. For the case where the leaf
1103  * driver wasn't hardened we may be able to identify the leaf device (and
1104  * therefore any intermediate switches which might have caused the problem)
1105  * either via a target-ma ereport if available or via the nonfatal error
1106  * reported from the root complex identifying the leaf device. The combination
1107  * of a nonfatal error reported from the root complex and a cto from the root
1108  * complex is sufficient to positively identify this case.
1109  */
1110 prop error.io.pciex.ecrcreq-d@PCIEXFN (1)->
1111     error.io.pciex.ecrcreq-fwd-d@PCIEXFN,
1112     error.io.pciex.ecrcreq-fwd-d@PCIEXFNHZ { is_under(PCIEXFN, PCIEXFNHZ) };
1114 prop error.io.pciex.ecrcreq-fwd-d@PCIEXFN { IS_SU(PCIEXFN) ||
1115     IS_SD(PCIEXFN) } (1)->
1116     error.io.pciex.flt-nr-u@PCIEXFN;
1118 prop error.io.pciex.ecrcreq-fwd-d@PCIEXFN { IS_SU(PCIEXFN) ||
1119     IS_SD(PCIEXFN) } (0)->
1120     ereport.io.pciex.tl.ecrc@PCIEXFN,
1121     error.io.pciex.nonfatal@PCIEXFN;
1123 prop error.io.pciex.ecrcreq-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (3)->
1124     error.io.pciex.nonfatal@PCIEXFN,
1125     ereport.io.pciex.tl.ecrc@PCIEXFN,
1126     error.io.pciex.flt-nr-u@PCIEXFN;
1128 prop error.io.pciex.ecrcreq-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (2)->
1129     error.io.pciex.nonfatal@PCIEXFN,
1130     error.io.pciex.flt-nr-u@PCIEXFN;
1132 prop error.io.pciex.ecrcreq-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1133     ereport.io.pciex.tl.ecrc@PCIEXFN;
1136  * downstream completion with ecrc error.
1138  * - ecrccomp-d cascades down to the leaf device/bridge and any switches on
1139  *   route can optionally raise an ecrc ereport. A hardened leaf driver may
1140  *   also raise ecrc. For non-hardened leaf devices, no ecrc may be reported,
1141  *   and though we should still see a nonfatal error reported from the root
1142  *   complex identifying the leaf device, we won't actually be informed that
1143  *   the error was an ecrc.
1145  * Additionally, as the leaf/bridge will just throw away the packet, we should
1146  * eventually get a cto. Note the leaf ereports are optional (ie in case driver
1147  * not hardened) but if we get both ecrc and cto we need to distinguish from
1148  * cto only which would be an nr-d.
1149  */
1150 prop error.io.pciex.ecrccomp-d@PCIEXFN (1)->
1151     error.io.pciex.ecrccomp-fwd-d@PCIEXFN,
1152     error.io.pciex.ecrccomp-fwd-d@PCIEXFNHZ { is_under(PCIEXFN, PCIEXFNHZ) };
1154 prop error.io.pciex.ecrccomp-fwd-d@PCIEXFN { IS_SU(PCIEXFN) ||
1155     IS_SD(PCIEXFN) } (0)->
1156     error.io.pciex.nonfatal@PCIEXFN,
1157     ereport.io.pciex.tl.ecrc@PCIEXFN;
1159 prop error.io.pciex.ecrccomp-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (3)->
1160     error.io.pciex.nonfatal@PCIEXFN,
1161     ereport.io.pciex.tl.ecrc@PCIEXFN,
1162     error.io.pciex.nr-d@PCIEXFN;
1164 prop error.io.pciex.ecrccomp-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (1)->
1165     error.io.pciex.nonfatal@PCIEXFN;
1167 prop error.io.pciex.ecrccomp-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1168     ereport.io.pciex.tl.ecrc@PCIEXFN,
1169     error.io.pciex.nr-d@PCIEXFN;
1172  * upstream poisoned request
1174  * - flt-poisreq-u is on the pciex node which generated the fault
1175  * - source-poisreq-u refers to at least one leaf or bridge device
1176  *   whose bdf (if leaf) must match the source-id in the payload of the
1177  *   ereport generated from the root complex.
1178  * - poisreq-u propagates up to the root complex and any switch ports on
1179  *   route will raise a ptlp ereport, while any upstream devices generating
1180  *   or forwarding the poisoned packed will raise an mdpe ereport. The root
1181  *   complex should also report a ptlp.
1183  * Additionally, as the root complex may treat the request as a ur, which the
1184  * leaf/bridge will see (and if hardened report) as an ma (including sending a 
1185  * ta onto the child pci bus if this was a delayed write).
1187  * We can always recognize what sort of fault this is from the ptlp (with no
1188  * sec-mdpe) at the root complex. Recognizing which originating devices may be
1189  * implicated can be done using the mdpe ereport (for a hardened leaf driver),
1190  * or for a non-hardened leaf driver by using the source-id payload in the ptlp
1191  * ereport to identify the originator of the request.  The ptlp/mdpe ereports
1192  * at the intervening switches will narrow the fault down to a single suspect.
1193  */
1195 prop error.io.pciex.flt-poisreq-u@PCIEXFN1 { (IS_LF(PCIEXFN) ||
1196     IS_BG(PCIEXFN)) && is_under(PCIEXFN1, PCIEXFN) } (0)->
1197     error.io.pciex.source-poisreq-u@PCIEXFN;
1199 prop error.io.pciex.source-poisreq-u@PCIEXFN1 { IS_LF(PCIEXFN1) &&
1200     SOURCE_ID_MATCHES_BDF && is_under(pciexrc, PCIEXFN1) } (0)->
1201     ereport.io.pciex.tl.ptlp@pciexrc,
1202     ereport.io.pciex.tl.ur@pciexrc;
1204 prop error.io.pciex.source-poisreq-u@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1205     ereport.io.pci.ma@PCIEXFN;
1207 prop error.io.pciex.source-poisreq-u@PCIEXFN { IS_BG(PCIEXFN) &&
1208     is_under(pciexrc, PCIEXFN) } (0)->
1209     ereport.io.pciex.tl.ptlp@pciexrc,
1210     ereport.io.pciex.tl.ur@pciexrc;
1212 prop error.io.pciex.source-poisreq-u@PCIEXFN { IS_BG(PCIEXFN) } (0)->
1213     ereport.io.pci.ma@PCIEXFN,
1214     ereport.io.pci.sec-sta@PCIEXFN,
1215     error.io.pci.ta-drw-d@PCIEXFN/PCIFN;
1217 prop error.io.pciex.flt-poisreq-u@PCIEXFN (1)->
1218     error.io.pciex.poisreq-u@PCIEXFN;
1221  * the remaining propagations are also used for poisoned requests propagating
1222  * up due to a fault behind a pcie-pci bridge
1223  */
1224 prop error.io.pciex.poisreq-u@PCIEXFN/PCIEXFN (1)->
1225     error.io.pciex.poisreq-u@PCIEXFN;
1227 prop error.io.pciex.poisreq-u@PCIEXFN { IS_BG(PCIEXFN) } (1)->
1228     ereport.io.pci.mdpe@PCIEXFN;
1230 prop error.io.pciex.poisreq-u@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1231     ereport.io.pci.mdpe@PCIEXFN;
1233 prop error.io.pciex.poisreq-u@PCIEXFN { IS_SD(PCIEXFN) } (2)->
1234     ereport.io.pci.sec-dpe@PCIEXFN,
1235     ereport.io.pciex.tl.ptlp@PCIEXFN;
1237 prop error.io.pciex.poisreq-u@PCIEXFN { IS_SD(PCIEXFN) } (0)->
1238     ereport.io.pci.mdpe@PCIEXFN,
1239     error.io.pciex.nonfatal@PCIEXFN;
1241 prop error.io.pciex.poisreq-u@PCIEXFN { IS_SU(PCIEXFN) } (1)->
1242     ereport.io.pci.mdpe@PCIEXFN;
1244 prop error.io.pciex.poisreq-u@PCIEXFN { IS_SU(PCIEXFN) } (0)->
1245     ereport.io.pci.sec-dpe@PCIEXFN,
1246     ereport.io.pciex.tl.ptlp@PCIEXFN,
1247     error.io.pciex.nonfatal@PCIEXFN;
1249 prop error.io.pciex.poisreq-u@pciexrc/PCIEXFN (1)->
1250     ereport.io.pci.sec-dpe@pciexrc;
1253  * upstream poisoned completion
1255  * - flt-poiscomp-u is on the pciex node which generated the fault. There will
1256  *   be a target-mdpe downstream from here.
1257  * - source-poiscomp-u refers to at least one leaf or bridge device
1258  *   whose bdf (if leaf) must match the source-id in the payload of the
1259  *   ereport generated from the root complex.
1260  * - poiscomp-u propagates up to the root complex and any switches on
1261  *   route will raise ptlp and sec-mdpe ereports. The root complex will also
1262  *   raise a sec-mdpe and ptlp.
1264  * We can always recognize what sort of fault this is from the ptlp/sec-mdpe at
1265  * the root complex. Recognizing which originating devices may be implicated
1266  * can be done using the source-id payload in the ptlp ereport to identify the
1267  * originator of the completion. The ptlp/sec-mdpe ereports at the intervening
1268  * switches will narrow the fault down to a single suspect.
1269  */
1270 prop error.io.pciex.flt-poiscomp-u@PCIEXFN { IS_LF(PCIEXFN1) &&
1271     is_under(PCIEXFN, PCIEXFN1) } (0)->
1272     ereport.io.pci.target-mdpe@PCIEXFN1;
1274 prop error.io.pciex.flt-poiscomp-u@PCIEXFN { IS_PCI_LF(PCIFN) &&
1275     is_under(PCIEXFN, PCIFN) } (0)->
1276     ereport.io.pci.target-mdpe@PCIFN;
1278 prop error.io.pciex.flt-poiscomp-u@PCIEXFN1 { (IS_LF(PCIEXFN) ||
1279     IS_BG(PCIEXFN)) && is_under(PCIEXFN1, PCIEXFN) } (0)->
1280     error.io.pciex.source-poiscomp-u@PCIEXFN;
1282 prop error.io.pciex.source-poiscomp-u@PCIEXFN1 { IS_LF(PCIEXFN1) &&
1283     SOURCE_ID_MATCHES_BDF && is_under(pciexrc, PCIEXFN1) } (0)->
1284     ereport.io.pciex.tl.ptlp@pciexrc;
1286 prop error.io.pciex.source-poiscomp-u@PCIEXFN1 { IS_BG(PCIEXFN1) &&
1287     is_under(pciexrc, PCIEXFN1) } (0)->
1288     ereport.io.pciex.tl.ptlp@pciexrc;
1290 prop error.io.pciex.flt-poiscomp-u@PCIEXFN (1)->
1291     error.io.pciex.poiscomp-u@PCIEXFN;
1294  * the remaining propagations are also used for poisoned completions propagating
1295  * up due to a fault behind a pcie-pci bridge
1296  */
1297 prop error.io.pciex.poiscomp-u@PCIEXFN/PCIEXFN (1)->
1298     error.io.pciex.poiscomp-u@PCIEXFN;
1300 prop error.io.pciex.poiscomp-u@PCIEXFN { IS_SD(PCIEXFN) } (2)->
1301     ereport.io.pci.sec-dpe@PCIEXFN,
1302     ereport.io.pciex.tl.ptlp@PCIEXFN;
1304 prop error.io.pciex.poiscomp-u@PCIEXFN { IS_SD(PCIEXFN) } (1)->
1305     ereport.io.pci.sec-mdpe@PCIEXFN,
1306     ereport.io.pci.mdpe@PCIEXFN;
1308 prop error.io.pciex.poiscomp-u@PCIEXFN { IS_SD(PCIEXFN) } (0)->
1309     error.io.pciex.nonfatal@PCIEXFN;
1311 prop error.io.pciex.poiscomp-u@PCIEXFN { IS_SU(PCIEXFN) } (0)->
1312     ereport.io.pci.mdpe@PCIEXFN,
1313     ereport.io.pci.sec-mdpe@PCIEXFN,
1314     ereport.io.pci.sec-dpe@PCIEXFN,
1315     ereport.io.pciex.tl.ptlp@PCIEXFN,
1316     error.io.pciex.nonfatal@PCIEXFN;
1318 prop error.io.pciex.poiscomp-u@pciexrc/PCIEXFN (1)->
1319     ereport.io.pci.sec-dpe@pciexrc;
1321 prop error.io.pciex.poiscomp-u@pciexrc/PCIEXFN (0)->
1322     ereport.io.pci.sec-mdpe@pciexrc;
1325  * upstream request with ecrc error.
1327  * - flt-ecrcreq-u is on the pciex node which generated the fault.
1328  * - source-ecrcreq-u cascades down to at least one leaf device (pciex or pci),
1329  *   whose bdf (if pciex) must match the source-id in the payload of the
1330  *   ereport generated from the root complex.
1331  * - ecrcreq-u propagates up to the root complex which must report it with an
1332  *   ecrc ereport and any switches on route can optionally raise an ecrc ereport
1334  * Additionally, as the root complex will just throw away the packet, we may
1335  * eventually get a cto - so use an nr-d at the pciex leaf or bridge to get
1336  * the appropriate behaviour.
1338  * We can always recognize what sort of fault this is from the ecrc (with no
1339  * cto) at the root complex. Recognizing which leaf device may be implicated
1340  * can be done from the cto ereport (for a hardened leaf driver) or for a
1341  * non-hardened leaf using the source-id payload of the ecrc.
1342  */
1343 prop error.io.pciex.flt-ecrcreq-u@PCIEXFN1 { (IS_LF(PCIEXFN) ||
1344     IS_BG(PCIEXFN)) && is_under(PCIEXFN1, PCIEXFN) } (0)->
1345     error.io.pciex.source-ecrcreq-u@PCIEXFN;
1347 prop error.io.pciex.source-ecrcreq-u@PCIEXFN (0)->
1348     error.io.pciex.nr-d@PCIEXFN;
1350 prop error.io.pciex.source-ecrcreq-u@PCIEXFN1 { IS_LF(PCIEXFN1) &&
1351     SOURCE_ID_MATCHES_BDF && is_under(pciexrc, PCIEXFN1) } (0)->
1352     ereport.io.pciex.tl.ecrc@pciexrc;
1354 prop error.io.pciex.source-ecrcreq-u@PCIEXFN { IS_BG(PCIEXFN) &&
1355     is_under(pciexrc, PCIEXFN) } (0)->
1356     ereport.io.pciex.tl.ecrc@pciexrc;
1358 prop error.io.pciex.flt-ecrcreq-u@PCIEXFN (1)->
1359      error.io.pciex.ecrcreq-u@PCIEXFN;
1361 prop error.io.pciex.ecrcreq-u@PCIEXFN/PCIEXFN (1)->
1362      error.io.pciex.ecrcreq-u@PCIEXFN;
1364 prop error.io.pciex.ecrcreq-u@PCIEXFN { IS_SD(PCIEXFN)||IS_SU(PCIEXFN) } (0)->
1365     ereport.io.pciex.tl.ecrc@PCIEXFN,
1366     error.io.pciex.nonfatal@PCIEXFN;
1369  * upstream completion with ecrc error.
1371  * - flt-ecrccomp-u is on the pciex node which generated the fault.
1372  * - source-ecrccomp-u cascades down to at least one leaf device (pciex or pci),
1373  *   whose bdf (if pciex) must match the source-id in the payload of the
1374  *   ereport generated from the root complex.
1375  * - ecrccomp-u propagates up to the root complex, which should report it with
1376  *   an ecrc ereport and any switches on route can optionally raise an ecrc
1377  *   ereport.
1379  * Additionally, as the root complex will just throw away the packet, we'll
1380  * eventually get a cto - so use an flt-nr-u at the pciex leaf or bridge to get
1381  * the appropriate behaviour.
1383  * We can always recognize what sort of fault this from the ecrc/cto from the
1384  * root complex. Recognizing which leaf device may be implicated can be done
1385  * using either the source-id payload of the ecrc or the target-ma ereport if
1386  * available.
1387  */
1388 prop error.io.pciex.flt-ecrccomp-u@PCIEXFN1 { (IS_LF(PCIEXFN) ||
1389     IS_BG(PCIEXFN)) && is_under(PCIEXFN1, PCIEXFN) } (0)->
1390     error.io.pciex.source-ecrccomp-u@PCIEXFN;
1392 prop error.io.pciex.source-ecrccomp-u@PCIEXFN (0)->
1393     error.io.pciex.flt-nr-u@PCIEXFN;
1395 prop error.io.pciex.source-ecrccomp-u@PCIEXFN1 { IS_LF(PCIEXFN1) &&
1396     SOURCE_ID_MATCHES_BDF && is_under(pciexrc, PCIEXFN1) } (0)->
1397     ereport.io.pciex.tl.ecrc@pciexrc;
1399 prop error.io.pciex.source-ecrccomp-u@PCIEXFN { IS_BG(PCIEXFN) &&
1400     is_under(pciexrc, PCIEXFN) } (0)->
1401     ereport.io.pciex.tl.ecrc@pciexrc;
1403 prop error.io.pciex.flt-ecrccomp-u@PCIEXFN (1)->
1404     error.io.pciex.ecrccomp-u@PCIEXFN;
1406 prop error.io.pciex.ecrccomp-u@PCIEXFN/PCIEXFN (1)->
1407     error.io.pciex.ecrccomp-u@PCIEXFN;
1409 prop error.io.pciex.ecrccomp-u@PCIEXFN { IS_SD(PCIEXFN)||IS_SU(PCIEXFN) } (0)->
1410     ereport.io.pciex.tl.ecrc@PCIEXFN,
1411     error.io.pciex.nonfatal@PCIEXFN;
1414  * no response to downstream requester
1416  * - nr-d will effectively cascade downstream to the requester. The fault here
1417  *   is always at the root complex. For a hardened leaf device driver, we will
1418  *   always be able to recognize this as the requester will report this as a
1419  *   cto. For non-hardened leaf devices, no cto will be reported, and though we
1420  *   should still see a nonfatal error reported from the root complex
1421  *   identifying the leaf device, we won't actually be informed that the error
1422  *   was a cto.
1423  */
1424 prop error.io.pciex.nr-d@PCIEXFN (1)->
1425     error.io.pciex.nr-fwd-d@PCIEXFN { IS_BG(PCIEXFN) || IS_LF(PCIEXFN) },
1426     error.io.pciex.nr-fwd-d@PCIEXFNHZ { (IS_BG(PCIEXFNHZ) ||
1427     IS_LF(PCIEXFNHZ)) && is_under(PCIEXFN, PCIEXFNHZ) }; 
1429 prop error.io.pciex.nr-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (2)->
1430     error.io.pciex.nonfatal@PCIEXFN,
1431     ereport.io.pciex.tl.cto@PCIEXFN;
1433 prop error.io.pciex.nr-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (0)->
1434     ereport.io.pci.ma@PCIEXFN,
1435     ereport.io.pci.sec-sta@PCIEXFN,
1436     error.io.pci.nr-drw-d@PCIEXFN/PCIFN,
1437     error.io.pci.ta-drw-d@PCIEXFN/PCIFN;
1439 prop error.io.pciex.nr-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (1)->
1440     error.io.pciex.nonfatal@PCIEXFN;
1442 prop error.io.pciex.nr-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1443     ereport.io.pci.ma@PCIEXFN,
1444     ereport.io.pciex.tl.cto@PCIEXFN;
1447  * no response to upstream requester
1449  * - flt-nr-u will effectively cascade upstream to the root complex which will
1450  *   report it as a cto.
1452  * We have to use target-ma to informs us which device failed to respond.
1453  */
1454 prop error.io.pciex.flt-nr-u@PCIEXFN (1)->
1455     error.io.pci.target-ma-d@PCIEXFN;
1457 prop error.io.pciex.flt-nr-u@PCIEXFN (1)->
1458     error.io.pciex.nr-u@PCIEXFN;
1460 prop error.io.pciex.nr-u@PCIEXFN/PCIEXFN (1)->
1461     error.io.pciex.nr-u@PCIEXFN;
1463 prop error.io.pciex.nr-u@pciexrc/PCIEXFN (1)->
1464     ereport.io.pciex.tl.cto@pciexrc;
1466 prop error.io.pciex.nr-u@pciexrc/PCIEXFN (0)->
1467     ereport.io.pci.sec-ma@pciexrc;
1470  * downstream malformed tlp
1472  * This will cascade downstream to the receiver which will report it as an mtlp.
1473  * For non-hardened leaf drivers, no mtlp will be reported, and though we should
1474  * still see a fatal error reported from the root complex identifying the leaf
1475  * device, we won't actually be informed that the error was a mtlp.
1476  * Note that sw-mtlp-d is to handle the case where the switch is actually
1477  * the target of the packet (config request etc).
1478  */
1479 prop error.io.pciex.mtlp-d@PCIEXFN (1)->
1480     error.io.pciex.mtlp-fwd-d@PCIEXFN { !IS_SD(PCIEXFN) },
1481     error.io.pciex.mtlp-fwd-d@PCIEXFNHZ { !IS_SD(PCIEXFNHZ) &&
1482     is_under(PCIEXFN, PCIEXFNHZ) };
1484 prop error.io.pciex.mtlp-fwd-d@PCIEXFN { IS_SU(PCIEXFN) } (2)->
1485     error.io.pciex.fatal@PCIEXFN,
1486     ereport.io.pciex.tl.mtlp@PCIEXFN;
1488 prop error.io.pciex.mtlp-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (2)->
1489     error.io.pciex.fatal@PCIEXFN,
1490     ereport.io.pciex.tl.mtlp@PCIEXFN;
1492 prop error.io.pciex.mtlp-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (1)->
1493     error.io.pciex.fatal@PCIEXFN;
1495 prop error.io.pciex.mtlp-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1496     ereport.io.pciex.tl.mtlp@PCIEXFN;
1499  * upstream malformed tlp
1501  * This will cascade upstream to the receiver which will report it as an mtlp.
1502  */
1503 prop error.io.pciex.flt-mtlp-u@PCIEXFN (1)->
1504     error.io.pciex.mtlp-u@PCIEXFN;
1506 prop error.io.pciex.mtlp-u@PCIEXFN/PCIEXFN (1)->
1507     error.io.pciex.mtlp-u@PCIEXFN;
1509 prop error.io.pciex.mtlp-u@pciexrc/PCIEXFN (1)->
1510     ereport.io.pciex.tl.mtlp@pciexrc;
1513  * downstream completer aborts
1515  * This could be the fault of the root complex or a switch reporting an internal
1516  * error, or of the leaf device sending an invalid request (the latter is
1517  * handled by the flt-badreq-u case below).
1519  * This is reported by the completer or by an intervening downstream switch
1520  * port. The completer abort response propagates down to the initiator which
1521  * will set the legacy pci bit rta.
1523  * The fault can always be recognized by the ca ereport from the root complex
1524  * or downstream switch port. The originator of the request can be recognized
1525  * by the rta for a hardened driver or by using the source-id payload of the
1526  * ca ereport for a non-hardened driver.
1527  */
1528 prop error.io.pciex.ca-d@pciexrc/PCIEXFN (0)->
1529     ereport.io.pciex.tl.ca@pciexrc;
1531 prop error.io.pciex.ca-d@pciexrc/PCIEXFN (1)->
1532     ereport.io.pci.sec-sta@pciexrc;
1534 prop error.io.pciex.ca-d@PCIEXFN/PCIEXFN (0)->
1535     ereport.io.pci.sec-sta@PCIEXFN;
1537 prop error.io.pciex.ca-d@PCIEXFN/PCIEXFN (2)->
1538     ereport.io.pciex.tl.ca@PCIEXFN,
1539     error.io.pciex.nonfatal@PCIEXFN;
1541 prop error.io.pciex.ca-d@PCIEXFN (1)->
1542     error.io.pciex.ca-fwd-d@PCIEXFN { IS_BG(PCIEXFN) || IS_LF(PCIEXFN) },
1543     error.io.pciex.ca-fwd-d@PCIEXFNHZ { (IS_BG(PCIEXFNHZ) ||
1544     IS_LF(PCIEXFNHZ)) && is_under(PCIEXFN, PCIEXFNHZ) };
1546 prop error.io.pciex.ca-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (1)->
1547     ereport.io.pci.rta@PCIEXFN;
1549 prop error.io.pciex.ca-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (0)->
1550     ereport.io.pci.sec-sta@PCIEXFN,
1551     error.io.pci.ta-drw-d@PCIEXFN/PCIFN;
1553 prop error.io.pciex.ca-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1554     ereport.io.pci.rta@PCIEXFN;
1557  * upstream completer aborts
1559  * This could be the fault of the leaf device/bridge/upstream switch port
1560  * reporting an internal error, or of the root complex sending an invalid
1561  * request (the latter case is handled by badreq-d below).
1563  * This is reported as a ca by the completer. The completer (for non-posted
1564  * requests) sends the appropriate error bits in the completion message to
1565  * the initiator which will set the legacy pci bit sec-rta.
1567  * The fault can always be recognized from the sec-rta bit at the root complex.
1569  * If the fault was with a PCI Express leaf with a hardened driver, then we
1570  * will identify the device from the ca ereport.
1572  * If the fault was with a PCI Express leaf with a non-hardened driver, then we
1573  * can still identify the leaf device from the source-id payload of the nonfatal
1574  * message ereport from the root complex or from the target-rta ereport.
1575  */
1576 prop error.io.pciex.flt-ca-u@PCIEXFN { !IS_LF(PCIEXFN) } (1)->
1577     ereport.io.pciex.tl.ca@PCIEXFN;
1579 prop error.io.pciex.flt-ca-u@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1580     ereport.io.pciex.tl.ca@PCIEXFN;
1582 prop error.io.pciex.flt-ca-u@PCIEXFN (0)->
1583     error.io.pciex.nonfatal@PCIEXFN,
1584     ereport.io.pci.sta@PCIEXFN;
1586 prop error.io.pciex.flt-ca-u@PCIEXFN (2)->
1587     error.io.pci.target-rta-d@PCIEXFN,
1588     error.io.pciex.ca-u@PCIEXFN;
1590 prop error.io.pciex.ca-u@PCIEXFN/PCIEXFN (1)->
1591     error.io.pciex.ca-u@PCIEXFN;
1593 prop error.io.pciex.ca-u@pciexrc/PCIEXFN (0)->
1594     ereport.io.pci.sec-rta@pciexrc;
1597  * upstream bad request
1599  * When detecting bad data on a request the completer (or any switch on the
1600  * way to the completer) may report ur or ca. If the switch detects the problem
1601  * first then the request doesn't get forwarded on to the completer.
1603  * These are reported as ur/ca ereports. For non-posted requests, the reporter
1604  * then sends the appropriate error bits in the completion message to the
1605  * initiator which will set the legacy pci bits ma or rta.
1607  * For flt-badreq-u, the ca/ur ereports contain a source-id payload that
1608  * identifies the initiator.
1610  * The fault can always be recognized by the ca/ur ereport from the root
1611  * complex or downstream switch port. The originator of the request can be
1612  * recognized by the rta/ma for a hardened driver or by using the source-id
1613  * payload of the ca/ur ereport for a non-hardened driver.
1614  */
1615 prop error.io.pciex.flt-badreq-u@PCIEXFN (0)->
1616     ereport.io.pci.ma@PCIEXFN,
1617     ereport.io.pci.rta@PCIEXFN;
1619 prop error.io.pciex.flt-badreq-u@PCIEXFN1 {
1620     SOURCE_ID_MATCHES_BDF && is_under(pciexrc, PCIEXFN1) } (0)->
1621     ereport.io.pciex.tl.ur@pciexrc,
1622     ereport.io.pciex.tl.ca@pciexrc;
1624 prop error.io.pciex.flt-badreq-u@PCIEXFN (1)->
1625     error.io.pciex.badreq-u@PCIEXFN;
1627 prop error.io.pciex.badreq-u@PCIEXFN/PCIEXFN (1)->
1628     error.io.pciex.badreq-u@PCIEXFN;
1630 prop error.io.pciex.badreq-u@pciexrc/PCIEXFN (0)->
1631     ereport.io.pci.sec-sta@pciexrc;
1633 prop error.io.pciex.flt-badreq-u@PCIEXFN1 { IS_SD(PCIEXFN) &&
1634     SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIEXFN1) } (0)->
1635     ereport.io.pciex.tl.ur@PCIEXFN,
1636     ereport.io.pciex.tl.ca@PCIEXFN;
1638 prop error.io.pciex.flt-badreq-u@PCIEXFN1 { IS_SD(PCIEXFN) &&
1639     is_under(PCIEXFN, PCIEXFN1) } (0)->
1640     ereport.io.pci.sec-sta@PCIEXFN,
1641     error.io.pciex.nonfatal@PCIEXFN;
1644  * downstream bad request
1646  * When detecting bad data on a request the completer (or any switch on the
1647  * way to the completer) may report ur or ca. If the switch detects the problem
1648  * first then the request doesn't get forwarded on to the completer.
1650  * These are reported as ur/ca ereports (except where the completer is a non-
1651  * hardened leaf driver when all we get is a nonfatal error from the root
1652  * complex identifying the leaf device). The reporter then sends the appropriate
1653  * error bits in the completion message to the initiator which will set the
1654  * legacy pci bits ma or rta (oddly there is no equivalent in pcie error
1655  * reporting).
1656  */
1657 prop error.io.pciex.badreq-d@PCIEXFN (1)->
1658     error.io.pciex.flt-ur-u@PCIEXFN,
1659     error.io.pciex.flt-ca-u@PCIEXFN,
1660     error.io.pciex.flt-ur-u@PCIEXFNHZ { is_under(PCIEXFN, PCIEXFNHZ) },
1661     error.io.pciex.flt-ca-u@PCIEXFNHZ { is_under(PCIEXFN, PCIEXFNHZ) },
1662     error.io.pci.badreq-pw-d@PCIEXFNHZ/PCIFNHZ { is_under(PCIEXFN, PCIEXFNHZ) },
1663     error.io.pci.badreq-drw-d@PCIEXFNHZ/PCIFNHZ { is_under(PCIEXFN,PCIEXFNHZ) };
1665 prop error.io.pciex.flt-ur-u@PCIEXFN { !IS_LF(PCIEXFN) } (1)->
1666     ereport.io.pciex.tl.ur@PCIEXFN;
1668 prop error.io.pciex.flt-ur-u@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1669     ereport.io.pciex.tl.ur@PCIEXFN;
1671 prop error.io.pciex.flt-ur-u@PCIEXFN (2)->
1672     error.io.pci.target-ma-d@PCIEXFN,
1673     error.io.pciex.ur-u@PCIEXFN;
1675 prop error.io.pciex.flt-ur-u@PCIEXFN (0)->
1676     error.io.pciex.nonfatal@PCIEXFN;
1678 prop error.io.pciex.ur-u@PCIEXFN/PCIEXFN (1)->
1679     error.io.pciex.ur-u@PCIEXFN;
1681 prop error.io.pciex.ur-u@pciexrc/PCIEXFN (0)->
1682     ereport.io.pci.sec-ma@pciexrc;
1685  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1686  * Stub unused legacy pci ereports at root complex.
1687  * Stub tl.uc as we can't do anything useful with it (we should eventually
1688  * get a cto which we can do something with - a uc without a cto is a genuinely
1689  * spurious completion which is at least harmless).
1690  * Stub messages that the root complex sends to itself.
1691  * Stub mce/mue/ce/nr/noadverr.
1692  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1693  */
1695 event error.io.pciex.discard_rc@pciexrc;
1697 event ereport.io.pciex.noadverr@PCIEXFN{within(5s)};
1698 event ereport.io.pciex.correctable@PCIEXFN{within(5s)};
1699 event ereport.io.pciex.nonfatal@PCIEXFN{within(5s)};
1700 event ereport.io.pciex.a-nonfatal@PCIEXFN{within(5s)};
1701 event ereport.io.pciex.fatal@PCIEXFN{within(5s)};
1702 event ereport.io.pci.nr@PCIEXFN{within(5s)};
1703 event ereport.io.pci.nr@pciexrc{within(5s)};
1704 event ereport.io.pci.ma@pciexrc{within(5s)};
1705 event ereport.io.pci.rta@pciexrc{within(5s)};
1706 event ereport.io.pci.sta@pciexrc{within(5s)};
1707 event ereport.io.pci.dpe@pciexrc{within(5s)};
1708 event ereport.io.pci.mdpe@pciexrc{within(5s)};
1709 event ereport.io.pci.sserr@pciexrc{within(5s)};
1710 event ereport.io.pciex.tl.uc@pciexrc{within(5s)};
1711 event ereport.io.pciex.noadverr@pciexrc{within(5s)};
1712 event ereport.io.pciex.a-nonfatal@pciexrc{within(5s)};
1713 event ereport.io.pciex.rc.ce-msg@pciexrc{within(5s)};
1714 event ereport.io.pciex.rc.mce-msg@pciexrc{within(5s)};
1716 event upset.io.pciex.discard_uc@PCIEXFN;
1717 event upset.io.pciex.discard@PCIEXFN;
1718 event upset.io.pciex.discard@pciexrc;
1720 prop upset.io.pciex.discard_uc@PCIEXFN { IS_BG(PCIEXFN) } (1)->
1721     ereport.io.pciex.tl.uc@PCIEXFN;
1723 prop upset.io.pciex.discard_uc@PCIEXFN { IS_LF(PCIEXFN) } (1)->
1724     ereport.io.pciex.tl.uc@PCIEXFN;
1726 prop upset.io.pciex.discard@PCIEXFN (1)->
1727     ereport.io.pci.nr@PCIEXFN,
1728     ereport.io.pciex.noadverr@PCIEXFN,
1729     ereport.io.pciex.correctable@PCIEXFN,
1730     ereport.io.pciex.nonfatal@PCIEXFN,
1731     ereport.io.pciex.a-nonfatal@PCIEXFN,
1732     ereport.io.pciex.fatal@PCIEXFN;
1734 prop error.io.pciex.discard_rc@pciexrc (0)->
1735     ereport.io.pciex.rc.mue-msg@pciexrc,
1736     ereport.io.pciex.rc.fe-msg@pciexrc { SOURCE_ID_MATCHES_OWN_BDF },
1737     ereport.io.pciex.rc.nfe-msg@pciexrc { SOURCE_ID_MATCHES_OWN_BDF };
1739 prop upset.io.pciex.discard@pciexrc (1)->
1740     error.io.pciex.discard_rc@pciexrc,
1741     ereport.io.pci.nr@pciexrc,
1742     ereport.io.pciex.noadverr@pciexrc,
1743     ereport.io.pciex.a-nonfatal@pciexrc,
1744     ereport.io.pciex.rc.ce-msg@pciexrc,
1745     ereport.io.pciex.rc.mce-msg@pciexrc,
1746     ereport.io.pciex.tl.uc@pciexrc,
1747     ereport.io.pci.ma@pciexrc,
1748     ereport.io.pci.rta@pciexrc,
1749     ereport.io.pci.sta@pciexrc,
1750     ereport.io.pci.dpe@pciexrc,
1751     ereport.io.pci.mdpe@pciexrc,
1752     ereport.io.pci.sserr@pciexrc;
1755  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1756  * rules for propagations from child PCI bus
1757  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1758  */
1760 event error.io.pci.retry-to-u@PCIEXFN/PCIFN;
1761 event error.io.pci.ma-u@PCIEXFN/PCIFN;
1762 event error.io.pci.ta-u@PCIEXFN/PCIFN;
1763 event error.io.pci.ape-u@PCIEXFN/PCIFN;
1764 event error.io.pci.source-ape-u@PCIFN;
1765 event error.io.pci.target-ma-d@PCIFN;
1766 event error.io.pci.target-rta-d@PCIFN;
1767 event error.io.pci.badreq-pw-u@PCIEXFN/PCIFN;
1768 event error.io.pci.badreq-drw-u@PCIEXFN/PCIFN;
1769 event error.io.pci.source-perr-u@PCIFN;
1770 event error.io.pci.source-dpdata-u@PCIFN;
1771 event error.io.pci.dpdata-pw-u@PCIEXFN/PCIFN;
1772 event error.io.pci.dpdata-dw-u@PCIEXFN/PCIFN;
1773 event error.io.pci.dpdata-dr-u@PCIEXFN/PCIFN;
1774 event error.io.pci.perr-pw-u@PCIEXFN/PCIFN;
1775 event error.io.pci.perr-dw-u@PCIEXFN/PCIFN;
1776 event error.io.pci.perr-dr-u@PCIEXFN/PCIFN;
1777 event error.io.pci.serr-u@PCIEXFN/PCIFN;
1778 event error.io.pcix.scpe-u@PCIEXFN/PCIFN;
1779 event error.io.pcix.source-scpe-u@PCIFN;
1780 event error.io.pcix.spl-comp-ma-u@PCIEXFN/PCIFN;
1781 event error.io.pcix.spl-comp-ta-u@PCIEXFN/PCIFN;
1782 event error.io.pcix.spl-comp-ma-d@PCIEXFN/PCIFN;
1783 event error.io.pcix.spl-comp-ta-d@PCIEXFN/PCIFN;
1784 event error.io.pcix.uscmd@PCIEXFN;
1786 event ereport.io.pcix.sec-spl-dis@PCIEXFN{within(5s)};
1787 event ereport.io.pciex.bdg.uscmd@PCIEXFN{within(5s)};
1788 event ereport.io.pciex.bdg.sec-perr@PCIEXFN{within(5s)};
1789 event ereport.io.pciex.bdg.sec-uadr@PCIEXFN{within(5s)};
1790 event ereport.io.pciex.bdg.sec-uat@PCIEXFN{within(5s)};
1791 event ereport.io.pciex.bdg.sec-serr@PCIEXFN{within(5s)};
1792 event ereport.io.pciex.bdg.sec-tex@PCIEXFN{within(5s)};
1793 event ereport.io.pciex.bdg.sec-rma@PCIEXFN{within(5s)};
1794 event ereport.io.pciex.bdg.sec-rta@PCIEXFN{within(5s)};
1795 event ereport.io.pciex.bdg.sec-ma-sc@PCIEXFN{within(5s)};
1796 event ereport.io.pciex.bdg.sec-ta-sc@PCIEXFN{within(5s)};
1797 event ereport.io.pci.dto@PCIEXFN{within(5s)};
1798 event ereport.io.pci.sec-rta@PCIEXFN{within(5s)};
1799 event ereport.io.pci.sec-ma@PCIEXFN{within(5s)};
1802  * ma-u will only propagate on to pciex bus for non-posted accesses. It
1803  * is then represented as an unsupported request.
1804  */
1805 prop error.io.pci.ma-u@PCIEXFN/PCIFN (0)->
1806     ereport.io.pciex.tl.ur@PCIEXFN,
1807     error.io.pciex.ur-u@PCIEXFN;
1809 prop error.io.pci.ma-u@PCIEXFN/PCIFN (2)->
1810     ereport.io.pci.sec-ma@PCIEXFN,
1811     error.io.pciex.nonfatal@PCIEXFN;
1813 prop error.io.pci.target-ma-d@PCIFN1 { IS_BG(PCIEXFN) && IS_PCI_LF(PCIFN1) &&
1814     SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIFN1) } (0)->
1815     ereport.io.pciex.bdg.sec-rma@PCIEXFN;
1818  * ta-u will only propagate on to pciex bus for non-posted accesses. It is
1819  * then represented as a completer abort.
1820  */
1821 prop error.io.pci.ta-u@PCIEXFN/PCIFN (0)->
1822     ereport.io.pci.sta@PCIEXFN,
1823     ereport.io.pciex.tl.ca@PCIEXFN,
1824     error.io.pciex.ca-u@PCIEXFN;
1826 prop error.io.pci.ta-u@PCIEXFN/PCIFN (2)->
1827     ereport.io.pci.sec-rta@PCIEXFN,
1828     error.io.pciex.nonfatal@PCIEXFN;
1830 prop error.io.pci.target-rta-d@PCIFN1 { IS_BG(PCIEXFN) && IS_PCI_LF(PCIFN1) &&
1831     SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIFN1) } (0)->
1832     ereport.io.pciex.bdg.sec-rta@PCIEXFN;
1835  * PERR# on a delayed write is represented as an unsupported request
1836  */
1837 prop error.io.pci.perr-dw-u@PCIEXFN/PCIFN (1)->
1838     ereport.io.pci.sec-mdpe@PCIEXFN;
1840 prop error.io.pci.perr-dw-u@PCIEXFN/PCIFN (0)->
1841     error.io.pciex.flt-ur-u@PCIEXFN;
1843 prop error.io.pci.perr-pw-u@PCIEXFN/PCIFN (1)->
1844     ereport.io.pci.sec-mdpe@PCIEXFN;
1846 prop error.io.pci.perr-pw-u@PCIEXFN/PCIFN (0)->
1847     error.io.pciex.nonfatal@PCIEXFN;
1849 prop error.io.pci.perr-dr-u@PCIEXFN/PCIFN (1)->
1850     error.io.pciex.nonfatal@PCIEXFN;
1852 prop error.io.pci.source-perr-u@PCIFN1 { IS_BG(PCIEXFN) && IS_PCI_LF(PCIFN1) &&
1853     SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIFN1) } (0)->
1854     ereport.io.pciex.bdg.sec-perr@PCIEXFN;
1857  * If the bridge receives data with bad ecc/parity from pci/pci-x, it will
1858  * propagate onto pci express as a poisoned tlp
1859  */
1860 prop error.io.pci.dpdata-dr-u@PCIEXFN/PCIFN (2)->
1861     ereport.io.pci.sec-dpe@PCIEXFN,
1862     error.io.pciex.poiscomp-u@PCIEXFN;
1864 prop error.io.pci.dpdata-dr-u@PCIEXFN/PCIFN (0)->
1865     error.io.pciex.nonfatal@PCIEXFN;
1867 prop error.io.pci.dpdata-dr-u@PCIEXFN/PCIFN (1)->
1868     ereport.io.pci.sec-mdpe@PCIEXFN,
1869     ereport.io.pci.mdpe@PCIEXFN;
1871 prop error.io.pci.dpdata-dw-u@PCIEXFN/PCIFN (1)->
1872     ereport.io.pci.sec-dpe@PCIEXFN;
1874 prop error.io.pci.dpdata-dw-u@PCIEXFN/PCIFN (0)->
1875     error.io.pciex.nonfatal@PCIEXFN,
1876     error.io.pciex.poisreq-u@PCIEXFN,
1877     ereport.io.pci.ma@PCIEXFN,
1878     ereport.io.pci.sec-sta@PCIEXFN,
1879     error.io.pci.ta-drw-d@PCIEXFN/PCIFN;
1881 prop error.io.pci.dpdata-pw-u@PCIEXFN/PCIFN (2)->
1882     ereport.io.pci.sec-dpe@PCIEXFN,
1883     error.io.pciex.poisreq-u@PCIEXFN;
1885 prop error.io.pci.dpdata-pw-u@PCIEXFN/PCIFN (0)->
1886     error.io.pciex.nonfatal@PCIEXFN,
1887     ereport.io.pci.ma@PCIEXFN;
1889 prop error.io.pci.source-dpdata-u@PCIFN { is_under(pciexrc, PCIFN) } (0)->
1890     ereport.io.pciex.tl.ptlp@pciexrc,
1891     ereport.io.pciex.tl.ur@pciexrc;
1893 prop error.io.pci.source-dpdata-u@PCIFN1 { IS_BG(PCIEXFN) && IS_PCI_LF(PCIFN1)
1894     && SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIFN1) } (0)->
1895     ereport.io.pciex.bdg.sec-ude@PCIEXFN;
1898  * If the bridge sees an address or attribute parity error it is considered
1899  * a fatal error.
1900  */
1901 prop error.io.pci.ape-u@PCIEXFN/PCIFN (2)->
1902     ereport.io.pci.sec-dpe@PCIEXFN,
1903     error.io.pciex.fatal@PCIEXFN;
1905 prop error.io.pci.source-ape-u@PCIFN1 { IS_BG(PCIEXFN) && IS_PCI_LF(PCIFN1) &&
1906     SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIFN1) } (0)->
1907     ereport.io.pciex.bdg.sec-uat@PCIEXFN,
1908     ereport.io.pciex.bdg.sec-uadr@PCIEXFN;
1910 prop error.io.pci.ape-u@PCIEXFN/PCIFN (0)->
1911     ereport.io.pci.sec-rserr@PCIEXFN,
1912     ereport.io.pciex.bdg.sec-serr@PCIEXFN,
1913     ereport.io.pci.sec-sta@PCIEXFN;
1916  * If the bridge sees a split completion error (pci-x only) it could
1917  * result in a number of things
1918  * - unrecovered split completion message data error (uscmd). This would
1919  *   happen on a pio write. A completer abort is returned to the initiator.
1920  * - for various faults in the split completion (eg address parity error)
1921  *   we will respond with a target abort (which the child device will treat
1922  *   as a split completion ta)
1923  * - for other faults we can't tell who send the split completion and so
1924  *   just drop the request (which the child device sees as a split
1925  *   completion ma)
1926  */
1927 prop error.io.pcix.scpe-u@PCIEXFN/PCIFN (0)->
1928     ereport.io.pci.sec-dpe@PCIEXFN,
1929     ereport.io.pci.sec-rserr@PCIEXFN,
1930     ereport.io.pciex.bdg.sec-serr@PCIEXFN,
1931     ereport.io.pci.sec-sta@PCIEXFN,
1932     error.io.pciex.fatal@PCIEXFN;
1934 prop error.io.pcix.source-scpe-u@PCIFN1 { IS_BG(PCIEXFN) && IS_PCI_LF(PCIFN1) &&
1935     SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIFN1) } (0)->
1936     ereport.io.pciex.bdg.sec-uat@PCIEXFN,
1937     ereport.io.pciex.bdg.sec-uadr@PCIEXFN;
1939 prop error.io.pcix.scpe-u@PCIEXFN/PCIFN (1)->
1940     error.io.pcix.uscmd@PCIEXFN,
1941     error.io.pcix.spl-comp-ma-d@PCIEXFN/PCIFN,
1942     error.io.pcix.spl-comp-ta-d@PCIEXFN/PCIFN;
1944 prop error.io.pcix.uscmd@PCIEXFN (4)->
1945     error.io.pciex.fatal@PCIEXFN,
1946     ereport.io.pci.sta@PCIEXFN,
1947     ereport.io.pciex.tl.ca@PCIEXFN,
1948     ereport.io.pciex.bdg.uscmd@PCIEXFN;
1950 prop error.io.pcix.uscmd@PCIEXFN (0)->
1951     error.io.pciex.ca-u@PCIEXFN;
1954  * Similarly a child device may have responded with a master abort or
1955  * target abort to one of our split competions. The hardware just logs these.
1956  */
1957 prop error.io.pcix.spl-comp-ma-u@PCIEXFN/PCIFN (3)->
1958     error.io.pciex.nonfatal@PCIEXFN,
1959     ereport.io.pcix.sec-spl-dis@PCIEXFN,
1960     ereport.io.pciex.bdg.sec-ma-sc@PCIEXFN;
1962 prop error.io.pcix.spl-comp-ma-u@PCIEXFN/PCIFN (0)->
1963     ereport.io.pci.sec-ma@PCIEXFN;
1965 prop error.io.pcix.spl-comp-ta-u@PCIEXFN/PCIFN (4)->
1966     error.io.pciex.nonfatal@PCIEXFN,
1967     ereport.io.pcix.sec-spl-dis@PCIEXFN,
1968     ereport.io.pciex.bdg.sec-ta-sc@PCIEXFN,
1969     ereport.io.pci.sec-rta@PCIEXFN;
1972  * SERR# is considered fatal
1973  */
1974 prop error.io.pci.serr-u@PCIEXFN/PCIFN (3)->
1975     error.io.pciex.fatal@PCIEXFN,
1976     ereport.io.pci.sec-rserr@PCIEXFN,
1977     ereport.io.pciex.bdg.sec-serr@PCIEXFN;
1980  * Retry time-out is nonfatal. The initial requester has stopped retrying so
1981  * there's nothing else the hardware can do but flag the error.
1982  */
1983 prop error.io.pci.retry-to-u@PCIEXFN/PCIFN (2)->
1984     error.io.pciex.nonfatal@PCIEXFN,
1985     ereport.io.pciex.bdg.sec-tex@PCIEXFN;
1987 prop error.io.pci.retry-to-u@PCIEXFN/PCIFN (0)->
1988     ereport.io.pci.sta@PCIEXFN,
1989     ereport.io.pci.dto@PCIEXFN,
1990     error.io.pciex.ca-u@PCIEXFN;
1993  * A bad dma request (eg with invalid address) propagates onto pci express
1994  * as a bad dma request. The end result may be a master abort or target abort
1995  * (depending on whether the child is pci-x or pci).
1996  */
1997 prop error.io.pci.badreq-pw-u@PCIEXFN/PCIFN (0)->
1998     ereport.io.pci.ma@PCIEXFN,
1999     ereport.io.pci.rta@PCIEXFN,
2000     error.io.pciex.badreq-u@PCIEXFN,
2001     ereport.io.pci.sec-sta@PCIEXFN;
2003 prop error.io.pci.badreq-pw-u@PCIEXFN/PCIFN {
2004     is_under(pciexrc, PCIEXFN/PCIFN) } (0)->
2005     ereport.io.pciex.tl.ur@pciexrc,
2006     ereport.io.pciex.tl.ca@pciexrc;
2008 prop error.io.pci.badreq-pw-u@PCIEXFN/PCIFN { IS_SD(PCIEXFN1) &&
2009     is_under(PCIEXFN1, PCIEXFN/PCIFN) } (0)->
2010     ereport.io.pciex.tl.ur@PCIEXFN1,
2011     ereport.io.pciex.tl.ca@PCIEXFN1,
2012     ereport.io.pci.sec-sta@PCIEXFN1,
2013     error.io.pciex.nonfatal@PCIEXFN1;
2015 prop error.io.pci.badreq-drw-u@PCIEXFN/PCIFN (0)->
2016     ereport.io.pci.ma@PCIEXFN,
2017     ereport.io.pci.rta@PCIEXFN,
2018     error.io.pciex.badreq-u@PCIEXFN,
2019     ereport.io.pci.sec-sta@PCIEXFN;
2021 prop error.io.pci.badreq-drw-u@PCIEXFN/PCIFN {
2022     is_under(pciexrc, PCIEXFN/PCIFN) } (0)->
2023     ereport.io.pciex.tl.ur@pciexrc,
2024     ereport.io.pciex.tl.ca@pciexrc;
2026 prop error.io.pci.badreq-drw-u@PCIEXFN/PCIFN { IS_SD(PCIEXFN1) &&
2027     is_under(PCIEXFN1, PCIEXFN/PCIFN) } (0)->
2028     ereport.io.pciex.tl.ur@PCIEXFN1,
2029     ereport.io.pciex.tl.ca@PCIEXFN1,
2030     ereport.io.pci.sec-sta@PCIEXFN1,
2031     error.io.pciex.nonfatal@PCIEXFN1;
2034  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2035  * target- propagations
2036  * 
2037  * A Root Complex driver may generate "target-" ereports when knowledge of the
2038  * physical address associated with a fault allows the target device to be
2039  * determined. This is not a requirement of the Diagnosis Engine, but can be
2040  * valuable when available.
2041  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2042  */
2043 event error.io.pci.target-ma-d@PCIEXFN/PCIFN;
2044 event error.io.pci.target-rta-d@PCIEXFN/PCIFN;
2045 event ereport.io.pci.target-rta@PCIEXFN{within(5s)};
2046 event ereport.io.pci.target-ma@PCIEXFN{within(5s)};
2048 prop error.io.pci.target-ma-d@PCIEXFN (0)->
2049     ereport.io.pci.target-ma@PCIEXFN,
2050     ereport.io.pci.target-ma@PCIEXFNHZ { is_under(PCIEXFN, PCIEXFNHZ) },
2051     error.io.pci.target-ma-d@PCIEXFNHZ/PCIFNHZ { is_under(PCIEXFN, PCIEXFNHZ) };
2053 prop error.io.pci.target-rta-d@PCIEXFN (0)->
2054     ereport.io.pci.target-rta@PCIEXFN,
2055     ereport.io.pci.target-rta@PCIEXFNHZ { is_under(PCIEXFN, PCIEXFNHZ) },
2056     error.io.pci.target-rta-d@PCIEXFNHZ/PCIFNHZ { is_under(PCIEXFN,PCIEXFNHZ) };
2059  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2060  * stub unused pciex-pci bridge ereports
2061  * - ignore usc/sec-unex-spl
2062  * - ignore sec-spl-or/sec-spl-dly as these aren't really faults (tuning info)
2063  * - ignore ecc.ue ereports (we get everything we need from dpe/mdpe)
2064  * - ignore ecc.ce ereports for now (could do serd on these)
2065  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2066  */
2068 event ereport.io.pciex.bdg.usc@PCIEXFN{within(5s)};
2069 event ereport.io.pcix.sec-unex-spl@PCIEXFN{within(5s)};
2070 event ereport.io.pcix.sec-spl-or@PCIEXFN{within(5s)};
2071 event ereport.io.pcix.sec-spl-dly@PCIEXFN{within(5s)};
2072 event ereport.io.pcix.sec-ecc.ce-addr@PCIEXFN{within(5s)};
2073 event ereport.io.pcix.sec-ecc.ce-attr@PCIEXFN{within(5s)};
2074 event ereport.io.pcix.sec-ecc.ce-data@PCIEXFN{within(5s)};
2075 event ereport.io.pcix.sec-ecc.ue-addr@PCIEXFN{within(5s)};
2076 event ereport.io.pcix.sec-ecc.ue-attr@PCIEXFN{within(5s)};
2077 event ereport.io.pcix.sec-ecc.ue-data@PCIEXFN{within(5s)};
2078 event ereport.io.pcix.sec-s-ce@PCIEXFN{within(5s)};
2079 event ereport.io.pcix.sec-s-ue@PCIEXFN{within(5s)};
2081 event upset.io.pciex.discard-bdg@PCIEXFN;
2083 prop upset.io.pciex.discard-bdg@PCIEXFN (1)->
2084     ereport.io.pciex.bdg.usc@PCIEXFN,
2085     ereport.io.pcix.sec-unex-spl@PCIEXFN,
2086     ereport.io.pcix.sec-spl-or@PCIEXFN,
2087     ereport.io.pcix.sec-spl-dly@PCIEXFN,
2088     ereport.io.pcix.sec-ecc.ce-addr@PCIEXFN,
2089     ereport.io.pcix.sec-ecc.ce-attr@PCIEXFN,
2090     ereport.io.pcix.sec-ecc.ce-data@PCIEXFN,
2091     ereport.io.pcix.sec-ecc.ue-addr@PCIEXFN,
2092     ereport.io.pcix.sec-ecc.ue-attr@PCIEXFN,
2093     ereport.io.pcix.sec-ecc.ue-data@PCIEXFN,
2094     ereport.io.pcix.sec-s-ce@PCIEXFN,
2095     ereport.io.pcix.sec-s-ue@PCIEXFN;