summaryrefslogtreecommitdiff
path: root/usr/src/uts/sun4u/io/px/px_err.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/sun4u/io/px/px_err.c')
-rw-r--r--usr/src/uts/sun4u/io/px/px_err.c42
1 files changed, 39 insertions, 3 deletions
diff --git a/usr/src/uts/sun4u/io/px/px_err.c b/usr/src/uts/sun4u/io/px/px_err.c
index 63b1de184e..2a24aa4fb0 100644
--- a/usr/src/uts/sun4u/io/px/px_err.c
+++ b/usr/src/uts/sun4u/io/px/px_err.c
@@ -254,8 +254,8 @@ px_err_bit_desc_t px_err_tlu_oe_tbl[] = {
{ TLU_OE_BIT_DESC(EHP, fatal_gos, pciex_oe) },
{ TLU_OE_BIT_DESC(LIN, non_fatal, pciex_oe) },
{ TLU_OE_BIT_DESC(LRS, non_fatal, pciex_oe) },
- { TLU_OE_BIT_DESC(LDN, non_fatal, pciex_oe) },
- { TLU_OE_BIT_DESC(LUP, tlu_lup, pciex_oe) },
+ { TLU_OE_BIT_DESC(LDN, non_fatal, pciex_ldn) },
+ { TLU_OE_BIT_DESC(LUP, tlu_lup, pciex_lup) },
{ TLU_OE_BIT_DESC(ERU, fatal_gos, pciex_oe) },
{ TLU_OE_BIT_DESC(ERO, fatal_gos, pciex_oe) },
{ TLU_OE_BIT_DESC(EMP, fatal_gos, pciex_oe) },
@@ -1670,7 +1670,7 @@ PX_ERPT_SEND_DEC(pciex_rx_tx_oe)
/* TLU Other Event - see io erpt doc, section 3.9 */
PX_ERPT_SEND_DEC(pciex_oe)
{
- char buf[FM_MAX_CLASS];
+ char buf[FM_MAX_CLASS];
(void) snprintf(buf, FM_MAX_CLASS, "%s", class_name);
ddi_fm_ereport_post(rpdip, buf, derr->fme_ena,
@@ -1688,3 +1688,39 @@ PX_ERPT_SEND_DEC(pciex_oe)
return (PX_OK);
}
+
+/* TLU Other Event - Link Down see io erpt doc, section 3.9 */
+PX_ERPT_SEND_DEC(pciex_ldn)
+{
+ px_t *px_p = DIP_TO_STATE(rpdip);
+
+ /*
+ * Don't post ereport, if ldn event is due to
+ * power management.
+ */
+ if (px_p->px_pm_flags & PX_LDN_EXPECTED) {
+ px_p->px_pm_flags &= ~PX_LDN_EXPECTED;
+ return (PX_OK);
+ }
+ return (PX_ERPT_SEND(pciex_oe)(rpdip, csr_base, ss_reg, derr,
+ class_name));
+
+}
+
+/* TLU Other Event - Link Up see io erpt doc, section 3.9 */
+PX_ERPT_SEND_DEC(pciex_lup)
+{
+ px_t *px_p = DIP_TO_STATE(rpdip);
+
+ /*
+ * Don't post ereport, if lup event is due to
+ * power management.
+ */
+ if (px_p->px_pm_flags & PX_LUP_EXPECTED) {
+ px_p->px_pm_flags &= ~PX_LUP_EXPECTED;
+ return (PX_OK);
+ }
+
+ return (PX_ERPT_SEND(pciex_oe)(rpdip, csr_base, ss_reg, derr,
+ class_name));
+}