diff options
author | Corey Minyard <minyard@acm.org> | 2005-11-07 03:59:58 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-07 10:53:44 -0500 |
commit | d5a2b89a4943b423b5b0a07783fee4e08424b0b2 (patch) | |
tree | 971f23005105d486d163a7a83feac4c1ffcac9a4 /drivers/char/ipmi/ipmi_smic_sm.c | |
parent | 21d6c542153c680f689a9badf5534bf27704350b (diff) |
[PATCH] ipmi: more dell fixes
Make SMIC driver ignore EVT_AVAIL and SMS_ATN bits in flags register, as
they're used by systems management interrupts, not the host OS.
Make the OEM0 Data Available handler work for pre-IPMI 1.5 systems from Dell
too.
Without these two fixes, PowerEdge 2650 and other similar systems with SMIC
may hang a process (modprobe or anything using /dev/ipmi0).
Signed-off-by: Matt Domsch <Matt_Domsch@dell.com>
Signed-off-by: Corey Minyard <minyard@acm.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/char/ipmi/ipmi_smic_sm.c')
-rw-r--r-- | drivers/char/ipmi/ipmi_smic_sm.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/char/ipmi/ipmi_smic_sm.c b/drivers/char/ipmi/ipmi_smic_sm.c index f17043da9dd5..39d7e5ef1a2b 100644 --- a/drivers/char/ipmi/ipmi_smic_sm.c +++ b/drivers/char/ipmi/ipmi_smic_sm.c | |||
@@ -85,6 +85,12 @@ enum smic_states { | |||
85 | /* SMIC Flags Register Bits */ | 85 | /* SMIC Flags Register Bits */ |
86 | #define SMIC_RX_DATA_READY 0x80 | 86 | #define SMIC_RX_DATA_READY 0x80 |
87 | #define SMIC_TX_DATA_READY 0x40 | 87 | #define SMIC_TX_DATA_READY 0x40 |
88 | /* | ||
89 | * SMIC_SMI and SMIC_EVM_DATA_AVAIL are only used by | ||
90 | * a few systems, and then only by Systems Management | ||
91 | * Interrupts, not by the OS. Always ignore these bits. | ||
92 | * | ||
93 | */ | ||
88 | #define SMIC_SMI 0x10 | 94 | #define SMIC_SMI 0x10 |
89 | #define SMIC_EVM_DATA_AVAIL 0x08 | 95 | #define SMIC_EVM_DATA_AVAIL 0x08 |
90 | #define SMIC_SMS_DATA_AVAIL 0x04 | 96 | #define SMIC_SMS_DATA_AVAIL 0x04 |
@@ -368,8 +374,7 @@ static enum si_sm_result smic_event (struct si_sm_data *smic, long time) | |||
368 | switch (smic->state) { | 374 | switch (smic->state) { |
369 | case SMIC_IDLE: | 375 | case SMIC_IDLE: |
370 | /* in IDLE we check for available messages */ | 376 | /* in IDLE we check for available messages */ |
371 | if (flags & (SMIC_SMI | | 377 | if (flags & SMIC_SMS_DATA_AVAIL) |
372 | SMIC_EVM_DATA_AVAIL | SMIC_SMS_DATA_AVAIL)) | ||
373 | { | 378 | { |
374 | return SI_SM_ATTN; | 379 | return SI_SM_ATTN; |
375 | } | 380 | } |