diff options
Diffstat (limited to 'drivers/message/fusion/mptbase.c')
-rw-r--r-- | drivers/message/fusion/mptbase.c | 125 |
1 files changed, 107 insertions, 18 deletions
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c index 39c0b16d8d04..9960ef10366f 100644 --- a/drivers/message/fusion/mptbase.c +++ b/drivers/message/fusion/mptbase.c | |||
@@ -428,7 +428,7 @@ mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *reply) | |||
428 | results = ProcessEventNotification(ioc, pEvReply, &evHandlers); | 428 | results = ProcessEventNotification(ioc, pEvReply, &evHandlers); |
429 | if (results != evHandlers) { | 429 | if (results != evHandlers) { |
430 | /* CHECKME! Any special handling needed here? */ | 430 | /* CHECKME! Any special handling needed here? */ |
431 | devtprintk((MYIOC_s_WARN_FMT "Called %d event handlers, sum results = %d\n", | 431 | devtverboseprintk((MYIOC_s_WARN_FMT "Called %d event handlers, sum results = %d\n", |
432 | ioc->name, evHandlers, results)); | 432 | ioc->name, evHandlers, results)); |
433 | } | 433 | } |
434 | 434 | ||
@@ -438,10 +438,10 @@ mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *reply) | |||
438 | */ | 438 | */ |
439 | if (pEvReply->MsgFlags & MPI_MSGFLAGS_CONTINUATION_REPLY) { | 439 | if (pEvReply->MsgFlags & MPI_MSGFLAGS_CONTINUATION_REPLY) { |
440 | freereq = 0; | 440 | freereq = 0; |
441 | devtprintk((MYIOC_s_WARN_FMT "EVENT_NOTIFICATION reply %p does not return Request frame\n", | 441 | devtverboseprintk((MYIOC_s_WARN_FMT "EVENT_NOTIFICATION reply %p does not return Request frame\n", |
442 | ioc->name, pEvReply)); | 442 | ioc->name, pEvReply)); |
443 | } else { | 443 | } else { |
444 | devtprintk((MYIOC_s_WARN_FMT "EVENT_NOTIFICATION reply %p returns Request frame\n", | 444 | devtverboseprintk((MYIOC_s_WARN_FMT "EVENT_NOTIFICATION reply %p returns Request frame\n", |
445 | ioc->name, pEvReply)); | 445 | ioc->name, pEvReply)); |
446 | } | 446 | } |
447 | 447 | ||
@@ -5079,13 +5079,13 @@ SendEventNotification(MPT_ADAPTER *ioc, u8 EvSwitch) | |||
5079 | 5079 | ||
5080 | evnp = (EventNotification_t *) mpt_get_msg_frame(mpt_base_index, ioc); | 5080 | evnp = (EventNotification_t *) mpt_get_msg_frame(mpt_base_index, ioc); |
5081 | if (evnp == NULL) { | 5081 | if (evnp == NULL) { |
5082 | devtprintk((MYIOC_s_WARN_FMT "Unable to allocate event request frame!\n", | 5082 | devtverboseprintk((MYIOC_s_WARN_FMT "Unable to allocate event request frame!\n", |
5083 | ioc->name)); | 5083 | ioc->name)); |
5084 | return 0; | 5084 | return 0; |
5085 | } | 5085 | } |
5086 | memset(evnp, 0, sizeof(*evnp)); | 5086 | memset(evnp, 0, sizeof(*evnp)); |
5087 | 5087 | ||
5088 | devtprintk((MYIOC_s_INFO_FMT "Sending EventNotification (%d) request %p\n", ioc->name, EvSwitch, evnp)); | 5088 | devtverboseprintk((MYIOC_s_INFO_FMT "Sending EventNotification (%d) request %p\n", ioc->name, EvSwitch, evnp)); |
5089 | 5089 | ||
5090 | evnp->Function = MPI_FUNCTION_EVENT_NOTIFICATION; | 5090 | evnp->Function = MPI_FUNCTION_EVENT_NOTIFICATION; |
5091 | evnp->ChainOffset = 0; | 5091 | evnp->ChainOffset = 0; |
@@ -5840,24 +5840,27 @@ EventDescriptionStr(u8 event, u32 evData0, char *evStr) | |||
5840 | break; | 5840 | break; |
5841 | case MPI_EVENT_SAS_DEVICE_STATUS_CHANGE: | 5841 | case MPI_EVENT_SAS_DEVICE_STATUS_CHANGE: |
5842 | { | 5842 | { |
5843 | char buf[50]; | ||
5844 | u8 id = (u8)(evData0); | ||
5843 | u8 ReasonCode = (u8)(evData0 >> 16); | 5845 | u8 ReasonCode = (u8)(evData0 >> 16); |
5844 | switch (ReasonCode) { | 5846 | switch (ReasonCode) { |
5845 | case MPI_EVENT_SAS_DEV_STAT_RC_ADDED: | 5847 | case MPI_EVENT_SAS_DEV_STAT_RC_ADDED: |
5846 | ds = "SAS Device Status Change: Added"; | 5848 | sprintf(buf,"SAS Device Status Change: Added: id=%d", id); |
5847 | break; | 5849 | break; |
5848 | case MPI_EVENT_SAS_DEV_STAT_RC_NOT_RESPONDING: | 5850 | case MPI_EVENT_SAS_DEV_STAT_RC_NOT_RESPONDING: |
5849 | ds = "SAS Device Status Change: Deleted"; | 5851 | sprintf(buf,"SAS Device Status Change: Deleted: id=%d", id); |
5850 | break; | 5852 | break; |
5851 | case MPI_EVENT_SAS_DEV_STAT_RC_SMART_DATA: | 5853 | case MPI_EVENT_SAS_DEV_STAT_RC_SMART_DATA: |
5852 | ds = "SAS Device Status Change: SMART Data"; | 5854 | sprintf(buf,"SAS Device Status Change: SMART Data: id=%d", id); |
5853 | break; | 5855 | break; |
5854 | case MPI_EVENT_SAS_DEV_STAT_RC_NO_PERSIST_ADDED: | 5856 | case MPI_EVENT_SAS_DEV_STAT_RC_NO_PERSIST_ADDED: |
5855 | ds = "SAS Device Status Change: No Persistancy Added"; | 5857 | sprintf(buf,"SAS Device Status Change: No Persistancy Added: id=%d", id); |
5856 | break; | 5858 | break; |
5857 | default: | 5859 | default: |
5858 | ds = "SAS Device Status Change: Unknown"; | 5860 | sprintf(buf,"SAS Device Status Change: Unknown: id=%d", id); |
5859 | break; | 5861 | break; |
5860 | } | 5862 | } |
5863 | ds = buf; | ||
5861 | break; | 5864 | break; |
5862 | } | 5865 | } |
5863 | case MPI_EVENT_ON_BUS_TIMER_EXPIRED: | 5866 | case MPI_EVENT_ON_BUS_TIMER_EXPIRED: |
@@ -5873,11 +5876,97 @@ EventDescriptionStr(u8 event, u32 evData0, char *evStr) | |||
5873 | ds = "Persistent Table Full"; | 5876 | ds = "Persistent Table Full"; |
5874 | break; | 5877 | break; |
5875 | case MPI_EVENT_SAS_PHY_LINK_STATUS: | 5878 | case MPI_EVENT_SAS_PHY_LINK_STATUS: |
5876 | ds = "SAS PHY Link Status"; | 5879 | { |
5880 | char buf[50]; | ||
5881 | u8 LinkRates = (u8)(evData0 >> 8); | ||
5882 | u8 PhyNumber = (u8)(evData0); | ||
5883 | LinkRates = (LinkRates & MPI_EVENT_SAS_PLS_LR_CURRENT_MASK) >> | ||
5884 | MPI_EVENT_SAS_PLS_LR_CURRENT_SHIFT; | ||
5885 | switch (LinkRates) { | ||
5886 | case MPI_EVENT_SAS_PLS_LR_RATE_UNKNOWN: | ||
5887 | sprintf(buf,"SAS PHY Link Status: Phy=%d:" | ||
5888 | " Rate Unknown",PhyNumber); | ||
5889 | break; | ||
5890 | case MPI_EVENT_SAS_PLS_LR_RATE_PHY_DISABLED: | ||
5891 | sprintf(buf,"SAS PHY Link Status: Phy=%d:" | ||
5892 | " Phy Disabled",PhyNumber); | ||
5893 | break; | ||
5894 | case MPI_EVENT_SAS_PLS_LR_RATE_FAILED_SPEED_NEGOTIATION: | ||
5895 | sprintf(buf,"SAS PHY Link Status: Phy=%d:" | ||
5896 | " Failed Speed Nego",PhyNumber); | ||
5897 | break; | ||
5898 | case MPI_EVENT_SAS_PLS_LR_RATE_SATA_OOB_COMPLETE: | ||
5899 | sprintf(buf,"SAS PHY Link Status: Phy=%d:" | ||
5900 | " Sata OOB Completed",PhyNumber); | ||
5901 | break; | ||
5902 | case MPI_EVENT_SAS_PLS_LR_RATE_1_5: | ||
5903 | sprintf(buf,"SAS PHY Link Status: Phy=%d:" | ||
5904 | " Rate 1.5 Gbps",PhyNumber); | ||
5905 | break; | ||
5906 | case MPI_EVENT_SAS_PLS_LR_RATE_3_0: | ||
5907 | sprintf(buf,"SAS PHY Link Status: Phy=%d:" | ||
5908 | " Rate 3.0 Gpbs",PhyNumber); | ||
5909 | break; | ||
5910 | default: | ||
5911 | sprintf(buf,"SAS PHY Link Status: Phy=%d", PhyNumber); | ||
5912 | break; | ||
5913 | } | ||
5914 | ds = buf; | ||
5877 | break; | 5915 | break; |
5916 | } | ||
5878 | case MPI_EVENT_SAS_DISCOVERY_ERROR: | 5917 | case MPI_EVENT_SAS_DISCOVERY_ERROR: |
5879 | ds = "SAS Discovery Error"; | 5918 | ds = "SAS Discovery Error"; |
5880 | break; | 5919 | break; |
5920 | case MPI_EVENT_IR_RESYNC_UPDATE: | ||
5921 | { | ||
5922 | u8 resync_complete = (u8)(evData0 >> 16); | ||
5923 | char buf[40]; | ||
5924 | sprintf(buf,"IR Resync Update: Complete = %d:",resync_complete); | ||
5925 | ds = buf; | ||
5926 | break; | ||
5927 | } | ||
5928 | case MPI_EVENT_IR2: | ||
5929 | { | ||
5930 | u8 ReasonCode = (u8)(evData0 >> 16); | ||
5931 | switch (ReasonCode) { | ||
5932 | case MPI_EVENT_IR2_RC_LD_STATE_CHANGED: | ||
5933 | ds = "IR2: LD State Changed"; | ||
5934 | break; | ||
5935 | case MPI_EVENT_IR2_RC_PD_STATE_CHANGED: | ||
5936 | ds = "IR2: PD State Changed"; | ||
5937 | break; | ||
5938 | case MPI_EVENT_IR2_RC_BAD_BLOCK_TABLE_FULL: | ||
5939 | ds = "IR2: Bad Block Table Full"; | ||
5940 | break; | ||
5941 | case MPI_EVENT_IR2_RC_PD_INSERTED: | ||
5942 | ds = "IR2: PD Inserted"; | ||
5943 | break; | ||
5944 | case MPI_EVENT_IR2_RC_PD_REMOVED: | ||
5945 | ds = "IR2: PD Removed"; | ||
5946 | break; | ||
5947 | case MPI_EVENT_IR2_RC_FOREIGN_CFG_DETECTED: | ||
5948 | ds = "IR2: Foreign CFG Detected"; | ||
5949 | break; | ||
5950 | case MPI_EVENT_IR2_RC_REBUILD_MEDIUM_ERROR: | ||
5951 | ds = "IR2: Rebuild Medium Error"; | ||
5952 | break; | ||
5953 | default: | ||
5954 | ds = "IR2"; | ||
5955 | break; | ||
5956 | } | ||
5957 | break; | ||
5958 | } | ||
5959 | case MPI_EVENT_SAS_DISCOVERY: | ||
5960 | { | ||
5961 | if (evData0) | ||
5962 | ds = "SAS Discovery: Start"; | ||
5963 | else | ||
5964 | ds = "SAS Discovery: Stop"; | ||
5965 | break; | ||
5966 | } | ||
5967 | case MPI_EVENT_LOG_ENTRY_ADDED: | ||
5968 | ds = "SAS Log Entry Added"; | ||
5969 | break; | ||
5881 | 5970 | ||
5882 | /* | 5971 | /* |
5883 | * MPT base "custom" events may be added here... | 5972 | * MPT base "custom" events may be added here... |
@@ -5922,12 +6011,12 @@ ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *pEventReply | |||
5922 | } | 6011 | } |
5923 | 6012 | ||
5924 | EventDescriptionStr(event, evData0, evStr); | 6013 | EventDescriptionStr(event, evData0, evStr); |
5925 | devtprintk((MYIOC_s_INFO_FMT "MPT event (%s=%02Xh) detected!\n", | 6014 | devtprintk((MYIOC_s_INFO_FMT "MPT event:(%02Xh) : %s\n", |
5926 | ioc->name, | 6015 | ioc->name, |
5927 | evStr, | 6016 | event, |
5928 | event)); | 6017 | evStr)); |
5929 | 6018 | ||
5930 | #if defined(MPT_DEBUG) || defined(MPT_DEBUG_EVENTS) | 6019 | #if defined(MPT_DEBUG) || defined(MPT_DEBUG_VERBOSE_EVENTS) |
5931 | printk(KERN_INFO MYNAM ": Event data:\n" KERN_INFO); | 6020 | printk(KERN_INFO MYNAM ": Event data:\n" KERN_INFO); |
5932 | for (ii = 0; ii < evDataLen; ii++) | 6021 | for (ii = 0; ii < evDataLen; ii++) |
5933 | printk(" %08x", le32_to_cpu(pEventReply->Data[ii])); | 6022 | printk(" %08x", le32_to_cpu(pEventReply->Data[ii])); |
@@ -5986,7 +6075,7 @@ ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *pEventReply | |||
5986 | */ | 6075 | */ |
5987 | for (ii=MPT_MAX_PROTOCOL_DRIVERS-1; ii; ii--) { | 6076 | for (ii=MPT_MAX_PROTOCOL_DRIVERS-1; ii; ii--) { |
5988 | if (MptEvHandlers[ii]) { | 6077 | if (MptEvHandlers[ii]) { |
5989 | devtprintk((MYIOC_s_INFO_FMT "Routing Event to event handler #%d\n", | 6078 | devtverboseprintk((MYIOC_s_INFO_FMT "Routing Event to event handler #%d\n", |
5990 | ioc->name, ii)); | 6079 | ioc->name, ii)); |
5991 | r += (*(MptEvHandlers[ii]))(ioc, pEventReply); | 6080 | r += (*(MptEvHandlers[ii]))(ioc, pEventReply); |
5992 | handlers++; | 6081 | handlers++; |
@@ -5998,10 +6087,10 @@ ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *pEventReply | |||
5998 | * If needed, send (a single) EventAck. | 6087 | * If needed, send (a single) EventAck. |
5999 | */ | 6088 | */ |
6000 | if (pEventReply->AckRequired == MPI_EVENT_NOTIFICATION_ACK_REQUIRED) { | 6089 | if (pEventReply->AckRequired == MPI_EVENT_NOTIFICATION_ACK_REQUIRED) { |
6001 | devtprintk((MYIOC_s_WARN_FMT | 6090 | devtverboseprintk((MYIOC_s_WARN_FMT |
6002 | "EventAck required\n",ioc->name)); | 6091 | "EventAck required\n",ioc->name)); |
6003 | if ((ii = SendEventAck(ioc, pEventReply)) != 0) { | 6092 | if ((ii = SendEventAck(ioc, pEventReply)) != 0) { |
6004 | devtprintk((MYIOC_s_WARN_FMT "SendEventAck returned %d\n", | 6093 | devtverboseprintk((MYIOC_s_WARN_FMT "SendEventAck returned %d\n", |
6005 | ioc->name, ii)); | 6094 | ioc->name, ii)); |
6006 | } | 6095 | } |
6007 | } | 6096 | } |