--- ./source/private_module/SRC/mpa_adapter_app.c	2019-06-24 09:48:55.208962597 +0000
+++ ./source/private_module/SRC/mpa_adapter_app.c.hotpatch	2019-10-09 14:38:50.037741000 +0000
@@ -1,26891 +1,26920 @@
-/******************************************************************************
-
-                  Ȩ (C), 2013-2013, Ϊ޹˾
-
- ******************************************************************************
-       : mpa_adapter_app.c
-       : 
-         : qintianyi 90005776
-     : 2013116
-  ޸   :
-     : mpaӿں
-  б   :
-              MPAIntf_GetAttachedWwn
-              MPAIntf_GetBackBoardBrand
-              MPAIntf_GetBackboardESN
-              MPAIntf_GetBackBoardJbodFlag
-              MPAIntf_GetBackBoardLicense
-              MPAIntf_GetBackBoardLogo
-              MPAIntf_GetBackBoardMac
-              MPAIntf_GetBackBoardModel
-              MPAIntf_GetBackBoardNebs
-              MPAIntf_GetBackBoardSN
-              MPAIntf_GetBackBoardVendor
-              MPAIntf_GetBiosSwitchFlag
-              MPAIntf_GetBoardSlotId
-              MPAIntf_GetChipRunMode
-              MPAIntf_GetCpldVersion
-              MPAIntf_GetElectronicLabel
-              MPAIntf_GetEnclosureFruList
-              MPAIntf_GetEnclosureFruType
-              MPAIntf_GetDeviceEnclosureFruType
-              MPAIntf_GetFrameMode
-              MPAIntf_GetFrameNumber
-              MPAIntf_GetFramePowerState
-              MPAIntf_GetHardWareVersion
-              MPAIntf_GetDeviceHardWareVersion
-              MPAIntf_GetIntfCardType
-              MPAIntf_GetLedStatus
-              MPAIntf_GetMgmtVersion
-              MPAIntf_GetPortLinkRate
-              MPAIntf_GetPortLinkStatus
-              MPAIntf_GetPortPhyErr
-              MPAIntf_GetPortPhysRate
-              MPAIntf_GetPortUpDownType
-              MPAIntf_GetPortWidth
-              MPAIntf_GetPowerButtonControlMod
-              MPAIntf_GetPresentState
-              MPAIntf_GetAlarmName
-              MPAIntf_GetTemperature
-              MPAIntf_GetTemperatureLimit
-              MPAIntf_GetTemperatureName
-              MPAIntf_GetTemperatureState
-              MPAIntf_GetTemperatureSubtype
-              MPAIntf_GetVoltage
-              MPAIntf_GetVoltageThreshold
-              MPAIntf_GetWatchDogEnableFlag
-              MPAIntf_SetBackBoardBrand
-              MPAIntf_SetBackboardESN
-              MPAIntf_SetBackBoardJbodFlag
-              MPAIntf_SetBackBoardLicense
-              MPAIntf_SetBackBoardLogo
-              MPAIntf_SetBackBoardMac
-              MPAIntf_SetBackBoardModel
-              MPAIntf_SetBackBoardNebs
-              MPAIntf_SetBackBoardSN
-              MPAIntf_SetBackBoardVendor
-              MPAIntf_SetBiosSwitchFlag
-              MPAIntf_SetChipRunMode
-              MPAIntf_SetElectronicLabel
-              MPAIntf_SetFrameNumber
-              MPAIntf_SetFramePowerOnOff
-              MPAIntf_SetLedStatus
-              MPAIntf_SetPortSwitch
-              MPAIntf_SetPowerButtonControlMod
-              MPAIntf_SetTemperature
-              MPAIntf_SetTemperatureLimit
-              MPAIntf_SetVoltageThreshold
-              MPAIntf_SetWatchDogEnableFlag
-              MPAIntf_UpdateCpldPrepare
-              MPAIntf_UpdateCpldSendFile
-              MPAIntf_UpdateCpldStart
-              MPAIntf_UpdateMgmtPrepare
-              MPAIntf_UpdateMgmtSendFile
-              MPAIntf_UpdateMgmtStart
-              MPA_RegisteAlarmInfoToDM
-              MPA_RegisterBbuIntfToDM
-              MPA_RegisterBrandInfoToDM
-              MPA_RegisterCpldIntfToDM
-              MPA_RegisterDiskIntfToDM
-              MPA_RegisterElabelIntfToDM
-              MPA_RegisterEnclIntfToDM
-              MPA_RegisterEsnInfoToDM
-              MPA_RegisterFanIntfToDM
-              MPA_RegisterFrameConfigInfoToDM
-              MPA_RegisterFruIntfToDM
-              MPA_RegisterIntfToDM
-              MPA_RegisterLicenseInfoToDM
-              MPA_RegisterMacIntfToDM
-              MPA_RegisterMgmtCpuIntfToDM
-              MPA_RegisterPowerIntfToDM
-              MPA_RegisterProLogoInfoToDM
-              MPA_RegisterProLogoIntfToDM
-              MPA_RegisterSnIntfToDM
-              MPA_RegisterTemperatureIntfToDM
-              MPA_RegisterVendorIntfToDM
-              MPA_RegisterVoltIntfToDM
-              MPA_UnRegisterIntfToDM
-  ޸ʷ   :
-  1.       : 2013116
-           : qintianyi 90005776
-    ޸   : ļ
-
-******************************************************************************/
-
-#include "includes.h"
-#include "mpa_main.h"
-#include "../include/mpa_adapter_app.h"
-#include "mpa_adapter_routecore.h"
-#include "mpa_adapter_targettable.h"
-#include "mpa_ipmi.h"
-#include "mpa_v2_bmc_intf.h"
-#include "mpa_drv_dev_intf.h"
-#include "../include/mpa_pcie.h"
-
-
-/*----------------------------------------------*
- * ⲿ˵                                 *
- *----------------------------------------------*/
-
-/*----------------------------------------------*
- * ⲿԭ˵                             *
- *----------------------------------------------*/
-
-/*----------------------------------------------*
- * ڲԭ˵                             *
- *----------------------------------------------*/
-
-/*----------------------------------------------*
- * ȫֱ                                     *
- *----------------------------------------------*/
-FW_UPGRADE_FAIL_REC_S g_SimUpdateFail = {0};
-/*ΪĳЩӲͲ֧DMA͵úͲѯ*/
-static MPA_DMA_TYPE_S g_MpaDMATypeForBmc[] = 
-{
-    {DRV_FRAMEMODEL_PCIE_CTRL_2U_C1_BMC, RETURN_INVALID},
-};
-
-extern OSP_U8 *KboxAddrNew;
-
-extern MPA_CPU_AFFINITY_INFO_S g_MpaCpuAffinity;
-/*----------------------------------------------*
- * ģ鼶                                   *
- *----------------------------------------------*/
-
-/*----------------------------------------------*
- *                                      *
- *----------------------------------------------*/
-
-/*----------------------------------------------*
- * 궨                                       *
- *----------------------------------------------*/
-
- /******************************************************************************
- *     : MPA_CheckSimUpdateFailFlag
- *   : жģ̼ʧģʽǷЧ
- *   : *EnclAddrϲ·ĵַϢ
-                DriverId豸idϢ
-                FwTypeģʧܵĹ̼
- *   : 
- *   ֵ  : OSP_U32 32BIT澯
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2016616
- *           : Ǯѵ
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_CheckSimUpdateFailFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 FwType)
-{
-    OSP_S32 Ret = DRV_RETURN_OK;
-    
-    if(0 == g_SimUpdateFail.DebugEn)
-    {
-        return DRV_RETURN_OK;
-    }
-
-    if((g_SimUpdateFail.FrameType == ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame)
-       &&(g_SimUpdateFail.FruId == DAL_FRU_ID(DriverId))
-       &&(g_SimUpdateFail.DeviceId == (OSP_U8)DAL_ELEMENT_NO(DriverId))
-       &&(g_SimUpdateFail.FwType == FwType))
-    {
-        if ((DRV_FRAMEMODEL_1710BMC_END > ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame)
-        && (DRV_FRAMEMODEL_12GSAS_EXP_END < ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame))
-        {
-            Ret = DRV_RETURN_ERROR;
-        }
-        else if((g_SimUpdateFail.HostId == ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiHostId)
-           &&(g_SimUpdateFail.ScsiId == ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiScsiId))
-        {
-            Ret = DRV_RETURN_ERROR;
-        }
-    }
-
-    if(DRV_RETURN_ERROR == Ret)
-    {
-        DRV_MPA_TRACE(DRV_LOG_INFO, 125, "MPA simulate update fail(%d),id(0x%llx),devframe(0x%x),scsiid:%d %d,fruid:0x%lx,deviceid:%d,fwtype:%d.",
-                  g_SimUpdateFail.DebugEn,
-                  DriverId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, 
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiHostId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiScsiId,
-                  (OSP_U32)DAL_FRU_ID(DriverId),
-                  (OSP_U8)DAL_ELEMENT_NO(DriverId),
-                  g_SimUpdateFail.FwType);
-    }
-    
-    return Ret;
-}
-
- /******************************************************************************
- *     : MPA_GetV1Power32BitFaultBit
- *   : V1Դ8 bit澯תΪһ֮U32澯
- *   : FaultbitU8  8BIT澯
- *   : 
- *   ֵ  : OSP_U32 32BIT澯
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201417
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_U32 MPA_GetV1Power32BitFaultBit(OSP_U8 FaultbitU8)
-{
-    MPA_POWER_FAULT_U8 PowerFaultU8;
-    MPA_POWER_FAULT_U32 PowerFaultU32;
-    
-    OSAL_MemSet_s((OSP_U8 *)&PowerFaultU32, sizeof(PowerFaultU32), 0, sizeof(PowerFaultU32));
-    
-    PowerFaultU8.FaultU8 = FaultbitU8;
-    PowerFaultU32.BIT.PowerTempHigh = PowerFaultU8.BIT.PowerTempHigh;
-    PowerFaultU32.BIT.Power12VVolHigh = PowerFaultU8.BIT.PowerOutputVolHigh;
-    PowerFaultU32.BIT.Power12VCurHigh = PowerFaultU8.BIT.PowerOutputCurHigh;
-    PowerFaultU32.BIT.PowerInputLost = PowerFaultU8.BIT.PowerInputLost;
-    PowerFaultU32.BIT.PowerInputVolLow = PowerFaultU8.BIT.PowerInputHighLow;
-    PowerFaultU32.BIT.PowerFanAlarm = PowerFaultU8.BIT.PowerFanAlarm;
-    
-    return PowerFaultU32.FaultU32;
-}
-
-
-
- /******************************************************************************
- *     : MPAIntf_GetTemperature
- *   : ȡ¶
- *   : EnclAddr  豸ַϢ
- *             DriverId        豸idϢ
- *             Temperature      ¶ֵ
- *   : Temperature      ¶ֵ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131010
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetTemperature(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S16 *Temperature)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Temperature))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 0, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Temperature);
-        return DRV_RETURN_ERROR;
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_TEMP_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_S16);
-    MpaCmd.SdrType = SENSOR_TEMP;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Temperature);
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetFruAllTemperature
- *   : ȡFruۺ¶
- *   :   EnclAddr  豸ַϢ
- *                               DriverId        豸idϢ
- *                               Temperature      ¶ֵ
-                                  Length 
- *   : Temperature      ¶ֵ
- *   ֵ  :     OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014418
- *           : shufan 204084
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFruAllTemperature(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S16 *Temperature, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 BmcDataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Temperature))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 1, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Temperature);
-        return DRV_RETURN_ERROR;
-    }
-    
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    MpaCmd.Cmd = DRV_CMD_FRU_TEMP_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = (OSP_U16)Length;
-    MpaCmd.SdrType = SENSOR_TEMP;
-    MpaCmd.WtRd = MPA_READ;
-
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        BmcDataIn[0] = sizeof(OSP_U8);
-        BmcDataIn[1] = (OSP_U8)(Length / sizeof(OSP_U16));
-        
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Temperature);
-    }
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Temperature);
-    
-}
-
-/******************************************************************************
- *     : MPAIntf_SetTemperature
- *   : ¶
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Value ¶ֵ     
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131016
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetTemperature(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S16 Value)
-{
-    MPA_CMD_INFO_S MpaCmd;
-  /*ݳΪ1ֽڵĿ/رձ־ + 2ֽ¶*/
-    OSP_U8 TempratureData[3] = {0, 0, 0};
-    DAL_MPA_ADDR_S * MpaAddr = NULL;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 2, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-    
-    DRV_MPA_TRACE_LIMIT(DRV_LOG_INFO, 3, 1, 20 * HZ, "MPA sets temperature, id(0x%llx), value(%u), devframe(0x%x).", 
-                        DriverId, Value, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-    
-    MpaCmd.Cmd = DRV_CMD_TEMP_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);    
-    MpaCmd.SdrType = SENSOR_TEMP;
-    MpaCmd.WtRd = MPA_WRITE;
-    
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;    
-    if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame)
-    {
-        MpaCmd.BufLen = sizeof(TempratureData);    
-        
-        TempratureData[0] = 1;      /*BMCĵһΪģ*/
-        TempratureData[1] = (OSP_U8)(Value & 0xFF);         /*¶ֵֽ*/
-        TempratureData[2] = (OSP_U8)(((OSP_U16)Value >> 8) & 0xFF); /*¶ֵֽ*/
-    }
-    else
-    {
-        MpaCmd.BufLen = sizeof(OSP_U8);
-        TempratureData[0] = (OSP_U8)(Value & 0xFF);
-    }   
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)TempratureData, (OSP_VOID *)NULL);
-    
-}
-
-
- 
- /******************************************************************************
-  *     : MPAIntf_SetFruSingleTemperature
-  *   : FRUۺ¶
-  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-                  *             DriverId   ID ͡FRUIDDEVICE IDϢ   
-                                SubId ¶ȵID
-                  *             Value ¶ֵ     
-  *   : 
-  *   ֵ  : OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ      :
-  *  1.       : 2014418
-  *           : 淫
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
- OSP_S32 MPAIntf_SetFruSingleTemperature(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SubId, OSP_S16 Value)
- {
-     MPA_CMD_INFO_S MpaCmd;
-     /*ݳΪ1ֽڵĿ/رձ־ + 2ֽ¶*/
-     OSP_U8 TempratureData[3] = {0, 0, 0};
-     DAL_MPA_ADDR_S * MpaAddr = NULL;
- 
-     if (NULL == EnclAddr)
-     {
-         DRV_MPA_TRACE(DRV_LOG_WARN, 4, "MPA finds the pointer is null(0x%p).", EnclAddr);
-         return DRV_RETURN_ERROR;
-     }
-     
-     DRV_MPA_TRACE_LIMIT(DRV_LOG_INFO, 5, 1, 20 * HZ, "MPA sets temperature, id(0x%llx), value(%u), devframe(0x%x).", 
-                         DriverId, Value, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-
-     MpaCmd.Cmd = DRV_CMD_TEMP_SET;
-     MpaCmd.FruId = DAL_FRU_ID(DriverId);
-     MpaCmd.DeviceId = (OSP_U8)SubId;    
-     MpaCmd.SdrType = SENSOR_TEMP;
-     MpaCmd.WtRd = MPA_WRITE;
-     
-     MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;    
-     if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame)
-     {
-         MpaCmd.BufLen = sizeof(TempratureData);    
-         
-         TempratureData[0] = 1;      /*BMCĵһΪģ*/
-         TempratureData[1] = (OSP_U8)(Value & 0xFF);         /*¶ֵֽ*/
-         TempratureData[2] = (OSP_U8)(((OSP_U16)Value >> 8) & 0xFF); /*¶ֵֽ*/
-     }
-     else
-     {
-         MpaCmd.BufLen = sizeof(OSP_U8);
-         TempratureData[0] = (OSP_U8)(Value & 0xFF);
-     }   
-     
-     return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)TempratureData, (OSP_VOID *)NULL);
-     
- }
-
- /******************************************************************************
- *     : MPAIntf_GetTemperatureLimit
- *   : ѯ¶
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Thres     ֵ
- *   :  Thres     ֵ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131016
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetTemperatureLimit(OSP_VOID *EnclAddr, OSP_U64 DriverId, THRES_S *Thres)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    THRES_S TemperatureLimitBuf;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_MPA_ADDR_S *MpaAddress = NULL;
-    
-    if ((NULL == EnclAddr) || (NULL == Thres))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 6, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Thres);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_TEMP_LIMIT_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(THRES_S);
-    MpaCmd.SdrType = SENSOR_TEMP;
-    MpaCmd.WtRd = MPA_READ;
-
-    OSAL_MemSet_s((OSP_U8 *)&TemperatureLimitBuf, sizeof(THRES_S), INVALID_VALUE8, sizeof(THRES_S));
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&TemperatureLimitBuf);    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        return RetVal;
-    }
-
-    /*ȡ*/
-    MpaAddress = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    /*տMCUصݸʽз*/
-    /*v1 BMC*/    /*v1 SES*/
-    if (DRV_FRAMEMODEL_V1_END > MpaAddress->DevFrame)
-    {
-        Thres->OverCriticalAlarmThres = TemperatureLimitBuf.OverNonCriticalAlarmThres;
-        Thres->OverCriticalResumeThres = TemperatureLimitBuf.LowNonRecoverAlarmThres;
-        Thres->OverNonCriticalAlarmThres = TemperatureLimitBuf.OverNonRecoverAlarmThres;
-        Thres->OverNonCriticalResumeThres = TemperatureLimitBuf.OverCriticalAlarmThres;
-        Thres->OverNonRecoverAlarmThres = MPA_INVALID_TEMPERATURE;
-        Thres->OverNonRecoverResumeThres = MPA_INVALID_TEMPERATURE;
-        
-        Thres->LowNonRecoverAlarmThres = MPA_INVALID_TEMPERATURE;
-        Thres->LowNonRecoverResumeThres = MPA_INVALID_TEMPERATURE;
-        Thres->LowCriticalAlarmThres = TemperatureLimitBuf.OverNonCriticalResumeThres;
-        Thres->LowCriticalResumeThres = TemperatureLimitBuf.LowNonRecoverResumeThres;
-        Thres->LowNonCriticalAlarmThres = TemperatureLimitBuf.OverNonRecoverResumeThres;
-        Thres->LowNonCriticalResumeThres = TemperatureLimitBuf.OverCriticalResumeThres;
-
-    }
-    /*V2͸*/
-    else
-    {
-        OSAL_MemCpy_s((OSP_U8 *)Thres, sizeof(THRES_S), (OSP_U8 *)&TemperatureLimitBuf, sizeof(THRES_S));
-    }
-    
-    return RetVal;
-    
-}
-
- 
-  /******************************************************************************
-  *     : MPAIntf_GetFruSingleTemperatureLimit
-  *   : ѯۺ¶
-  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-                  *             DriverId   ID ͡FRUIDDEVICE IDϢ
-                                 SubId ¶ȵID
-                  *             Thres     ֵ
-  *   :  Thres     ֵ
-  *   ֵ  : OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ      :
-  *  1.       : 2014418
-  *           : 淫
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
- OSP_S32 MPAIntf_GetFruSingleTemperatureLimit(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SubId, THRES_S *Thres)
- {
-     MPA_CMD_INFO_S MpaCmd;
-     THRES_S TemperatureLimitBuf;
-     OSP_S32 RetVal = DRV_RETURN_ERROR;
-     DAL_MPA_ADDR_S *MpaAddress = NULL;
-     
-     if ((NULL == EnclAddr) || (NULL == Thres))
-     {
-         DRV_MPA_TRACE(DRV_LOG_WARN, 7, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Thres);
-         return DRV_RETURN_ERROR;
-     }
- 
-     MpaCmd.Cmd = DRV_CMD_TEMP_LIMIT_GET;
-     MpaCmd.FruId = DAL_FRU_ID(DriverId);
-     MpaCmd.DeviceId = (OSP_U8)SubId;
-     MpaCmd.BufLen = sizeof(THRES_S);
-     MpaCmd.SdrType = SENSOR_TEMP;
-     MpaCmd.WtRd = MPA_READ;
- 
-     OSAL_MemSet_s((OSP_U8 *)&TemperatureLimitBuf, sizeof(THRES_S), INVALID_VALUE8, sizeof(THRES_S));
-     RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&TemperatureLimitBuf);    
-     if (DRV_RETURN_OK != RetVal)
-     {
-         return RetVal;
-     }
- 
-     /*ȡ*/
-     MpaAddress = (DAL_MPA_ADDR_S *)EnclAddr;
- 
-     /*տMCUصݸʽз*/
-     /*v1 BMC*/    /*v1 SES*/
-     if (DRV_FRAMEMODEL_V1_END > MpaAddress->DevFrame)
-     {
-         Thres->OverCriticalAlarmThres = TemperatureLimitBuf.OverNonCriticalAlarmThres;
-         Thres->OverCriticalResumeThres = TemperatureLimitBuf.LowNonRecoverAlarmThres;
-         Thres->OverNonCriticalAlarmThres = TemperatureLimitBuf.OverNonRecoverAlarmThres;
-         Thres->OverNonCriticalResumeThres = TemperatureLimitBuf.OverCriticalAlarmThres;
-         Thres->OverNonRecoverAlarmThres = MPA_INVALID_TEMPERATURE;
-         Thres->OverNonRecoverResumeThres = MPA_INVALID_TEMPERATURE;
-         
-         Thres->LowNonRecoverAlarmThres = MPA_INVALID_TEMPERATURE;
-         Thres->LowNonRecoverResumeThres = MPA_INVALID_TEMPERATURE;
-         Thres->LowCriticalAlarmThres = TemperatureLimitBuf.OverNonCriticalResumeThres;
-         Thres->LowCriticalResumeThres = TemperatureLimitBuf.LowNonRecoverResumeThres;
-         Thres->LowNonCriticalAlarmThres = TemperatureLimitBuf.OverNonRecoverResumeThres;
-         Thres->LowNonCriticalResumeThres = TemperatureLimitBuf.OverCriticalResumeThres;
- 
-     }
-     /*V2͸*/
-     else
-     {
-         OSAL_MemCpy_s((OSP_U8 *)Thres, sizeof(THRES_S), (OSP_U8 *)&TemperatureLimitBuf, sizeof(THRES_S));
-     }
-     
-     return RetVal;
-     
- }
-
- /******************************************************************************
- *     : MPAIntf_SetTemperatureLimit
- *   : ¶
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Thres     ֵ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131016
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetTemperatureLimit(OSP_VOID *EnclAddr, OSP_U64 DriverId, THRES_S *Thres)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DRV_TEMPLIMIT_S TempLimitBuf;
-    DAL_MPA_ADDR_S *MpaAddress = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Thres))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 8, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Thres);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE_LIMIT(DRV_LOG_INFO, 9, 1, 20 * HZ, "MPA sets temperature limit, id(0x%llx), ocat(%d), ocrt(%d), oncat(%d), oncrt(%d), lncat(%d), lncrt(%d), devframe(0x%x).", 
-                                DriverId, Thres->OverCriticalAlarmThres, Thres->OverCriticalResumeThres,
-                                Thres->OverNonCriticalAlarmThres, Thres->OverNonCriticalResumeThres,
-                                Thres->LowNonCriticalAlarmThres, Thres->LowNonCriticalResumeThres, 
-                                ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-
-    MpaCmd.Cmd = DRV_CMD_TEMP_LIMIT_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    //MpaCmd.BufLen : V1V2-BMCBufLen
-    MpaCmd.SdrType = SENSOR_TEMP;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*ȡ*/
-    MpaAddress = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    /*տMCUصݸʽз*/
-    /*v1 BMC*/    /*v1 SES*/
-    if (DRV_FRAMEMODEL_V1_END > MpaAddress->DevFrame)
-    {
-        MpaCmd.BufLen = sizeof(DRV_TEMPLIMIT_S);
-        TempLimitBuf.ssMemAlmHighOver = Thres->OverNonCriticalAlarmThres;
-        TempLimitBuf.ssMemAlmHighResume = Thres->OverNonCriticalResumeThres;
-        TempLimitBuf.ssMemAlmLowOver = Thres->LowNonCriticalAlarmThres;
-        TempLimitBuf.ssMemAlmLowResume = Thres->LowNonCriticalResumeThres;
-        TempLimitBuf.ssMemCritcalHighOver = Thres->OverCriticalAlarmThres;
-        TempLimitBuf.ssMemCritcalHighResume = Thres->OverCriticalResumeThres;
-        TempLimitBuf.ssMemCritcalLowOver = Thres->LowCriticalAlarmThres;
-        TempLimitBuf.ssMemCritcalLowResume = Thres->LowCriticalResumeThres;
-        
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TempLimitBuf, (OSP_VOID *)NULL);
-
-    }
-    /*V2δʵ*/
-    else
-    {
-        MpaCmd.BufLen = sizeof(THRES_S);
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Thres, (OSP_VOID *)NULL);
-        //return DRV_RETURN_ERROR;
-    }
-
-    
-}
-
-
- 
-  /******************************************************************************
-  *     : MPAIntf_SetFruSingleTemperatureLimit
-  *   : þۺ¶
-  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-  *             DriverId   ID ͡FRUIDDEVICE IDϢ   
-                SubId ¶ȵID
-  *             Thres     ֵ
-  *   : 
-  *   ֵ  : OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ      :
-  *  1.       : 2014418
-  *           : 淫
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
- OSP_S32 MPAIntf_SetFruSingleTemperatureLimit(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SubId, THRES_S *Thres)
- {
-     MPA_CMD_INFO_S MpaCmd;
-     DRV_TEMPLIMIT_S TempLimitBuf;
-     DAL_MPA_ADDR_S *MpaAddress = NULL;
- 
-     if ((NULL == EnclAddr) || (NULL == Thres))
-     {
-         DRV_MPA_TRACE(DRV_LOG_WARN, 10, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Thres);
-         return DRV_RETURN_ERROR;
-     }
- 
-    DRV_MPA_TRACE_LIMIT(DRV_LOG_DBG, 11, 1, 20 * HZ, "MPA sets temperature limit, id(0x%llx), ocat(%d), ocrt(%d), oncat(%d), oncrt(%d), lncat(%d), lncrt(%d).",
-                                DriverId, Thres->OverCriticalAlarmThres, Thres->OverCriticalResumeThres,
-                                Thres->OverNonCriticalAlarmThres, Thres->OverNonCriticalResumeThres,
-                                Thres->LowNonCriticalAlarmThres, Thres->LowNonCriticalResumeThres);
- 
-     MpaCmd.Cmd = DRV_CMD_TEMP_LIMIT_SET;
-     MpaCmd.FruId = DAL_FRU_ID(DriverId);
-     MpaCmd.DeviceId = (OSP_U8)SubId;
-     //MpaCmd.BufLen : V1V2-BMCBufLen
-     MpaCmd.SdrType = SENSOR_TEMP;
-     MpaCmd.WtRd = MPA_WRITE;
- 
-     /*ȡ*/
-     MpaAddress = (DAL_MPA_ADDR_S *)EnclAddr;
- 
-     /*տMCUصݸʽз*/
-     /*v1 BMC*/    /*v1 SES*/
-     if (DRV_FRAMEMODEL_V1_END > MpaAddress->DevFrame)
-     {
-         MpaCmd.BufLen = sizeof(DRV_TEMPLIMIT_S);
-         TempLimitBuf.ssMemAlmHighOver = Thres->OverNonCriticalAlarmThres;
-         TempLimitBuf.ssMemAlmHighResume = Thres->OverNonCriticalResumeThres;
-         TempLimitBuf.ssMemAlmLowOver = Thres->LowNonCriticalAlarmThres;
-         TempLimitBuf.ssMemAlmLowResume = Thres->LowNonCriticalResumeThres;
-         TempLimitBuf.ssMemCritcalHighOver = Thres->OverCriticalAlarmThres;
-         TempLimitBuf.ssMemCritcalHighResume = Thres->OverCriticalResumeThres;
-         TempLimitBuf.ssMemCritcalLowOver = Thres->LowCriticalAlarmThres;
-         TempLimitBuf.ssMemCritcalLowResume = Thres->LowCriticalResumeThres;
-         
-         return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TempLimitBuf, (OSP_VOID *)NULL);
- 
-     }
-     /*V2δʵ*/
-     else
-     {
-         MpaCmd.BufLen = sizeof(THRES_S);
-         return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Thres, (OSP_VOID *)NULL);
-         //return DRV_RETURN_ERROR;
-     }
- 
-     
- }
-
- /******************************************************************************
- *     : MPAIntf_RestoreTemperatureThres
- *   : ָ¶
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014329
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_RestoreTemperatureThres(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*ԭdevӿڣҪ2Σʱչ*/
-    OSP_U8 DataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 12, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    (OSP_VOID)MpaAddr;
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    DRV_MPA_TRACE_LIMIT(DRV_LOG_DBG, 13, 1, 20 * HZ, "MPA restores temperature limit, id(0x%llx), host id(0x%x), scsi id(0x%x).", 
-                    DriverId, MpaAddr->DevAddr.ScsiAddr.uiHostId, MpaAddr->DevAddr.ScsiAddr.uiScsiId); 
-    
-    MpaCmd.Cmd = DRV_CMD_TEMP_LIMIT_RESUME;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DataIn);
-    //MpaCmd.SdrType = PRODUCE_INFO_MAC;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
-
-}
-
- 
-  /******************************************************************************
-  *     : MPAIntf_RestoreFruTemperatureThres
-  *   : ָFRUۺ¶
-  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-                  *             DriverId   ID ͡FRUIDDEVICE IDϢ   
-                                 SubId ¶ȵID
-  *   : 
-  *   ֵ  : OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ      :
-  *  1.       : 2014418
-  *           :shufan 204084
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
- OSP_S32 MPAIntf_RestoreFruTemperatureThres(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SubId)
- {
-     MPA_CMD_INFO_S MpaCmd;
-     /*ԭdevӿڣҪ2Σʱչ*/
-     OSP_U8 DataIn[2] = {0, 0};
-     DAL_MPA_ADDR_S *MpaAddr = NULL;
-     
-     if (NULL == EnclAddr)
-     {
-         DRV_MPA_TRACE(DRV_LOG_WARN, 14, "MPA finds the pointer is null(0x%p).", EnclAddr);
-         return DRV_RETURN_ERROR;
-     }
-
-    (OSP_VOID)MpaAddr;
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    DRV_MPA_TRACE_LIMIT(DRV_LOG_DBG, 15, 1, 20 * HZ, "MPA restores fru temperature limit, id(0x%llx), host id(0x%x), scsi id(0x%x).", 
-                     DriverId, MpaAddr->DevAddr.ScsiAddr.uiHostId, MpaAddr->DevAddr.ScsiAddr.uiScsiId); 
-     
-     MpaCmd.Cmd = DRV_CMD_TEMP_LIMIT_RESUME;
-     MpaCmd.FruId = DAL_FRU_ID(DriverId);
-     MpaCmd.DeviceId = (OSP_U8)SubId;
-     MpaCmd.BufLen = sizeof(DataIn);
-     //MpaCmd.SdrType = PRODUCE_INFO_MAC;
-     MpaCmd.WtRd = MPA_WRITE;
- 
-     return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
- 
- }
-
- /******************************************************************************
- *     : MPAIntf_GetTemperatureName
- *   : ѯ¶ȵ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Name  ¶
-               Length ¶Ƴ
- *   : Name  ¶
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131016
- *           : 淫
- *    ޸   : ɺ
- *  2.       : 2013116
- *           : ղı
- *    ޸   : ޸Ĳݣ񳤶Ⱥ͵ַݸtarget
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetTemperatureName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 NameBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    MPA_TABLE_PARA_S TableInfo;     
-    
-    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 16, "MPA finds the pointer is null(0x%p, 0x%p), length %d.", EnclAddr, Name, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_TEMP_NAME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = SENSOR_TEMP;
-    MpaCmd.WtRd = MPA_READ;
-
-    OSAL_MemSet_s(NameBuffer, sizeof(NameBuffer), 0, sizeof(NameBuffer));
-
-    TableInfo.TableLen = g_MpaConvTempIdTableLen;
-    TableInfo.IdInfoTable = g_MpaConvTempId;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)NameBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 17, "MPA GetTemperatureName return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), (OSP_U8 *)NameBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-    return RetVal;
-    
-}
-
- 
-  /******************************************************************************
-  *     : MPAIntf_GetFruSingleTemperatureName
-  *   : ѯFRUۺϵ¶ȵ
-  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-  *                              DriverId   ID ͡FRUIDDEVICE IDϢ   
-                                  SubId ۺ¶ȵID
-  *                             Name  ¶
-                                 Length ¶Ƴ
-  *   : Name  ¶
-  *   ֵ  : OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ      :
-  *  1.       : 2014418
-  *           : 淫
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
- OSP_S32 MPAIntf_GetFruSingleTemperatureName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SubId, OSP_S8 *Name, OSP_U32 Length)
- {
-     MPA_CMD_INFO_S MpaCmd;
-     OSP_S8 NameBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
-     OSP_S32 RetVal = DRV_RETURN_ERROR;
-     
-     if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-     {
-         DRV_MPA_TRACE(DRV_LOG_WARN, 18, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-         return RetVal;
-     }
- 
-     MpaCmd.Cmd = DRV_CMD_TEMP_NAME_GET;
-     MpaCmd.FruId = DAL_FRU_ID(DriverId);
-     MpaCmd.DeviceId = (OSP_U8)SubId;
-     MpaCmd.BufLen = DMI_NAME_LEN;
-     MpaCmd.SdrType = SENSOR_TEMP;
-     MpaCmd.WtRd = MPA_READ;
- 
-     OSAL_MemSet_s(NameBuffer, sizeof(NameBuffer), 0, sizeof(NameBuffer));
- 
- 
-     RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NameBuffer);
-     if (DRV_RETURN_OK != RetVal)
-     {
-         DRV_MPA_TRACE(DRV_LOG_DBG, 19, "MPA GetTemperatureName return error.");
-         return RetVal;
-     }
- 
-     /*DAL·ĳʵʳȡ̵ĳȿ*/
-     OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), (OSP_U8 *)NameBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-     return RetVal;
-     
- }
-
- /******************************************************************************
- *     : MPAIntf_GetTemperatureSubtype
- *   : ѯ¶ȵ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             subtype   ¶
- *   : subtype   ¶
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131016
- *           : 淫
- *    ޸   : ɺ
- *  2.       : 2013116
- *           : ղı
- *    ޸   : ޸Ĳݣ񳤶Ⱥ͵ַݸtarget
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetTemperatureSubtype(OSP_VOID *EnclAddr, OSP_U64 DriverId, TEMP_TYPE_E *Subtype)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    MPA_TABLE_PARA_S TableInfo;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Subtype))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 20, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Subtype);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    MpaCmd.Cmd = DRV_CMD_TEMP_SUBTYPE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SENSOR_TEMP;
-    MpaCmd.WtRd = MPA_READ;
-
-    TableInfo.TableLen = g_MpaConvTempIdTableLen;
-    TableInfo.IdInfoTable = g_MpaConvTempId;
-    TableInfo.DevFrame = MpaAddr->DevFrame;      /* V1ѿʹ*/
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)Subtype);
-}
-
- 
- /******************************************************************************
- *     : MPAIntf_GetFruAllTemperatureSubtype
- *   : ѯFRUۺ¶ȵ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *                              DriverId   ID ͡FRUIDDEVICE IDϢ   
- *                              subtype   ¶
-                                 Length 
- *   : subtype   ¶
- *   ֵ  :    OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014418
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
- OSP_S32 MPAIntf_GetFruAllTemperatureSubtype(OSP_VOID *EnclAddr, OSP_U64 DriverId, TEMP_TYPE_E *Subtype, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 BmcDataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Subtype))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 21, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Subtype);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    MpaCmd.Cmd = DRV_CMD_FRU_TEMP_TYPE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = (OSP_U16)Length;
-    MpaCmd.SdrType = SENSOR_TEMP;
-    MpaCmd.WtRd = MPA_READ;
-
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        BmcDataIn[0] = sizeof(OSP_U8);
-        BmcDataIn[1] = (OSP_U8)(Length / sizeof(TEMP_TYPE_E));
-        
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Subtype);
-    }
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Subtype);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetTemperatureState
- *   : ѯ¶ȵ״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Status   ¶״̬ 
- *   : Status   ¶״̬ 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131016
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetTemperatureState(OSP_VOID *EnclAddr, OSP_U64 DriverId, TEMP_STAT_E *Status)
-{
-/*20Ϊ¶ȱ׼*/
-#define NORMAL_TEMPERTURE 200
-    MPA_CMD_INFO_S MpaCmd;
-    MPA_ALARM_TABLE_S TableInfo;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_S16 Temperature = NORMAL_TEMPERTURE;
-
-    if ((NULL == EnclAddr) || (NULL == Status))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 22, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
-        return DRV_RETURN_ERROR;
-    }
-    
-    OSAL_MemSet_s((OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S), INVALID_VALUE8, sizeof(MPA_CMD_INFO_S));
-    MpaCmd.Cmd = DRV_CMD_TEMP_STATE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    /*Сϵͳֻ1ֽ*/
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SENSOR_TEMP;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /* BEGIN: Added by yinhuaqiang 00305130, 2015/4/15ⵥ:DTS2015041310766  */
-    /* DMIڲѯͼϵSAS˿ʱʹôвλϢFruIdDeviceId̿һĿƿ
-       MPASESĻʹô˲λϢ */
-    MpaCmd.FruId = MPA_ConvertFruId(EnclAddr, MpaCmd.FruId);
-    /* END:   Added by yinhuaqiang 00305130, 2015/4/15 ⵥ:DTS2015041310766  */
-    
-    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaCmd, sizeof(MPA_CMD_INFO_S), (OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S));
-    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaAddr, sizeof(DAL_MPA_ADDR_S), (OSP_U8 *)EnclAddr, sizeof(DAL_MPA_ADDR_S));
-    TableInfo.CommonTable.IdInfoTable = g_MpaTempStateId;
-    TableInfo.CommonTable.TableLen = g_MpaTempStateTableLen;
-
-    /*Ϣtarget*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)Status);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 23, "MPA GetTemperatureState Fail 0x%x.", RetVal);
-        return RetVal;
-    }
-
-    /*v1sesbmcһ澯ֵΪ1Ҫȷһ»һ*/
-    if ((1 == *Status) && (DRV_FRAMEMODEL_V1_END > TableInfo.MpaAddr.DevFrame))
-    {
-        RetVal = MPAIntf_GetTemperature(EnclAddr, DriverId, &Temperature);
-        if (DRV_RETURN_OK != RetVal)
-        {
-            DRV_MPA_TRACE(DRV_LOG_DBG, 24, "MPA GetTemperatureState TempVal Fail 0x%x.", RetVal);
-            return RetVal;
-        }
-        
-       /*20ȣ˵Ǹ¸澯ǵ¸澯*/
-        if(NORMAL_TEMPERTURE < Temperature)
-        {
-            *Status = DAL_TEMPERATURE_HIGH;
-        }
-        else
-        {
-            *Status = DAL_TEMPERATURE_LOW;
-        }
-    }
-    /*2Ͽ¸澯*/
-    else if (2 == *Status)
-    {
-        *Status = DAL_TEMPERATURE_HIGH_CRITICAL;
-    }
-
-    return RetVal;
-    
-}
-
- 
-  
-  /******************************************************************************
-  *     : MPAIntf_GetFruAllTemperatureState
-  *   : ѯFRUۺ¶ȵ״̬
-  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-  *                              DriverId   ID ͡FRUIDDEVICE IDϢ   
-  *                              subtype   ¶
-                                  Length
-  *   : subtype   ¶
-  *   ֵ  :    OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ      :
-  *  1.       : 2014418
-  *           : 淫
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
-OSP_S32 MPAIntf_GetFruAllTemperatureState(OSP_VOID *EnclAddr, OSP_U64 DriverId, TEMP_STAT_E *Status, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 BmcDataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Status))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 25, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    MpaCmd.Cmd = DRV_CMD_FRU_TEMP_STATUS_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = (OSP_U16)Length;
-    MpaCmd.SdrType = SENSOR_TEMP;
-    MpaCmd.WtRd = MPA_READ;
-
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        BmcDataIn[0] = sizeof(OSP_U8);
-        BmcDataIn[1] = (OSP_U8)(Length / sizeof(TEMP_STAT_E));
-        
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Status);
-    }
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status);
- 
-}
-
- /******************************************************************************
- *     : MPAIntf_SetVoltage
- *   : õѹ
- *   : EnclAddr  
- *             DriverId  
- *             Value     
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2016516
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetVoltage(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 Value)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 2, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-    
-    DRV_MPA_TRACE_LIMIT(DRV_LOG_INFO, 3, 1, 20 * HZ, "MPA sets voltage, id(0x%llx), value(%u), devframe(0x%x).", 
-                        DriverId, Value, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-    
-    MpaCmd.Cmd = DRV_CMD_VOLTAGE_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);    
-    MpaCmd.SdrType = SENSOR_VOLT;
-    MpaCmd.WtRd = MPA_WRITE;
-    MpaCmd.BufLen = sizeof(OSP_U16);
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)(&Value), (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetVoltage
- *   : ѯѹ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             Voltage      ѹֵ
- *   :  Voltage      ѹֵ        
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetVoltage(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S16 *Voltage)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Voltage))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 26, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Voltage);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_VOLTAGE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_S16);
-    MpaCmd.SdrType = SENSOR_VOLT;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*ʹtarget*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)EnclAddr, (OSP_VOID *)Voltage);
-
-}
-
- 
-  /******************************************************************************
-  *     : MPAIntf_GetFruAllVoltage
-  *   : ѯFRUۺϵѹ
-  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-                  *             DriverId        ID ͡FRUIDDEVICE IDϢ   
-                  *             Voltage      ѹֵ
-  *   :  Voltage      ѹֵ        
-  *   ֵ  : OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ      :
-  *  1.       : 2014418
-  *           : 淫
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
-OSP_S32 MPAIntf_GetFruAllVoltage(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S16 *Voltage, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 BmcDataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Voltage))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 27, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Voltage);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    MpaCmd.Cmd = DRV_CMD_FRU_VOLTAGE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = (OSP_U16)Length;
-    MpaCmd.SdrType = SENSOR_VOLT;
-    MpaCmd.WtRd = MPA_READ;
-
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        BmcDataIn[0] = sizeof(OSP_U8);
-        BmcDataIn[1] = (OSP_U8)(Length / sizeof(OSP_U16));
-
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Voltage);
-    }
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Voltage);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetVoltageThreshold
- *   : ѯѹֵ
- *   : EnclAddr  :ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId  :ID ͡FRUIDDEVICE IDϢ
- *             
- *   : VoltageThreshold   :ѹֵṹָ
- *   ֵ  : OSP_S32   :ɹ/ʧ
- * ˵  : 
- *             1ѹ/¶ һ޽ṹ
- *             2V1 BMCѹ޴ڻزޣ
- *             3SESѹ޲֧֣
- *             4V2 BMCѹֱ͸
- *
- * ޸ʷ      :
- *  1.       : 20131018
- *           : zhanwenbin 90003961
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetVoltageThreshold(OSP_VOID *EnclAddr, OSP_U64 DriverId, THRES_S *VoltageThreshold)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    MPA_CMD_INFO_S MpaCmd;
-    THRES_S VoltageThresholdBuf;
-    DAL_MPA_ADDR_S *MpaAddress = NULL;
-
-
-    if ((NULL == EnclAddr) || (NULL == VoltageThreshold))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 28, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, VoltageThreshold);
-        return DRV_RETURN_ERROR;
-    }
-
-    /*ȡ*/
-    MpaAddress = (DAL_MPA_ADDR_S *)EnclAddr;
-    
-    /*SESѹ޲֧*/
-    if ((DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddress->DevFrame) 
-        && (DRV_FRAMEMODEL_CTRL_BMC < MpaAddress->DevFrame))
-    {
-        return RETURN_INVALID;
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_VOLTAGE_LIMIT_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(THRES_S);
-    MpaCmd.SdrType = SENSOR_VOLT;
-    MpaCmd.WtRd = MPA_READ;
-
-    OSAL_MemSet_s((OSP_U8 *)&VoltageThresholdBuf, sizeof(THRES_S), INVALID_VALUE8, sizeof(THRES_S));
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&VoltageThresholdBuf);
-
-    if (DRV_RETURN_OK != RetVal)
-    {
-        return RetVal;
-    }
-
-    /*տMCUصݸʽз*/
-    /*v1 BMCȸΪ0.01*/
-    if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddress->DevFrame)
-    {
-        VoltageThreshold->OverNonCriticalAlarmThres = (OSP_S16)(VoltageThresholdBuf.OverNonRecoverAlarmThres * MPA_PRECISION_10);
-        VoltageThreshold->LowNonCriticalAlarmThres = (OSP_S16)(VoltageThresholdBuf.OverNonRecoverResumeThres * MPA_PRECISION_10);
-    }
-    /*V2͸*/
-    else
-    {
-        OSAL_MemCpy_s((OSP_U8 *)VoltageThreshold, sizeof(THRES_S), (OSP_U8 *)&VoltageThresholdBuf, sizeof(THRES_S));
-    }
-    
-    return RetVal;
-}
-
- 
-  /******************************************************************************
-  *     : MPAIntf_GetFruSingleVoltageThreshold
-  *   : ѯFRUۺϵѹֵ
-  *   : EnclAddr  :ϲ·ĵַϢmcutype,scsiַframetype
-                  *             DriverId  :ID ͡FRUIDDEVICE IDϢ
-  *                             SubId ѹID
-                                  VoltageThreshold   :ѹֵṹָ
-  *   : VoltageThreshold   :ѹֵṹָ
-  *   ֵ  : OSP_S32   :ɹ/ʧ
-  * ˵  : 
-  *
-  * ޸ʷ      :
-  *  1.       : 2014418
-  *           : shufan 204084
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
- OSP_S32 MPAIntf_GetFruSingleVoltageThreshold(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SubId, THRES_S *VoltageThreshold)
- {
-     OSP_S32 RetVal = DRV_RETURN_ERROR;
-     MPA_CMD_INFO_S MpaCmd;
-     THRES_S VoltageThresholdBuf;
-     DAL_MPA_ADDR_S *MpaAddress = NULL;
- 
- 
-     if ((NULL == EnclAddr) || (NULL == VoltageThreshold))
-     {
-         DRV_MPA_TRACE(DRV_LOG_WARN, 29, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, VoltageThreshold);
-         return DRV_RETURN_ERROR;
-     }
- 
-     /*ȡ*/
-     MpaAddress = (DAL_MPA_ADDR_S *)EnclAddr;
-     
-     /*SESѹ޲֧*/
-     if ((DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddress->DevFrame) 
-         && (DRV_FRAMEMODEL_CTRL_BMC < MpaAddress->DevFrame))
-     {
-         return RETURN_INVALID;
-     }
-     
-     MpaCmd.Cmd = DRV_CMD_VOLTAGE_LIMIT_GET;
-     MpaCmd.FruId = DAL_FRU_ID(DriverId);
-     MpaCmd.DeviceId = (OSP_U8)SubId;
-     MpaCmd.BufLen = sizeof(THRES_S);
-     MpaCmd.SdrType = SENSOR_VOLT;
-     MpaCmd.WtRd = MPA_READ;
- 
-     OSAL_MemSet_s((OSP_U8 *)&VoltageThresholdBuf, sizeof(THRES_S), INVALID_VALUE8, sizeof(THRES_S));
-     RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&VoltageThresholdBuf);
- 
-     if (DRV_RETURN_OK != RetVal)
-     {
-         return RetVal;
-     }
- 
-     /*տMCUصݸʽз*/
-     /*v1 BMCȸΪ0.01*/
-     if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddress->DevFrame)
-     {
-         VoltageThreshold->OverNonCriticalAlarmThres = (OSP_S16)(VoltageThresholdBuf.OverNonRecoverAlarmThres * MPA_PRECISION_10);
-         VoltageThreshold->LowNonCriticalAlarmThres = (OSP_S16)(VoltageThresholdBuf.OverNonRecoverResumeThres * MPA_PRECISION_10);
-     }
-     /*V2͸*/
-     else
-     {
-         OSAL_MemCpy_s((OSP_U8 *)VoltageThreshold, sizeof(THRES_S), (OSP_U8 *)&VoltageThresholdBuf, sizeof(THRES_S));
-     }
-     
-     return RetVal;
- }
-
- /******************************************************************************
- *     : MPAIntf_SetVoltageThreshold
- *   : õѹֵ
- *   : EnclAddr   :ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId   :ID ͡FRUIDDEVICE IDϢ    
- *             VoltageThreshold  :ѹֵṹָ
- *   : 
- *   ֵ  : OSP_S32 :ɹ/ʧ
- * ˵  : 
- *             1ѹ/¶ һ޽ṹ
- *             2V1 BMCѹ޴ڻزޣ
- *             3V1 SESѹ޻ز
- *             4V2 ѹֱ͸
- * 
- * ޸ʷ      :
- *  1.       : 20131018
- *           : zhanwenbin 90003961
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetVoltageThreshold(OSP_VOID *EnclAddr, OSP_U64 DriverId, THRES_S *VoltageThreshold)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    THRES_S VoltageThresholdBuf;
-    DAL_MPA_ADDR_S *MpaAddress = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == VoltageThreshold))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 30, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, VoltageThreshold);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE_LIMIT(DRV_LOG_INFO, 31, 1, 20 * HZ, "MPA sets voltage limit, id(0x%llx), devframe(0x%x).", DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-    
-    MpaCmd.Cmd = DRV_CMD_VOLTAGE_LIMIT_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(THRES_S);
-    MpaCmd.SdrType = SENSOR_VOLT;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*ȡ*/
-    MpaAddress = (DAL_MPA_ADDR_S *)EnclAddr;
-    
-    /*տMCUصݸʽз*/
-    /*v1 BMC*/
-    if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddress->DevFrame)
-    {
-        VoltageThresholdBuf.OverNonCriticalAlarmThres = VoltageThreshold->OverNonRecoverAlarmThres;
-        VoltageThresholdBuf.LowNonCriticalAlarmThres = VoltageThreshold->OverNonRecoverResumeThres;
-        VoltageThresholdBuf.OverNonCriticalResumeThres = VoltageThreshold->OverCriticalAlarmThres;
-        VoltageThresholdBuf.LowNonCriticalResumeThres = VoltageThreshold->OverCriticalResumeThres;
-    }
-    /*v1 SES*/
-    else if ((DRV_FRAMEMODEL_V1_END > MpaAddress->DevFrame) 
-        && (DRV_FRAMEMODEL_CTRL_BMC < MpaAddress->DevFrame))
-    {
-        VoltageThresholdBuf.OverNonCriticalAlarmThres = VoltageThreshold->OverNonRecoverAlarmThres;
-        VoltageThresholdBuf.LowNonCriticalAlarmThres = VoltageThreshold->OverNonRecoverResumeThres;
-    }
-    /* V2 BMC*/
-    else if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddress->DevFrame)
-        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddress->DevFrame))
-    {
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)VoltageThreshold, (OSP_VOID *)NULL);
-    }
-    /*V2͸*/
-    else
-    {
-        OSAL_MemCpy_s((OSP_U8 *)&VoltageThresholdBuf, sizeof(THRES_S), (OSP_U8 *)VoltageThreshold, sizeof(THRES_S));
-    }
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&VoltageThresholdBuf, (OSP_VOID *)NULL);
-}
-
-
- 
-  /******************************************************************************
-  *     : MPAIntf_SetFruSingleVoltageThreshold
-  *   : FRUۺϵѹֵ
-  *   : EnclAddr   :ϲ·ĵַϢmcutype,scsiַframetype          
-                  *             DriverId   :ID ͡FRUIDDEVICE IDϢ   
-                                SubId :ѹID
-  *             VoltageThreshold  :ѹֵṹָ
-  *   : 
-  *   ֵ  : OSP_S32 :ɹ/ʧ
-  * ˵  : 
-  *             1ѹ/¶ һ޽ṹ
-  *             2V1 BMCѹ޴ڻزޣ
-  *             3V1 SESѹ޻ز
-  *             4V2 ѹֱ͸
-  * 
-  * ޸ʷ      :
-  *  1.       : 20131018
-  *           : zhanwenbin 90003961
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
- OSP_S32 MPAIntf_SetFruSingleVoltageThreshold(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SubId, THRES_S *VoltageThreshold)
- {
-     MPA_CMD_INFO_S MpaCmd;
-     THRES_S VoltageThresholdBuf;
-     DAL_MPA_ADDR_S *MpaAddress = NULL;
- 
-     if ((NULL == EnclAddr) || (NULL == VoltageThreshold))
-     {
-         DRV_MPA_TRACE(DRV_LOG_WARN, 32, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, VoltageThreshold);
-         return DRV_RETURN_ERROR;
-     }
- 
-     DRV_MPA_TRACE_LIMIT(DRV_LOG_DBG, 33, 1, 20 * HZ, "MPA sets voltage limit, id(0x%llx).", DriverId);
-     
-     MpaCmd.Cmd = DRV_CMD_VOLTAGE_LIMIT_SET;
-     MpaCmd.FruId = DAL_FRU_ID(DriverId);
-     MpaCmd.DeviceId = (OSP_U8)SubId;
-     MpaCmd.BufLen = sizeof(THRES_S);
-     MpaCmd.SdrType = SENSOR_VOLT;
-     MpaCmd.WtRd = MPA_WRITE;
- 
-     /*ȡ*/
-     MpaAddress = (DAL_MPA_ADDR_S *)EnclAddr;
-     
-     /*տMCUصݸʽз*/
-     /*v1 BMC*/
-     if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddress->DevFrame)
-     {
-         VoltageThresholdBuf.OverNonCriticalAlarmThres = VoltageThreshold->OverNonRecoverAlarmThres;
-         VoltageThresholdBuf.LowNonCriticalAlarmThres = VoltageThreshold->OverNonRecoverResumeThres;
-         VoltageThresholdBuf.OverNonCriticalResumeThres = VoltageThreshold->OverCriticalAlarmThres;
-         VoltageThresholdBuf.LowNonCriticalResumeThres = VoltageThreshold->OverCriticalResumeThres;
-     }
-     /*v1 SES*/
-     else if ((DRV_FRAMEMODEL_V1_END > MpaAddress->DevFrame) 
-         && (DRV_FRAMEMODEL_CTRL_BMC < MpaAddress->DevFrame))
-     {
-         VoltageThresholdBuf.OverNonCriticalAlarmThres = VoltageThreshold->OverNonRecoverAlarmThres;
-         VoltageThresholdBuf.LowNonCriticalAlarmThres = VoltageThreshold->OverNonRecoverResumeThres;
-     }
-     /* V2 BMC*/
-     else if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddress->DevFrame)
-         && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddress->DevFrame))
-     {
-         return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)VoltageThreshold, (OSP_VOID *)NULL);
-     }
-     /*V2͸*/
-     else
-     {
-         OSAL_MemCpy_s((OSP_U8 *)&VoltageThresholdBuf, sizeof(THRES_S), (OSP_U8 *)VoltageThreshold, sizeof(THRES_S));
-     }
- 
-     return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&VoltageThresholdBuf, (OSP_VOID *)NULL);
- }
-
- /******************************************************************************
- *     : MPAIntf_GetVoltageName
- *   : ѯѹ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Name  ѹ
- *             Length ѹƳ       
- *   : Name  ѹ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013115
- *           : zhanwenbin 90003961
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetVoltageName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 NameBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    MPA_TABLE_PARA_S TableInfo;
-    
-    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 34, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_VOLTAGE_NAME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = SENSOR_VOLT;
-    MpaCmd.WtRd = MPA_READ;
-
-    TableInfo.TableLen = g_MpaConvVoltIdTableLen;
-    TableInfo.IdInfoTable = g_MpaConvVoltId;
-
-    OSAL_MemSet_s(NameBuffer, sizeof(NameBuffer), 0, sizeof(NameBuffer));
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)NameBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 35, "MPA GetTemperatureName return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Name, DMI_NAME_LEN, (OSP_U8 *)NameBuffer, DMI_NAME_LEN);
-   
-    return RetVal;    
-}
-
-
- 
-  /******************************************************************************
-  *     : MPAIntf_GetFruSingleVoltageName
-  *   : ѯFRUۺϵѹ
-  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-                  *             DriverId   ID ͡FRUIDDEVICE IDϢ   
-                                 SubId ѹID
-                  *             Name  ѹ
-                  *             Length ѹƳ       
-  *   : Name  ѹ
-  *   ֵ  : OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ      :
-  *  1.       : 2014418
-  *           : shufan 204084
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
- OSP_S32 MPAIntf_GetFruSingleVoltageName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SubId, OSP_S8 *Name, OSP_U32 Length)
- {
-     MPA_CMD_INFO_S MpaCmd;
-     OSP_S8 NameBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
-     OSP_S32 RetVal = DRV_RETURN_ERROR;
-     
-     if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-     {
-         DRV_MPA_TRACE(DRV_LOG_WARN, 36, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-         return RetVal;
-     }
- 
-     MpaCmd.Cmd = DRV_CMD_VOLTAGE_NAME_GET;
-     MpaCmd.FruId = DAL_FRU_ID(DriverId);
-     MpaCmd.DeviceId = (OSP_U8)SubId;
-     MpaCmd.BufLen = DMI_NAME_LEN;
-     MpaCmd.SdrType = SENSOR_VOLT;
-     MpaCmd.WtRd = MPA_READ;
- 
-     RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NameBuffer);
-     if (DRV_RETURN_OK != RetVal)
-     {
-         DRV_MPA_TRACE(DRV_LOG_DBG, 37, "MPA GetTemperatureName return error.");
-         return RetVal;
-     }
- 
-     /*DAL·ĳȿ*/
-     OSAL_MemCpy_s((OSP_U8 *)Name, DMI_NAME_LEN, (OSP_U8 *)NameBuffer, DMI_NAME_LEN);
-    
-     return RetVal;    
- }
-
- /******************************************************************************
- *     : MPAIntf_GetVoltageSubtype
- *   : ȡѹͽӿں
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             subtype  ѹ   
- *   : subtype  ѹ 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013115
- *           : zhanwenbin 90003961
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetVoltageSubtype(OSP_VOID *EnclAddr, OSP_U64 DriverId, VOLTAGE_TYPE_E *subtype)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    MPA_TABLE_PARA_S TableInfo;    
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == subtype))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 38, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, subtype);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    MpaCmd.Cmd = DRV_CMD_VOLTAGE_SUBTYPE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SENSOR_VOLT;
-    MpaCmd.WtRd = MPA_READ;
-
-    TableInfo.TableLen = g_MpaConvVoltIdTableLen;
-    TableInfo.IdInfoTable = g_MpaConvVoltId;
-    TableInfo.DevFrame = MpaAddr->DevFrame;      /* V1ѿʹ*/
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)subtype);
-
-}
-
-
- 
-  /******************************************************************************
-  *     : MPAIntf_GetFruAllVoltageSubtype
-  *   : ȡFRUۺϵѹͽӿں
-  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-                  *             DriverId   ID ͡FRUIDDEVICE IDϢ   
-                  *             subtype  ѹ   
-                                Length 
-  *   : subtype  ѹ 
-  *   ֵ  : OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ      :
-  *  1.       : 2014418
-  *           : shufan 204084 
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
-OSP_S32 MPAIntf_GetFruAllVoltageSubtype(OSP_VOID *EnclAddr, OSP_U64 DriverId, VOLTAGE_TYPE_E *subtype, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 BmcDataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == subtype))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 39, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, subtype);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    MpaCmd.Cmd = DRV_CMD_FRU_VOLTAGE_TYPE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = (OSP_U16)Length;
-    MpaCmd.SdrType = SENSOR_VOLT;
-    MpaCmd.WtRd = MPA_READ;
-
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        BmcDataIn[0] = sizeof(OSP_U8);
-        BmcDataIn[1] = (OSP_U8)(Length / sizeof(VOLTAGE_TYPE_E));
-        
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)subtype);
-    }
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)subtype);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetVoltageState
- *   : ȡѹ״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Status   ѹ״̬ 
- *   : Status   ѹ״̬ 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013124
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetVoltageState(OSP_VOID *EnclAddr, OSP_U64 DriverId, VOLT_STAT_E *Status)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    MPA_ALARM_TABLE_S TableInfo;
-
-    if ((NULL == EnclAddr) || (NULL == Status))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 40, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
-        return DRV_RETURN_ERROR;
-    }
-    
-    OSAL_MemSet_s((OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S), INVALID_VALUE8, sizeof(MPA_CMD_INFO_S));
-    MpaCmd.Cmd = DRV_CMD_VOLT_STATE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    /*Сϵͳֻ1ֽ*/
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SENSOR_VOLT;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /* BEGIN: Added by yinhuaqiang 00305130, 2015/4/15ⵥ:DTS2015041310766  */
-    /* DMIڲѯͼϵSAS˿ʱʹôвλϢFruIdDeviceId̿һĿƿ
-       MPASESĻʹô˲λϢ */
-    MpaCmd.FruId = MPA_ConvertFruId(EnclAddr, MpaCmd.FruId);
-    /* END:   Added by yinhuaqiang 00305130, 2015/4/15 ⵥ:DTS2015041310766  */
-
-    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaCmd, sizeof(MPA_CMD_INFO_S), (OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S));
-    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaAddr, sizeof(DAL_MPA_ADDR_S), (OSP_U8 *)EnclAddr, sizeof(DAL_MPA_ADDR_S));
-    TableInfo.CommonTable.IdInfoTable = g_MpaVoltStateId;
-    TableInfo.CommonTable.TableLen = g_MpaVoltStateTableLen;
-
-    /*Ϣtarget*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)Status);
-}
-
- 
- 
-  /******************************************************************************
-  *     : MPAIntf_GetFruAllVoltageState
-  *   : ȡFRUۺϵѹ״̬
-  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-                  *             DriverId   ID ͡FRUIDDEVICE IDϢ   
-                  *             Status   ѹ״̬ 
-  *   : Status   ѹ״̬ 
-  *   ֵ  : OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ      :
-  *  1.       : 2014418
-  *           :shufan 204084
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
-OSP_S32 MPAIntf_GetFruAllVoltageState(OSP_VOID *EnclAddr, OSP_U64 DriverId, VOLT_STAT_E *Status, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 BmcDataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Status))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 41, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    MpaCmd.Cmd = DRV_CMD_FRU_VOLTAGE_STATUS_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = (OSP_U16)Length;
-    MpaCmd.SdrType = SENSOR_VOLT;
-    MpaCmd.WtRd = MPA_READ;
-
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        BmcDataIn[0] = sizeof(OSP_U8);
-        BmcDataIn[1] = (OSP_U8)(Length / sizeof(VOLT_STAT_E));
-
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Status);
-    }
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetElectronicLabel
- *   : ѯӱǩ
- *   : EnclAddr  豸ַϢ
- *             DriverId        豸idϢ
- *             Elabel  ӱǩ
- *             Length  ӱǩ
- *   : Elabel  ӱǩ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetElectronicLabel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Elabel, OSP_U32 Length)
-{
-
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 *ElabelBuffer = NULL;/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_U32 FruId = DAL_FRU_ID(DriverId);
-        
-    if ((NULL == EnclAddr) || (NULL == Elabel) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 42, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Elabel, Length);
-        return RetVal;
-    }
-  
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    /* BEGIN: Added by shufan 00204084, 2014/8/17  ⵥ:c02, ޸ԭ:12g hds */
-    if (TRUE == MPA_If12gHdsCtrlBoardId(MpaAddr->DevFrame, FruId))
-    {
-        return MPA_Get12gHdsCommonInfo((DAL_MPA_ADDR_S *)EnclAddr,
-                                        DriverId,//עu64 driver id
-                                        SAS_12G_CMD_GET_CTRL_ELABLE,
-                                        (OSP_S8 *)Elabel, 
-                                        (OSP_U16)min(DRV_ELABLE_LEN, (OSP_S32)Length));
-    }
-    /* END: Added by shufan 00204084, 2014/8/17  ⵥ:c02 */
-
-    MpaCmd.Cmd = DRV_CMD_ELABEL_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_ELABLE_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_RAM_ELABEL;
-    MpaCmd.WtRd = MPA_READ;
-
-    ElabelBuffer = (OSP_S8 *)MPA_Malloc(DRV_ELABLE_LEN);
-    if(NULL == ElabelBuffer)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 43, "MPA malloc memory failed.");
-        return RetVal;
-    }
-    OSAL_MemSet_s(ElabelBuffer, DRV_ELABLE_LEN, 0, DRV_ELABLE_LEN);
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)EnclAddr, (OSP_VOID *)ElabelBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 44, "MPA GetElectronicLabel return error %d.", RetVal);
-        MPA_Free(ElabelBuffer);
-        ElabelBuffer = NULL;
-        return RetVal;
-    }
-    
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Elabel, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length), (OSP_U8 *)ElabelBuffer, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length));
-    
-    MPA_Free(ElabelBuffer);
-    ElabelBuffer = NULL;
-    return RetVal;
-    
-}
-
-/******************************************************************************
-*     : MPAIntf_SetCtrlBoardE2ElectronicLabel
-*   : ÿưӱǩ
-*   : EnclAddr  豸ַϢ
-*             DriverId        豸idϢ
-*             Elabel[DRV_ELABLE_LEN]  ӱǩ
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 20141028
-*           : c00221000
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetCtrlBoardE2ElectronicLabel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Elabel, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 *ElabelBuffer = NULL;/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Elabel) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "Mpa finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Elabel, Length);
-        return DRV_RETURN_ERROR;
-    }
-    
-    ElabelBuffer = (OSP_S8 *)MPA_Malloc(DRV_ELABLE_LEN);
-    if(NULL == ElabelBuffer)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "Mpa malloc memory failed.");
-        return DRV_RETURN_ERROR;
-    }
-    OSAL_MemSet_s(ElabelBuffer, DRV_ELABLE_LEN, 0, DRV_ELABLE_LEN);
-    OSAL_MemCpy_s((OSP_U8 *)ElabelBuffer, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length), (OSP_U8 *)Elabel, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length));
-
-    MpaCmd.Cmd = DRV_CMD_SET_CTRL_BOARD_ELABLE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_ELABLE_LEN;
-    MpaCmd.SdrType =  SDRTYPE_CTRL_BOARD_EEPROM_ELABLE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)ElabelBuffer, (OSP_VOID *)EnclAddr);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 344, "MPA interface returns error(%d)", RetVal);
-    }
-    
-    MPA_Free(ElabelBuffer);
-    ElabelBuffer = NULL;
-
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_GetCtrlBoardMemoryElectronicLabel
- *   : ѯưڴӱǩ
- *   : EnclAddr  豸ַϢ
- *             DriverId        豸idϢ
- *             Elabel  ӱǩ
- *             Length  ӱǩ
- *   : Elabel  ӱǩ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20141028
- *           : c00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetCtrlBoardMemoryElectronicLabel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Elabel, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 *ElabelBuffer = NULL;/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Elabel) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "Mpa finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Elabel, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_CTRL_BOARD_MEMORY_ELABLE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_ELABLE_LEN;
-    MpaCmd.SdrType = SDRTYPE_CTRL_BOARD_MEMORY_ELABLE;
-    MpaCmd.WtRd = MPA_READ;
-
-    ElabelBuffer = (OSP_S8 *)MPA_Malloc(DRV_ELABLE_LEN);
-    if(NULL == ElabelBuffer)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "Mpa malloc memory failed.");
-        return RetVal;
-    }
-    OSAL_MemSet_s(ElabelBuffer, DRV_ELABLE_LEN, 0, DRV_ELABLE_LEN);
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)EnclAddr, (OSP_VOID *)ElabelBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 344, "MPA interface returns error(%d)", RetVal);
-        MPA_Free(ElabelBuffer);
-        ElabelBuffer = NULL;
-        return RetVal;
-    }
-    
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Elabel, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length), (OSP_U8 *)ElabelBuffer, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length));
-    
-    MPA_Free(ElabelBuffer);
-    ElabelBuffer = NULL;
-
-    return RetVal;
-}
- 
- /******************************************************************************
- *     : MPAIntf_GetCtrlBoardE2ElectronicLabel
- *   : ѯưeepromӱǩ
- *   : EnclAddr  豸ַϢ
- *             DriverId        豸idϢ
- *             Elabel  ӱǩ
- *             Length  ӱǩ
- *   : Elabel  ӱǩ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20141028
- *           : c00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetCtrlBoardE2ElectronicLabel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Elabel, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 *ElabelBuffer = NULL;/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Elabel) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "Mpa finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Elabel, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_CTRL_BOARD_EEPROM_ELABLE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_ELABLE_LEN;
-    MpaCmd.SdrType = SDRTYPE_CTRL_BOARD_EEPROM_ELABLE;
-    MpaCmd.WtRd = MPA_READ;
-
-    ElabelBuffer = (OSP_S8 *)MPA_Malloc(DRV_ELABLE_LEN);
-    if(NULL == ElabelBuffer)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "Mpa malloc memory failed.");
-        return RetVal;
-    }
-    OSAL_MemSet_s(ElabelBuffer, DRV_ELABLE_LEN, 0, DRV_ELABLE_LEN);
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)EnclAddr, (OSP_VOID *)ElabelBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 344, "MPA interface returns error(%d)", RetVal);
-        MPA_Free(ElabelBuffer);
-        ElabelBuffer = NULL;
-        return RetVal;
-    }
-    
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Elabel, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length), (OSP_U8 *)ElabelBuffer, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length));
-    
-    MPA_Free(ElabelBuffer);
-    ElabelBuffer = NULL;
-
-    return RetVal;
-}
-
-
- /******************************************************************************
- *     : MPAIntf_ClearBayconfig
- *   : bayconfig
- *   : EnclAddr  豸ַϢ
- *             DriverId        豸idϢ
- *             Flag  clear־
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.             : 201499
- *                  : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_ClearBayconfig(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Flag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "para error,pointer %p", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_CLEAR_BAYCONFIG;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPE_CLEAR_BAYCONFIG;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Flag, (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBayconfig
- *   : Bayconfig
- *   : EnclAddr  豸ַϢ
- *             DriverId        豸idϢ
- *             Bayconfig  Bayconfig
- *             Length  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.             : 201499
- *                  : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBayconfig(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Bayconfig, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 *TmpData = NULL;/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Bayconfig) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA Bayconfig para error,pointer %p, %p, length %d", EnclAddr, Bayconfig, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    TmpData = (OSP_S8 *)MPA_Malloc(LENGTH_AND_BAYCONFIG);
-    if(NULL == TmpData)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA Malloc fail");
-        return DRV_RETURN_ERROR;
-    }
-    OSAL_MemSet_s(TmpData, LENGTH_AND_BAYCONFIG, 0, LENGTH_AND_BAYCONFIG);
-    OSAL_MemCpy_s((OSP_U8 *)TmpData, (OSP_U32)min(LENGTH_AND_BAYCONFIG, (OSP_S32)Length), (OSP_U8 *)Bayconfig, (OSP_U32)min(LENGTH_AND_BAYCONFIG, (OSP_S32)Length));
-
-    MpaCmd.Cmd = DRV_CMD_SET_BAYCONFIG;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = (OSP_U16)Length;    /*ʵݵĳ·֡.ᳬU16*/
-    MpaCmd.SdrType = SDRTYPE_BAYCONFIG;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)TmpData, (OSP_VOID *)EnclAddr);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 344, "MPA set Bayconfig return error %d", RetVal);
-    }
-
-    MPA_Free(TmpData);
-    TmpData = NULL;
-
-    return RetVal;
-}
-
-/******************************************************************************
-*     : MPAIntf_GetBayconfigLen
-*   : ѯBayconfig 
-*   : EnclAddr  豸ַϢ
-*             DriverId        豸idϢ
-*             Length  
-*   : Bayconfig
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.             : 201499
-*                  : chenkeren 00221000
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetBayconfigLen(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Length))
-    {
-         DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA BayconfigLen Point Null %p, %p", EnclAddr, Length);
-         return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BAYCONFIG_LEN;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_S32);
-    MpaCmd.SdrType = SDRTYPE_BAYCONFIG_LEN;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Length);
-}
-
-/******************************************************************************
-*     : MPAIntf_GetBayconfig
-*   : ѯBayconfig
-*   : EnclAddr  豸ַϢ
-*             DriverId        豸idϢ
-*             Bayconfig  Bayconfig
-*             Length  
-*   : Bayconfig
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.             : 201499
-*                  : chenkeren 00221000
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetBayconfig(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Bayconfig, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 *BayBuffer = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Bayconfig) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA Bayconfig para error,pointer %p, %p, length %d", EnclAddr, Bayconfig, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BAYCONFIG;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MAX_BAYCONFIG_LEN;
-    MpaCmd.SdrType = SDRTYPE_BAYCONFIG;
-    MpaCmd.WtRd = MPA_READ;
-
-    BayBuffer = (OSP_U8 *)MPA_Malloc(MAX_BAYCONFIG_LEN);
-    if(NULL == BayBuffer)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA Malloc fail");
-        return RetVal;
-    }
-    OSAL_MemSet_s(BayBuffer, MAX_BAYCONFIG_LEN, 0, MAX_BAYCONFIG_LEN);
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)EnclAddr, (OSP_VOID *)BayBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 344, "MPA Get Bayconfig return error %d", RetVal);
-        MPA_Free(BayBuffer);
-        BayBuffer = NULL;
-        return RetVal;
-    }
-
-    OSAL_MemCpy_s((OSP_U8 *)Bayconfig, (OSP_U32)min(MAX_BAYCONFIG_LEN, (OSP_S32)Length), (OSP_U8 *)BayBuffer, (OSP_U32)min(MAX_BAYCONFIG_LEN, (OSP_S32)Length));
-
-    MPA_Free(BayBuffer);
-    BayBuffer = NULL;
-
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPeerElabel
- *   : ѯ԰ӱǩ
- *   : EnclAddr  豸ַϢ
- *             DriverId        豸idϢ
- *             Elabel  ӱǩ
- *             Length  ӱǩ
- *   : Elabel  ӱǩ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014411
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPeerElabel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 PeerSlot, OSP_S8 *Elabel, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S8 *ElabelBuffer = NULL;/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Elabel) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 45, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Elabel, Length);
-        return RetVal;
-    }
-
-    (OSP_VOID)PeerSlot;
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    /*ֻsesָ֧ýӿ*/
-    if ((DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame) || (MpaAddr->DevFrame > DRV_FRAMEMODEL_12GSAS_EXP_END))
-    {
-        return RETURN_INVALID;
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_ELABEL_GET_PEER;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_ELABLE_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    ElabelBuffer = (OSP_S8 *)MPA_Malloc(DRV_ELABLE_LEN);
-    if(NULL == ElabelBuffer)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 46, "MPA malloc memory failed.");
-        return RetVal;
-    }
-    OSAL_MemSet_s(ElabelBuffer, DRV_ELABLE_LEN, 0, DRV_ELABLE_LEN);
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)EnclAddr, (OSP_VOID *)ElabelBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 47, "MPA GetPeerElabel return error %d.", RetVal);
-        MPA_Free(ElabelBuffer);
-        ElabelBuffer = NULL;
-        return RetVal;
-    }
-    
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Elabel, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length), (OSP_U8 *)ElabelBuffer, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length));
-    
-    MPA_Free(ElabelBuffer);
-    ElabelBuffer = NULL;
-    return RetVal;    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetEepromElectronicLabel
- *   : ѯEEPROMеӱǩ(װӿڣֱӴEEPROMж)
- *   : EnclAddr  豸ַϢ
- *             DriverId        豸idϢ
- *             Elabel  ӱǩ
- *             Length  ӱǩ
- *   : Elabel  ӱǩ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131225
- *           : shufan 204084
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetEepromElectronicLabel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Elabel, OSP_U32 Length)
-{
-
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 *ElabelBuffer = NULL;/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_MPA_ADDR_S * MpaAddr = NULL;
-    
-    if ((NULL == EnclAddr) || (NULL == Elabel) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 48, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Elabel, Length);
-        return RetVal;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr; 
-
-    if (DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddr->DevFrame)
-    {
-        MpaCmd.Cmd = DRV_CMD_EEPROM_GET;
-        MpaCmd.FruId = DAL_FRU_ID(DriverId);
-        MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-        MpaCmd.BufLen = DRV_ELABLE_LEN;
-        MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-        MpaCmd.WtRd = MPA_READ;
-    }
-    else
-    {
-        MpaCmd.Cmd = DRV_CMD_ELABEL_GET;
-        MpaCmd.FruId = DAL_FRU_ID(DriverId);
-        MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-        MpaCmd.BufLen = DRV_ELABLE_LEN;
-        MpaCmd.SdrType = PRODUCE_INFO_EEPROM_ELABEL;
-        MpaCmd.WtRd = MPA_READ;
-    }
-
-    ElabelBuffer = (OSP_S8 *)MPA_Malloc(DRV_ELABLE_LEN);
-    if(NULL == ElabelBuffer)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 49, "MPA malloc memory failed.");
-        return RetVal;
-    }
-    OSAL_MemSet_s(ElabelBuffer, DRV_ELABLE_LEN, 0, DRV_ELABLE_LEN);
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)EnclAddr, (OSP_VOID *)ElabelBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 50, "MPA GetEepromElectronicLabel return error.");
-        MPA_Free(ElabelBuffer);
-        ElabelBuffer = NULL;
-        return RetVal;
-    }
-    
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Elabel, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length), (OSP_U8 *)ElabelBuffer, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length));
-    
-    MPA_Free(ElabelBuffer);
-    ElabelBuffer = NULL;
-    return RetVal;
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetElectronicLabel
- *   : õӱǩ
- *   : EnclAddr  豸ַϢ
- *             DriverId        豸idϢ
- *             Elabel[DRV_ELABLE_LEN]  ӱǩ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetElectronicLabel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Elabel, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 *ElabelBuffer = NULL;/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;   
-    OSP_U32 FruId = DAL_FRU_ID(DriverId);
-    if ((NULL == EnclAddr) || (NULL == Elabel) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 51, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Elabel, Length);
-        return DRV_RETURN_ERROR;
-    }
-    
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    /* BEGIN: Added by shufan 00204084, 2014/9/1  ⵥ:c02, ޸ԭ:12g hds */
-    if (TRUE == MPA_If12gHdsCtrlBoardId(MpaAddr->DevFrame, FruId))
-    {
-        return MPA_Set12gHdsCommonInfo((DAL_MPA_ADDR_S *)EnclAddr,
-                                        DriverId,//עu64 driver id
-                                        SAS_12G_CMD_SET_CTRL_ELABLE,
-                                        (OSP_VOID *)Elabel, 
-                                        DRV_ELABLE_LEN);
-    }
-    /* END: Added by shufan 00204084, 2014/9/1  ⵥ:c02 */
-
-    
-    ElabelBuffer = (OSP_S8 *)MPA_Malloc(DRV_ELABLE_LEN);
-    if(NULL == ElabelBuffer)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 52, "MPA malloc memory failed.");
-        return DRV_RETURN_ERROR;
-    }
-    OSAL_MemSet_s(ElabelBuffer, DRV_ELABLE_LEN, 0, DRV_ELABLE_LEN);
-    OSAL_MemCpy_s((OSP_U8 *)ElabelBuffer, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length), (OSP_U8 *)Elabel, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length));
-
-    MpaCmd.Cmd = DRV_CMD_ELABEL_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_ELABLE_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)ElabelBuffer, (OSP_VOID *)EnclAddr);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 53, "MPA SetELabel return error %d.", RetVal);
-    }
-    
-    MPA_Free(ElabelBuffer);
-    ElabelBuffer = NULL;
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBackBoardMac
- *   : ȡmac
- *   : EnclAddr  豸ַϢ
- *             DriverId        豸idϢ
- *             Mac  mac
- *             Length mac
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131016
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBackBoardMac(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Mac, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 MacBuffer[DRV_MAC_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Mac) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 54, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Mac, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_MAC_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_MAC_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_MAC;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)MacBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 55, "MPA GetBackBoardMac return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Mac, (OSP_U32)min(DRV_MAC_LEN, (OSP_S32)Length), (OSP_U8 *)MacBuffer, (OSP_U32)min(DRV_MAC_LEN, (OSP_S32)Length));
-    return RetVal;
-       
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBackBoardMac
- *   : mac
- *   : EnclAddr  豸ַϢ
- *             DriverId        豸idϢ
- *             Mac  mac
- *             Length mac
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131016
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBackBoardMac(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Mac, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Mac) || (DRV_MAC_LEN != Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 56, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Mac, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_MAC_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_MAC_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_MAC;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Mac, (OSP_VOID *)NULL);
-  
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBackBoardSN
- *   : ȡSN
- *   : EnclAddr  豸ַϢ
- *             DriverId        豸idϢ
- *             Sn  sn
- *             Length snݳ
- *   : Sn[DRV_SN_LEN]  sn
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131016
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBackBoardSN(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Sn, OSP_U32 Length)
-{
-#ifndef DRV_SAS_SN_GET_LEN
-#define DRV_SAS_SN_GET_LEN 30
-#endif
-
-    MPA_CMD_INFO_S MpaCmd;
-    /*sesϴѯsnӿڷ30ֽڣҪضϣֱӿڴ*/
-    OSP_S8 TmpSn[DRV_SAS_SN_GET_LEN] = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Sn) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 57, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Sn, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SN_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_SN_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_SN;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TmpSn);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 58, "MPA GetBackBoardSn return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Sn, (OSP_U32)min(DRV_SN_LEN, (OSP_S32)Length), (OSP_U8 *)TmpSn, (OSP_U32)min(DRV_SN_LEN, (OSP_S32)Length));
-    return RetVal;
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBackBoardSN
- *   : SN
- *   : EnclAddr  豸ַϢ
- *             DriverId        豸idϢ
- *             Sn  sn
- *             Length snݳ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131016
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBackBoardSN(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Sn, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 SnBuf[DRV_SN_LEN] = {0};
-
-    if ((NULL == EnclAddr) || (NULL == Sn) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 59, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Sn, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SN_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_SN_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_SN;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    OSAL_MemCpy_s((OSP_U8 *)SnBuf, (OSP_U32)min(DRV_SN_LEN, (OSP_S32)Length), (OSP_U8 *)Sn, (OSP_U32)min(DRV_SN_LEN, (OSP_S32)Length));
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)SnBuf, (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBackBoardLicense
- *   : ѯlicense
- *   : EnclAddr  豸ַϢ
- *             DriverId        豸idϢ
- *             License  license
- *             Length 
- *   : License[DRV_LISENCE_LEN]  license
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBackBoardLicense(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *License, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 *LicenseBuffer = NULL;/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == License) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 60, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, License, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_LISENCE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_LISENCE_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_LICENSE;
-    MpaCmd.WtRd = MPA_READ;
-
-    LicenseBuffer = (OSP_S8 *)MPA_Malloc(DRV_LISENCE_LEN);
-    if (NULL == LicenseBuffer)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 61, "MPA malloc memory failed.");
-        return RetVal;
-    }
-    OSAL_MemSet_s(LicenseBuffer, DRV_LISENCE_LEN, 0, DRV_LISENCE_LEN);
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)LicenseBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 62, "MPA GetLicense return error.");
-        MPA_Free(LicenseBuffer);
-        LicenseBuffer = NULL;
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)License, (OSP_U32)min(DRV_LISENCE_LEN, (OSP_S32)Length), (OSP_U8 *)LicenseBuffer, (OSP_U32)min(DRV_LISENCE_LEN, (OSP_S32)Length));
-    
-    MPA_Free(LicenseBuffer);
-    LicenseBuffer = NULL;    
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBackBoardLicense
- *   : license
- *   : EnclAddr  豸ַϢ
- *             DriverId        豸idϢ
- *             License  license
- *             Length   license
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBackBoardLicense(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *License, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 *LicenseBuffer = NULL;/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == License) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 63, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, License, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    LicenseBuffer = (OSP_S8 *)MPA_Malloc(DRV_LISENCE_LEN);
-    if (NULL == LicenseBuffer)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 64, "MPA malloc memory failed.");
-        return RetVal;
-    }
-    OSAL_MemSet_s(LicenseBuffer, DRV_LISENCE_LEN, 0, DRV_LISENCE_LEN);
-    OSAL_MemCpy_s((OSP_U8 *)LicenseBuffer, (OSP_U32)min(DRV_LISENCE_LEN, (OSP_S32)Length), (OSP_U8 *)License, (OSP_U32)min(DRV_LISENCE_LEN, (OSP_S32)Length));
-    
-    MpaCmd.Cmd = DRV_CMD_LISENCE_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_LISENCE_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_LICENSE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)LicenseBuffer, (OSP_VOID *)NULL);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 65, "MPA SetLicense return error %d.", RetVal);
-    }
-    
-    MPA_Free(LicenseBuffer);
-    LicenseBuffer = NULL;
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBackBoardBrand
- *   : ȡƷƷ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Brand  ƷϢ
- *             Length ƷϢ
- *   : Brand  ƷϢ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBackBoardBrand(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Brand, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 BrandBuffer[DRV_BRAND_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Brand) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 66, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Brand, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BRAND_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_BRAND_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_BRAND;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)BrandBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 67, "MPA GetBrand return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Brand, (OSP_U32)min(DRV_BRAND_LEN, (OSP_S32)Length), (OSP_U8 *)BrandBuffer, (OSP_U32)min(DRV_BRAND_LEN, (OSP_S32)Length));
- 
-    return RetVal;  
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBackBoardBrand
- *   : òƷƷ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Brand  ƷϢ
- *             Length ƷϢ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBackBoardBrand(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Brand, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 BrandBuffer[DRV_BRAND_LEN] = {0};/*ڻMPAѯ*/
-
-    if ((NULL == EnclAddr) || (NULL == Brand) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 68, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Brand, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BRAND_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_BRAND_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_BRAND;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    OSAL_MemCpy_s((OSP_U8 *)BrandBuffer, (OSP_U32)min(DRV_BRAND_LEN, (OSP_S32)Length), (OSP_U8 *)Brand, (OSP_U32)min(DRV_BRAND_LEN, (OSP_S32)Length));
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BrandBuffer, (OSP_VOID *)NULL);
-
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetBackBoardOemBrand
- *   : ȡOEMƷƷ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Brand  ƷϢ
- *             Length ƷϢ
- *   : Brand  ƷϢ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131125
- *           : shufan 204084
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBackBoardOemBrand(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Brand, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 BrandBuffer[DRV_BRAND_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Brand) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 69, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Brand, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_OEM_BRAND_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_BRAND_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)BrandBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 70, "MPA GetOemBrand return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Brand, (OSP_U32)min(DRV_BRAND_LEN, (OSP_S32)Length), (OSP_U8 *)BrandBuffer, (OSP_U32)min(DRV_BRAND_LEN, (OSP_S32)Length));
- 
-    return RetVal;  
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBackBoardOemBrand
- *   : OemƷƷ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Brand  ƷϢ
- *             Length ƷϢ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBackBoardOemBrand(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Brand, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Brand) || (DRV_BRAND_LEN != Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 71, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Brand, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_OEM_BRAND_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_BRAND_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Brand, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBackBoardModel
- *   : ȡƷͺ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             ProModel  Ʒͺ
- *             Length    Ʒͺų
- *   : ProModel  Ʒͺ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBackBoardModel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *ProModel, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 ModelBuffer[DRV_PROMODEL_LEN_MAX] = {0}; /* 2014-6-24 c00221000 for DTS2014062409061 for: V1-BMC32ֽ,˴32B*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == ProModel) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 72, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, ProModel, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_PROMODEL_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_CTLB_PROMODEL_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_PROMODEL;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)ModelBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 73, "MPA GetProModel return error.");
-        return RetVal;
-    }
-
-    /* BEGIN: Added by shipin, 2016-12-26 16:19:20, ⵥ:DTS2016090111116, ޸ԭ:ƷͺȫFFEAMļ */
-    /* ֲƷͺֽΪ0xFFʱDMIؿմDMI͸EAMǷַж */
-    if(MPA_DATA_IS_INVALID8((OSP_U8)ModelBuffer[0]))
-    {
-        OSAL_MemSet_s(ModelBuffer, sizeof(ModelBuffer), 0, sizeof(ModelBuffer));
-    }
-    /* END: Added by shipin, 2016-12-26 16:19:20 */
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)ProModel, (OSP_U32)min(DRV_CTLB_PROMODEL_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)ModelBuffer, (OSP_U32)min(DRV_CTLB_PROMODEL_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-
-    }
-
- /******************************************************************************
- *     : MPAIntf_SetBackBoardModel
- *   : òƷͺ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             ProModel  Ʒͺ
- *             Length    Ʒͺų
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBackBoardModel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *ProModel, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 ModelBuf[DRV_CTLB_PROMODEL_LEN] = {0};
-
-    if ((NULL == EnclAddr) || (NULL == ProModel) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 74, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, ProModel, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_PROMODEL_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_CTLB_PROMODEL_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_PROMODEL;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    OSAL_MemCpy_s((OSP_U8 *)ModelBuf, (OSP_U32)min(DRV_CTLB_PROMODEL_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)ProModel, (OSP_U32)min(DRV_CTLB_PROMODEL_LEN, (OSP_S32)Length));
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)ModelBuf, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBackBoardOemModel
- *   : ȡoemƷͺ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             ProModel  Ʒͺ
- *             Length    Ʒͺų
- *   : ProModel  Ʒͺ
- *   ֵ  : OSP_S32
- * ˵  : ֻv2֧
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBackBoardOemModel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *ProModel, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 ModelBuffer[DRV_PROMODEL_LEN_MAX] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == ProModel) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 75, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, ProModel, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_OEM_PROMODEL_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_CTLB_PROMODEL_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_OEM_PROMODEL;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)ModelBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 76, "MPA GetProModel return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)ProModel, (OSP_U32)min(DRV_CTLB_PROMODEL_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)ModelBuffer, (OSP_U32)min(DRV_CTLB_PROMODEL_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-
-    }
-
- /******************************************************************************
- *     : MPAIntf_SetBackBoardOemModel
- *   : oemƷͺ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             ProModel  Ʒͺ
- *             Length    Ʒͺų
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : ֻv2֧
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBackBoardOemModel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *ProModel, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 ModelBuf[DRV_CTLB_PROMODEL_LEN] = {0};
-
-    if ((NULL == EnclAddr) || (NULL == ProModel) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 77, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, ProModel, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_OEM_PROMODEL_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_CTLB_PROMODEL_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_OEM_PROMODEL;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    OSAL_MemCpy_s((OSP_U8 *)ModelBuf, (OSP_U32)min(DRV_CTLB_PROMODEL_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)ProModel, (OSP_U32)min(DRV_CTLB_PROMODEL_LEN, (OSP_S32)Length));
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)ModelBuf, (OSP_VOID *)NULL);
-
-}
- /******************************************************************************
- *     : MPAIntf_GetBackBoardVendor
- *   : ȡϢ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Vendor     Ϣ
- *             Length     Ϣ
- *   : Vendor     Ϣ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBackBoardVendor(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Vendor, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 VendorBuffer[DRV_VENDOR_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Vendor) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 78, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Vendor, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_PROVENDOR_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_VENDOR_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_VENDOR;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VendorBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 79, "MPA GetVendor return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Vendor, (OSP_U32)min(DRV_VENDOR_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VendorBuffer, (OSP_U32)min(DRV_VENDOR_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBackBoardVendor
- *   : óϢ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Vendor     Ϣ
- *             Length     Ϣ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBackBoardVendor(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Vendor, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 VendorBuf[DRV_VENDOR_LEN] = {0};
-
-    if ((NULL == EnclAddr) || (NULL == Vendor) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 80, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Vendor, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_PROVENDOR_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_VENDOR_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_VENDOR;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    OSAL_MemCpy_s((OSP_U8 *)VendorBuf, (OSP_U32)min(DRV_VENDOR_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)Vendor, (OSP_U32)min(DRV_VENDOR_LEN, (OSP_S32)Length));
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)VendorBuf, (OSP_VOID *)NULL);
-
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetBackBoardOemVendor
- *   : ȡOEMϢ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Vendor     Ϣ
- *             Length     Ϣ
- *   : Vendor     Ϣ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131125
- *           : shufan 204084
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBackBoardOemVendor(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Vendor, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 VendorBuffer[DRV_VENDOR_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Vendor) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 81, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Vendor, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_OEM_VENDOR_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_VENDOR_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VendorBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 82, "MPA GetOemVendor return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Vendor, (OSP_U32)min(DRV_VENDOR_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VendorBuffer, (OSP_U32)min(DRV_VENDOR_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBackBoardOemVendor
- *   : OEMϢ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Vendor     Ϣ
- *             Length     Ϣ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131125
- *           : shufan 204084
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBackBoardOemVendor(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Vendor, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Vendor) || (DRV_VENDOR_LEN != Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 83, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Vendor, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_OEM_VENDOR_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_VENDOR_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Vendor, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBackBoardLogo
- *   : ѯ־Ϣ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Logo  ־Ϣ
- *             Length ־Ϣ
- *   : Logo  ־Ϣ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBackBoardLogo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Logo, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 LogoBuffer[DRV_LOGO_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Logo) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 84, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Logo, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_PROLOGO_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_LOGO_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_LOGO;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)LogoBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 85, "MPA GetLogo return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Logo, (OSP_U32)min(DRV_LOGO_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)LogoBuffer, (OSP_U32)min(DRV_LOGO_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBackBoardLogo
- *   : ñ־Ϣ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Logo  ־Ϣ
- *             Length ־Ϣ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBackBoardLogo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Logo, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 LogoBuf[DRV_LOGO_LEN] = {0};
-
-    if ((NULL == EnclAddr) || (NULL == Logo) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 86, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Logo, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_PROLOGO_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_LOGO_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_LOGO;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    OSAL_MemCpy_s((OSP_U8 *)LogoBuf, (OSP_U32)min(DRV_LOGO_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)Logo, (OSP_U32)min(DRV_LOGO_LEN, (OSP_S32)Length));
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)LogoBuf, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBackboardESN
- *   : ѯESN
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Esn      ESNϢ
- *             Length   ESNϢ
- *   : Esn      ESNϢ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBackboardESN(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Esn, OSP_U32 Length)
-{
-
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 EsnBuffer[DRV_ESN_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Esn) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 87, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Esn, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_ESN_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_ESN_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)EsnBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 88, "MPA GetBackboardESN return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Esn, (OSP_U32)min(DRV_ESN_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)EsnBuffer, (OSP_U32)min(DRV_ESN_LEN, (OSP_S32)Length));
-   
-   
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBackboardESN
- *   : ESN
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Esn      ESNϢ
- *             Length   ESNϢ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBackboardESN(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Esn, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 EsnBuf[DRV_ESN_LEN] = {0};
-
-    if ((NULL == EnclAddr) || (NULL == Esn) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 89, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Esn, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_ESN_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_ESN_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    OSAL_MemCpy_s((OSP_U8 *)EsnBuf, (OSP_U32)min(DRV_ESN_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)Esn, (OSP_U32)min(DRV_ESN_LEN, (OSP_S32)Length));
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)EsnBuf, (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBackboardSpec
- *   : ѯSpec
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Spec      SpecϢ
- *             Length   SpecϢ
- *   : Spec      SpecϢ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20141213
- *           : hulinhui 00289393
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBackboardSpec(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Spec, OSP_U32 Length)
-{
-
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 SpecBuffer[MPA_LENTH_16] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Spec) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 87, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Spec, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SPEC_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_LENTH_16;
-    MpaCmd.SdrType = PRODUCE_INFO_SPEC;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)SpecBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 88, "MPA GetBackboardSpec return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Spec, (OSP_U32)min(MPA_LENTH_16, (OSP_S32)Length), 
-        (OSP_U8 *)SpecBuffer, (OSP_U32)min(MPA_LENTH_16, (OSP_S32)Length));
-   
-   
-    return RetVal;
-}
- /******************************************************************************
- *     : MPAIntf_SetBackboardSpec
- *   : Spec
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Spec      SpecϢ
- *             Length   SpecϢ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20141213
- *           : hulinhui 00289393
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBackboardSpec(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Spec, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 SpecBuf[MPA_LENTH_16] = {0};
-
-    if ((NULL == EnclAddr) || (NULL == Spec) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 89, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Spec, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SPEC_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_LENTH_16;
-    MpaCmd.SdrType = PRODUCE_INFO_SPEC;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    OSAL_MemCpy_s((OSP_U8 *)SpecBuf, (OSP_U32)min(MPA_LENTH_16, (OSP_S32)Length), 
-        (OSP_U8 *)Spec, (OSP_U32)min(MPA_LENTH_16, (OSP_S32)Length));
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)SpecBuf, (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBackboardFrameInfo
- *   : ѯFrameInfo
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             FrameInfo      FrameInfoϢ
- *             Length   FrameInfoϢ
- *   : FrameInfo      FrameInfoϢ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20141213
- *           : hulinhui 00289393
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBackboardFrameInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *FrameInfo, OSP_U32 Length)
-{
-
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 FrameInfoBuffer[MPA_LENTH_32] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == FrameInfo) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 87, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FrameInfo, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_FRAMEINFO_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_LENTH_32;
-    MpaCmd.SdrType = PRODUCE_INFO_FRAMEINFO;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)FrameInfoBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 88, "MPA GetBackboardFrameInfo return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)FrameInfo, (OSP_U32)min(MPA_LENTH_32, (OSP_S32)Length), 
-        (OSP_U8 *)FrameInfoBuffer, (OSP_U32)min(MPA_LENTH_32, (OSP_S32)Length));
-   
-   
-    return RetVal;
-}
- /******************************************************************************
- *     : MPAIntf_SetBackboardFrameInfo
- *   : FrameInfo
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             FrameInfo  FrameInfoϢ
- *             Length     FrameInfoϢ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20141213
- *           : hulinhui 00289393
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBackboardFrameInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *FrameInfo, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 FrameInfoBuf[MPA_LENTH_32] = {0};
-
-    if ((NULL == EnclAddr) || (NULL == FrameInfo) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 89, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FrameInfo, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_FRAMEINFO_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_LENTH_32;
-    MpaCmd.SdrType = PRODUCE_INFO_FRAMEINFO;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    OSAL_MemCpy_s((OSP_U8 *)FrameInfoBuf, (OSP_U32)min(MPA_LENTH_32, (OSP_S32)Length), 
-        (OSP_U8 *)FrameInfo, (OSP_U32)min(MPA_LENTH_32, (OSP_S32)Length));
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)FrameInfoBuf, (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPowerConfig
- *   : ѯPowerConfig
- *   : EnclAddr                   豸ַϢ
- *             DriverId                   豸idϢ
- *             PowerConfig        PowerConfigϢ
- *             Length             PowerConfigϢ
- *   : PowerConfig        PowerConfigϢ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20140105
- *           : hulinhui 00289393
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerConfig(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *PowerConfig, OSP_U32 Length)
-{
-
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 PowerConfigBuffer[MPA_LENTH_128] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == PowerConfig) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 87, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, PowerConfig, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_POWER_CONFIG;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_LENTH_128;
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_POWERCONFIG;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PowerConfigBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 88, "MPA GetPowerConfig return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)PowerConfig, (OSP_U32)min(MPA_LENTH_128, (OSP_S32)Length), 
-        (OSP_U8 *)PowerConfigBuffer, (OSP_U32)min(MPA_LENTH_128, (OSP_S32)Length));
-   
-    return RetVal;
-}
- /******************************************************************************
- *     : MPAIntf_SetPowerConfig
- *   : PowerConfig
- *   : EnclAddr                   豸ַϢ
- *             DriverId                   豸idϢ
- *             PowerConfig                PowerConfigϢ
- *             Length                     PowerConfigϢ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20140105
- *           : hulinhui 00289393
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetPowerConfig(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *PowerConfig, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 PowerConfigBuf[MPA_LENTH_128] = {0};
-
-    if ((NULL == EnclAddr) || (NULL == PowerConfig) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 89, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, PowerConfig, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_POWER_CONFIG;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_LENTH_128;
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_POWERCONFIG;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    OSAL_MemCpy_s((OSP_U8 *)PowerConfigBuf, (OSP_U32)min(MPA_LENTH_128, (OSP_S32)Length), 
-        (OSP_U8 *)PowerConfig, (OSP_U32)min(MPA_LENTH_128, (OSP_S32)Length));
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)PowerConfigBuf, (OSP_VOID *)NULL);
-}
-
-/*ðȫ*/
- /******************************************************************************
- *     : MPAIntf_SetBackBoardPassword
- *   : ðȫ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Secret     
- *             Length     
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013119
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBackBoardPassword(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Secret, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Secret) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 90, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Secret, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_PASSWORD_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = (OSP_U16)Length;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Secret, (OSP_VOID *)NULL);
-    
-}
-
-/******************************************************************************
-*     : MPAIntf_SetUserAndPassword
-*   : ûӿ
-*   : EnclAddr 豸ַϢ 
-*             DriverId  豸idϢ      
-*             UserInfo  ûϢ,ϵͳԱû,ϵͳԱ,
-*                       ܶ
-*             Length ûϢ    
-*   : 
-*   ֵ  : DRV_RETURN_OK 
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2014124
-*           : jiangfanlu 00101148
-*    ޸   : ɺ 
-*                 CR-01592961 CR-01592961-OceanStor 5800 V3 V300R002C00-ϵͳĬ
-*                 ûadminƳȲ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetUserAndPassword(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *UserInfo, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U32 DataOut;
-
-    (void)DriverId;
-
-    if ((NULL == EnclAddr) || (NULL == UserInfo) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 90, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, UserInfo, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_USER_AND_PASSWORD;
-    MpaCmd.FruId = 0;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = (OSP_U16)Length;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /* ·ĳͨDataOutݵDEV_Intf */
-    DataOut = Length;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)UserInfo, (OSP_VOID *)&DataOut);
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_ClearBackBoardPassword
- *   : ȫ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013119
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_ClearBackBoardPassword(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*ԭdevsesȫĲ*/
-    OSP_U8 DataIn[2] = {0x35, 0x1};
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 91, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_DISABLEPHY_PARAM_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DataIn);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
-    
-}
- /******************************************************************************
- *     : MPAIntf_GetBackBoardNebs
- *   : ѯNebs־
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Nebs      NebsϢ
- *   : Nebs      NebsϢ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131021
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBackBoardNebs(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Nebs)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Nebs))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 92, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Nebs);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_NEBS_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Nebs);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBackBoardNebs
- *   : Nebs־
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Nebs      NebsϢ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131021
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBackBoardNebs(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Nebs)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 93, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 94, "MPA sets nebs id(0x%llx), value(%d).", DriverId, Nebs);
-    MpaCmd.Cmd = DRV_CMD_NEBS_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Nebs, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBackBoardJbodFlag
- *   : ѯjbod־
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             JbodFlag                   jbod־
- *   : JbodFlag                   jbod־
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBackBoardJbodFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *JbodFlag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == JbodFlag))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 95, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, JbodFlag);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_JBOD_FLAG_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)JbodFlag);    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBackBoardJbodFlag
- *   : jbod־
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             JbodFlag                   jbod־
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131017
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBackBoardJbodFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 JbodFlag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 96, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 97, "MPA sets jbod flag, id(0x%llx), value(%d).", DriverId, JbodFlag);
-    MpaCmd.Cmd = DRV_CMD_JBOD_FLAG_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&JbodFlag, (OSP_VOID *)NULL);    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBackBoardEthConfig
- *   : ȡģʽ
- *   : EnclAddr      豸ַϢ
- *             DriverId      豸idϢ
- *             Config        Ϣ
- *   : Config        Ϣ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131125
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBackBoardEthConfig(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Config)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Config))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 98, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Config);
-        return DRV_RETURN_ERROR;
-    }
-
-    //4 ֧3Ŀǰdmiֻʹ1ʹʱҪʹڲӿת
-    MpaCmd.Cmd = DRV_CMD_BB_EEPROM_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_GET_PROD_FLAG;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Config);    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBackBoardEthConfig
- *   : ģʽ
- *   : EnclAddr      豸ַϢ
- *             DriverId      豸idϢ
- *             Config        Ϣ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : ֻ֧DOUBLE_PORT_CONNECTSINGLE_PORT_CONNECT
- * 
- * ޸ʷ      :
- *  1.       : 20131125
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBackBoardEthConfig(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 Config)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 99, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 100, "MPA sets backboard eth config, id(0x%llx), value(0x%x).", DriverId, Config);
-    MpaCmd.Cmd = DRV_CMD_BB_EEPROM_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_PROD_FLAG;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Config, (OSP_VOID *)NULL);    
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetFrameMode
- *   : ȡ
- *   : EnclAddr  豸ַϢ
- *             FrameMode 
- *   : FrameMode 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131016
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFrameMode(OSP_VOID *EnclAddr, DRV_FRAME_MODEL_E *FrameMode)
-{
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    DRV_CMD_S DevCmd;
-    DRV_ADDR_DOWNINFO_S DevAddr;
-    OSP_U8 FrameModBuffer = 0;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == FrameMode))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 101, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, FrameMode);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    
-    /*BMCʼʱbspȡ汾ţΪ*/
-    if (DAL_MNGTTYPE_BMC == MpaAddr->McuType
-          || (DAL_MNGTTYPE_IP_BMC == MpaAddr->McuType))
-    {
-        if ((OSP_U8)TRUE == MPA_GetBmcIpmiModel())
-        {
-            return MPA_GetBspFrameModel(FrameMode);
-        }
-        /*v1 bmcֱӷ*/
-        else
-        {
-            *FrameMode = (DRV_FRAME_MODEL_E)DRV_FRAMEMODEL_CTRL_BMC;
-            return DRV_RETURN_OK;
-        }
-    }
-    else
-    {
-        DevCmd.uiNetFn = 0;
-        DevCmd.uiCmd = DRV_CMD_FRAME_MODEL_GET;
-        DevCmd.ucId = DRV_ID_FRAME_TYPE_GET;
-
-        /*sas sesƿͼһü֧*/
-        if (DEVICE_SAS_SES == MpaAddr->McuType)
-        {
-            DevAddr.uiType = DEVICE_SAS_SES;
-            DevAddr.uiCtlFlag = IS_CONTRLBOARD_NO;
-        }
-        else if (DEVICE_FC_SES == MpaAddr->McuType)
-        {
-            DevAddr.uiType = DEVICE_FC_SES;
-            DevAddr.uiCtlFlag = IS_CONTRLBOARD_NO;
-        }
-        else
-        {
-            DRV_MPA_TRACE(DRV_LOG_WARN, 102, "MPA gets frame mode failed, mcu type is %x.", MpaAddr->McuType);
-            return DRV_RETURN_ERROR;
-        }
-        
-        OSAL_MemCpy_s((OSP_U8 *)&DevAddr.stDevAddr, sizeof(DevAddr.stDevAddr), (OSP_U8 *)&MpaAddr->DevAddr, sizeof(DevAddr.stDevAddr));       
-        RetVal = DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&FrameModBuffer);
-       *FrameMode  = (DRV_FRAME_MODEL_E)FrameModBuffer;
-        return RetVal;
-            
-    }
-}
-
- /******************************************************************************
- *     : MPAIntf_GetIntfCardType
- *   : ȡӿڿ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             type     ӿڿ 
- *   : type     ӿڿ 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131016
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetIntfCardType(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *type)
-{
-
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == type))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 103, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, type);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_INTFCARD_TYPE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)type);
-    
-}                
-
- /******************************************************************************
- *     : MPAIntf_WriteKBox
- *   : ϻд
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             KBoxData  
- *             Length    ݳ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131226
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_WriteKBox(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *KBoxData, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    (OSP_VOID)Length;
-    
-    if ((NULL == EnclAddr) || (NULL == KBoxData))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 104, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, KBoxData);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_WRITE_DATA_TO_KBOX;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_ELABLE_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)KBoxData, (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_ReadKBox
- *   :  ϻӶ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             KBoxData  
- *             Length    ݳ
- *   : KBoxData  
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131226
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_ReadKBox(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *KBoxData, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 *KBoxDataBuffer = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == KBoxData) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 105, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, KBoxData, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_READ_DATA_FROM_KBOX;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_ELABLE_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_RAM_ELABEL;
-    MpaCmd.WtRd = MPA_READ;
-
-    KBoxDataBuffer = (OSP_S8 *)MPA_Malloc(DRV_ELABLE_LEN);
-    if(NULL == KBoxDataBuffer)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 106, "MPA malloc memory failed.");
-        return RetVal;
-    }
-    OSAL_MemSet_s(KBoxDataBuffer, DRV_ELABLE_LEN, 0, DRV_ELABLE_LEN);
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)KBoxDataBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 107, "MPA ReadKBox return error.");
-        MPA_Free(KBoxDataBuffer);
-        KBoxDataBuffer = NULL;
-        return RetVal;
-    }
-    
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)KBoxData, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)KBoxDataBuffer, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length));
-    
-    MPA_Free(KBoxDataBuffer);
-    KBoxDataBuffer = NULL;
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdateMgmtPrepare
- *   : оƬ step1׼
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131016
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateMgmtPrepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 108, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    /* BEGIN: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
-    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
-    DRV_MPA_TRACE(DRV_LOG_INFO, 109, "MPA prepares to update mgmt chip,id(0x%llx),mcutype(0x%x),devframe(0x%x),device:%d %d %d %d.", 
-                  DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->McuType,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, 
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiHostId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiChannelId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiScsiId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiLunId);
-    /* END: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
-    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
-    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_MGMT;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-
-    /* V2-BMCBMCCPLDǰFruId0x200SdrType*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = SDR_TYPE_BMC;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_SMM_A_BMC;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_SMM_B_BMC;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_FAN_CTRLBOARD, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_BMC;
-        }
-        //MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
-     }
-    
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdateCpldPrepare
- *   : cpldһ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131030
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateCpldPrepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_U8 CpldId = 0;/*Ϊһò·SES
-                                    ֧BufferIn Ϊյʧ*/
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 110, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    
-    /* BEGIN: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
-    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
-    DRV_MPA_TRACE(DRV_LOG_INFO, 111, "MPA prepares to update cpld, id(0x%llx),mcutype(0x%x),devframe(0x%x),device:%d %d %d %d.", 
-                  DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->McuType,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, 
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiHostId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiChannelId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiScsiId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiLunId);
-    /* END: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
-    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
-    
-    /* BEGIN: Added by shufan 00204084, 2014/10/20  ⵥ:c02, ޸ԭ:12g hds */
-    if (TRUE == MPA_If12gHdsCtrlBoardId(MpaAddr->DevFrame, (OSP_U32)DAL_FRU_ID(DriverId)))
-    {
-        return MPA_Set12gHdsCommonInfo((DAL_MPA_ADDR_S *)EnclAddr,
-                                        DriverId,//עu64 driver id
-                                        SAS_12G_CMD_SET_CTRL_CPLD_PRE_UPDATE,
-                                        &CpldId,
-                                        1);
-    }
-/* END: Added by qintianyi 90005776, 2014/8/5  ⵥ:c02 */
-
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_CPLD;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-
-    /* V2-BMCBMCCPLDǰFruId0x200SdrType*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = SDR_TYPE_CPLD;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_SMM_A_CPLD;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_SMM_B_CPLD;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_FAN_CTRLBOARD, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_CPLD;
-        }
-        else if (DAL_FRU_LOGIC_TYPE_MATCH(DAL_FRU_ID_TO_LOGIC_TYPE(MpaCmd.FruId), DMI_LOGIC_FRU_SHARE_IOCARD))
-        {
-            MpaCmd.SdrType = UPGRADE_TYPE_BIGCARD_0_CPLD + DAL_FRU_ID_TO_SLOT(MpaCmd.FruId);
-        }
-
-        //MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
-    }
-    
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-
-}
-
-
-/******************************************************************************
- *     : MPAIntf_UpdateFpgaPrepare
- *   : FPGAһ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131030
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateFpgaPrepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 112, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 113, "MPA prepares to update fpga, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_FPGA;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdateBbuPrepare
- *   : BBUһ׼
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131119
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateBbuPrepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 114, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 115, "MPA prepares to update bbu, id(0x%llx), devframe(0x%x).", DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_BBU;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-
-    /* V2-BMCBBUFruIdת0x200SdrType*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = SDR_TYPE_BBU0;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 1) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_BBU1;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 2) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_BBU2;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 3) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_BBU3;
-        }
-
-        //MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
-    }    
-    
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
-*     : MPAIntf_FruidToUpgradeType
-*   : Fruid SDR typeתĿǰʵPOWER
-*   : FruId
-*   : 
-*   ֵ  : BMC ʹõ  SdrType
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2017315
-*           : limingjiang/00400933
-*    ޸   : AR-0000261890-003-007DMIֵ֧ԴFWܡ
-******************************************************************************/
-OSP_U8 MPAIntf_FruidToUpgradeType(OSP_U32 FruId)
-{
-    OSP_U8 SdrType = UPGRADE_TYPE_INVALID;
-    if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_POWER, 0) == FruId)
-    {
-        SdrType = UPGRADE_TYPE_POWER_0;
-    }
-    else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_POWER, 1) == FruId)
-    {
-         SdrType = UPGRADE_TYPE_POWER_1;
-    }
-    else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_POWER, 2) == FruId)
-    {
-         SdrType = UPGRADE_TYPE_POWER_2;
-    }
-    else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_POWER, 3) == FruId)
-    {
-         SdrType = UPGRADE_TYPE_POWER_3;
-    }
-    return SdrType;
-}
-
-/******************************************************************************
-*     : MPAIntf_UpdatePowerPrepare
-*   : POWER һ׼
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2017315
-*           : limingjiang/00400933
-*    ޸   : AR-0000261890-003-007DMIֵ֧ԴFWܡ
-******************************************************************************/
-OSP_S32 MPAIntf_UpdatePowerPrepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 114, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_POWER;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-
-    /* V2-BMCPOWERFruIdתSdrType*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        MpaCmd.SdrType = MPAIntf_FruidToUpgradeType(MpaCmd.FruId);
-    }    
-    
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-    DRV_MPA_TRACE(DRV_LOG_INFO, 115,
-        "MPA prepares to update power, id(0x%llx), devframe(0x%x) ret:%d.",
-        DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, RetVal);
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdatePCIE8796Prepare
- *   : ׼8796
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201437
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdatePCIE8796Prepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 116, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 117, "MPA prepares to update 8796, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_CONFIGCHIP;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = UPGRADE_TYPE_8796;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
-*     : MPAIntf_UpdateFanCtrlPrepare
-*   : FANCTL һ׼
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2017325
-*           : limingjiang/00400933
-*    ޸   :DMIַ֧ȿưFWܡ
-******************************************************************************/
-OSP_S32 MPAIntf_UpdateFanCtrlPrepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 114, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_FANCTRL;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_BMC; /* BMC̶ʹôֵʶȿư*/
-    
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-    DRV_MPA_TRACE(DRV_LOG_INFO, 115,
-        "MPA prepares to update fanctrl, id(0x%llx), devframe(0x%x) ret:%d.",
-        DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, RetVal);
-    return RetVal;
-}
-
-/******************************************************************************
-*     : MPAIntf_UpdateVrmPrepare
-*   : VRM step3:ʼ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ  :
-* 1.    : 2017329
-*       : limingjiang/00400933
-*   ޸: ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_UpdateVrmPrepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 164, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_VRM;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = UPGRADE_TYPE_VR;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
-*     : MPAIntf_UpdateConfigChipPrepare
-*   : һ׼оƬ8796724638717DMA retimer
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-* 1.    : 2014112
-*       : 淫
-*   ޸: ɺ
-* 2.    : 2017329
-*       : limingjiang/00400933
-*   ޸: ֧VRM
-******************************************************************************/
-OSP_S32 MPAIntf_UpdateConfigChipPrepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-
-    OSP_U8 DeviceId = DAL_ELEMENT_NO(DriverId);
-
-    /*תid·*/
-    switch (DeviceId)
-    {
-        case 0:
-        case 1:
-            return MPAIntf_UpdatePCIE8796Prepare(EnclAddr, DriverId);
-        case 2:
-        case 3:
-            return MPAIntf_UpdatePCIE8717Prepare(EnclAddr, DriverId - 2);
-        case 4:
-            return MPAIntf_UpdateDmaRetimerPrepare(EnclAddr, DriverId - 4);
-        case 5:
-        case 6:
-        case 7:
-        case 8:
-        case 9:
-        case 10:
-        case 11:
-        case 12:
-        case 13:
-        case 14:
-            /* 5~14ΪVRоƬdeviceID */
-            return MPAIntf_UpdateVrmPrepare(EnclAddr, DriverId - 5);
-        default:
-            return RETURN_INVALID;
-    }
-}
-
-/******************************************************************************
- *     : MPAIntf_UpdateSATA72463Prepare
- *   : SATA72463һ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014111
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateSATA72463Prepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 118, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 119, "MPA prepares to update sata72463, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_SATA72463;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = UPGRADE_TYPE_SATA72463;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-
-}
-
-
-/******************************************************************************
- *     : MPAIntf_UpdatePCIE8717Prepare
- *   : PCIE8717һ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014112
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdatePCIE8717Prepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 120, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 121, "MPA prepares to update pcie8717, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_PCIE8717;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = UPGRADE_TYPE_PCIE8717;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-
-}
-
-
-/******************************************************************************
- *     : MPAIntf_UpdateDmaRetimerPrepare
- *   : DmaRetimerһ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014112
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateDmaRetimerPrepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 122, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 123, "MPA prepares to update dma retimer, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_DMARETIMER;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = UPGRADE_TYPE_DMARETIMER;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdateMgmtSendFile
- *   : оƬ step2:
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Data      ļָ
- *             DataLen   ļ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131016
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateMgmtSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data, OSP_U32 DataLen)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    (OSP_VOID)DataLen;
-
-    if ((NULL == EnclAddr) || (NULL == Data))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 124, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    
-    /* BEGIN: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
-    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */ 
-    DRV_MPA_TRACE(DRV_LOG_INFO, 125, "MPA sends update file to mgmt chip(%s), id(0x%llx),mcutype(0x%x),devframe(0x%x),device:%d %d %d %d.",
-                   Data, DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->McuType,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, 
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiHostId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiChannelId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiScsiId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiLunId);
-    /* END: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
-    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
-
-    /*Begin: add by q00223453 2016.06.20 reason:ģ̼ʧ*/
-    RetVal = MPA_CheckSimUpdateFailFlag(EnclAddr,DriverId,FWTYPE_MGT);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return DRV_RETURN_ERROR;
-    }
-    /* End: add by q00223453 */
-    
-    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_MGMT;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_UPGRADE_LEN;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /* V2-BMCBMCCPLDǰFruId0x200SdrType*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = SDR_TYPE_BMC;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_SMM_A_BMC;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_SMM_B_BMC;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_FAN_CTRLBOARD, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_BMC;
-        }
-
-        MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
-
-        /*2016-1-28 c00221000 for DTS2016011108932 begin: ڴ,readʧ,һ*/
-        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
-        if (MPA_INNER_ERROR_READ == RetVal)
-        {
-            DRV_MPA_TRACE(DRV_LOG_WARN, 1879, "Mpa will send bmc upgrade file again.");
-            RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
-            if (MPA_INNER_ERROR_READ == RetVal)
-            {
-                DRV_MPA_TRACE(DRV_LOG_WARN, 1879, "Mpa resend bmc upgrade file failed.");
-                return DRV_RETURN_ERROR;
-            }
-        }
-        return RetVal;        
-        /*2016-1-28 c00221000 for DTS2016011108932 end*/
-    }
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdateCpldSendFile
- *   : cpld2
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId  ID ͡FRUIDDEVICE IDϢ   
- *             Data      ļָ
- *             DataLen   ļ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131030
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateCpldSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data, OSP_U32 DataLen)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    (OSP_VOID)DataLen;
-
-    if ((NULL == EnclAddr) || (NULL == Data))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 126, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    
-    /* BEGIN: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
-    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
-    DRV_MPA_TRACE(DRV_LOG_INFO, 127, "MPA sends update file to cpld(%s),id(0x%llx),mcutype(0x%x),devframe(0x%x),device:%d %d %d %d.", 
-                   Data, DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->McuType,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, 
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiHostId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiChannelId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiScsiId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiLunId);
-    /* END: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
-    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
-
-    /*Begin: add by q00223453 2016.06.20 reason:ģ̼ʧ*/
-    RetVal = MPA_CheckSimUpdateFailFlag(EnclAddr,DriverId,FWTYPE_CPLD);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return DRV_RETURN_ERROR;
-    }
-    /* End: add by q00223453 */
-    
-    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_CPLD;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_UPGRADE_LEN;
-
-    /* V2-BMCBMCCPLDǰFruId0x200SdrType*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = SDR_TYPE_CPLD;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_SMM_A_CPLD;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_SMM_B_CPLD;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_FAN_CTRLBOARD, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_CPLD;
-        }
-        else if (DAL_FRU_LOGIC_TYPE_MATCH(DAL_FRU_ID_TO_LOGIC_TYPE(MpaCmd.FruId), DMI_LOGIC_FRU_SHARE_IOCARD))
-        {
-            MpaCmd.SdrType = UPGRADE_TYPE_BIGCARD_0_CPLD + DAL_FRU_ID_TO_SLOT(MpaCmd.FruId);
-        }
-
-        MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
-    }
-    
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
-
-}
-
-
- /******************************************************************************
- *     : MPAIntf_UpdateFpgaSendFile
- *   : FPGA2
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Data      ļָ
- *             DataLen   ļ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131030
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateFpgaSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data, OSP_U32 DataLen)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    (OSP_VOID)DataLen;
-
-    if ((NULL == EnclAddr) || (NULL == Data))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 128, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
-        return DRV_RETURN_ERROR;
-    }
-
-    /*Begin: add by q00223453 2016.06.20 reason:ģ̼ʧ*/
-    RetVal = MPA_CheckSimUpdateFailFlag(EnclAddr,DriverId,FWTYPE_MGT);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return DRV_RETURN_ERROR;
-    }
-    /* End: add by q00223453 */
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 129, "MPA sends update file to fpga, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_FPGA;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_UPGRADE_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdateBbuSendFile
- *   : BBUڶļ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Data      ļ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131119
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateBbuSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Data))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 130, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
-        return DRV_RETURN_ERROR;
-    }
-
-    /*Begin: add by lwx365818 2016.06.20 reason:ģ̼ʧ*/
-    RetVal = MPA_CheckSimUpdateFailFlag(EnclAddr,DriverId,FWTYPE_MGT);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return DRV_RETURN_ERROR;
-    }
-    /* End: add by lwx365818 */
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    
-    DRV_MPA_TRACE(DRV_LOG_INFO, 131, "MPA begines to send file to bbu(%s), id(0x%llx), devframe(0x%x).", 
-                        Data, DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_BBU;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_UPGRADE_LEN;
-
-    /* V2-BMCBBUFruIdת0x200SdrType*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = SDR_TYPE_BBU0;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 1) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_BBU1;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 2) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_BBU2;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 3) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_BBU3;
-        }
-
-        MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
-    }    
-
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
-*     : MPAIntf_UpdatePowerSendFile
-*   : POWERڶļ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             Data      ļ
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2017315
-*           : limingjiang/00400933
-*    ޸   : AR-0000261890-003-007DMIֵ֧ԴFWܡ
-******************************************************************************/
-OSP_S32 MPAIntf_UpdatePowerSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Data))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 130, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
-        return DRV_RETURN_ERROR;
-    }
-
-    RetVal = MPA_CheckSimUpdateFailFlag(EnclAddr,DriverId,FWTYPE_MGT);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_POWER;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_UPGRADE_LEN;
-
-    /* V2-BMCPOWERFruIdתSdrType*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        MpaCmd.SdrType = MPAIntf_FruidToUpgradeType(MpaCmd.FruId);
-        MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
-    }
-
-    MpaCmd.WtRd = MPA_WRITE;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
-    DRV_MPA_TRACE(DRV_LOG_INFO, 131,
-        "MPA begines to send file to power(%s),id(0x%llx),devframe(0x%x) ret:%d.", 
-        Data, DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, RetVal);
-
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdateMgmt8307SendFile
- *   : 8307
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Data      ļ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201433
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateMgmt8307SendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Data))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 132, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 133, "MPA sends update file to 8307, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_8307;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_UPGRADE_LEN;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
-*     : MPAIntf_UpdateFanCtrlSendFile
-*   : FanCtrlڶļ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             Data      ļ
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2017325
-*           : limingjiang/00400933
-*    ޸   :DMIַ֧ȿưFWܡ
-******************************************************************************/
-OSP_S32 MPAIntf_UpdateFanCtrlSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Data))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 130, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
-        return DRV_RETURN_ERROR;
-    }
-
-    RetVal = MPA_CheckSimUpdateFailFlag(EnclAddr,DriverId,FWTYPE_MGT);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_FANCTRL;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_UPGRADE_LEN;
-    MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_BMC;/* BMC̶ʹôֵʶȿư*/
-
-    MpaCmd.WtRd = MPA_WRITE;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
-    DRV_MPA_TRACE(DRV_LOG_INFO, 131,
-        "MPA begines to send file to fanctrl(%s),id(0x%llx),devframe(0x%x) ret:%d.", 
-        Data, DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, RetVal);
-
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdateMgmt8307Start
- *   : 8307
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201435
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateMgmt8307Start(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    OSP_U32 FruId = DAL_FRU_ID(DriverId);
-    DAL_POWER_STATE_E OpCode = DMI_POWER_RESET;
-
-    return MPAIntf_SetFruPowerCtrl(EnclAddr, FruId, OpCode);
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdateSmmBmcSendFile
- *   : BMC  step2:
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Data      ļ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013127
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateSmmBmcSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Data))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 134, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 135, "MPA sends bmc update file to smm board, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_SMM_BMC;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_UPGRADE_LEN;
-    MpaCmd.SdrType = SDR_TYPE_SMM_A_BMC;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdateSmmCpldSendFile
- *   : CPLD  step2:
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Data      ļ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013127
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateSmmCpldSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Data))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 136, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 137, "MPA sends cpld update file to smm, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_SMM_CPLD;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_UPGRADE_LEN;
-    MpaCmd.SdrType = SDR_TYPE_SMM_A_BMC;//SDR_TYPE_SMM_CPLD;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdateBbuSendFileLpc
- *   : BBUļͨLPCͨ
- *   : EnclAddr  
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Data      ļ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131216
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateBbuSendFileLpc(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Data))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 138, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 139, "MPA sends update file to bbu, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_BBU_LPC;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_UPGRADE_LEN;
-
-    /* V2-BMCBBUĵSdrType*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = SDR_TYPE_BBU0;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 1) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_BBU1;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 2) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_BBU2;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 3) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_BBU3;
-        }
-    }            
-
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdatePCIE8796SendFile
- *   : 87962
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Data      ļ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201437
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdatePCIE8796SendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Data))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 140, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 141, "MPA sends update file to pcie8796(%s), id(0x%llx), devframe(0x%x).", Data, DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_CONFIGCHIP;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_UPGRADE_LEN;
-    MpaCmd.SdrType = UPGRADE_TYPE_8796;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
-*     : MPAIntf_UpdateVrmSendFile
-*   : VRM 2
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             Data      ļ
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ  :
-* 1.    : 2017329
-*       : limingjiang/00400933
-*   ޸: ֧VRM 
-*
-******************************************************************************/
-OSP_S32 MPAIntf_UpdateVrmSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Data))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 146, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_VRM;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_UPGRADE_LEN;
-    MpaCmd.SdrType = UPGRADE_TYPE_VR;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdateConfigChipSendFile
- *   : оƬڶļ8796724638717DMA retimer
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Data      ļ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014112
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateConfigChipSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
-{
-    
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U8 DeviceId = DAL_ELEMENT_NO(DriverId);
-
-    if (NULL == EnclAddr)
-    {
-        return DRV_RETURN_ERROR;
-    }
-
-    /*Begin: add by lwx365818 2016.06.20 reason:ģ̼ʧ*/
-    RetVal = MPA_CheckSimUpdateFailFlag(EnclAddr,DriverId,FWTYPE_CHIP);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return DRV_RETURN_ERROR;
-    }
-    /* End: add by lwx365818 */
-
-    /*תid·, 01Ϊ8796,23Ϊ8717,4Ϊretimer */
-    switch (DeviceId)
-    {
-        case 0:
-        case 1:
-            return MPAIntf_UpdatePCIE8796SendFile(EnclAddr, DriverId, Data);
-        case 2:
-        case 3:
-            return MPAIntf_UpdatePCIE8717SendFile(EnclAddr, DriverId - 2, Data);
-        case 4:
-            return MPAIntf_UpdateDmaRetimerSendFile(EnclAddr, DriverId - 4, Data);
-        case 5:
-        case 6:
-        case 7:
-        case 8:
-        case 9:
-        case 10:
-        case 11:
-        case 12:
-        case 13:
-        case 14:
-            /* 5~14ΪVRоƬdeviceID */
-            return MPAIntf_UpdateVrmSendFile(EnclAddr, DriverId - 5, Data);
-        default:
-            return RETURN_INVALID;
-    }
-
-}
-
-
- /******************************************************************************
- *     : MPAIntf_UpdateSATA72463SendFile
- *   : SATA724632
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Data      ļ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014112
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateSATA72463SendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Data))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 142, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 143, "MPA sends update file to sata72463(%s), id(0x%llx), devframe(0x%x).", Data, DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_SATA72463;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_UPGRADE_LEN;
-    MpaCmd.SdrType = UPGRADE_TYPE_SATA72463;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
-
-}
-
-
- /******************************************************************************
- *     : MPAIntf_UpdatePCIE8717SendFile
- *   : PCIE87172
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Data      ļ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014112
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdatePCIE8717SendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Data))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 144, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 145, "MPA sends update file to pcie8717(%s), id(0x%llx), devframe(0x%x).", Data, DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_PCIE8717;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_UPGRADE_LEN;
-    MpaCmd.SdrType = UPGRADE_TYPE_PCIE8717;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
-
-}
-
-
- /******************************************************************************
- *     : MPAIntf_UpdateDmaRetimerSendFile
- *   : DmaRetimer2
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Data      ļ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014112
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateDmaRetimerSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Data))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 146, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 147, "MPA sends update file to dma retimer, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_DMARETIMER;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_UPGRADE_LEN;
-    MpaCmd.SdrType = UPGRADE_TYPE_DMARETIMER;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdateMgmtStart
- *   : оƬ step3:ʼ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ  
- *             Data      ļָ
- *             DataLen   ļ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131016
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateMgmtStart(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8* Data, OSP_U32 DataLen)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    (OSP_VOID)Data;
-    (OSP_VOID)DataLen;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 148, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    
-    /* BEGIN: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
-    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
-    DRV_MPA_TRACE(DRV_LOG_INFO, 149, "MPA starts to update mgmt,id(0x%llx),mcutype(0x%x),devframe(0x%x),device:%d %d %d %d.", 
-                  DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->McuType,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, 
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiHostId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiChannelId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiScsiId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiLunId);
-    /* END: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
-    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
-    
-    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_MGMT;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-
-    /* V2-BMCBMCCPLDǰFruId0x200SdrType*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = SDR_TYPE_BMC;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_SMM_A_BMC;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_SMM_B_BMC;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_FAN_CTRLBOARD, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_BMC;
-        }
-    }
-    
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdateMgmtRollBack
- *   : ˰汾
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : sesʹ
- * 
- * ޸ʷ      :
- *  1.       : 2013119
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateMgmtRollBack(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 150, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 151, "MPA starts to roll back mgmt, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_ROLLBACK;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-
-}
- /******************************************************************************
- *     : MPAIntf_UpdateCpldStart
- *   : cpld step3:ʼ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId  ID ͡FRUIDDEVICE IDϢ 
- *             Data      ļָ
- *             DataLen   ļ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131030
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateCpldStart(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8* Data, OSP_U32 DataLen)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S * MpaAddr = NULL;
-    OSP_U8 CpldId = 0;
-
-    (OSP_VOID)Data;
-    (OSP_VOID)DataLen;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 152, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    
-    /* BEGIN: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
-    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
-    DRV_MPA_TRACE(DRV_LOG_INFO, 153, "MPA starts to update cpld, id(0x%llx),mcutype(0x%x),devframe(0x%x),device:%d %d %d %d.", 
-                  DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->McuType,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, 
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiHostId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiChannelId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiScsiId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiLunId);
-    /* END: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
-    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
-    
-/* BEGIN: Added by shufan 00204084, 2014/10/20  ⵥ:c02, ޸ԭ:12g hds */
-    if (TRUE == MPA_If12gHdsCtrlBoardId(MpaAddr->DevFrame, (OSP_U32)DAL_FRU_ID(DriverId)))
-    {
-        return MPA_Set12gHdsCommonInfo((DAL_MPA_ADDR_S *)EnclAddr,
-                                        DriverId,//עu64 driver id
-                                        SAS_12G_CMD_SET_CTRL_CPLD_START_UPDATE,
-                                        &CpldId,
-                                        1);
-    }
-/* END: Added by qintianyi 90005776, 2014/8/5  ⵥ:c02 */
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_CPLD;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-
-    /* V2-BMCBMCCPLDǰFruId0x200SdrType*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = SDR_TYPE_CPLD;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_SMM_A_CPLD;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_SMM_B_CPLD;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_FAN_CTRLBOARD, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_CPLD;
-        }
-        else if (DAL_FRU_LOGIC_TYPE_MATCH(DAL_FRU_ID_TO_LOGIC_TYPE(MpaCmd.FruId), DMI_LOGIC_FRU_SHARE_IOCARD))
-        {
-            MpaCmd.SdrType = UPGRADE_TYPE_BIGCARD_0_CPLD + DAL_FRU_ID_TO_SLOT(MpaCmd.FruId);
-        }
-
-    }
-
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-
-}
-
-
-
- /******************************************************************************
- *     : MPAIntf_UpdateFpgaStart
- *   : fpga step3:ʼ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ
- *             Data      ļָ
- *             DataLen   ļ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131030
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateFpgaStart(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8* Data, OSP_U32 DataLen)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    (OSP_VOID)Data;
-    (OSP_VOID)DataLen;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 154, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 155, "MPA starts to update fpga, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_FPGA;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdateBbuStart
- *   : BBUʼ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131119
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateBbuStart(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 156, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 157, "MPA starts to update bbu, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_BBU;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-
-    /* V2-BMCBBUĵSdrType*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = SDR_TYPE_BBU0;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 1) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_BBU1;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 2) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_BBU2;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 3) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_BBU3;
-        }
-    }            
-
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-
-}
-
-/******************************************************************************
-*     : MPAIntf_UpdatePowerStart
-*   : Powerʼ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ    :
-* 1.      : 2017315
-*         : limingjiang/00400933
-*   ޸  : AR-0000261890-003-007DMIֵ֧ԴFWܡ
-******************************************************************************/
-OSP_S32 MPAIntf_UpdatePowerStart(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 156, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_POWER;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-
-    /* V2-BMCPOWERĵSdrType*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        MpaCmd.SdrType = MPAIntf_FruidToUpgradeType(MpaCmd.FruId);
-    }            
-
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-    DRV_MPA_TRACE(DRV_LOG_INFO, 157,
-        "MPA starts to update power,id:0x%llx devframe:0x%x ret:%d.",
-            DriverId, MpaAddr->DevFrame, RetVal);
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdatePCIE8796Start
- *   : 87963
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201437
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdatePCIE8796Start(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 158, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 159, "MPA starts to update pcie8796, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_CONFIGCHIP;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = UPGRADE_TYPE_8796;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-}
-
-
-/******************************************************************************
-*     : MPAIntf_UpdateFanCtrlStart
-*   : FanCtrlʼ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ    :
-* 1.      : 2017325
-*         : limingjiang/00400933
-*   ޸  :DMIַ֧ȿưFWܡ
-******************************************************************************/
-OSP_S32 MPAIntf_UpdateFanCtrlStart(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 156, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_FANCTRL;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_BMC;/* BMC̶ʹôֵʶȿư*/
-
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-    DRV_MPA_TRACE(DRV_LOG_INFO, 157,
-        "MPA starts to update fanctrl,id:0x%llx devframe(0x%x) ret:%d.",
-        DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, RetVal);
-    return RetVal;
-}
-
-/******************************************************************************
-*     : MPAIntf_UpdateVrmStart
-*   : VRM step3:ʼ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ  :
-* 1.    : 2017329
-*       : limingjiang/00400933
-*   ޸: ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_UpdateVrmStart(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 164, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_VRM;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = UPGRADE_TYPE_VR;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdateConfigChipStart
- *   : оƬʼ8796724638717DMA retimer
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014112
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateConfigChipStart(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    OSP_U8 DeviceId = DAL_ELEMENT_NO(DriverId);
-
-    if (NULL == EnclAddr)
-    {
-        return DRV_RETURN_ERROR;
-    }
-
-    /*תid·*/
-    switch (DeviceId)
-    {
-        case 0:
-        case 1:
-            return MPAIntf_UpdatePCIE8796Start(EnclAddr, DriverId);
-        case 2:
-        case 3:
-            return MPAIntf_UpdatePCIE8717Start(EnclAddr, DriverId - 2);
-        case 4:
-            return MPAIntf_UpdateDmaRetimerStart(EnclAddr, DriverId - 4);
-        case 5:
-        case 6:
-        case 7:
-        case 8:
-        case 9:
-        case 10:
-        case 11:
-        case 12:
-        case 13:
-        case 14:
-            /* 5~14ΪVRоƬdeviceID */
-            return MPAIntf_UpdateVrmStart(EnclAddr, DriverId - 5);
-        default:
-            return RETURN_INVALID;
-    }
-
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdateSATA72463Start
- *   : SATA72463 step3:ʼ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014112
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateSATA72463Start(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 160, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 161, "MPA starts to update sata72463, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_SATA72463;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = UPGRADE_TYPE_SATA72463;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-
-}
-
-
-
- /******************************************************************************
- *     : MPAIntf_UpdatePCIE8717Start
- *   : PCIE8717 step3:ʼ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014112
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdatePCIE8717Start(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 162, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 163, "MPA starts to update pcie8717, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_PCIE8717;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = UPGRADE_TYPE_PCIE8717;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdateDmaRetimerStart
- *   : PCIE8796 step3:ʼ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014112
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdateDmaRetimerStart(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 164, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 165, "MPA starts to update dma retimer, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_DMARETIMER;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = UPGRADE_TYPE_DMARETIMER;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*׼ʼַǲѯ贫data indata out buffer*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetMgmtUpgradeState
- *   : ѯоƬ״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             UpgradeState  ״̬
- *   : UpgradeState  ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013113
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetMgmtUpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U8 Status = 0;
-
-    if ((NULL == EnclAddr) || (NULL == UpgradeState))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 166, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_MGMT;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-
-    /* ѯ״̬ʱתFruId*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = SDR_TYPE_BMC;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_SMM_A_BMC;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_SMM_B_BMC;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_FAN_CTRLBOARD, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_BMC;
-        }
-
-    }
-    
-    MpaCmd.WtRd = MPA_READ;
-    
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&Status);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return RetVal;
-    }
-
-    *UpgradeState = (DMI_UPGRADE_STAT_E)Status;
-    return RetVal;
-    
-}                           
-
-/******************************************************************************
- *     : MPAIntf_GetCpldUpgradeState
- *   : ѯCPLD״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             UpgradeState  ״̬
- *   : UpgradeState  ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013113
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetCpldUpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U8 Status = 0;
-
-    if ((NULL == EnclAddr) || (NULL == UpgradeState))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 167, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_CPLD;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);//qintianyi notes: ܿOSP_U32ҪȷӰ
-
-    /* ѯ״̬ʱתFruId*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = SDR_TYPE_CPLD;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_SMM_A_CPLD;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_SMM_B_CPLD;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_FAN_CTRLBOARD, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_CPLD;
-        }
-        else if (DAL_FRU_LOGIC_TYPE_MATCH(DAL_FRU_ID_TO_LOGIC_TYPE(MpaCmd.FruId), DMI_LOGIC_FRU_SHARE_IOCARD))
-        {
-            MpaCmd.SdrType = UPGRADE_TYPE_BIGCARD_0_CPLD + DAL_FRU_ID_TO_SLOT(MpaCmd.FruId);
-        }
-
-    }
-    /*12G֮ܿĿ򣬷-5֧*/
-    else if (DRV_FRAMEMODEL_12GSAS_CTL_4U72 != MpaAddr->DevFrame)
-    {
-        return RETURN_INVALID;
-    }
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&Status);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return RetVal;
-    }
-
-    *UpgradeState = (DMI_UPGRADE_STAT_E)Status;
-    return RetVal;
-    
-}                           
-
-
-/******************************************************************************
- *     : MPAIntf_GetFpgaUpgradeState
- *   : ѯFPGA״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             UpgradeState  ״̬
- *   : UpgradeState  ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013113
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFpgaUpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *UpgradeState)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == UpgradeState))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 168, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_FPGA;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)UpgradeState);    
-    
-}                           
-
-/******************************************************************************
- *     : MPAIntf_GetBbuUpgradeState
- *   : ѯBBU״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             UpgradeState  ״̬
- *   : UpgradeState  ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013126
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuUpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == UpgradeState))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 169, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_BBU;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DMI_UPGRADE_STAT_E);
-
-    /* V2-BMCBBUĵSdrType*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.SdrType = SDR_TYPE_BBU0;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 1) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_BBU1;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 2) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_BBU2;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 3) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDR_TYPE_BBU3;
-        }
-    }
-
-    MpaCmd.WtRd = MPA_READ;
-/*qty v2c01*/
-    if (DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddr->DevFrame)
-    {
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)UpgradeState);
-    }
-    else
-    {
-        OSP_U8 Status = 0;
-        MpaCmd.BufLen = sizeof(OSP_U8);
-        
-        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&Status);
-        if(DRV_RETURN_OK != RetVal)
-        {
-            return RetVal;
-        }
-
-        *UpgradeState = (DMI_UPGRADE_STAT_E)Status;
-        return RetVal;
-    }
-}
-
-/******************************************************************************
-*     : MPAIntf_GetPowerUpgradeState
-*   : ѯPOWER״̬
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId ID ͡FRUIDDEVICE IDϢ   
-*             UpgradeState  ״̬
-*   : UpgradeState  ״̬
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ  :
-* 1.    : 2017315
-*       : limingjiang/00400933
-* ޸  : AR-0000261890-003-007DMIֵ֧ԴFWܡ
-******************************************************************************/
-OSP_S32 MPAIntf_GetPowerUpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == UpgradeState))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 169, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_POWER;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DMI_UPGRADE_STAT_E);
-
-    /* V2-BMCPOWERĵSdrType*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        MpaCmd.SdrType = MPAIntf_FruidToUpgradeType(MpaCmd.FruId);
-    }
-
-    MpaCmd.WtRd = MPA_READ;
-
-    if (DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddr->DevFrame)
-    {
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)UpgradeState);
-    }
-    else
-    {
-        OSP_U8 Status = 0;
-        MpaCmd.BufLen = sizeof(OSP_U8);
-        
-        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&Status);
-        DRV_MPA_TRACE(DRV_LOG_INFO, 508, "EnclAddr:%p DriverId:%llx, ret:%d, state:%d.",
-            EnclAddr, DriverId, RetVal, Status);
-        if(DRV_RETURN_OK != RetVal)
-        {
-            return RetVal;
-        }
-
-        *UpgradeState = (DMI_UPGRADE_STAT_E)Status;
-        return RetVal;
-    }
-}                           
-
- /******************************************************************************
- *     : MPAIntf_GetPCIE8796UpgradeState
- *   : ѯ8796״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             UpgradeState  ״̬
- *   : UpgradeState  ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201437
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPCIE8796UpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == UpgradeState))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 170, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_PCIECHIP;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DMI_UPGRADE_STAT_E);
-    MpaCmd.WtRd = MPA_READ;
-    MpaCmd.SdrType = UPGRADE_TYPE_8796;
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)UpgradeState);
-}
-
-/******************************************************************************
-*     : MPAIntf_GetFanCtrlUpgradeState
-*   : ѯFanCtrl״̬
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId ID ͡FRUIDDEVICE IDϢ   
-*             UpgradeState  ״̬
-*   : UpgradeState  ״̬
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ  :
-* 1.    : 2017325
-*       : limingjiang/00400933
-* ޸  :DMIַ֧ȿưFWܡ
-******************************************************************************/
-OSP_S32 MPAIntf_GetFanCtrlUpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U8 Status = 0;
-
-    if ((NULL == EnclAddr) || (NULL == UpgradeState))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 169, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_FANCTRL;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_BMC;/* BMC̶ʹôֵʶȿư*/
-    MpaCmd.BufLen = sizeof(Status);
-
-    MpaCmd.WtRd = MPA_READ;
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&Status);
-    DRV_MPA_TRACE(DRV_LOG_INFO, 508, "EnclAddr:%p DriverId:%llx, ret:%d, state:%d.",
-        EnclAddr, DriverId, RetVal, Status);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return RetVal;
-    }
-
-    *UpgradeState = (DMI_UPGRADE_STAT_E)Status;
-    return RetVal;
-}
- /******************************************************************************
- *     : MPAIntf_GetPCIE8717UpgradeState
- *   : ѯ8717״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             UpgradeState  ״̬
- *   : UpgradeState  ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201437
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPCIE8717UpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == UpgradeState))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 171, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_PCIECHIP;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DMI_UPGRADE_STAT_E);
-    MpaCmd.WtRd = MPA_READ;
-    MpaCmd.SdrType = UPGRADE_TYPE_PCIE8717;
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)UpgradeState);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetDmaRetimerUpgradeState
- *   : ѯdma״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             UpgradeState  ״̬
- *   : UpgradeState  ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201437
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetDmaRetimerUpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == UpgradeState))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 172, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_PCIECHIP;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DMI_UPGRADE_STAT_E);
-    MpaCmd.WtRd = MPA_READ;
-    MpaCmd.SdrType = UPGRADE_TYPE_DMARETIMER;
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)UpgradeState);
-
-}
-
-/******************************************************************************
-*     : MPAIntf_GetVrmUpgradeState
-*   : ѯvrm״̬
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId        ID ͡FRUIDDEVICE IDϢ   
-*             UpgradeState  ״̬
-*   : UpgradeState  ״̬
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ  :
-* 1.    : 2017329
-*       : limingjiang/00400933
-*   ޸: ֧VRM
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetVrmUpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == UpgradeState))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 172, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_VRM;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DMI_UPGRADE_STAT_E);
-    MpaCmd.WtRd = MPA_READ;
-    MpaCmd.SdrType = UPGRADE_TYPE_VR;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)UpgradeState);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetConfigChipUpgradeState
- *   : ѯ87968717retimer״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             UpgradeState  ״̬
- *   : UpgradeState  ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201437
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetConfigChipUpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
-{
-    OSP_U8 DeviceId = DAL_ELEMENT_NO(DriverId);
-
-    /*תid·*/
-    switch (DeviceId)
-    {
-        case 0:
-        case 1:
-            return MPAIntf_GetPCIE8796UpgradeState(EnclAddr, DriverId, UpgradeState);
-        case 2:
-        case 3:
-            return MPAIntf_GetPCIE8717UpgradeState(EnclAddr, DriverId - 2, UpgradeState);
-        case 4:
-            return MPAIntf_GetDmaRetimerUpgradeState(EnclAddr, DriverId - 4, UpgradeState);
-        case 5:
-        case 6:
-        case 7:
-        case 8:
-        case 9:
-        case 10:
-        case 11:
-        case 12:
-        case 13:
-        case 14:
-            /* 5~14ΪVRоƬdeviceID */
-            return MPAIntf_GetVrmUpgradeState(EnclAddr, DriverId - 5, UpgradeState);
-        default:
-            return RETURN_INVALID;
-    }
-}
-
-/******************************************************************************
-*     : MPAIntf_GetVrmUpGradeRestCnt
-*   : ѯԴǷ֧
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             Cnt  ʣ
-*   : Cnt  ʣ
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-* 1.    : 2017329
-*       : limingjiang/00400933
-*  ޸ : ֧VRM
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetVrmUpGradeRestCnt(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32* Cnt)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U8 LocalCnt[4] = {0};
-
-    if ((NULL == EnclAddr) || (NULL == Cnt))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 169, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Cnt);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_GET_RESTCNT_VRM;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = UPGRADE_TYPE_VR;
-
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)LocalCnt);
-    /* ԼС˸ʽ͹ */
-    *Cnt = LocalCnt[0] | (LocalCnt[1] << 8) |
-           (LocalCnt[2] << 16) | (LocalCnt[3] << 24);
-    DRV_MPA_TRACE(DRV_LOG_INFO, 508, "EnclAddr:%p driverid:%llx, ret:%d, count:%d",
-        EnclAddr, DriverId, RetVal, *Cnt);
-
-    return RetVal;
-}
-
-/******************************************************************************
-*     : MPAIntf_GetConfigChipUpgradeRestCnt
-*   : ѯʣ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId        ID ͡FRUIDDEVICE IDϢ
-*             Cnt  ʣ
-*   : Cnt  ʣ
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ  :
-* 1.    : 2017329
-*       : limingjiang/00400933
-*   ޸: ֧VRM
-******************************************************************************/
-OSP_S32 MPAIntf_GetConfigChipUpgradeRestCnt(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Cnt)
-{
-    OSP_U8 DeviceId = DAL_ELEMENT_NO(DriverId);
-
-    /*תid·*/
-    switch (DeviceId)
-    {
-        case 5:
-        case 6:
-        case 7:
-        case 8:
-        case 9:
-        case 10:
-        case 11:
-        case 12:
-        case 13:
-        case 14:
-            /* 5~14ΪVRоƬdeviceID */
-            return MPAIntf_GetVrmUpGradeRestCnt(EnclAddr, DriverId - 5, Cnt);
-        default:
-            break;
-    }
-    return RETURN_INVALID;
-}
-
- /******************************************************************************
- *     : MPAIntf_GetMgmt8307UpgradeState
- *   : ѯ8307״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             UpgradeState  ״̬
- *   : UpgradeState  ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201433
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetMgmt8307UpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == UpgradeState))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 173, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_8307;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DMI_UPGRADE_STAT_E);
-    MpaCmd.WtRd = MPA_READ;
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)UpgradeState);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetMgmt8307SupportUpGrade
- *   : ѯ8307Ƿ֧
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Support   Ƿ֧TRUE:֧֣FALSE:֧
- *   : Support   Ƿ֧TRUE:֧֣FALSE:֧
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201435
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetMgmt8307SupportUpGrade(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_BOOL* Support)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Support))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 174, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Support);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_8305INFO_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_BOOL);
-    MpaCmd.WtRd = MPA_READ;
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Support);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPowerSupportUpGrade
- *   : ѯԴǷ֧
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Support   Ƿ֧TRUE:֧֣FALSE:֧
- *   : Support   Ƿ֧TRUE:֧֣FALSE:֧
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- * 1.    : 2017315
- *       : limingjiang/00400933
- *  ޸ : AR-0000261890-003-007DMIֵ֧ԴFWܡ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerSupportUpGrade(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_BOOL* Support)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U8 Status = 0;
-
-    if ((NULL == EnclAddr) || (NULL == Support))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 169, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Support);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    MpaCmd.Cmd = DRV_CMD_GET_POWER_UPGRADE_SUPPORT;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_BOOL);
-
-    /* V2-BMCPOWERĵSdrType*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        MpaCmd.SdrType = MPAIntf_FruidToUpgradeType(MpaCmd.FruId);
-    }
-
-    MpaCmd.WtRd = MPA_READ;
-
-    MpaCmd.BufLen = sizeof(OSP_U8);
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&Status);
-    DRV_MPA_TRACE(DRV_LOG_INFO, 508, "EnclAddr:%p driverid:%llx, ret:%d, state:%d",
-        EnclAddr, DriverId, RetVal, Status);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return RetVal;
-    }
-
-    *Support = (OSP_BOOL)Status;
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetFpgaVersion
- *   : ȡFPGA汾
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             FwVer[DMI_FW_VER_LEN]  汾Ϣ
- *   : FwVer[DMI_FW_VER_LEN]  汾Ϣ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131026
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFpgaVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *FwVer, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 VersionBuffer[DMI_FW_VER_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == FwVer) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 175, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FwVer, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_VERSION_GET_FPGA;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_FW_VER_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 176, "MPA GetFPGAVersion return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)FwVer, (OSP_U32)(OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VersionBuffer, (OSP_U32)(OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-
- 
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetMgmtVersion
- *   : ȡоƬ汾
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             FwVer  汾Ϣbuffer
-               Length 汾Ϣ
- *   : FwVer  汾Ϣ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131026
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetMgmtVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *FwVer, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 VersionBuffer[DMI_FW_VER_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == FwVer) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 177, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FwVer, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_VERSION_GET_MGMT;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_FW_VER_LEN;
-    MpaCmd.SdrType = SDRTYPE_MGMTCPU_SOFTVERSION;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 178, "MPA GemgmtVersion return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)FwVer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length));
-
-    return RetVal;
-   
-}
-
- /******************************************************************************
- *     : MPAIntf_GetCpldVersion
- *   : ȡcpld汾
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             FwVer[DMI_FW_VER_LEN]  汾Ϣ
- *   : FwVer[DMI_FW_VER_LEN]  汾Ϣ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131026
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetCpldVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *FwVer, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 VersionBuffer[DMI_FW_VER_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;   
-    OSP_U32 FruId = DAL_FRU_ID(DriverId);
-    
-    if ((NULL == EnclAddr) || (NULL == FwVer) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 179, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FwVer, Length);
-        return RetVal;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    /* BEGIN: Added by shufan 00204084, 2014/8/15  ⵥ:c02, ޸ԭ:12g hds */
-    if (TRUE == MPA_If12gHdsCtrlBoardId(MpaAddr->DevFrame, FruId))
-    {
-        return MPA_Get12gHdsCommonInfo((DAL_MPA_ADDR_S *)EnclAddr,
-                                        DriverId,//עu64 driver id
-                                        SAS_12G_CMD_GET_CTRL_CPLDVERSION,
-                                        (OSP_VOID *)FwVer, 
-                                        (OSP_U16)min(DMI_FW_VER_LEN, (OSP_S32)Length));
-    }
-    /* END: Added by shufan 00204084, 2014/8/15  ⵥ:c02 */
-
-
-    MpaCmd.Cmd = DRV_CMD_VERSION_GET_CPLD;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_FW_VER_LEN;
-    MpaCmd.SdrType = SDRTYPE_CPLD_SOFTVERSION;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 180, "MPA GecpldVersion return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)FwVer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-
- 
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPeerCpldVersion
- *   : ѯ԰cpld汾
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             PeerSlot  ԰λ
- *             FwVer     汾
- *             Length    
- *   : FwVer     汾
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014412
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPeerCpldVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 PeerSlot, OSP_S8 *FwVer, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S8 VersionBuffer[DMI_FW_VER_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == FwVer) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 181, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FwVer, Length);
-        return RetVal;
-    }
-
-    (OSP_VOID)PeerSlot;
-    
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    /*ֻsesָ֧ýӿ*/
-    if ((DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame) || (MpaAddr->DevFrame > DRV_FRAMEMODEL_12GSAS_EXP_END))
-    {
-        return RETURN_INVALID;
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_VERSION_GET_CPLD_PEER;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_FW_VER_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 182, "MPA GetPeerCpldVersion return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)FwVer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-
- 
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPCIE8796Version
- *   : ȡPEX87968717retimer汾ͨdeviceid
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             *FwVer  汾Ϣ
- *             Length  汾Ϣ
- *   : *FwVer  汾Ϣ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014111
- *           : shufan 204084
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPCIE8796Version(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *FwVer, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 VersionBuffer[DMI_FW_VER_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == FwVer) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 183, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FwVer, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_PCIE8796_VERSION;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_FW_VER_LEN;
-    MpaCmd.SdrType = UPGRADE_TYPE_8796;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 184, "MPA GetPCIE8796Version return error.");
-        return RetVal;
-    }
-
-    /*·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)FwVer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-
- 
-}
-
- /******************************************************************************
- *     : MPAIntf_GetSATA72463Version
- *   : ȡSATA72463汾
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             *FwVer  汾Ϣ
- *             Length  汾Ϣ
- *   : *FwVer  汾Ϣ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014111
- *           : shufan 204084
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetSATA72463Version(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *FwVer, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 VersionBuffer[DMI_FW_VER_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == FwVer) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 185, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FwVer, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_SATA72463_VERSION;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_FW_VER_LEN;
-    MpaCmd.SdrType = UPGRADE_TYPE_SATA72463;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 186, "MPA GetSATA72463Version return error.");
-        return RetVal;
-    }
-
-    /*·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)FwVer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-
- 
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetPCIE8717Version
- *   : ȡPCIE8717汾8717ͨdeviceid
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             *FwVer  汾Ϣ
- *             Length  汾Ϣ
- *   : *FwVer  汾Ϣ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014111
- *           : shufan 204084
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPCIE8717Version(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *FwVer, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 VersionBuffer[DMI_FW_VER_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == FwVer) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 187, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FwVer, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_PCIE8717_VERSION;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_FW_VER_LEN;
-    MpaCmd.SdrType = UPGRADE_TYPE_PCIE8717;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 188, "MPA GetPCIE8717Version return error.");
-        return RetVal;
-    }
-
-    /*·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)FwVer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length), 
-    (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-
- 
-}
-
- /******************************************************************************
- *     : MPAIntf_GetDmaRetimerVersion
- *   : ȡDmaRetimer汾
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             *FwVer  汾Ϣ
- *             Length  汾Ϣ
- *   : *FwVer  汾Ϣ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014111
- *           : shufan 204084
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetDmaRetimerVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *FwVer, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 VersionBuffer[DMI_FW_VER_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == FwVer) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 189, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FwVer, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_DMARETIMER_VERSION;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_FW_VER_LEN;
-    MpaCmd.SdrType = UPGRADE_TYPE_DMARETIMER;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 190, "MPA GetDmaRetimerVersion return error.");
-        return RetVal;
-    }
-
-    /*·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)FwVer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-}
-
-/******************************************************************************
-*     : MPAIntf_GetDVrmVersion
-*   : ȡDmaRetimer汾
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ
-*             *FwVer  汾Ϣ
-*             Length  汾Ϣ
-*   : *FwVer  汾Ϣ
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ  :
-* 1.    : 2017329
-*       : limingjiang/00400933
-*   ޸: ֧VRM
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetDVrmVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *FwVer, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 VersionBuffer[DMI_FW_VER_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == FwVer) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 189, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FwVer, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_VRM_FW_VERSION_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_FW_VER_LEN;
-    MpaCmd.SdrType = UPGRADE_TYPE_VR;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_INFO, 190, "Get vrm chip version fail.");
-        return RetVal;
-    }
-
-    /*·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)FwVer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPCIEChipVersion
- *   : pcie汾
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             *FwVer  汾Ϣ
- *             Length  汾Ϣ
- *   : *FwVer  汾Ϣ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201437
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPCIEChipVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *FwVer, OSP_U32 Length)
-{
-    OSP_U8 DeviceId = DAL_ELEMENT_NO(DriverId);
-
-    /*תid·*/
-    switch (DeviceId)
-    {
-        case 0:
-        case 1:
-            return MPAIntf_GetPCIE8796Version(EnclAddr, DriverId, FwVer, Length);
-        case 2:
-        case 3:
-            return MPAIntf_GetPCIE8717Version(EnclAddr, DriverId - 2, FwVer, Length);
-        case 4:
-            return MPAIntf_GetDmaRetimerVersion(EnclAddr, DriverId - 4, FwVer, Length);
-        case 5:
-        case 6:
-        case 7:
-        case 8:
-        case 9:
-        case 10:
-        case 11:
-        case 12:
-        case 13:
-        case 14:
-            /* 5~14ΪVRоƬdeviceID */
-            return MPAIntf_GetDVrmVersion(EnclAddr, DriverId - 5, FwVer, Length);
-        default:
-            return RETURN_INVALID;
-    }
-}
-
- /******************************************************************************
- *     : MPAIntf_GetMgmt8307Version
- *   : 8307汾
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Version   8307汾
- *             Length     8307汾
- *   : Version   8307汾
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201433
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetMgmt8307Version(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Version, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 VersionBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Version) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 191, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Version, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_MGMT_8307_VERSION;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 192, "MPA GetMgmt8307Version return error.");
-       return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Version, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-
-    return RetVal;
-}
- 
- /******************************************************************************
- *     : MPAIntf_GetHardWareVersion
- *   : ѯFRUӲ汾
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId   FRU ID,U32DRIVER ID
- *             HwVer  汾Ϣbuffer
-               Length 汾Ϣ
- *   : HwVer  汾Ϣbuffer
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131023
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetHardWareVersion(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_S8 *HwVer, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 VersionBuffer[DMI_HARDWARE_VER_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_MPA_ADDR_S * MpaAddr = NULL;
-    OSP_U8 LogicTypeMatch = 0;
-    OSP_U32 FruType = 0;
-
-    if ((NULL == EnclAddr) || (NULL == HwVer) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 193, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, HwVer, Length);
-        return RetVal;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr; 
-
-    /* BEGIN: Added by qintianyi 90005776, 2014/8/5  ⵥ:c02, ޸ԭ:12g hds */
-    if (TRUE == MPA_If12gHdsCtrlBoardId(MpaAddr->DevFrame, FruId))
-    {
-        return MPA_Get12gHdsCommonInfo((DAL_MPA_ADDR_S *)EnclAddr,
-                                        (OSP_U64)DAL_BUILD_DEVICE_ID((OSP_U64)0, (OSP_U64)0, (OSP_U64)FruId, (OSP_U64)0),//עu64 driver id
-                                        SAS_12G_CMD_GET_CTRL_HWVER,
-                                      (OSP_VOID *)HwVer, 
-                                        (OSP_U16)min(DMI_HARDWARE_VER_LEN, (OSP_S32)Length));
-    }
-    /* END: Added by qintianyi 90005776, 2014/8/5  ⵥ:c02 */
-
-    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
-    LogicTypeMatch = DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_BBU);
-    if ((LogicTypeMatch)
-        &&(DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddr->DevFrame)
-        && (MpaAddr->DevFrame > DRV_FRAMEMODEL_V1_END))
-    {
-        MpaCmd.Cmd = DRV_CMD_GET_BBU_HW_VESION;
-        MpaCmd.FruId = FruId;
-        MpaCmd.DeviceId = 0;
-        MpaCmd.BufLen = DMI_HARDWARE_VER_LEN;
-        MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-        MpaCmd.WtRd = MPA_READ;
-    }
-    else
-    {
-        MpaCmd.Cmd = DRV_CMD_VERSION_GET;
-        MpaCmd.FruId = FruId;
-        MpaCmd.DeviceId = 0;
-        MpaCmd.BufLen = DMI_HARDWARE_VER_LEN;
-        MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-        MpaCmd.WtRd = MPA_READ;
-    }
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)HwVer, (OSP_U32)min(DMI_HARDWARE_VER_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_HARDWARE_VER_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-   
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPeerHwVer
- *   : ѯ԰pcb汾
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId   FRU ID,U32DRIVER ID
- *             PeerSlot  ԰λ
- *             HwVer  汾Ϣbuffer
- *             Length    
- *   : HwVer  汾Ϣbuffer
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014411
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPeerHwVer(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 PeerSlot, OSP_S8 *HwVer, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S8 VersionBuffer[DMI_HARDWARE_VER_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == HwVer) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 195, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, HwVer, Length);
-        return RetVal;
-    }
-    
-    (OSP_VOID)PeerSlot;
-    
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    /*ֻsesָ֧ýӿ*/
-    if ((DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame) || (MpaAddr->DevFrame > DRV_FRAMEMODEL_12GSAS_EXP_END))
-    {
-        return RETURN_INVALID;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_VERSION_GET_PEER_PCB;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = DMI_HARDWARE_VER_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 196, "MPA GetPeerHwVer return error 0x%x.", RetVal);
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)HwVer, (OSP_U32)min(DMI_HARDWARE_VER_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_HARDWARE_VER_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_GetDeviceHardWareVersion
- *   : ѯFRUӲ汾(DMA濨ʱ)
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             HwVer  汾Ϣbuffer
-               Length 汾Ϣ
- *   : HwVer  汾Ϣbuffer
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014113
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetDeviceHardWareVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *HwVer, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 VersionBuffer[DMI_HARDWARE_VER_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == HwVer) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 197, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, HwVer, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_VERSION_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_HARDWARE_VER_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 198, "MPA GetDeviceHardWareVersion return error 0x%x.", RetVal);
-        return RetVal;
-    }
-
-    /*·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)HwVer, (OSP_U32)min(DMI_HARDWARE_VER_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_HARDWARE_VER_LEN, (OSP_S32)Length));
-
-    return RetVal;
-}
-
-/******************************************************************************
-*     : MPAIntf_GetBuckleBoardHardWareVersion
-*   : ѯۿӲ汾
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             HwVer  汾Ϣbuffer
-              Length 汾Ϣ
-*   : HwVer  汾Ϣbuffer
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2014430
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetBuckleBoardHardWareVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *HwVer, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 VersionBuffer[DMI_HARDWARE_VER_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == HwVer) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 199, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).",  EnclAddr, HwVer, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BUCKLEBOARD_HW_VERSION;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_HARDWARE_VER_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 200, "%s return error %d.", __FUNCTION__, RetVal);
-        return RetVal;
-    }
-
-    /*·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)HwVer, (OSP_U32)min(DMI_HARDWARE_VER_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_HARDWARE_VER_LEN, (OSP_S32)Length));
-
-    return RetVal;
-}
-
-/******************************************************************************
-*     : MPAIntf_GetBuckleBoardPresent
-*   : ѯۿλź
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             PresentState  λź
-*   : PresentState  λź
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2014430
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetBuckleBoardPresent(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *PresentState)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == PresentState))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 201, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PresentState);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BUCKLEBOARD_EXIST_STATE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PresentState);
-
-}
-
-/******************************************************************************
-*     : MPAIntf_GetBuckleBoardPowerState
-*   : ѯۿpower good״̬
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             Status    ۿpower good״̬
-*   : Status    ۿpower good״̬
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2014430
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetBuckleBoardPowerState(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Status)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Status))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 202, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BUCKLEBOARD_POWER_STATE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status);
-
-}
-
-/******************************************************************************
-*     : MPAIntf_GetBuckleBoardType
-*   : ѯۿ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             Type       ۿ
-*   : Type       ۿ
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2014430
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetBuckleBoardType(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Type)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Type))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 203, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Type);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BUCKLEBOARD_TYPE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Type);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetMgmtMasterSlave
- *   : ȡоƬ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Flag      ӱ־
- *   : Flag      ӱ־
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013118
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetMgmtMasterSlave(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Flag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Flag))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 204, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Flag);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_CHIPSTATUS_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Flag);
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetMgmtDegreeChange
- *   : л
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201443
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetMgmtDegreeChange(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 205, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BMCSTATUS_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetSysKillFlag
- *   : ȡϵͳ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Flag      ӱ־
- *   : Flag      ӱ־
- *   ֵ  : OSP_S32
- * ˵  : ϽӿΪɱģʽ01½ӿcpldΪϵͳӲ12Ҫת
- * 
- * ޸ʷ      :
- *  1.       : 2013119
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetSysKillFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Flag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Flag))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 206, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Flag);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SYS_STATUS_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Flag);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 207, "MPA GetSysKillFlag fail 0x%x.", RetVal);
-        return RetVal;
-    }
-
-    /*cpldֵ1󷵻أע˵*/
-    *Flag -= 1;
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_SetSysKillFlag
- *   : ôϵͳ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Flag      ӱ־
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : ϽӿΪɱģʽ01½ӿcpldΪϵͳӲ12Ҫת
- * 
- * ޸ʷ      :
- *  1.       : 2013119
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetSysKillFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Flag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 208, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return RetVal;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 208, "MPA sts system kill flag(0x%d), devframe(0x%x).", Flag, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-
-    MpaCmd.Cmd = DRV_CMD_SYS_STATUS_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*ֵ1õcpldע˵*/
-    Flag += 1;
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Flag, (OSP_VOID *)NULL);
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetIsoPara
- *   : ѯ޲
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Para      
- *   : Para      
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014117
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetIsoPara(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Para)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Para))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 209, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Para);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_DISABLEPHY_PARAM_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_PHY_ISO_PARA_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Para);
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetIsoPara
- *   : ø
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Type      
- *             Value     ֵ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014118
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetIsoPara(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Type, OSP_U8 Value)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 DataIn[2] = {0, 0};
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 210, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_DISABLEPHY_PARAM_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(Type) + sizeof(Value);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    DataIn[0] = Type;
-    DataIn[1] = Value;
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetMgmtCpuType
- *   : ѯоƬλ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Type      оƬλ
- *   : Type      оƬλ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014117
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetMgmtCpuType(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Type)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    
-    if ((NULL == EnclAddr) || (NULL == Type))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 211, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Type);
-        return DRV_RETURN_ERROR;
-    }
-    
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    if ((DRV_FARMEMODEL_EXP_HDS != MpaAddr->DevFrame)
-         && (DRV_FRAMEMODEL_12GSAS_CTL_4U72 != MpaAddr->DevFrame)
-         && (DRV_FARMEMODEL_12G_EXP_HDS != MpaAddr->DevFrame))
-    {
-        *Type = 0xFF;
-        return DRV_RETURN_OK;
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_CPU_TYPE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Type);
-}
-
- /******************************************************************************
- *     : MPAIntf_SetMgmtReset
- *   : λоƬ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013118
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetMgmtReset(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 212, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_RESET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /**/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-    
-}
- /******************************************************************************
- *     : MPAIntf_GetFrameNumber
- *   : ѯ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId        FRU
- *             FrameNumber      
- *   : FrameNumber           
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131018
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFrameNumber(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U16 *FrameNumber)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == FrameNumber))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 213, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, FrameNumber);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_FRAMENUM_GET;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)FrameNumber);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetFrameNumber
- *   : ÿ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId        FRU
- *             FrameNumber      
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131018
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetFrameNumber(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U16 FrameNumber)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 214, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_FRAMENUM_SET;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&FrameNumber, (OSP_VOID *)NULL);   
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetLedStatus
- *   : ѯled״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             Type       LED
- *             Status      LED״̬
- *   : Status      LED״̬ϸӿĵ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013116
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetLedStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_LIGHT_TYPE_E Type, DMI_LIGHT_STATE_E *Status)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*typeκfru idtarget*/
-    OSP_U32 DataIn[2] = {0, 0};
-    OSP_U8 BmcDataIn[2] = {0, 0};
-    
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Status))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 215, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
-        return DRV_RETURN_ERROR;
-    }
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    MpaCmd.Cmd = DRV_CMD_LED_STATUS_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DMI_LIGHT_STATE_E);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    if (DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddr->DevFrame)
-    {
-        DataIn[0] = (OSP_U32)Type;
-        DataIn[1] = MpaCmd.FruId;
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Status);    
-        
-    }
-    else
-    {
-        BmcDataIn[0] = sizeof(OSP_U8);
-        BmcDataIn[1] = (OSP_U8)Type;
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Status);    
-
-    }
-    
-    
-}                    
-
- /******************************************************************************
- *     : MPAIntf_SetLedStatus
- *   : led״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             Type       LED
- *             Status      LED״̬
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013116
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetLedStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_LIGHT_TYPE_E Type, DMI_LIGHT_STATE_E Status)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*type/fru id/Statustarget*/
-    OSP_U32 DataIn[3] = {0, 0, 0};
-
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 216, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    /* ·led״̬·һδӡһ */
-    DRV_MPA_TRACE(DRV_LOG_INFO, 217, "MPA sets led status, id(0x%llx), type(%d), value(%d), frame mode(%d), host id(0x%x), scsi id(0x%x)..", 
-                    DriverId, Type, Status, MpaAddr->DevFrame, MpaAddr->DevAddr.ScsiAddr.uiHostId, MpaAddr->DevAddr.ScsiAddr.uiScsiId);
-
-    MpaCmd.Cmd = DRV_CMD_LED_STATUS_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(Type) + sizeof(Status);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-    
-    if (MpaAddr->DevFrame < DRV_FRAMEMODEL_V1_END)
-    {
-        DataIn[0] = (OSP_U32)Type;
-        DataIn[1] = MpaCmd.FruId;
-        DataIn[2] = (OSP_U32)Status;
-    }
-    else
-    {
-        DataIn[0] = (OSP_U32)Type;
-        DataIn[1] = (OSP_U32)Status;
-    }
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetTime
- *   : Сϵͳʱ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             Time      ʱ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013119
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetTime(OSP_VOID *EnclAddr, OSP_U64 DriverId, DAL_BMCTIME_S *Time)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DRV_BMCTIME_S OldTime;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    
-    if ((NULL == EnclAddr) || (NULL == Time))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 218, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    OSAL_MemSet_s(&OldTime, sizeof(DRV_BMCTIME_S), INVALID_VALUE8, sizeof(DRV_BMCTIME_S));
-    
-    MpaAddr =(DAL_MPA_ADDR_S *)EnclAddr; 
-    MpaCmd.Cmd = DRV_CMD_TIME_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    if (DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddr->DevFrame)
-    {
-        /* V1õʱ䲻ܱ2000С*/
-        if (Time->Year < MPA_YEAR_2000)
-        {
-            DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 219, 1, 20 * HZ, "Set time param error, set year(%d) is smaller than year 2000.", Time->Year);
-            return DRV_RETURN_ERROR;
-        }
-
-        MpaCmd.BufLen = sizeof(DRV_BMCTIME_S);
-        OldTime.ucYear = (OSP_U8)(Time->Year - MPA_YEAR_2000);
-        OldTime.ucMonth = Time->Month;
-        OldTime.ucDay = Time->Day;
-        OldTime.ucHour = Time->Hour;
-        OldTime.ucMinute = Time->Minute;
-        OldTime.ucSecond = Time->Second;
-        
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&OldTime, (OSP_VOID *)NULL);    
-    }
-    else
-    {
-        MpaCmd.BufLen = sizeof(DAL_BMCTIME_S);
-
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Time, (OSP_VOID *)NULL);    
-    }
-}
-
- /******************************************************************************
- *     : MPAIntf_GetTime
- *   : ѯСϵͳʱ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             Time      ʱ
- *   : Time      ʱ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013119
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetTime(OSP_VOID *EnclAddr, OSP_U64 DriverId, DAL_BMCTIME_S *Time)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    MPA_CMD_INFO_S MpaCmd;
-    DRV_BMCTIME_S OldTime;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Time))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 220, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Time);
-        return DRV_RETURN_ERROR;
-    }
-
-    OSAL_MemSet_s((OSP_VOID *)&OldTime, sizeof(DRV_BMCTIME_S),  INVALID_VALUE8, sizeof(DRV_BMCTIME_S));
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    MpaCmd.Cmd = DRV_CMD_TIME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    if (DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddr->DevFrame)
-    {
-        MpaCmd.BufLen = sizeof(DRV_BMCTIME_S);
-        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&OldTime);
-
-        Time->Year = (OSP_U16)(OldTime.ucYear & 0xFF) + MPA_YEAR_2000;
-        Time->Month = OldTime.ucMonth;
-        Time->Day = OldTime.ucDay;
-        Time->Hour = OldTime.ucHour;
-        Time->Minute = OldTime.ucMinute;
-        Time->Second = OldTime.ucSecond;
-        return RetVal;
-    }
-    else
-    {
-        MpaCmd.BufLen = sizeof(DAL_BMCTIME_S);
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Time);    
-    }
-
-}
-
- /******************************************************************************
- *     : MPAIntf_SetRtcTime
- *   : RTCʱ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId  ID ͡FRUIDDEVICE IDϢ   
- *             Time      ʱ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131212
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetRtcTime(OSP_VOID *EnclAddr, OSP_U64 DriverId, DAL_BMCTIME_S Time)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 221, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_SET_RTC_TIME;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-    MpaCmd.BufLen = sizeof(DAL_BMCTIME_S);
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Time, (OSP_VOID *)NULL);    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetRtcTime
- *   : ѯRTCʱ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             Time      ʱ
- *   : Time      ʱ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131212
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetRtcTime(OSP_VOID *EnclAddr, OSP_U64 DriverId, DAL_BMCTIME_S *Time)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Time))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 222, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Time);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_RTC_TIME;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DAL_BMCTIME_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Time);    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetFramePowerState
- *   : ѯԴ״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId        FRU
- *             FramePowerstate  Դ״̬
- *   : FramePowerstate  Դ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131018
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFramePowerState(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 *FramePowerstate)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == FramePowerstate))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 223, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, FramePowerstate);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_FRAME_POWEROFF_GET;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)FramePowerstate);    
-    
-}                           
-
- /******************************************************************************
- *     : MPAIntf_SetProductConfig
- *   : òƷ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId        FRU
- *             ProductConfig  Ʒ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014218
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetProductConfig(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_PRODUCT_CUSTOM_CONFIG_S *ProductConfig)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == ProductConfig))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 224, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, ProductConfig);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 225, "MPA sets product config, boardcnt(%d), powercnt(%d), fancnt(%d), bbucnt(%d), bigcardcnt(%d), smallcardcnt(%d), mgmtcnt(%d).", 
-        ProductConfig->BoardCount, ProductConfig->PowerCount, ProductConfig->FanCount, ProductConfig->BbuCount, 
-        ProductConfig->BigIntfCount, ProductConfig->SmallIntfCount, ProductConfig->MgmtCount);
-        
-    MpaCmd.Cmd = DRV_CMD_SET_PRODUCT_CONFIG;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DMI_PRODUCT_CUSTOM_CONFIG_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)ProductConfig, (OSP_VOID *)NULL);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetFramePowerOnOff
- *   : üµ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId        FRU
- *             FramePowerCtrl    µ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131018
- *           : 淫
- *    ޸   : ɺ
- *  1.       : 2013114
- *           : qintianyi 90005776
- *    ޸   : ޸ֿ֧ƿͼµ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetFramePowerOnOff(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 FramePowerCtrl)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 226, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-    
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DRV_MPA_TRACE(DRV_LOG_INFO, 227, "MPA sets frame power on or off, id(0x%x), value(%d), devframe(0x%x).", 
-                        FruId, FramePowerCtrl, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-
-    MpaCmd.Cmd = DRV_CMD_SET_ENCL_POWER_ONOFF;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /* V2-BMC: µ, FruIdͳһת0x200·*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
-        /* added by hulinhui 00289393 REASON: DTS2015061611133 ťµboard1ƽACϣĿ״̬һ */
-        if (DAL_NOTIFY_POWER_DOWN_MODE == FramePowerCtrl)
-        {
-            MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_ENCL, 0);
-        }
-        /* ended by hulinhui 00289393*/
-        MpaCmd.DeviceId = 0;
-    }    
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&FramePowerCtrl, (OSP_VOID *)NULL);    
-    
-}                               
-
- /******************************************************************************
- *     : MPAIntf_GetBbuBackupFlag
- *   : ѯϵͳǷ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId        FRU
- *             PowerFlag  Ƿ
- *   : PowerFlag  Ƿ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131219
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuBackupFlag(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 *PowerFlag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == PowerFlag))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 228, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PowerFlag);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_POWER_BACKUP_FLAG;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PowerFlag);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetChipRunMode
- *   : ѯоƬģʽ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             RunMode  ϵͳģʽ:ģʽװģʽֶģʽ 
- *   : RunMode  ϵͳģʽ:ģʽװģʽֶģʽ 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131018
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetChipRunMode(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *RunMode)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == RunMode))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 229, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, RunMode);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_TEST_MODE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)RunMode);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetChipRunMode
- *   : оƬģʽ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             RunMode  ϵͳģʽ:ģʽװģʽֶģʽ 
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131018
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetChipRunMode(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 RunMode)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 230, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 231, "MPA sets chip run mode, id(0x%llx), value(%d).", DriverId, RunMode);
-    MpaCmd.Cmd = DRV_CMD_RUNMODE_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&RunMode, (OSP_VOID *)NULL);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPresentState
- *   : FRUλ״̬ѯ
- *   : EnclAddr   :ϲ·ĵַϢmcutype,scsiַframetype          
- *             FruId         :FRU  
- *             PresentState  :FRUλ״̬ 1:λ0:λ
- *   : PresentState  :FRUλ״̬ 1:λ0:λ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131018
- *           : zhanwenbin 90003961
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPresentState(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 *PresentState)
-{
-#define MPA_SMM400_PRESENT_DEVICEID 0x10
-#define MPA_SMM401_PRESENT_DEVICEID 0x11
-
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == PresentState))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 232, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PresentState);
-        return DRV_RETURN_ERROR;
-    }
-    
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-/* BEGIN: Added by qintianyi 90005776, 2014/8/5  ⵥ:c02, ޸ԭ:12g hds */
-    if (TRUE == MPA_If12gHdsCtrlBoardId(MpaAddr->DevFrame, FruId))
-    {
-        return MPA_Get12gHdsCommonInfo((DAL_MPA_ADDR_S *)EnclAddr,
-                                        (OSP_U64)DAL_BUILD_DEVICE_ID((OSP_U64)0, (OSP_U64)0, (OSP_U64)FruId, (OSP_U64)0),//עu64 driver id
-                                        SAS_12G_CMD_GET_PRESENT,
-                                        (OSP_VOID *)PresentState, 
-                                        sizeof(OSP_U8));
-    }
-/* END: Added by qintianyi 90005776, 2014/8/5  ⵥ:c02 */
-
-    MpaCmd.Cmd = DRV_CMD_EXIST_INFO_GET;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-
-
-    /* V2-BMC: ѯλ, FruIdͳһת0x200, ͨDeviceId*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
-        {
-            MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
-            MpaCmd.DeviceId = MPA_SMM400_PRESENT_DEVICEID;
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
-        {
-            MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
-            MpaCmd.DeviceId = MPA_SMM401_PRESENT_DEVICEID;
-        }        
-    }    
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PresentState);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPeerPresentState
- *   : ѯԿλ
- *   : EnclAddr   :ϲ·ĵַϢmcutype,scsiַframetype          
- *             FruId         :FRU  
- *             PresentState  :FRUλ״̬ 1:λ0:λ
- *   : PresentState  :FRUλ״̬ 1:λ0:λ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201414
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPeerPresentState(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 PeerSlot, OSP_U8 *PresentState)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U32 SlotId = 0xFF;
-
-    if ((NULL == EnclAddr) || (NULL == PresentState))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 233, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PresentState);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    /*ֻsesָ֧ýӿڣưbsp*/
-    if ((DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame) || (MpaAddr->DevFrame > DRV_FRAMEMODEL_12GSAS_EXP_END))
-    {
-        return RETURN_INVALID;
-    }
-
-    /*鱾id*/
-    RetVal = MPAIntf_GetBoardSlotId(EnclAddr, DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0), &SlotId);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 234, "MPA GetPeerPresentState GetBoardSlotId Fail %d.", RetVal);
-        return RetVal;
-    }
-
-    /*ֻ˫أ0xFF֧mmlѯ*/
-    if ((PeerSlot > MPA_SLOT_B) && (0xFF != PeerSlot))
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 235, "MPA GetPeerPresentState Peer Id Err %d.", PeerSlot);
-        return RETURN_INVALID;
-    }
-    if (SlotId > MPA_SLOT_B)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 236, "MPA GetPeerPresentState Local Id Err %d.", SlotId);
-        return RETURN_INVALID;        
-    }
-    if (PeerSlot == SlotId)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 237, "MPA GetPeerPresentState Id Same %d.", SlotId);
-        return RETURN_INVALID;                
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_EXIST_INFO_GET_PEER;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PresentState);
-}
-
- /******************************************************************************
- *     : MPAIntf_SetFruPowerCtrl
- *   : fruԴ״̬
- *   : EnclAddr  :ϲ·ĵַϢmcutype,scsiַframetype          
- *             FruId     :FRU  
- *             Opcode    : fruԴ״̬
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014210
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetFruPowerCtrl(OSP_VOID *EnclAddr, OSP_U32 FruId, DAL_POWER_STATE_E Opcode)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 Value = 0;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 238, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-    
-    DRV_MPA_TRACE(DRV_LOG_INFO, 239, "MPA sets fru power, id(0x%x), value(%d), devframe(0x%x).", 
-                        FruId, Opcode, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-
-    MpaCmd.Cmd = DRV_CMD_SET_FRU_POWER;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(Value);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    if ((DRV_FRAMEMODEL_12GSAS_EXP_END < ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame)
-        && (DRV_FRAMEMODEL_1710BMC_END > ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame))
-    {
-        MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_RESET_T4;
-    }
-    MpaCmd.WtRd = MPA_WRITE;
-
-    Value = (OSP_U8)Opcode;
-
-    /* BEGIN: Added by shipin, 2015-8-6 20:45:20, ⵥ:DTS2015080608283, ޸ԭ: SDAźűסĹϹģģT4ӿڿйģ鶼Ϊδƣڹɢ*/
-    if ((DRV_FRAMEMODEL_V1_END < ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame)
-        && (DRV_FRAMEMODEL_12GSAS_EXP_END > ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame))
-    {
-        Value = (OSP_U8)(FruId & 0xFF);
-    }
-    /* END: Added by shipin, 2015-8-6 20:45:20 */
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Value, (OSP_VOID *)NULL);
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetAllAlarm
- *   : ѯԭdev澯
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *             AlarmStatus : ԭ澯 
- *   : AlarmStatus : ԭ澯 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201412
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetAllAlarm(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_ALL_ALARM_S *AlarmStatus)
-{
-    DRV_CMD_S DevCmd;
-    DRV_ADDR_DOWNINFO_S DevAddr;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U8 DevId = 0;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == AlarmStatus))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 240, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, AlarmStatus);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    OSAL_MemSet_s((OSP_U8 *)&DevCmd, sizeof(DevCmd), 0, sizeof(DevCmd));
-    OSAL_MemSet_s((OSP_U8 *)&DevAddr, sizeof(DevAddr), 0, sizeof(DevAddr));
-
-    DevId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    if (DevId > 1)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 241, "MPA finds device id(%d) is error.", DevId);
-        return DRV_RETURN_ERROR;
-    }
-    
-    RetVal = MPA_GetV1AddrPara((DAL_MPA_ADDR_S *)EnclAddr, &DevAddr);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return RetVal;
-    }
-    
-    DevCmd.uiCmd = DRV_CMD_ALL_ALARM_GET;
-    DevCmd.ucId = DevId;
-    RetVal = DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&AlarmStatus->stFruAlarm);
-    
-    DevCmd.uiCmd = DRV_CMD_SINGLE_ALARM_GET;
-
-    /*Կظ澯0x11ʼʹDevId*0x10ʽѯԿظ澯*/
-    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_TEMP + DevId * 0x10);
-    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&AlarmStatus->stTempratureAlarm);
-    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_BOARD + DevId * 0x10);
-    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&AlarmStatus->stCtlboardAlarm);
-    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_IOCARD + DevId * 0x10);
-    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&AlarmStatus->stIocardAlarm);
-    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_BBOARD + DevId * 0x10);
-    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&AlarmStatus->stBackboardAlarm);
-    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_POWER + DevId * 0x10);
-    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&AlarmStatus->stPowerAlarm);
-    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_BBU + DevId * 0x10);
-    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&AlarmStatus->stBbuAlarm);
-    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_FAN + DevId * 0x10);
-    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&AlarmStatus->stFanAlarm);
-
-    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_OOPCOM + DevId * 0x10);
-    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&AlarmStatus->stOppComAlarm);
-    
-    /* V1-BMCû澯*/
-    if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame)
-    {
-        return RetVal;
-    }
-    
-    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_DISK + DevId * 0x10);
-    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)AlarmStatus->astHarddiskAlarm);
-    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_EXPPORT + DevId * 0x10);
-    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)AlarmStatus->stExpPortAlarm);
-
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_GetAlarmSource
- *   : ѯses澯Դ
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *             AlarmStatus : ses澯Դ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201427
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetAlarmSource(OSP_VOID *EnclAddr, OSP_U64 DriverId, SES_R7CTL_ALARM_INFO_ARRAY_S *AlarmStatus)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == AlarmStatus))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 242, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, AlarmStatus);
-        return DRV_RETURN_ERROR;
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_CUR_ALARM_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(SES_R7CTL_ALARM_INFO_ARRAY_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)AlarmStatus);    
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetAlarmName
- *   : ѯ澯
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *             Name        : 澯
- *             Length      : 澯Ƴ
- *   : Name        : 澯
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131128
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetAlarmName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    MPA_ALARM_TABLE_S TableInfo;
-    OSP_S8 NameBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 243, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-        return DRV_RETURN_ERROR;
-    }
-    
-    OSAL_MemSet_s(NameBuffer, sizeof(NameBuffer), 0, sizeof(NameBuffer));
-
-    OSAL_MemSet_s((OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S), INVALID_VALUE8, sizeof(MPA_CMD_INFO_S));
-    MpaCmd.Cmd = DRV_CMD_GET_ALARM_NAME;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = ALARM_NAME;
-    MpaCmd.WtRd = MPA_READ;
-
-    /* BEGIN: Added by yinhuaqiang 00305130, 2015/4/15ⵥ:DTS2015041310766  */
-    /* DMIڲѯͼϵSAS˿ʱʹôвλϢFruIdDeviceId̿һĿƿ
-       MPASESĻʹô˲λϢ */
-    MpaCmd.FruId = MPA_ConvertFruId(EnclAddr, MpaCmd.FruId);
-    /* END:   Added by yinhuaqiang 00305130, 2015/4/15 ⵥ:DTS2015041310766  */
-
-    MPA_HdsBCalarmTrans((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd);
-    
-    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaCmd, sizeof(MPA_CMD_INFO_S), (OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S));
-    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaAddr, sizeof(DAL_MPA_ADDR_S), (OSP_U8 *)EnclAddr, sizeof(DAL_MPA_ADDR_S));
-    TableInfo.CommonTable.IdInfoTable = g_MpaAlarmId;
-    TableInfo.CommonTable.TableLen = g_MpaAlarmTableLen;
-
-    /*Ϣtarget*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)NameBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 244, "MPA GetAlarmName return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)NameBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-    return RetVal;
-}
-
- 
-  /******************************************************************************
-  *     : MPAIntf_GetFruAllAlarmName
-  *   : ѯ澯
-  *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
-  *             DriverId    : ID ͡FRUIDDEVICE IDϢ
-                SubId ¶ȵID
-  *             Name        : 澯
-  *             Length      : 澯Ƴ
-  *   : Name        : 澯
-  *   ֵ  : OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ      :
-  *  1.       : 20131128
-  *           : qintianyi 90005776
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
- OSP_S32 MPAIntf_GetFruAllAlarmName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SubId, OSP_S8 *Name, OSP_U32 Length)
- {
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 NameBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 245, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-        return DRV_RETURN_ERROR;
-    }
-    
-    OSAL_MemSet_s(NameBuffer, sizeof(NameBuffer), 0, sizeof(NameBuffer));
-
-    MpaCmd.Cmd = DRV_CMD_GET_ALARM_NAME;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)SubId;
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = ALARM_NAME;
-    MpaCmd.WtRd = MPA_READ;
-
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NameBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 246, "MPA GetAlarmName return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)NameBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_GetAlarmType
- *   : ȡ澯
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *             Type        : 澯
- *   : Type        : 澯
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131128
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetAlarmType(OSP_VOID *EnclAddr, OSP_U64 DriverId, ALARM_E *Type)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    MPA_ALARM_TABLE_S TableInfo;
-
-    if ((NULL == EnclAddr) || (NULL == Type))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 247, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Type);
-        return DRV_RETURN_ERROR;
-    }
-
-    OSAL_MemSet_s((OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S), INVALID_VALUE8, sizeof(MPA_CMD_INFO_S));
-    MpaCmd.Cmd = DRV_CMD_GET_ALARM_TYPE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(ALARM_E);
-    MpaCmd.SdrType = ALARM_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /* BEGIN: Added by yinhuaqiang 00305130, 2015/4/15ⵥ:DTS2015041310766  */
-    /* DMIڲѯͼϵSAS˿ʱʹôвλϢFruIdDeviceId̿һĿƿ
-       MPASESĻʹô˲λϢ */
-    MpaCmd.FruId = MPA_ConvertFruId(EnclAddr, MpaCmd.FruId);
-    /* END:   Added by yinhuaqiang 00305130, 2015/4/15 ⵥ:DTS2015041310766  */
-
-    MPA_HdsBCalarmTrans((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd);
-    
-    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaCmd, sizeof(MPA_CMD_INFO_S), (OSP_U8 *)&MpaCmd, 
-        sizeof(MPA_CMD_INFO_S));
-    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaAddr, sizeof(DAL_MPA_ADDR_S), (OSP_U8 *)EnclAddr, 
-        sizeof(DAL_MPA_ADDR_S));
-    TableInfo.CommonTable.IdInfoTable = g_MpaAlarmId;
-    TableInfo.CommonTable.TableLen = g_MpaAlarmTableLen;
-
-    /*Ϣtarget*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)Type);
-}
-
-/******************************************************************************
-*     : MPA_V2BmcCheckFrameboardNewAlarm
-*   : V2-BMC ĸ澯Ƿ6
-*   : MpaAddr  
-*             FruId    
-*   : 
-*   ֵ  : OSP_U8, TRUE:澯6(Ҫbmcѯ),
-                          FALSE: 澯5
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015724
-*           : chenkeren 00221000
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_U8 MPA_V2BmcCheckFrameboardNewAlarm(DAL_MPA_ADDR_S *MpaAddr, OSP_U32 FruId)
-{
-    OSP_S8 VersionBuffer[DMI_FW_VER_LEN + 1] = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    MPA_CMD_INFO_S MpaCmd;
-
-    MpaCmd.Cmd = DRV_CMD_VERSION_GET_MGMT;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = DMI_FW_VER_LEN;
-    MpaCmd.SdrType = SDRTYPE_MGMTCPU_SOFTVERSION;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*˴MPA_Intf,ֱV2-BMC,һӿźռʱ*/
-    RetVal = MPA_Intf(MpaAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);    
-
-    /*ѯ汾Žӿʧ,Ĭϱ5澯*/
-    if (RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE_LIMIT(DRV_LOG_ERR, 0, 1, 20 * HZ, "Get mgmt(0x%x) version failed.", FruId);
-
-        return FALSE;
-    }
-
-    /*bmc25.00T78ԾۺϽ޸(һ,ش).
-        汾ű25.00T77,Ĭ6澯,T77С5
-    */
-    if (strncmp((char *)VersionBuffer, "25.00T77", strlen("25.00T77")) > 0)
-    {
-        return TRUE;
-    }
-
-    return FALSE;
-}
-  
-/*2015-7-25 c00221000 for DTS2015072500001 begin: 汾H1汾,Ϊ澯ۺϸ⵼½ӿڵʧ */
-/******************************************************************************
-*     : MPA_V2BmcFrameAlarmTypeProcess
-*   : V2-BMC澯⴦
-*   : EnclAddr  
-*             MpaCmd    
-*             DataIn    
-*             Type      
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015724
-*           : chenkeren 00221000
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPA_V2BmcFrameAlarmTypeProcess(DAL_MPA_ADDR_S *EnclAddr, MPA_CMD_INFO_S *MpaCmd, OSP_U8 *DataIn, ALARM_E *Type)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    ALARM_E AlarmType[MPA_LENTH_32];
-    OSP_U8 Flag0 = FALSE;
-    OSP_U8 Flag1 = FALSE;
-    OSP_U32 FruId = 0;
-    OSP_U16 NeedAlarmNum = 0;
-
-    /*ⲿ֤βΪ*/
-
-    /*澯С5,ֱӷ*/
-    NeedAlarmNum = DataIn[1];
-    if ((NeedAlarmNum < MPA_LENTH_5)
-        || (NeedAlarmNum > MPA_LENTH_32))
-    {
-        DRV_MPA_TRACE_LIMIT(DRV_LOG_ERR, 0, 1, 60 * HZ, "Mpa finds alarm num(%d) error.", NeedAlarmNum);
-        return DRV_RETURN_ERROR;
-    }
-
-    /*澯ͳʼΪȫF*/
-    OSAL_MemSet_s(AlarmType, sizeof(AlarmType), INVALID_VALUE32, sizeof(AlarmType));
-
-    /*ѯ2bmcİ汾,ȷǷһ5澯*/
-    FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0);
-    Flag0 = MPA_V2BmcCheckFrameboardNewAlarm(EnclAddr, FruId);
-
-    FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1);
-    Flag1 = MPA_V2BmcCheckFrameboardNewAlarm(EnclAddr, FruId);
-
-    /*ֻҪһ5澯,ͷ5ʵ澯+1ʼ澯*/
-    if ((FALSE == Flag0) || (FALSE == Flag1))
-    {
-        /*ǰ5澯ʹbmcѯ*/
-        DataIn[1] = MPA_LENTH_5;
-        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)AlarmType);
-        if (DRV_RETURN_OK != RetVal)
-        {
-            DRV_MPA_TRACE(DRV_LOG_ERR, 178, "MPA MPA_Intf return error, flag0(%d), flag1(%d), need(%d).", Flag0, Flag1, NeedAlarmNum);
-            return RetVal;
-        }
-
-        /*5ʵ+1ʼ*/
-        OSAL_MemCpy_s((OSP_U8 *)Type, MPA_LENTH_5 * sizeof(ALARM_E), (OSP_U8 *)AlarmType, 
-            MPA_LENTH_5 * sizeof(ALARM_E));
-
-        if (NeedAlarmNum > MPA_LENTH_5)
-        {
-            OSAL_MemCpy_s((OSP_U8 *)(Type + MPA_LENTH_5 ), (NeedAlarmNum - MPA_LENTH_5) * sizeof(ALARM_E), 
-                (OSP_U8 *)(AlarmType + MPA_LENTH_5), (NeedAlarmNum - MPA_LENTH_5) * sizeof(ALARM_E));
-        }
-
-        return DRV_RETURN_OK;
-    }
-    else
-    {
-        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Type);
-        if (DRV_RETURN_OK != RetVal)
-        {
-            DRV_MPA_TRACE(DRV_LOG_ERR, 178, "MPA MPA_Intf return error, need(%d).", NeedAlarmNum);
-            return RetVal;
-        }
-
-        return DRV_RETURN_OK;
-    }
-}
-
-/******************************************************************************
-*     : MPA_V2BmcFrameAlarmInfoProcess
-*   : V2-BMC澯Ϣ⴦
-*   : EnclAddr  
-*             MpaCmd    
-*             DataIn    
-*             Alarm     
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015724
-*           : chenkeren 00221000
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPA_V2BmcFrameAlarmInfoProcess(DAL_MPA_ADDR_S *EnclAddr, MPA_CMD_INFO_S *MpaCmd, OSP_U8 *DataIn, OSP_U32 *Alarm)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U32 AlarmInfo[MPA_LENTH_32] = {0};
-    OSP_U8 Flag0 = FALSE;
-    OSP_U8 Flag1 = FALSE;
-    OSP_U32 FruId = 0;
-    OSP_U16 NeedAlarmNum = 0;
-
-    /*ⲿ֤βΪ*/
-
-    /*澯С5,ֱӷ*/
-    NeedAlarmNum = DataIn[1];
-    if ((NeedAlarmNum < MPA_LENTH_5)
-        || (NeedAlarmNum > MPA_LENTH_32))
-    {
-        DRV_MPA_TRACE_LIMIT(DRV_LOG_ERR, 0, 1, 60 * HZ, "Mpa finds alarm num(%d) error.", NeedAlarmNum);
-        return DRV_RETURN_ERROR;
-    }
-
-    /*ѯ2bmcİ汾,ȷǷһ5澯*/
-    FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0);
-    Flag0 = MPA_V2BmcCheckFrameboardNewAlarm(EnclAddr, FruId);
-
-    FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1);
-    Flag1 = MPA_V2BmcCheckFrameboardNewAlarm(EnclAddr, FruId);
-
-    /*ֻҪһ5澯,ͷ5ʵ澯+1ʼ澯*/
-    if ((FALSE == Flag0) || (FALSE == Flag1))
-    {
-        /*ǰ5澯Ϣbmcѯ*/
-        DataIn[1] = MPA_LENTH_5;
-        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)AlarmInfo);
-        if (DRV_RETURN_OK != RetVal)
-        {
-            DRV_MPA_TRACE(DRV_LOG_ERR, 178, "MPA MPA_Intf return error, flag0(%d), flag1(%d), need(%d).", Flag0, Flag1, NeedAlarmNum);
-            return RetVal;
-        }
-
-        /*5ʵϢ+1ʼϢ*/
-        OSAL_MemCpy_s((OSP_U8 *)Alarm, MPA_LENTH_5 * sizeof(ALARM_E), (OSP_U8 *)AlarmInfo, 
-            MPA_LENTH_5 * sizeof(ALARM_E));
-
-        if (NeedAlarmNum > MPA_LENTH_5)
-        {
-            OSAL_MemCpy_s((OSP_U8 *)(Alarm + MPA_LENTH_5), (NeedAlarmNum - MPA_LENTH_5) * sizeof(ALARM_E), 
-                (OSP_U8 *)(AlarmInfo + MPA_LENTH_5), (NeedAlarmNum - MPA_LENTH_5) * sizeof(ALARM_E));
-        }
-        
-        return DRV_RETURN_OK;
-    }
-    else
-    {
-        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Alarm);
-        if (DRV_RETURN_OK != RetVal)
-        {
-            DRV_MPA_TRACE(DRV_LOG_ERR, 178, "MPA MPA_Intf return error,need(%d).", NeedAlarmNum);
-            return RetVal;
-        }
-
-        return DRV_RETURN_OK;
-    }
-}
-/*2015-7-25 c00221000 for DTS2015072500001 end*/
- 
-/******************************************************************************
-*     : MPAIntf_GetFruAllAlarmType
-*   : ȡFRUۺϸ澯
-*   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
-*             DriverId    : ID ͡FRUIDDEVICE IDϢ
-*             Type        : 澯
-*   : Type        : 澯
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2014418
-*           : shufan 204084
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetFruAllAlarmType(OSP_VOID *EnclAddr, OSP_U64 DriverId, ALARM_E *Type, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 BmcDataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Type))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 248, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Type);
-        return DRV_RETURN_ERROR;
-    }
-
-    OSAL_MemSet_s((OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S), INVALID_VALUE8, sizeof(MPA_CMD_INFO_S));
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    MpaCmd.Cmd = DRV_CMD_GET_FRU_ALARM_TYPE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = (OSP_U16)Length;
-    MpaCmd.SdrType = ALARM_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        BmcDataIn[0] = sizeof(OSP_U8);
-        BmcDataIn[1] = (OSP_U8)(Length / sizeof(ALARM_E));
-
-        /*2015-7-25 c00221000 for DTS2015072500001 begin: 汾H1汾,Ϊ澯ۺϸ⵼½ӿڵʧ */
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_ENCL, 0) == MpaCmd.FruId)
-        {
-            if(DRV_FRAMEMODEL_PCIE_CTRL_2U_C1_BMC == MpaAddr->DevFrame)
-                return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Type);
-            /*2016.08.25 y00379870 for DTS2016082312059 end*/
-            return MPA_V2BmcFrameAlarmTypeProcess((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, BmcDataIn, Type);
-        }
-        /*2015-7-25 c00221000 for DTS2015072500001 end*/
-
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Type);
-    }
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Type);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetAlarmInfo
- *   : ȡ澯״̬
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *             Alarm       : 澯״̬
- *   : Alarm       : 澯״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131128
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetAlarmInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Alarm)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    MPA_ALARM_TABLE_S TableInfo;
-
-    if ((NULL == EnclAddr) || (NULL == Alarm))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 249, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Alarm);
-        return DRV_RETURN_ERROR;
-    }
-    
-    OSAL_MemSet_s((OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S), INVALID_VALUE8, sizeof(MPA_CMD_INFO_S));
-    MpaCmd.Cmd = DRV_CMD_GET_ALARM_INFO;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = ALARM_INFO;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /* BEGIN: Added by yinhuaqiang 00305130, 2015/4/15ⵥ:DTS2015041310766  */
-    /* DMIڲѯͼϵSAS˿ʱʹôвλϢFruIdDeviceId̿һĿƿ
-       MPASESĻʹô˲λϢ */
-    MpaCmd.FruId = MPA_ConvertFruId(EnclAddr, MpaCmd.FruId);
-    /* END:   Added by yinhuaqiang 00305130, 2015/4/15 ⵥ:DTS2015041310766  */
-    
-    MPA_HdsBCalarmTrans((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd);
-    
-    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaCmd, sizeof(MPA_CMD_INFO_S), (OSP_U8 *)&MpaCmd, 
-        sizeof(MPA_CMD_INFO_S));
-    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaAddr, sizeof(DAL_MPA_ADDR_S), (OSP_U8 *)EnclAddr, 
-        sizeof(DAL_MPA_ADDR_S));
-    TableInfo.CommonTable.IdInfoTable = g_MpaAlarmId;
-    TableInfo.CommonTable.TableLen = g_MpaAlarmTableLen;
-
-    /*Ϣtarget*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)Alarm);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetCtrlBmcConnectionState
- *   : ѯͿưBMCͨ״̬(ֻܲѯư)
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *             ConnectionState       : ͨ״̬
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014619
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetCtrlBmcConnectionState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_MGTCPU_STATE_E *ConnectionState)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    DMI_MGTCPU_STATE_E LpcState = MGTCPU_STATE_NORMAL;
-    DMI_MGTCPU_STATE_E BmcState = MGTCPU_STATE_NORMAL;
-    DMI_MGTCPU_STATE_E KboxState = MGTCPU_STATE_NORMAL;
-
-    if ((NULL == EnclAddr) || (NULL == ConnectionState))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 250, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, ConnectionState);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == MpaCmd.FruId)
-        {
-
-            LpcState = MPA_V2BmcGetCtrlBmcAlarmState();
-            BmcState = MPA_GetV2BMCLinkState();
-            KboxState = MPA_GetV2BMCKboxAlarmState();
-
-            /* ۺLPCBMCͨŸ澯 */
-            if ((MGTCPU_STATE_ABNORMAL == LpcState)
-                || (MGTCPU_STATE_ABNORMAL == BmcState)
-                || (MGTCPU_STATE_ABNORMAL == KboxState))
-            {
-                *ConnectionState = MGTCPU_STATE_ABNORMAL;
-            }
-            else
-            {
-                *ConnectionState = MGTCPU_STATE_NORMAL;
-            }
-            return DRV_RETURN_OK;
-        }
-    }
-
-    return RETURN_INVALID;
-}
- 
-  /******************************************************************************
-  *     : MPAIntf_GetFruAllAlarmInfo
-  *   : ȡFRUۺϸ澯״̬
-  *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
-  *             DriverId    : ID ͡FRUIDDEVICE IDϢ
-  *             Alarm       : 澯״̬
-  *   : Alarm       : 澯״̬
-  *   ֵ  : OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ      :
-  *  1.       : 2014418
-  *           : shufan 204084
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
-OSP_S32 MPAIntf_GetFruAllAlarmInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Alarm, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 BmcDataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_U32 CmdIndex = 0;
-    OSP_U32 SimulateFlag = FALSE;
-
-    if ((NULL == EnclAddr) || (NULL == Alarm))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 251, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Alarm);
-        return DRV_RETURN_ERROR;
-    }
-
-    OSAL_MemSet_s((OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S), INVALID_VALUE8, sizeof(MPA_CMD_INFO_S));
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    MpaCmd.Cmd = DRV_CMD_GET_FRU_ALARM_INFO;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = (OSP_U16)Length;
-    MpaCmd.SdrType = ALARM_INFO;
-    MpaCmd.WtRd = MPA_READ;
-
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        BmcDataIn[0] = sizeof(OSP_U8);
-        BmcDataIn[1] = (OSP_U8)(Length / sizeof(ALARM_E));
-
-        /*2015-7-25 c00221000 for DTS2015072500001 begin: 汾H1汾,Ϊ澯ۺϸ⵼½ӿڵʧ */
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_ENCL, 0) == MpaCmd.FruId)
-        {
-            if(DRV_FRAMEMODEL_PCIE_CTRL_2U_C1_BMC == MpaAddr->DevFrame)
-                return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Alarm);
-            return MPA_V2BmcFrameAlarmInfoProcess((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, BmcDataIn, Alarm);
-        }
-        /*2015-7-25 c00221000 for DTS2015072500001 end*/
-
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Alarm);
-    }
-
-    /*ģӲ̿AR-0000223578-023-004*/
-    for (CmdIndex = 0; CmdIndex < g_MpaAlarmTableLen; CmdIndex++)
-    {
-        /* BEGIN: Added by liwei 90003951, 2016/3/01  ⵥ:DTS2016022706945 
-        , PANGEA_V200R002C20ģ⼶Ϻ󣬸λSESoopsλ */
-        if(((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame == g_MpaAlarmId[CmdIndex].DevFrame
-            && (g_MpaAlarmId[CmdIndex].FruId == DAL_FRU_ID(DriverId)))
-        {
-            if(0 != g_MpaAlarmId[CmdIndex].Simulate)
-            {
-                /* MPAõĸ澯DMIõĸ澯ֱӷش */
-                if(g_MpaAlarmId[CmdIndex].DeviceId >= Length/sizeof(OSP_U32))
-                {
-                    DRV_MPA_TRACE(DRV_LOG_WARN, 251, "Lenth dismatch:%d %d", 
-                        g_MpaAlarmId[CmdIndex].DeviceId, Length);
-                    return DRV_RETURN_ERROR;
-                }
-                Alarm[g_MpaAlarmId[CmdIndex].DeviceId] = g_MpaAlarmId[CmdIndex].Simulate;
-                SimulateFlag = TRUE;
-            }
-        }
-        /* END: Added by liwei 90003951, 2016/3/01  ⵥ:DTS2016022706945 
-        , PANGEA_V200R002C20ģ⼶Ϻ󣬸λSESoopsλ */    
-    }
-
-    if(TRUE == SimulateFlag)
-    {
-        return DRV_RETURN_OK;
-    }
-    else
-    {
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Alarm);
-    }
- }
-
- /******************************************************************************
- *     : MPAIntf_SetAlarmInfo
- *   : ģ澯״̬
- *   : EnclAddr  
- *             DriverId  
- *             Alarm     
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131211
- *           : zhanwenbin 90003961
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetAlarmInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 Alarm)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    MPA_ALARM_TABLE_S TableInfo;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 252, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-    
-    DRV_MPA_TRACE(DRV_LOG_WARN, 253, "MPA sets alarm info, driverid(0x%llx), alarm(%d).", DriverId, Alarm);
-    
-    OSAL_MemSet_s((OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S), INVALID_VALUE8, sizeof(MPA_CMD_INFO_S));
-    MpaCmd.Cmd = DRV_CMD_SET_ALARM_INFO;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = ALARM_INFO;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /* BEGIN: Added by yinhuaqiang 00305130, 2015/4/15ⵥ:DTS2015041310766  */
-    /* DMIڲѯͼϵSAS˿ʱʹôвλϢFruIdDeviceId̿һĿƿ
-       MPASESĻʹô˲λϢ */
-    MpaCmd.FruId = MPA_ConvertFruId(EnclAddr, MpaCmd.FruId);
-    /* END:   Added by yinhuaqiang 00305130, 2015/4/15 ⵥ:DTS2015041310766  */
-
-    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaCmd, sizeof(MPA_CMD_INFO_S), (OSP_U8 *)&MpaCmd, 
-        sizeof(MPA_CMD_INFO_S));
-    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaAddr, sizeof(DAL_MPA_ADDR_S), (OSP_U8 *)EnclAddr, 
-        sizeof(DAL_MPA_ADDR_S));
-    TableInfo.CommonTable.IdInfoTable = g_MpaAlarmId;
-    TableInfo.CommonTable.TableLen = g_MpaAlarmTableLen;
-    TableInfo.Simulate = Alarm;
-
-    /*Ϣtarget*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetEnclosureFruList
- *   : ȡfruid
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             Fru       fruڵϢ
- *   : Fru       fruڵϢ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131018
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetEnclosureFruList(OSP_VOID *EnclAddr, ENCL_FRU_LIST_S *Fru)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Fru))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 254, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Fru);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_ENCL_FRU_LIST;
-    MpaCmd.FruId = 0;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(ENCL_FRU_LIST_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*AddrΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, EnclAddr, (OSP_VOID *)Fru);
-
-}
-
-
- /******************************************************************************
- *     : MPA_IsPMC12G
- *   : ѯİǷΪ12G
- *   : EnclAddr  
- *             FruId     
- *                
- *   : 
- *   ֵ  : OSP_U8
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20151227
- *           : bianyanru 00188344
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_U8 MPA_IsPMC12G(OSP_VOID *EnclAddr, OSP_U32 FruId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal;
-    MPA_MGMT_BOARDTYPE_E Mgmt_BoardType = BOARD_BUTT ;
-    OSP_U8 PMCVal = FALSE;
-
-
-    MpaCmd.Cmd = DRV_CMD_GET_EXPBOARD_TYPE;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(MPA_MGMT_BOARDTYPE_E);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&Mgmt_BoardType);
-    if(DRV_RETURN_OK == RetVal)
-    {
-        if(PMC_BOARD_12G == Mgmt_BoardType)
-        {
-            PMCVal = TRUE;
-        }
-        else if(PMC_BOARD_6G == Mgmt_BoardType)
-        {
-            PMCVal = FALSE;
-        }
-    }
-    return PMCVal;
-}
-
- /******************************************************************************
- *     : MPA_GetExpBoardType
- *   : ȡİ
- *   : EnclAddr  
- *             FruId     
- *             FruType   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20151013
- *           : gaoyalong 00325181
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_GetExpBoardType(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_FRU_TYPE_E *FruType)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 Type = 0xFF;
-    OSP_S32 RetVal;
-
-    MpaCmd.Cmd = DRV_CMD_CPU_TYPE_GET;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID* )&Type);
-    if (DRV_RETURN_OK == RetVal)
-    {
-        if (DRV_CPU_TYPE_LSI == Type)
-        {
-            *FruType = DMI_FRU_BOARD_12GSAS_2U25_4U24_EXP_LSI;
-        }
-        else
-        {
-            if (TRUE == MPA_IsPMC12G(EnclAddr, FruId))
-            {
-                *FruType = DMI_FRU_BOARD_12GSAS_2U25_4U24_12GEXP;
-            }
-            else
-            {
-            /*ڲѯPMCʱ12G壬Ϊ6G*/
-                *FruType = DMI_FRU_BOARD_12GSAS_2U25_4U24_EXP;
-            }
-        }
-    }
-
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetEnclosureFruType
- *   : ȡFru
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId     Fru id,FRU IDDEVICE ID
- *             FruType   Fru 
- *   : FruType   Fru 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131018
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *  1.       : 2015115
- *           : qintianyi 90005776
- *    ޸   : ޸
- *    ע       : SES V2R1C02֮İ汾fru typeƵsesʵ(V2R1C00/V1R12/SAS󿨲)
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetEnclosureFruType(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_FRU_TYPE_E *FruType)
-{
-#define IS_V1_SES_VIRTUAL_CARD \
-    ((MpaAddr->DevFrame < DRV_FRAMEMODEL_V1_END) \
-        && (DEVICE_SAS_SES == MpaAddr->McuType)\
-        && (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_IOCARD, 1) == FruId))
-
-#define IS_V2R1C00_CTL_BBU \
-    ((FRAME_IS_V2R1C00_CTL == MPA_IfV2R1C00CtrlSxpFrame(MpaAddr->DevFrame))\
-        && ((DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_POWER | DAL_FRU_LOGIC_TYPE_BBU | DAL_FRU_LOGIC_TYPE_FAN, 0) == FruId)\
-            || (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_POWER | DAL_FRU_LOGIC_TYPE_BBU | DAL_FRU_LOGIC_TYPE_FAN, 1) == FruId)))
-
-#define IS_V2R1C00_CTL_BOARD \
-    ((FRAME_IS_V2R1C00_CTL == MPA_IfV2R1C00CtrlSxpFrame(MpaAddr->DevFrame))\
-        && (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == FruId))
-        
-#define IS_2U4U_EXP \
-       ((DRV_FRAMEMODEL_12GSAS_EXP_2U25 == MpaAddr->DevFrame)\
-           || (DRV_FRAMEMODEL_12GSAS_EXP_4U24 == MpaAddr->DevFrame)\
-           || (DRV_FRAMEMODEL_12GSAS_EXP_2U25_12GLINK == MpaAddr->DevFrame)\
-           || (DRV_FRAMEMODEL_12GSAS_EXP_4U24_12GLINK == MpaAddr->DevFrame))
-        
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byteͣ1byte FruId*/
-    OSP_U32 DataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U8 PresentState = INVALID_VALUE8;
-    OSP_U8 ProdType = 0;
-    OSP_BOOL Is2u4uExp = B_FALSE;
-
-    if ((NULL == EnclAddr) || (NULL == FruType))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 255, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, FruType);
-        return DRV_RETURN_ERROR;
-    }
-    
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    RetVal = BSP_GetProductType(&ProdType);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 932,
-            "MPA gets product ver from bsp failed, error code is %d.", RetVal);
-        return DRV_RETURN_ERROR;
-    }
-
-    /*v1 ̿һӿڿ1ӿڿ,ֱӷ*/
-    if (IS_V1_SES_VIRTUAL_CARD)
-    {
-        *FruType = (DMI_FRU_TYPE_E)DMI_FRU_VIRTUAL_IOCARD;
-        return DRV_RETURN_OK;
-    }
-
-    /*ȲfruǷλ*/
-    RetVal = MPAIntf_GetPresentState(EnclAddr, FruId, &PresentState);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 256, "MPA GetEnclFruType Get Present Fail %d.", RetVal);
-        return RetVal;
-    }
-    /*λЧ*/
-    if (DRV_EXIST_NOT_OK == PresentState)
-    {
-        *FruType = DMI_FRU_UNKNOWN;
-        return DRV_RETURN_OK;
-    }
-
-    *FruType = (DMI_FRU_TYPE_E)0;
-
-    MpaCmd.FruId = (MpaAddr->DevFrame > DRV_FRAMEMODEL_12GSAS_EXP_END) ? FruId : 0;
-    Is2u4uExp = 
-        ((IS_2U4U_EXP) && ((DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_EXPBOARD, 0) == FruId)
-         || (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_EXPBOARD, 1) == FruId)));
-
-    /* V2R1C00ƿҿư,Ҫݿۿ䲻ͬĵ */
-    if (IS_V2R1C00_CTL_BOARD)
-    {
-        if (SPANGEA_V2R1 == ProdType)
-        {
-            return MPA_GetV2R1C00CtrlBoardFruType(EnclAddr, FruId, FruType);
-        }
-
-        return MPA_GetFruTypeForSes(EnclAddr, FruId, FruType);
-    }
-    else if (IS_V2R1C00_CTL_BBU)
-    {
-        return MPA_GetV2R1C00CtrlPowerFanBbuFruType(EnclAddr, FruId, FruType);
-    }
-    //1 notes : SES V2R1C02֮İ汾fru typeƵsesʵ(V2R1C00/V1R12/SAS󿨲)
-    else if ((OSP_U8)TRUE == Mpa_CheckGetFruTypeForSes(MpaAddr->DevFrame))
-    {
-        return MPA_GetFruTypeForSes(EnclAddr, FruId, FruType);
-    }
-    else if (B_TRUE == Is2u4uExp)//DMI·2֣800801·
-    {
-        return MPA_GetExpBoardType(EnclAddr, FruId, FruType);
-    }
-    else
-    {
-        MpaCmd.Cmd = DRV_CMD_GET_ENCL_FRU_TYPE;
-        /*mpa cmdfru id0ӿڣfru idͨdatain*/
-        MpaCmd.DeviceId = 0;
-        MpaCmd.BufLen = sizeof(DMI_FRU_TYPE_E);
-        MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-        MpaCmd.WtRd = MPA_READ;
-    
-        /*byte0ͣbyte1 FruId*/
-        MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-        DataIn[0] = MpaAddr->DevFrame;
-
-        /* BEGIN: Added by jiangfanlu 00101148, 2015/1/16  ⵥ:, ޸ԭ:SAS˿portid */
-        /* DMIڲѯͼϵSAS˿ʱʹôвλϢFruIdDeviceId̿һĿƿ
-           MPASESĻʹô˲λϢ */
-        FruId = MPA_ConvertFruId(MpaAddr, FruId);
-        /* END:   Added by jiangfanlu 00101148, 2015/1/16 ⵥ: */
-        DataIn[1] = FruId;
-        
-        /*AddrΪδȥȡж*/
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)FruType);
-    }
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetExpBoardSpeed
- *   : ѯ֧
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             Fru       fruڵϢ
- *             Speed      
- *   : Speed      
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ  :
- *  1.       : 2017810
- *           : ywx291300
- *    ޸   : ɺ DTS2017081402571 ͬŻ
- ******************************************************************************/
-OSP_S32 MPAIntf_GetExpBoardSpeed(OSP_VOID* EnclAddr, OSP_U32 FruId, DRV_PORT_SPEED_E* Speed)
-{
-    DMI_FRU_TYPE_E FruType;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U16 Index = 0;
-   
-    if ((NULL == EnclAddr) || (NULL == Speed))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 257, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Speed);
-        return DRV_RETURN_ERROR;
-    }
-
-    /*ֻܼFRU ID*/
-    if ((DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_EXPBOARD, 0) != FruId) &&
-        (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_EXPBOARD, 1) != FruId))
-    {
-        DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 257, 1, 30 * HZ, "MPA Fru Id error(0x%x).", FruId);
-        return DRV_RETURN_ERROR;
-    }
-    
-    RetVal = MPAIntf_GetEnclosureFruType(EnclAddr, FruId, &FruType);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 256, "MPA GetEnclosureFruType Fail %d.", RetVal);
-        return RetVal;
-    }
-
-    for (Index = 0; Index < g_MpaMpaExpBoardSpeedLen; Index++)
-    {
-        if (g_MpaExpBoardSpeed[Index].FruType == FruType)
-        {
-            *Speed = g_MpaExpBoardSpeed[Index].Speed;
-            return DRV_RETURN_OK;
-        }
-    }
-
-    /*ûҵĬ6G*/
-    DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 257, 1, 30 * HZ, "MPA not find the board fru type(0x%x).", FruType);
-    *Speed = DRV_SPEED_6G;
-    return DRV_RETURN_OK;
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetEnclosureFruSilkScreen
- *   : ѯfru˿ӡ(λ)
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             Fru       fruڵϢ
- *             Name      ˿ӡ
- *             Length    Ƴ
- *   : Name      ˿ӡ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014115
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetEnclosureFruSilkScreen(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_S8 *Name, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byteͣ1byte FruId, 1byteλ*/
-    OSP_U32 DataIn[3] = {0, 0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_S8 TmpName[DMI_NAME_LEN] = {0};
-    OSP_U32 SlotId = 0xFF;
-    
-    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 257, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    /*Ȳλid*/
-    if (DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddr->DevFrame)
-    {
-        RetVal = MPAIntf_GetBoardSlotId(EnclAddr, DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0), &SlotId);
-        if (DRV_RETURN_OK != RetVal)
-        {
-            DRV_MPA_TRACE(DRV_LOG_DBG, 258, "MPA GetSilkScreen GetBoardSlotId Fail %d.", RetVal);
-            return RetVal;
-        }
-    }
-
-    OSAL_MemSet_s((OSP_U8 *)TmpName, DMI_NAME_LEN, 0, DMI_NAME_LEN);
-
-    if (MpaAddr->DevFrame > DRV_FRAMEMODEL_12GSAS_EXP_END)
-    {
-        MpaCmd.FruId = FruId;
-    }
-    else
-    {
-        MpaCmd.FruId = 0;
-
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_GET_ENCL_FRU_SILKSCREEN;
-    /*mpa cmdfru id0ӿڣfru idͨdatain*/
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*2014-8-26 c00221000 for DTS2014082510192 begin: V2-BMCѯ˿ӡͳһɿưbmc*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDRTYPE_FOR_SILK_SMMA;
-
-             MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
-        }
-        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
-        {
-             MpaCmd.SdrType = SDRTYPE_FOR_SILK_SMMB;
-
-             MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
-        }
-
-    }
-    /*2014-8-26 c00221000 for DTS2014082510192 end*/
-
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = SlotId;
-    /* BEGIN: Added by jiangfanlu 00101148, 2015/1/16  ⵥ:, ޸ԭ:SAS˿portid */
-    /* DMIڲѯͼϵSAS˿ʱʹôвλϢFruIdDeviceId̿һĿƿ
-       MPASESĻʹô˲λϢ */
-    FruId = MPA_ConvertFruId(MpaAddr, FruId);
-    /* END:   Added by jiangfanlu 00101148, 2015/1/16 ⵥ: */
-    DataIn[2] = FruId;
-    /*Ϣtarget*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)TmpName);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 259, "MPA GetSilkScreen return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), (OSP_U8 *)TmpName, 
-        (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-    return RetVal;
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetEnclFruVisibleMap
- *   : ѯfruؿɼ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             Fru       fruڵϢ
- *             Map      ؿɼ
- *   : Map      ؿɼ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014211
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetEnclFruVisibleMap(OSP_VOID* EnclAddr, OSP_U32 FruId, OSP_U32 *Map)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byteͣ1byte FruId, 1byteλ*/
-    OSP_U32 DataIn[3] = {0, 0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U32 SlotId = 0xFF;
-    
-    if ((NULL == EnclAddr) || (NULL == Map))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 260, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Map);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    /*Ȳλid*/
-    RetVal = MPAIntf_GetBoardSlotId(EnclAddr, DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0), &SlotId);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 261, "MPA GetEnclFruVisibleMap GetBoardSlotId Fail %d.", RetVal);
-        return RetVal;
-    }
-
-    if (MpaAddr->DevFrame > DRV_FRAMEMODEL_12GSAS_EXP_END)
-    {
-        MpaCmd.FruId = FruId;
-    }
-    else
-    {
-        MpaCmd.FruId = 0;
-
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_GET_ENCL_FRU_VISIBLE_MAP;
-    /*mpa cmdfru id0ӿڣfru idͨdatain*/
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = SlotId;
-    /* BEGIN: Added by jiangfanlu 00101148, 2015/1/16  ⵥ:, ޸ԭ:SAS˿portid */
-    /* DMIڲѯͼϵSAS˿ʱʹôвλϢFruIdDeviceId̿һĿƿ
-       MPASESĻʹô˲λϢ */
-    FruId = MPA_ConvertFruId(MpaAddr, FruId);
-    /* END:   Added by jiangfanlu 00101148, 2015/1/16 ⵥ: */
-
-    DataIn[2] = FruId;
-    /*Ϣtarget*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Map);
-    
-}
- /******************************************************************************
- *     : MPAIntf_GetDeviceEnclosureFruType
- *   : ȡFru(DMA濨ʱ)
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId     ID ͡FRUIDDEVICE IDϢ
- *             FruType   Fru 
- *   : FruType   Fru 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014113
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetDeviceEnclosureFruType(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_FRU_TYPE_E *FruType)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == FruType))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 262, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, FruType);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    if ((MpaAddr->DevFrame) < DRV_FRAMEMODEL_12GSAS_EXP_END)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 263, "This interface is only used for v2bmc, devframe(0x%x).", MpaAddr->DevFrame);
-        return DRV_RETURN_ERROR;
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_GET_ENCL_FRU_TYPE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DMI_FRU_TYPE_E);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)FruType);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetWatchDogEnableFlag
- *   : ѯŹʹܱ־
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             WatchDogFlag  Źʹܱ־
- *   : WatchDogFlag  Źʹܱ־
- *   ֵ  : OSP_S32
- * ˵  : ֻR3ƿֲ֧ѯŹʹܱ־
- * 
- * ޸ʷ      :
- *  1.       : 20131030
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetWatchDogEnableFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *WatchDogFlag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == WatchDogFlag))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 264, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, WatchDogFlag);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_WATCHDOG_FLAG_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)WatchDogFlag);    
-    
-}                           
-
- /******************************************************************************
- *     : MPAIntf_SetWatchDogEnableFlag
- *   : ÿŹʹܱ־
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             WatchDogFlag  Źʹܱ־
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : ֻR3ƿ֧ÿŹʹܱ־
- * 
- * ޸ʷ      :
- *  1.       : 20131030
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetWatchDogEnableFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 WatchDogFlag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 265, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 266, "MPA sets wdg enable flag, id(0x%llx), value(0x%x).", DriverId, WatchDogFlag);
-    MpaCmd.Cmd = DRV_CMD_WATCHDOG_FLAG_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&WatchDogFlag, (OSP_VOID *)NULL);    
-    
-}                               
-
-
-
- /******************************************************************************
- *     : MPAIntf_GetBiosSwitchFlag
- *   : ѯ BIOSʹܱ־
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             BiosSwitchFlag  BIOSʹܱ־
- *   : BiosSwitchFlag  BIOSʹܱ־
- *   ֵ  : OSP_S32
- * ˵  : ֻR3ƿֲ֧ѯ BIOSʹܱ־
- * 
- * ޸ʷ      :
- *  1.       : 20131030
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBiosSwitchFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *BiosSwitchFlag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == BiosSwitchFlag))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 267, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, BiosSwitchFlag);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BIOS_SWITCH_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)BiosSwitchFlag);    
-    
-}                           
-
- /******************************************************************************
- *     : MPAIntf_SetBiosSwitchFlag
- *   :  BIOSʹܱ־
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             BiosSwitchFlag   BIOSʹܱ־
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : ֻR3ƿ֧ BIOSʹܱ־
- * 
- * ޸ʷ      :
- *  1.       : 20131030
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBiosSwitchFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 BiosSwitchFlag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 268, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 269, "MPA sets bios switch flag, id(0x%llx), value(0x%x).", DriverId, BiosSwitchFlag);
-    MpaCmd.Cmd = DRV_CMD_BIOS_SWITCH_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&BiosSwitchFlag, (OSP_VOID *)NULL);    
-    
-}                               
-
-
-
- /******************************************************************************
- *     : MPAIntf_GetPowerButtonControlMod
- *   : ѯԴťµ־
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             PowerButtonModFlag  Դťµ־
- *   : PowerButtonModFlag  Դťµ־
- *   ֵ  : OSP_S32
- * ˵  : ֻR3ƿֲ֧ѯԴťµ־
- * 
- * ޸ʷ      :
- *  1.       : 20131030
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerButtonControlMod(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *PowerButtonModFlag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == PowerButtonModFlag))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 270, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PowerButtonModFlag);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SINGLE_POWERCTL_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PowerButtonModFlag);    
-    
-}                           
-
- /******************************************************************************
- *     : MPAIntf_SetPowerButtonControlMod
- *   : õԴťµ־
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             PowerButtonModFlag  Դťµ־
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : ֻR3ƿ֧õԴťµ־
- * 
- * ޸ʷ      :
- *  1.       : 20131030
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetPowerButtonControlMod(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 PowerButtonModFlag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 271, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 272, "MPA sets power button flag, id(0x%llx), value(0x%x).", DriverId, PowerButtonModFlag);
-    MpaCmd.Cmd = DRV_CMD_SINGLE_POWERCTL_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&PowerButtonModFlag, (OSP_VOID *)NULL);    
-    
-}                               
-
-
- /******************************************************************************
- *     : MPAIntf_GetBoardSlotId
- *   : ѯư/ڿĲλ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId        Fru
- *             BoardSlotId  ư/ڿĲλ
- *   : BoardSlotId  ư/ڿĲλ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013111
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBoardSlotId(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U32 *BoardSlotId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 SlotId = 0;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == BoardSlotId))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 273, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, BoardSlotId);
-        return DRV_RETURN_ERROR;
-    }
-    
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-        
-    MpaCmd.Cmd = DRV_CMD_EXPBOARD_SLOT_GET;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*r1ƿbspȡλ*/
-    if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame)
-    {
-        RetVal = BSP_ReadSlotId(&SlotId);
-        if (DRV_RETURN_OK != RetVal)
-        {
-            DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 274, 1, 20 * HZ, "MPA gets board slot id from bsp failed(%d).", RetVal);
-            return RetVal;
-        }
-        *BoardSlotId = SlotId;
-        return RetVal;
-    }
-    
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&SlotId);  
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 275, "MPA GetBoardSlotId return error.");
-        return RetVal;
-    }
-
-    if (DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddr->DevFrame)
-    {
-        /*쳣ֵ󷵻*/
-        if ((DRV_SLOT_A != SlotId) && (DRV_SLOT_B != SlotId))
-        {
-            DRV_MPA_TRACE(DRV_LOG_WARN, 276, "MPA gets board slot id error, slot id(0x%x) is not A or B.",SlotId);
-            return DRV_RETURN_ERROR;
-        }
-
-        /*ظDMĽӿڣSESصֵת0ʾAأ1ʾB*/
-        *BoardSlotId = (DRV_SLOT_A == SlotId) ? (MPA_SLOT_A):(MPA_SLOT_B);
-    }
-    else
-    {
-        *BoardSlotId = SlotId;
-    }
-    
-    return DRV_RETURN_OK;
-   
-}                           
-
-
- /******************************************************************************
- *     : MPAIntf_GetAttachedWwn
- *   : ȡ豸wwn
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *             Wwn         : wwnַ
- *   : Wwn         : wwnַ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131031
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetAttachedWwn(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U64 *Wwn)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byteͣ1byte DeviceId*/
-    OSP_U8 DataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    
-    if ((NULL == EnclAddr) || (NULL == Wwn))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 277, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Wwn);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_OPPWWNINFO_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    /*device idﲻұ䣬datainȥtarget*/
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U64);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*byte0ͣbyte1 DeviceId*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-
-    /*AddrΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Wwn);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPortWidth
- *   : ȡ˿ڿ
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *             Width       : 
- *   : Width       : 
- *   ֵ  : OSP_S32
- * ˵  : ʱɿж˿ڿһ£ֿڸ˿ڿȲһ£µ
- * 
- * ޸ʷ      :
- *  1.       : 20131031
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPortWidth(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Width)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byteͣ1byte DeviceId*/
-    OSP_U8 DataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Width))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 278, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Width);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_PORT_WIDTH;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    /*device idﲻұ䣬datainȥtarget*/
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /*byte0ͣbyte1 DeviceId*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    
-    /*AddrΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Width);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPortMaxWidth
- *   : ȡ˿ڶ
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *             Width       : 
- *   : Width       : 
- *   ֵ  : OSP_S32
- * ˵  : ʱɿж˿ڿһ£ֿڸ˿ڿȲһ£µ
- * 
- * ޸ʷ      :
- *  1.       : 20131031
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPortMaxWidth(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Width)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byteͣ1byte DeviceId*/
-    OSP_U8 DataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Width))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 279, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Width);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_PORT_MAX_WIDTH;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    /*device idﲻұ䣬datainȥtarget*/
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /*byte0ͣbyte1 DeviceId*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    
-    /*AddrΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Width);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPortPhysRate
- *   : ȡ˿֧
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *             Rate        : 
- *   : Rate        : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013111
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPortPhysRate(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Rate)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byteͣ1byte DeviceId*/
-    OSP_U8 DataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Rate))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 280, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Rate);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_PORT_PHYS_RATE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    /*device idﲻұ䣬datainȥtarget*/
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /*byte0ͣbyte1 DeviceId*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    
-    /*AddrΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Rate);
-   
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPortLinkRate
- *   : ȡ˿
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *             Rate        : 
- *   : Rate        : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013111
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPortLinkRate(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Rate)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byteͣ1byte DeviceId*/
-    OSP_U8 DataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Rate))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 281, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Rate);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_LINKPORTS_SPEED_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    /*device idﲻұ䣬datainȥtarget*/
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /*byte0ͣbyte1 DeviceId*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    
-    /*AddrΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Rate);
-   
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPortLinkStatus
- *   : ȡ˿״̬
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *             LinkStatus  : ״̬
- *   : LinkStatus  : ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013112
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPortLinkStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *LinkStatus)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byteͣ1byte DeviceId*/
-    OSP_U8 DataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;   
-/* BEGIN: Added by shipin, 2015-8-28 17:27:20, ⵥ:DTS2015081308135, ޸ԭ:ģSES WDGλʳּڶϿͻָĸ澯 */ 
-    OSP_S32 RetVal = DRV_RETURN_ERROR;  
-/* END: Added by shipin, 2015-8-28 19:53:46 */ 
-
-    if ((NULL == EnclAddr) || (NULL == LinkStatus))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 282, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, LinkStatus);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_PORT_LINK_STATUS;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    /*device idﲻұ䣬datainȥtarget*/
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-            
-    /*byte0ͣbyte1 DeviceId*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    
- /*AddrΪδȥȡж*/
-/* BEGIN: Added by shipin, 2015-8-28 17:27:20, ⵥ:DTS2015081308135, ޸ԭ:ģSES WDGλʳּڶϿͻָĸ澯 */     
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)LinkStatus); 
- 
-    if (DRV_RETURN_OK != RetVal)
-    {    
-        return RetVal; 
-    }  
-
-    if (MPA_LINK_STATUS_IS_INVALID(*LinkStatus))
-    {   
-        RetVal = DRV_RETURN_NOT_READY;   
-    } 
-
-    return RetVal;   
- /* END: Added by shipin, 2015-8-28 19:54:58 */  
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetPeerPortLinkStatus
- *   : ѯԿض˿״̬
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *             LinkStatus  : ״̬
- *   : LinkStatus  : ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014320
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPeerPortLinkStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *LinkStatus)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byteͣ1byte DeviceId*/
-    OSP_U8 DataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == LinkStatus))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 283, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, LinkStatus);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_PEER_PORT_LINK_STATUS;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    /*device idﲻұ䣬datainȥtarget*/
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /*byte0ͣbyte1 DeviceId*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    
-    /* BEGIN: Added by shipin, 2014-10-21 22:4:55, ⵥ:DTS2014102206003, ޸ԭ:SESλʱԶ˵Ķ˿״̬ʼΪMPA_INVALID_STATUS,Ըֵй */
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)LinkStatus);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return RetVal; 
-    }
-
-    if(MPA_LINK_STATUS_IS_INVALID(*LinkStatus))
-    {
-        RetVal = DRV_RETURN_NOT_READY;
-    }
-    /* END: Added by shipin, 2014-10-21 22:7:13 */
-    
-    return RetVal;
-
-}
- /******************************************************************************
- *     : MPAIntf_SetPortSwitch
- *   : ض˿
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *             Switch      : ز0Ϊأ1Ϊ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013112
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetPortSwitch(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U32 Switch)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byteͣ1byte DeviceId*/
-    OSP_U8 DataOut[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_U8 TmpValue = (OSP_U8)Switch;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 284, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE_LIMIT(DRV_LOG_INFO, 285, 1, 20 * HZ, "MPA sets port switch, id(0x%llx), value(%d).", DriverId, Switch);
-
-    MpaCmd.Cmd = DRV_CMD_SET_PORT_SWITCH;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    /*device idﲻұ䣬dataoutȥtarget*/
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(TmpValue);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-    
-    /*byte0ͣbyte1 DeviceId*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataOut[0] = MpaAddr->DevFrame;
-    DataOut[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    
-    /*AddrΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TmpValue, (OSP_VOID *)DataOut);
-}
-
- /******************************************************************************
- *     : MPAIntf_SetAllPortSwitch
- *   : رж˿
- *   : EnclAddr  
- *             Switch    
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2017615
- *           : shipin
- *    ޸   : DTS2017061310967ڿΪ0xfeʱô˽ӿڣʧ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SwitchAllPortOnEncl(OSP_VOID* EnclAddr, OSP_U32 Switch)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    const OSP_U8 SES_MAX_PORT_NUM = 2;
-    OSP_U8 PortIndex = 0;
-    DAL_MPA_ADDR_S MpaAddr;
-    OSP_U64 DriverId = 0;
-    OSP_U64 FruId = 0;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 284, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    OSAL_MemCpy_s((OSP_U8*)&MpaAddr, sizeof(DAL_MPA_ADDR_S), (OSP_U8*)EnclAddr, sizeof(DAL_MPA_ADDR_S));
-
-    /* ǷʹV2̿ͣV2֧ */
-    if(DRV_FARMEMODEL_ERROR == MpaAddr.DevFrame)
-    {
-        MpaAddr.DevFrame = DRV_FRAMEMODEL_12GSAS_EXP_2U25;
-    }
-    else
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 285, "frame type not 0xfe(0x%x).", MpaAddr.DevFrame);
-        return DRV_RETURN_ERROR;
-    }
-
-    FruId = (OSP_U64)DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_EXPBOARD, 0);
-    for(PortIndex = 0; PortIndex < SES_MAX_PORT_NUM; PortIndex++)
-    {
-        DriverId = (OSP_U64)DAL_BUILD_DEVICE_ID((OSP_U64)0, (OSP_U64)0, (OSP_U64)FruId, (OSP_U64)PortIndex);
-        RetVal = MPAIntf_SetPortSwitch((OSP_VOID*)&MpaAddr, DriverId, Switch);
-        if(DRV_RETURN_OK != RetVal)
-        {
-            DRV_MPA_TRACE(DRV_LOG_WARN, 286, "set allport switch(%d),DriverId(0x%llx),res(%d).", Switch, DriverId, RetVal);
-        }
-    }
-
-    return DRV_RETURN_OK;
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPortUpDownType
- *   : ȡ˿п
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *             UpOrDownType: пڻп 
- *   : UpOrDownType: пڻп 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013114
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPortUpDownType(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U8* UpOrDownType)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byteͣ1byte DeviceId*/
-    OSP_U8 DataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == UpOrDownType))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 286, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpOrDownType);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_PORT_UPDOWN_TYPE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    /*device idﲻұ䣬datainȥtarget*/
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /*byte0ͣbyte1 DeviceId*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    
-    /*AddrΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)UpOrDownType);
-
-    
-}
-
-/******************************************************************************
-*     : MPAIntf_GetLocalPortFirstPhyId
-*   : ȡض˿׸phyid
-*   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
-*             DriverId    : ID ͡FRUIDDEVICE IDϢ 
-*             PhyId       : ׸phyid    
-*   : PhyId       : ׸phyid  
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2014617
-*           : jiangfanlu 00101148
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetLocalPortFirstPhyId(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U32* PhyId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byteͣ1byte DeviceId*/
-    OSP_U8 DataIn[2] = {0, 0};
-    OSP_U8 DstPhyId = INVALID_VALUE8;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S32 ErrorCode = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == PhyId))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 287, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PhyId);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_LOCAL_PORT_FIRST_ID;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    /*device idﲻұ䣬datainȥtarget*/
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /*byte0ͣbyte1 DeviceId*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    
-    /*AddrΪδȥȡж*/
-    ErrorCode = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)&DstPhyId);
-    if (DRV_RETURN_OK == ErrorCode)
-    {
-        if (INVALID_VALUE8 == DstPhyId)
-        {
-            *PhyId = INVALID_VALUE32;
-        }
-        else
-        {
-            *PhyId = DstPhyId;
-        }
-    }
-
-    return ErrorCode;
-}
-
-/******************************************************************************
-*     : MPAIntf_GetAttPortFirstPhyId
-*   : ȡԽӶ˿׸phyid
-*   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
-*             DriverId    : ID ͡FRUIDDEVICE IDϢ 
-*             PhyId       : ׸phyid    
-*   : PhyId       : ׸phyid  
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2014617
-*           : jiangfanlu 00101148
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetAttPortFirstPhyId(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U32* PhyId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byteͣ1byte DeviceId*/
-    OSP_U8 DataIn[2] = {0, 0};
-    OSP_U8 DstPhyId = INVALID_VALUE8;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S32 ErrorCode = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == PhyId))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 288, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PhyId);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_ATT_PORT_FIRST_ID;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    /*device idﲻұ䣬datainȥtarget*/
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /*byte0ͣbyte1 DeviceId*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    
-    /*AddrΪδȥȡж*/
-    ErrorCode = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)&DstPhyId);
-    if (DRV_RETURN_OK == ErrorCode)
-    {
-        if (INVALID_VALUE8 == DstPhyId)
-        {
-            *PhyId = INVALID_VALUE32;
-        }
-        else
-        {
-            *PhyId = DstPhyId;
-        }
-    }
-
-    return ErrorCode;
-}
-
-/******************************************************************************
-*     : MPAIntf_GetPortWwn
-*   : ȡض˿wwn
-*   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
-*             DriverId    : ID ͡FRUIDDEVICE IDϢ 
-*             Wwn         : رwwn
-*   : Wwn         : رwwn
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2014617
-*           : jiangfanlu 00101148
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetPortWwn(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U64* Wwn)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byteͣ1byte DeviceId*/
-    OSP_U8 DataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Wwn))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 289, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Wwn);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_LOCAL_PORT_WWN;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    /*device idﲻұ䣬datainȥtarget*/
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U64);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /*byte0ͣbyte1 DeviceId*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    
-    /*AddrΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Wwn);
-}
-
-/******************************************************************************
-*     : MPAIntf_GetAttPortInitOrExp
-*   : ȡض˿wwn
-*   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
-*             DriverId    : ID ͡FRUIDDEVICE IDϢ 
-*             Wwn         : رwwn
-*   : Wwn         : رwwn
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2014617
-*           : jiangfanlu 00101148
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetAttPortInitOrExp(OSP_VOID* EnclAddr, OSP_U64 DriverId, DRV_PORT_MODE_E* AttachedPortMode)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byteͣ1byte DeviceId*/
-    OSP_U8 DataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == AttachedPortMode))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 290, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, AttachedPortMode);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_ATT_PORT_INITOREXP;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    /*device idﲻұ䣬datainȥtarget*/
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DRV_PORT_MODE_E);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /*byte0ͣbyte1 DeviceId*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    
-    /*AddrΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, AttachedPortMode);
-
-}
-
-/******************************************************************************
-*     : MPAIntf_GetSfpSupport
-*   : ȡ˿ڹģֵ֧
-*   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
-*             DriverId    : ID ͡FRUIDDEVICE IDϢ
-*             SfpSupport: 0-NO SFP,1-SFP,2-BOTH
-*   : SfpSupport: 0-NO SFP,1-SFP,2-BOTH
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 20140507
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetSfpSupport(OSP_VOID* EnclAddr, OSP_U64 DriverId, DRV_PORT_SFP_SUPPORT_E* SfpSupport)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == SfpSupport))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 291, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, SfpSupport);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_SFP_SUPPORT;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_PORT_SFP_SUPPORT_E);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /*AddrΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)SfpSupport);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPortPhyErr
- *   : ȡ˿phy
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *             PhyId       : ˿phy id
- *             ErrorCode   : Ϣ
- *   : ErrorCode   : Ϣ
- *   ֵ  : OSP_U32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013114
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPortPhyErr(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U32 PhyId, DRV_PHY_ERROR_S *ErrorCode)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byte phy id1byteͣ1byte DeviceId*/
-    OSP_U8 DataIn[3] = {0, 0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_U8 TmpPhyId = (OSP_U8)PhyId;
-    
-    if ((NULL == EnclAddr) || (NULL == ErrorCode))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 292, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, ErrorCode);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_PORT_PHY_ERR;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    /*device idﲻұ䣬datainȥtarget*/
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DRV_PHY_ERROR_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /*byte0phy idbyte1ͣbyte2 DeviceId*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = TmpPhyId;
-    DataIn[1] = MpaAddr->DevFrame;
-    DataIn[2] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    
-    /*AddrΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)ErrorCode);
-
-
-}
- /******************************************************************************
-  *     : MPAIntf_SetPhyErr
-  *   : PHY
-  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-  *             DriverId   ID ͡FRUIDDEVICE IDϢ   
-  *             Thres     ֵ
-  *   : 
-  *   ֵ  : OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ      :
-  *  1.       : 20151226
-  *           : liwei 90003951
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
- OSP_S32 MPAIntf_SetPhyErr(OSP_VOID* EnclAddr, OSP_U64 DriverId, DRV_PHY_ERROR_S *ErrorCode)
- {
-     MPA_CMD_INFO_S MpaCmd;
-     /*32ֽ */
-     OSP_U8 DataIn[32] = {0};
-     
-     if ((NULL == EnclAddr) || (NULL == ErrorCode))
-     {
-         DRV_MPA_TRACE(DRV_LOG_WARN, 8, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, ErrorCode);
-         return DRV_RETURN_ERROR;
-     }
- 
-     DRV_MPA_TRACE_LIMIT(DRV_LOG_INFO, 9, 1, 20 * HZ, "MPA sets port phy error, DriverId(0x%llx), uiInvalidDwords(%d), uiCodeViolations(%d), uiInConCrcErrs(%d), uiPhyChgCnt(%d), uiPhyDisparity(%d), uiPhyRstFail(%d), uiPhyDwsLost(%d), devframe(0x%x).", 
-                                 DriverId, ErrorCode->uiInvalidDwords, ErrorCode->uiCodeViolations,
-                                 ErrorCode->uiInConCrcErrs, ErrorCode->uiPhyChgCnt,
-                                 ErrorCode->uiPhyDisparity, ErrorCode->uiPhyRstFail, 
-                                 ErrorCode->uiPhyDwsLost,((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
- 
-     MpaCmd.Cmd = DRV_CMD_SET_PHY_ERR;
-     MpaCmd.FruId = DAL_FRU_ID(DriverId);
-     MpaCmd.DeviceId = 0;
-     MpaCmd.BufLen = sizeof(DRV_PHY_ERROR_S);
-     MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-     MpaCmd.WtRd = MPA_WRITE;
-
-     DataIn[0] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-
-     OSAL_MemCpy_s(&DataIn[1], sizeof(DRV_PHY_ERROR_S), (OSP_U8 *)ErrorCode, sizeof(DRV_PHY_ERROR_S));
-
-     return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
-     
- }
-
- /******************************************************************************
- *     : MPAIntf_ClearAllPhyErr
- *   : 
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201417
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_ClearAllPhyErr(OSP_VOID* EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 293, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_PHYERROR_CLEAR;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    /* BEGIN: Modify by gaoyalong 00325181, 2016-02-27 15:45:55, ⵥ:DTS2016022309456, ޸ԭ:DMIdeviceidΪ1ʱʧ */ 
-    MpaCmd.DeviceId = 0; 
-    /* END: Modify by gaoyalong 00325181, 2016-02-27 15:45:55, ⵥ:DTS2016022309456 */ 
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPortPhySwitch
- *   : ѯ˿phy״̬
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *             PhyId       : phy
- *             PhySwitch   : ״̬
- *   : PhySwitch   : ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014110
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPortPhySwitch(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U32 PhyId, DRV_PHY_STATE_E *PhySwitch)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byte phy id1byteͣ1byte DeviceId*/
-    OSP_U8 DataIn[3] = {0, 0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_U8 TmpPhyId = (OSP_U8)PhyId;
-
-    if ((NULL == EnclAddr) || (NULL == PhySwitch))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 294, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PhySwitch);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_PORT_PHY_SWITCH;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    /*device idﲻұ䣬datainȥtarget*/
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DRV_PHY_STATE_E);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /*byte0phy idbyte1ͣbyte2 DeviceId*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = TmpPhyId;
-    DataIn[1] = MpaAddr->DevFrame;
-    DataIn[2] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    
-    /*AddrΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)PhySwitch);
-
-}
-
-/******************************************************************************
-*     : MPAIntf_SetBufferingSwitchFlag
-*   :  bufferingʹܱ־
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId        ID ͡FRUIDDEVICE IDϢ   
-*             Switch   bufferingʹܱ־
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : ֻ12G expanderоƬĿִ֧˹
-* 
-* ޸ʷ      :
-*  1.       : 20140423
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetBufferingSwitchFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 Switch)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 295, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_BUFFERING_SWITCH;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Switch, (OSP_VOID *)NULL);    
-    
-}                               
-
-/******************************************************************************
-*     : MPAIntf_GetBufferingSwitchFlag
-*   : ȡ bufferingʹܱ־
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId        ID ͡FRUIDDEVICE IDϢ   
-*             Switch   ȡbufferingʹܱ־
-*   : Switch   ȡbufferingʹܱ־
-*   ֵ  : OSP_S32
-* ˵  : ֻ12G expanderоƬĿִ֧˹
-* 
-* ޸ʷ      :
-*  1.       : 20140423
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetBufferingSwitchFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Switch)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Switch))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 296, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Switch);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BUFFERING_SWITCH;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Switch);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPortSwitch
- *   : ѯ˿ڿ״̬
- *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
- *             DriverId    : ID ͡FRUIDDEVICE IDϢ
- *             Switch      : ״̬
- *   : Switch      : ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014313
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPortSwitch(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U32 *Switch)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1byteͣ1byte DeviceId*/
-    OSP_U8 DataIn[2] = {0, 0};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Switch))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 297, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Switch);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_PORT_SWITCH;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    /*device idﲻұ䣬datainȥtarget*/
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-        MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_SWITCHPORT;
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Switch);
-    }
-
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    
-    /*AddrΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Switch);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetDiskPowerStatus
- *   : ȡӲ̵Դ״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             PowerStat  Ӳ̵Դ״̬
- *   : PowerStat  Ӳ̵Դ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131119
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetDiskPowerStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_DISK_POWER_E *PowerStat)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*2Σͺdevice id*/
-    OSP_U8 DataIn[2] = {0xFF, 0xFF};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_U8 *Value = NULL;
-    
-    if ((NULL == EnclAddr) || (NULL == PowerStat))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 298, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PowerStat);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_DISK_POWER_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);/*sesֻͨ1byte*/
-    MpaCmd.SdrType = SDRTYPE_GETDISKPOWERSTATUS;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*Ӳdevice IdΪδ*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-
-    Value = (OSP_U8 *)PowerStat;
-        
-    /*DataInΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Value);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetDiskLedStatus
- *   : ȡӲled״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             Type       LED
- *             Status      LED״̬
- *   : Status      LED״̬ϸӿĵ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131120
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetDiskLedStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_LIGHT_TYPE_E Type, DMI_LIGHT_STATE_E *Status)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*3Σͺdevice id*/
-    OSP_U8 DataIn[3] = {0xFF, 0xFF, 0xFF};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_U8 *Value = NULL;
-    
-    if ((NULL == EnclAddr) || (NULL == Status))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 299, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_DISK_LED_STATUS_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPE_GETDISKLEDSTATUS;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*Ӳdevice IdΪδ*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    DataIn[2] = (OSP_U8)Type;
-    Value = (OSP_U8 *)Status;
-        
-    /*DataInΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Value);    
-}
-
-/******************************************************************************
-*     : MPAIntf_GetDiskInLoopStatus
-*   : ȡӲ̻·״̬
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             DiskState  Ӳ̻·״̬
-*   : DiskState  Ӳ̻·״̬
-*   ֵ  : DRV_RETURN_OK - ɹ, ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 20131121
-*           : jiangfanlu 00101148
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetDiskInLoopStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_DISK_STATUS_E* DiskState)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*2Σͺdevice id*/
-    OSP_U8 DataIn[2] = {0xFF, 0xFF};
-    OSP_U8 Value = DRV_DISK_STATUS_NOTEXIST;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == DiskState))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 300, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, DiskState);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_DISKSTATUS_INLOOP_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);/*sesֻͨ1byte*/
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*Ӳdevice IdΪδ*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-
-    /*DataInΪδȥȡж*/
-    RetVal =  MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)&Value);
-
-    if (DRV_RETURN_OK == RetVal)
-    {
-        *DiskState = (DMI_DISK_STATUS_E)Value;
-    }
-
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_SetDiskLedStatus
- *   : Ӳled
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             Type       LED
- *             Status      LED״̬
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131120
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetDiskLedStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_LIGHT_TYPE_E Type, DMI_LIGHT_STATE_E Status)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*frame/type/device id/Statustarget*/
-    OSP_U8 DataIn[4] = {0xFF, 0xFF, 0xFF, 0xFF};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 301, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_DISKLED_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = 0;
-    /*typestatusת1ֽڴsesbuf2ֽ*/
-    MpaCmd.BufLen = sizeof(DataIn);
-    MpaCmd.SdrType = SDRTYPE_SETDISKLEDSTATUS;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*Ӳdevice IdΪδ*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    DataIn[2] = (OSP_U8)Type;
-    DataIn[3] = (OSP_U8)Status;
-
-    DRV_MPA_TRACE_LIMIT(DRV_LOG_INFO, 302, 1, 20 * HZ, "MPA sets disk led status, frame mode(0x%x), id(0x%llx), type(%d), value(%d), host id(0x%x), scsi id(0x%x).", 
-                        MpaAddr->DevFrame, DriverId, Type, Status, MpaAddr->DevAddr.ScsiAddr.uiHostId, MpaAddr->DevAddr.ScsiAddr.uiScsiId);
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
-
-}
-
-/******************************************************************************
-*     : MPAIntf_SetDiskSwitchStatus
-*   : Ӳ̿
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             SwitchStatus Ӳ̿״̬ 
-*   : 
-*   ֵ  : DRV_RETURN_OK - ɹ, ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 20131121
-*           : jiangfanlu 00101148
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetDiskSwitchStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SwitchStatus)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*frame/device id/SwitchStatustarget*/
-    OSP_U8 DataIn[3] = {0xFF, 0xFF, 0xFF};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 303, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 304, "MPA set disk switch status, id(0x%llx), value(%d), devframe(0x%x).", 
-                    DriverId, SwitchStatus, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-    MpaCmd.Cmd = DRV_CMD_DISK_OUT_OR_IN_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = 0;
-    /*SwitchStatusת1ֽڴsesbuf1ֽ*/
-    MpaCmd.BufLen = sizeof(DataIn);
-    MpaCmd.SdrType = SDRTYPE_SETDISKPHYSWITCH;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*Ӳdevice IdΪδ*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    DataIn[2] = (OSP_U8)SwitchStatus;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetDiskSwitchStatus
- *   : ѯӲ̸״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             SwitchStatus Ӳ̿״̬ 
- *   : SwitchStatus Ӳ̿״̬ 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014313
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetDiskSwitchStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *SwitchStatus)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*frame/device idtarget*/
-    OSP_U8 DataIn[2] = {0xFF, 0xFF};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == SwitchStatus))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 305, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, SwitchStatus);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_DISKPORT_PERROR_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = 0;
-    /*SwitchStatusת1ֽڴsesbuf1ֽ*/
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = SDRTYPE_GETDISKPHYSWITCH;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*Ӳdevice IdΪδ*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)SwitchStatus);    
-
-    
-}
-
-/******************************************************************************
-*     : MPAIntf_SetDiskPowerStatus
-*   : Ӳ̵Դ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             PowerStat Ӳ̵Դ״̬ 
-*   : 
-*   ֵ  : DRV_RETURN_OK - ɹ, ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 20131121
-*           : jiangfanlu 00101148
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetDiskPowerStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_DISK_POWER_E PowerStat)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*frame/device id/SwitchStatustarget*/
-    OSP_U8 DataIn[3] = {0xFF, 0xFF, 0xFF};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 306, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 307, "MPA set disk power status, id(0x%llx), value(%d), devframe(0x%x).", 
-                    DriverId, PowerStat, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-    MpaCmd.Cmd = DRV_CMD_DISK_POWER_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = 0;
-    /*PowerStatת1ֽڴsesbuf1ֽ*/
-    MpaCmd.BufLen = sizeof(DataIn);
-    MpaCmd.SdrType = SDRTYPE_SETDISKPOWERSTATUS;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*Ӳdevice IdΪδ*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    DataIn[2] = (OSP_U8)PowerStat;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetDiskPhyErr
- *   : ѯӲphy
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             PhyErr    Ϣ
- *   : PhyErr    Ϣ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131221
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetDiskPhyErr(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_PHY_ERROR_U *PhyErr)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*2Σͺdevice id*/
-    OSP_U8 DataIn[2] = {0xFF, 0xFF};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == PhyErr))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 308, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PhyErr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_DISK_PHY_ERR;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DRV_PHY_ERROR_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*Ӳdevice IdΪδ*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-
-    /*DataInΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)&(PhyErr->SasDiskErrorCode));
-
-}
-
- /******************************************************************************
- *     : MPAIntf_SetDiskTemperature
- *   : Ӳ¶
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             TempInfo  ¶Ƚṹ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131227
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetDiskTemperature(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_DISK_TEMP_INFO_S *TempInfo)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == TempInfo))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 309, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, TempInfo);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_DISK_TEMPERATURE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DMI_DISK_TEMP_COMMON_INFO_S) + (TempInfo->DiskCommInfo.DiskCount * sizeof(DMI_SINGLE_DISK_TEMP_INFO_S));
-    MpaCmd.SdrType = SDRTYPE_SETDISKTEMPERATURE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*DataInΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)TempInfo, (OSP_VOID *)NULL);
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetFanName
- *   : ȡFRU
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Name      
- *             Length    Ƴ
- *   : Name      
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013116
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFanName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};      /*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 310, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_FAN_NAME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = SDRTYPE_FAN_NAME;
-    MpaCmd.WtRd = MPA_READ;
-
-    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 311, "MPA GetFanName return error.");
-        return RetVal;
-    }
-
-    /*ȡСֵ*/
-    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
-
-    return RetVal;
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetPowerName
- *   : ȡԴFRU
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Name      
- *             Length    Ƴ
- *   : Name      
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013116
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 312, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_POWER_NAME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = SDRTYPE_POWER_NAME;
-    MpaCmd.WtRd = MPA_READ;
-
-    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 313, "MPA GetPowerName return error.");
-        return RetVal;
-    }
-
-    /*ȡСֵ*/
-    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
-
-    return RetVal;
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetWatchDogName
- *   : ȡŹ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Name      
- *             Length    Ƴ
- *   : Name      
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013116
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetWatchDogName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 314, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_WDG_NAME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 315, "MPA GetwdgName return error.");
-        return RetVal;
-    }
-
-    /*ȡСֵ*/
-    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
-
-    return RetVal;
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetDiskName
- *   : ȡӲ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Name      
- *             Length    Ƴ
- *   : Name      
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013116
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetDiskName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    /*2Σͺdevice id*/
-    OSP_U8 DataIn[2] = {0xFF, 0xFF};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 316, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_DISK_NAME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = DAL_ELEMENT_NO(DriverId);
-    
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Name); 
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 317, "MPA GetdiskName return error.");
-        return RetVal;
-    }
-
-    return RetVal;
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetBbuName
- *   : ȡBBU
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Name      
- *             Length    Ƴ
- *   : Name      
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013116
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 318, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BBU_NAME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = SDRTYPE_BBU_NAME;
-    MpaCmd.WtRd = MPA_READ;
-
-
-    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 319, "MPA GetBBUName return error.");
-        return RetVal;
-    }
-
-    /*ȡСֵ*/
-    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
-
-    return RetVal;
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetMgmtCpuName
- *   : ȡоƬ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Name      
- *             Length    Ƴ
- *   : Name      
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013116
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetMgmtCpuName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 320, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_MGMTCPU_NAME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = SDRTYPE_MGMTCPU_NAME;
-    MpaCmd.WtRd = MPA_READ;
-
-    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 321, "MPA GetMgmtCpuName return error.");
-        return RetVal;
-    }
-
-    /*ȡСֵ*/
-    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
-
-    return RetVal;
-    
-}
-
-
-
- /******************************************************************************
- *     : MPAIntf_GetFpgaName
- *   : ȡFPGA
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Name      
- *             Length    Ƴ
- *   : Name      
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013116
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFpgaName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 322, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_FPGA_NAME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-
-    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 323, "MPA GetFPGAName return error.");
-        return RetVal;
-    }
-
-    /*ȡСֵ*/
-    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
-
-    return RetVal;
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetCpldName
- *   : ȡCPLD
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Name      
- *             Length    Ƴ
- *   : Name      
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013116
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetCpldName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 324, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_CPLD_NAME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 325, "MPA GetCPLDName return error.");
-        return RetVal;
-    }
-
-    /*ȡСֵ*/
-    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
-
-    return RetVal;
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetPortName
- *   : ȡPort
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Name      
- *             Length    Ƴ
- *   : Name      
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013116
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPortName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 326, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_PORT_NAME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 327, "MPA GetPortName return error.");
-        return RetVal;
-    }
-
-    /*ȡСֵ*/
-    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
-
-    return RetVal;
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetUartName
- *   : ȡUart
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Name      
- *             Length    Ƴ
- *   : Name      
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013116
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetUartName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 328, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_UART_NAME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 329, "MPA GetUartName return error.");
-        return RetVal;
-    }
-
-    /*ȡСֵ*/
-    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
-
-    return RetVal;
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetIocardName
- *   : ȡӿڿ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Name      
- *             Length    Ƴ
- *   : Name      
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013116
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetIocardName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 330, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_IOCARD_NAME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = SDRTYPE_IOCARD_NAME;
-    MpaCmd.WtRd = MPA_READ;
-
-    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 331, "MPA GetIocardName return error.");
-        return RetVal;
-    }
-
-    /*ȡСֵ*/
-    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
-
-    return RetVal;
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetFanMode
- *   : ѯģʽ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Mode       ģʽ
- *   : Mode       ģʽ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131111
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFanMode(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Mode)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Mode))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 332, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Mode);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_FAN_MODE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Mode);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetFanMode
- *   : ÷ģʽ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Mode       ģʽ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131111
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetFanMode(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Mode)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 333, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 334, "MPA sets fan mode, id(0x%llx), value(%d), devframe(0x%x).", 
-                        DriverId, Mode, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-
-    MpaCmd.Cmd = DRV_CMD_FAN_MODE_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Mode, (OSP_VOID *)NULL);    
-    
-}
-
-  /******************************************************************************
-  *     : MPAIntf_SetUpgradeState
-  *   : ʼ
-  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-  *             DriverId   ID ͡FRUIDDEVICE IDϢ   
-  *             State       ״̬
-  *   : 
-  *   ֵ  : OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ      :
-  *  1.       : 2018313
-  *           : º
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
- OSP_S32 MPAIntf_SetUpgradeState(OSP_VOID *EnclAddr, OSP_U32 DriverId, DMI_NOTIFY_UPGRADE_STAT_E State)
- {
-     OSP_U8 UpgradeState;
-     MPA_CMD_INFO_S MpaCmd;
-     DAL_MPA_ADDR_S *MpaAddr = NULL;
- 
-     if (NULL == EnclAddr)
-     {
-         DRV_MPA_TRACE(DRV_LOG_WARN, 333, "MPA finds the pointer is null(0x%p).", EnclAddr);
-         return DRV_RETURN_ERROR;
-     }
- 
-     DRV_MPA_TRACE(DRV_LOG_INFO, 334, "MPA sets upgrade state, id(0x%x), value(%d), devframe(0x%x).", 
-                         DriverId, State, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-
-     MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;         
-     MpaCmd.Cmd = DRV_CMD_UPGRADE_NOTIFY;
-     MpaCmd.FruId = DriverId;
-     MpaCmd.DeviceId = 0;
-     MpaCmd.BufLen = sizeof(OSP_U8);
-     MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-     MpaCmd.WtRd = MPA_WRITE;
-     UpgradeState = State & 0xFF;
-        
-     /*BMC´,ΪBMCʼշسɹ 
-     ϲʼͽʱ2θýӿڣӿڷʧܻᵼʧ
-     ΪԤͨݶʼ·*/
-     if (MpaAddr->DevFrame < DRV_FRAMEMODEL_12GSAS_EXP_END)
-     {
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&UpgradeState, (OSP_VOID *)NULL); 
-     }
-     else
-     {
-        return DRV_RETURN_OK;
-     }
-     
- }
-
- /******************************************************************************
- *     : MPAIntf_GetFanLevel
- *   : ѯȵλ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Level       ȵλ
- *   : Level       ȵλ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131111
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFanLevel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Level)
-{
-     MPA_CMD_INFO_S MpaCmd;
-     OSP_S32 RetVal = DRV_RETURN_ERROR;
-     DAL_MPA_ADDR_S *MpaAddr = NULL;
-     
-     if ((NULL == EnclAddr) || (NULL == Level))
-     {
-         DRV_MPA_TRACE(DRV_LOG_WARN, 335, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Level);
-         return DRV_RETURN_ERROR;
-     }
-     
-     MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-     MpaCmd.Cmd = DRV_CMD_FAN_LEVEL_GET;
-     MpaCmd.FruId = DAL_FRU_ID(DriverId);
-     MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-     MpaCmd.BufLen = sizeof(OSP_U8);
-     MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-     MpaCmd.WtRd = MPA_READ;
-
-     /* BEGIN: Added by shipin, 2016-5-27 21:19:53, ⵥ:DTS2016052503239, ޸ԭ:ȵλδ⵽ЧֵǰѯλӿҪʧ */
-     RetVal =  MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Level);
-     
-     if(DRV_RETURN_OK != RetVal)
-     {
-         return RetVal; 
-     }
-
-     /* V1򣬷ȵλͨframeInfoݿѯ޷SESӿʵ֣ڴ */
-     if (DRV_FRAMEMODEL_V1_END > MpaAddr->DevFrame)
-     {
-         if(MPA_DATA_IS_INVALID8(*Level))
-         {
-             RetVal = DRV_RETURN_NOT_READY;
-         }
-     }
-     /* END: Added by shipin, 2016-5-27 21:19:53 */
-      
-     return RetVal;    
-
-}
-
-/******************************************************************************
-*     : MPAIntf_GetFanUsrLevel
-*   : ѯûλ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             Level       ûλ
-*   : Level       ûλ
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 201781
-*           : 
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetFanUsrLevel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Level)
-{
-   MPA_CMD_INFO_S MpaCmd;
-   OSP_S32 RetVal = DRV_RETURN_ERROR;
-   DAL_MPA_ADDR_S *MpaAddr = NULL;
-   
-   if ((NULL == EnclAddr) || (NULL == Level))
-   {
-       /*ϲ㱣֤˲Чԣ˴־*/
-       DRV_MPA_TRACE(DRV_LOG_WARN, 335, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Level);
-       return DRV_RETURN_ERROR;
-   }
-   
-   MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-   MpaCmd.Cmd = DRV_CMD_FAN_USR_LEVEL_GET;
-   MpaCmd.FruId = DAL_FRU_ID(DriverId);
-   MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-   MpaCmd.BufLen = sizeof(OSP_U8);
-   MpaCmd.SdrType = SDRTYPT_GET_FAN_USR_LEVEL;
-   MpaCmd.WtRd = MPA_READ;
-
-   RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Level);
-   if(DRV_RETURN_OK != RetVal)
-   {
-       return RetVal; 
-   }
-   
-   /* V1򣬷ȵλͨframeInfoݿѯ޷SESӿʵ֣ڴ */
-   if (DRV_FRAMEMODEL_V1_END > MpaAddr->DevFrame)
-   {
-       if(MPA_DATA_IS_INVALID8(*Level))
-       {
-           RetVal = DRV_RETURN_NOT_READY;
-       }
-   }
-    
-   return RetVal;    
-
-}
-
-/******************************************************************************
- *     : MPAIntf_SetFanLevel
- *   : ÷ȵλ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Level       ȵλ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131111
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetFanLevel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Level)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 336, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-    
-    DRV_MPA_TRACE(DRV_LOG_INFO, 337, "MPA sets fan level, id(0x%llx), value(%d), devframe(0x%x).", 
-                DriverId, Level, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-
-    MpaCmd.Cmd = DRV_CMD_FAN_LEVEL_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Level, (OSP_VOID *)NULL);    
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetFanSpeed
- *   : ѯת
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             speed       ת
- *   : speed       ת
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131111
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFanSpeed(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Speed)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    /*ͺdevice idtarget*/
-    OSP_U8 DataIn[3] = {0, 0, 0};
-    
-    if ((NULL == EnclAddr) || (NULL == Speed))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 338, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Speed);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_FAN_SPEED_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = DAL_FRU_ID_TO_SLOT(MpaCmd.FruId);
-    DataIn[2] = MpaCmd.DeviceId;
-    
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Speed);    
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetFanState
- *   : ѯ״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             State     ״̬
- *   : State     ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131112
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFanState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DAL_FAN_STAT_E *State)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 FanState = 0;
-    OSP_S32 RetVal =  DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == State))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 339, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_FAN_STATE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&FanState);    
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 340, "MPA GetFanState return error 0x%x.", RetVal);
-        return RetVal;
-    }
-    *State = (DAL_FAN_STAT_E)FanState;
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_SetFanOnOff
- *   : ÷µ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId   FRU
- *             FruPowerCtrl  µƱ־
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131112
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetFanOnOff(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 FruPowerCtrl)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 341, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 342, "MPA sets fan on or off, id(0x%x), value(%d).", FruId, FruPowerCtrl);
-    MpaCmd.Cmd = DRV_CMD_SET_FAN_POWER_ONOFF;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&FruPowerCtrl, (OSP_VOID *)NULL);    
-    
-}                               
-
- /******************************************************************************
- *     : MPAIntf_GetFanSn
- *   : ѯȵSN
- *   : EnclAddr  
- *             DriverId  
- *             Sn        
- *             Length    
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2016229
- *           : shipin
- *    ޸   : DTS2016030202964 Դһķģ飬DMIͨFRUType֣ߵԴͨȡSNϢ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFanSn(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Sn, OSP_U32 Length)
-{
-    OSP_S8 SnBuffer[DMI_NAME_LEN] = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U64 FanToPowerDriverId = 0;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    const OSP_U64 ClearFanProperty = 0xffffffffffbffdff;/* FRUSlotIdbit1 */
-    const OSP_U64 AddPowerProperty = 0x0000000000100000;/* ϵԴFRU */
-
-    if ((NULL == EnclAddr) || (NULL == Sn) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 370, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Sn, Length);
-        return RetVal;
-    }
-    
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    /* V2SES򣬵ԴһFRU޷ȵӱǩ(FruType:300B/300C)ʹõԴSN */
-    /* V2R3C01汾NVMe 2U BMC̿һʹõԴһFRU*/
-    if (((DRV_FRAMEMODEL_12GSAS_EXP_END  > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_V1_END < MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_CTL_4U72 != MpaAddr->DevFrame))
-    || (DRV_FRAMEMODEL_PCIE_CTRL_2U_C1_BMC == MpaAddr->DevFrame))
-    {
-        /* ȵDriverIdתΪԴDriverId */
-        /* תϵ: FRUID:4000/4002 Ӧ: ԴFRUID:1000 
-                     FRUID:4001/4003 Ӧ: ԴFRUID:1001
-        */
-        FanToPowerDriverId = ((DriverId & ClearFanProperty) | AddPowerProperty);
-        RetVal = MPAIntf_GetPowerSn(EnclAddr, FanToPowerDriverId, SnBuffer, Length);
-        if (DRV_RETURN_OK != RetVal)
-        {
-            /* ѯԴSNʧܣ־һӡ */
-            DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 371, 3, 24 * 60 * 60 * HZ, "MPA GetFanSn return error.DriverId(0x%llx); FanToPowerDriverId(0x%llx).", DriverId, FanToPowerDriverId);
-            return RetVal;
-        }
-
-        /*DAL·ĳʵʳȡ̵ĳȿ*/
-        OSAL_MemCpy_s((OSP_U8 *)Sn, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-            (OSP_U8 *)SnBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-    }
-    else
-    {
-        DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 372, 1, 24 * 60 * 60 * HZ, "MPA GetFanSn return error.framemode(0x%x).", MpaAddr->DevFrame);
-    }
-
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetFanHuaweiCode
- *   : ѯȵHuaweiCode
- *   : EnclAddr  
- *             DriverId  
- *             Code      
- *             Length    
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2016229
- *           : shipin
- *    ޸   : DTS2016030202964 Դһķģ飬DMIͨFRUType֣ߵԴͨȡBOMϢ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFanHuaweiCode(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Code, OSP_U32 Length)
-{
-    OSP_S8 CodeBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U64 FanToPowerDriverId = 0;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    const OSP_U64 ClearFanProperty = 0xffffffffffbffdff;/* FRUSlotIdbit1 */
-    const OSP_U64 AddPowerProperty = 0x0000000000100000;/* ϵԴFRU */
-
-    if ((NULL == EnclAddr) || (NULL == Code) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 360, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Code, Length);
-        return RetVal;
-    }
-    
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    
-    /* V2SES򣬵ԴһFRU޷ȵӱǩ(FruType:300B/300C)ʹõԴBOM */
-    /* V2R3C01汾NVMe 2U BMC̿һʹõԴһFRU*/
-    if (((DRV_FRAMEMODEL_12GSAS_EXP_END  > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_V1_END < MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_CTL_4U72 != MpaAddr->DevFrame))
-    || (DRV_FRAMEMODEL_PCIE_CTRL_2U_C1_BMC == MpaAddr->DevFrame))
-    {
-        /* ȵDriverIdתΪԴDriverId */
-        /* תϵ: FRUID:4000/4002 Ӧ: Դ:1000 
-                     FRUID:4001/4003 Ӧ: Դ:1001
-        */
-        FanToPowerDriverId = ((DriverId & ClearFanProperty) | AddPowerProperty);
-        RetVal = MPAIntf_GetPowerHuaweiCode(EnclAddr, FanToPowerDriverId, CodeBuffer, Length);
-        if (DRV_RETURN_OK != RetVal)
-        {
-            /* ѯԴHuaweiCodeʧܣ־һӡ */
-            DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 361, 3, 24 * 60 * 60 * HZ, "MPA GetFanHuaweiCode return error.DriverId(0x%llx); FanToPowerDriverId(0x%llx).", DriverId, FanToPowerDriverId);
-            return RetVal;
-        }
-
-        /*DAL·ĳʵʳȡ̵ĳȿ*/
-        OSAL_MemCpy_s((OSP_U8 *)Code, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-            (OSP_U8 *)CodeBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-    }
-    else
-    {
-        DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 362, 1, 24 * 60 * 60 * HZ, "MPA GetFanHuaweiCode return error.framemode(0x%x).", MpaAddr->DevFrame);
-    }
-
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_SetUartSwitch
- *   : лBMC
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             UartSwitchFlag  л־
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131112
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetUartSwitch(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 UartSwitchFlag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 343, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 344, "MPA sets uart switch, id(0x%llx), value(%d).", DriverId, UartSwitchFlag);
-    MpaCmd.Cmd = DRV_CMD_UART_SWITH;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&UartSwitchFlag, (OSP_VOID *)NULL);    
-    
-}                               
-
-
-
- /******************************************************************************
- *     : MPAIntf_SetUartLoopTest
- *   : ôڻز
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             TestFlag  ڻزԱ־
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131112
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetUartLoopTest(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 TestFlag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 345, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 346, "MPA sets uart loop test, id(0x%llx), value(%d).", DriverId, TestFlag);
-    MpaCmd.Cmd = DRV_CMD_SET_UART_LOOP_TEST;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TestFlag, (OSP_VOID *)NULL);    
-    
-}                               
-
- /******************************************************************************
- *     : MPAIntf_GetPowerOutput
- *   : ѯԴ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             PowerOutPut  Դ
- *   : PowerOutPut  Դ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131113
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerOutput(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *PowerOutPut)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == PowerOutPut))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 347, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PowerOutPut);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_POWER_POUTPUT_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /* BEGIN: Modified by shipin, 2014-8-14 11:43:42, ⵥ:DTS2014073100826 , ޸ԭ: ЧжЧʱֵ */
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PowerOutPut);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return RetVal; 
-    }
-    
-    if(MPA_DATA_IS_INVALID16(*PowerOutPut))
-    {
-        RetVal = DRV_RETURN_NOT_READY;
-    }
-    /* END: Modified by shipin, 2014-8-14 11:43:42 */
-     
-    return RetVal;    
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetPowerInput
- *   : ѯԴ빦
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             PowerInPut  Դ빦ʣλW
- *   : PowerInPut  Դ빦ʣλW
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014128
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerInput(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *PowerInPut)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == PowerInPut))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 348, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PowerInPut);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_POWER_INPUT;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*Begin : 2015-6-26 19:27:3 by yinhuaqiang 00305130~reason: DTS2015070200769  
-    PANGEA V200R002C00B023_ƽ̨_ᵥ_SESMPAIntf_GetPowerInput
-    MPAIntf_GetPowerOutputЧʱֵͲͬ*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PowerInPut);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return RetVal; 
-    }
-    
-    if(MPA_DATA_IS_INVALID16(*PowerInPut))
-    {
-        RetVal = DRV_RETURN_NOT_READY;
-    }
-
-    return RetVal;
-    /*End : 2015-6-26 19:27:3 by yinhuaqiang 00305130~reason:  DTS2015070200769 */
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPowerRatedOutPut
- *   : ȡԴ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             OutPut    Դ
- *   : OutPut    Դ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131217
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerRatedOutPut(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *OutPut)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == OutPut))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 349, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, OutPut);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_POWER_RATED_OUTPUT_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)OutPut);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPowerState
- *   : ѯԴ״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             PowerState  Դ״̬
- *   : PowerState  Դ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131113
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerState(OSP_VOID *EnclAddr, OSP_U64 DriverId, PS_STAT_E *PowerState)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 TmpState = 0;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_MPA_ADDR_S * MpaAddr = NULL;
-    
-    if ((NULL == EnclAddr) || (NULL == PowerState))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 350, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PowerState);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_POWER_WORK_STATE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*v18bit澯v2չ16bit*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)MpaAddr, (OSP_VOID *)&TmpState);    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 351, "MPA GetPowerState err 0x%x.", RetVal);
-        return RetVal;
-    }
-
-    *PowerState = (PS_STAT_E)TmpState;
-    return DRV_RETURN_OK;
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPowerAlertInfo
- *   : ѯԴ澯Ϣ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             PowerAlarm  Դ澯Ϣ
- *   : PowerAlarm  Դ澯Ϣ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131113
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerAlertInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *PowerAlarm)
-{
-    OSP_U8 StateU8 = 0;
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_MPA_ADDR_S * MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == PowerAlarm))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 354, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PowerAlarm);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_POWER_ABSTATUS_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*v18bit澯v2չ16bit*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    if (MpaAddr->DevFrame < DRV_FRAMEMODEL_V1_END)
-    {
-        MpaCmd.BufLen = sizeof(OSP_U8);
-        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&StateU8);    
-        if(DRV_RETURN_OK != RetVal)
-        {
-            DRV_MPA_TRACE(DRV_LOG_DBG, 355, "MPA GetPowerAlarm1 return error.");
-            return RetVal;
-
-        }
-
-        /*2014-9-22 c00221000 for DTS2014091801288 begin: ЧжЧʱֵ*/
-        if(MPA_DATA_IS_INVALID8(StateU8))
-        {
-            return DRV_RETURN_NOT_READY;
-        }
-        /*2014-9-22 c00221000 for DTS2014091801288 end*/
-       *PowerAlarm = MPA_GetV1Power32BitFaultBit(StateU8);
-    }
-    else
-    {
-        MpaCmd.BufLen = sizeof(OSP_U32);
-        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PowerAlarm);    
-        if(DRV_RETURN_OK != RetVal)
-        {
-            DRV_MPA_TRACE(DRV_LOG_DBG, 356, "MPA GetPowerAlarm2 return error.");
-            return RetVal;
-
-        }
-    }
-    
-    return RetVal;
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetPowerManufactureDate
- *   : ѯԴ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Date      Դ
- *             Length    Դڳ
- *   : Date      Դ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131113
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerManufactureDate(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Date, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S8 DateBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_S8  DataTemp[DMI_NAME_LEN] = "2000-00-00";  /* ڳʼ*/
-
-    if ((NULL == EnclAddr) || (NULL == Date) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 357, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Date, Length);
-        return RetVal;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    MpaCmd.Cmd = DRV_CMD_POWER_PRODATE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)DateBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 358, "MPA GetPowerManufactureDate return error.");
-        return RetVal;
-    }
-
-    /* V1 ԴʽҪת*/
-    if (DRV_FARMEMODEL_EXP_HDS >= MpaAddr->DevFrame)   
-    {
-        /*lint -e661*/
-        if ((0 == (OSP_U8)DateBuffer[0]) || (0xFF == (OSP_U8)DateBuffer[0])) /*  СϵͳЧ,MPAת*/
-        {
-            OSAL_MemCpy_s((OSP_U8 *)Date, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-                (OSP_U8 *)DateBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-            return RetVal;
-        }
-
-        DataTemp[2] = DateBuffer[0];
-        DataTemp[3] = DateBuffer[1];
-        DataTemp[5] = DateBuffer[2];
-        DataTemp[6] = DateBuffer[3];
-        DataTemp[8] = DateBuffer[4];
-        DataTemp[9] = DateBuffer[5];
-        /*lint +e661*/
-
-        DRV_MPA_TRACE(DRV_LOG_DBG, 359, "mpa power date is : %s, data from bmc/ses is : %s.", DataTemp, DateBuffer);
-        OSAL_MemCpy_s((OSP_U8 *)Date, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-            (OSP_U8 *)DataTemp, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Date, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)DateBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPowerHuaweiCode
- *   : ѯԴHuaweiCode
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Code      ԴHuaweiCode 
- *             Length    ԴϢ
- *   : Code      ԴHuaweiCode 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131114
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerHuaweiCode(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Code, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 CodeBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Code) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 360, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Code, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_POWER_HWCODE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)CodeBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 361, "MPA GetPowerHuaweiCode return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Code, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)CodeBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPowerSoftwareVersion
- *   : ѯԴ汾
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Version   汾
- *             Length    汾ų
- *   : Version   汾
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131114
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerSoftwareVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Version, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 VersionBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Version) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 362, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Version, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_VERSION_GET_POWER;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 363, "MPA GetPowerSoftwareVersion return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Version, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPowerAcDcType
- *   : ѯԴAC/DC
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Powertype  Դ
- *   : Powertype  Դ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131114
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerAcDcType(OSP_VOID *EnclAddr, OSP_U64 DriverId, PS_TYPE_E *Powertype)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 TmpType = 0;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Powertype))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 364, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Powertype);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_POWER_TYPE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&TmpType);    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 365, "MPA GetPowerAcDcType err 0x%x.", RetVal);
-        return RetVal;
-    }
-
-    *Powertype = (PS_TYPE_E)TmpType;
-    return DRV_RETURN_OK;
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetPowerOutputVoltage
- *   : ѯԴѹ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Voltage  ѹ 
- *   : Voltage  ѹ 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131122
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerOutputVoltage(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Voltage)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Voltage))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 366, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Voltage);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_POWER_OUTPUT_VOLTAGE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Voltage);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPowerOutputCurrent
- *   : ѯԴ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Current  
- *   : Current  
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131122
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerOutputCurrent(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Current)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Current))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 367, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Current);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_POWER_OUTPUT_CURRENT_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Current);
-
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetPowerVendor
- *   : ѯԴϢ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Vendor    ԴϢ
- *             Length    ԴϢ
- *   : Vendor    ԴϢ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131122
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerVendor(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Vendor, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 VendorBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Vendor) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 368, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Vendor, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_POWER_FACNAME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VendorBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 369, "MPA GetVendor return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Vendor, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VendorBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPowerSn
- *   : ѯԴSN
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Sn    ԴSN
- *             LengthԴSN
- *   : Sn    ԴSN
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131122
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerSn(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Sn, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*v1v2 Դsnȶ岻һѽϴ*/
-    OSP_S8 SnBuffer[DMI_NAME_LEN] = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Sn) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 370, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Sn, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_POWER_PROSN_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)SnBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 371, "MPA GetPowerSn return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Sn, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)SnBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-
-}
-
-
- /******************************************************************************
- *     : MPAIntf_SetPowerFruOnOff
- *   : õԴ򿪡ر
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             FruPowerCtrl   򿪡رձ־0:رգ1:
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013126
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetPowerFruOnOff(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 FruPowerCtrl)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 372, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 373, "MPA sets power fru on or off, id(0x%llx), value(%d), devframe(0x%x).", 
-                        DriverId, FruPowerCtrl, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-
-    MpaCmd.Cmd = DRV_CMD_SET_POWER_FRU_ONOFF;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPE_POWER_ONOFF_ALL;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&FruPowerCtrl, (OSP_VOID *)NULL);    
-    
-}                               
-
- /******************************************************************************
- *     : MPAIntf_SetPowerFruOnOffSingle
- *   : õԴ򿪡ر
- *   : EnclAddr      
- *             DriverId      
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             FruPowerCtrl   򿪡رձ־0:رգ1:
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014327
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetPowerFruOnOffSingle(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 FruPowerCtrl)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 374, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 375, "MPA sets power fru on or off signal, id(0x%llx), value(%d).", DriverId, FruPowerCtrl);
-    MpaCmd.Cmd = DRV_CMD_SET_POWER_FRU_ONOFF_SINGLE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPE_POWER_ONOFF_LOCAL;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&FruPowerCtrl, (OSP_VOID *)NULL);    
-    
-}           
- /******************************************************************************
- *     : MPAIntf_GetPowerProductName
- *   : ѯԴƷ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Name       ԴƷ
- *             Length     ԴƷƳ
- *   : Name       ԴƷ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131122
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerProductName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 NameBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 376, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_POWER_PRONAME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NameBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 377, "MPA GetPowerProductName return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)NameBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPowerPsOKState
- *   : ѯԴPS_OKź״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             State  ԴPS_OKź״̬(1: normal, 0: alarm)
- *   : State  ԴPS_OKź״̬(1: normal, 0: alarm)
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013126
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerPsOKState(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == State))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 378, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_POWER_PS_OK_FLAG;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPowerPsAlertState
- *   : ѯԴPS_ALERTź״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             State  ԴPS_OKź״̬(1: normal, 0: alarm)
- *   : State  ԴPS_OKź״̬(1: normal, 0: alarm)
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013126
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerPsAlertState(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == State))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 379, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_POWER_PS_ALERT_FLAG;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPowerTemperature
- *   : ѯԴ¶
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Temp      ¶ֵ
- *   : Temp      ¶ֵλ棬ÿԴ¶ͨdeviceid֣0¶ȣ1 ԴڲоƬ¶
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201418
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
- OSP_S32 MPAIntf_GetPowerTemperature(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S32 *Temp)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Temp))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 380, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Temp);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_POWER_TEMP;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_S32);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;/**/
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Temp);    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetAllPowerConsumeAndThreshold
- *   : ѯĺ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Spec      SpecϢ
- *             Length   SpecϢ
- *   : Spec      SpecϢ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20141226
- *           : hulinhui 00289393
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetAllPowerConsumeAndThreshold(OSP_VOID *EnclAddr, OSP_U32 DriverId, DMI_SYS_POWER_COST_S *ConsumeThreshold)
-{
-
-    MPA_CMD_INFO_S MpaCmd;
-    DMI_SYS_POWER_COST_S ConsumeBuffer; /*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == ConsumeThreshold))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 87, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, ConsumeThreshold);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_CONSUME_THRESHOLD;
-    MpaCmd.FruId = DriverId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DMI_SYS_POWER_COST_S);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_POWEROUT;
-    MpaCmd.WtRd = MPA_READ;
-
-    OSAL_MemSet_s((OSP_U8 *)&ConsumeBuffer, sizeof(DMI_SYS_POWER_COST_S), INVALID_VALUE8, sizeof(DMI_SYS_POWER_COST_S));
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&ConsumeBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 88, "MPA GetAllPowerConsumeAndThreshold return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)ConsumeThreshold, sizeof(DMI_SYS_POWER_COST_S), 
-        (OSP_U8 *)&ConsumeBuffer, sizeof(DMI_SYS_POWER_COST_S));
-   
-    return RetVal;
-}
-
-/* BEGIN: Added by qintianyi, 2016/9/19  ⵥ:NA, ޸ԭ:xֵ㶨ƻԴ± */
-/******************************************************************************
-*     : MPAIntf_GetPowerTempProtect
-*   : ȡԴ±״̬
-*   : EnclAddr  
-*             DriverId  
-*             ProtectFlag     
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2016920
-*           : qintianyi
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetPowerTempProtect(OSP_VOID* EnclAddr, OSP_U64 DriverId, DMI_HIGHTEMP_RULE_E* Protect)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Protect))
-    {
-        /*ָֻΪʱӡ*/
-        DRV_MPA_TRACE(DRV_LOG_WARN, 89, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Protect);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_POWER_PROTECT_FLAG;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DMI_HIGHTEMP_RULE_E);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Protect);
-}
-
-/******************************************************************************
-*     : MPAIntf_SetPowerTempProtect
-*   : õԴ±״̬
-*   : EnclAddr     
-*             DriverId     
-*             ProtectFlag  
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2016920
-*           : qintianyi
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetPowerTempProtect(OSP_VOID* EnclAddr, OSP_U64 DriverId, DMI_HIGHTEMP_RULE_E Protect)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if (NULL == EnclAddr)
-    {
-        /*ָֻΪʱӡ*/
-        DRV_MPA_TRACE(DRV_LOG_WARN, 372, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE_LIMIT(DRV_LOG_INFO, 373, 1, 20*HZ, "MPA sets power temp protect, id(0x%llx), value(%d), devframe(0x%x).", 
-        DriverId, Protect, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-
-    MpaCmd.Cmd = DRV_CMD_SET_POWER_PROTECT_FLAG;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DMI_HIGHTEMP_RULE_E);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Protect, (OSP_VOID *)NULL);    
-    
-}
-
-/******************************************************************************
-*     : MPAIntf_GetPowerSupportSetTempProtect
-*   : ѯǷ֧õԴ±
-*   : EnclAddr     
-*             DriverId     
-*             ProtectFlag  
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2016920
-*           : qintianyi
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetPowerSupportSetTempProtect(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_BOOL* Support)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Support))
-    {
-        /*ָֻΪʱӡ*/
-        DRV_MPA_TRACE(DRV_LOG_WARN, 372, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Support);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_POWER_SUPPORT_SET_PROTECT;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_BOOL);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Support);
-}
-/* END: Added by qintianyi, 2016/9/19 */
-
- /******************************************************************************
- *     : MPAIntf_SetThresholdRatio
- *   : ϵ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Ratio      RatioϢ
- *             Length   RatioϢ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20141226
- *           : hulinhui 00289393
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetThresholdRatio(OSP_VOID *EnclAddr, OSP_U32 DriverId, DMI_SYS_POWER_COST_LIMIT_S *Ratio)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Ratio))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 89, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Ratio);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_THRESHOLD_RATIO;
-    MpaCmd.FruId = DriverId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DMI_SYS_POWER_COST_LIMIT_S);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_RATIO;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Ratio, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
- *     : MPAIntf_GetThresholdRatio
- *   : ѯĺ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                         豸idϢ
- *             Spec      SpecϢ
- *             Length   SpecϢ
- *   : Spec      SpecϢ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20141226
- *           : hulinhui 00289393
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetThresholdRatio(OSP_VOID *EnclAddr, OSP_U32 DriverId, DMI_SYS_POWER_COST_LIMIT_S *ThresholdRatio)
-{
-
-    MPA_CMD_INFO_S MpaCmd;
-    DMI_SYS_POWER_COST_LIMIT_S RatioBuffer;/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == ThresholdRatio))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 87, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, ThresholdRatio);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_THRESHOLD_RATIO;
-    MpaCmd.FruId = DriverId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DMI_SYS_POWER_COST_LIMIT_S);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_RATIO;
-    MpaCmd.WtRd = MPA_READ;
-
-    OSAL_MemSet_s((OSP_U8 *)&RatioBuffer, sizeof(DMI_SYS_POWER_COST_LIMIT_S), INVALID_VALUE8, sizeof(DMI_SYS_POWER_COST_LIMIT_S));
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&RatioBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 88, "MPA GetThresholdRatio return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)ThresholdRatio, sizeof(DMI_SYS_POWER_COST_LIMIT_S), 
-        (OSP_U8 *)&RatioBuffer, sizeof(DMI_SYS_POWER_COST_LIMIT_S));
-   
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuState
- *   : ѯBBU״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             State      BBU״̬(/쳣/粻/оƬ)
- *   : State      BBU״̬(/쳣/粻/оƬ)
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131114
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_BBU_STAT_E *State)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 TmpState = 0;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == State))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 381, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BBU_STATUS_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = BBU_STATE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&TmpState);    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 382, "MPA GetBbuState err 0x%x.", RetVal);
-        return RetVal;
-    }
-
-    *State = (DMI_BBU_STAT_E)TmpState;
-    return DRV_RETURN_OK;
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuWorkState
- *   : ѯBBU״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             State      BBU״̬
- *   : State      BBU״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131114
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuWorkState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_BBU_CHARGE_STAT_E *State)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 TmpState = 0;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == State))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 383, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BBU_STATE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = BBU_WORK_STATE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&TmpState);    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 384, "MPA GetBbuWorkState err 0x%x.", RetVal);
-        return RetVal;
-    }
-
-    *State = (DMI_BBU_CHARGE_STAT_E)TmpState;
-    return DRV_RETURN_OK;
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuWorkHour
- *   : ѯBBUʹʱ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Hour     ʹʱ䣬λ:Сʱ 
- *   : Hour     ʹʱ䣬λ:Сʱ 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131114
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuWorkHour(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Hour)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    
-    if ((NULL == EnclAddr) || (NULL == Hour))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 385, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Hour);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    MpaCmd.Cmd = DRV_CMD_BBU_USETIME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.SdrType = BBU_USE_TIME ;
-    MpaCmd.WtRd = MPA_READ;
-
-    if (MpaAddr->DevFrame < DRV_FRAMEMODEL_V1_END)
-    {
-        MpaCmd.BufLen = sizeof(OSP_U16);
-    }
-    else
-    {
-        MpaCmd.BufLen = sizeof(OSP_U32);
-    }
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Hour);    
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_SetBbuWorkHour
- *   : BBUʹʱ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Hour  BBUʹʱ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131124
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBbuWorkHour(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 Hour)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 386, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 387, "MPA sets bbu work houre, id(0x%llx), value(%d).", DriverId, Hour);
-    MpaCmd.Cmd = DRV_CMD_BBU_USETIME_CLEAR;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = BBU_USE_TIME;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Hour, (OSP_VOID *)NULL);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuHardSoftCompileVersion
- *   : ѯBBU汾Ӳ汾汾ʱ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Version   BBU汾
- *   : Version   BBU汾
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131114
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuHardSoftCompileVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_BBU_VER_S *Version)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Version))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 388, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Version);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BBU_HWVERSION_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_BBU_VER_S);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_HWVERSION;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Version);
-
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetBbuSoftwareVersion
- *   : ѯBBU汾
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Version   BBU汾
- *             Length     BBU汾
- *   : Version   BBU汾
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131127
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuSoftwareVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Version, OSP_U32 Length)
-{
-
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 VersionBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Version) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 389, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Version, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BBU_SWBETA_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 390, "MPA GetBbuSoftwareVersion return error.");
-       return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Version, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-
-    return RetVal;
-   
-}
-
-/******************************************************************************
-*     : MPAIntf_GetPowerFwVersion
-*   : ѯPOWER汾
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             Version   BBU汾
-*             Length     BBU汾
-*   : Version   BBU汾
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ   :
-* 1.     : 2017315
-*        : limingjiang/00400933
-*  ޸  : AR-0000261890-003-007DMIֵ֧ԴFWܡ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetPowerFwVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Version, OSP_U32 Length)
-{
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 VersionBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Version) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 389, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Version, Length);
-        return RetVal;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    MpaCmd.Cmd = DRV_CMD_POWER_FW_VERSION_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId) + 1;
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.WtRd = MPA_READ;
-
-    /* V2-BMCPOWERFruIdת SdrType*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        MpaCmd.SdrType = MPAIntf_FruidToUpgradeType(MpaCmd.FruId);
-    }
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-       DRV_MPA_TRACE(DRV_LOG_WARN, 508, "EnclAddr:%p DriverId:%llx. ret:%d, version:%s",
-           EnclAddr, DriverId, RetVal, VersionBuffer);
-       return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Version, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuSn
- *   : ѯbbu sn(V2-BMCBBU2)
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Sn        bbuк
- *             Length    
- *   : Sn        bbuк
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131218
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuSn(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Sn, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 SnBuffer[DMI_NAME_LEN] = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Sn) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 391, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Sn, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BBU_SN;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_SN;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)SnBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Sn, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)SnBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-
-}
-
-/******************************************************************************
-*     : MPAIntf_GetFanCtrlFwVersion
-*   : ѯFanCtrl汾
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             Version   BBU汾
-*             Length     BBU汾
-*   : Version   BBU汾
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ   :
-* 1.     : 2017325
-*        : limingjiang/00400933
-*  ޸  :DMIַ֧ȿưFWܡ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetFanCtrlFwVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Version, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 VersionBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Version) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 389, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Version, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_FANCTRL_FW_VERSION_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId) + 1;
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.WtRd = MPA_READ;
-    MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_BMC;/* BMC̶ʹôֵʶȿư*/
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-       DRV_MPA_TRACE(DRV_LOG_WARN, 508, "EnclAddr:%p DriverId:%llx. ret:%d, version:%s",
-           EnclAddr, DriverId, RetVal, VersionBuffer);
-       return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Version, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuLastDischargeTime
- *   : ѯBBUһηŵʱ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Time     BBUһηŵʱ 
- *   : Time     BBUһηŵʱ 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131115
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuLastDischargeTime(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_BBULAST_CHARGETIME_S *Time)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Time))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 393, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Time);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BBU_LAST_DICTIME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_BBULAST_CHARGETIME_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Time);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuLastDischargeParameter
- *   : ѯBBUһηŵ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Para      BBUһηŵ
- *   : Para      BBUһηŵ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131116
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuLastDischargeParameter(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Para)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_MPA_ADDR_S * MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Para))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 394, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Para);
-        return RetVal;
-    }
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    MpaCmd.Cmd = DRV_CMD_BBU_LAST_DICPARA_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    if (MpaAddr->DevFrame < DRV_FRAMEMODEL_12GSAS_EXP_END)
-    {
-        MpaCmd.BufLen = sizeof(DRV_BBULAST_DISCHARGEPARA_S);
-    }
-    else
-    {
-        MpaCmd.BufLen = BBU_MAX_DISCHG_PARA_NUM * sizeof(OSP_U16);
-    }
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Para);
-
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetBbuDischargeCount
- *   : ѯBBUŵ(V2-BMCBBU2)
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Cnt       BBUŵ
- *   : Cnt       BBUŵ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131116
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuDischargeCount(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Cnt)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Cnt))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 395, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Cnt);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BBU_USETIMES_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = BBU_DISCHARGE_COUNT;
-    MpaCmd.WtRd = MPA_READ;
-
-    /* BEGIN: Modified by shipin, 2014-8-13 15:40:12, ⵥ:DTS2014073100826 , ޸ԭ: ЧжЧʱֵ */
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Cnt);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return RetVal; 
-    }
-
-    if(MPA_DATA_IS_INVALID16(*Cnt))
-    {
-        RetVal = DRV_RETURN_NOT_READY;
-    }
-    /* END: Modified by shipin, 2014-8-13 15:40:12 */
-
-    return RetVal;    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuRemainingCapacity
- *   : ѯBBUʣ(V2-BMCBBU2)
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Capacity  BBUʣ
- *   : Capacity  BBUʣ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131116
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuRemainingCapacity(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Capacity)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Capacity))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 396, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Capacity);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BBU_ELEFT_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen =  sizeof(OSP_U8);
-    MpaCmd.SdrType = BBU_DUMP_ENERGY_PERCENTAGE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /* BEGIN: Modified by shipin, 2014-8-13 15:40:12, ⵥ:DTS2014073100826 , ޸ԭ: ЧжЧʱֵ */
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Capacity);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return RetVal; 
-    }
-
-    if(MPA_DATA_IS_INVALID8(*Capacity))
-    {
-        RetVal = DRV_RETURN_NOT_READY;
-    }
-    /* END: Modified by shipin, 2014-8-13 15:40:12 */
-
-    return RetVal;    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuRemainCapacityMah
- *   : ѯBBUʣʱ(V2-BMCBBU2)
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Capacity  BBUBBUʣʱ
- *   : Capacity  BBUBBUʣʱ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131220
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuRemainCapacityMah(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Capacity)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Capacity))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 397, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Capacity);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BBU_CAPACITY_MAH;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = BBU_DUMP_ENERGY_CAPACITY;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /* BEGIN: Modified by shipin, 2014-8-13 15:40:12, ⵥ:DTS2014073100826 , ޸ԭ: ЧжЧʱֵ */
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Capacity);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return RetVal; 
-    }
-
-    if(MPA_DATA_IS_INVALID16(*Capacity))
-    {
-        RetVal = DRV_RETURN_NOT_READY;
-    }
-    /* END: Modified by shipin, 2014-8-13 15:40:12 */
-
-    return RetVal;    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuChargeCurrent
- *   : ѯBBU
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Current   BBU
- *   : Current   BBU
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131116
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuChargeCurrent(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Current)
-
-{
-    OSP_U16 TmpCurrent = 0;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_MPA_ADDR_S * MpaAddr = NULL;
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Current))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 398, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Current);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    MpaCmd.Cmd = DRV_CMD_BBU_CHARGECURRENT_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = BBU_CHARGE_CURRENT;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&TmpCurrent);    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 399, "MPA IntF failed.");
-        return RetVal;
-    }
-
-    /* V2-BMC,BBUصĵΪ1mA, MPAתΪ0.1A*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_V1_END < MpaAddr->DevFrame))
-    {
-        TmpCurrent = TmpCurrent / MPA_PRECISION_100;
-    }
-
-    *Current = TmpCurrent;
-    return RetVal;    
-}
- /******************************************************************************
- *     : MPAIntf_GetBbuTemperature
- *   : ȡbbu¶
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Temp      ¶ֵ
- *   : Temp      ¶ֵ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131122
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuTemperature(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Temp)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Temp))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 400, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Temp);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BBU_TEMP_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = BBU_MAX_TEMP_NUM * sizeof(OSP_S8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;/**/
-    MpaCmd.WtRd = MPA_READ;
-
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Temp);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuOutPutVolt
- *   : ȡbbuѹ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Volt      ѹֵ
- *   : Volt      ѹֵ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131122
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuOutPutVolt(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_BBUBUCKVOL_S *Volt)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DRV_BBUBUCKVOL_S TmpVolt;
-    DAL_MPA_ADDR_S * MpaAddr = NULL;
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Volt))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 401, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Volt);
-        return DRV_RETURN_ERROR;
-    }
-
-    OSAL_MemSet_s(&TmpVolt, sizeof(DRV_BBUBUCKVOL_S), 0, sizeof(DRV_BBUBUCKVOL_S));
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    MpaCmd.Cmd = DRV_CMD_BBU_BUCKVOL_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_BBUBUCKVOL_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;/**/
-    MpaCmd.WtRd = MPA_READ;
-
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&TmpVolt);    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 402, "MPA IntF failed.");
-        return RetVal;
-    }
-
-    /* V2-BMC,BBUصĵѹΪ1mV, MPAתΪ0.1V*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_V1_END < MpaAddr->DevFrame))
-    {
-        /* BEGIN: Added by shipin, 2014-8-19 22:5:52, ⵥ:DTS2014073100826 , ޸ԭ: ЧжЧʱֵ*/
-        if(MPA_DATA_IS_INVALID16(TmpVolt.usBBUBuckVol))
-        {
-            RetVal = DRV_RETURN_NOT_READY;
-            return RetVal;
-        }
-        /* END: Added by shipin, 2014-8-19 22:5:52 */
-        
-        TmpVolt.usBBUBuckVol = TmpVolt.usBBUBuckVol / MPA_PRECISION_100;
-        TmpVolt.usBBUArvCurVol = TmpVolt.usBBUArvCurVol / MPA_PRECISION_100;
-        TmpVolt.usBBUExBusVol = TmpVolt.usBBUExBusVol / MPA_PRECISION_100;
-        TmpVolt.usBBUPkgVolVol = TmpVolt.usBBUPkgVolVol / MPA_PRECISION_100;
-    }
-    OSAL_MemCpy_s((OSP_U8 *)Volt, sizeof(DRV_BBUBUCKVOL_S), (OSP_U8 *)&TmpVolt, 
-        sizeof(DRV_BBUBUCKVOL_S));
-    return RetVal;    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuBuckVolt
- *   : ѯbbu buckѹ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Volt      ѹֵ
- *   : Volt      ѹֵ,λ0.01v
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014223
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuBuckVolt(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S16 *Volt)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DRV_BBUBUCKVOL_S TmpVolt;
-    
-    if ((NULL == EnclAddr) || (NULL == Volt))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 403, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Volt);
-        return DRV_RETURN_ERROR;
-    }
-
-    OSAL_MemSet_s((OSP_U8 *)&TmpVolt, sizeof(TmpVolt), 0, sizeof(TmpVolt));
-    RetVal = MPAIntf_GetBbuOutPutVolt(EnclAddr, DriverId, &TmpVolt);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 404, "MPA GetBbuBuckVolt failed! %d.", RetVal);
-        return RetVal;
-    }
-
-    *Volt = (OSP_S16)(TmpVolt.usBBUBuckVol * 10);
-    return RetVal;
-}
-
-/******************************************************************************
-*     : MPAIntf_GetBbuCellVolt
-*   : ѯbbu ذѹ
-*   : EnclAddr
-*              DriverId
-*              Volt
-*   ֵ  : OSP_S32
-*   ֵ  : 
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015414
-*           : h00289393
-*    ޸   : ɺ
-*
-******************************************************************************/
- /* BEGIN by hulinhui 00289393, REASON: DTS2015040709129   */
- /* ȡذѹظdmi */
-OSP_S32 MPAIntf_GetBbuCellVolt(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S16 *Volt)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U16 CellVol[LENGTH_08] = {0};
-    OSP_U16 CellVolA = 0;
-    OSP_U16 CellVolB = 0;
-    OSP_U8 DeviceId = 0;
-    /* BEGIN: Added by gouzhengxu 00289460, 2015/9/14  ⵥ:DTS2015082108074, ޸ԭ:MPAѯBBU/CBUѹӿ޸ģ²ѯCBUѹȷ */
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    /* END:   Added by gouzhengxu 00289460, 2015/9/14 ⵥ:DTS2015082108074 */
-     
-    if ((NULL == EnclAddr) || (NULL == Volt))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 403, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Volt);
-        return DRV_RETURN_ERROR;
-    }
-
-    RetVal = MPAIntf_GetBbuCellVoltage(EnclAddr, DriverId, CellVol);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 404, "MPA GetBbuCellVolt failed! %d.", RetVal);
-        return RetVal;
-    }
-
-    DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-
-    /* BEGIN: Added by gouzhengxu 00289460, 2015/9/14  ⵥ:DTS2015082108074, ޸ԭ:MPAѯBBU/CBUѹӿ޸ģ²ѯCBUѹȷ */
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    /* SESֵ֧̿BBU/CBUԤĵоѹΪ6SES/BMCֱѹ */
-    if (MpaAddr->DevFrame < DRV_FRAMEMODEL_12GSAS_EXP_END)
-    {
-        CellVolA = CellVol[BYTE_00] + CellVol[BYTE_01] + CellVol[BYTE_02] + CellVol[BYTE_03] + \
-                   CellVol[BYTE_04] + CellVol[BYTE_05];
-    }
-    else
-    {
-        CellVolA = CellVol[BYTE_00] + CellVol[BYTE_01] + CellVol[BYTE_02] + CellVol[BYTE_03];
-        CellVolB = CellVol[BYTE_04] + CellVol[BYTE_05] + CellVol[BYTE_06] + CellVol[BYTE_07];
-    }
-    /* END:   Added by gouzhengxu 00289460, 2015/9/14 ⵥ:DTS2015082108074 */
-
-    if (BYTE_00 == DeviceId)
-    {
-        *Volt = (OSP_S16)(CellVolA / MPA_PRECISION_10);
-    }
-    if (BYTE_01 == DeviceId)
-    {
-        *Volt = (OSP_S16)(CellVolB / MPA_PRECISION_10);
-    }
-     
-    return RetVal;
-}
- /* END by hulinhui 00289393 */
-
-
-
- /******************************************************************************
- *     : MPAIntf_GetBbuFaultBit
- *   : ȡbbu澯
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Status    64bit澯
- *   : Status    64bit澯
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131122
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuFaultBit(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U64 *Status)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S * MpaAddr = NULL;
-    
-    if ((NULL == EnclAddr) || (NULL == Status))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 405, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
-        return DRV_RETURN_ERROR;
-    }
-
-    /*v132bit澯v2չΪ64bit*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    if (MpaAddr->DevFrame < DRV_FRAMEMODEL_V1_END)
-    {
-        MpaCmd.Cmd = DRV_CMD_BBU_TRBCAUSE_GET;
-        MpaCmd.BufLen = sizeof(OSP_U32);
-    }
-    else
-    {
-        MpaCmd.Cmd = DRV_CMD_BBU_TRBCAUSE_EXT_GET;
-        MpaCmd.BufLen = sizeof(OSP_U64);
-    }
-    
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;/**/
-    MpaCmd.WtRd = MPA_READ;
-
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status);    
-
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBbuFaultBit
- *   : ģBBU 64ظ澯
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             FaultFlag    1: ģ/0: ģر
- *             Status  64bit澯
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201427
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBbuFaultBit(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 FaultFlag, OSP_U64 Status)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 DataIn[9] = {0};
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 406, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 407, "MPA sets bbu faultbit, id(0x%llx), faultflag(%d), fault status(0x%llx).", DriverId, FaultFlag, Status);
-    MpaCmd.Cmd = DRV_CMD_BBU_TRBCAUSE_EXT_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8) + sizeof(OSP_U64);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    DataIn[0] = FaultFlag;
-    OSAL_MemCpy_s(&DataIn[1], sizeof(OSP_U64), (OSP_U8 *)&Status, sizeof(OSP_U64));
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&DataIn[0], (OSP_VOID *)NULL);    
-}
- 
- /******************************************************************************
- *     : MPAIntf_GetBbuDisChargeCurrent
- *   : ѯBBUŵ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Current   BBUŵ
- *   : Current   BBUŵ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131116
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuDisChargeCurrent(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Current)
-{
-    OSP_U16 TmpCurrent = 0;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_MPA_ADDR_S * MpaAddr = NULL;
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Current))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 408, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Current);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    MpaCmd.Cmd = DRV_CMD_BBU_DISCHARGECURRENT_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = BBU_DISCHARGE_CURRENT;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&TmpCurrent);    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 409, "MPA IntF failed.");
-        return RetVal;
-    }
-
-    /* V2-SES,V2-BMC,BBUصĵΪ1mA, MPAתΪ0.1A*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_V1_END < MpaAddr->DevFrame))
-    {
-        TmpCurrent = TmpCurrent / MPA_PRECISION_100;
-    }
-
-    *Current = TmpCurrent;
-    return RetVal;    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuChargeFlag
- *   : ѯBBU־
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Flag   BBU־
- *   : Flag   BBU־
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131116
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuChargeFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Flag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Flag))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 410, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Flag);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BBUCHARGFLAG_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = BBU_CHARGE_FULL_FLAG; 
-    MpaCmd.WtRd = MPA_READ;
-
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Flag);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuGpioInfo
- *   : ѯBBU GPIOϢ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Info      BBU GPIOϢ
- *             Length    BBU GPIOϢ
- *   : Info      BBU GPIOϢ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131119
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuGpioInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Info, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 InfoBuffer[DRV_BBU_GPIO_NUM] = {0};/*ڻMPAѯ*/
-    OSP_U8 DataIn = 0;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Info) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 411, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Info, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BBU_GPIO_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_BBU_GPIO_NUM;
-    MpaCmd.SdrType = BBU_GPIO_INFO;
-    MpaCmd.WtRd = MPA_READ;
-    DataIn = (OSP_U8)DAL_FRU_SLOT_ID(DriverId);
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&DataIn, (OSP_VOID *)InfoBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 412, "MPA GetBbuGpioInfo return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Info, (OSP_U32)min(DRV_BBU_GPIO_NUM, (OSP_S32)Length), 
-        (OSP_U8 *)InfoBuffer, (OSP_U32)min(DRV_BBU_GPIO_NUM, (OSP_S32)Length));
-   
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBbuGpioInfo
- *   : BBU GPIOϢ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             OkFlag     GPIO OKʶ
- *             AlarmFlag  GPIO alarmʶ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131119
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBbuGpioInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 OkFlag, OSP_U8 AlarmFlag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 DataIn[2] = {0, 0};
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 413, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 414, "MPA sets bbu gpio info, id(0x%llx), value(%d), flag(%d).", DriverId, OkFlag, AlarmFlag);
-    MpaCmd.Cmd = DRV_CMD_BBU_GPIO;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OkFlag) + sizeof(AlarmFlag);
-    MpaCmd.SdrType = BBU_GPIO_INFO;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    DataIn[0] = OkFlag;
-    DataIn[1] = AlarmFlag;
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&DataIn[0], (OSP_VOID *)NULL);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBbuOnlineTest
- *   : BBU߲
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             TestFlag  BBU߲Ա־
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131120
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBbuOnlineTest(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 TestFlag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 415, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 416, "MPA sets bbu online test, id(0x%llx), value(%d).", DriverId, TestFlag);
-    MpaCmd.Cmd = DRV_CMD_BBU_DISCHARGEEN_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = BBU_DISCHARGE_ENABLE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TestFlag, (OSP_VOID *)NULL);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBbuMixedPlugError
- *   : BBU
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId   ID
- *             State     BBU״̬0:noarmal , 1:abnormal
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131120
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBbuMixedPlugError(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 State)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 DataIn[3] = {0, 0, 0};
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 417, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 418, "MPA sets bbu mixed plug, id(0x%x), value(%d).", FruId, State);
-    MpaCmd.Cmd = DRV_CMD_FRU_STATE_SET;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DataIn);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-    
-    DataIn[0] = 0;/*FRU״̬ӿڣһ0ʾBBU*/
-    DataIn[1] = (OSP_U8)(MpaCmd.FruId & 0xFF);/*FRU״̬ӿڣڶ0ʾڼBBU 0ʾBBU0, 1ʾBBU1*/
-    DataIn[2] = State;/*FRU״̬ӿڣʾBBU״̬*/    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetFruValid
- *   : fruǷ֧
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId     ID
- *             Flag      Ƿ֧֣0Ϊ֧֣1Ϊ֧
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014122
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetFruValid(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U32 Flag)
-{
-    OSP_U32 FruType = 0;
-
-    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
-    
-    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_BBU))
-    {
-        return MPAIntf_SetBbuMixedPlugError(EnclAddr, FruId, (OSP_U8)Flag);
-    }
-    else
-    {
-        return RETURN_INVALID;
-    }
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuCommunicationFault
- *   : ѯBBUͨŹ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Flag      BBUͨŹϱʶ
- *   : Flag      BBUͨŹϱʶ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131120
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuCommunicationFault(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Flag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Flag))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 420, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Flag);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BBU_COMFAULT_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Flag);    
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetBbuVendor
- *   : ѯBBUϢ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Vendor      BBUϢ
- *   : Vendor      BBUϢ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013124
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuVendor(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_BBUVENDOR_INFO_S *Vendor)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Vendor))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 421, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Vendor);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BBU_PROINFO_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_BBUVENDOR_INFO_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Vendor);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuModel
- *   : ȡBBUƷͺ(V2-BMCBBU2)
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Name      BBUƷ
- *             Length    Ƴ
- *   : Name      BBUƷ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131218
- *           : zhanwenbin 90003961
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuModel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Model, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 TmpModel[DMI_NAME_LEN] = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Model) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 422, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Model, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BBU_MODEL;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    OSAL_MemSet_s((OSP_U8 *)TmpModel, sizeof(TmpModel), 0, sizeof(TmpModel));
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TmpModel);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 423, "MPA GetBbuModel Return %d.", RetVal);
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/   
-    OSAL_MemCpy_s((OSP_U8 *)Model, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)TmpModel, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length)); 
-    
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuManuDate
- *   : ѯBBUʱ(V2-BMCBBU2)
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ     
- *             Date      BBUʱ
- *             Length    ʱ䳤
- *   : Date      BBUʱ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131218
- *           : zhanwenbin 90003961
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuManuDate(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Date, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 TmpDate[DMI_NAME_LEN] = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Date) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 424, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Date, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BBU_MANU_DATE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = PRODUCE_INFO_MANUFACTURE_DATE;
-    MpaCmd.WtRd = MPA_READ;
-
-    OSAL_MemSet_s((OSP_U8 *)TmpDate, sizeof(TmpDate), 0, sizeof(TmpDate));
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TmpDate);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 425, "MPA GetBbuManuDate Return %d.", RetVal);
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/   
-    DRV_MPA_TRACE(DRV_LOG_DBG, 426, "MPA GetBbuManuDate 0x%x,0x%x,0x%x,0x%x.", TmpDate[0],TmpDate[1],TmpDate[2],TmpDate[3]);
-
-    /*bbuϢЧʱbmc255*100+255=25755(0x649B),mpaҪתΪȫF*/
-    if ((0x9B == (OSP_U8)TmpDate[0]) && (0x64 == (OSP_U8)TmpDate[1]))
-    {
-        DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 427, 1, 20 * HZ, "MPA gets bbu manufacture date(0x%x, 0x%x, 0x%x, 0x%x).", TmpDate[0],TmpDate[1],TmpDate[2],TmpDate[3]);
-        OSAL_MemSet_s((OSP_U8 *)Date, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), INVALID_VALUE8, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-        return RetVal;
-    }
-    
-    OSAL_MemCpy_s((OSP_U8 *)Date, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)TmpDate, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length)); 
-    
-    return RetVal;
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetBbuVendorName
- *   : ѯBBU(V2-BMCBBU2)
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ  
- *             Name      BBU
- *             Length    Ƴ
- *   : Name      BBU
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131218
- *           : zhanwenbin 90003961
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuVendorName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 TmpVendor[DMI_NAME_LEN] = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 428, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BBU_VENDOR;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    /* BEGIN: Modified by jiangfanlu 00101148, 2014/7/10  ⵥ:DTS2014071000424, ޸ԭ:mpaҪȡmpaĳȡ */
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    /* END:   Modified by jiangfanlu 00101148, 2014/7/10 ⵥ:DTS2014071000424 */
-    MpaCmd.SdrType = PRODUCE_INFO_VENDOR;
-    MpaCmd.WtRd = MPA_READ;
-
-    OSAL_MemSet_s((OSP_U8 *)TmpVendor, sizeof(TmpVendor), 0, sizeof(TmpVendor));
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TmpVendor);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 429, "MPA GetBbuVendorName Return %d.", RetVal);
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/   
-    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)TmpVendor, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length)); 
-    
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuCellVoltage
- *   : ѯBBUоѹ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Voltage   BBUоѹ
- *   : Voltage   BBUоѹ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013124
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuCellVoltage(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Voltage)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    
-    if ((NULL == EnclAddr) || (NULL == Voltage))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 430, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Voltage);
-        return RetVal;
-    }
-    
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    MpaCmd.Cmd = DRV_CMD_BBU_CHIPVOL_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    if (MpaAddr->DevFrame < DRV_FRAMEMODEL_12GSAS_EXP_END)
-    {
-        MpaCmd.BufLen = sizeof(DRV_BBUCOREVOL_S);
-    }
-    else
-    {
-        MpaCmd.BufLen = BBU_MAX_CELL_VOLT_NUM * sizeof(OSP_U16);
-    }
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Voltage);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBbuPreLife
- *   : bbuԤ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             PreAlarmTime  Ԥʱ䣬λΪ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : V1֧
- * 
- * ޸ʷ      :
- *  1.       : 20131220
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBbuPreLife(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 PreAlarmTime)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 431, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_BBU_PRE_LIFE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = BBU_LIFE_PRE_ALARM_TIME;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&PreAlarmTime, (OSP_VOID *)NULL);
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuPreLife
- *   : ѯbbuԤ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             PreAlarmTime  Ԥʱ䣬λΪ
- *   : PreAlarmTime  Ԥʱ䣬λΪ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131220
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuPreLife(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *PreAlarmTime)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == PreAlarmTime))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 432, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PreAlarmTime);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BBU_PRE_LIFE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = BBU_LIFE_PRE_ALARM_TIME;
-    MpaCmd.WtRd = MPA_READ;
-
-    /* BEGIN: Modified by shipin, 2014-8-13 15:39:35, ⵥ:DTS2014073100826 , ޸ԭ: ЧжЧʱֵ*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)PreAlarmTime);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return RetVal; 
-    }
-
-    if(MPA_DATA_IS_INVALID16(*PreAlarmTime))
-    {
-        RetVal = DRV_RETURN_NOT_READY;
-    }
-    /* END: Modified by shipin, 2014-8-13 15:39:35 */
-
-    return RetVal;
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBbuLife
- *   : bbu
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             PreAlarmTime ʱ䣬λΪ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : V1֧
- * 
- * ޸ʷ      :
- *  1.       : 20131220
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBbuLife(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 AlarmTime)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 433, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_BBU_LIFE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = BBU_LIFE_ALARM_TIME;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&AlarmTime, (OSP_VOID *)NULL);
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuLife
- *   : ѯbbu
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             PreAlarmTime  Ԥʱ䣬λΪ
- *   : PreAlarmTime  Ԥʱ䣬λΪ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131220
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuLife(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *AlarmTime)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == AlarmTime))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 434, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, AlarmTime);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BBU_LIFE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = BBU_LIFE_ALARM_TIME;
-    MpaCmd.WtRd = MPA_READ;
-
-    /* BEGIN: Modified by shipin, 2014-8-13 15:40:12, ⵥ:DTS2014073100826 , ޸ԭ: ЧжЧʱֵ */
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)AlarmTime);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        return RetVal; 
-    }
-
-    if(MPA_DATA_IS_INVALID16(*AlarmTime))
-    {
-        RetVal = DRV_RETURN_NOT_READY;
-    }
-    /* END: Modified by shipin, 2014-8-13 15:40:12 */
-
-    return RetVal;
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetCbuESR
- *   : ѯcbu ESR
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             ESR       ESRֵλŷ
- *   : ESR       ESRֵλŷ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014829
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetCbuESR(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *ESR)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == ESR))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, ESR);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_CBU_ESR;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = INVALID_VALUE8;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)ESR);
-}
-
-/* BEGIN: Added by gouzhengxu 00289460, 2015/9/22  ⵥ:NA, ޸ԭ:CBU̬ѹ */
-/******************************************************************************
-*     : MPAIntf_SetCbuVolt
-*   : CBUѹ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             OpCode      ѹڲ
-*                           0 Invalid
-*                           1 CBUһѹ(С)
-*                           2 CBUڶѹ
-*                           3 CBUѹ
-*                           4 CBUĵѹ
-*   : NA
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015922
-*           : gouzhengxu 00289460
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetCbuVolt(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 OpCode)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_CBU_VOLT;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&OpCode, (OSP_VOID *)NULL);
-
-}
-
-/******************************************************************************
-*     : MPAIntf_GetAdjustVoltFlag
-*   : ѯǷֶ֧̬ѹ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             *Flag       Ƿֶ֧̬ѹ־
-*   : *Flag       Ƿֶ֧̬ѹ־
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015922
-*           : gouzhengxu 00289460
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetAdjustVoltFlag(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U16* Flag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Flag))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Flag);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_ADJUST_VOLT_FLAG;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = INVALID_VALUE8;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)Flag);
-}
-/* END:   Added by gouzhengxu 00289460, 2015/9/22 ⵥ:NA */
-
-/* BEGIN: Added by gouzhengxu 00289460, 2015/12/31  ⵥ:NA, ޸ԭ:ģBBU/CBUϽӿ */
-/******************************************************************************
-*     : MPAIntf_SimulateBbuAlarm
-*   : ģBBU/CBUϽӿ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             AlarmType  ģָ澯
-*             OpCode     ģ澯/ģ
-*   : NA
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 201614
-*           : gouzhengxu 00289460
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SimulateBbuAlarm(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 AlarmType, OSP_U8 OpCode)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U8 DataIn[2] = {0, 0};
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SIMULATE_BBU_ALARM;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(AlarmType) + sizeof(OpCode);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    DataIn[0] = AlarmType;
-    DataIn[1] = OpCode;
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&DataIn[0], (OSP_VOID *)NULL); 
-
-}
-/* END:   Added by gouzhengxu 00289460, 2015/12/31 ⵥ:NA */
-
- /******************************************************************************
- *     : MPAIntf_GetBbuPreLifeAlarm
- *   : ѯbbuԤڸ澯״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Alarm  Ԥڸ澯
- *   : Alarm  Ԥڸ澯
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131220
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuPreLifeAlarm(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Alarm)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Alarm))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 435, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Alarm);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BBU_PRE_LIFE_ALARM;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = BBU_LIFE_PRE_ALARM_STATUS;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)Alarm);
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuLifeAlarm
- *   : ѯbbuڸ澯
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Alarm  ڸ澯
- *   : Alarm  ڸ澯
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014313
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuLifeAlarm(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Alarm)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Alarm))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 436, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Alarm);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BBU_LIFE_ALARM;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = BBU_LIFE_ALARM_STATUS;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)Alarm);
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuCapacityPreAlarm
- *   : ѯBBUԤ澯
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             CapacityPreAlarm    BBUԤ澯
- *   : CapacityPreAlarm    BBUԤ澯
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131220
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuCapacityPreAlarm(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *CapacityPreAlarm)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == CapacityPreAlarm))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 437, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, CapacityPreAlarm);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BBU_CAPACITY_PRE_ALARM;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = BBU_CAPACITY_PRE_ALARM_LIMIT;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)CapacityPreAlarm);
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBbuCapacityPreAlarm
- *   : BBUԤ澯
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             CapacityPreAlarm    BBUԤ澯
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131220
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBbuCapacityPreAlarm(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 CapacityPreAlarm)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 438, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 439, "MPA sets bbu capacity prealarm, id(0x%llx), value(%d).", DriverId, CapacityPreAlarm);
-    MpaCmd.Cmd = DRV_CMD_SET_BBU_CAPACITY_PRE_ALARM;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = BBU_CAPACITY_PRE_ALARM_LIMIT;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&CapacityPreAlarm, (OSP_VOID *)NULL);    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBbuCapacityAlarm
- *   : ѯBBU澯
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             CapacityAlarm  BBU澯
- *   : CapacityAlarm  BBU澯
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131220
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuCapacityAlarm(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *CapacityAlarm)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == CapacityAlarm))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 440, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, CapacityAlarm);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BBU_CAPACITY_ALARM;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = BBU_CAPACITY_ALARM_LIMIT;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)CapacityAlarm);
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBbuCapacityAlarm
- *   : BBU澯
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             CapacityAlarm  BBU澯
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131220
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBbuCapacityAlarm(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 CapacityAlarm)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 441, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 442, "MPA sets bbu capacity alarm, id(0x%llx), value(%d).", DriverId, CapacityAlarm);
-    MpaCmd.Cmd = DRV_CMD_SET_BBU_CAPACITY_ALARM;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = BBU_CAPACITY_ALARM_LIMIT;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&CapacityAlarm, (OSP_VOID *)NULL);    
-}
-
-/******************************************************************************
-*     : MPAIntf_ClearTdmErrCode
-*   : tdm 
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             ClearFlag  
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2014913
-*           : chenkeren 00221000
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_ClearTdmErrCode(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 ClearFlag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "%s, Point NULL %p", __FUNCTION__, EnclAddr);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_CLEAR_TDM_ERRCODE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPE_TDM_ERRCODE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&ClearFlag, (OSP_VOID *)NULL);
-} 
-
-/******************************************************************************
-*     : MPAIntf_GetTdmErrCode
-*   : ѯtdm 
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             TdmErrCode  tdm 
-*   : TdmErrCode  tdm 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2014913
-*           : chenkeren 00221000
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetTdmErrCode(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *TdmErrCode)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == TdmErrCode))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "%s, Point NULL %p, %p", __FUNCTION__, EnclAddr, TdmErrCode);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_TDM_ERRCODE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = SDRTYPE_TDM_ERRCODE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)TdmErrCode);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetMgmtCpuLog
- *   : ѯоƬ־
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Log       ־Ϣ
- *             Length    ־Ϣ
- *   : Log       ־Ϣ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131115
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetMgmtCpuLog(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Log, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    static OSP_U8 LogCnt = 0;
-    
-    if ((NULL == EnclAddr) || (NULL == Log) || (Length > MPA_LOG_LENGTH))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 443, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Log, Length);
-        return RetVal;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-
-    MpaCmd.Cmd = DRV_CMD_LOG_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_UPGRADE_LEN;                     /* DTS2014012407685 */
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*2014-10-25 c00221000 for DTS2014102008537 begin: ŻV2-BMCѼ־*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        //DMIĿư塢涼,˴ָȡFRUIDǿư
-        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) != MpaCmd.FruId)
-        {
-            return DRV_RETURN_OK;
-        }
-        
-        LogCnt++;
-        
-        /*lint -e774*/
-        if (0 == (LogCnt % 2))  //3 ÿζѼ־
-        {
-            return DRV_RETURN_OK;
-        }
-        /*lint +e774*/
-
-    }
-    /*2014-10-25 c00221000 for DTS2014102008537 end*/
-
-/*2014-1-27 c00221000 for DTS2014012407685 begin: ѯ־ȵbuffer
-    ֱϲbufferMPAõ*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Log);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 446, "MPA Getlog return error.");
-        return RetVal;
-    }
-/*2014-1-27 c00221000 for DTS2014012407685 end*/
-
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_SetCustomRules
- *   : òƷ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId  ID ͡FRUIDDEVICE IDϢ   
- *             Rule      Ʒ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014228
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetCustomRules(OSP_VOID *EnclAddr, OSP_U64 DriverId, CUSTOM_RULE_S *Rule)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Rule))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 447, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Rule);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame)
-    {
-        return RETURN_INVALID;
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_CUSTOM_RULE_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(CUSTOM_RULE_S);
-    MpaCmd.SdrType = SDRTYPE_LED_RULE;
-    MpaCmd.WtRd = MPA_WRITE;
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        MpaCmd.BufLen = sizeof(Rule->UcFrameNumHexCode);
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&(Rule->UcFrameNumHexCode), (OSP_VOID *)NULL); 
-    }
-    else
-    {
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Rule, (OSP_VOID *)NULL);  
-    }
-}
-
- /******************************************************************************
- *     : MPAIntf_GetCustomRules
- *   : ѯƷƻ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId  ID ͡FRUIDDEVICE IDϢ   
- *             Rule      Ʒ
- *   : Rule      Ʒ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014424
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetCustomRules(OSP_VOID *EnclAddr, OSP_U64 DriverId, CUSTOM_RULE_S *Rule)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == Rule))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 449, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Rule);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame)
-    {
-        return RETURN_INVALID;
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_CUSTOM_RULE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(CUSTOM_RULE_S);
-    MpaCmd.SdrType = SDRTYPE_LED_RULE;
-    MpaCmd.WtRd = MPA_READ;
-
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Rule); 
-    }
-    else
-    {
-        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Rule, (OSP_VOID *)Rule);  
-    }
-}
-
-/******************************************************************************
-*     : MPAIntf_SetCpldBit
-*   : ߼Ĵֵ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId  ID ͡FRUIDDEVICE IDϢ
-*             RegAddr   ߼Ĵַ
-*             RegBit    ߼Ĵbitλ
-*             BitValue  ø߼Ĵֵ
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 20170406
-*           : chenlifu 00378798
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetCpldBit(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32  RegAddr, OSP_U32 RegBit, OSP_U32 BitValue)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 DataIn[12] = {0};
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 345, "MPA finds the pointer is null 0x%p.", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-    MpaCmd.Cmd = DRV_CMD_CPLD_BIT_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U32) + sizeof(OSP_U32) + sizeof(OSP_U32);
-    MpaCmd.SdrType = SDRTYPT_RW_CPLD_BIT;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    DataIn[0] = (OSP_U8)(RegAddr & 0xFF); 
-    DataIn[1] = (OSP_U8)((RegAddr >> MPA_OFFSET_BIT8) & 0xFF); 
-    DataIn[4] = (OSP_U8)(RegBit & 0xFF); 
-    DataIn[8] = (OSP_U8)(BitValue & 0xFF); 
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
-}
- 
-/******************************************************************************
-*     : MPAIntf_GetCpldBit
-*   : ȡ߼Ĵֵ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId  ID ͡FRUIDDEVICE IDϢ
-*             RegAddr   ߼Ĵַ
-*             RegBit    ߼Ĵbitλ
-*             BitValue   ѯֵ
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 20170406
-*           : chenlifu 00378798
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetCpldBit(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32  RegAddr, OSP_U32 RegBit, OSP_U8 *BitValue)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 DataIn[9] = {0};
-
-    if ((NULL == EnclAddr) || (NULL == BitValue))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, BitValue);
-        return DRV_RETURN_ERROR;
-    }
-    MpaCmd.Cmd = DRV_CMD_CPLD_BIT_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPT_RW_CPLD_BIT;
-    MpaCmd.WtRd = MPA_READ;
-    /*BMCĲѯҪȴ볤,BMCȷϳ8,˴ħ*/
-    DataIn[0] = 8;
-    DataIn[1] = (OSP_U8)(RegAddr & 0xFF); 
-    DataIn[2] = (OSP_U8)((RegAddr >> MPA_OFFSET_BIT8) & 0xFF); 
-    DataIn[5] = (OSP_U8)(RegBit & 0xFF); 
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)BitValue);   
-}
-
- /******************************************************************************
- *     : MPAIntf_GetMgmtCpuEepromLog
- *   : ѯоƬEEPROM־
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Log       EEPROM־Ϣ
- *             Length    EEPROM־Ϣ
- *   : Log       EEPROM־Ϣ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131115
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetMgmtCpuEepromLog(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Log, OSP_U32 Length)
-{
-
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 *LogBuffer = NULL;/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Log) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 451, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Log, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_EEPROM_LOG_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_SES_LOG_LENGTH;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    LogBuffer = (OSP_S8 *)MPA_Malloc(DRV_SES_LOG_LENGTH);
-    if(NULL == LogBuffer)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 452, "MPA malloc memory failed.");
-        return RetVal;
-    }
-    OSAL_MemSet_s(LogBuffer, DRV_SES_LOG_LENGTH, 0, DRV_SES_LOG_LENGTH);
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)LogBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 453, "MPA GeEepromlog return error.");
-        MPA_Free(LogBuffer);
-        LogBuffer = NULL;
-        return RetVal;
-    }
-    
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Log, (OSP_U32)min(DRV_SES_LOG_LENGTH, (OSP_S32)Length), 
-        (OSP_U8 *)LogBuffer, (OSP_U32)min(DRV_SES_LOG_LENGTH, (OSP_S32)Length));
-    
-    MPA_Free(LogBuffer);
-    LogBuffer = NULL;
-    return RetVal;
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBoardWdtSignal
- *   : ιź
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             WdtSignal  ιź
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131211
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBoardWdtSignal(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 WdtSignal)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 454, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return RetVal;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 455, "MPA sets board wdtsignal, id(0x%llx), wdtsignal(%d).", DriverId, WdtSignal);
-    
-    MpaCmd.Cmd = DRV_CMD_WATCHDOG_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&WdtSignal, (OSP_VOID *)NULL);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetShakeSensorRecord
- *   : ѯ񶯴¼
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Record    񶯴¼
- *   : Record    񶯴¼
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131115
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetShakeSensorRecord(OSP_VOID *EnclAddr, OSP_U64 DriverId, DrvShakeRecord_S *Record)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Record))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 456, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Record);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SHAKEINFO_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DrvShakeRecord_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Record);    
-    
-}
-
-/******************************************************************************
-*     : MPAIntf_GetShakeSensorInfo
-*   : ѯ񶯴Ϣ(X,Y,Z)
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             Info    񶯴Ϣ(X,Y,Z)
-*   : Info    񶯴Ϣ(X,Y,Z)
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 20130413
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetShakeSensorInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_SES_MOTION_SENSOR_INFO_S *Info)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Info))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 457, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Info);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SENSOR_INFO_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_SES_MOTION_SENSOR_INFO_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Info);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetSmmMasterSlave
- *   : ù״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Flag    ״̬
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131125
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetSmmMasterSlave(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Flag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 458, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SMM_STATUS_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Flag, (OSP_VOID *)NULL);
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetIntfCardPowerStatus
- *   : ѯӿڿԴ״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Status    ӿڿԴ״̬
- *   : Status    ӿڿԴ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131125
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetIntfCardPowerStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Status)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Status))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 459, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_INTFCARD_POWER_STATUS_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status);
-    
-}           
-
- /******************************************************************************
- *     : MPAIntf_GetIntfCardPowerGoodStatus
- *   : ѯӿڿԴ״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId      FRUID  
- *             Info    ӿڿԴ״̬
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014513
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetIntfCardPowerGoodStatus(OSP_VOID *EnclAddr, OSP_U32 FruId, FRU_DFD_INFO_S *Info)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U8 Status = 0;
-    OSP_U64 DriverId = 0;
-    OSP_U32 FruType = 0;
-    
-    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
-    DriverId = (OSP_U64)FruId << SHIFT_08;
-
-    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_IOCARD)
-        || (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_SHARE_IOCARD)))
-    {
-        RetVal = MPAIntf_GetIntfCardPowerStatus(EnclAddr, DriverId, &Status);
-        if (DRV_RETURN_OK != RetVal)
-        {
-            return RetVal;
-        }
-
-        Info->PowerGood = (OSP_U32)Status;
-        return RetVal;
-    }
-    else
-    {
-        return RETURN_INVALID;
-    }
-}
-
- /******************************************************************************
- *     : MPAIntf_GetIoCardPowerConsume
- *   : ѯ ӿڿĹ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             PowerConsume  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014623
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetIoCardPowerConsume(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *PowerConsume)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == PowerConsume))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 460, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PowerConsume);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_IOCARD_POWER_CONSUME_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = SDRTYPE_CARD_POWER_CONSUME;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PowerConsume);
-    
-}           
-
- /******************************************************************************
- *     : MPAIntf_SetIoCardSfpSleepStatus
- *   : ýӿڿsleepź
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Status    ״̬
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014623
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetIoCardSfpSleepStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 Status)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 461, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-    
-    DRV_MPA_TRACE(DRV_LOG_INFO, 462, "MPA sets iocard sfp sleep status, id(0x%llx), value(%d).", DriverId, Status);
-
-    MpaCmd.Cmd = DRV_CMD_IOCARD_SFP_SLEEP_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);    
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPE_CARD_SET_SFP_SLEEEP_STATE;
-    MpaCmd.WtRd = MPA_WRITE;
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Status, (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetIoCardSfpSleepStatus
- *   : ѯӿڿsleepź
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Status    ״̬
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201471
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetIoCardSfpSleepStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_LIGHT_STATE_E *Status)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 TmpStatus = 0;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Status))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 463, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_IOCARD_SFP_SLEEP_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);    
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPE_CARD_GET_SFP_SLEEEP_STATE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd,  (OSP_VOID *)NULL, (OSP_VOID *)&TmpStatus);    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 464, "MPA GetIoCardSfpSleepStatus err 0x%x.", RetVal);
-        return RetVal;
-    }
-
-    *Status = (DMI_LIGHT_STATE_E)TmpStatus;
-    return DRV_RETURN_OK;
-}
-
-/******************************************************************************
-*     : MPAIntf_SetIoCardImgCs
-*   : ýӿڿƬѡź
-*   : EnclAddr ϲ·ĵַϢmcutype,scsiַframetype  
-*             DriverId ID ͡FRUIDDEVICE IDϢ   
-*             FwId      
-*   : 
-*   ֵ  : DRV_RETURN_OK - ɹ;ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 201485
-*           : jiangfanlu 00101148
-*    ޸   : ɺ AR-0000787332
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetIoCardImgCs(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 FwId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_IOCARD_IMG_CS_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);    
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = SDRTYPE_IOCARD_CS;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&FwId, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
-*     : MPAIntf_GetIoCardImgCs
-*   : ȡӿڿfpga Ƭѡź
-*   : EnclAddr ϲ·ĵַϢmcutype,scsiַframetype  
-*             DriverId ID ͡FRUIDDEVICE IDϢ   
-*             FwId           
-*   : FwId      
-*   ֵ  : DRV_RETURN_OK - ɹ;ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 201485
-*           : jiangfanlu 00101148
-*    ޸   : ɺ AR-0000787332
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetIoCardImgCs(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *FwId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == FwId))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, FwId);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_IOCARD_IMG_CS_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);    
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = SDRTYPE_IOCARD_CS;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd,  (OSP_VOID *)NULL, (OSP_VOID *)FwId);    
-
-}
- 
- /******************************************************************************
- *     : MPAIntf_GetBmcEccInfo
- *   : ѯ1710ECCϢ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             EccInfo   ECCϢ
- *             Length    
- *   : EccInfo   ECCϢ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131125
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBmcEccInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *EccInfo, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 Buffer[MPA_BMC_1710_ECC_LENGTH] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == EccInfo) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 465, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, EccInfo, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_ECC_INFO_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_BMC_1710_ECC_LENGTH;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Buffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 466, "MPA GetBmcEccInfo return error.");
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)EccInfo, (OSP_U32)(OSP_U32)min(MPA_BMC_1710_ECC_LENGTH, (OSP_S32)Length), 
-        (OSP_U8 *)Buffer, (OSP_U32)(OSP_U32)min(MPA_BMC_1710_ECC_LENGTH, (OSP_S32)Length));
-   
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_GetSwitchChipSpeed
- *   : ȡоƬ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Speed      
- *   : Speed      
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131123
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetSwitchChipSpeed(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_PORT_SPEED_E *Speed)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Speed))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 467, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Speed);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SWITCH_SPEED_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_PORT_SPEED_E);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;/**/
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Speed);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetSwitchChipLostData
- *   : ȡоƬ
- *   : EnclAddr  
- *             DriverId  
- *             Speed     
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131123
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetSwitchChipLostData(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Data))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 468, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SWITCH_LOST_DATA_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_PORT_SPEED_E);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;/**/
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Data);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetMceInfo
- *   : ѯmceϢ
- *   : EnclAddr  
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             EccInfo   MCEϢ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014422
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetMceInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *MceInfo)
-{
-#define MCE_INFO_LENGTH_V2  (500)   /* 2CPU,20Bank, 1Bank 25Byte*/
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == MceInfo))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 469, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, MceInfo);
-        return RetVal;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    MpaCmd.Cmd = DRV_CMD_MCE_INFO_GET_V2BMC;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MCE_INFO_LENGTH_V2;
-    MpaCmd.SdrType = SDRTYPE_MCE_INFO;
-    MpaCmd.WtRd = MPA_READ;
-
-    /* V2-BMC*/
-    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
-        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
-    {
-        /* ȡMCE*/
-        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)MceInfo);
-        if (DRV_RETURN_OK != RetVal)
-        {
-            DRV_MPA_TRACE(DRV_LOG_DBG, 470, "MPA GetBmcMceInfo return error.");
-            return RetVal;
-        }
-    }
-
-    return DRV_RETURN_OK;
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetDimmMceInfo
- *   : ȡڴMCEϢ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ      
- *             EccInfo   DAL_MCA_INFO_Sṹ巵MCEϢ
- *   : EccInfo   DAL_MCA_INFO_Sṹ巵MCEϢ
- *   ֵ  : OSP_S32
- * ˵  : ǰMPAֻBMCѯMCEϢ
- * 
- * ޸ʷ      :
- *  1.       : 20131128
- *           : zhanwenbin 90003961
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetDimmMceInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, DAL_MCA_INFO_S* EccInfo)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 *MceInfo = NULL;/*ڻMPAѯ*/
-    OSP_U8 MceValidFlag = 0;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == EccInfo))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 471, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, EccInfo);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_MCE_INFO_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_V1R1MCE_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*ȡMCEϢ*/
-    MPA_GetV1R1MceData(&MceInfo);
-
-    /*ݶȡMCEϢӦڴǷMCE*/
-    RetVal = MPA_CheckDimmMceValid((OSP_U8)MpaCmd.DeviceId, (OSP_VOID *)MceInfo, &MceValidFlag);
-
-    if(DRV_RETURN_ERROR == RetVal)
-    {
-        EccInfo->McAVaildFlag = 0;
-        EccInfo->MCACount = 0;
-        return DRV_RETURN_OK;
-    }
-    
-    if(MCE_INFO_VALID == MceValidFlag)
-    {
-        EccInfo->McAVaildFlag = 1;
-        EccInfo->MCACount = 1;
-    }
-    else
-    {
-        EccInfo->McAVaildFlag = 0;
-        EccInfo->MCACount = 0;
-    }
-
-    return DRV_RETURN_OK;
-}
-
- /******************************************************************************
- *     : MPAIntf_GetCpldRegister
- *   : ѯcpldĴ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ      
- *             CpldValue  cpldĴֵ
- *             Length     
- *   : CpldValue  cpldĴֵ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013124
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetCpldRegister(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *CpldValue, OSP_U32 Length)
-{
-#define MPA_CPLD_REG_LEN 0x200
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 *TempBuffer = NULL;      /*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == CpldValue) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 472, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, CpldValue, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_FPGA_CPLD_READ;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_CPLD_REG_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /* 2014-08-19  c00221000 for DTS2014070814034 begin: mpaʱڴ棬ʱȡСֵ*/
-    TempBuffer = (OSP_U8 *)MPA_Malloc(MPA_CPLD_REG_LEN);
-    if (NULL == TempBuffer)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 473, "MPA malloc memory failed.");
-        return RetVal;
-    }
-    OSAL_MemSet_s(TempBuffer, MPA_CPLD_REG_LEN, 0, MPA_CPLD_REG_LEN);
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 474, "in %s, MPA_Intf return error.", __FUNCTION__);
-        MPA_Free(TempBuffer);
-        TempBuffer = NULL;
-        return RetVal;
-    }
-
-    /*·ĳʵʳȵСֵ*/
-    OSAL_MemCpy_s((OSP_U8 *)CpldValue, (OSP_U32)min(MPA_CPLD_REG_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)TempBuffer, (OSP_U32)min(MPA_CPLD_REG_LEN, (OSP_S32)Length));
-    
-    MPA_Free(TempBuffer);
-    TempBuffer = NULL;    
-    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
-
-    return RetVal;
-}
-
-
- /******************************************************************************
- *     : MPAIntf_SetUsbHubReset
- *   : λusb hub
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ      
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013127
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetUsbHubReset(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 475, "MPA finds the pointer is null.");
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 476, "MPA sets usbhub reset, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_USBHUB_RESET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetUsbHubChannel
- *   : лusb hub
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ      
- *             Channel   USBͨ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013127
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetUsbHubChannel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Channel)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 477, "MPA finds the pointer is null.");
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 478, "MPA sets usbhub channel, id(0x%llx), value(%d), devframe(0x%x).", DriverId, Channel, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-    MpaCmd.Cmd = DRV_CMD_USBSWTICH_CHOOSE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Channel, (OSP_VOID *)NULL);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetUsbHubChannel
- *   :  ѯUSBͨ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ      
- *             Channel   USBͨ0:ưAͨ 1:ưBͨ
- *   : Channel   USBͨ0:ưAͨ 1:ưBͨ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201418
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetUsbHubChannel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Channel)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Channel))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 479, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Channel);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_USB_SWTICH;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Channel);    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetSpiTestResult
- *   : ѯSPIԽ
- *   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             *Result    SPIԽ, 0:PASS; 1:FAIL
- *   : *Result    SPIԽ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013127
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetSpiTestResult(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Result)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Result))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 480, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Result);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_SPI_TEST_RESULT;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Result);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetQsfpInfo
- *   : ѯģϢ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Info      ģϢ
- *             Length    Ϣ
- *   : Info      ģϢ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131211
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetQsfpInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_CHAR *Info, OSP_U16 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*תΪԭdev sub id*/
-    OSP_U8 DataIn = 0;
-    OSP_U8 CardSlot = INVALID_VALUE8;
-    OSP_U8 Channel = INVALID_VALUE8;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_CHAR *QsfpInfo = NULL;
-    
-    if ((NULL == EnclAddr) || (NULL == Info) || (DRV_QSFP_INFO_LEN != Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 481, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Info, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    /*bmcضһֽڴ*/
-    QsfpInfo = (OSP_CHAR *)MPA_Malloc(DRV_QSFP_INFO_LEN + 1);
-    if (NULL == QsfpInfo)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 482, "MPA malloc memory failed.");
-        return DRV_RETURN_ERROR;
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_QSFP_INFO_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_QSFP_INFO_LEN + 1;
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_QSFP;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*ǰdevתsub id4λΪλ4λΪͨ*/
-    CardSlot = (OSP_U8)DAL_FRU_ID_TO_SLOT(MpaCmd.FruId);
-    Channel = MpaCmd.DeviceId + 1;
-    DataIn = (OSP_U8)(CardSlot << 4) | Channel; 
-    
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&DataIn, (OSP_VOID *)QsfpInfo);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 483, "MPA GetQsfpInfo Fail 0x%x.", RetVal);
-        MPA_Free(QsfpInfo);
-        QsfpInfo = NULL;
-        return RetVal;
-    }
-
-    /*Ϊ0ģϢѯɹ640ֽϢ*/
-    if (0 == QsfpInfo[0])
-    {
-        OSAL_MemCpy_s((OSP_U8 *)Info, DRV_QSFP_INFO_LEN, (OSP_U8 *)&QsfpInfo[1], DRV_QSFP_INFO_LEN);
-    }
-    else
-    {
-        DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 1941, 1, 20 * HZ, "MPA gets qsfp info failed(0x%x).", QsfpInfo[0]);
-        RetVal = QsfpInfo[0];
-    }
-    
-    MPA_Free(QsfpInfo);
-    QsfpInfo = NULL;
-    return RetVal;
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_SetQsfpInfo
- *   : ùģϢ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Info      ģϢ
- *             Length    Ϣ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131211
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetQsfpInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_CHAR *Info, OSP_U16 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*תΪԭdev sub id*/
-    OSP_U8 DataIn[SET_QSFP_INFO_LEN + 1] = {0};
-    OSP_U8 CardSlot = INVALID_VALUE8;
-    OSP_U8 Channel = INVALID_VALUE8;
-    
-    if ((NULL == EnclAddr) || (NULL == Info) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 484, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Info, Length);
-        return DRV_RETURN_ERROR;
-    }
-    
-    DRV_MPA_TRACE(DRV_LOG_INFO, 485, "MPA sets qsfpInfo, id(0x%llx), data(0x%x, 0x%x, 0x%x), devframe(0x%x).", 
-                        DriverId, (OSP_U8)Info[0], (OSP_U8)Info[1], (OSP_U8)Info[2], ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-                        
-    MpaCmd.Cmd = DRV_CMD_QSFP_INFO_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = SET_QSFP_INFO_LEN;
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_QSFP;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*ǰdevתsub id4λΪλ4λΪͨ*/
-    CardSlot = (OSP_U8)DAL_FRU_ID_TO_SLOT(MpaCmd.FruId);
-    Channel = MpaCmd.DeviceId + 1;
-    DataIn[0] = (OSP_U8)(CardSlot << 4) | Channel; 
-    OSAL_MemCpy_s(&DataIn[1], SET_QSFP_INFO_LEN, (OSP_U8 *)Info, SET_QSFP_INFO_LEN);
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
-
-}
-
-/******************************************************************************
-*     : MPAIntf_GetSfpInfo
-*   : ȡģϢ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             Info      ģϢ
-*             Length    Ϣ
-*   : Info      ģϢ
-*             Length    Ϣ
-*   ֵ  : DRV_RETURN_OK - ɹ;ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2014327
-*           : jiangfanlu 00101148
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetSfpInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_CHAR *Info, OSP_U32 Length, DRV_CABLE_CONNECTOR_TYPE_E* ConnType)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    MPA_SAS_SFP_INFO_S *SasSfpInfo = NULL;
-    
-    if ((NULL == EnclAddr) || (NULL == Info) || (NULL == ConnType)|| (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 486, "MPA finds the pointer is null(0x%p, 0x%p, 0x%p), length(%d).", EnclAddr, Info, ConnType, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-
-    SasSfpInfo = (MPA_SAS_SFP_INFO_S *)MPA_Malloc(sizeof(MPA_SAS_SFP_INFO_S));
-    
-    if (NULL == SasSfpInfo)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 487, "MPA malloc memory failed.");
-        return DRV_RETURN_ERROR;
-    }
-    
-    OSAL_MemSet_s((OSP_U8 *)SasSfpInfo, sizeof(MPA_SAS_SFP_INFO_S), 0, sizeof(MPA_SAS_SFP_INFO_S));
-
-    MpaCmd.Cmd = DRV_CMD_GET_SFP_RAW_INFO;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(MPA_SAS_SFP_INFO_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)SasSfpInfo);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 488, "MPA GetSfpInfo Fail %d.", RetVal);
-        MPA_Free(SasSfpInfo);
-        SasSfpInfo = NULL;
-        return RetVal;
-    }
-
-    OSAL_MemCpy_s((OSP_U8 *)Info, DRV_QSFP_INFO_LEN, (OSP_U8 *)SasSfpInfo->SfpInfo, 
-        (OSP_U32)min((OSP_S32)Length, DRV_QSFP_INFO_LEN));
-    *ConnType = SasSfpInfo->ConnType;
-    
-    MPA_Free(SasSfpInfo);
-    SasSfpInfo = NULL;
-    return RetVal;
-    
-}
-
-/******************************************************************************
-*     : MPAIntf_GetSfpDetailInfo
-*   : ȡģϢ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*   : SfpDetail      ģϢ
-*   ֵ  : DRV_RETURN_OK - ɹ;ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 201728
-*           : limingjiang 00400933
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetSfpDetailInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_SFP_INFO_DETAIL_S *SfpDetail)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == SfpDetail))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 486,
-            "MPA finds the pointer is null(0x%p, 0x%p)", EnclAddr, SfpDetail);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_SFP_INFO;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_SFP_INFO_DETAIL_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)SfpDetail);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_INFO, 488, "MPA interface ret:%d.", RetVal);
-        return RetVal;
-    }
-
-    return RetVal;
-}
-
-/******************************************************************************
-*     : MPAIntf_GetSfpPresent
-*   : ȡsasģλϢ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             PresentStatus      ģλϢ
-*   : PresentStatus      ģλϢ
-*   ֵ  : DRV_RETURN_OK - ɹ;ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2014327
-*           : jiangfanlu 00101148
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetSfpPresent(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *PresentStatus)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == PresentStatus))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 489, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PresentStatus);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_SFP_PRESENT_STATE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /*AddrΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PresentStatus);
-
-}
-
-/******************************************************************************
-*     : MPAIntf_GetSfpState
-*   : ȡsasģ齡״̬
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             PresentStatus      ģλϢ
-*   : PresentStatus      ģλϢ
-*   ֵ  : DRV_RETURN_OK - ɹ;ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2014327
-*           : jiangfanlu 00101148
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetSfpState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_SFP_STAT_E *State)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == State))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 490, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_SFP_STATE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_SFP_STAT_E);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    
-    /*AddrΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_SetUsbSwitchEnable
- *   : USB SWITCHʹ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Flag  USB SWITCHʹ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131211
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetUsbSwitchEnable(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Flag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 491, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 492, "MPA sets usb switch enable, id(0x%llx), value(%d).", DriverId, Flag);
-    MpaCmd.Cmd = DRV_CMD_USBSWTICH_CONTROL;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Flag, (OSP_VOID *)NULL);    
-    
-}                               
-
- /******************************************************************************
- *     : MPAIntf_SetEarPowerEnable
- *   : ùҶԴ·ʹ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Flag  ҶԴ·ʹ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131211
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetEarPowerEnable(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Flag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 493, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 494, "MPA set ear power enable, id(0x%llx), value(%d).", DriverId, Flag);
-    MpaCmd.Cmd = DRV_CMD_EAR_POWER_CONTROL;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Flag, (OSP_VOID *)NULL);    
-    
-}                               
-
- /******************************************************************************
- *     : MPAIntf_GetEarButtonState
- *   : ѯҶť״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             State      Ҷť״̬
- *   : State      Ҷť״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131213
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetEarButtonState(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == State))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 495, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_EAR_BUTTON_STATE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);    
-    
-}
-
-/******************************************************************************
-*     : MPAIntf_SetPowerEnState
-*   : poweren()
-*   : EnclAddr  
-*             FruId        FRU
-*             PowerEn   
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015131
-*           : chenkeren 00221000
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetPowerEnState(OSP_VOID *EnclAddr, OSP_U32 FruId,  OSP_U32 PowerEn)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 493, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 494, "MPA set power enable, id(%d), devframe(0x%x), value(%d).", 
-                    FruId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, PowerEn);
-
-    MpaCmd.Cmd = DRV_CMD_SET_POWER_EN;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_POWER_EN;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&PowerEn, (OSP_VOID *)NULL);    
-}                               
- 
-/******************************************************************************
-*     : MPAIntf_GetPowerEnState
-*   : ѯpoweren()
-*   : EnclAddr  
-*             FruId        FRU
-*             PowerEn   
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015131
-*           : chenkeren 00221000
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetPowerEnState(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U32 *PowerEn)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == PowerEn))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 495, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PowerEn);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_DBG, 494, "MPA get power enable, id(%d), devframe(0x%x).", 
-                    FruId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-
-    MpaCmd.Cmd = DRV_CMD_GET_POWER_EN;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_POWER_EN;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PowerEn);    
-}
-
- /******************************************************************************
- *     : MPAIntf_ClearEarButtonState
- *   : Ҷť״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ      
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131225
- *           : shufan 204084
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_ClearEarButtonState(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 496, "MPA finds the pointer is null.");
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 497, "MPA clears ear button state, id(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_CLEAR_EAR_BUTTON_STATE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetEarUsbHubState
- *   : ѯҶUSB-HUB״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             State       ҶUSB-HUB״̬
- *   : State       ҶUSB-HUB״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131213
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetEarUsbHubState(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == State))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 498, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_EAR_USBHUB_STATE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetEarInfo
- *   : ѯҶϢ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Info        ҶϢ
- *   : Info        ҶϢ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131219
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetEarInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Info)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Info))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 499, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Info);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_EAR_INFO;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Info);    
-}
- 
-/******************************************************************************
-*     : MPAIntf_GetDftEarInfo
-*   : ѯװҶϢ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             Info        ҶϢ
-*   : Info        ҶϢ
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 201343
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetDftEarInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_EAR_DFT_INFO_s *Info)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Info))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 500, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Info);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_EAR_DFT_INFO_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_EAR_DFT_INFO_s);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Info);    
-}
-
-/******************************************************************************
-*     : MPAIntf_SetDftEarInfo
-*   : װҶϢ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             Info       װҶϢ
-*   : Info       װҶϢ
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 201343
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetDftEarInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_EAR_DFT_INFO_s DftEarInfo)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 501, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-                        
-    MpaCmd.Cmd = DRV_CMD_EAR_DFT_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_EAR_DFT_INFO_s);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&DftEarInfo, (OSP_VOID *)NULL);
-
-}
-
-/******************************************************************************
-*     : MPAIntf_GetDftIocardInfo
-*   : ѯװӿڿϢ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             Info       װӿڿϢ
-*   : Info       װӿڿϢ
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 201343
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetDftIocardInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, SES_IOCARD_DFT_INFO_S *DftIocardInfo)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == DftIocardInfo))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 502, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, DftIocardInfo);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_IOCARD_DFTINFO_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(SES_IOCARD_DFT_INFO_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)DftIocardInfo);    
-}
-
-/******************************************************************************
-*     : MPAIntf_SetDftIocardInfo
-*   : װӿڿϢ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ   
-*             Info       װӿڿϢ
-*             Length     װӿڿϢ
-*   : Info       װӿڿϢ
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 201343
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetDftIocardInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Info, OSP_U16 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Info) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 503, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Info, Length);
-        return DRV_RETURN_ERROR;
-    }
-                        
-    MpaCmd.Cmd = DRV_CMD_IOCARD_DFT9555_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = SET_DFT_IOCARD_INFO_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Info, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetUartSwitch
- *   : ѯл
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             State       л
- *   : State       л
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131213
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetUartSwitch(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == State))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 504, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_UART_STATE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);    
-    
-}
-
-/******************************************************************************
-*     : MPAIntf_SetStorageDeviceTest
-*   : ô洢
-*   : EnclAddr ϲ·ĵַϢmcutype,scsiַframetype  
-*             DriverId ID ͡FRUIDDEVICE IDϢ    
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2014331
-*           : jiangfanlu 00101148
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetStorageDeviceTest(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*ԭdevӿڣҪ2Σʱչ*/
-    OSP_U8 DataIn[2] = {0, 0};
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 505, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_STORAGE_DEVICE_SELFTEST;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetStorageDeviceTestResult
- *   : ѯ洢Խ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             State       洢Խ
- *   : State       洢Խ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131220
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetStorageDeviceTestResult(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == State))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 506, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_STORAGE_DEVICE_SELFTEST;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);    
-    
-}
-
-
-
- /******************************************************************************
- *     : MPAIntf_GetSmmGeHeartBeatResult
- *   : ѯGEͨԽ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             State      GEͨԽ
- *   : State      GEͨԽ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131221
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetSmmGeHeartBeatResult(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == State))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 507, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_SMM_GE_HEARTBEAT;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetSmmCtrlHeartBeatResult
- *   : ѯưGEͨԽ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             State      GEͨԽ
- *   : State      GEͨԽ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131228
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetSmmCtrlHeartBeatResult(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == State))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 508, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_SMM_CTRL_HEARTBEAT;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetChipFwVer
- *   : ѯchip汾
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Version   汾
- *             Length    汾
- *   : Version   汾
- *   ֵ  : OSP_S32
- * ˵  : ǰֻ֧bbu
- * 
- * ޸ʷ      :
- *  1.       : 20131224
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetChipFwVer(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Version, OSP_U32 Length)
-{
-    OSP_U32 FruId = 0;
-    OSP_U32 FruType = 0;
-
-    FruId = DAL_FRU_ID(DriverId);
-    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
-    
-    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_BBU))
-    {
-        return MPAIntf_GetBbuSoftwareVersion(EnclAddr, DriverId, Version, Length);
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_FAN_CTRLBOARD))
-    {
-        return MPAIntf_GetFanCtrlFwVersion(EnclAddr, DriverId, Version, Length);
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_MGMTBOARD))
-    {
-        return MPAIntf_GetMgmt8307Version(EnclAddr, DriverId, Version, Length);
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_CTRLBOARD))
-    {
-        return MPAIntf_GetPCIEChipVersion(EnclAddr, DriverId, (OSP_U8 *)Version, Length);
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_POWER))
-    {
-        return MPAIntf_GetPowerFwVersion(EnclAddr, DriverId, Version, Length);
-    }
-    else
-    {
-        return RETURN_INVALID;
-    }
-}
-
- /******************************************************************************
- *     : MPAIntf_GetChipName
- *   : ѯchip
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Name   
- *             Length    Ƴ
- *   : Name   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : ǰֻ֧bbu
- * 
- * ޸ʷ      :
- *  1.       : 20131224
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetChipName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
-{
-    OSP_U32 FruId = 0;
-    OSP_U32 FruType = 0;
-
-    FruId = DAL_FRU_ID(DriverId);
-    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
-    
-    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_BBU))
-    {
-        return MPAIntf_GetBbuName(EnclAddr, DriverId, Name, Length);
-    }
-    else
-    {
-        return RETURN_INVALID;
-    }
-}
-
- /******************************************************************************
- *     : MPAIntf_UpdataChipPrePare
- *   : chipоƬһ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131224
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdataChipPrePare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    OSP_U32 FruId = 0;
-    OSP_U32 FruType = 0;
-
-    FruId = DAL_FRU_ID(DriverId);
-    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
-    
-    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_BBU))
-    {
-        return MPAIntf_UpdateBbuPrepare(EnclAddr, DriverId);
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_FAN_CTRLBOARD))
-    {
-        return MPAIntf_UpdateFanCtrlPrepare(EnclAddr, DriverId);
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_CTRLBOARD))
-    {
-        return MPAIntf_UpdateConfigChipPrepare(EnclAddr, DriverId);
-    }
-    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_POWER))
-    {
-        return MPAIntf_UpdatePowerPrepare(EnclAddr, DriverId);
-    }
-    else
-    {
-        return RETURN_INVALID;
-    }
-
-}
- /******************************************************************************
- *     : MPAIntf_UpdataChipTransData
- *   : chipоƬڶ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId  ID ͡FRUIDDEVICE IDϢ
- *             Data      ļָ
- *             DataLen   ļ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131224
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdataChipTransData(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data, OSP_U32 DataLen)
-{
-    OSP_U32 FruId = 0;
-    OSP_U32 FruType = 0;
-
-    (OSP_VOID)DataLen;
-
-    FruId = DAL_FRU_ID(DriverId);
-    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
-    
-    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_BBU))
-    {
-        return MPAIntf_UpdateBbuSendFile(EnclAddr, DriverId, Data);
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_FAN_CTRLBOARD))
-    {
-        return MPAIntf_UpdateFanCtrlSendFile(EnclAddr, DriverId, Data);
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_MGMTBOARD))
-    {
-        return MPAIntf_UpdateMgmt8307SendFile(EnclAddr, DriverId, Data);
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_CTRLBOARD))
-    {
-        return MPAIntf_UpdateConfigChipSendFile(EnclAddr, DriverId, Data);
-    }
-    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_POWER))
-    {
-        return MPAIntf_UpdatePowerSendFile(EnclAddr, DriverId, Data);
-    }
-    else
-    {
-        return RETURN_INVALID;
-    }
-
-} 
-
-/******************************************************************************
- *     : MPAIntf_UpdataChipStart
- *   : chipоƬ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId  ID ͡FRUIDDEVICE IDϢ   
- *             Data      ļָ
- *             DataLen   ļ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131224
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_UpdataChipStart(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8* Data, OSP_U32 DataLen)
-{
-    OSP_U32 FruId = 0;
-    OSP_U32 FruType = 0;
-
-    (OSP_VOID)Data;
-    (OSP_VOID)DataLen;
-
-    FruId = DAL_FRU_ID(DriverId);
-    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
-    
-    DRV_MPA_TRACE(DRV_LOG_DBG, 509, "MPA starts to update chip, id(0x%llx).", DriverId);
-    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_BBU))
-    {
-        return MPAIntf_UpdateBbuStart(EnclAddr, DriverId);
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_FAN_CTRLBOARD))
-    {
-        return MPAIntf_UpdateFanCtrlStart(EnclAddr, DriverId);
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_MGMTBOARD))
-    {
-        return MPAIntf_UpdateMgmt8307Start(EnclAddr, DriverId);
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_CTRLBOARD))
-    {
-        return MPAIntf_UpdateConfigChipStart(EnclAddr, DriverId);
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_POWER))
-    {
-        return MPAIntf_UpdatePowerStart(EnclAddr, DriverId);
-    }
-    else
-    {
-        return RETURN_INVALID;
-    }
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetChipUpdateStatus
- *   : ѯchip״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             State     ״̬
- *   : State     ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014211
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetChipUpdateStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *State)
-{
-    OSP_U32 FruId = 0;
-    OSP_U32 FruType = 0;
-
-    FruId = DAL_FRU_ID(DriverId);
-    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
-    
-    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_BBU))
-    {
-        return MPAIntf_GetBbuUpgradeState(EnclAddr, DriverId, State);
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_FAN_CTRLBOARD))
-    {
-        return MPAIntf_GetFanCtrlUpgradeState(EnclAddr, DriverId, State);
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_MGMTBOARD))
-    {
-        return MPAIntf_GetMgmt8307UpgradeState(EnclAddr, DriverId, State);
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_CTRLBOARD))
-    {
-        return MPAIntf_GetConfigChipUpgradeState(EnclAddr, DriverId, State);
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_POWER))
-    {
-        return MPAIntf_GetPowerUpgradeState(EnclAddr, DriverId, State);
-    }
-    else
-    {
-        return RETURN_INVALID;
-    }
-}
-
- /******************************************************************************
- *     : MPAIntf_GetChipSupportUpgrade
- *   : ѯǷ֧
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Support   Ƿ֧TRUE:֧֣FALSE:֧
- *   : Support   Ƿ֧TRUE:֧֣FALSE:֧
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201435
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetChipSupportUpgrade(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_BOOL* Support)
-{
-    OSP_U32 FruId = 0;
-    OSP_U32 FruType = 0;
-    
-    if ((NULL == EnclAddr) || (NULL == Support))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 510, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Support);
-        return DRV_RETURN_ERROR;
-    }
-
-    FruId = DAL_FRU_ID(DriverId);
-    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
-    
-    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_BBU))
-    {
-        *Support = (OSP_BOOL)TRUE;
-        return DRV_RETURN_OK;
-    }
-    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_FAN_CTRLBOARD))
-    {
-        *Support = (OSP_BOOL)TRUE;
-        return DRV_RETURN_OK;
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_MGMTBOARD))
-    {
-        return MPAIntf_GetMgmt8307SupportUpGrade(EnclAddr, DriverId, Support);
-    }
-    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_POWER))
-    {
-        return MPAIntf_GetPowerSupportUpGrade(EnclAddr, DriverId, Support);
-    }
-    else
-    {
-        return RETURN_INVALID;
-    }
-    
-}
-
-/******************************************************************************
-*     : MPAIntf_GetChipUpgradeRestCnt
-*   : ѯʣ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId   ID ͡FRUIDDEVICE IDϢ
-*             Cnt Ƿ֧TRUE:֧֣FALSE:֧
-*   : Cnt Ƿ֧TRUE:֧֣FALSE:֧
-*   ֵ  : OSP_S32
-* ˵  :
-*
-* ޸ʷ  :
-* 1.    : 2017329
-*       : limingjiang/00400933
-*   ޸: ֧VRM
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetChipUpgradeRestCnt(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Cnt)
-{
-    OSP_U32 FruId = 0;
-    OSP_U32 FruType = 0;
-
-    if ((NULL == EnclAddr) || (NULL == Cnt))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 510, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Cnt);
-        return DRV_RETURN_ERROR;
-    }
-
-    FruId = DAL_FRU_ID(DriverId);
-    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
-
-    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_CTRLBOARD))
-    {
-        return MPAIntf_GetConfigChipUpgradeRestCnt(EnclAddr, DriverId, Cnt);
-    }
-    else
-    {
-        return RETURN_INVALID;
-    }
-}
-
- /******************************************************************************
- *     : MPAIntf_SetBbuStopDischarge
- *   : bbuֹͣŵ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Flag Ʊ־
- *   : 
- *   ֵ  : OSP_S32
- * ˵  :
- * 
- * ޸ʷ      :
- *  1.       : 20131224
- *           : shufan 204084
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBbuStopDischarge(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Flag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 511, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BBU_RUNCTL_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = BBU_STOP_DISCHARGE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Flag, (OSP_VOID *)NULL);
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetSmmSwitchRegister
- *   : ѯswitchĴֵ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             RegValue   Ĵֵ
- *   : RegValue   Ĵֵ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013127
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetSmmSwitchRegister(OSP_VOID *EnclAddr, OSP_U64 DriverId, 
-                                                    OSP_U8 PortId, OSP_U8 RegArrd, OSP_U16 *RegValue)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 DataIn[3] = {0, 0, 0};
-   
-    if ((NULL == EnclAddr) || (NULL == RegValue))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 512, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, RegValue);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SMM_SWITCH_REGISTER_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    DataIn[0] = sizeof(OSP_U8) + sizeof(OSP_U8);
-    DataIn[1] = PortId;
-    DataIn[2] = RegArrd;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)RegValue);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetSmmSwitchRegister
- *   : ùswitchĴֵ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             RegValue   Ĵֵ
- *   : RegValue   Ĵֵ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014120
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetSmmSwitchRegister(OSP_VOID *EnclAddr, OSP_U64 DriverId, 
-                                                    OSP_U8 PortId, OSP_U8 RegArrd, OSP_U16 RegValue)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 DataIn[4] = {0, 0, 0, 0};
-   
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 513, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SMM_SWITCH_REGISTER_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-    DataIn[0] = PortId;
-    DataIn[1] = RegArrd;
-    DataIn[2] = (OSP_U8)(RegValue & INVALID_VALUE8);
-    DataIn[3] = (OSP_U8)(RegValue >> MPA_SHIFT_BIT_8);
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
-    
-}
-
-
-
- /******************************************************************************
- *     : MPAIntf_GetSmmMac
- *   : ȡMAC
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Mac      MAC
- *             Length    Ƴ
- *   : Mac      MAC
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131230
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetSmmMac(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Mac, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 TempBuffer[DRV_MAC_LEN] = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Mac) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 514, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Mac, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_SMM_MAC;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_MAC_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 515, "MPA GetSmmMac return error.");
-        return RetVal;
-    }
-
-    /*ȡСֵ*/
-    OSAL_MemCpy_s((OSP_U8 *)Mac, (OSP_U32)min(DRV_MAC_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)TempBuffer, (OSP_U32)min(DRV_MAC_LEN, (OSP_S32)Length));
-    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
-
-    return RetVal;
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetSmmMac
- *   : SMM mac
- *   : EnclAddr  豸ַϢ
- *             DriverId        豸idϢ
- *             Mac  mac
- *             Length mac
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131230
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetSmmMac(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Mac, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Mac) || (DRV_MAC_LEN != Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 516, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Mac, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_SMM_MAC;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_MAC_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Mac, (OSP_VOID *)NULL);
-  
-}
-
-/******************************************************************************
- *     : MPAIntf_SetBbuTemperature
- *   : BBU¶
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Value ¶ֵ     
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131224
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBbuTemperature(OSP_VOID *EnclAddr, OSP_U64 DriverId, BBU_TEMPERATURE_S *Value)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Value))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 517, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_BBU_TEMP_SIMULATE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);    
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-    MpaCmd.BufLen = sizeof(BBU_TEMPERATURE_S);
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Value, (OSP_VOID *)NULL);
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SystemSetTemperature
- *   : ϵͳ¶
- *   : EnclAddr  ϲ·ĵַϢ
- *             DriverId  ID 
- *             Type       ¶
- *             TempId    ¶ȵID
- *             Temp      ¶ֵ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201418
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SystemSetTemperature(OSP_VOID *EnclAddr, OSP_U64 DriverId, TEMP_TYPE_E Type, OSP_S16 Temp)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U16 DataIn[3] = {0};
-    OSP_U32 TempType = (OSP_U32)Type;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 518, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_SYSTEM_SET_TEMP;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);    
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-    MpaCmd.BufLen = sizeof(TEMP_TYPE_E) + sizeof(OSP_S16);
-
-    DataIn[0] = (OSP_U16)(TempType & 0x0000FFFF);
-    DataIn[1] = (OSP_U16)((TempType >> MPA_SHIFT_BIT_16) & 0x0000FFFF);
-    DataIn[2] = (OSP_U16)Temp;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetIocardSlotId
- *   : ѯӿڿλ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             SlotId      ӿڿλ
- *   : SlotId      ӿڿλ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131225
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetIocardSlotId(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *SlotId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == SlotId))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 519, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, SlotId);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_INTFCARD_ID_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)SlotId);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetEthStaticMacValid
- *   : ѯ̬MACЧ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Valid      Ч 
- *   : Valid      Ч 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201438
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetEthStaticMacValid(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Valid)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Valid))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 520, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Valid);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_ETH_STATIC_MAC_VALID;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Valid);    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetEthStaticMac
- *   : þ̬mac
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Mac       macַ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201438
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetEthStaticMac(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Mac)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Mac))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 521, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Mac);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 522, "MPA sets static mac.");
-    MpaCmd.Cmd = DRV_CMD_SET_ETH_STATIC_MAC;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_MAC_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Mac, (OSP_VOID *)NULL);
-  
-}
-
- /******************************************************************************
- *     : MPAIntf_GetEthSwitchMac
- *   : ѯmac
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Mac       macַ
- *   : Mac       macַ
- *   ֵ  : OSP_S32
- * ˵  : Ϊһ£macβlengthϲ㱣֤·ȴڵ6
- * 
- * ޸ʷ      :
- *  1.       : 20131225
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetEthSwitchMac(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Mac)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Mac))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 523, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Mac);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_NETCARD_MAC_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_MAC_LEN;
-    MpaCmd.SdrType = SDRTYPE_SMM_ETH_MAC;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Mac);
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetEthSwitchMac
- *   : mac
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Mac       macַ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131225
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetEthSwitchMac(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Mac)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Mac))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 524, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Mac);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 525, "MPA sets eth switch mac, devframe(0x%x).", ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-    MpaCmd.Cmd = DRV_CMD_NETCARD_MAC_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DRV_MAC_LEN;
-    MpaCmd.SdrType = SDRTYPE_SMM_ETH_MAC;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Mac, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetEthSwitchIpAddr
- *   : ѯIpַ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             IpAddr       IPַ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014513
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetEthSwitchIpAddr(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *IpAddr)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == IpAddr))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 526, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, IpAddr);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_NETCARD_MAC_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = IP_ADDR_INFO_LEN;
-    MpaCmd.SdrType = SDRTYPE_SMM_ETH_IP;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)IpAddr);
-}
- 
- /******************************************************************************
- *     : MPAIntf_SetEthSwitchIpAddr
- *   : Ipַ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             IpAddr       IPַ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014513
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetEthSwitchIpAddr(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *IpAddr)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == IpAddr))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 527, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, IpAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 528, "MPA sets eth switch ip address.");
-    MpaCmd.Cmd = DRV_CMD_NETCARD_MAC_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = IP_ADDR_INFO_LEN;
-    MpaCmd.SdrType = SDRTYPE_SMM_ETH_IP;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)IpAddr, (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetEthSwitchNetMask
- *   : ѯ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             NetMask       
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014513
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetEthSwitchNetMask(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *NetMask)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == NetMask))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 529, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, NetMask);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_NETCARD_MAC_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = NET_MASK_INFO_LEN;
-    MpaCmd.SdrType = SDRTYPE_SMM_ETH_NETMASK;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NetMask);
-}
- 
- /******************************************************************************
- *     : MPAIntf_SetEthSwitchNetMask
- *   : 
-  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             NetMask       
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014513
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetEthSwitchNetMask(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *NetMask)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == NetMask))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 530, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, NetMask);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 531, "MPA sets eth switch net mask.");
-    MpaCmd.Cmd = DRV_CMD_NETCARD_MAC_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = NET_MASK_INFO_LEN;
-    MpaCmd.SdrType = SDRTYPE_SMM_ETH_NETMASK;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NetMask, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
- *     : MPAIntf_GetEthSwitchGateWay
- *   : ѯ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             GateWay       
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014513
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetEthSwitchGateWay(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *GateWay)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == GateWay))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 532, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, GateWay);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_NETCARD_MAC_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = GATE_WAY_INFO_LEN;
-    MpaCmd.SdrType = SDRTYPE_SMM_ETH_GATEWAY;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)GateWay);
-}
- 
- /******************************************************************************
- *     : MPAIntf_SetEthSwitchGateWay
- *   : 
-  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             GateWay       
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014513
- *           : chenkeren 00221000
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetEthSwitchGateWay(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *GateWay)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == GateWay))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 533, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, GateWay);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 534, "MPA sets eth switch gateway.");
-    MpaCmd.Cmd = DRV_CMD_NETCARD_MAC_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = GATE_WAY_INFO_LEN;
-    MpaCmd.SdrType = SDRTYPE_SMM_ETH_GATEWAY;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)GateWay, (OSP_VOID *)NULL);
-}
- 
- /******************************************************************************
- *     : MPAIntf_SetEthSwitchOnoff
- *   : ڿ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Switch     ڿ״̬       
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131225
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetEthSwitchOnoff(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U32 Switch)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 Status = 0;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 535, "MPA finds the pointer is null.");
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 536, "MPA sets eth switch on or off, id(0x%llx), value(%u), devframe(0x%x).",
-            DriverId, Switch, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-            
-    MpaCmd.Cmd = DRV_CMD_SET_ETH_SWITCH_ONOFF;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    Status = (OSP_U8)Switch;
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Status, (OSP_VOID *)NULL);
-  
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_ResetEthSwitchPort
- *   : λڣpcie޸
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014210
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_ResetEthSwitchPort(OSP_VOID* EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*1ʾλ*/
-    OSP_U8 Status = 1;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 537, "MPA finds the pointer is null.");
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 538, "MPA resets ethswitch, portid(0x%llx).", DriverId);
-    MpaCmd.Cmd = DRV_CMD_NETPORT_RESET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Status, (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetEthSwitchStatus
- *   : ѯ״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Status    ״̬
- *   : Status    ״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131225
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetEthSwitchStatus(OSP_VOID* EnclAddr, OSP_U64 DriverId, DRV_PORT_STATUS_E* Status)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Status))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 539, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_ETH_SWITCH_STATUS;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_PORT_STATUS_E);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status);  
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetEthSwitchSpeed
- *   : ѯ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Speed     
- *   : Speed     
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131225
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetEthSwitchSpeed(OSP_VOID* EnclAddr, OSP_U64 DriverId, DRV_SPEED_S *Speed)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Speed))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 540, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Speed);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_ETH_SWITCH_SPEED;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_SPEED_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Speed);  
-    
-}
-
-/* BEGIN: Added by qintianyi 90005776, 2014/8/22  ⵥ:DTS2014081808235, ޸ԭ:vlan switch */
- /******************************************************************************
- *     : MPAIntf_SetVlanSwitch
- *   : vlanת
- *   : 
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014822
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetVlanSwitch(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_BOOL Switch)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U8 DataIn = 0;
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 541, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return RetVal;
-    }
-    DRV_MPA_TRACE(DRV_LOG_INFO, 542, "MPA sets vlan switch, id(0x%llx), switch(%d), devframe(0x%x).", DriverId, Switch, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-
-    DataIn = (OSP_U8)Switch;
-    MpaCmd.Cmd = DRV_CMD_SET_VLAN_SWITCH;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_SWITCH; 
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&DataIn, (OSP_VOID *)NULL);  
-
-}
-/* END: Added by qintianyi 90005776, 2014/8/22  ⵥ:DTS2014081808235 */
-
-/******************************************************************************
- *     : MPAIntf_GetVlanSwitch
- *   : ȡvlanת
- *   : 
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2016526
- *           : hulinhui 00289393
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetVlanSwitch(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_BOOL* Switch)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Switch))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 543, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Switch);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_VLAN_SWITCH;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_BOOL);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_SWITCH;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Switch);    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetUsbInfo
- *   : ѯUSBϢ(λsize)
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Info      USBϢ(λsize)
- *   : Info      USBϢ(λsize)
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131230
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetUsbInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, MPA_BMC_USB_INFO_S *Info)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Info))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 543, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Info);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_USB_INFO;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(MPA_BMC_USB_INFO_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Info);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetEarPowerState
- *   : ѯҶԴ״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Status    ҶԴ澯״̬
- *   : Status    ҶԴ澯״̬
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014116
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetEarPowerState(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Status)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Status))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 544, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_EAR_POWER_STATE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status);    
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBmcResetReason
- *   : ѯBMCλԭ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId  ID ͡FRUIDDEVICE IDϢ   
- *             *Reason   BMCλԭ
- *   : *Reason   BMCλԭ
-                          0 ϵ縴λ
-                          1 ⲿⲿŹλ
-                          2 ڲ߿Źλ
-
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014111
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBmcResetReason(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Reason)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Reason))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 545, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Reason);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BMCRESET_CAUSE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Reason);  
-    
-}
- 
- /******************************************************************************
- *     : MPAIntf_SetWatchDogTime
- *   : ÿŹλʱ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId  ID ͡FRUIDDEVICE IDϢ   
- *             Time      Źλʱ
-                          0 10S
-                          1 30S
-                          2 60S
-                          3 120S
- *   : 
-
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014111
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetWatchDogTime(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Time)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 546, "MPA finds the pointer is null.");
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_WATCHDOGTIME_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Time, (OSP_VOID *)NULL);
-  
-}
- 
- /******************************************************************************
- *     : MPAIntf_SetPowerInterruptSignal
- *   : õԴжź
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId  ID ͡FRUIDDEVICE IDϢ   
- *   : 
-
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014113
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetPowerInterruptSignal(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 547, "MPA finds the pointer is null.");
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_POWER_INTERRUPT_SINGLE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /**/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPowerInterruptSignal
- *   : ѯԴжź
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId  ID ͡FRUIDDEVICE IDϢ   
- *             *State    Դжź
- *   : *State    Դжźţ0:жϣ 1:ж
-
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014111
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerInterruptSignal(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == State))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 548, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_POWER_INTERRUPT_SINGLE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);  
-    
-}
- 
- /******************************************************************************
- *     : MPAIntf_SetPowerAlarmSignal
- *   : õԴ澯ź
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId  ID ͡FRUIDDEVICE IDϢ   
- *             State     Դ澯źţ0:޸澯 1:и澯
- *   : 
-
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014111
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetPowerAlarmSignal(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 State)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 549, "MPA finds the pointer is null.");
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_POWER_ALARM;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&State, (OSP_VOID *)NULL);
-  
-    
-}
- 
- /******************************************************************************
- *     : MPAIntf_GetSmmServiceEthLoopTest
- *   : serviceڻزԽ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId  ID ͡FRUIDDEVICE IDϢ   
- *             *Result   serviceڻزԽ0:pass ;1:fail
- *   : *Result   serviceڻزԽ0:pass ;1:fail
-
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014111
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetSmmServiceEthLoopTest(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Result)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Result))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 550, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Result);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_SMM_ETH_LOOPTEST;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Result);  
-    
-}
- 
- /******************************************************************************
- *     : MPAIntf_SetOsResetCount
- *   : ôϵͳλ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId  ID ͡FRUIDDEVICE IDϢ   
- *             Count     ϵͳλ
- *   : 
-
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014111
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetOsResetCount(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Count)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 551, "MPA finds the pointer is null.");
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_X86_OS_RESETCOUNT;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Count, (OSP_VOID *)NULL);
-  
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetFruAlarm
- *   : ѯFru澯
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId  ID ͡FRUIDDEVICE IDϢ   
- *             *State    Fru澯0:޸澯1:и澯
- *   : *State    Fru澯0:޸澯1:и澯
-
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014113
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFruAlarm(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == State))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 552, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_FRU_ALARM;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);  
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPowerSingalBackboardType
- *   : ѯԴ塢źűͣͨdeviceid֣0ΪԴ壬1Ϊźű
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId  ID ͡FRUIDDEVICE IDϢ   
- *             *Type     
- *   : *Type     
-                         0x06 :6Uźű                               
-                         0x17 :6UԴ                               
-                         0x0c :3Uźű                               
-                         0    :3UԴ                         
-
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014126
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPowerSingalBackboardType(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Type)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Type))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 553, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Type);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_POWER_SINGAL_TYPE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Type);  
-    
-}
-/******************************************************************************
-*   : MPAIntf_SetCK420Config
-* : CK420
-* : EnclAddr ϲ·ĵַϢmcutype,scsiַframetype
-*           FruId     FRUID 
-*           config    Ϣ
-*           Value     õĲ
-* : 
-            
-* ֵ  : OSP_S32
-* ˵:  
-*
-* ޸ʷ      :
-*  1.       : 2017317
-*           : 
-*    ޸   : ɺ
-******************************************************************************/
-OSP_S32 MPAIntf_SetCK420Config(OSP_VOID *EnclAddr, OSP_U32 FruId, CK420_CONFIG Config, OSP_U8 *Value)
-{
-    MPA_CMD_INFO_S MpaCmd = {0}; 
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 335, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 336, "MPA set ck420 config, id(0x%x), datelen(%d), datelen(%x).",
-        FruId, Config.DataLen, Config.StartReg);
-
-    MpaCmd.Cmd = DRV_CMD_SET_CK420_CONFIG;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(CK420_CONFIG);
-    MpaCmd.SdrType = SDRTYPT_SET_CK420_CONFIG;
-    MpaCmd.WtRd = MPA_WRITE;
-
- return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Config, (OSP_VOID *)Value);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetCK420Config
- *   : ȡCK420
- *   : EnclAddr  
- *             DriverId  
- *             Value     
- *             Length    
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2017411
- *           : c00378798 
- *    ޸   : ɺ
- *
- ******************************************************************************/
- OSP_S32 MPAIntf_GetCK420Config(OSP_VOID *EnclAddr, OSP_U64 DriverId, CK420_GET_CONFIG Config, OSP_U32 Length, OSP_U8 *Value)
- {
-     MPA_CMD_INFO_S MpaCmd;
-     OSP_S8 MacBuffer[CK420_LEN] = {0};/*ڻMPAѯ*/
-     OSP_S32 RetVal = DRV_RETURN_ERROR;
-     OSP_U8 BmcDataIn[3] = {0};
-     
-     if ((NULL == EnclAddr) || (NULL == Value) || (0 == Length))
-     {
-         DRV_MPA_TRACE(DRV_LOG_WARN, 54, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Value, Length);
-         return RetVal;
-     }
- 
-     MpaCmd.Cmd = DRV_CMD_GET_CK420_CONFIG;
-     MpaCmd.FruId = DAL_FRU_ID(DriverId);
-     MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-     MpaCmd.BufLen = CK420_LEN;
-     MpaCmd.SdrType = SDRTYPE_DATA_IN_FOR_CK420;
-     MpaCmd.WtRd = MPA_READ;
-     BmcDataIn[0] = 2;
-     BmcDataIn[1] = Config.DataLen;
-     BmcDataIn[2] = Config.StartReg;
- 
-     RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)MacBuffer);
-     if (DRV_RETURN_OK != RetVal)
-     {
-         DRV_MPA_TRACE(DRV_LOG_DBG, 55, "Mpa get ck420 config return %d.", RetVal);
-         return RetVal;
-     }
- 
-     /*DAL·ĳʵʳȡ̵ĳȿ*/
-     OSAL_MemCpy_s((OSP_U8 *)Value, (OSP_U32)min(CK420_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)MacBuffer, (OSP_U32)min(CK420_LEN, (OSP_S32)Length));
-     return RetVal;
-        
- }
-
- /******************************************************************************
- *     : MPAIntf_I2CRwConfig
- *   : SES IICַдͨýӿ
- *   : EnclAddr  
- *             DriverId  
- *             Config
- *             Value
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2017427
- *           : c00378798 
- *    ޸   : ɺ
- *
- ******************************************************************************/
- OSP_S32 MPAIntf_I2CRwConfig(OSP_VOID *EnclAddr, OSP_U64 DriverId, IIC_GET_CPLD Config, OSP_U8 *Value)
- {
-     MPA_CMD_INFO_S MpaCmd;
-     OSP_U8 CpldValue[CPLD_READ_LEN] = {0};/*ڻMPAѯ*/
-     OSP_S32 RetVal = DRV_RETURN_ERROR;
-     
-     if (NULL == EnclAddr)
-     {
-         DRV_MPA_TRACE(DRV_LOG_WARN, 54, "MPA finds the pointer is null(0x%p).", EnclAddr);
-         return RetVal;
-     }
- 
-     MpaCmd.Cmd = DRV_CMD_WRITEREAD_IIC;
-     MpaCmd.FruId = DAL_FRU_ID(DriverId);
-     MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-     MpaCmd.BufLen = Config.ReadLen;
-     MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-     MpaCmd.WtRd = MPA_READ;
- 
-     RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Config, (OSP_VOID *)CpldValue);
-     if (DRV_RETURN_OK != RetVal)
-     {
-         DRV_MPA_TRACE(DRV_LOG_DBG, 55, "Mpa get cpld value return %d.", RetVal);
-         return RetVal;
-     }
-     
-     /*ֶ֧ȡ󳤶ʵʳȡ̵ĳȿ*/
-     OSAL_MemCpy_s((OSP_U8 *)Value, (OSP_U32)min(CPLD_READ_LEN, (OSP_S32)Config.ReadLen), 
-        CpldValue, (OSP_U32)min(CPLD_READ_LEN, (OSP_S32)Config.ReadLen));
-     return RetVal;       
- }
-
- /******************************************************************************
- *     : MPAIntf_GetTDMBusRegister
- *   : ȡTDM߼ĴTDMͨdeviceid
- *   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             *Value     TDM߼Ĵ
- *             Length     TDM߼ĴȣDMI_NAME_LEN
- *   : *Value     TDM߼Ĵ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014113
- *           : shufan 204084
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetTDMBusRegister(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Value , OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 ValueBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Value) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 554, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Value, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_TDM_BUS_REGISTER;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = DMI_NAME_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)ValueBuffer);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 555, "MPA GetTDMBusRegister return error.");
-        return RetVal;
-    }
-
-    /*·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)Value, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)ValueBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
-   
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPAIntf_SetRMIITest
- *   : װRMIIͨ
- *   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014311
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetRMIITest(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 556, "MPA finds the pointer is null.");
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_RMII_TEST;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = 0;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetOopsInfo
- *   : ѯϵͳoopsϢ
- *   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
- *             Info       oopsϢַ
- *             Length     Ϣ
- *   : Info       oopsϢַ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014128
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetOopsInfo(OSP_VOID *EnclAddr, OSP_U8 *Info, OSP_U32 Length)
-{
-#define MPA_BMC_OOPS_INFO_LEN 0x400
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 *OopsInfo = NULL;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Info) || (LENGTH_OOPS_INFO > Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 557, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Info, Length);
-        return DRV_RETURN_ERROR;
-    }
-
-    OopsInfo = (OSP_U8 *)MPA_Malloc(MPA_BMC_OOPS_INFO_LEN);
-    if (NULL == OopsInfo)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 558, "MPA malloc memory failed.");
-        return DRV_RETURN_ERROR;
-    }
-
-    OSAL_MemSet_s(OopsInfo, MPA_BMC_OOPS_INFO_LEN, 0, MPA_BMC_OOPS_INFO_LEN);
-    MpaCmd.Cmd = DRV_CMD_OOPSINFO_GET;
-    MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = LENGTH_OOPS_INFO;
-    MpaCmd.SdrType = SDRTYPE_OOPS_INFO;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)OopsInfo);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 559, "MPA GetOopsInfo Return fail %d.", RetVal);
-        MPA_Free(OopsInfo);
-        OopsInfo = NULL;
-        return DRV_RETURN_ERROR;
-    }
-
-    OSAL_MemCpy_s((OSP_U8 *)Info, (OSP_U32)min(MPA_BMC_OOPS_INFO_LEN, (OSP_S32)Length), 
-        (OSP_U8 *)OopsInfo, (OSP_U32)min(MPA_BMC_OOPS_INFO_LEN, (OSP_S32)Length));
-    MPA_Free(OopsInfo);
-    OopsInfo = NULL;
-    return DRV_RETURN_OK;
-}
-
- /******************************************************************************
- *     : MPAIntf_ClearOopsInfo
- *   : oopsϢ
- *   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014128
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_ClearOopsInfo(OSP_VOID *EnclAddr)
-{
-#define CLEAR_ID 1
-    MPA_CMD_INFO_S MpaCmd;
-    /*ԭdevӿڲ1ʾoopsϢ*/
-    OSP_U8 Flag = CLEAR_ID;
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 560, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 560, "os will clear Oops info.");
-
-    MpaCmd.Cmd = DRV_CMD_OOPSINFO_CLEAN;
-    MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(Flag);
-    MpaCmd.SdrType = SDRTYPE_OOPS_INFO; /*DTS2016012610431 */
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Flag, (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_Set6GPhyInfo
- *   : 6GźŲ
- *   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Type      ͣ0SAS1SATA
- *             PreEmp    Ԥֵ0x000x0C
- *             Swing     ڷֵ0x000x0F
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014416
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_Set6GPhyInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Type, OSP_U8 PreEmp, OSP_U8 Swing)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /* źŲΪ4ʼΪ0 */
-    OSP_U8 DataIn[4] = {0, 0, 0, 0};
-    OSP_U8 PhyId = 0;
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 561, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_6GPHYINFO_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DataIn);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    PhyId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    DataIn[0] = Type;
-    DataIn[1] = PreEmp;
-    DataIn[2] = Swing;
-    DataIn[3] = PhyId;
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_Set3GPhyInfo
- *   : 3GźŲ
- *   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Type      ͣ0SAS1SATA
- *             PreEmp    Ԥֵ0x000x0C
- *             Swing     ڷֵ0x000x0F
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014416
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_Set3GPhyInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Type, OSP_U8 PreEmp, OSP_U8 Swing)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /* źŲΪ4ʼΪ0 */
-    OSP_U8 DataIn[4] = {0, 0, 0, 0};
-    OSP_U8 PhyId = 0;
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 562, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_3GPHYINFO_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DataIn);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    PhyId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    DataIn[0] = Type;
-    DataIn[1] = PreEmp;
-    DataIn[2] = Swing;
-    DataIn[3] = PhyId;
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
-
-}
-/******************************************************************************
-*     : MPAIntf_GetI2cStatus
-*   : I2C״̬Ϣȡ
-*   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 201442
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetI2cStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, MPA_I2C_STATUS_INFO_S *Info, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Info) || (MPA_I2C_STATUS_INFO_MAX_LEN != Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 563, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Info, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_I2C_STATUS_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_I2C_STATUS_INFO_MAX_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Info); 
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 564, "%s return error %d.", __FUNCTION__, RetVal);
-        return RetVal;
-    }
-
-    return RetVal;
-    
-}
-
-/******************************************************************************
-*     : MPAIntf_GetG2AlarmStatus
-*   : G2 ALARM״̬Ϣȡ
-*   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 201442
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetG2AlarmStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, MPA_VAR_STATUS_INFO_S *Info, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Info) || (MPA_VAR_STATUS_INFO_MAX_LEN != Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 565, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Info, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_G2_SINGLE_ALARM_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_VAR_STATUS_INFO_MAX_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Info); 
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 566, "%s return error %d.", __FUNCTION__, RetVal);
-        return RetVal;
-    }
-
-    return RetVal;
-    
-}
-
-/******************************************************************************
-*     : MPAIntf_GetG2AllAlarmStatus
-*   : G2 ALARM״̬Ϣȡ
-*   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 201442
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetG2AllAlarmStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, MPA_VAR_STATUS_INFO_S *Info, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Info) || (MPA_VAR_STATUS_INFO_MAX_LEN != Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 567, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Info, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_G2_ALL_ALARM_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_VAR_STATUS_INFO_MAX_LEN;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Info); 
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 568, "%s return error %d.", __FUNCTION__, RetVal);
-        return RetVal;
-    }
-
-    return RetVal;
-    
-}
-
- /******************************************************************************
- *     : MPAIntf_GetMgmtIpInfo
- *   : ѯIPϢ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *                    DriverId   ID ͡FRUIDDEVICE IDϢ   
- *                    Info     IPϢ
-  *   :Info     IPϢ
-  
-         byte0   Ipv4Valid   1ʾѾùIP0ʾδùIP
-         byte1-16  Ipv4Addr  16ַֽIPַ
-         byte 17-32  Ipv4Mask  16ַֽ
-         byte 33-48  Ipv4Gateway 16ַֽ
-         byte 49 Ipv6Valid   1ʾѾùIP0ʾδùIP
-         byte7 50-113  Ipv6Addr  64ַֽIPַ
-         byte8 114-117   Ipv6MaskLen 4ֽڳ
-         byte 118-181  Ipv6Gateway 64ַֽ
-         
- *   ֵ  : OSP_S32
- * ˵  :   
- *
- * ޸ʷ      :
- *  1.       : 2014413
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
- OSP_S32 MPAIntf_GetMgmtIpInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_CHAR *IpInfo, OSP_U32 Length)
-
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 *LicenseBuffer = NULL;/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == IpInfo) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 569, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, IpInfo, Length);
-        return RetVal;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_MGMT_IP_INFO;
-    /* 0x4ffʾ */
-    MpaCmd.FruId = 0x4ff;
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_MGMT_IP_CFG_LENGTH;
-    MpaCmd.SdrType = (OSP_U8)(DAL_FRU_ID(DriverId) & 0xff);
-    MpaCmd.WtRd = MPA_READ;
-
-    LicenseBuffer = (OSP_U8 *)MPA_Malloc(MPA_MGMT_IP_CFG_LENGTH);
-    if (NULL == LicenseBuffer)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 570, "MPA malloc memory failed.");
-        return RetVal;
-    }
-    OSAL_MemSet_s(LicenseBuffer, MPA_MGMT_IP_CFG_LENGTH, 0, MPA_MGMT_IP_CFG_LENGTH);
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)LicenseBuffer);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 571, "MPA GetMgmtIpInfo return error.");
-        MPA_Free(LicenseBuffer);
-        LicenseBuffer = NULL;
-        return RetVal;
-    }
-
-    /*DAL·ĳʵʳȡ̵ĳȿ*/
-    OSAL_MemCpy_s((OSP_U8 *)IpInfo, (OSP_U32)min(MPA_MGMT_IP_CFG_LENGTH, (OSP_S32)Length), 
-        (OSP_U8 *)LicenseBuffer, (OSP_U32)min(MPA_MGMT_IP_CFG_LENGTH, (OSP_S32)Length));
-
-    MPA_Free(LicenseBuffer);
-    LicenseBuffer = NULL;
-    return RetVal;
-}
-
- 
-/******************************************************************************
-*     : MPAIntf_SetTemperatureLimit
-*   : ùIPϢ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*           DriverId   ID ͡FRUIDDEVICE IDϢ   
-*         IpInfo   ֵ
-
-        byte0 Ipv4Valid 1ʾѾùIP0ʾδùIP
-        byte1-16  Ipv4Addr  16ַֽIPַ
-        byte 17-32  Ipv4Mask  16ַֽ
-        byte 33-48  Ipv4Gateway 16ַֽ
-        byte 49 Ipv6Valid 1ʾѾùIP0ʾδùIP
-        byte7 50-113  Ipv6Addr  64ַֽIPַ
-        byte8 114-117 Ipv6MaskLen 4ֽڳ
-        byte 118-181  Ipv6Gateway 64ַֽ
-
-*   :
-
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ    :
-*  1.     : 2014413
-*       : 淫
-*  ޸ : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetMgmtIpInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_CHAR *IpInfo, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S8 *InfoBuffer = NULL;/*ڻMPAѯ*/
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == IpInfo) || (0 == Length))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 572, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, IpInfo, Length);
-        return DRV_RETURN_ERROR;
-    }
-    
-    InfoBuffer = (OSP_S8 *)MPA_Malloc(MPA_MGMT_IP_CFG_LENGTH);
-    if(NULL == InfoBuffer)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 573, "MPA malloc memory failed.");
-        return DRV_RETURN_ERROR;
-    }
-    OSAL_MemSet_s(InfoBuffer, MPA_MGMT_IP_CFG_LENGTH, 0, MPA_MGMT_IP_CFG_LENGTH);
-    OSAL_MemCpy_s((OSP_U8 *)InfoBuffer, (OSP_U32)min(182, (OSP_S32)Length), 
-        (OSP_U8 *)IpInfo, (OSP_U32)min(182, (OSP_S32)Length));
-
-    MpaCmd.Cmd = DRV_CMD_SET_MGMT_IP_INFO;
-    MpaCmd.FruId = 0x4ff;
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = MPA_MGMT_IP_CFG_LENGTH;
-    MpaCmd.SdrType =(OSP_U8)(DAL_FRU_ID(DriverId) & 0xff);
-    MpaCmd.WtRd = MPA_WRITE;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)InfoBuffer, (OSP_VOID *)NULL);
-    if(DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_DBG, 574, "MPA SetMgmtIpInfo return error %d.", RetVal);
-    }
-    
-    MPA_Free(InfoBuffer);
-    InfoBuffer = NULL;
-    return RetVal;
-}
-
-
- /******************************************************************************
- *     : MPAIntf_NotifyOsState
- *   : Ʒͬϵͳ״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Thres     ֵ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201457
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_NotifyOsState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_SYS_STATE_S *State)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == State))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 575, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 576, "MPA notify os state, id(0x%llx), slotid(0x%x), state:0x%x.", 
-                    DriverId, State->SlotId, State->State);
-    
-    MpaCmd.Cmd = DRV_CMD_NOTIFY_OS_STATE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DMI_SYS_STATE_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)State, (OSP_VOID *)NULL);
-    
-}
-
-/******************************************************************************
-*     : MPAIntf_SetPhyRate
-*   :  12G phy
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId        ID ͡FRUIDDEVICE IDϢ   
-*             PhyTxPara   Ͳ
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : ֻ12G expanderоƬĿִ֧˹
-* 
-* ޸ʷ      :
-*  1.       : 20140423
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetPhyRate(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Rate)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 577, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_PHY_RATE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(Rate);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Rate, (OSP_VOID *)NULL);    
-}  
-
-/******************************************************************************
-*     : MPAIntf_SetPhyTxPara
-*   :  12G phyͲ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId        ID ͡FRUIDDEVICE IDϢ   
-*             PhyTxPara   Ͳ
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : ֻ12G expanderоƬĿִ֧˹
-* 
-* ޸ʷ      :
-*  1.       : 20140423
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetPhyTxPara(OSP_VOID *EnclAddr, OSP_U64 DriverId, SAS_12G_PHY_TX_PARA_S PhyTxPara)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 578, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_PHY_TX_PARA;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(SAS_12G_PHY_TX_PARA_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&PhyTxPara, (OSP_VOID *)NULL);    
-    
-}    
-
-/******************************************************************************
-*     : MPAIntf_GetPhyTxPara
-*   : ѯ 12G phyͲ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId        ID ͡FRUIDDEVICE IDϢ
-*             Type          
-*             PhyTxPara   Ͳ
-*   : PhyTxPara   Ͳ
-*   ֵ  : OSP_S32
-* ˵  : ֻ12G expanderоƬĿִ֧˹
-* 
-* ޸ʷ      :
-*  1.       : 20140423
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetPhyTxPara(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Type, SAS_12G_PHY_TX_PARA_S *PhyTxPara)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr)
-        || (NULL == PhyTxPara))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 579, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PhyTxPara);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_PHY_TX_PARA;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(SAS_12G_PHY_TX_PARA_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Type, (OSP_VOID *)PhyTxPara);    
-    
-} 
-
-/******************************************************************************
-*     : MPAIntf_GetPhyRxPara
-*   : ѯ 12G phyղ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId        ID ͡FRUIDDEVICE IDϢ
-*             Type          
-*             PhyTxPara   Ͳ
-*   : PhyTxPara   Ͳ
-*   ֵ  : OSP_S32
-* ˵  : ֻ12G expanderоƬĿִ֧˹
-* 
-* ޸ʷ      :
-*  1.       : 20140423
-*           : jiangfanlu
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetPhyRxPara(OSP_VOID *EnclAddr, OSP_U64 DriverId, rx_adapt_results_struct *PhyRxPara)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr)
-        || (NULL == PhyRxPara))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 580, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PhyRxPara);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_PHY_RX_PARA;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(rx_adapt_results_struct);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PhyRxPara);    
-}  
-
- /******************************************************************************
- *     : MPAIntf_TestHeartBeat
- *   : Сϵͳ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ
- *             Result    Խ
- *   : Result    Խ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014728
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_TestHeartBeat(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Result)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Result))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Result);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_HEART_BEAT_TEST;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*ݺֵжϳɹʧܣֱΪɹ*/
-    *Result = DRV_RETURN_OK;
-
-    /*ctlຯֱӸݺֵжִн*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);    
-
-}      
-
- /******************************************************************************
- *     : MPAIntf_GetConnecterStatus
- *   : ѯ״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ
- *             Status    Խ
- *   : Status    Խ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014728
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetConnecterStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Status)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Status))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_CONNECTOR_STATUS;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status); 
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetPower5vPgState
- *   : ѯȰԴ5V PGź״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ
- *             Status   5v״̬, 0 -ALARM;1-OK
- *   : Status   5v״̬, 0 -ALARM;1-OK
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201491
- *           : shufan 00204084
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetPower5vPgState(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Status)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Status))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_12G_HDS_5VPG_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status); 
-
-}
-
- /******************************************************************************
- *     : MPAIntf_SetPower5vPgState
- *   : ÷Ȱ5V PGźſ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Mode       5V PGźſ, 0 -ر;1-
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201491
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetPower5vPgState(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Mode)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 344, "MPAIntf set power 5v state Id(0x%llx), value(%d).", DriverId, Mode);
-    MpaCmd.Cmd = DRV_CMD_12G_HDS_5VPG_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Mode, (OSP_VOID *)NULL);    
-    
-}
-
-
- /******************************************************************************
- *     : MPAIntf_GetCpldBitValue
- *   : ѯCPLDָĴַָbitλֵ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             RegAddr       CPLDĴַ
- *             RegBit          CPLDĴַbitλ
-                BitValue        CPLDĴַbitλֵ
- *   :BitValue        CPLDĴַbitλֵ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201499
- *           : shufan 00204084
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetCpldBitValue(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32  RegAddr, OSP_U32 RegBit, OSP_U32 *BitValue)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*RegAddrκRegBittarget*/
-    OSP_U32 DataIn[2] = {0, 0};
-
-    if ((NULL == EnclAddr) || (NULL == BitValue))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, BitValue);
-        return DRV_RETURN_ERROR;
-    }
-    MpaCmd.Cmd = DRV_CMD_12G_HDS_CPLDVALUE_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    DataIn[0] = RegAddr;
-    DataIn[1] = RegBit;
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)BitValue);    
-}                    
-
- /******************************************************************************
- *     : MPAIntf_SetCpldBitValue
- *   : CPLDָĴַָbitλֵ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             Type       LED
- *             Status      LED״̬
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201499
- *           : shufan 00204084
- *    ޸   : ɺ
- *
- ******************************************************************************/
- OSP_S32 MPAIntf_SetCpldBitValue(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32  RegAddr, OSP_U32 RegBit, OSP_U32 BitValue)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*RegAddr/RegBit/BitValuetarget*/
-    OSP_U32 DataIn[3] = {0, 0, 0};
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p)", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 344, "MPA set cpld bit value Id(0x%llx), addr(0x%x), bit(0x%x), value(0x%x).", DriverId, RegAddr, RegBit, BitValue);
-    MpaCmd.Cmd = DRV_CMD_12G_HDS_CPLDVALUE_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(RegAddr) + sizeof(RegBit) + sizeof(BitValue);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-    
-    DataIn[0] = RegAddr;
-    DataIn[1] = RegBit;
-    DataIn[2] = BitValue;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
-    
-}
-/******************************************************************************
-*     : MPAIntf_GetEnclAllDiskLedStatus
-*   : ѯһӲ̵״̬
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId        ID ͡FRUIDDEVICE IDϢ
-*             TypeBuff  Ӳ״̬buffer
-*             BuffLen   buffer
-*   : TypeBuff  Ӳ״̬buffer
-*   ֵ  : DRV_RETURN_OK - ɹ;ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 20140930
-*           : jiangfanlu
-*    ޸   : ɺ CR-01521364
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetEnclAllDiskLedStatus(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_LIGHT_TYPE_E *TypeBuff, OSP_U32 BuffLen)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_U8 DataIn[2] = {INVALID_VALUE8, INVALID_VALUE8};
-
-    if ((NULL == EnclAddr)
-        || (NULL == TypeBuff)
-        || (0 == BuffLen))/* ˴ȽжǷΪ,ÿҪȲͬ,ڸԴж */
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 1939, "MPA finds the pointer is null(0x%p, 0x%p), buflen is %u.", EnclAddr, TypeBuff, BuffLen);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = (OSP_U8)MpaAddr->DevFrame; /*  */
-    DataIn[1] = (OSP_U8)(BuffLen / sizeof(DMI_LIGHT_TYPE_E)); /* Ӳ̸ */
-    MpaCmd.Cmd = DRV_CMD_GET_ENCL_ALL_DISK_LED;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = (OSP_U16)BuffLen;/* ˴ȽжǷΪ,ÿҪȲͬ,ڸԴж */
-    MpaCmd.SdrType = SDRTYPE_GETALLDISKLEDSTATUS;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)TypeBuff);    
-}
-
-/******************************************************************************
-*     : MPAIntf_GetEnclAllDiskInLoop
-*   : ѯһӲڻ״̬
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId        ID ͡FRUIDDEVICE IDϢ
-*             TypeBuff  Ӳ״̬buffer
-*             BuffLen   buffer
-*   : TypeBuff  Ӳ״̬buffer
-*   ֵ  : DRV_RETURN_OK - ɹ;ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 20140930
-*           : jiangfanlu
-*    ޸   : ɺ CR-01521364
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetEnclAllDiskInLoop(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_DISK_STATUS_E* State, OSP_U32 BuffLen)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_U8 DataIn[2] = {INVALID_VALUE8, INVALID_VALUE8};
-
-    if ((NULL == EnclAddr)
-        || (NULL == State)
-        || (0 == BuffLen))/* ˴ȽжǷΪ,ÿҪȲͬ,ڸԴж */
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 1940, "MPA finds the pointer is null(0x%p, 0x%p), buflen is %u.", EnclAddr, State, BuffLen);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = (OSP_U8)MpaAddr->DevFrame; /*  */
-    DataIn[1] = (OSP_U8)(BuffLen / sizeof(DMI_DISK_STATUS_E)); /* Ӳ̸ */
-    MpaCmd.Cmd = DRV_CMD_GET_ENCL_ALL_DISK_INLOOP;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = (OSP_U16)BuffLen;/* ˴ȽжǷΪ,ÿҪȲͬ,ڸԴж */
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)State);    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetSesHostBufInfoToLog
- *   : SESBufferϢӡSES־
- *   : EnclAddr  
- *             DriverId  
- *   : 
- *   ֵ  : DRV_RETURN_OK - ɹ;ʧ
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014126
- *           : caijingye
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetSesHostBufInfoToLog(OSP_VOID *EnclAddr, OSP_U64 DriverId)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U32 uiTmp = 0;
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 580, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_SES_HOST_BUF_INFO_2_LOG;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&uiTmp, (OSP_VOID *)NULL);    
-
-}
-
- /******************************************************************************
- *     : MPAIntf_SetLinkLedStatus
- *   : sasװԵ˿LINK
- *   : EnclAddr   
- *             DriverId   
- *             LedStatus  01̵23
- *   : 
- *   ֵ  : DRV_RETURN_OK - ɹ;ʧ
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20141215
- *           : caijingye
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetLinkLedStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 LedStatus)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 1940, "MPA finds the pointer is null(0x%p)", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    if (LedStatus >= PORT_LED_BUTT)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 1990, "LedStatus:0x%x", LedStatus);   
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_SES_PORT_LED_STATUS;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(LedStatus);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*sasж˿ںΪ0~5*/
-    if (MpaCmd.DeviceId > 5) 
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 1991, "DevId:0x%x Err", MpaCmd.DeviceId);   
-        return DRV_RETURN_ERROR;
-    }
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&LedStatus, NULL); 
-}
-
-/******************************************************************************
-*     : MPAIntf_ExpLoopTestModeSet
-*   : ô̿˿ڻģʽ
-*   : EnclAddr  
-*             DriverId  
-*             Mode     ģʽ0ʾرпڻأ1ʾпڻأ
-*   : 
-*   ֵ  : OSP_S32 DRV_RETURN_OK - ɹ;ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 20141216
-*           : caijingye
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_ExpLoopTestModeSet(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 LoopMode)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 1940, "MPA finds the pointer is null(0x%p)", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    if (LoopMode >= PORT_LOOP_STATE_BUTT)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 1992, "LoopMode:0x%x Err", LoopMode);   
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_SES_PORT_LOOP_MODE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(LoopMode);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_LOOP;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*sasж˿ںΪ6~9*/
-    if ((MpaCmd.DeviceId > 9) || (MpaCmd.DeviceId < 6))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 1993, "DevId:0x%x Err", MpaCmd.DeviceId);   
-        return DRV_RETURN_ERROR;
-    }
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&LoopMode, NULL); 
-}
-
- /******************************************************************************
- *     : MPAIntf_ExpLoopTestModeGet
- *   : ȡ˿⻷״̬
- *   : EnclAddr  
- *             DriverId  
- *             TestMode  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201518
- *           : caijingye
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_ExpLoopTestModeGet(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *TestMode)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == TestMode))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 1940, "MPA finds pointer null(0x%p) (0x%p)", EnclAddr, TestMode);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_SES_PORT_LOOP_MODE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_LOOP;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*sasж˿ںΪ6~9*/
-    if ((MpaCmd.DeviceId > 9) || (MpaCmd.DeviceId < 6))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 1993, "DevId:0x%x Err", MpaCmd.DeviceId);   
-        return DRV_RETURN_ERROR;
-    }
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)TestMode); 
-}
-
- /******************************************************************************
- *     : MPAIntf_ExpBitSteamTest
- *   : ̿
- *   : EnclAddr  
- *             DriverId  
- *             Mode      1-ʼԣ0-ѯԽ
- *             Result   0-ʾɹʧ.bit0ʾ˿phy0Խbit1ʾ˿phy1Խ...bitnʾ˿phynĲԽ
- *   : 
- *   ֵ  : OSP_S32 DRV_RETURN_OK - ɹ;ʧ
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20141216
- *           : caijingye
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_ExpBitSteamTest(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Mode, OSP_U32 *Result)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Result))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 1940, "MPA finds the pointer is null(0x%p, 0x%p)", EnclAddr, Result);
-        return DRV_RETURN_ERROR;
-    }
-
-    if (Mode >= PORT_BITSTREAM_BUTT)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 1994, "Mode:0x%x", Mode);   
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SES_BIT_STREAM_TEST;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*sasж˿ںΪ0~5*/
-    if (MpaCmd.DeviceId > 5) 
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 1995, "DevId:0x%x Err", MpaCmd.DeviceId);   
-        return DRV_RETURN_ERROR;
-    }
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Mode, (OSP_VOID *)Result); 
-}
-
-/******************************************************************************
-*     : MPAIntf_GetMemFree
-*   : ȡBMCʣڴ
-*   : EnclAddr  
-*             DriverId  
-*             Status    
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015818
-*           : h00289393
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetMemFree(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Status)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Status))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 1940, "MPA finds pointer null(0x%p) (0x%p)", EnclAddr, Status);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_FREE_MEM;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U32) * 2;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)Status);
-}
-
-/******************************************************************************
-*     : MPAIntf_SetSensorErr
-*   : ôȡ쳣
-*   : EnclAddr  
-*             DriverId  
-*             IsErr     
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 20151027
-*           : h00289393
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetSensorErr(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 IsErr)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 333, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 334, "MPA sets SENSOR err, id(0x%llx), value(%d), devframe(0x%x).", 
-                        DriverId, IsErr, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-
-    MpaCmd.Cmd = DRV_CMD_SET_SENSOR_ERR;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SENSOR_TEMP;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&IsErr, (OSP_VOID *)NULL);    
-    
-}
-
-/******************************************************************************
-*     : MPAIntf_SetNumaFlag
-*   : numa
-*   : EnclAddr  
-*             DriverId  
-*             IsErr     
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2016528
-*           : h00289393
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetNumaFlag(OSP_VOID* EnclAddr, OSP_U32 FruId, OSP_BOOL Switch)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 333, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 334, "MPA sets NumaFlag err, id(0x%x), value(%d), devframe(0x%x).", 
-                        FruId, Switch, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
-
-    MpaCmd.Cmd = DRV_CMD_SET_NUMA_FLAG;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_NUMA_FLAG;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Switch, (OSP_VOID *)NULL);    
-    
-}
-
-/******************************************************************************
- *     : MPAIntf_GetNumaFlag
- *   : ѯnuma
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             SlotId      ӿڿλ
- *   : SlotId      ӿڿλ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2016528
- *           : hulinhui 00289393
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetNumaFlag(OSP_VOID* EnclAddr, OSP_U32 FruId, OSP_BOOL* Switch)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Switch))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 519, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Switch);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_NUMA_FLAG;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_NUMA_FLAG;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Switch);    
-    
-}
-
-/******************************************************************************
- *     : MPAIntf_SetBbuOnlinetTestSwitch
- *   : BBU߲ԵĿ״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             SlotId      ӿڿλ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201756
- *           : chenlifu 00378798
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBbuOnlinetTestSwitch(OSP_VOID* EnclAddr, OSP_U32 FruId, DMI_BBU_TEST_SWITCH_STATE_E SwitchState)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 519, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
- 
-    MpaCmd.Cmd = DRV_CMD_SET_BBU_ONLINE_TEST_SWITCH;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DMI_BBU_TEST_SWITCH_STATE_E);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_SET_BBU_ONLINE_TEST_SWITCH;
-    MpaCmd.WtRd = MPA_WRITE;
- 
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&SwitchState, (OSP_VOID *)NULL);
-}
-
-
-/******************************************************************************
- *     : MPAIntf_GetBbuOnlinetTestSwitch
- *   : ѯBBU߲ԵĿ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             SlotId      ӿڿλ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201754
- *           : c00378798 
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBbuOnlinetTestSwitch(OSP_VOID* EnclAddr, OSP_U32 FruId, DMI_BBU_TEST_SWITCH_STATE_E* SwitchState)
-{
-    MPA_CMD_INFO_S MpaCmd;
-     
-    if (NULL == EnclAddr || NULL == SwitchState)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 519, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, SwitchState);
-        return DRV_RETURN_ERROR;
-    }
- 
-    MpaCmd.Cmd = DRV_CMD_GET_BBU_ONLINE_TEST_SWITCH;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DMI_BBU_TEST_SWITCH_STATE_E);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_GET_BBU_ONLINE_TEST_SWITCH;
-    MpaCmd.WtRd = MPA_READ;
-    
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)SwitchState);
-}
-
-
-/******************************************************************************
- *     : MPA_RegisterEnclIntfToDM
- *   : MPAע عܽӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131019
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterEnclIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    ENCL_HEADER_OP_S EnclOp;
-    OSAL_MemSet_s((OSP_U8 *)&EnclOp, sizeof(EnclOp), 0, sizeof(EnclOp));
-
-    EnclOp.GetHwVer = MPAIntf_GetHardWareVersion;
-    EnclOp.GetState = NULL;
-    EnclOp.PowerCtrl = MPAIntf_SetFramePowerOnOff;
-    EnclOp.GetFrameNum = MPAIntf_GetFrameNumber;
-    EnclOp.SetFrameNum = MPAIntf_SetFrameNumber;
-    EnclOp.GetLedState = NULL;
-    EnclOp.OperateLed = NULL;
-    EnclOp.GetRunStatus = MPAIntf_GetFramePowerState;
-    EnclOp.SetProductConfig = MPAIntf_SetProductConfig;
-    EnclOp.GetDiskLightType = MPAIntf_GetEnclAllDiskLedStatus;
-    EnclOp.GetDiskState = MPAIntf_GetEnclAllDiskInLoop;
-
-    EnclOp.Opts = NULL;
-    EnclOp.GetSysPowerCost = MPAIntf_GetAllPowerConsumeAndThreshold;
-    EnclOp.GetSysPowerCostLimit = MPAIntf_GetThresholdRatio;
-    EnclOp.SetSysPowerCostLimit = MPAIntf_SetThresholdRatio;
-    EnclOp.SetDmaType = MPAIntf_SetFrameDmaType;
-    EnclOp.GetDmaType = MPAIntf_GetFrameDmaType;
-
-    EnclOp.GetFramePowerType = MPAIntf_GetFramePowerType;
-    EnclOp.GetFrameSupportDiskMaxSpeed = MPAIntf_GetDiskMaxRate;
-    EnclOp.GetFanFullSpeedFlag = MPAIntf_GetFanMaxLevelFlag;
-    EnclOp.SetBbuOnlinetTestSwitch = MPAIntf_SetBbuOnlinetTestSwitch;
-    EnclOp.GetBbuOnlinetTestSwitch = MPAIntf_GetBbuOnlinetTestSwitch;
-
-    EnclOp.SetFramePortMode = MPAIntf_SetFramePortMode;
-    EnclOp.GetFramePortMode = MPAIntf_GetFramePortMode;
-    EnclOp.GetCtrlBoardState = MPAIntf_GetCtrlBoardOnlineState;
-    /* Efuse (used to ctrl disk slot power) can not be seen out of PANGEA. */
-    EnclOp.GetSlotPwrCtrlCfg = MPAIntf_GetFrameSlotPwrCtrlCfg;
-    EnclOp.NotifyCpuAffinity = MPAIntf_NotifyCpuAffinity;
-    EnclOp.NotifyUpgradeStatus = MPAIntf_SetUpgradeState;
-    RetVal = DAL_RegisterEnclOp(DRV_TYPE_DEV, &EnclOp);
-
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 581, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPA_RegisterFruIntfToDM
- *   : MPAעFRUعܽӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131019
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterFruIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    FRU_HEADER_OP_S FruOp;
-    OSAL_MemSet_s((OSP_U8 *)&FruOp, sizeof(FruOp), 0, sizeof(FruOp));
-
-    FruOp.GetFruType = MPAIntf_GetEnclosureFruType;
-    FruOp.GetHwVer = MPAIntf_GetHardWareVersion;
-    FruOp.GetPeerHwVer = MPAIntf_GetPeerHwVer;
-    FruOp.GetState = MPAIntf_GetPresentState;
-    FruOp.GetPeerState = MPAIntf_GetPeerPresentState;
-    FruOp.PowerCtrl = MPAIntf_SetFruPowerCtrl;
-    FruOp.GetLedState = NULL;
-    FruOp.OperateLed = NULL;
-    FruOp.GetSlot = MPAIntf_GetBoardSlotId;
-    FruOp.Remove = NULL;
-    FruOp.SetFruValidity = MPAIntf_SetFruValid;
-    //.IsFruSupported = NULL;
-    FruOp.GetDfdInfo = MPAIntf_GetIntfCardPowerGoodStatus;
-    FruOp.GetFruPowerEnable = MPAIntf_GetPowerEnState;
-    FruOp.SetFruPowerEnable = MPAIntf_SetPowerEnState;
-    FruOp.SetFruPowerOffDelay = MPAIntf_SetIntfBoardDelay;
-    /*Add by yanajianqiang 00310577 for DTS2015091807980 on 2105.10.10 :ȥ8717DMIѯλͽӿ*/
-    FruOp.GetSubCardState = MPAIntf_GetSubCardState;
-    FruOp.GetSubCardType   = MPAIntf_GetSubCardType;    
-    FruOp.NotifyCtrlReset = MPAIntf_NotifyCtrlReset;
-    FruOp.SetNumaFlag = MPAIntf_SetNumaFlag;
-    FruOp.GetNumaFlag = MPAIntf_GetNumaFlag;
-    FruOp.GetFruSubType = MPAIntf_GetFruSubType;
-    FruOp.GetBoardPowerCost = MPAIntf_GetCtrlBoardPowerCost;
-    FruOp.GetFruMaxSupportSpeed = MPAIntf_GetExpBoardSpeed;
-    FruOp.NotifySysInfo = MPAIntf_NotifySysInfo;
-    FruOp.GetLightBoardPresentStatus = MPAIntf_GetLightBoardPresentStatus;
-    FruOp.SetLightBoardLightStatus = MPAIntf_SetLightBoardLightStatus;
-    FruOp.GetLightBoardLightStatus = MPAIntf_GetLightBoardLightStatus;
-    FruOp.Opts = NULL;
-
-    RetVal = DAL_RegisterFruOp(DRV_TYPE_DEV, &FruOp);
-
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 582, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPA_RegisterTemperatureIntfToDM
- *   : MPAע¶عܽӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131019
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterTemperatureIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    DAL_TEMP_OP_S TemperatureOp;
-    OSAL_MemSet_s((OSP_U8 *)&TemperatureOp, sizeof(TemperatureOp), 0, sizeof(TemperatureOp));
-
-    TemperatureOp.GetName = MPAIntf_GetTemperatureName;
-    TemperatureOp.GetSubtype = MPAIntf_GetTemperatureSubtype;
-    TemperatureOp.GetStatus = MPAIntf_GetTemperatureState;
-    TemperatureOp.GetTemp = MPAIntf_GetTemperature;
-    TemperatureOp.SetTemp = MPAIntf_SetTemperature;
-    TemperatureOp.GetThres = MPAIntf_GetTemperatureLimit;
-    TemperatureOp.SetThres = MPAIntf_SetTemperatureLimit;
-    TemperatureOp.NotifyTemp = MPAIntf_SystemSetTemperature;
-    TemperatureOp.RestoreDefaultThres = MPAIntf_RestoreTemperatureThres;
-
-
-    RetVal = DAL_RegisterTempOp(DRV_TYPE_DEV, &TemperatureOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 583, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-}
-
- 
-  /******************************************************************************
-  *     : MPA_RegisterFruTemperatureIntfToDM
-  *   : MPAעFRUۺ¶عܽӿDMģ
-  *   : OSP_VOID  
-  *   : 
-  *   ֵ  : OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ      :
-  *  1.       : 2014418
-  *           : 淫
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
- OSP_S32 MPA_RegisterFruTemperatureIntfToDM(OSP_VOID)
- {
-     OSP_S32 RetVal = DRV_RETURN_ERROR;
- 
-     DAL_TEMP_SET_OP_S TemperatureOp;
-     OSAL_MemSet_s((OSP_U8 *)&TemperatureOp, sizeof(TemperatureOp), 0, sizeof(TemperatureOp));
-     
-     TemperatureOp.GetName = MPAIntf_GetFruSingleTemperatureName;
-     TemperatureOp.GetSubtype = MPAIntf_GetFruAllTemperatureSubtype;
-     TemperatureOp.GetStatus = MPAIntf_GetFruAllTemperatureState;
-     TemperatureOp.GetTemp = MPAIntf_GetFruAllTemperature;
-     TemperatureOp.SetTemp = MPAIntf_SetFruSingleTemperature;
-     TemperatureOp.GetThres = MPAIntf_GetFruSingleTemperatureLimit;
-     TemperatureOp.SetThres = MPAIntf_SetFruSingleTemperatureLimit;
-     TemperatureOp.NotifyTemp = MPAIntf_SystemSetTemperature;
-     TemperatureOp.RestoreDefaultThres = MPAIntf_RestoreFruTemperatureThres;
-
-     RetVal = DAL_RegisterTempSetOp(DRV_TYPE_DEV, &TemperatureOp);
-     
-     if (DRV_RETURN_OK != RetVal)
-     {
-         DRV_MPA_TRACE(DRV_LOG_WARN, 584, "MPA registers interface function to dm failed(0x%x).", RetVal);
-     }
- 
-     return RetVal;
- 
- }
-
- /******************************************************************************
- *     : MPA_RegisterVoltIntfToDM
- *   : MPAעѹعܽӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131019
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterVoltIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    DAL_VOLT_OP_S VoltageOp;
-    OSAL_MemSet_s((OSP_U8 *)&VoltageOp, sizeof(VoltageOp), 0, sizeof(VoltageOp));
-
-    VoltageOp.GetName = MPAIntf_GetVoltageName;
-    VoltageOp.GetSubtype = MPAIntf_GetVoltageSubtype;
-    VoltageOp.GetStatus = MPAIntf_GetVoltageState;
-    VoltageOp.GetVolt = MPAIntf_GetVoltage;
-    VoltageOp.GetThres = MPAIntf_GetVoltageThreshold;
-    VoltageOp.SetThres = MPAIntf_SetVoltageThreshold;
-
-    RetVal = DAL_RegisterVoltOp(DRV_TYPE_DEV, &VoltageOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 585, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-  
-}
-
- 
-  /******************************************************************************
-  *     : MPA_RegisterFruVoltIntfToDM
-  *   : MPAעFRUۺϵѹعܽӿDMģ
-  *   : OSP_VOID  
-  *   : 
-  *   ֵ  : OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ      :
-  *  1.       : 2014418
-  *           : 淫
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
- OSP_S32 MPA_RegisterFruVoltIntfToDM(OSP_VOID)
- {
-     OSP_S32 RetVal = DRV_RETURN_ERROR;
-     
-     DAL_VOLT_SET_OP_S VoltageOp;
-     OSAL_MemSet_s((OSP_U8 *)&VoltageOp, sizeof(VoltageOp), 0, sizeof(VoltageOp));
-     
-     VoltageOp.GetName = MPAIntf_GetFruSingleVoltageName;
-     VoltageOp.GetSubtype = MPAIntf_GetFruAllVoltageSubtype;
-     VoltageOp.GetStatus = MPAIntf_GetFruAllVoltageState;
-     VoltageOp.GetVolt = MPAIntf_GetFruAllVoltage;
-     VoltageOp.GetThres = MPAIntf_GetFruSingleVoltageThreshold;
-     VoltageOp.SetThres = MPAIntf_SetFruSingleVoltageThreshold;
-
-     RetVal = DAL_RegisterVoltSetOp(DRV_TYPE_DEV, &VoltageOp);
-     
-     if (DRV_RETURN_OK != RetVal)
-     {
-         DRV_MPA_TRACE(DRV_LOG_WARN, 586, "MPA registers interface function to dm failed(0x%x).", RetVal);
-     }
- 
-     return RetVal;
-   
- }
-
- /******************************************************************************
- *     : MPA_RegisterFanIntfToDM
- *   : MPAעعܽӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131019
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterFanIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-   
-    DAL_FAN_OP_S FanOp;
-    OSAL_MemSet_s((OSP_U8 *)&FanOp, sizeof(FanOp), 0, sizeof(FanOp));
-
-    FanOp.GetName = MPAIntf_GetFanName;
-    FanOp.GetStatus = MPAIntf_GetFanState;
-    FanOp.GetLevel = MPAIntf_GetFanLevel;
-    FanOp.GetSpeed = MPAIntf_GetFanSpeed;
-    FanOp.GetMode = MPAIntf_GetFanMode;
-    FanOp.SetMode = MPAIntf_SetFanMode;
-    FanOp.SetLevel = MPAIntf_SetFanLevel;
-    FanOp.GetHwCode = MPAIntf_GetFanHuaweiCode;
-    FanOp.GetSN = MPAIntf_GetFanSn;
-    FanOp.GetUsrLevel = MPAIntf_GetFanUsrLevel;
-    //.Operate = NULL,
-
-    
-    RetVal = DAL_RegisterFanOp(DRV_TYPE_DEV, &FanOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 587, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-    
-}
-
-
- /******************************************************************************
- *     : MPA_RegisterPowerIntfToDM
- *   : MPAעԴعܽӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131019
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterPowerIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    DAL_PS_OP_S PowerOp;
-    OSAL_MemSet_s((OSP_U8 *)&PowerOp, sizeof(PowerOp), 0, sizeof(PowerOp));
-
-    PowerOp.GetName = MPAIntf_GetPowerName;
-    PowerOp.GetStatus = MPAIntf_GetPowerState;
-    PowerOp.GetOutput = MPAIntf_GetPowerOutput;
-    PowerOp.GetRatedPower = MPAIntf_GetPowerRatedOutPut;
-    PowerOp.GetAlert = MPAIntf_GetPowerAlertInfo;
-    PowerOp.Operate = MPAIntf_SetPowerFruOnOff;
-    PowerOp.GetProName = MPAIntf_GetPowerProductName;
-    PowerOp.GetProDate = MPAIntf_GetPowerManufactureDate;
-    PowerOp.GetHwCode = MPAIntf_GetPowerHuaweiCode;
-    PowerOp.GetVersion = MPAIntf_GetPowerSoftwareVersion;
-    PowerOp.GetType = MPAIntf_GetPowerAcDcType;
-    PowerOp.GetVendor = MPAIntf_GetPowerVendor;
-    PowerOp.GetSN = MPAIntf_GetPowerSn;
-    PowerOp.GetInput = MPAIntf_GetPowerInput;
-    PowerOp.SupportHighTemp = MPAIntf_GetPowerSupportSetTempProtect;
-    PowerOp.SetHighTempRule = MPAIntf_SetPowerTempProtect;
-    PowerOp.GetHighTempRule = MPAIntf_GetPowerTempProtect;
-
-    RetVal = DAL_RegisterPsOp(DRV_TYPE_DEV, &PowerOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 588, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
- 
-}
-
-
- /******************************************************************************
- *     : MPA_RegisterCpldIntfToDM
- *   : MPAעCPLDعܽӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131019
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterCpldIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    DAL_CPLD_OP_S CpldOp;
-    OSAL_MemSet_s((OSP_U8 *)&CpldOp, sizeof(CpldOp), 0, sizeof(CpldOp));
-
-    CpldOp.GetName = MPAIntf_GetCpldName;
-    CpldOp.GetFwVer = MPAIntf_GetCpldVersion;
-    CpldOp.GetPeerFwVer = MPAIntf_GetPeerCpldVersion;
-    CpldOp.UpdatePrepare = MPAIntf_UpdateCpldPrepare;    
-    CpldOp.UpdateTransData = MPAIntf_UpdateCpldSendFile;
-    CpldOp.UpdateStart = MPAIntf_UpdateCpldStart;
-    CpldOp.UpdateGetStatus = MPAIntf_GetCpldUpgradeState;
-
-
-    RetVal = DAL_RegisterCpldOp(DRV_TYPE_DEV, &CpldOp);
-
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 589, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-    
-}
- /******************************************************************************
- *     : MPA_RegisterFpgaIntfToDM
- *   : MPAעFpgaعܽӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013118
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterFpgaIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    DAL_FPGA_OP_S FpgaOp;
-    OSAL_MemSet_s((OSP_U8 *)&FpgaOp, sizeof(FpgaOp), 0, sizeof(FpgaOp));
-
-    FpgaOp.GetName = MPAIntf_GetFpgaName;
-    FpgaOp.GetFwVer = MPAIntf_GetFpgaVersion;
-    FpgaOp.UpdatePrepare = MPAIntf_UpdateFpgaPrepare;    
-    FpgaOp.UpdateTransData = MPAIntf_UpdateFpgaSendFile;
-    FpgaOp.UpdateStart = MPAIntf_UpdateFpgaStart;
-
-
-    RetVal = DAL_RegisterFpgaOp(DRV_TYPE_DEV, &FpgaOp);
-
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 590, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-    
-}
- /******************************************************************************
- *     : MPA_RegisterBbuIntfToDM
- *   : MPAעBBUعܽӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131019
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterBbuIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_BBU_OP_S BbuOp;
-    OSAL_MemSet_s((OSP_U8 *)&BbuOp, sizeof(BbuOp), 0, sizeof(BbuOp));
-
-    BbuOp.GetName = MPAIntf_GetBbuName;
-    BbuOp.GetManuDate = MPAIntf_GetBbuManuDate;
-    BbuOp.GetModel = MPAIntf_GetBbuModel;
-    BbuOp.GetVendor = MPAIntf_GetBbuVendorName;
-    BbuOp.GetSn = MPAIntf_GetBbuSn;
-    BbuOp.GetStatus = MPAIntf_GetBbuState;
-    BbuOp.GetChargeStat = MPAIntf_GetBbuWorkState;
-    /* BEGIN by hulinhui 00289393, REASON: DTS2015040709129   */
-    /* ȡذѹظdmi */
-    BbuOp.GetVolt = MPAIntf_GetBbuCellVolt;
-    /* END by hulinhui 00289393*/
-    BbuOp.SetPreAlarmTime = MPAIntf_SetBbuPreLife;
-    BbuOp.GetPreAlarmTime = MPAIntf_GetBbuPreLife;
-    BbuOp.GetLife = MPAIntf_GetBbuLife;
-    BbuOp.SetLife = MPAIntf_SetBbuLife;
-    BbuOp.GetPreAlarmStatus = MPAIntf_GetBbuPreLifeAlarm;
-    BbuOp.GetLifeAlarm = MPAIntf_GetBbuLifeAlarm;
-
-    BbuOp.SetPreAlarmCapacity = MPAIntf_SetBbuCapacityPreAlarm;
-    BbuOp.SetAlarmCapacity = MPAIntf_SetBbuCapacityAlarm;
-    BbuOp.GetPreAlarmCapacity = MPAIntf_GetBbuCapacityPreAlarm;
-    BbuOp.GetAlarmCapacity = MPAIntf_GetBbuCapacityAlarm;
-    BbuOp.GetCapacity = MPAIntf_GetBbuRemainCapacityMah;
-    
-    BbuOp.GetQRemain = MPAIntf_GetBbuRemainingCapacity;
-    BbuOp.GetDischargeCount = MPAIntf_GetBbuDischargeCount;
-    BbuOp.GetErrBitmap = MPAIntf_GetBbuFaultBit;
-
-    /* BEGIN: Added by gouzhengxu 00289460, 2015/9/22  ⵥ:NA, ޸ԭ:CBU̬ѹ */
-    BbuOp.SetOnlineTest = MPAIntf_SetBbuOnlineTest;
-    BbuOp.GetAdjustVoltFlag = MPAIntf_GetAdjustVoltFlag;
-    /* END:   Added by gouzhengxu 00289460, 2015/9/22 ⵥ:NA */
-
-    RetVal = DAL_RegisterBbuOp(DRV_TYPE_DEV,  &BbuOp);
-
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 591, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-    
-}
-
-
- /******************************************************************************
- *     : MPA_RegisterMgmtCpuIntfToDM
- *   : MPAעоƬCPUعܽӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131019
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterMgmtCpuIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    DAL_MGMT_CPU_OP_S MgmtCpuOp;
-    OSAL_MemSet_s((OSP_U8 *)&MgmtCpuOp, sizeof(MgmtCpuOp), 0, sizeof(MgmtCpuOp));
-
-    MgmtCpuOp.GetName = MPAIntf_GetMgmtCpuName;
-    MgmtCpuOp.GetFwVer = MPAIntf_GetMgmtVersion;
-    MgmtCpuOp.UpdatePrepare = MPAIntf_UpdateMgmtPrepare;
-    MgmtCpuOp.UpdateTransData = MPAIntf_UpdateMgmtSendFile;
-    MgmtCpuOp.UpdateStart = MPAIntf_UpdateMgmtStart;
-    MgmtCpuOp.UpdateGetStatus = MPAIntf_GetMgmtUpgradeState;
-    /* BEGIN: Added by shipin, 2014-8-29 18:56:48, ⵥ:DTS2014082908010, ޸ԭ:Ӳ2UƿûСϵͳ¿ƿMACûй̻Ч */
-    MgmtCpuOp.Reset = MPAIntf_SetMgmtReset;
-    /* END: Added by shipin, 2014-8-29 18:56:48 */
-    MgmtCpuOp.GetTime = MPAIntf_GetTime;
-    MgmtCpuOp.SetTime = MPAIntf_SetTime;
-    MgmtCpuOp.GetLog = MPAIntf_GetMgmtCpuLog;
-    MgmtCpuOp.GetDegree = NULL;
-    MgmtCpuOp.SetDegree = NULL;
-    MgmtCpuOp.SetCustomRule = MPAIntf_SetCustomRules;
-    MgmtCpuOp.GetCustomRule = MPAIntf_GetCustomRules;
-    MgmtCpuOp.GetIsoPara = NULL;
-    MgmtCpuOp.SetIsoPara = NULL;
-    MgmtCpuOp.GetRunMode = MPAIntf_GetChipRunMode;
-    MgmtCpuOp.SetRunMode = MPAIntf_SetChipRunMode;
-    MgmtCpuOp.GetKillFlag = MPAIntf_GetSysKillFlag;
-    MgmtCpuOp.SetKillFlag = MPAIntf_SetSysKillFlag;
-    MgmtCpuOp.SetLoginPassword = MPAIntf_SetBackBoardPassword;
-    /* BEGIN: Added by jiangfanlu 00101148, 2014/12/8  ⵥ:CR-01602318, ޸ԭ:CR-01592961-OceanStor 5800 V3 V300R002C00-ϵͳĬûadminƳȲ) */
-    MgmtCpuOp.SetUserAndPassword = MPAIntf_SetUserAndPassword;
-    /* END:   Added by jiangfanlu 00101148, 2014/12/8 ⵥ:CR-01602318 */
-    MgmtCpuOp.NotifyDiskTemp = MPAIntf_SetDiskTemperature;
-    MgmtCpuOp.SetBufferingSwitch = MPAIntf_SetBufferingSwitchFlag;
-    MgmtCpuOp.GetBufferingSwitch = MPAIntf_GetBufferingSwitchFlag;
-    //.NotifyTemp = NULL,
-    MgmtCpuOp.SetSysState = MPAIntf_NotifyOsState;
-    MgmtCpuOp.GetState = MPAIntf_GetCtrlBmcConnectionState;
-    /* BEGIN: Added by shipin, 2016-1-20 18:41:46, ⵥ:ALMCR201601134871051, ޸ԭ:άӸλԿؼģ */
-    MgmtCpuOp.ResetOther = MPAIntf_ResetOtherBoard;
-    /* END: Added by shipin, 2016-1-23 10:24:58 */
-
-
-    RetVal = DAL_RegisterMgmtCpuOp(DRV_TYPE_DEV, &MgmtCpuOp);
-
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 592, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-    
-}
-
-
- /******************************************************************************
- *     : MPA_RegisterDiskIntfToDM
- *   : MPAעӲعܽӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131019
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterDiskIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    DAL_DISK_SAS_OP_S DiskOp;
-    OSAL_MemSet_s((OSP_U8 *)&DiskOp, sizeof(DiskOp), 0, sizeof(DiskOp));
-
-    DiskOp.GetName = MPAIntf_GetDiskName;
-    DiskOp.GetState = MPAIntf_GetDiskInLoopStatus;
-    DiskOp.GetPower = MPAIntf_GetDiskPowerStatus;
-    DiskOp.SetPower = MPAIntf_SetDiskPowerStatus;
-    DiskOp.SwitchPhy = MPAIntf_SetDiskSwitchStatus;
-    DiskOp.GetPhySwitch = MPAIntf_GetDiskSwitchStatus;
-    DiskOp.OperateLed = MPAIntf_SetDiskLedStatus;
-    DiskOp.GetLedState = MPAIntf_GetDiskLedStatus;
-    DiskOp.GetPhyErr = MPAIntf_GetDiskPhyErr;
-    /* BEGIN: Added by shipin, 2015-6-4 15:48:45, ????:AR-0000942937, ????:SES?????? */
-    DiskOp.LoopBackTestStart = MPAIntf_DiskLoopBackStart;
-    DiskOp.LoopBackTestStop = MPAIntf_DiskLoopBackStop;
-    DiskOp.LoopBackTestCheck= MPAIntf_DiskLoopBackCheck;
-    /* END: Added by shipin, 2015-6-4 15:48:45 */
-    DiskOp.GetPresent = MPAIntf_GetDiskPresent;
-    DiskOp.SendTemperature = NULL;
-    DiskOp.GetStatusInfo = MPAIntf_GetDiskStatusInfo;
-    DiskOp.GetSubHealthyState = NULL;
-
-
-    RetVal = DAL_RegisterDiskSasOp(DRV_TYPE_DEV, &DiskOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 593, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-}
-
-
- /******************************************************************************
- *     : MPA_RegisterElabelIntfToDM
- *   : MPAעӱǩعܽӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131022
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterElabelIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    DAL_MANU_ELABEL_OP_S ElabelOp;
-    OSAL_MemSet_s((OSP_U8 *)&ElabelOp, sizeof(ElabelOp), 0, sizeof(ElabelOp));
-
-    ElabelOp.GetElabel = MPAIntf_GetElectronicLabel;
-    ElabelOp.SetElabel = MPAIntf_SetElectronicLabel;
-    ElabelOp.GetPeerElabel = MPAIntf_GetPeerElabel;
-
-
-    RetVal = DAL_RegisterElabelOp(DRV_TYPE_DEV, &ElabelOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 594, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-    
-}
-
-/******************************************************************************
-*     : MPA_RegisterSaleElabelIntfToDM
-*   : MPAעưӱǩعܽӿDMģ
-*   : OSP_VOID  
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 20141118
-*           : chenkeren 00221000
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPA_RegisterSaleElabelIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    DAL_MANU_ELABEL_OP_S SaleElabelOp;
-    OSAL_MemSet_s((OSP_U8 *)&SaleElabelOp, sizeof(SaleElabelOp), 0, sizeof(SaleElabelOp));
-
-    SaleElabelOp.GetElabel = MPAIntf_GetCtrlBoardMemoryElectronicLabel;
-    SaleElabelOp.SetElabel = MPAIntf_SetCtrlBoardE2ElectronicLabel;
-    SaleElabelOp.GetPeerElabel = NULL;
-
-    RetVal = DAL_RegisterSaleElabelOp(DRV_TYPE_DEV, &SaleElabelOp);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 2672, "MPA registers ctrl interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-}
-
- /******************************************************************************
- *     : MPA_RegisterMacIntfToDM
- *   : MPAעMACַعܽӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131022
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterMacIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    DAL_MANU_MAC_OP_S MacOp;
-    OSAL_MemSet_s((OSP_U8 *)&MacOp, sizeof(MacOp), 0, sizeof(MacOp));
-
-    MacOp.GetMac = MPAIntf_GetBackBoardMac;
-    MacOp.SetMac = MPAIntf_SetBackBoardMac;
-
-
-    RetVal = DAL_RegisterMacOp(DRV_TYPE_DEV, &MacOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 595, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-    
-}
-
- /******************************************************************************
- *     : MPA_RegisterSnIntfToDM
- *   : MPAעSNعܽӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131022
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterSnIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    DAL_MANU_SN_OP_S SnOp;
-    OSAL_MemSet_s((OSP_U8 *)&SnOp, sizeof(SnOp), 0, sizeof(SnOp));
-
-    SnOp.GetSn = MPAIntf_GetBackBoardSN;
-    SnOp.SetSn = MPAIntf_SetBackBoardSN;
-
-
-    RetVal = DAL_RegisterSnOp(DRV_TYPE_DEV, &SnOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 596, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-    
-}
-
- /******************************************************************************
- *     : MPA_RegisterProLogoIntfToDM
- *   : MPAע־عܽӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131022
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterProLogoIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    DAL_MANU_PROLOGO_OP_S LogoOp;
-    OSAL_MemSet_s((OSP_U8 *)&LogoOp, sizeof(LogoOp), 0, sizeof(LogoOp));
-
-    LogoOp.GetProLogo = MPAIntf_GetBackBoardLogo;
-    LogoOp.SetProLogo = MPAIntf_SetBackBoardLogo;
-
-
-    RetVal = DAL_RegisterPrologoOp(DRV_TYPE_DEV, &LogoOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 597, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-    
-}
-
- /******************************************************************************
- *     : MPA_RegisterVendorIntfToDM
- *   : MPAע᳧عܽӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131022
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterVendorIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    DAL_MANU_VENDOR_OP_S VendorOp;
-    OSAL_MemSet_s((OSP_U8 *)&VendorOp, sizeof(VendorOp), 0, sizeof(VendorOp));
-
-    VendorOp.GetVendor = MPAIntf_GetBackBoardVendor;
-    VendorOp.SetVendor = MPAIntf_SetBackBoardVendor;
-
-
-    RetVal = DAL_RegisterVendorOp(DRV_TYPE_DEV, &VendorOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 598, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-    
-}
-
- /******************************************************************************
- *     : MPA_RegisterBrandInfoToDM
- *   : MPAעϢӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131022
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterBrandInfoToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    DAL_MANU_BRAND_OP_S BrandOp;
-    OSAL_MemSet_s((OSP_U8 *)&BrandOp, sizeof(BrandOp), 0, sizeof(BrandOp));
-
-    BrandOp.GetBrand = MPAIntf_GetBackBoardBrand;
-    BrandOp.SetBrand = MPAIntf_SetBackBoardBrand;
-
-
-    RetVal = DAL_RegisterBrandOp(DRV_TYPE_DEV, &BrandOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 599, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-    
-}
-
- /******************************************************************************
- *     : MPA_RegisterEsnInfoToDM
- *   : MPAעESNϢӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131022
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterEsnInfoToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    DAL_MANU_ESN_OP_S EsnOp;
-    OSAL_MemSet_s((OSP_U8 *)&EsnOp, sizeof(EsnOp), 0, sizeof(EsnOp));
-
-    EsnOp.GetESN = MPAIntf_GetBackboardESN;
-    EsnOp.SetESN = MPAIntf_SetBackboardESN;
-
-
-    RetVal = DAL_RegisterEsnOp(DRV_TYPE_DEV, &EsnOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 600, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-    
-}
-
- /******************************************************************************
- *     : MPA_RegisterLicenseInfoToDM
- *   : MPAעLICENSEϢӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131022
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterLicenseInfoToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    DAL_MANU_LICENSE_OP_S LicenseOp;
-    OSAL_MemSet_s((OSP_U8 *)&LicenseOp, sizeof(LicenseOp), 0, sizeof(LicenseOp));
-
-    LicenseOp.GetLicense = MPAIntf_GetBackBoardLicense;
-    LicenseOp.SetLicense = MPAIntf_SetBackBoardLicense;
-
-
-    RetVal = DAL_RegisterLicenseOp(DRV_TYPE_DEV, &LicenseOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 601, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-    
-}
-
- /******************************************************************************
- *     : MPA_RegisterProLogoInfoToDM
- *   : MPAעproduct logoϢӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131022
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterProLogoInfoToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    DAL_MANU_PROMODEL_OP_S PromodelOp;
-    OSAL_MemSet_s((OSP_U8 *)&PromodelOp, sizeof(PromodelOp), 0, sizeof(PromodelOp));
-
-    PromodelOp.GetProModel = MPAIntf_GetBackBoardModel;
-    PromodelOp.SetProModel = MPAIntf_SetBackBoardModel;
-    PromodelOp.GetOemProModel = MPAIntf_GetBackBoardOemModel;
-    PromodelOp.SetOemProModel = MPAIntf_SetBackBoardOemModel;
-
-
-    RetVal = DAL_RegisterPromodelOp(DRV_TYPE_DEV, &PromodelOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 602, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-    
-}
-
- /******************************************************************************
- *     : MPA_RegisteAlarmInfoToDM
- *   : MPAעalarmϢӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131022
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisteAlarmInfoToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    ALARM_ELEMENT_OP_S AlarmOp;
-    OSAL_MemSet_s((OSP_U8 *)&AlarmOp, sizeof(AlarmOp), 0, sizeof(AlarmOp));
-
-    AlarmOp.GetName = MPAIntf_GetAlarmName;
-    AlarmOp.GetType = MPAIntf_GetAlarmType;
-    AlarmOp.GetInfo = MPAIntf_GetAlarmInfo;
-
-
-    RetVal = DAL_RegisterAlarmElementOp(DRV_TYPE_DEV, &AlarmOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 603, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-    
-}
-
-
- 
-  /******************************************************************************
-  *     : MPA_RegisteFruAllAlarmInfoToDM
-  *   : MPAעalarmϢӿDMģ
-  *   : OSP_VOID  
-  *   : 
-  *   ֵ  : OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ      :
-  *  1.       : 2014419
-  *           : 淫
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
- OSP_S32 MPA_RegisteFruAllAlarmInfoToDM(OSP_VOID)
- {
-     OSP_S32 RetVal = DRV_RETURN_ERROR;
-     DAL_ALARM_SET_OP_S AlarmOp;
-     OSAL_MemSet_s((OSP_U8 *)&AlarmOp, sizeof(AlarmOp), 0, sizeof(AlarmOp));
-     
-     AlarmOp.GetName = MPAIntf_GetFruAllAlarmName;
-     AlarmOp.GetType = MPAIntf_GetFruAllAlarmType;
-     AlarmOp.GetInfo = MPAIntf_GetFruAllAlarmInfo;
- 
-     RetVal = DAL_RegisterAlarmSetOp(DRV_TYPE_DEV, &AlarmOp);
-     
-     if (DRV_RETURN_OK != RetVal)
-     {
-         DRV_MPA_TRACE(DRV_LOG_WARN, 604, "MPA registers interface function to dm failed(0x%x).", RetVal);
-     }
- 
-     return RetVal;
- 
-     
- }
-
- /******************************************************************************
- *     : MPA_RegisterFrameConfigInfoToDM
- *   : MPAעϢӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131022
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterFrameConfigInfoToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    DAL_CONF_PICKER_S FrameConfInfoOp;
-    OSAL_MemSet_s((OSP_U8 *)&FrameConfInfoOp, sizeof(FrameConfInfoOp), 0, sizeof(FrameConfInfoOp));
-
-    FrameConfInfoOp.GetEnclType = MPAIntf_GetFrameMode;
-    FrameConfInfoOp.GetFruType = MPAIntf_GetEnclosureFruType;
-    FrameConfInfoOp.GetEnclFruList = MPAIntf_GetEnclosureFruList;
-    FrameConfInfoOp.GetFruSlotName = MPAIntf_GetEnclosureFruSilkScreen;
-    FrameConfInfoOp.GetFruVisibleMap = MPAIntf_GetEnclFruVisibleMap;
-    FrameConfInfoOp.SwitchAllPortOnEncl = MPAIntf_SwitchAllPortOnEncl;
-
-    RetVal = DAL_RegisterConfPicker(DRV_TYPE_DEV, &FrameConfInfoOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 605, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-    
-}
-
- /******************************************************************************
- *     : MPA_RegisterPortIntfToDM
- *   : MPAע˿ϢӿDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013114
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterPortIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    DAL_PORT_SAS_OP_S SasOp;
-    OSAL_MemSet_s((OSP_U8 *)&SasOp, sizeof(SasOp), 0, sizeof(SasOp));
-
-    SasOp.GetPhyRate = MPAIntf_GetPortPhysRate;
-    SasOp.GetLinkRate = MPAIntf_GetPortLinkRate;
-    SasOp.GetPortStatus = MPAIntf_GetPortLinkStatus;
-    SasOp.GetPeerPortStatus = MPAIntf_GetPeerPortLinkStatus;
-    SasOp.SwitchPort = MPAIntf_SetPortSwitch;
-    SasOp.GetPortSwitch = MPAIntf_GetPortSwitch;
-    SasOp.GetWidth = MPAIntf_GetPortWidth;
-    SasOp.GetMaxWidth = MPAIntf_GetPortMaxWidth;
-    SasOp.GetUpOrDownType = MPAIntf_GetPortUpDownType;
-    SasOp.GetAttachedWwn = MPAIntf_GetAttachedWwn;
-    SasOp.GetErrorCode = MPAIntf_GetPortPhyErr;
-    SasOp.ClearErrorCode = MPAIntf_ClearAllPhyErr;
-    SasOp.GetPhySwitch = MPAIntf_GetPortPhySwitch;
-    SasOp.GetSfpSupport = MPAIntf_GetSfpSupport;
-    SasOp.GetAttachedPortMode = MPAIntf_GetAttPortInitOrExp;
-    SasOp.GetAttachedPhyId = MPAIntf_GetAttPortFirstPhyId;
-    SasOp.GetPhyId = MPAIntf_GetLocalPortFirstPhyId;
-    SasOp.GetWwn = MPAIntf_GetPortWwn;
-    /* BEGIN: Added by shipin, 2015-6-4 15:48:45, ????:AR-0000942937, ????:SES?????? */
-    SasOp.LoopBackTestStart = MPAIntf_PortLoopBackStart;
-    SasOp.LoopBackTestStop = MPAIntf_PortLoopBackStop;
-    SasOp.LoopBackTestCheck = MPAIntf_PortLoopBackCheck;
-    SasOp.LoopBackPeerStart = MPAIntf_PortLoopBackPeerStart;
-    SasOp.LoopBackPeerStop= MPAIntf_PortLoopBackPeerStop;
-    SasOp.LoopBackPeerCheck= MPAIntf_PortLoopBackPeerCheck;
-    /* END: Added by shipin, 2015-6-4 15:48:45 */
-    RetVal = DAL_RegisterPortSasOp(DRV_TYPE_DEV, &SasOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 606, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-    
-}
-
- /******************************************************************************
- *     : MPA_RegisterLedIntfToDM
- *   : עledDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2013118
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterLedIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_LED_OP_S LedOp;
-    OSAL_MemSet_s((OSP_U8 *)&LedOp, sizeof(LedOp), 0, sizeof(LedOp));
-
-    LedOp.Operate = MPAIntf_SetLedStatus;
-    LedOp.GetStatus = MPAIntf_GetLedStatus;
-
-
-    RetVal = DAL_RegisterLedOp(DRV_TYPE_DEV, &LedOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 607, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPA_RegisterMceValidIntfToDM
- *   : עMCEЧϢ麯DALģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131129
- *           : zhanwenbin 90003961
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterMceValidIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    DAL_DIMM_OP_S DimmOp;
-    OSAL_MemSet_s((OSP_U8 *)&DimmOp, sizeof(DimmOp), 0, sizeof(DimmOp));
-
-    DimmOp.GetDimmMceInfo = MPAIntf_GetDimmMceInfo;
-
-
-    RetVal = DAL_RegisterDimmOp(DRV_TYPE_DEV, &DimmOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 608, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-    
-}
-
- /******************************************************************************
- *     : MPA_RegisterEthConfInfoToDM
- *   : עģʽDMģ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131127
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterEthConfInfoToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_MANU_ETH_CONF_OP_S EthConfOp;
-    OSAL_MemSet_s((OSP_U8 *)&EthConfOp, sizeof(EthConfOp), 0, sizeof(EthConfOp));
-
-    EthConfOp.GetEthConfig = MPAIntf_GetBackBoardEthConfig;
-    EthConfOp.SetEthConfig = MPAIntf_SetBackBoardEthConfig;
-
-    
-    RetVal = DAL_RegisterEthConfOp(DRV_TYPE_DEV, &EthConfOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 609, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-}
-
-/******************************************************************************
-*     : MPA_RegisterSfpIntfToDM
-*   : עsasģϢdm
-*   : OSP_VOID  
-*   : 
-*   ֵ  : DRV_RETURN_OK - ɹ; ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2014327
-*           : jiangfanlu 00101148
-*    ޸   : ɺ
-*  2.       : 201597
-*           : daiyanjun 900039
-*    ޸   : DTS2015090708287
-******************************************************************************/
-OSP_S32 MPA_RegisterSfpIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_SFP_OP_S SfpOp;
-    OSAL_MemSet_s((OSP_U8 *)&SfpOp, sizeof(SfpOp), 0, sizeof(SfpOp));
-
-    SfpOp.GetName = NULL;
-    SfpOp.GetInfo = MPAIntf_GetSfpDetailInfo;
-    SfpOp.GetQsfpInfo = MPAIntf_GetQsfpInfo;
-    SfpOp.SetQsfpInfo = MPAIntf_SetQsfpInfo;
-    SfpOp.Operate = NULL;
-    SfpOp.GetMaxSpeed = NULL;
-    SfpOp.GetState = MPAIntf_GetSfpState;
-    SfpOp.GetPresent = MPAIntf_GetSfpPresent;
-    SfpOp.GetRawInfo = MPAIntf_GetSfpInfo;
-  /*added by hulinhui 00289393 DTS2015042901137ؽӿڿģ 20150506*/
-    SfpOp.SetPowerStatus = MPAIntf_SetIoCardSfpSleepStatus;
-  /*ended by hulinhui 00289393*/
-    
-    RetVal = DAL_RegisterSfpOp(DRV_TYPE_DEV, &SfpOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 611, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPA_RegiserChipIntfToDM
- *   : עchipоƬ(BBU/Դ)
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131211
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegiserChipIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_CHIP_OP_S ChipOp;
-    OSAL_MemSet_s((OSP_U8 *)&ChipOp, sizeof(ChipOp), 0, sizeof(ChipOp));
-
-    ChipOp.GetName = MPAIntf_GetChipName;
-    ChipOp.GetFwVer = MPAIntf_GetChipFwVer;
-    ChipOp.UpdatePrepare = MPAIntf_UpdataChipPrePare;
-    ChipOp.UpdateTransData = MPAIntf_UpdataChipTransData;
-    ChipOp.UpdateStart = MPAIntf_UpdataChipStart;
-    ChipOp.UpdateGetStatus = MPAIntf_GetChipUpdateStatus;
-    ChipOp.Reset = NULL;
-    ChipOp.GetLog = NULL;
-    ChipOp.SupportUpgrade = MPAIntf_GetChipSupportUpgrade;
-    /* BEGIN: Added by jiangfanlu 00101148, 2014/8/8  ⵥ:AR-0000787332, ޸ԭ:עúͲѯӿڿƬѡӿڵdmichip */
-    ChipOp.SetFwId = MPAIntf_SetIoCardImgCs;
-    ChipOp.GetFwId = MPAIntf_GetIoCardImgCs;
-    /* END:   Added by jiangfanlu 00101148, 2014/8/8 ⵥ:AR-0000787332 */
-
-    
-    RetVal = DAL_RegisterChipOp(DRV_TYPE_DEV, &ChipOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 612, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPA_RegisterEthSwitchToDM
- *   : עؽӿ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131225
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterEthSwitchToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_PORT_ETH_SWITCH_OP_S EthSwitchOp;
-    OSAL_MemSet_s((OSP_U8 *)&EthSwitchOp, sizeof(EthSwitchOp), 0, sizeof(EthSwitchOp));
-
-    EthSwitchOp.GetMac = MPAIntf_GetEthSwitchMac;
-    EthSwitchOp.SetMac = MPAIntf_SetEthSwitchMac;
-    EthSwitchOp.SwitchPort = MPAIntf_SetEthSwitchOnoff;
-    EthSwitchOp.GetPortSwitch = MPAIntf_GetPortSwitch;
-    EthSwitchOp.ResetPort = MPAIntf_ResetEthSwitchPort;
-    EthSwitchOp.GetPortStatus = MPAIntf_GetEthSwitchStatus;
-    EthSwitchOp.GetLinkRate = MPAIntf_GetEthSwitchSpeed;
-    EthSwitchOp.SetVlanSwitch = MPAIntf_SetVlanSwitch;
-  EthSwitchOp.GetVlanSwitch = MPAIntf_GetVlanSwitch;
-    
-    RetVal = DAL_RegisterPortEthSwitchOp(DRV_TYPE_DEV, &EthSwitchOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 613, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPA_RegisterEthSwitchC01ToDM
- *   : עc01ӿ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201438
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterEthSwitchC01ToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_ETH_SWITCH_OP_S EthSwitchOp;
-    OSAL_MemSet_s((OSP_U8 *)&EthSwitchOp, sizeof(EthSwitchOp), 0, sizeof(EthSwitchOp));
-
-    EthSwitchOp.GetMacValidity = MPAIntf_GetEthStaticMacValid;
-    EthSwitchOp.SetMac = MPAIntf_SetEthStaticMac;
-
-    
-    RetVal = DAL_RegisterEthSwitchOp(DRV_TYPE_DEV, &EthSwitchOp);
-    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 614, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPA_RegisterShakeIntfToDM
- *   : ע־dm
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131226
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterShakeIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_SHAKE_OP_S ShakeOp;
-    OSAL_MemSet_s((OSP_U8 *)&ShakeOp, sizeof(ShakeOp), 0, sizeof(ShakeOp));
-
-    ShakeOp.GetName = NULL;
-    ShakeOp.GetShakeRecord = MPAIntf_GetShakeSensorRecord;
-    ShakeOp.Op = NULL;
-
-    
-    RetVal = DAL_RegisterShakeOp(DRV_TYPE_DEV, &ShakeOp);    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 615, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPA_RegisterWifiIntfToDM
- *   : עwifidm
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2014120
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterWifiIntfToDM(OSP_VOID)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_WIFI_OP_S WifiOp; 
-    OSAL_MemSet_s((OSP_U8 *)&WifiOp, sizeof(WifiOp), 0, sizeof(WifiOp));
-
-    WifiOp.GetWifiEarPowerStatus = MPAIntf_GetEarPowerState;
-    WifiOp.SetUsbSwtich = MPAIntf_SetUsbHubChannel;
-
-    
-    RetVal = DAL_RegisterWifiOp(DRV_TYPE_DEV, &WifiOp);    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 616, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-
-}
-
- /******************************************************************************
- *     : MPA_RegisterOopsInfoToDM
- *   : עϵͳoopsϢ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201428
- *           : qintianyi 90005776
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_RegisterOopsInfoToDM(OSP_VOID)
-{
-#ifdef PANGEA_USER_MODE
-/*û̬mpa agentע*/
-    return RETURN_OK;
-#else
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_OOPS_INFO_OP_S OopsInfo;
-    OSAL_MemSet_s((OSP_U8 *)&OopsInfo, sizeof(OopsInfo), 0, sizeof(OopsInfo));
-
-    OopsInfo.GetOopsInfo = MPAIntf_GetOopsInfo;
-    OopsInfo.ClearOopsInfo = MPAIntf_ClearOopsInfo;
-
-    
-    RetVal = DAL_RegisterOopsInfoOp(DRV_TYPE_DEV, &OopsInfo);    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 617, "MPA registers interface function to dm failed(0x%x).", RetVal);
-    }
-
-    return RetVal;
-#endif
-}
- 
- 
-  /******************************************************************************
-  *     : MPA_RegisterIpConfigToDM
-  *   : עIPϢ
-  *   : OSP_VOID  
-  *   : 
-  *   ֵ  : OSP_S32
-  * ˵  : 
-  * 
-  * ޸ʷ    :
-  *  1.     : 201428
-  *         : shufan 204084
-  *    ޸   : ɺ
-  *
-  ******************************************************************************/
- OSP_S32 MPA_RegisterIpConfigToDM(OSP_VOID)
- {
-   OSP_S32 RetVal = DRV_RETURN_ERROR;
-   DAL_IP_CONF_OP_S IpConfigInfo; 
-     OSAL_MemSet_s((OSP_U8 *)&IpConfigInfo, sizeof(IpConfigInfo), 0, sizeof(IpConfigInfo));
- 
-   IpConfigInfo.GetIp = MPAIntf_GetMgmtIpInfo;
-   IpConfigInfo.SetIp = MPAIntf_SetMgmtIpInfo;
-   /* Begin: added by liuzhiqiang 00192096 for DTS2015082608808 @2015-9-6 */
-   IpConfigInfo.GetIpOwner = MPAIntf_GetMgmtIpOwner;
-     /* End: added by liuzhiqiang 00192096 for DTS2015082608808 @2015-9-6 */
-   
-   RetVal = DAL_RegisterIpConfOp(DRV_TYPE_DEV, &IpConfigInfo);    
-   if (DRV_RETURN_OK != RetVal)
-   {
-     DRV_MPA_TRACE(DRV_LOG_WARN, 618, "MPA registers interface function to dm failed(0x%x).", RetVal);
-   }
- 
-   return RetVal;
- 
- }
- /******************************************************************************
- *     : MPA_RegisterIntfToDM
- *   : MPADMģעӿ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_VOID
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131019
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_VOID MPA_RegisterIntfToDM(OSP_VOID)
-{
-    (OSP_VOID)MPA_RegisterEnclIntfToDM();
-    (OSP_VOID)MPA_RegisterFruIntfToDM();
-    (OSP_VOID)MPA_RegisterTemperatureIntfToDM();
-    (OSP_VOID)MPA_RegisterFruTemperatureIntfToDM();    
-    (OSP_VOID)MPA_RegisterVoltIntfToDM();
-    (OSP_VOID)MPA_RegisterFruVoltIntfToDM();
-    (OSP_VOID)MPA_RegisterFanIntfToDM();
-    (OSP_VOID)MPA_RegisterPowerIntfToDM();
-    (OSP_VOID)MPA_RegisterCpldIntfToDM();
-    (OSP_VOID)MPA_RegisterBbuIntfToDM();
-    (OSP_VOID)MPA_RegisterMgmtCpuIntfToDM();
-    (OSP_VOID)MPA_RegisterDiskIntfToDM();
-    (OSP_VOID)MPA_RegisterElabelIntfToDM();
-    (OSP_VOID)MPA_RegisterSaleElabelIntfToDM();    
-    (OSP_VOID)MPA_RegisterMacIntfToDM();
-    (OSP_VOID)MPA_RegisterSnIntfToDM();
-    (OSP_VOID)MPA_RegisterProLogoIntfToDM();
-    (OSP_VOID)MPA_RegisterVendorIntfToDM();
-    (OSP_VOID)MPA_RegisterBrandInfoToDM();
-    (OSP_VOID)MPA_RegisterEsnInfoToDM();
-    (OSP_VOID)MPA_RegisterLicenseInfoToDM();
-    (OSP_VOID)MPA_RegisterProLogoInfoToDM();
-    (OSP_VOID)MPA_RegisterEthConfInfoToDM();
-    (OSP_VOID)MPA_RegisterMceValidIntfToDM();
-    (OSP_VOID)MPA_RegisteAlarmInfoToDM();
-    (OSP_VOID)MPA_RegisteFruAllAlarmInfoToDM();
-    (OSP_VOID)MPA_RegisterFrameConfigInfoToDM();
-    (OSP_VOID)MPA_RegisterPortIntfToDM();
-    (OSP_VOID)MPA_RegisterLedIntfToDM();  
-    (OSP_VOID)MPA_RegisterFpgaIntfToDM();
-    (OSP_VOID)MPA_RegisterSfpIntfToDM();
-    (OSP_VOID)MPA_RegiserChipIntfToDM();
-    (OSP_VOID)MPA_RegisterEthSwitchToDM();
-    (OSP_VOID)MPA_RegisterEthSwitchC01ToDM();
-    (OSP_VOID)MPA_RegisterShakeIntfToDM();
-    (OSP_VOID)MPA_RegisterWifiIntfToDM();
-    (OSP_VOID)MPA_RegisterOopsInfoToDM();
-    (OSP_VOID)MPA_RegisterIpConfigToDM();
-  
- }
-
- /******************************************************************************
- *     : MPA_UnRegisterIntfToDM
- *   : עעᵽDMģĹܽӿ
- *   : OSP_VOID  
- *   : 
- *   ֵ  : OSP_VOID
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131024
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_VOID MPA_UnRegisterIntfToDM(OSP_VOID)
-{
-    DAL_UnregisterEnclOp(DRV_TYPE_DEV);
-    DAL_UnregisterFruOp(DRV_TYPE_DEV);
-    DAL_UnregisterTempOp(DRV_TYPE_DEV);
-    DAL_UnregisterVoltOp(DRV_TYPE_DEV);
-    DAL_UnregisterFanOp(DRV_TYPE_DEV);
-    DAL_UnregisterPsOp(DRV_TYPE_DEV);
-    DAL_UnregisterCpldOp(DRV_TYPE_DEV);
-    DAL_UnregisterBbuOp(DRV_TYPE_DEV);
-    DAL_UnegisterMgmtCpuOp(DRV_TYPE_DEV);
-    DAL_UnregisterDiskSasOp(DRV_TYPE_DEV);
-    DAL_UnregisterElabelOp(DRV_TYPE_DEV);
-    DAL_UnregisterSaleElabelOp(DRV_TYPE_DEV);
-    DAL_UnregisterMacOp(DRV_TYPE_DEV);
-    DAL_UnregisterSnOp(DRV_TYPE_DEV);
-    DAL_UnregisterPrologoOp(DRV_TYPE_DEV);
-    DAL_UnregisterVendorOp(DRV_TYPE_DEV);
-    DAL_UnregisterBrandOp(DRV_TYPE_DEV);
-    DAL_UnregisterEsnOp(DRV_TYPE_DEV);
-    DAL_UnregisterLicenseOp(DRV_TYPE_DEV);
-    DAL_UnregisterPromodelOp(DRV_TYPE_DEV);
-    DAL_UnregisterEthConfOp(DRV_TYPE_DEV);
-    DAL_UnregisterDimmOp(DRV_TYPE_DEV);
-    DAL_UnregisterAlarmElementOp(DRV_TYPE_DEV);
-    DAL_UnregisterConfPicker(DRV_TYPE_DEV);
-    DAL_UnregisterPortSasOp(DRV_TYPE_DEV);
-    DAL_UnregisterLedOp(DRV_TYPE_DEV);
-    DAL_UnregisterFpgaOp(DRV_TYPE_DEV);
-    DAL_UnregisterSfpOp(DRV_TYPE_DEV);
-    DAL_UnregisterChipOp(DRV_TYPE_DEV);
-    DAL_UnregisterPortEthSwitchOp(DRV_TYPE_DEV);
-    DAL_UnregisterEthSwitchOp(DRV_TYPE_DEV);
-    DAL_UnregisterShakeOp(DRV_TYPE_DEV);
-    DAL_UnregisterWifiOp(DRV_TYPE_DEV);
-#ifndef PANGEA_USER_MODE
-/*û̬mpa agentע*/
-    DAL_UnregisterOopsInfoOp(DRV_TYPE_DEV);
-#endif
-  DAL_UnregisterIpConfOp(DRV_TYPE_DEV);
-    DAL_UnregisterTempSetOp(DRV_TYPE_DEV);
-    DAL_UnregisterVoltSetOp(DRV_TYPE_DEV);
-    DAL_UnregisterAlarmSetOp(DRV_TYPE_DEV);
-}  
- 
- /******************************************************************************
- *     : MPA_GetDtfIntfParameter
- *   : MPAṩItestװӿڣװʽ
- *   : Operate       
- *             EnclosureWWN  WWN
- *             DataBuff      buffer
- *             BuffLen      buffer 
- *   : DataBuff      buffer
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20131217
- *           : 淫
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPA_GetDtfIntfParameter(DMI_ENCLOSURE_OPCODE Operate, OSP_U64 EnclosureWWN, OSP_U32 BoardSlot,
-                         DEVICE_ID_INFO_S *DataBuff, OSP_U32 BuffLen)
-{
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    DAL_MPA_ADDR_S  Address;
-    if (NULL == DataBuff)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 619, "MPA finds the pointer is null(0x%p).", DataBuff);
-        return DRV_RETURN_ERROR;
-    }
-
-    
-    (OSP_VOID)Operate;
-    (OSP_VOID)BuffLen;
-    
-    OSAL_MemSet_s((OSP_U8 *)&Address, sizeof(Address), 0, sizeof(Address));
-    
-    /* BEGIN: Modified by jiangfanlu 00101148, 2014-3-25 12:11:56, ⵥ:  , ޸ԭ: װӿδָֿ֧,DMIȡMPA_ADDRESS */
-    RetVal = DAL_GetEnclAddrInfo(EnclosureWWN, BoardSlot, &Address);    
-    if (DRV_RETURN_OK != RetVal)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 620, "MPA gets enclosure address info(0x%x).", RetVal);
-        return DRV_RETURN_ERROR;
-    }
-    *(DAL_MPA_ADDR_S *)DataBuff->EnclAddr = Address;
-
-    /*C01Ŀת䣬ǰһ£C01*/
-    DRV_MPA_TRACE(DRV_LOG_INFO, 621, "The frame model from other module is 0x%x.", Address.DevFrame);
-    if (Address.DevFrame > DRV_FRAMEMODEL_12GSAS_EXP_END)
-    {
-        /*תΪU64 DrivrId*/
-        DataBuff->DevId = (OSP_U8)DataBuff->UserId  
-            | (((OSP_U8)DataBuff->FruId) << MPA_SHIFT_BIT_8) 
-            | (OSP_U32)((OSP_U16)(0x1 << (OSP_U8)DataBuff->FruType) << (OSP_U8)MPA_SHIFT_BIT_16);
-    }
-    else
-    {
-        /*תΪU64 DrivrId*/
-        (OSP_VOID)MPA_GetDtfIntfDriverId(&Address, DataBuff);
-    }
-    
-    /* END: Modified by jiangfanlu 00101148, 2014-3-25 12:11:56 */
-    
-    DRV_MPA_TRACE(DRV_LOG_INFO, 622, "MPA receives data, fru type(0x%x), fru id(0x%x), device id (0x%llx), dev type(0x%x), user id(0x%x).",
-                   DataBuff->FruType, DataBuff->FruId, DataBuff->DevId, DataBuff->DevType, DataBuff->UserId);
-    
-    return DRV_RETURN_OK;
-}
-
- /******************************************************************************
- *     : MPAIntf_GetIsMainPowerDown
- *   : ѯǷµɹ
- *   : EnclAddr  ϲ·ĵַϢṹָΪmpa豸ϢָMPA_ADDR_S
- *             DriverId  ID ͡FRUIDDEVICE IDϢ
- *   : PowerStatus  ״̬ÿ1bitʾһ·1ʾµɹ0ʾɹ
- *   ֵ  : OSP_S32 DRV_RETURN_OK - ɹ;ʧ
- * ˵  : ˽ӿֻSASװµɹ1βѯ
- * 
- * ޸ʷ      :
- *  1.       : 20141219
- *           : yinhuaqiang
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetIsMainPowerDown(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *PowerStatus)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == PowerStatus))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 627, "MPA finds the pointer is null(0x%p, 0x%p)", EnclAddr, PowerStatus);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_SES_MAIN_POWER_STATUS;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)PowerStatus); 
-}
-
-/******************************************************************************
-*     : MPAIntf_SetFanStatus
-*   : ģķ״̬
-*   : EnclAddr    ϲ·ĵַϢmcutype,scsiַframetype
-*             DriverId    ID ͡FRUIDDEVICE IDϢ   
-*             Mode        ״̬
-*             Offset      תƫ
-*             OffsetDir   תƫƷ
-*   : 
-*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 201541
-*           : linrenchun 00295404
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetFanStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Mode, OSP_U8 Offset, OSP_U8 OffsetDir)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*Mode/Offset/OffsetDirtarget*/
-    OSP_U8 DataIn[3] = {0, 0, 0};
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 628, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 629, "MPAIntf_SetFanStatus, Mode(%d), Offset(%d), OffsetDir(%d).", Mode, Offset, OffsetDir);
-
-    MpaCmd.Cmd = DRV_CMD_FAN_STATUS_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DataIn);
-    MpaCmd.SdrType = SDRTYPT_V2R2C00_FOR_RW_FAN_STATUS;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    DataIn[0] = Mode;
-    DataIn[1] = Offset;
-    DataIn[2] = OffsetDir;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
-*     : MPAIntf_GetIntfBoardDelay
-*   : ӿڿλӳµ
-*   : *EnclAddr   ַ
-*             FruId       ӳµFruID
-*             CtrlId      ǰID
-*             *Status     ӳµ״̬
-*   : 
-*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015325
-*           : linrenchun 00295404
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetIntfBoardDelay(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 CtrlId, DMI_INTF_DELAY_STATUS_E *Status)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*FruId/CtrlIdtarget*/
-    OSP_U8 DataIn[6] = {0, 0, 0, 0, 0, 0};
-
-    if ((NULL == EnclAddr) || (NULL == Status))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 630, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_BOARD_DELAY;
-    MpaCmd.FruId = 0x4ff;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = SDRTYPT_RW_BOARD_DELAY;
-    MpaCmd.WtRd = MPA_READ;
-
-    DataIn[0] = 5;
-    DataIn[1] = (OSP_U8)(FruId & 0xff);
-    DataIn[2] = (OSP_U8)((FruId >> 8) & 0xff);
-    DataIn[3] = (OSP_U8)((FruId >> 16) & 0xff);
-    DataIn[4] = (OSP_U8)((FruId >> 24) & 0xff);
-    DataIn[5] = CtrlId;
-
-    return MPA_Intf((DAL_MPA_ADDR_S*)EnclAddr, &MpaCmd, (OSP_VOID*)DataIn, (OSP_VOID*)Status);
-}
-
-/******************************************************************************
-*     : MPAIntf_SetIntfBoardDelay
-*   : дӿڿλӳµ
-*   : *EnclAddr   ַ
-*             FruId       ӳµFruID
-*             CtrlId      ǰID
-*             Status      ӳµ״̬
-*   : 
-*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015325
-*           : linrenchun 00295404
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetIntfBoardDelay(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 CtrlId, DMI_INTF_DELAY_STATUS_E Status)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*FruId/CtrlId/Statustarget*/
-    OSP_U8 DataIn[6] = {0, 0, 0, 0, 0, 0};
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 631, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 632, "MPAIntf_SetIntfBoardDelay, FruId(0x%x), CtrlId(%d), Status(%d).", FruId, CtrlId, Status);
-
-    MpaCmd.Cmd = DRV_CMD_SET_BOARD_DELAY;
-    MpaCmd.FruId = 0x4ff;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DataIn);
-    MpaCmd.SdrType = SDRTYPT_RW_BOARD_DELAY;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    DataIn[0] = (OSP_U8)(FruId & 0xff);
-    DataIn[1] = (OSP_U8)((FruId >> 8) & 0xff);
-    DataIn[2] = (OSP_U8)((FruId >> 16) & 0xff);
-    DataIn[3] = (OSP_U8)((FruId >> 24) & 0xff);
-    DataIn[4] = CtrlId;
-    DataIn[5] = Status;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
-*     : MPAIntf_SetFrameDmaType
-*   : ÿDMA
-*   : *EnclAddr  ַ
-*             FruId      FRU
-*             DmaType    DMA
-*   : 
-*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015429
-*           : linrenchun 00295404
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_SetFrameDmaType(OSP_VOID *EnclAddr, OSP_U32 FruId, DRV_FRAME_DMA_TYPE_E DmaType)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_U32 Index = 0;
-    OSP_U32 mpaDMATypeForBmclen = 0;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 633, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    mpaDMATypeForBmclen = sizeof(g_MpaDMATypeForBmc) / sizeof(MPA_DMA_TYPE_S);
-    for (Index = 0; Index < mpaDMATypeForBmclen; Index++)
-    {
-        if (MpaAddr->DevFrame == g_MpaDMATypeForBmc[Index].FrameMode)
-        {
-            return g_MpaDMATypeForBmc[Index].RetValule;
-        }
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_FRAME_DMA_TYPE;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = SDRTYPT_FRAME_DMA_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&DmaType, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
-*     : MPAIntf_GetFrameDmaType
-*   : ѯDMA
-*   : *EnclAddr  ַ
-*             FruId      FRU
-*             *DmaType   DMA
-*   : 
-*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015429
-*           : linrenchun 00295404
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetFrameDmaType(OSP_VOID *EnclAddr, OSP_U32 FruId, DRV_FRAME_DMA_TYPE_E *DmaType)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_U32 Index = 0;
-    OSP_U32 mpaDMATypeForBmclen = 0;
-
-    if ((NULL == EnclAddr) || (NULL == DmaType))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 634, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, DmaType);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    mpaDMATypeForBmclen = sizeof(g_MpaDMATypeForBmc) / sizeof(MPA_DMA_TYPE_S);
-    for (Index = 0; Index < mpaDMATypeForBmclen; Index++)
-    {
-        if (MpaAddr->DevFrame == g_MpaDMATypeForBmc[Index].FrameMode)
-        {
-            return g_MpaDMATypeForBmc[Index].RetValule;
-        }
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_GET_FRAME_DMA_TYPE;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = SDRTYPT_FRAME_DMA_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)DmaType);
-}
- /******************************************************************************
- *     : MPAIntf_GetExpBoardType
- *   : ѯ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Type      оƬ
- *   : Type      оƬ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20151014
- *           : bianyanru 00188344
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetExpBoardType(OSP_VOID *EnclAddr, OSP_U64 DriverId, MPA_MGMT_BOARDTYPE_E *Type)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    
-    if ((NULL == EnclAddr) || (NULL == Type))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 635, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Type);
-        return RetVal;
-    }
-
-
-    MpaCmd.Cmd = DRV_CMD_GET_EXPBOARD_TYPE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(MPA_MGMT_BOARDTYPE_E);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Type);
-
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBackBoardRate
- *   : ѯ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Rate      
- *   : Rate      
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20151014
- *           : bianyanru 00188344
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBackBoardRate(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_PORT_SPEED_E *Rate)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Rate))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 636, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Rate);
-        return RetVal;
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_GET_BACKBOARD_RATE;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_PORT_SPEED_E);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Rate);
-}
-
-/******************************************************************************
- *     : MPAIntf_GetFramePowerType
- *   : ȡԴ
- *   : EnclAddr  
- *             FruId  
- *             type 1Ϊƽ棬2Ϊ˫ƽ
- *   : 
- *   ֵ  : OSP_S32 DRV_RETURN_OK - ɹ;ʧ
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20151027
- *           : yanjianqiang 00310577
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFramePowerType(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_POWERFRAME_TYPE_E *type)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == type))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 4012, "MPA finds the pointer is null(0x%p, 0x%p)", EnclAddr, type);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_FRAMEPOWER_TYPE;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_FRAMEPOWER_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (DMI_POWERFRAME_TYPE_E *)type);
-}
-
-/* Begin: added by liuzhiqiang 00192096 for DTS2015082608808 @2015-9-7 */
-/******************************************************************************
-*     : MPAIntf_GetMgmtIpOwner
-*   : ѯIPϢ
-*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
-*                     DriverId   ID ͡FRUIDDEVICE IDϢ   
-*                     IpOwner     IPϢ
-*   :Info     IPϢ
-
-       byte0   Ipv4Valid   1ʾѾùIP0ʾδùIP
-       byte1-16  Ipv4Addr  16ַֽIPַ
-       byte 17-32  Ipv4Mask  16ַֽ
-       byte 33-48  Ipv4Gateway 16ַֽ
-       byte 49 Ipv6Valid   1ʾѾùIP0ʾδùIP
-       byte7 50-113  Ipv6Addr  64ַֽIPַ
-       byte8 114-117   Ipv6MaskLen 4ֽڳ
-       byte 118-181  Ipv6Gateway 64ַֽ
-       
-*   ֵ  : OSP_S32
-* ˵  :   
-*
-* ޸ʷ      :
-*  1.       : 201597
-*           : liuzhiqiang 00192096
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_GetMgmtIpOwner(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *IpOwner)
-{
-    MPA_CMD_INFO_S MpaCmd;
-  OSP_U8 BmcDataIn[2] = {0, 0};
-  
-    if ((NULL == EnclAddr) || (NULL == IpOwner))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 2000, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, IpOwner);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_MGMT_IP_OWNER; 
-    MpaCmd.FruId = 0x4ff;  /* 4ffֻ */ 
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPT_GET_IP_OWNER;
-    MpaCmd.WtRd = MPA_READ;
-
-    BmcDataIn[0] = sizeof(OSP_U8);
-  BmcDataIn[1] = (OSP_U8)(DAL_FRU_ID(DriverId) & 0xff);
-  
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)IpOwner);
-}
-/* End: added by liuzhiqiang 00192096 for DTS2015082608808 @2015-9-7 */ 
-/*Add by yanajianqiang 00310577 for DTS2015091807980 on 2105.10.10 :ȥ8717DMIѯλͽӿ*/
-/******************************************************************************
- *     : MPAIntf_GetSubCardOnLine
- *   : ȡưfruλ
- *   : EnclAddr  
- *             FruId  
- *             Online      0-λ 1-λ
- *   : 
- *   ֵ  : OSP_S32 DRV_RETURN_OK - ɹ;ʧ
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20151010
- *           : yanjianqiang 00310577
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetSubCardState(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 *Online)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == Online))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 4012, "MPA finds the pointer is null(0x%p, 0x%p)", EnclAddr, Online);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_SUBCARD_STATE;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_SUBCARD_STATE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Online);
-}
-
-/******************************************************************************
- *     : MPAIntf_GetFruSubType
- *   : ȡfru(Ŀǰֲֻ֧ѯSAS)
- *   : EnclAddr  
- *             FruId  
- *             type      DMI_FRU_SUB_TYPE_E
- *   : 
- *   ֵ  : OSP_S32 DRV_RETURN_OK - ɹ;ʧ
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2017217
- *           : c00378798
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFruSubType(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U32* type)
-{
-    MPA_CMD_INFO_S MpaCmd = {0};
-
-    if ((NULL == EnclAddr) || (NULL == type))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 4012, "MPA finds the pointer is null(0x%p, 0x%p)", EnclAddr, type);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_FRU_SUBTYPE;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_FRUSUBTYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_U32 *)type);
-
-}
-
-/*Add by yanajianqiang 00310577 for DTS2015091807980 on 2105.10.10 :ȥ8717DMIѯλͽӿ*/
-/******************************************************************************
- *     : MPAIntf_GetSubCardOnLine
- *   : ȡưfru
- *   : EnclAddr  
- *             FruId  
- *             type      DMI_SUBCARD_TYPE_E
- *   : 
- *   ֵ  : OSP_S32 DRV_RETURN_OK - ɹ;ʧ
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20151010
- *           : yanjianqiang 00310577
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetSubCardType(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_SUBCARD_TYPE_E *type)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == type))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 4012, "MPA finds the pointer is null(0x%p, 0x%p)", EnclAddr, type);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_SUBCARD_TYPE;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_SUBCARD_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (DMI_SUBCARD_TYPE_E *)type);
-}
-
-/******************************************************************************
-*     : MPAIntf_NotifyCtrlReset
-*   : ÿλ
-*   : EnclAddr   
-*             FruId   
-*             *ResetInfo  
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 20151024
-*           : chenkeren 00221000
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_NotifyCtrlReset(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_CTRL_RESET_INFO_S *ResetInfo)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_U8 DataIn[3] = {0};
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 333, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 334, "MPA sets signal ctrl reset, srctrl(%d), dstctrl(%d), reset type(%d).", 
-                        ResetInfo->SrcCtrlId, ResetInfo->DstCtrlId, ResetInfo->ResetType);
-
-    /* V2R3C01汾ûй壬λԿҪͨ·FRU IDBMC */
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    if (DRV_FRAMEMODEL_PCIE_CTRL_2U_C1_BMC == MpaAddr->DevFrame)
-    {
-        MpaCmd.FruId = FruId;
-    }
-    else
-    {
-        MpaCmd.FruId = 0x4FF;
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_SET_CTRL_RESET;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8) + sizeof(OSP_U8) + sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPT_SET_CTRL_RESET;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    DataIn[0] = ResetInfo->SrcCtrlId;
-    DataIn[1] = ResetInfo->DstCtrlId;
-    DataIn[2] = ResetInfo->ResetType;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
-}
-/******************************************************************************
-*     : MPAIntf_PortLoopBackStart
-*   : ڻԿʼ
-*   : *EnclAddr  ַ
-*             DriverId   DriverId
-*             TestData   ʼ
-*   : 
-*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015521
-*           : linrenchun 00295404
-*    ޸   : AR-0000942937, ޸ԭ:SESֻ֧
-*
-******************************************************************************/
-OSP_S32 MPAIntf_PortLoopBackStart(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_LOOPBACK_CHECK_START_S TestData)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 627, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_PORT_LOOP_BACK_START;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_LOOPBACK_CHECK_START_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TestData, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
-*     : MPAIntf_PortLoopBackStop
-*   : ڻֹͣ
-*   : *EnclAddr  ַ
-*             DriverId   DriverId
-*             TestData   ֹͣ
-*   : 
-*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015521
-*           : linrenchun 00295404
-*    ޸   : AR-0000942937, ޸ԭ:SESֻ֧
-*
-******************************************************************************/
-OSP_S32 MPAIntf_PortLoopBackStop(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_VOID *TestData)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*2Σͺdevice id*/
-    OSP_U8 DataIn[2] = {0xff, 0xff};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    (OSP_VOID)TestData;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 628, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_PORT_LOOP_BACK_STOP;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*Ӳdevice IdΪδ*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
-*     : MPAIntf_PortLoopBackCheck
-*   : ڻԲѯ
-*   : *EnclAddr  ַ
-*             DriverId   DriverId
-*             TestData   ѯ
-*   : 
-*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015521
-*           : linrenchun 00295404
-*    ޸   : AR-0000942937, ޸ԭ:SESֻ֧
-*
-******************************************************************************/
-OSP_S32 MPAIntf_PortLoopBackCheck(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_LOOPBACK_CHECK_RESULT_S *TestData)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == TestData))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 629, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, TestData);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_PORT_LOOP_BACK_CHECK;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_LOOPBACK_CHECK_RESULT_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TestData);
-}
-
-/******************************************************************************
-*     : MPAIntf_PortLoopBackPeerStart
-*   : ⻷Կʼ
-*   : *EnclAddr  ַ
-*             DriverId   DriverId
-*             TestData   ʼ
-*   : 
-*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015521
-*           : linrenchun 00295404
-*    ޸   : AR-0000942937, ޸ԭ:SESֻ֧
-*
-******************************************************************************/
-OSP_S32 MPAIntf_PortLoopBackPeerStart(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_LOOPBACK_CHECK_START_S TestData)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 630, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_PORT_LOOP_BACK_PEER_START;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_LOOPBACK_CHECK_START_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TestData, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
-*     : MPAIntf_PortLoopBackPeerStop
-*   : ⻷ֹͣ
-*   : *EnclAddr  ַ
-*             DriverId   DriverId
-*             TestData   ֹͣ
-*   : 
-*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015521
-*           : linrenchun 00295404
-*    ޸   : AR-0000942937, ޸ԭ:SESֻ֧
-*
-******************************************************************************/
-OSP_S32 MPAIntf_PortLoopBackPeerStop(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_VOID *TestData)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*2Σͺdevice id*/
-    OSP_U8 DataIn[2] = {0xff, 0xff};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    (OSP_VOID)TestData;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 631, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_PORT_LOOP_BACK_PEER_STOP;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*Ӳdevice IdΪδ*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
-*     : MPAIntf_PortLoopBackPeerCheck
-*   : ⻷Բѯ
-*   : *EnclAddr  ַ
-*             DriverId   DriverId
-*             TestData   ѯ
-*   : 
-*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015521
-*           : linrenchun 00295404
-*    ޸   : AR-0000942937, ޸ԭ:SESֻ֧
-*
-******************************************************************************/
-OSP_S32 MPAIntf_PortLoopBackPeerCheck(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_LOOPBACK_CHECK_RESULT_S *TestData)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if ((NULL == EnclAddr) || (NULL == TestData))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 632, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, TestData);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_PORT_LOOP_BACK_PEER_CHECK;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_LOOPBACK_CHECK_RESULT_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TestData);
-}
-
-/******************************************************************************
-*     : MPAIntf_DiskLoopBackStart
-*   : Ӳ̻زԿʼ
-*   : *EnclAddr  ַ
-*             DriverId   DriverId
-*             TestData   ʼ
-*   : 
-*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015521
-*           : linrenchun 00295404
-*    ޸   : AR-0000942937, ޸ԭ:SESֻ֧
-*
-******************************************************************************/
-OSP_S32 MPAIntf_DiskLoopBackStart(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_LOOPBACK_CHECK_START_S TestData)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 633, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_DISK_LOOP_BACK_START;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(DRV_LOOPBACK_CHECK_START_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TestData, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
-*     : MPAIntf_DiskLoopBackStop
-*   : Ӳ̻زֹͣ
-*   : *EnclAddr  ַ
-*             DriverId   DriverId
-*             TestData   ֹͣ
-*   : 
-*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015521
-*           : linrenchun 00295404
-*    ޸   : AR-0000942937, ޸ԭ:SESֻ֧
-*
-******************************************************************************/
-OSP_S32 MPAIntf_DiskLoopBackStop(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_VOID *TestData)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*2Σͺdevice id*/
-    OSP_U8 DataIn[2] = {0xff, 0xff};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    (OSP_VOID)TestData;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 634, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_DISK_LOOP_BACK_STOP;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = 0;
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    /*Ӳdevice IdΪδ*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
-*     : MPAIntf_DiskLoopBackCheck
-*   : Ӳ̻زԲѯ
-*   : *EnclAddr  ַ
-*             DriverId   DriverId
-*             TestData   ѯ
-*   : 
-*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 2015521
-*           : linrenchun 00295404
-*    ޸   : AR-0000942937, ޸ԭ:SESֻ֧
-*
-******************************************************************************/
-OSP_S32 MPAIntf_DiskLoopBackCheck(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_LOOPBACK_CHECK_RESULT_S *TestData)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*2Σͺdevice id*/
-    OSP_U8 DataIn[2] = {0xff, 0xff};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-
-    if ((NULL == EnclAddr) || (NULL == TestData))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 635, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, TestData);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_DISK_LOOP_BACK_CHECK;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DRV_LOOPBACK_CHECK_RESULT_S);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*Ӳdevice IdΪδ*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)TestData);
-}
-/******************************************************************************
- *     : MPAIntf_ResetOtherBoard
- *   : λԶ˹CPU
- *   : EnclAddr  
- *             FruId     
- *             PeerSlot  
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2016123
- *           : shipin
- *    ޸   : ⵥ:ALMCR201601134871051, ޸ԭ:άӸλԿؼģ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_ResetOtherBoard(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 PeerSlot)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_U8 DataIn = 0;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 333, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 334, "MPA Set peer board reset, id(0x%llx), peerslot(%d), devframe(0x%x), scsi(%d:%d).", 
-                  DriverId, 
-                  PeerSlot,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiHostId,
-                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiScsiId);
-
-    MpaCmd.Cmd = DRV_CMD_SET_OTHER_BOARD_RESET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    DataIn = PeerSlot;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&DataIn, (OSP_VOID *)NULL);    
-}
-/* BEGIN: Added by gaoyalong 00325181, 2016/4/1  ⵥ:DTS2016032509661, ޸ԭ:ӽӿڻȡ̵֧ */
-/******************************************************************************
- *     : MPAIntf_GetSupportDiskMaxSpeed
- *   : ѯ̵֧
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Rate      ̵֧
- *   : Rate      ̵֧
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2016331
- *           : gaoyalong 00325181
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetSupportDiskMaxSpeed(OSP_VOID *EnclAddr,  DRV_PORT_SPEED_E *Rate)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Rate))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 636, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Rate);
-        return RetVal;
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_GET_SUPPORT_DISKMAXSPEED;
-    MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_ENCL, 0);
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DRV_PORT_SPEED_E);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Rate);
-    if (DRV_RETURN_OK != RetVal)
-    {
-        *Rate = DRV_SPEED_6G;
-        RetVal = DRV_RETURN_OK;
-        DRV_MPA_TRACE(DRV_LOG_WARN, 636, "Get support disk max speed failed, return default rate(6G).");
-    }
-
-    return RetVal;
-}
-/* END: Added by gaoyalong 00325181, 2016/4/1  ⵥ:DTS2016032509661 */
-
-/******************************************************************************
- *     : MPAIntf_GetDiskMaxRate
- *   : ѯ̵֧
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *             Rate      ̵֧
- *   : Rate      ̵֧
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20160613
- *           : c00217527
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetDiskMaxRate(OSP_VOID* EnclAddr, OSP_U32 FruId, DRV_PORT_SPEED_E* Rate)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == Rate))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 636, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Rate);
-        return RetVal;
-    }
-    
-    MpaCmd.Cmd = DRV_CMD_GET_SUPPORT_DISKMAXSPEED;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DRV_PORT_SPEED_E);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Rate);
-
-    return RetVal;
-}
-
-/* Begin: add by c00217527 2016.04.19 ⵥ: AR_0000247774-001-005 reason: ֵ֧װʱ־־û */
-/******************************************************************************
- *     : MPAIntf_SetUnderBoardMaxRateFlag
- *   : õװʱʾ
- *   : EnclAddr                   豸ַϢ
- *             DriverId                   豸idϢ
- *             MaxRate                    max rate־
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20160424
- *           : c00217527
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetUnderBoardMaxRateFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 MaxRate)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 96, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 97, "MPA set max rate flag, id(0x%llx), value(%d).", DriverId, MaxRate);
-    MpaCmd.Cmd = DRV_CMD_SET_SUPPORT_DISKMAXSPEED;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&MaxRate, (OSP_VOID *)NULL);    
-}
-/* End: add by c00217527 */
-
- /******************************************************************************
- *     : MPAIntf_KboxTest
- *   : ϻͨ
- *   : EnclAddr  
- *             FruId     
- *             State    
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20161220
- *           : yanjianqiang 00310577
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_KboxTest(OSP_VOID* EnclAddr, OSP_U32 FruId, OSP_U8* State)
-{
-    MPA_CMD_INFO_S MpaCmd = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-    OSP_U8 DataOut[BYTE_01] = {0x55};/*д0x55BMC0xAA*/
-    OSP_U8 DataClr[BYTE_01] = {0xFF};/**/
-    OSP_U8 *UseAddr = NULL;
-    OSP_U8 *KboxAddr = NULL;
-    static OSP_U8 LocalState = MGTCPU_STATE_NORMAL;
-
-    if ((NULL == EnclAddr) || (NULL == State))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 550, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
-        return DRV_RETURN_ERROR;
-    }
-
-    KboxAddr = KboxAddrNew;
-    if (NULL == KboxAddr)
-    {
-        DRV_MPA_LOG_TRACE_LIMIT(DRV_LOG_WARN, 884, MPA_LEV1, 60 * HZ, "Kbox Test addr is null.");
-        *State = MGTCPU_STATE_ABNORMAL; /*ַΪΪ쳣*/
-        return DRV_RETURN_OK;
-    }
-    UseAddr = MPA_PCIE_KBOX_GET_OFFSET(KboxAddr, BMC_KBOX_OFFSET_TEST);
-
-    /*д0x55BMC0xAAдkbox֮ǰ0xFF*/
-    OSAL_MemCpy_s(UseAddr, BYTE_01, DataClr, BYTE_01);
-    OSAL_MemCpy_s(UseAddr, BYTE_01, DataOut, BYTE_01);
-
-    MpaCmd.Cmd = DRV_CMD_KBOX_TEST;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_KBOX_TEST;
-    MpaCmd.WtRd = MPA_READ;
-
-    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);
-    if(DRV_RETURN_OK == RetVal)
-    {
-        *State = (0xAA == *State) ? MGTCPU_STATE_NORMAL : MGTCPU_STATE_ABNORMAL;
-        LocalState = *State;
-    }
-    else
-    {
-        DRV_MPA_LOG_TRACE_LIMIT(DRV_LOG_WARN, 885, MPA_LEV1, 60 * HZ, "Kbox Test MPA/IPMI error, so as default.");
-        *State = LocalState; /*ֻ֧IPMIɹֵΪֵжĬOK߷һ*/
-    }
-
-    return DRV_RETURN_OK;
-}
-
-/******************************************************************************
-*     : MPAIntf_KboxNull
-*   : ϻͨ -- ģӳʧ
-*   : EnclAddr  
-*             FruId     
-*             State    
-*   : 
-*   ֵ  : OSP_S32
-* ˵  : 
-* 
-* ޸ʷ      :
-*  1.       : 20161220
-*           : yanjianqiang 00310577
-*    ޸   : ɺ
-*
-******************************************************************************/
-OSP_S32 MPAIntf_KboxNull(OSP_VOID* EnclAddr, OSP_U32 FruId, OSP_U8 Flag)
-{
-    (OSP_VOID) FruId;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 555, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    /*FlagΪ0,ÿ,FlagΪ1,·*/
-    if(0 == Flag)
-    {
-        if(NULL != KboxAddrNew)
-        {
-            MPA_PcieKboxFree(KboxAddrNew);
-            KboxAddrNew = NULL;
-        }
-    }
-    else
-    {
-        if(NULL == KboxAddrNew)
-        {
-            KboxAddrNew = MPA_PcieKboxMalloc(BMC_KBOX_ADDR_NEW, BMC_KBOX_SIZE_UPDATE_PKG);
-        }
-    }
-
-    return DRV_RETURN_OK;
-}
-/******************************************************************************
- *     : MPAIntf_SetBMCSensorRoutinePeriod
- *   :  BMC
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId        ID ͡FRUIDDEVICE IDϢ   
- *             RoutinePeriod   BMC
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20160719
- *           : Ѧϼ00354852
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetBMCSensorRoutinePeriod(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 RoutinePeriod)
-{
-    MPA_CMD_INFO_S MpaCmd;
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 627, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    DRV_MPA_TRACE(DRV_LOG_INFO, 628, "MPA sets bmc sensor routine period, id(0x%llx), value(%d).", DriverId, RoutinePeriod);
-    
-    MpaCmd.Cmd = DRV_CMD_BMCSENSOR_ROUTINEPERIOD_SET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = SDRTYPE_SETBMCROUTINEPERIOD;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)(&RoutinePeriod), (OSP_VOID *)NULL);
-}
-
- /******************************************************************************
- *     : MPAIntf_GetBMCSensorRoutinePeriod
- *   : ѯBMC
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   ID ͡FRUIDDEVICE IDϢ   
- *                  ڣλ:
- *   :      ڣλ:
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20160719
- *           : xuebingxia 00354852
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetBMCSensorRoutinePeriod(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U16* Period)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Period))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 385, "MPA finds the pointer is null.");
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_BMCSENSOR_ROUTINEPERIOD_GET;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-    MpaCmd.BufLen = sizeof(OSP_U16);
-    MpaCmd.SdrType = SDRTYPE_GETBMCROUTINEPERIOD;
-    MpaCmd.WtRd = MPA_READ;
- 
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Period);       
-}
-
- /******************************************************************************
- *     : MPAIntf_GetDiskStatusInfo
- *   : ѯӲĿ״̬Ϣ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             DriverId   Ӳ̵ID   
- *   : StatusInfo ӲĿ״̬Ϣ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 20160815
- *           : xuebingxia 00354852
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetDiskStatusInfo(OSP_VOID* EnclAddr, OSP_U64 DriverId, DRV_DISK_GET_STATUS_INFO_S* StatusInfo)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*2Σͺdevice id*/
-    OSP_U8 DataIn[2] = {0xFF, 0xFF};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    DRV_DISK_GET_STATUS_INFO_S *Value = NULL;
-    
-    if ((NULL == EnclAddr) || (NULL == StatusInfo))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 298, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, StatusInfo);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_DISKSTATUSINFO;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DRV_DISK_GET_STATUS_INFO_S);
-    MpaCmd.SdrType = SDRTYPE_GETDISKSTATUSINFO;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*Ӳdevice IdΪδ*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-
-    Value = StatusInfo;
-        
-    /*DataInΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Value);      
-}
-
-/******************************************************************************
- *         : MPAIntf_GetCtrlBoardPowerCost
- *   : ȡưԴ(ֻpurley°֧)
- *   : EnclAddr
- *                             FruId
- *   : PowerCost     ư幦
- *   ֵ      : OSP_S32 DRV_RETURN_OK - ɹ;ʧ
- * ˵  : ĵλMHz
- * 
- * ޸ʷ      :
- *  1.              : 2017316
- *                   : j00352645
- *    ޸   : ɺ
- ******************************************************************************/
-OSP_S32 MPAIntf_GetCtrlBoardPowerCost(OSP_VOID* EnclAddr, OSP_U32 FruId, OSP_U32* PowerCost)
-{
-    MPA_CMD_INFO_S MpaCmd = {0};
-
-    if ((NULL == EnclAddr) || (NULL == PowerCost))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 4012, "MPA finds the pointer is null(0x%p, 0x%p)", EnclAddr, PowerCost);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_CTRL_BOARD_PW_COST;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_CTRLBOARD_OUTPUT;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_U32 *)PowerCost);
-}
-
-/******************************************************************************
- *         : MPAIntf_GetFanMaxLevelFlag
- *   : ȡȫٱ־
- *   : EnclAddr
- *                             FruId
- *   : Output     ư幦
- *   ֵ      : OSP_S32 DRV_RETURN_OK - ɹ;ʧ
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.              : 2017316
- *                   : j00352645
- *    ޸   : ɺ
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFanMaxLevelFlag(OSP_VOID* EnclAddr, OSP_U32 FruId, OSP_U8* Flag)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    
-    if ((NULL == EnclAddr) || (NULL == Flag))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 600, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Flag);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_FAN_MAX_LEVEL_FLAG;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_FAN_MAXFLAG;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Flag); 
-}
-
-/* BEGIN: Added by yangping/00382561, 2017-4-22  ⵥ:AR.SR.SF-0000274408.005.002, ޸ԭ:󿨶Խ12Gܿ,ʶڶ˿ģʽ(˿/˫˿) */
-/******************************************************************************
- *     : MPAIntf_GetFramePortMode
- *   : ѯ˿ģʽ,ֵ˿(0x1)˫˿(0x2)
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId        FRU
- *             PortMode    ˿ģʽ
- *   : PortMode    ˿ģʽ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2017-4-24
- *           : yangping/00382561
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFramePortMode(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U32* PortMode)
-{
-    MPA_CMD_INFO_S MpaCmd = {0};
-
-    if ((NULL == EnclAddr) || (NULL == PortMode))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 213, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PortMode);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_FRAME_VISIBLE_MAP;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PortMode);    
-}
-
- /******************************************************************************
- *     : MPAIntf_SetFramePortMode
- *   : ÿ˿ģʽ,ֵ˿(0x1)˫˿(0x2)
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId        FRU
- *             PortMode    ˿ģʽ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2017-4-24
- *           : yangping/00382561
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetFramePortMode(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U32 PortMode)
-{
-    MPA_CMD_INFO_S MpaCmd = {0};
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 214, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_FRAME_VISIBLE_MAP;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&PortMode, (OSP_VOID *)NULL);   
-}
-/* END: Added by yangping/00382561, 2017-4-22 */
-
-/******************************************************************************
- *     : MPAIntf_GetCtrlBoardOnlineState
- *   :  ѯưλ״̬Ϣ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId     FRU
- *   : CtrlBoardOnlineState  ưλ״̬Ϣ
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2017823
- *           : l00404270
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetCtrlBoardOnlineState(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 *CtrlBoardOnlineState)
-{
-    MPA_CMD_INFO_S MpaCmd = {0};
-    OSP_S32 RetVal = DRV_RETURN_ERROR;
-
-    if ((NULL == EnclAddr) || (NULL == CtrlBoardOnlineState))
-    {
-        /*־ֵΪʱӡ*/
-        DRV_MPA_TRACE(DRV_LOG_WARN, 532, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, CtrlBoardOnlineState);
-        return RetVal;
-    }
-    MpaCmd.Cmd = DRV_CMD_GET_CTRL_ONLINE_STATE;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_GET_CTRL_ONLINE_STATE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)CtrlBoardOnlineState);
-}
-
- /* BEGIN: Added by gaoyalong/00325181, 2017-5-15  ⵥ:DTS2017051501761 , ޸ԭ:ӲѯӲλӿ */
- /******************************************************************************
- *     : MPAIntf_GetDiskPresent
- *   : ѯӲ̵λ״̬
- *   : EnclAddr  
- *             DriverId  
- *             Present   
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 201759
- *           : gaoyalong 00325181
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetDiskPresent(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_DISK_PRESENT_STATUS_E *Present)
-{
-    MPA_CMD_INFO_S MpaCmd;
-    /*2Σͺdevice id*/
-    OSP_U8 DataIn[2] = {0xFF, 0xFF};
-    DAL_MPA_ADDR_S *MpaAddr = NULL;
-    OSP_U8 *Value = NULL;
-    
-    if ((NULL == EnclAddr) || (NULL == Present))
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 298, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Present);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_DISK_PRESENT;
-    MpaCmd.FruId = DAL_FRU_ID(DriverId);
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U8);/*sesֻͨ1byte*/
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    /*Ӳdevice IdΪδ*/
-    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
-    DataIn[0] = MpaAddr->DevFrame;
-    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
-
-    Value = (OSP_U8 *)Present;
-        
-    /*DataInΪδȥȡж*/
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Value);
-}
-/* END: Added by gaoyalong/00325181, 2017-5-15 */
-
-/******************************************************************************
- *     : MPAIntf_GetFrameSlotPwrCtrlCfg
- *   : ȡ򱳰ǷӲ̲λԴƵϢ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId        FRU
- *             CfgInfo    Ӳ̲λԴƵϢ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2017-09-06
- *           : chenzhi 00219029
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetFrameSlotPwrCtrlCfg(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U32 *CfgInfo)
-{
-    MPA_CMD_INFO_S MpaCmd = {0};
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 214, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_FRAME_SLOT_PWR_CTRL_CFG;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(OSP_U32);
-    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)CfgInfo);   
-}
-
-/******************************************************************************
- *     : MPAIntf_NotifySysInfo
- *   : ֪ͨϵͳϢСϵͳ
- *   : EnclAddr  ϲ·ĵַϢ, mcutype,scsiַ, frametype
- *             FruId        FRU
- *             SysInfo    ϵͳϢ
- *             Length     ϵͳϢ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2017-11-22
- *           : chenzhi 00219029
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_NotifySysInfo(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_VOID *SysInfo, OSP_U32 Length)
-{
-    MPA_CMD_INFO_S MpaCmd = {0};
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 214, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_NOTIFY_SYS_INFO;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = (OSP_U16)Length;
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_SYS_INFO;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)SysInfo, (OSP_VOID *)NULL);  
-}
-
-/******************************************************************************
- *     : MPAIntf_GetLightBoardPresentStatus
- *   : ȡưλ״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId     FRU
- *             Status    ưλ״̬
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2017-12-15
- *           : lulingyun 00380217
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetLightBoardPresentStatus(OSP_VOID *EnclAddr, OSP_U32 FruId, 
-    DMI_OBJ_PRESENT_STATUS_E *Status)
-{
-    MPA_CMD_INFO_S MpaCmd = {0};
-
-    if (NULL == EnclAddr || NULL == Status)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 214, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_LIGHT_BOARD_PRESENT;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DMI_OBJ_PRESENT_STATUS_E);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_GET_LIGHT_BOARD_PRESENT;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status);
-}
-
-/******************************************************************************
- *     : MPAIntf_SetLightBoardLightStatus
- *   : õư״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId      FRU
- *             Status    ư״̬
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2017-09-06
- *           : lulingyun 00380217
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_SetLightBoardLightStatus(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_LIGHT_STATE_E Status)
-{
-    MPA_CMD_INFO_S MpaCmd = {0};
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 214, "MPA finds the pointer is null(0x%p).", EnclAddr);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_SET_LIGHT_BOARD_STATUS;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DMI_LIGHT_STATE_E);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_LIGHT_BOARD_STATUS;
-    MpaCmd.WtRd = MPA_WRITE;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Status, (OSP_VOID *)NULL);
-}
-
-/******************************************************************************
- *     : MPAIntf_GetLightBoardLightStatus
- *   : ȡư״̬
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId      FRU
- *             Status    ư״̬
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2017-12-15
- *           : lulingyun 00380217
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_GetLightBoardLightStatus(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_LIGHT_STATE_E *Status)
-{
-    MPA_CMD_INFO_S MpaCmd = {0};
-
-    if (NULL == EnclAddr)
-    {
-        DRV_MPA_TRACE(DRV_LOG_WARN, 214, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
-        return DRV_RETURN_ERROR;
-    }
-
-    MpaCmd.Cmd = DRV_CMD_GET_LIGHT_BOARD_STATUS;
-    MpaCmd.FruId = FruId;
-    MpaCmd.DeviceId = 0;
-    MpaCmd.BufLen = sizeof(DMI_LIGHT_STATE_E);
-    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_LIGHT_BOARD_STATUS;
-    MpaCmd.WtRd = MPA_READ;
-
-    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status);
-}
-
-/******************************************************************************
- *     : MPAIntf_NotifyCpuAffinity
- *   : ·CPU׺ԼϢ
- *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
- *             FruId      FRU
- *             Conf       CPU׺ԼϢ
- *   : 
- *   ֵ  : OSP_S32
- * ˵  : 
- * 
- * ޸ʷ      :
- *  1.       : 2017-12-15
- *           : lulingyun 00380217
- *    ޸   : ɺ
- *
- ******************************************************************************/
-OSP_S32 MPAIntf_NotifyCpuAffinity(OSP_VOID *EnclAddr, OSP_U32 FruId, DRV_CPU_AFFINITY_INFO_S *Conf)
-{
-    REFERNCE_VAR(EnclAddr);
-    REFERNCE_VAR(FruId);
-
-    /*CPU׺ԼϢ¼MPAȫϢУڰ*/
-    OSAL_MemSet_s(&(g_MpaCpuAffinity.ConfInfo), sizeof(DRV_CPU_AFFINITY_INFO_S),
-        0, sizeof(DRV_CPU_AFFINITY_INFO_S));
-
-    g_MpaCpuAffinity.ConfInfo = *Conf;
-    g_MpaCpuAffinity.ConfValid = B_TRUE;
-
-    return RETURN_OK;
-}
-
-
-/** Ϊ֧װֱӵõĽӿ*/
-EXPORT_SYMBOL(MPAIntf_GetFanMode);
-EXPORT_SYMBOL(MPAIntf_SetFanMode);
-EXPORT_SYMBOL(MPAIntf_GetFanLevel);
-EXPORT_SYMBOL(MPAIntf_SetFanLevel);
-EXPORT_SYMBOL(MPAIntf_GetFanSpeed);
-EXPORT_SYMBOL(MPAIntf_GetFanState);
-EXPORT_SYMBOL(MPAIntf_SetFanOnOff);
-
-EXPORT_SYMBOL(MPAIntf_GetEnclosureFruType);
-EXPORT_SYMBOL(MPAIntf_GetDeviceEnclosureFruType);
-/* BEGIN: Added by ywx291300, 2017/8/10  ⵥ:DTS2017081402571, ޸ԭ:ͬŻṩʲѯӿ*/
-EXPORT_SYMBOL(MPAIntf_GetExpBoardSpeed);
-/* END: Added by by ywx291300, 2017/8/10 */
-
-EXPORT_SYMBOL(MPAIntf_GetMgmtVersion);
-EXPORT_SYMBOL(MPAIntf_GetCpldVersion);
-EXPORT_SYMBOL(MPAIntf_GetFpgaVersion);
-EXPORT_SYMBOL(MPAIntf_GetHardWareVersion);
-EXPORT_SYMBOL(MPAIntf_GetDeviceHardWareVersion);
-EXPORT_SYMBOL(MPAIntf_GetBbuSoftwareVersion);
-EXPORT_SYMBOL(MPAIntf_GetBbuHardSoftCompileVersion);
-EXPORT_SYMBOL(MPAIntf_GetPresentState);
-EXPORT_SYMBOL(MPAIntf_GetAlarmName);
-EXPORT_SYMBOL(MPAIntf_GetAlarmType);
-EXPORT_SYMBOL(MPAIntf_GetAlarmInfo);
-
-EXPORT_SYMBOL(MPAIntf_GetTemperature);
-EXPORT_SYMBOL(MPAIntf_GetTemperatureLimit);
-EXPORT_SYMBOL(MPAIntf_SetTemperatureLimit);
-
-EXPORT_SYMBOL(MPAIntf_GetVoltage);
-EXPORT_SYMBOL(MPAIntf_GetVoltageThreshold);
-
-EXPORT_SYMBOL(MPAIntf_GetMgmtMasterSlave);
-EXPORT_SYMBOL(MPAIntf_SetSmmMasterSlave);
-EXPORT_SYMBOL(MPAIntf_GetIntfCardPowerStatus);
-EXPORT_SYMBOL(MPAIntf_GetIoCardPowerConsume);
-EXPORT_SYMBOL(MPAIntf_SetIoCardSfpSleepStatus);
-EXPORT_SYMBOL(MPAIntf_GetIoCardSfpSleepStatus);
-
-EXPORT_SYMBOL(MPAIntf_SetFramePowerOnOff);
-EXPORT_SYMBOL(MPAIntf_SetLedStatus);
-
-EXPORT_SYMBOL(MPAIntf_GetPowerVendor);
-EXPORT_SYMBOL(MPAIntf_GetPowerSn);
-EXPORT_SYMBOL(MPAIntf_GetPowerAcDcType);
-EXPORT_SYMBOL(MPAIntf_GetPowerAlertInfo);
-EXPORT_SYMBOL(MPAIntf_GetPowerState);
-EXPORT_SYMBOL(MPAIntf_GetPowerOutput);
-EXPORT_SYMBOL(MPAIntf_GetPowerOutputVoltage);
-EXPORT_SYMBOL(MPAIntf_GetPowerOutputCurrent);
-
-EXPORT_SYMBOL(MPAIntf_GetBbuTemperature);
-EXPORT_SYMBOL(MPAIntf_GetBbuOutPutVolt);
-EXPORT_SYMBOL(MPAIntf_GetBbuFaultBit);
-EXPORT_SYMBOL(MPAIntf_SetBbuFaultBit);
-EXPORT_SYMBOL(MPAIntf_GetBbuRemainingCapacity);
-EXPORT_SYMBOL(MPAIntf_GetBbuDisChargeCurrent);
-EXPORT_SYMBOL(MPAIntf_SetBbuOnlineTest);
-EXPORT_SYMBOL(MPAIntf_GetBbuDischargeCount);
-EXPORT_SYMBOL(MPAIntf_GetBbuWorkState);
-
-/* ȡϻ*/
-EXPORT_SYMBOL(MPAIntf_WriteKBox);
-EXPORT_SYMBOL(MPAIntf_ReadKBox);
-
-/* BMC*/
-EXPORT_SYMBOL(MPAIntf_UpdateMgmtPrepare);
-EXPORT_SYMBOL(MPAIntf_UpdateMgmtSendFile);
-EXPORT_SYMBOL(MPAIntf_UpdateMgmtStart);
-EXPORT_SYMBOL(MPAIntf_GetMgmtUpgradeState);
-
-/* CPLD*/
-EXPORT_SYMBOL(MPAIntf_UpdateCpldPrepare);
-EXPORT_SYMBOL(MPAIntf_UpdateCpldSendFile);
-EXPORT_SYMBOL(MPAIntf_UpdateCpldStart);
-EXPORT_SYMBOL(MPAIntf_GetCpldUpgradeState);
-
-/* BBU*/
-EXPORT_SYMBOL(MPAIntf_UpdateBbuPrepare);
-EXPORT_SYMBOL(MPAIntf_UpdateBbuSendFile);
-EXPORT_SYMBOL(MPAIntf_UpdateBbuStart);
-EXPORT_SYMBOL(MPAIntf_GetBbuUpgradeState);
-
-/*Դ*/
-EXPORT_SYMBOL(MPAIntf_SetPowerFruOnOff);
-EXPORT_SYMBOL(MPAIntf_SetPowerFruOnOffSingle);
-EXPORT_SYMBOL(MPAIntf_GetPowerPsOKState);
-EXPORT_SYMBOL(MPAIntf_GetPowerPsAlertState);
-
-/*USB*/
-EXPORT_SYMBOL(MPAIntf_SetUsbHubChannel);
-EXPORT_SYMBOL(MPAIntf_SetUsbHubReset);
-
-
-/*ʱ*/
-EXPORT_SYMBOL(MPAIntf_SetTime);
-
-/*Itestתýӿ*/
-EXPORT_SYMBOL(MPA_GetDtfIntfParameter);
-
-/*洢*/
-EXPORT_SYMBOL(MPAIntf_GetStorageDeviceTestResult);
-EXPORT_SYMBOL(MPAIntf_SetStorageDeviceTest);
-
-/*ѯڹ*/
-EXPORT_SYMBOL(MPAIntf_GetUartSwitch);
-
-/*ѯѹ״̬*/
-EXPORT_SYMBOL(MPAIntf_GetVoltageState);
-
-/*ùоƬλ*/
-EXPORT_SYMBOL(MPAIntf_SetMgmtReset);
-
-/*ѯоƬswitchĴ*/
-EXPORT_SYMBOL(MPAIntf_GetSmmGeHeartBeatResult);
-EXPORT_SYMBOL(MPAIntf_GetSmmCtrlHeartBeatResult);
-
-/*ѯECCϢ*/
-EXPORT_SYMBOL(MPAIntf_GetBmcEccInfo);
-
-/*ѯRTCʱ*/
-EXPORT_SYMBOL(MPAIntf_GetRtcTime);
-
-/*RTCʱ*/
-EXPORT_SYMBOL(MPAIntf_SetRtcTime);
-
-/*ȡҶϢ*/
-EXPORT_SYMBOL(MPAIntf_GetEarInfo);
-/*ȡװҶϢ*/
-EXPORT_SYMBOL(MPAIntf_GetDftEarInfo);
-EXPORT_SYMBOL(MPAIntf_SetDftEarInfo);
-/*ȡװӿڿϢ*/
-EXPORT_SYMBOL(MPAIntf_GetDftIocardInfo);
-EXPORT_SYMBOL(MPAIntf_SetDftIocardInfo);
-/*RTCʱ*/
-EXPORT_SYMBOL(MPAIntf_GetBbuWorkHour);
-
-EXPORT_SYMBOL(MPAIntf_GetBbuLastDischargeTime);
-
-EXPORT_SYMBOL(MPAIntf_GetBbuLastDischargeParameter);
-
-EXPORT_SYMBOL(MPAIntf_GetBbuCellVoltage);
-
-EXPORT_SYMBOL(MPAIntf_GetBbuChargeCurrent);
-
-EXPORT_SYMBOL(MPAIntf_GetBbuVendorName);
-
-EXPORT_SYMBOL(MPAIntf_GetBbuChargeFlag);
-
-EXPORT_SYMBOL(MPAIntf_GetBbuGpioInfo);
-
-EXPORT_SYMBOL(MPAIntf_GetBbuLife);
-EXPORT_SYMBOL(MPAIntf_SetBbuLife);
-EXPORT_SYMBOL(MPAIntf_GetBbuPreLife);
-EXPORT_SYMBOL(MPAIntf_SetBbuPreLife);
-EXPORT_SYMBOL(MPAIntf_GetBbuCapacityAlarm);
-EXPORT_SYMBOL(MPAIntf_SetBbuCapacityAlarm);
-EXPORT_SYMBOL(MPAIntf_ClearTdmErrCode);
-EXPORT_SYMBOL(MPAIntf_GetTdmErrCode);
-EXPORT_SYMBOL(MPAIntf_GetBbuCapacityPreAlarm);
-EXPORT_SYMBOL(MPAIntf_SetBbuCapacityPreAlarm);
-EXPORT_SYMBOL(MPAIntf_SetUsbSwitchEnable);
-EXPORT_SYMBOL(MPAIntf_SetEarPowerEnable);
-EXPORT_SYMBOL(MPAIntf_GetEarButtonState);
-EXPORT_SYMBOL(MPAIntf_ClearEarButtonState);
-EXPORT_SYMBOL(MPAIntf_GetEarUsbHubState);
-EXPORT_SYMBOL(MPAIntf_SetBoardWdtSignal);
-EXPORT_SYMBOL(MPAIntf_GetSmmSwitchRegister);
-EXPORT_SYMBOL(MPAIntf_SetUartSwitch);
-EXPORT_SYMBOL(MPAIntf_SetUartLoopTest);
-EXPORT_SYMBOL(MPAIntf_GetMgmtCpuName);
-EXPORT_SYMBOL(MPAIntf_GetFanName);
-EXPORT_SYMBOL(MPAIntf_GetPowerName);
-EXPORT_SYMBOL(MPAIntf_GetBbuName);
-EXPORT_SYMBOL(MPAIntf_GetIocardName);
-EXPORT_SYMBOL(MPAIntf_GetIocardSlotId);
-EXPORT_SYMBOL(MPAIntf_GetTemperatureName);
-EXPORT_SYMBOL(MPAIntf_GetTemperatureSubtype);
-EXPORT_SYMBOL(MPAIntf_GetTemperatureState);
-EXPORT_SYMBOL(MPAIntf_GetVoltageName);
-EXPORT_SYMBOL(MPAIntf_SetBbuStopDischarge);
-EXPORT_SYMBOL(MPAIntf_SetBbuGpioInfo);
-EXPORT_SYMBOL(MPAIntf_SetBbuTemperature);
-EXPORT_SYMBOL(MPAIntf_SetBbuWorkHour);
-EXPORT_SYMBOL(MPAIntf_GetBackBoardModel);
-EXPORT_SYMBOL(MPAIntf_SetBackBoardModel);
-EXPORT_SYMBOL(MPAIntf_GetBackBoardBrand);
-EXPORT_SYMBOL(MPAIntf_SetBackBoardBrand);
-EXPORT_SYMBOL(MPAIntf_GetBackBoardVendor);
-EXPORT_SYMBOL(MPAIntf_SetBackBoardVendor);
-EXPORT_SYMBOL(MPAIntf_GetBackBoardOemVendor);
-EXPORT_SYMBOL(MPAIntf_SetBackBoardOemVendor);
-EXPORT_SYMBOL(MPAIntf_GetElectronicLabel);
-EXPORT_SYMBOL(MPAIntf_GetEepromElectronicLabel);
-EXPORT_SYMBOL(MPAIntf_SetElectronicLabel);
-EXPORT_SYMBOL(MPAIntf_SetChipRunMode);
-EXPORT_SYMBOL(MPAIntf_GetChipRunMode);
-EXPORT_SYMBOL(MPAIntf_GetBackBoardOemModel);
-EXPORT_SYMBOL(MPAIntf_SetBackBoardOemModel);
-EXPORT_SYMBOL(MPAIntf_GetVoltageSubtype);
-EXPORT_SYMBOL(MPAIntf_GetEthSwitchMac);
-EXPORT_SYMBOL(MPAIntf_SetEthSwitchMac);
-EXPORT_SYMBOL(MPAIntf_GetUsbInfo);
-EXPORT_SYMBOL(MPAIntf_GetBbuState);
-EXPORT_SYMBOL(MPAIntf_GetBbuPreLifeAlarm);
-EXPORT_SYMBOL(MPAIntf_GetCbuESR);
-EXPORT_SYMBOL(MPAIntf_SetCbuVolt);
-EXPORT_SYMBOL(MPAIntf_GetAdjustVoltFlag);
-EXPORT_SYMBOL(MPAIntf_GetBackBoardRate);
-EXPORT_SYMBOL(MPAIntf_GetExpBoardType);
-EXPORT_SYMBOL(MPAIntf_GetBackBoardMac);
-EXPORT_SYMBOL(MPAIntf_SetBackBoardMac);
-EXPORT_SYMBOL(MPAIntf_GetPCIE8796Version);
-EXPORT_SYMBOL(MPAIntf_GetSATA72463Version);
-EXPORT_SYMBOL(MPAIntf_GetPCIE8717Version);
-EXPORT_SYMBOL(MPAIntf_GetDmaRetimerVersion);
-EXPORT_SYMBOL(MPAIntf_UpdateConfigChipPrepare);
-EXPORT_SYMBOL(MPAIntf_UpdateConfigChipSendFile);
-EXPORT_SYMBOL(MPAIntf_UpdateConfigChipStart);
-EXPORT_SYMBOL(MPAIntf_GetFruAlarm);
-EXPORT_SYMBOL(MPAIntf_SetPowerAlarmSignal);
-EXPORT_SYMBOL(MPAIntf_GetPowerInterruptSignal);
-EXPORT_SYMBOL(MPAIntf_SetPowerInterruptSignal);
-EXPORT_SYMBOL(MPAIntf_SetWatchDogTime);
-EXPORT_SYMBOL(MPAIntf_GetBmcResetReason);
-EXPORT_SYMBOL(MPAIntf_GetPowerTemperature);
-EXPORT_SYMBOL(MPAIntf_SetOsResetCount);
-EXPORT_SYMBOL(MPAIntf_GetUsbHubChannel);
-EXPORT_SYMBOL(MPAIntf_GetBoardSlotId);
-EXPORT_SYMBOL(MPAIntf_GetTDMBusRegister);
-EXPORT_SYMBOL(MPAIntf_GetBbuManuDate);
-EXPORT_SYMBOL(MPAIntf_SetSmmSwitchRegister);
-EXPORT_SYMBOL(MPAIntf_GetPowerSingalBackboardType);
-EXPORT_SYMBOL(MPAIntf_GetPowerInput);
-EXPORT_SYMBOL(MPAIntf_SetTemperature);
-EXPORT_SYMBOL(MPAIntf_GetChipFwVer);
-EXPORT_SYMBOL(MPAIntf_UpdataChipPrePare);
-EXPORT_SYMBOL(MPAIntf_UpdataChipTransData);
-EXPORT_SYMBOL(MPAIntf_UpdataChipStart);
-EXPORT_SYMBOL(MPAIntf_GetChipUpdateStatus);
-EXPORT_SYMBOL(MPAIntf_SetRMIITest);
-EXPORT_SYMBOL(MPAIntf_GetI2cStatus);
-EXPORT_SYMBOL(MPAIntf_ClearAllPhyErr);
-EXPORT_SYMBOL(MPAIntf_SetBackBoardSN);
-EXPORT_SYMBOL(MPAIntf_GetBackBoardSN);
-EXPORT_SYMBOL(MPAIntf_GetEnclosureFruList);
-EXPORT_SYMBOL(MPAIntf_GetPortPhyErr);
-EXPORT_SYMBOL(MPAIntf_GetTime);
-EXPORT_SYMBOL(MPAIntf_GetFramePowerState);
-EXPORT_SYMBOL(MPAIntf_SetIsoPara);
-EXPORT_SYMBOL(MPAIntf_SetDiskPowerStatus);
-EXPORT_SYMBOL(MPAIntf_SetDiskSwitchStatus);
-EXPORT_SYMBOL(MPAIntf_GetPowerProductName);
-EXPORT_SYMBOL(MPAIntf_SetMgmtDegreeChange);
-EXPORT_SYMBOL(MPAIntf_GetBuckleBoardHardWareVersion);
-EXPORT_SYMBOL(MPAIntf_GetBuckleBoardPowerState);
-EXPORT_SYMBOL(MPAIntf_GetBuckleBoardPresent);
-EXPORT_SYMBOL(MPAIntf_GetBuckleBoardType);
-EXPORT_SYMBOL(MPAIntf_GetShakeSensorInfo);
-EXPORT_SYMBOL(MPAIntf_SetDiskLedStatus);
-EXPORT_SYMBOL(MPAIntf_GetIsMainPowerDown);
-EXPORT_SYMBOL(MPAIntf_GetPortLinkStatus);
-EXPORT_SYMBOL(MPAIntf_GetPortLinkRate);
-EXPORT_SYMBOL(MPAIntf_ExpBitSteamTest);
-EXPORT_SYMBOL(MPAIntf_ExpLoopTestModeSet);
-EXPORT_SYMBOL(MPAIntf_ExpLoopTestModeGet);
-EXPORT_SYMBOL(MPAIntf_SetLinkLedStatus);
-EXPORT_SYMBOL(MPAIntf_GetBbuRemainCapacityMah);
-EXPORT_SYMBOL(MPAIntf_GetPeerPresentState);
-EXPORT_SYMBOL(MPAIntf_GetPower5vPgState);
-EXPORT_SYMBOL(MPAIntf_SetPower5vPgState);
-EXPORT_SYMBOL(MPAIntf_GetCpldBitValue);
-EXPORT_SYMBOL(MPAIntf_SetCpldBitValue);
-EXPORT_SYMBOL(MPAIntf_GetSfpPresent);
-EXPORT_SYMBOL(MPAIntf_GetIntfBoardDelay);
-EXPORT_SYMBOL(MPAIntf_SetIntfBoardDelay);
-EXPORT_SYMBOL(MPAIntf_GetFramePortMode);
-EXPORT_SYMBOL(MPAIntf_SetFramePortMode);
-EXPORT_SYMBOL(MPAIntf_GetFrameSlotPwrCtrlCfg);
-EXPORT_SYMBOL(MPAIntf_NotifySysInfo);
-
+/******************************************************************************
+
+                  Ȩ (C), 2013-2013, Ϊ޹˾
+
+ ******************************************************************************
+       : mpa_adapter_app.c
+       : 
+         : qintianyi 90005776
+     : 2013116
+  ޸   :
+     : mpaӿں
+  б   :
+              MPAIntf_GetAttachedWwn
+              MPAIntf_GetBackBoardBrand
+              MPAIntf_GetBackboardESN
+              MPAIntf_GetBackBoardJbodFlag
+              MPAIntf_GetBackBoardLicense
+              MPAIntf_GetBackBoardLogo
+              MPAIntf_GetBackBoardMac
+              MPAIntf_GetBackBoardModel
+              MPAIntf_GetBackBoardNebs
+              MPAIntf_GetBackBoardSN
+              MPAIntf_GetBackBoardVendor
+              MPAIntf_GetBiosSwitchFlag
+              MPAIntf_GetBoardSlotId
+              MPAIntf_GetChipRunMode
+              MPAIntf_GetCpldVersion
+              MPAIntf_GetElectronicLabel
+              MPAIntf_GetEnclosureFruList
+              MPAIntf_GetEnclosureFruType
+              MPAIntf_GetDeviceEnclosureFruType
+              MPAIntf_GetFrameMode
+              MPAIntf_GetFrameNumber
+              MPAIntf_GetFramePowerState
+              MPAIntf_GetHardWareVersion
+              MPAIntf_GetDeviceHardWareVersion
+              MPAIntf_GetIntfCardType
+              MPAIntf_GetLedStatus
+              MPAIntf_GetMgmtVersion
+              MPAIntf_GetPortLinkRate
+              MPAIntf_GetPortLinkStatus
+              MPAIntf_GetPortPhyErr
+              MPAIntf_GetPortPhysRate
+              MPAIntf_GetPortUpDownType
+              MPAIntf_GetPortWidth
+              MPAIntf_GetPowerButtonControlMod
+              MPAIntf_GetPresentState
+              MPAIntf_GetAlarmName
+              MPAIntf_GetTemperature
+              MPAIntf_GetTemperatureLimit
+              MPAIntf_GetTemperatureName
+              MPAIntf_GetTemperatureState
+              MPAIntf_GetTemperatureSubtype
+              MPAIntf_GetVoltage
+              MPAIntf_GetVoltageThreshold
+              MPAIntf_GetWatchDogEnableFlag
+              MPAIntf_SetBackBoardBrand
+              MPAIntf_SetBackboardESN
+              MPAIntf_SetBackBoardJbodFlag
+              MPAIntf_SetBackBoardLicense
+              MPAIntf_SetBackBoardLogo
+              MPAIntf_SetBackBoardMac
+              MPAIntf_SetBackBoardModel
+              MPAIntf_SetBackBoardNebs
+              MPAIntf_SetBackBoardSN
+              MPAIntf_SetBackBoardVendor
+              MPAIntf_SetBiosSwitchFlag
+              MPAIntf_SetChipRunMode
+              MPAIntf_SetElectronicLabel
+              MPAIntf_SetFrameNumber
+              MPAIntf_SetFramePowerOnOff
+              MPAIntf_SetLedStatus
+              MPAIntf_SetPortSwitch
+              MPAIntf_SetPowerButtonControlMod
+              MPAIntf_SetTemperature
+              MPAIntf_SetTemperatureLimit
+              MPAIntf_SetVoltageThreshold
+              MPAIntf_SetWatchDogEnableFlag
+              MPAIntf_UpdateCpldPrepare
+              MPAIntf_UpdateCpldSendFile
+              MPAIntf_UpdateCpldStart
+              MPAIntf_UpdateMgmtPrepare
+              MPAIntf_UpdateMgmtSendFile
+              MPAIntf_UpdateMgmtStart
+              MPA_RegisteAlarmInfoToDM
+              MPA_RegisterBbuIntfToDM
+              MPA_RegisterBrandInfoToDM
+              MPA_RegisterCpldIntfToDM
+              MPA_RegisterDiskIntfToDM
+              MPA_RegisterElabelIntfToDM
+              MPA_RegisterEnclIntfToDM
+              MPA_RegisterEsnInfoToDM
+              MPA_RegisterFanIntfToDM
+              MPA_RegisterFrameConfigInfoToDM
+              MPA_RegisterFruIntfToDM
+              MPA_RegisterIntfToDM
+              MPA_RegisterLicenseInfoToDM
+              MPA_RegisterMacIntfToDM
+              MPA_RegisterMgmtCpuIntfToDM
+              MPA_RegisterPowerIntfToDM
+              MPA_RegisterProLogoInfoToDM
+              MPA_RegisterProLogoIntfToDM
+              MPA_RegisterSnIntfToDM
+              MPA_RegisterTemperatureIntfToDM
+              MPA_RegisterVendorIntfToDM
+              MPA_RegisterVoltIntfToDM
+              MPA_UnRegisterIntfToDM
+  ޸ʷ   :
+  1.       : 2013116
+           : qintianyi 90005776
+    ޸   : ļ
+
+******************************************************************************/
+
+#include "includes.h"
+#include "mpa_main.h"
+#include "../include/mpa_adapter_app.h"
+#include "mpa_adapter_routecore.h"
+#include "mpa_adapter_targettable.h"
+#include "mpa_ipmi.h"
+#include "mpa_v2_bmc_intf.h"
+#include "mpa_drv_dev_intf.h"
+#include "../include/mpa_pcie.h"
+
+
+/*----------------------------------------------*
+ * ⲿ˵                                 *
+ *----------------------------------------------*/
+
+/*----------------------------------------------*
+ * ⲿԭ˵                             *
+ *----------------------------------------------*/
+
+/*----------------------------------------------*
+ * ڲԭ˵                             *
+ *----------------------------------------------*/
+
+/*----------------------------------------------*
+ * ȫֱ                                     *
+ *----------------------------------------------*/
+FW_UPGRADE_FAIL_REC_S g_SimUpdateFail = {0};
+/*ΪĳЩӲͲ֧DMA͵úͲѯ*/
+static MPA_DMA_TYPE_S g_MpaDMATypeForBmc[] = 
+{
+    {DRV_FRAMEMODEL_PCIE_CTRL_2U_C1_BMC, RETURN_INVALID},
+};
+
+extern OSP_U8 *KboxAddrNew;
+
+extern MPA_CPU_AFFINITY_INFO_S g_MpaCpuAffinity;
+/*----------------------------------------------*
+ * ģ鼶                                   *
+ *----------------------------------------------*/
+
+/*----------------------------------------------*
+ *                                      *
+ *----------------------------------------------*/
+
+/*----------------------------------------------*
+ * 궨                                       *
+ *----------------------------------------------*/
+
+ /******************************************************************************
+ *     : MPA_CheckSimUpdateFailFlag
+ *   : жģ̼ʧģʽǷЧ
+ *   : *EnclAddrϲ·ĵַϢ
+                DriverId豸idϢ
+                FwTypeģʧܵĹ̼
+ *   : 
+ *   ֵ  : OSP_U32 32BIT澯
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2016616
+ *           : Ǯѵ
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_CheckSimUpdateFailFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 FwType)
+{
+    OSP_S32 Ret = DRV_RETURN_OK;
+    
+    if(0 == g_SimUpdateFail.DebugEn)
+    {
+        return DRV_RETURN_OK;
+    }
+
+    if((g_SimUpdateFail.FrameType == ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame)
+       &&(g_SimUpdateFail.FruId == DAL_FRU_ID(DriverId))
+       &&(g_SimUpdateFail.DeviceId == (OSP_U8)DAL_ELEMENT_NO(DriverId))
+       &&(g_SimUpdateFail.FwType == FwType))
+    {
+        if ((DRV_FRAMEMODEL_1710BMC_END > ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame)
+        && (DRV_FRAMEMODEL_12GSAS_EXP_END < ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame))
+        {
+            Ret = DRV_RETURN_ERROR;
+        }
+        else if((g_SimUpdateFail.HostId == ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiHostId)
+           &&(g_SimUpdateFail.ScsiId == ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiScsiId))
+        {
+            Ret = DRV_RETURN_ERROR;
+        }
+    }
+
+    if(DRV_RETURN_ERROR == Ret)
+    {
+        DRV_MPA_TRACE(DRV_LOG_INFO, 125, "MPA simulate update fail(%d),id(0x%llx),devframe(0x%x),scsiid:%d %d,fruid:0x%lx,deviceid:%d,fwtype:%d.",
+                  g_SimUpdateFail.DebugEn,
+                  DriverId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, 
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiHostId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiScsiId,
+                  (OSP_U32)DAL_FRU_ID(DriverId),
+                  (OSP_U8)DAL_ELEMENT_NO(DriverId),
+                  g_SimUpdateFail.FwType);
+    }
+    
+    return Ret;
+}
+
+ /******************************************************************************
+ *     : MPA_GetV1Power32BitFaultBit
+ *   : V1Դ8 bit澯תΪһ֮U32澯
+ *   : FaultbitU8  8BIT澯
+ *   : 
+ *   ֵ  : OSP_U32 32BIT澯
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201417
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_U32 MPA_GetV1Power32BitFaultBit(OSP_U8 FaultbitU8)
+{
+    MPA_POWER_FAULT_U8 PowerFaultU8;
+    MPA_POWER_FAULT_U32 PowerFaultU32;
+    
+    OSAL_MemSet_s((OSP_U8 *)&PowerFaultU32, sizeof(PowerFaultU32), 0, sizeof(PowerFaultU32));
+    
+    PowerFaultU8.FaultU8 = FaultbitU8;
+    PowerFaultU32.BIT.PowerTempHigh = PowerFaultU8.BIT.PowerTempHigh;
+    PowerFaultU32.BIT.Power12VVolHigh = PowerFaultU8.BIT.PowerOutputVolHigh;
+    PowerFaultU32.BIT.Power12VCurHigh = PowerFaultU8.BIT.PowerOutputCurHigh;
+    PowerFaultU32.BIT.PowerInputLost = PowerFaultU8.BIT.PowerInputLost;
+    PowerFaultU32.BIT.PowerInputVolLow = PowerFaultU8.BIT.PowerInputHighLow;
+    PowerFaultU32.BIT.PowerFanAlarm = PowerFaultU8.BIT.PowerFanAlarm;
+    
+    return PowerFaultU32.FaultU32;
+}
+
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetTemperature
+ *   : ȡ¶
+ *   : EnclAddr  豸ַϢ
+ *             DriverId        豸idϢ
+ *             Temperature      ¶ֵ
+ *   : Temperature      ¶ֵ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131010
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetTemperature(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S16 *Temperature)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Temperature))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 0, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Temperature);
+        return DRV_RETURN_ERROR;
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_TEMP_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_S16);
+    MpaCmd.SdrType = SENSOR_TEMP;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Temperature);
+    
+}
+
+OSP_VOID MPAIntf_CtrlEnclFanStatusPro(OSP_VOID *EnclAddr, OSP_U64 DriverId);
+ /******************************************************************************
+ *     : MPAIntf_GetFruAllTemperature
+ *   : ȡFruۺ¶
+ *   :   EnclAddr  豸ַϢ
+ *                               DriverId        豸idϢ
+ *                               Temperature      ¶ֵ
+                                  Length 
+ *   : Temperature      ¶ֵ
+ *   ֵ  :     OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014418
+ *           : shufan 204084
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFruAllTemperature(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S16 *Temperature, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 BmcDataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    DAL_SYS_POWER_CONTROL_E FramePowerState = DAL_SYS_POWER_CONTROL_BUTT;
+    DAL_FAN_STAT_E FanState = FAN_STAT_BUTT;
+
+    if ((NULL == EnclAddr) || (NULL == Temperature))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 1, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Temperature);
+        return DRV_RETURN_ERROR;
+    }
+    
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    MpaCmd.Cmd = DRV_CMD_FRU_TEMP_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = (OSP_U16)Length;
+    MpaCmd.SdrType = SENSOR_TEMP;
+    MpaCmd.WtRd = MPA_READ;
+    if ((DAL_FRU_LOGIC_TYPE(DriverId) == DAL_FRU_LOGIC_TYPE_EXPBOARD) 
+        && ((MpaAddr->DevFrame == DRV_FRAMEMODEL_12GSAS_EXP_2U25_12GLINK)
+        ||  (MpaAddr->DevFrame == DRV_FRAMEMODEL_12GSAS_EXP_4U24_12GLINK)
+        ||  (MpaAddr->DevFrame == DRV_FRAMEMODEL_12GSAS_EXP_2U25)
+        ||  (MpaAddr->DevFrame == DRV_FRAMEMODEL_12GSAS_EXP_4U24)))
+    {     
+        (void)MPAIntf_GetFanState(EnclAddr, ((OSP_U64)0x6000 << FRU_ID_OFFSET), &FanState);
+        if(FanState == FAN_SLEEP)
+        {
+            (void)MPAIntf_GetFramePowerState(EnclAddr, 0x800000, (OSP_U8 *)&FramePowerState);
+            if(FramePowerState == DAL_SYS_UP)
+			{
+                (void)MPAIntf_SetFanOnOff(EnclAddr, 0x6000, 1);
+            }
+        }
+    }
+    MPAIntf_CtrlEnclFanStatusPro(EnclAddr, DriverId);
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        BmcDataIn[0] = sizeof(OSP_U8);
+        BmcDataIn[1] = (OSP_U8)(Length / sizeof(OSP_U16));
+        
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Temperature);
+    }
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Temperature);
+}
+OSP_S32 MPAIntf_SetTemperature(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S16 Value)
+{
+    MPA_CMD_INFO_S MpaCmd;
+  /*ݳΪ1ֽڵĿ/رձ־ + 2ֽ¶*/
+    OSP_U8 TempratureData[3] = {0, 0, 0};
+    DAL_MPA_ADDR_S * MpaAddr = NULL;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 2, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+    
+    DRV_MPA_TRACE_LIMIT(DRV_LOG_INFO, 3, 1, 20 * HZ, "MPA sets temperature, id(0x%llx), value(%u), devframe(0x%x).", 
+                        DriverId, Value, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+    
+    MpaCmd.Cmd = DRV_CMD_TEMP_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);    
+    MpaCmd.SdrType = SENSOR_TEMP;
+    MpaCmd.WtRd = MPA_WRITE;
+    
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;    
+    if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame)
+    {
+        MpaCmd.BufLen = sizeof(TempratureData);    
+        
+        TempratureData[0] = 1;      /*BMCĵһΪģ*/
+        TempratureData[1] = (OSP_U8)(Value & 0xFF);         /*¶ֵֽ*/
+        TempratureData[2] = (OSP_U8)(((OSP_U16)Value >> 8) & 0xFF); /*¶ֵֽ*/
+    }
+    else
+    {
+        MpaCmd.BufLen = sizeof(OSP_U8);
+        TempratureData[0] = (OSP_U8)(Value & 0xFF);
+    }   
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)TempratureData, (OSP_VOID *)NULL);
+    
+}
+
+
+ 
+ /******************************************************************************
+  *     : MPAIntf_SetFruSingleTemperature
+  *   : FRUۺ¶
+  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+                  *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+                                SubId ¶ȵID
+                  *             Value ¶ֵ     
+  *   : 
+  *   ֵ  : OSP_S32
+  * ˵  : 
+  * 
+  * ޸ʷ      :
+  *  1.       : 2014418
+  *           : 淫
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+ OSP_S32 MPAIntf_SetFruSingleTemperature(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SubId, OSP_S16 Value)
+ {
+     MPA_CMD_INFO_S MpaCmd;
+     /*ݳΪ1ֽڵĿ/رձ־ + 2ֽ¶*/
+     OSP_U8 TempratureData[3] = {0, 0, 0};
+     DAL_MPA_ADDR_S * MpaAddr = NULL;
+ 
+     if (NULL == EnclAddr)
+     {
+         DRV_MPA_TRACE(DRV_LOG_WARN, 4, "MPA finds the pointer is null(0x%p).", EnclAddr);
+         return DRV_RETURN_ERROR;
+     }
+     
+     DRV_MPA_TRACE_LIMIT(DRV_LOG_INFO, 5, 1, 20 * HZ, "MPA sets temperature, id(0x%llx), value(%u), devframe(0x%x).", 
+                         DriverId, Value, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+
+     MpaCmd.Cmd = DRV_CMD_TEMP_SET;
+     MpaCmd.FruId = DAL_FRU_ID(DriverId);
+     MpaCmd.DeviceId = (OSP_U8)SubId;    
+     MpaCmd.SdrType = SENSOR_TEMP;
+     MpaCmd.WtRd = MPA_WRITE;
+     
+     MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;    
+     if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame)
+     {
+         MpaCmd.BufLen = sizeof(TempratureData);    
+         
+         TempratureData[0] = 1;      /*BMCĵһΪģ*/
+         TempratureData[1] = (OSP_U8)(Value & 0xFF);         /*¶ֵֽ*/
+         TempratureData[2] = (OSP_U8)(((OSP_U16)Value >> 8) & 0xFF); /*¶ֵֽ*/
+     }
+     else
+     {
+         MpaCmd.BufLen = sizeof(OSP_U8);
+         TempratureData[0] = (OSP_U8)(Value & 0xFF);
+     }   
+     
+     return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)TempratureData, (OSP_VOID *)NULL);
+     
+ }
+
+ /******************************************************************************
+ *     : MPAIntf_GetTemperatureLimit
+ *   : ѯ¶
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Thres     ֵ
+ *   :  Thres     ֵ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131016
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetTemperatureLimit(OSP_VOID *EnclAddr, OSP_U64 DriverId, THRES_S *Thres)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    THRES_S TemperatureLimitBuf;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_MPA_ADDR_S *MpaAddress = NULL;
+    
+    if ((NULL == EnclAddr) || (NULL == Thres))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 6, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Thres);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_TEMP_LIMIT_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(THRES_S);
+    MpaCmd.SdrType = SENSOR_TEMP;
+    MpaCmd.WtRd = MPA_READ;
+
+    OSAL_MemSet_s((OSP_U8 *)&TemperatureLimitBuf, sizeof(THRES_S), INVALID_VALUE8, sizeof(THRES_S));
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&TemperatureLimitBuf);    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        return RetVal;
+    }
+
+    /*ȡ*/
+    MpaAddress = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    /*տMCUصݸʽз*/
+    /*v1 BMC*/    /*v1 SES*/
+    if (DRV_FRAMEMODEL_V1_END > MpaAddress->DevFrame)
+    {
+        Thres->OverCriticalAlarmThres = TemperatureLimitBuf.OverNonCriticalAlarmThres;
+        Thres->OverCriticalResumeThres = TemperatureLimitBuf.LowNonRecoverAlarmThres;
+        Thres->OverNonCriticalAlarmThres = TemperatureLimitBuf.OverNonRecoverAlarmThres;
+        Thres->OverNonCriticalResumeThres = TemperatureLimitBuf.OverCriticalAlarmThres;
+        Thres->OverNonRecoverAlarmThres = MPA_INVALID_TEMPERATURE;
+        Thres->OverNonRecoverResumeThres = MPA_INVALID_TEMPERATURE;
+        
+        Thres->LowNonRecoverAlarmThres = MPA_INVALID_TEMPERATURE;
+        Thres->LowNonRecoverResumeThres = MPA_INVALID_TEMPERATURE;
+        Thres->LowCriticalAlarmThres = TemperatureLimitBuf.OverNonCriticalResumeThres;
+        Thres->LowCriticalResumeThres = TemperatureLimitBuf.LowNonRecoverResumeThres;
+        Thres->LowNonCriticalAlarmThres = TemperatureLimitBuf.OverNonRecoverResumeThres;
+        Thres->LowNonCriticalResumeThres = TemperatureLimitBuf.OverCriticalResumeThres;
+
+    }
+    /*V2͸*/
+    else
+    {
+        OSAL_MemCpy_s((OSP_U8 *)Thres, sizeof(THRES_S), (OSP_U8 *)&TemperatureLimitBuf, sizeof(THRES_S));
+    }
+    
+    return RetVal;
+    
+}
+
+ 
+  /******************************************************************************
+  *     : MPAIntf_GetFruSingleTemperatureLimit
+  *   : ѯۺ¶
+  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+                  *             DriverId   ID ͡FRUIDDEVICE IDϢ
+                                 SubId ¶ȵID
+                  *             Thres     ֵ
+  *   :  Thres     ֵ
+  *   ֵ  : OSP_S32
+  * ˵  : 
+  * 
+  * ޸ʷ      :
+  *  1.       : 2014418
+  *           : 淫
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+ OSP_S32 MPAIntf_GetFruSingleTemperatureLimit(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SubId, THRES_S *Thres)
+ {
+     MPA_CMD_INFO_S MpaCmd;
+     THRES_S TemperatureLimitBuf;
+     OSP_S32 RetVal = DRV_RETURN_ERROR;
+     DAL_MPA_ADDR_S *MpaAddress = NULL;
+     
+     if ((NULL == EnclAddr) || (NULL == Thres))
+     {
+         DRV_MPA_TRACE(DRV_LOG_WARN, 7, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Thres);
+         return DRV_RETURN_ERROR;
+     }
+ 
+     MpaCmd.Cmd = DRV_CMD_TEMP_LIMIT_GET;
+     MpaCmd.FruId = DAL_FRU_ID(DriverId);
+     MpaCmd.DeviceId = (OSP_U8)SubId;
+     MpaCmd.BufLen = sizeof(THRES_S);
+     MpaCmd.SdrType = SENSOR_TEMP;
+     MpaCmd.WtRd = MPA_READ;
+ 
+     OSAL_MemSet_s((OSP_U8 *)&TemperatureLimitBuf, sizeof(THRES_S), INVALID_VALUE8, sizeof(THRES_S));
+     RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&TemperatureLimitBuf);    
+     if (DRV_RETURN_OK != RetVal)
+     {
+         return RetVal;
+     }
+ 
+     /*ȡ*/
+     MpaAddress = (DAL_MPA_ADDR_S *)EnclAddr;
+ 
+     /*տMCUصݸʽз*/
+     /*v1 BMC*/    /*v1 SES*/
+     if (DRV_FRAMEMODEL_V1_END > MpaAddress->DevFrame)
+     {
+         Thres->OverCriticalAlarmThres = TemperatureLimitBuf.OverNonCriticalAlarmThres;
+         Thres->OverCriticalResumeThres = TemperatureLimitBuf.LowNonRecoverAlarmThres;
+         Thres->OverNonCriticalAlarmThres = TemperatureLimitBuf.OverNonRecoverAlarmThres;
+         Thres->OverNonCriticalResumeThres = TemperatureLimitBuf.OverCriticalAlarmThres;
+         Thres->OverNonRecoverAlarmThres = MPA_INVALID_TEMPERATURE;
+         Thres->OverNonRecoverResumeThres = MPA_INVALID_TEMPERATURE;
+         
+         Thres->LowNonRecoverAlarmThres = MPA_INVALID_TEMPERATURE;
+         Thres->LowNonRecoverResumeThres = MPA_INVALID_TEMPERATURE;
+         Thres->LowCriticalAlarmThres = TemperatureLimitBuf.OverNonCriticalResumeThres;
+         Thres->LowCriticalResumeThres = TemperatureLimitBuf.LowNonRecoverResumeThres;
+         Thres->LowNonCriticalAlarmThres = TemperatureLimitBuf.OverNonRecoverResumeThres;
+         Thres->LowNonCriticalResumeThres = TemperatureLimitBuf.OverCriticalResumeThres;
+ 
+     }
+     /*V2͸*/
+     else
+     {
+         OSAL_MemCpy_s((OSP_U8 *)Thres, sizeof(THRES_S), (OSP_U8 *)&TemperatureLimitBuf, sizeof(THRES_S));
+     }
+     
+     return RetVal;
+     
+ }
+
+ /******************************************************************************
+ *     : MPAIntf_SetTemperatureLimit
+ *   : ¶
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Thres     ֵ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131016
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetTemperatureLimit(OSP_VOID *EnclAddr, OSP_U64 DriverId, THRES_S *Thres)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DRV_TEMPLIMIT_S TempLimitBuf;
+    DAL_MPA_ADDR_S *MpaAddress = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Thres))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 8, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Thres);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE_LIMIT(DRV_LOG_INFO, 9, 1, 20 * HZ, "MPA sets temperature limit, id(0x%llx), ocat(%d), ocrt(%d), oncat(%d), oncrt(%d), lncat(%d), lncrt(%d), devframe(0x%x).", 
+                                DriverId, Thres->OverCriticalAlarmThres, Thres->OverCriticalResumeThres,
+                                Thres->OverNonCriticalAlarmThres, Thres->OverNonCriticalResumeThres,
+                                Thres->LowNonCriticalAlarmThres, Thres->LowNonCriticalResumeThres, 
+                                ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+
+    MpaCmd.Cmd = DRV_CMD_TEMP_LIMIT_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    //MpaCmd.BufLen : V1V2-BMCBufLen
+    MpaCmd.SdrType = SENSOR_TEMP;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*ȡ*/
+    MpaAddress = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    /*տMCUصݸʽз*/
+    /*v1 BMC*/    /*v1 SES*/
+    if (DRV_FRAMEMODEL_V1_END > MpaAddress->DevFrame)
+    {
+        MpaCmd.BufLen = sizeof(DRV_TEMPLIMIT_S);
+        TempLimitBuf.ssMemAlmHighOver = Thres->OverNonCriticalAlarmThres;
+        TempLimitBuf.ssMemAlmHighResume = Thres->OverNonCriticalResumeThres;
+        TempLimitBuf.ssMemAlmLowOver = Thres->LowNonCriticalAlarmThres;
+        TempLimitBuf.ssMemAlmLowResume = Thres->LowNonCriticalResumeThres;
+        TempLimitBuf.ssMemCritcalHighOver = Thres->OverCriticalAlarmThres;
+        TempLimitBuf.ssMemCritcalHighResume = Thres->OverCriticalResumeThres;
+        TempLimitBuf.ssMemCritcalLowOver = Thres->LowCriticalAlarmThres;
+        TempLimitBuf.ssMemCritcalLowResume = Thres->LowCriticalResumeThres;
+        
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TempLimitBuf, (OSP_VOID *)NULL);
+
+    }
+    /*V2δʵ*/
+    else
+    {
+        MpaCmd.BufLen = sizeof(THRES_S);
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Thres, (OSP_VOID *)NULL);
+        //return DRV_RETURN_ERROR;
+    }
+
+    
+}
+
+
+ 
+  /******************************************************************************
+  *     : MPAIntf_SetFruSingleTemperatureLimit
+  *   : þۺ¶
+  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+  *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+                SubId ¶ȵID
+  *             Thres     ֵ
+  *   : 
+  *   ֵ  : OSP_S32
+  * ˵  : 
+  * 
+  * ޸ʷ      :
+  *  1.       : 2014418
+  *           : 淫
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+ OSP_S32 MPAIntf_SetFruSingleTemperatureLimit(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SubId, THRES_S *Thres)
+ {
+     MPA_CMD_INFO_S MpaCmd;
+     DRV_TEMPLIMIT_S TempLimitBuf;
+     DAL_MPA_ADDR_S *MpaAddress = NULL;
+ 
+     if ((NULL == EnclAddr) || (NULL == Thres))
+     {
+         DRV_MPA_TRACE(DRV_LOG_WARN, 10, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Thres);
+         return DRV_RETURN_ERROR;
+     }
+ 
+    DRV_MPA_TRACE_LIMIT(DRV_LOG_DBG, 11, 1, 20 * HZ, "MPA sets temperature limit, id(0x%llx), ocat(%d), ocrt(%d), oncat(%d), oncrt(%d), lncat(%d), lncrt(%d).",
+                                DriverId, Thres->OverCriticalAlarmThres, Thres->OverCriticalResumeThres,
+                                Thres->OverNonCriticalAlarmThres, Thres->OverNonCriticalResumeThres,
+                                Thres->LowNonCriticalAlarmThres, Thres->LowNonCriticalResumeThres);
+ 
+     MpaCmd.Cmd = DRV_CMD_TEMP_LIMIT_SET;
+     MpaCmd.FruId = DAL_FRU_ID(DriverId);
+     MpaCmd.DeviceId = (OSP_U8)SubId;
+     //MpaCmd.BufLen : V1V2-BMCBufLen
+     MpaCmd.SdrType = SENSOR_TEMP;
+     MpaCmd.WtRd = MPA_WRITE;
+ 
+     /*ȡ*/
+     MpaAddress = (DAL_MPA_ADDR_S *)EnclAddr;
+ 
+     /*տMCUصݸʽз*/
+     /*v1 BMC*/    /*v1 SES*/
+     if (DRV_FRAMEMODEL_V1_END > MpaAddress->DevFrame)
+     {
+         MpaCmd.BufLen = sizeof(DRV_TEMPLIMIT_S);
+         TempLimitBuf.ssMemAlmHighOver = Thres->OverNonCriticalAlarmThres;
+         TempLimitBuf.ssMemAlmHighResume = Thres->OverNonCriticalResumeThres;
+         TempLimitBuf.ssMemAlmLowOver = Thres->LowNonCriticalAlarmThres;
+         TempLimitBuf.ssMemAlmLowResume = Thres->LowNonCriticalResumeThres;
+         TempLimitBuf.ssMemCritcalHighOver = Thres->OverCriticalAlarmThres;
+         TempLimitBuf.ssMemCritcalHighResume = Thres->OverCriticalResumeThres;
+         TempLimitBuf.ssMemCritcalLowOver = Thres->LowCriticalAlarmThres;
+         TempLimitBuf.ssMemCritcalLowResume = Thres->LowCriticalResumeThres;
+         
+         return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TempLimitBuf, (OSP_VOID *)NULL);
+ 
+     }
+     /*V2δʵ*/
+     else
+     {
+         MpaCmd.BufLen = sizeof(THRES_S);
+         return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Thres, (OSP_VOID *)NULL);
+         //return DRV_RETURN_ERROR;
+     }
+ 
+     
+ }
+
+ /******************************************************************************
+ *     : MPAIntf_RestoreTemperatureThres
+ *   : ָ¶
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014329
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_RestoreTemperatureThres(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*ԭdevӿڣҪ2Σʱչ*/
+    OSP_U8 DataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 12, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    (OSP_VOID)MpaAddr;
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    DRV_MPA_TRACE_LIMIT(DRV_LOG_DBG, 13, 1, 20 * HZ, "MPA restores temperature limit, id(0x%llx), host id(0x%x), scsi id(0x%x).", 
+                    DriverId, MpaAddr->DevAddr.ScsiAddr.uiHostId, MpaAddr->DevAddr.ScsiAddr.uiScsiId); 
+    
+    MpaCmd.Cmd = DRV_CMD_TEMP_LIMIT_RESUME;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DataIn);
+    //MpaCmd.SdrType = PRODUCE_INFO_MAC;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
+
+}
+
+ 
+  /******************************************************************************
+  *     : MPAIntf_RestoreFruTemperatureThres
+  *   : ָFRUۺ¶
+  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+                  *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+                                 SubId ¶ȵID
+  *   : 
+  *   ֵ  : OSP_S32
+  * ˵  : 
+  * 
+  * ޸ʷ      :
+  *  1.       : 2014418
+  *           :shufan 204084
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+ OSP_S32 MPAIntf_RestoreFruTemperatureThres(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SubId)
+ {
+     MPA_CMD_INFO_S MpaCmd;
+     /*ԭdevӿڣҪ2Σʱչ*/
+     OSP_U8 DataIn[2] = {0, 0};
+     DAL_MPA_ADDR_S *MpaAddr = NULL;
+     
+     if (NULL == EnclAddr)
+     {
+         DRV_MPA_TRACE(DRV_LOG_WARN, 14, "MPA finds the pointer is null(0x%p).", EnclAddr);
+         return DRV_RETURN_ERROR;
+     }
+
+    (OSP_VOID)MpaAddr;
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    DRV_MPA_TRACE_LIMIT(DRV_LOG_DBG, 15, 1, 20 * HZ, "MPA restores fru temperature limit, id(0x%llx), host id(0x%x), scsi id(0x%x).", 
+                     DriverId, MpaAddr->DevAddr.ScsiAddr.uiHostId, MpaAddr->DevAddr.ScsiAddr.uiScsiId); 
+     
+     MpaCmd.Cmd = DRV_CMD_TEMP_LIMIT_RESUME;
+     MpaCmd.FruId = DAL_FRU_ID(DriverId);
+     MpaCmd.DeviceId = (OSP_U8)SubId;
+     MpaCmd.BufLen = sizeof(DataIn);
+     //MpaCmd.SdrType = PRODUCE_INFO_MAC;
+     MpaCmd.WtRd = MPA_WRITE;
+ 
+     return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
+ 
+ }
+
+ /******************************************************************************
+ *     : MPAIntf_GetTemperatureName
+ *   : ѯ¶ȵ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Name  ¶
+               Length ¶Ƴ
+ *   : Name  ¶
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131016
+ *           : 淫
+ *    ޸   : ɺ
+ *  2.       : 2013116
+ *           : ղı
+ *    ޸   : ޸Ĳݣ񳤶Ⱥ͵ַݸtarget
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetTemperatureName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 NameBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    MPA_TABLE_PARA_S TableInfo;     
+    
+    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 16, "MPA finds the pointer is null(0x%p, 0x%p), length %d.", EnclAddr, Name, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_TEMP_NAME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = SENSOR_TEMP;
+    MpaCmd.WtRd = MPA_READ;
+
+    OSAL_MemSet_s(NameBuffer, sizeof(NameBuffer), 0, sizeof(NameBuffer));
+
+    TableInfo.TableLen = g_MpaConvTempIdTableLen;
+    TableInfo.IdInfoTable = g_MpaConvTempId;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)NameBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 17, "MPA GetTemperatureName return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), (OSP_U8 *)NameBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+    return RetVal;
+    
+}
+
+ 
+  /******************************************************************************
+  *     : MPAIntf_GetFruSingleTemperatureName
+  *   : ѯFRUۺϵ¶ȵ
+  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+  *                              DriverId   ID ͡FRUIDDEVICE IDϢ   
+                                  SubId ۺ¶ȵID
+  *                             Name  ¶
+                                 Length ¶Ƴ
+  *   : Name  ¶
+  *   ֵ  : OSP_S32
+  * ˵  : 
+  * 
+  * ޸ʷ      :
+  *  1.       : 2014418
+  *           : 淫
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+ OSP_S32 MPAIntf_GetFruSingleTemperatureName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SubId, OSP_S8 *Name, OSP_U32 Length)
+ {
+     MPA_CMD_INFO_S MpaCmd;
+     OSP_S8 NameBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
+     OSP_S32 RetVal = DRV_RETURN_ERROR;
+     
+     if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+     {
+         DRV_MPA_TRACE(DRV_LOG_WARN, 18, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+         return RetVal;
+     }
+ 
+     MpaCmd.Cmd = DRV_CMD_TEMP_NAME_GET;
+     MpaCmd.FruId = DAL_FRU_ID(DriverId);
+     MpaCmd.DeviceId = (OSP_U8)SubId;
+     MpaCmd.BufLen = DMI_NAME_LEN;
+     MpaCmd.SdrType = SENSOR_TEMP;
+     MpaCmd.WtRd = MPA_READ;
+ 
+     OSAL_MemSet_s(NameBuffer, sizeof(NameBuffer), 0, sizeof(NameBuffer));
+ 
+ 
+     RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NameBuffer);
+     if (DRV_RETURN_OK != RetVal)
+     {
+         DRV_MPA_TRACE(DRV_LOG_DBG, 19, "MPA GetTemperatureName return error.");
+         return RetVal;
+     }
+ 
+     /*DAL·ĳʵʳȡ̵ĳȿ*/
+     OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), (OSP_U8 *)NameBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+     return RetVal;
+     
+ }
+
+ /******************************************************************************
+ *     : MPAIntf_GetTemperatureSubtype
+ *   : ѯ¶ȵ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             subtype   ¶
+ *   : subtype   ¶
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131016
+ *           : 淫
+ *    ޸   : ɺ
+ *  2.       : 2013116
+ *           : ղı
+ *    ޸   : ޸Ĳݣ񳤶Ⱥ͵ַݸtarget
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetTemperatureSubtype(OSP_VOID *EnclAddr, OSP_U64 DriverId, TEMP_TYPE_E *Subtype)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    MPA_TABLE_PARA_S TableInfo;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Subtype))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 20, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Subtype);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    MpaCmd.Cmd = DRV_CMD_TEMP_SUBTYPE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SENSOR_TEMP;
+    MpaCmd.WtRd = MPA_READ;
+
+    TableInfo.TableLen = g_MpaConvTempIdTableLen;
+    TableInfo.IdInfoTable = g_MpaConvTempId;
+    TableInfo.DevFrame = MpaAddr->DevFrame;      /* V1ѿʹ*/
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)Subtype);
+}
+
+ 
+ /******************************************************************************
+ *     : MPAIntf_GetFruAllTemperatureSubtype
+ *   : ѯFRUۺ¶ȵ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *                              DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *                              subtype   ¶
+                                 Length 
+ *   : subtype   ¶
+ *   ֵ  :    OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014418
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+ OSP_S32 MPAIntf_GetFruAllTemperatureSubtype(OSP_VOID *EnclAddr, OSP_U64 DriverId, TEMP_TYPE_E *Subtype, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 BmcDataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Subtype))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 21, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Subtype);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    MpaCmd.Cmd = DRV_CMD_FRU_TEMP_TYPE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = (OSP_U16)Length;
+    MpaCmd.SdrType = SENSOR_TEMP;
+    MpaCmd.WtRd = MPA_READ;
+
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        BmcDataIn[0] = sizeof(OSP_U8);
+        BmcDataIn[1] = (OSP_U8)(Length / sizeof(TEMP_TYPE_E));
+        
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Subtype);
+    }
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Subtype);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetTemperatureState
+ *   : ѯ¶ȵ״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Status   ¶״̬ 
+ *   : Status   ¶״̬ 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131016
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetTemperatureState(OSP_VOID *EnclAddr, OSP_U64 DriverId, TEMP_STAT_E *Status)
+{
+/*20Ϊ¶ȱ׼*/
+#define NORMAL_TEMPERTURE 200
+    MPA_CMD_INFO_S MpaCmd;
+    MPA_ALARM_TABLE_S TableInfo;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_S16 Temperature = NORMAL_TEMPERTURE;
+
+    if ((NULL == EnclAddr) || (NULL == Status))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 22, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
+        return DRV_RETURN_ERROR;
+    }
+    
+    OSAL_MemSet_s((OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S), INVALID_VALUE8, sizeof(MPA_CMD_INFO_S));
+    MpaCmd.Cmd = DRV_CMD_TEMP_STATE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    /*Сϵͳֻ1ֽ*/
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SENSOR_TEMP;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /* BEGIN: Added by yinhuaqiang 00305130, 2015/4/15ⵥ:DTS2015041310766  */
+    /* DMIڲѯͼϵSAS˿ʱʹôвλϢFruIdDeviceId̿һĿƿ
+       MPASESĻʹô˲λϢ */
+    MpaCmd.FruId = MPA_ConvertFruId(EnclAddr, MpaCmd.FruId);
+    /* END:   Added by yinhuaqiang 00305130, 2015/4/15 ⵥ:DTS2015041310766  */
+    
+    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaCmd, sizeof(MPA_CMD_INFO_S), (OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S));
+    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaAddr, sizeof(DAL_MPA_ADDR_S), (OSP_U8 *)EnclAddr, sizeof(DAL_MPA_ADDR_S));
+    TableInfo.CommonTable.IdInfoTable = g_MpaTempStateId;
+    TableInfo.CommonTable.TableLen = g_MpaTempStateTableLen;
+
+    /*Ϣtarget*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)Status);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 23, "MPA GetTemperatureState Fail 0x%x.", RetVal);
+        return RetVal;
+    }
+
+    /*v1sesbmcһ澯ֵΪ1Ҫȷһ»һ*/
+    if ((1 == *Status) && (DRV_FRAMEMODEL_V1_END > TableInfo.MpaAddr.DevFrame))
+    {
+        RetVal = MPAIntf_GetTemperature(EnclAddr, DriverId, &Temperature);
+        if (DRV_RETURN_OK != RetVal)
+        {
+            DRV_MPA_TRACE(DRV_LOG_DBG, 24, "MPA GetTemperatureState TempVal Fail 0x%x.", RetVal);
+            return RetVal;
+        }
+        
+       /*20ȣ˵Ǹ¸澯ǵ¸澯*/
+        if(NORMAL_TEMPERTURE < Temperature)
+        {
+            *Status = DAL_TEMPERATURE_HIGH;
+        }
+        else
+        {
+            *Status = DAL_TEMPERATURE_LOW;
+        }
+    }
+    /*2Ͽ¸澯*/
+    else if (2 == *Status)
+    {
+        *Status = DAL_TEMPERATURE_HIGH_CRITICAL;
+    }
+
+    return RetVal;
+    
+}
+
+ 
+  
+  /******************************************************************************
+  *     : MPAIntf_GetFruAllTemperatureState
+  *   : ѯFRUۺ¶ȵ״̬
+  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+  *                              DriverId   ID ͡FRUIDDEVICE IDϢ   
+  *                              subtype   ¶
+                                  Length
+  *   : subtype   ¶
+  *   ֵ  :    OSP_S32
+  * ˵  : 
+  * 
+  * ޸ʷ      :
+  *  1.       : 2014418
+  *           : 淫
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+OSP_S32 MPAIntf_GetFruAllTemperatureState(OSP_VOID *EnclAddr, OSP_U64 DriverId, TEMP_STAT_E *Status, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 BmcDataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Status))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 25, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    MpaCmd.Cmd = DRV_CMD_FRU_TEMP_STATUS_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = (OSP_U16)Length;
+    MpaCmd.SdrType = SENSOR_TEMP;
+    MpaCmd.WtRd = MPA_READ;
+
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        BmcDataIn[0] = sizeof(OSP_U8);
+        BmcDataIn[1] = (OSP_U8)(Length / sizeof(TEMP_STAT_E));
+        
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Status);
+    }
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status);
+ 
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetVoltage
+ *   : õѹ
+ *   : EnclAddr  
+ *             DriverId  
+ *             Value     
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2016516
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetVoltage(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 Value)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 2, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+    
+    DRV_MPA_TRACE_LIMIT(DRV_LOG_INFO, 3, 1, 20 * HZ, "MPA sets voltage, id(0x%llx), value(%u), devframe(0x%x).", 
+                        DriverId, Value, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+    
+    MpaCmd.Cmd = DRV_CMD_VOLTAGE_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);    
+    MpaCmd.SdrType = SENSOR_VOLT;
+    MpaCmd.WtRd = MPA_WRITE;
+    MpaCmd.BufLen = sizeof(OSP_U16);
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)(&Value), (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetVoltage
+ *   : ѯѹ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             Voltage      ѹֵ
+ *   :  Voltage      ѹֵ        
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetVoltage(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S16 *Voltage)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Voltage))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 26, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Voltage);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_VOLTAGE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_S16);
+    MpaCmd.SdrType = SENSOR_VOLT;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*ʹtarget*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)EnclAddr, (OSP_VOID *)Voltage);
+
+}
+
+ 
+  /******************************************************************************
+  *     : MPAIntf_GetFruAllVoltage
+  *   : ѯFRUۺϵѹ
+  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+                  *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+                  *             Voltage      ѹֵ
+  *   :  Voltage      ѹֵ        
+  *   ֵ  : OSP_S32
+  * ˵  : 
+  * 
+  * ޸ʷ      :
+  *  1.       : 2014418
+  *           : 淫
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+OSP_S32 MPAIntf_GetFruAllVoltage(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S16 *Voltage, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 BmcDataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Voltage))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 27, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Voltage);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    MpaCmd.Cmd = DRV_CMD_FRU_VOLTAGE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = (OSP_U16)Length;
+    MpaCmd.SdrType = SENSOR_VOLT;
+    MpaCmd.WtRd = MPA_READ;
+
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        BmcDataIn[0] = sizeof(OSP_U8);
+        BmcDataIn[1] = (OSP_U8)(Length / sizeof(OSP_U16));
+
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Voltage);
+    }
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Voltage);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetVoltageThreshold
+ *   : ѯѹֵ
+ *   : EnclAddr  :ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId  :ID ͡FRUIDDEVICE IDϢ
+ *             
+ *   : VoltageThreshold   :ѹֵṹָ
+ *   ֵ  : OSP_S32   :ɹ/ʧ
+ * ˵  : 
+ *             1ѹ/¶ һ޽ṹ
+ *             2V1 BMCѹ޴ڻزޣ
+ *             3SESѹ޲֧֣
+ *             4V2 BMCѹֱ͸
+ *
+ * ޸ʷ      :
+ *  1.       : 20131018
+ *           : zhanwenbin 90003961
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetVoltageThreshold(OSP_VOID *EnclAddr, OSP_U64 DriverId, THRES_S *VoltageThreshold)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    MPA_CMD_INFO_S MpaCmd;
+    THRES_S VoltageThresholdBuf;
+    DAL_MPA_ADDR_S *MpaAddress = NULL;
+
+
+    if ((NULL == EnclAddr) || (NULL == VoltageThreshold))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 28, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, VoltageThreshold);
+        return DRV_RETURN_ERROR;
+    }
+
+    /*ȡ*/
+    MpaAddress = (DAL_MPA_ADDR_S *)EnclAddr;
+    
+    /*SESѹ޲֧*/
+    if ((DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddress->DevFrame) 
+        && (DRV_FRAMEMODEL_CTRL_BMC < MpaAddress->DevFrame))
+    {
+        return RETURN_INVALID;
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_VOLTAGE_LIMIT_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(THRES_S);
+    MpaCmd.SdrType = SENSOR_VOLT;
+    MpaCmd.WtRd = MPA_READ;
+
+    OSAL_MemSet_s((OSP_U8 *)&VoltageThresholdBuf, sizeof(THRES_S), INVALID_VALUE8, sizeof(THRES_S));
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&VoltageThresholdBuf);
+
+    if (DRV_RETURN_OK != RetVal)
+    {
+        return RetVal;
+    }
+
+    /*տMCUصݸʽз*/
+    /*v1 BMCȸΪ0.01*/
+    if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddress->DevFrame)
+    {
+        VoltageThreshold->OverNonCriticalAlarmThres = (OSP_S16)(VoltageThresholdBuf.OverNonRecoverAlarmThres * MPA_PRECISION_10);
+        VoltageThreshold->LowNonCriticalAlarmThres = (OSP_S16)(VoltageThresholdBuf.OverNonRecoverResumeThres * MPA_PRECISION_10);
+    }
+    /*V2͸*/
+    else
+    {
+        OSAL_MemCpy_s((OSP_U8 *)VoltageThreshold, sizeof(THRES_S), (OSP_U8 *)&VoltageThresholdBuf, sizeof(THRES_S));
+    }
+    
+    return RetVal;
+}
+
+ 
+  /******************************************************************************
+  *     : MPAIntf_GetFruSingleVoltageThreshold
+  *   : ѯFRUۺϵѹֵ
+  *   : EnclAddr  :ϲ·ĵַϢmcutype,scsiַframetype
+                  *             DriverId  :ID ͡FRUIDDEVICE IDϢ
+  *                             SubId ѹID
+                                  VoltageThreshold   :ѹֵṹָ
+  *   : VoltageThreshold   :ѹֵṹָ
+  *   ֵ  : OSP_S32   :ɹ/ʧ
+  * ˵  : 
+  *
+  * ޸ʷ      :
+  *  1.       : 2014418
+  *           : shufan 204084
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+ OSP_S32 MPAIntf_GetFruSingleVoltageThreshold(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SubId, THRES_S *VoltageThreshold)
+ {
+     OSP_S32 RetVal = DRV_RETURN_ERROR;
+     MPA_CMD_INFO_S MpaCmd;
+     THRES_S VoltageThresholdBuf;
+     DAL_MPA_ADDR_S *MpaAddress = NULL;
+ 
+ 
+     if ((NULL == EnclAddr) || (NULL == VoltageThreshold))
+     {
+         DRV_MPA_TRACE(DRV_LOG_WARN, 29, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, VoltageThreshold);
+         return DRV_RETURN_ERROR;
+     }
+ 
+     /*ȡ*/
+     MpaAddress = (DAL_MPA_ADDR_S *)EnclAddr;
+     
+     /*SESѹ޲֧*/
+     if ((DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddress->DevFrame) 
+         && (DRV_FRAMEMODEL_CTRL_BMC < MpaAddress->DevFrame))
+     {
+         return RETURN_INVALID;
+     }
+     
+     MpaCmd.Cmd = DRV_CMD_VOLTAGE_LIMIT_GET;
+     MpaCmd.FruId = DAL_FRU_ID(DriverId);
+     MpaCmd.DeviceId = (OSP_U8)SubId;
+     MpaCmd.BufLen = sizeof(THRES_S);
+     MpaCmd.SdrType = SENSOR_VOLT;
+     MpaCmd.WtRd = MPA_READ;
+ 
+     OSAL_MemSet_s((OSP_U8 *)&VoltageThresholdBuf, sizeof(THRES_S), INVALID_VALUE8, sizeof(THRES_S));
+     RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&VoltageThresholdBuf);
+ 
+     if (DRV_RETURN_OK != RetVal)
+     {
+         return RetVal;
+     }
+ 
+     /*տMCUصݸʽз*/
+     /*v1 BMCȸΪ0.01*/
+     if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddress->DevFrame)
+     {
+         VoltageThreshold->OverNonCriticalAlarmThres = (OSP_S16)(VoltageThresholdBuf.OverNonRecoverAlarmThres * MPA_PRECISION_10);
+         VoltageThreshold->LowNonCriticalAlarmThres = (OSP_S16)(VoltageThresholdBuf.OverNonRecoverResumeThres * MPA_PRECISION_10);
+     }
+     /*V2͸*/
+     else
+     {
+         OSAL_MemCpy_s((OSP_U8 *)VoltageThreshold, sizeof(THRES_S), (OSP_U8 *)&VoltageThresholdBuf, sizeof(THRES_S));
+     }
+     
+     return RetVal;
+ }
+
+ /******************************************************************************
+ *     : MPAIntf_SetVoltageThreshold
+ *   : õѹֵ
+ *   : EnclAddr   :ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId   :ID ͡FRUIDDEVICE IDϢ    
+ *             VoltageThreshold  :ѹֵṹָ
+ *   : 
+ *   ֵ  : OSP_S32 :ɹ/ʧ
+ * ˵  : 
+ *             1ѹ/¶ һ޽ṹ
+ *             2V1 BMCѹ޴ڻزޣ
+ *             3V1 SESѹ޻ز
+ *             4V2 ѹֱ͸
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131018
+ *           : zhanwenbin 90003961
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetVoltageThreshold(OSP_VOID *EnclAddr, OSP_U64 DriverId, THRES_S *VoltageThreshold)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    THRES_S VoltageThresholdBuf;
+    DAL_MPA_ADDR_S *MpaAddress = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == VoltageThreshold))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 30, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, VoltageThreshold);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE_LIMIT(DRV_LOG_INFO, 31, 1, 20 * HZ, "MPA sets voltage limit, id(0x%llx), devframe(0x%x).", DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+    
+    MpaCmd.Cmd = DRV_CMD_VOLTAGE_LIMIT_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(THRES_S);
+    MpaCmd.SdrType = SENSOR_VOLT;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*ȡ*/
+    MpaAddress = (DAL_MPA_ADDR_S *)EnclAddr;
+    
+    /*տMCUصݸʽз*/
+    /*v1 BMC*/
+    if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddress->DevFrame)
+    {
+        VoltageThresholdBuf.OverNonCriticalAlarmThres = VoltageThreshold->OverNonRecoverAlarmThres;
+        VoltageThresholdBuf.LowNonCriticalAlarmThres = VoltageThreshold->OverNonRecoverResumeThres;
+        VoltageThresholdBuf.OverNonCriticalResumeThres = VoltageThreshold->OverCriticalAlarmThres;
+        VoltageThresholdBuf.LowNonCriticalResumeThres = VoltageThreshold->OverCriticalResumeThres;
+    }
+    /*v1 SES*/
+    else if ((DRV_FRAMEMODEL_V1_END > MpaAddress->DevFrame) 
+        && (DRV_FRAMEMODEL_CTRL_BMC < MpaAddress->DevFrame))
+    {
+        VoltageThresholdBuf.OverNonCriticalAlarmThres = VoltageThreshold->OverNonRecoverAlarmThres;
+        VoltageThresholdBuf.LowNonCriticalAlarmThres = VoltageThreshold->OverNonRecoverResumeThres;
+    }
+    /* V2 BMC*/
+    else if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddress->DevFrame)
+        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddress->DevFrame))
+    {
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)VoltageThreshold, (OSP_VOID *)NULL);
+    }
+    /*V2͸*/
+    else
+    {
+        OSAL_MemCpy_s((OSP_U8 *)&VoltageThresholdBuf, sizeof(THRES_S), (OSP_U8 *)VoltageThreshold, sizeof(THRES_S));
+    }
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&VoltageThresholdBuf, (OSP_VOID *)NULL);
+}
+
+
+ 
+  /******************************************************************************
+  *     : MPAIntf_SetFruSingleVoltageThreshold
+  *   : FRUۺϵѹֵ
+  *   : EnclAddr   :ϲ·ĵַϢmcutype,scsiַframetype          
+                  *             DriverId   :ID ͡FRUIDDEVICE IDϢ   
+                                SubId :ѹID
+  *             VoltageThreshold  :ѹֵṹָ
+  *   : 
+  *   ֵ  : OSP_S32 :ɹ/ʧ
+  * ˵  : 
+  *             1ѹ/¶ һ޽ṹ
+  *             2V1 BMCѹ޴ڻزޣ
+  *             3V1 SESѹ޻ز
+  *             4V2 ѹֱ͸
+  * 
+  * ޸ʷ      :
+  *  1.       : 20131018
+  *           : zhanwenbin 90003961
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+ OSP_S32 MPAIntf_SetFruSingleVoltageThreshold(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SubId, THRES_S *VoltageThreshold)
+ {
+     MPA_CMD_INFO_S MpaCmd;
+     THRES_S VoltageThresholdBuf;
+     DAL_MPA_ADDR_S *MpaAddress = NULL;
+ 
+     if ((NULL == EnclAddr) || (NULL == VoltageThreshold))
+     {
+         DRV_MPA_TRACE(DRV_LOG_WARN, 32, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, VoltageThreshold);
+         return DRV_RETURN_ERROR;
+     }
+ 
+     DRV_MPA_TRACE_LIMIT(DRV_LOG_DBG, 33, 1, 20 * HZ, "MPA sets voltage limit, id(0x%llx).", DriverId);
+     
+     MpaCmd.Cmd = DRV_CMD_VOLTAGE_LIMIT_SET;
+     MpaCmd.FruId = DAL_FRU_ID(DriverId);
+     MpaCmd.DeviceId = (OSP_U8)SubId;
+     MpaCmd.BufLen = sizeof(THRES_S);
+     MpaCmd.SdrType = SENSOR_VOLT;
+     MpaCmd.WtRd = MPA_WRITE;
+ 
+     /*ȡ*/
+     MpaAddress = (DAL_MPA_ADDR_S *)EnclAddr;
+     
+     /*տMCUصݸʽз*/
+     /*v1 BMC*/
+     if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddress->DevFrame)
+     {
+         VoltageThresholdBuf.OverNonCriticalAlarmThres = VoltageThreshold->OverNonRecoverAlarmThres;
+         VoltageThresholdBuf.LowNonCriticalAlarmThres = VoltageThreshold->OverNonRecoverResumeThres;
+         VoltageThresholdBuf.OverNonCriticalResumeThres = VoltageThreshold->OverCriticalAlarmThres;
+         VoltageThresholdBuf.LowNonCriticalResumeThres = VoltageThreshold->OverCriticalResumeThres;
+     }
+     /*v1 SES*/
+     else if ((DRV_FRAMEMODEL_V1_END > MpaAddress->DevFrame) 
+         && (DRV_FRAMEMODEL_CTRL_BMC < MpaAddress->DevFrame))
+     {
+         VoltageThresholdBuf.OverNonCriticalAlarmThres = VoltageThreshold->OverNonRecoverAlarmThres;
+         VoltageThresholdBuf.LowNonCriticalAlarmThres = VoltageThreshold->OverNonRecoverResumeThres;
+     }
+     /* V2 BMC*/
+     else if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddress->DevFrame)
+         && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddress->DevFrame))
+     {
+         return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)VoltageThreshold, (OSP_VOID *)NULL);
+     }
+     /*V2͸*/
+     else
+     {
+         OSAL_MemCpy_s((OSP_U8 *)&VoltageThresholdBuf, sizeof(THRES_S), (OSP_U8 *)VoltageThreshold, sizeof(THRES_S));
+     }
+ 
+     return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&VoltageThresholdBuf, (OSP_VOID *)NULL);
+ }
+
+ /******************************************************************************
+ *     : MPAIntf_GetVoltageName
+ *   : ѯѹ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Name  ѹ
+ *             Length ѹƳ       
+ *   : Name  ѹ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013115
+ *           : zhanwenbin 90003961
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetVoltageName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 NameBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    MPA_TABLE_PARA_S TableInfo;
+    
+    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 34, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_VOLTAGE_NAME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = SENSOR_VOLT;
+    MpaCmd.WtRd = MPA_READ;
+
+    TableInfo.TableLen = g_MpaConvVoltIdTableLen;
+    TableInfo.IdInfoTable = g_MpaConvVoltId;
+
+    OSAL_MemSet_s(NameBuffer, sizeof(NameBuffer), 0, sizeof(NameBuffer));
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)NameBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 35, "MPA GetTemperatureName return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Name, DMI_NAME_LEN, (OSP_U8 *)NameBuffer, DMI_NAME_LEN);
+   
+    return RetVal;    
+}
+
+
+ 
+  /******************************************************************************
+  *     : MPAIntf_GetFruSingleVoltageName
+  *   : ѯFRUۺϵѹ
+  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+                  *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+                                 SubId ѹID
+                  *             Name  ѹ
+                  *             Length ѹƳ       
+  *   : Name  ѹ
+  *   ֵ  : OSP_S32
+  * ˵  : 
+  * 
+  * ޸ʷ      :
+  *  1.       : 2014418
+  *           : shufan 204084
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+ OSP_S32 MPAIntf_GetFruSingleVoltageName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SubId, OSP_S8 *Name, OSP_U32 Length)
+ {
+     MPA_CMD_INFO_S MpaCmd;
+     OSP_S8 NameBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
+     OSP_S32 RetVal = DRV_RETURN_ERROR;
+     
+     if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+     {
+         DRV_MPA_TRACE(DRV_LOG_WARN, 36, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+         return RetVal;
+     }
+ 
+     MpaCmd.Cmd = DRV_CMD_VOLTAGE_NAME_GET;
+     MpaCmd.FruId = DAL_FRU_ID(DriverId);
+     MpaCmd.DeviceId = (OSP_U8)SubId;
+     MpaCmd.BufLen = DMI_NAME_LEN;
+     MpaCmd.SdrType = SENSOR_VOLT;
+     MpaCmd.WtRd = MPA_READ;
+ 
+     RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NameBuffer);
+     if (DRV_RETURN_OK != RetVal)
+     {
+         DRV_MPA_TRACE(DRV_LOG_DBG, 37, "MPA GetTemperatureName return error.");
+         return RetVal;
+     }
+ 
+     /*DAL·ĳȿ*/
+     OSAL_MemCpy_s((OSP_U8 *)Name, DMI_NAME_LEN, (OSP_U8 *)NameBuffer, DMI_NAME_LEN);
+    
+     return RetVal;    
+ }
+
+ /******************************************************************************
+ *     : MPAIntf_GetVoltageSubtype
+ *   : ȡѹͽӿں
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             subtype  ѹ   
+ *   : subtype  ѹ 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013115
+ *           : zhanwenbin 90003961
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetVoltageSubtype(OSP_VOID *EnclAddr, OSP_U64 DriverId, VOLTAGE_TYPE_E *subtype)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    MPA_TABLE_PARA_S TableInfo;    
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == subtype))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 38, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, subtype);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    MpaCmd.Cmd = DRV_CMD_VOLTAGE_SUBTYPE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SENSOR_VOLT;
+    MpaCmd.WtRd = MPA_READ;
+
+    TableInfo.TableLen = g_MpaConvVoltIdTableLen;
+    TableInfo.IdInfoTable = g_MpaConvVoltId;
+    TableInfo.DevFrame = MpaAddr->DevFrame;      /* V1ѿʹ*/
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)subtype);
+
+}
+
+
+ 
+  /******************************************************************************
+  *     : MPAIntf_GetFruAllVoltageSubtype
+  *   : ȡFRUۺϵѹͽӿں
+  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+                  *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+                  *             subtype  ѹ   
+                                Length 
+  *   : subtype  ѹ 
+  *   ֵ  : OSP_S32
+  * ˵  : 
+  * 
+  * ޸ʷ      :
+  *  1.       : 2014418
+  *           : shufan 204084 
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+OSP_S32 MPAIntf_GetFruAllVoltageSubtype(OSP_VOID *EnclAddr, OSP_U64 DriverId, VOLTAGE_TYPE_E *subtype, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 BmcDataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == subtype))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 39, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, subtype);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    MpaCmd.Cmd = DRV_CMD_FRU_VOLTAGE_TYPE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = (OSP_U16)Length;
+    MpaCmd.SdrType = SENSOR_VOLT;
+    MpaCmd.WtRd = MPA_READ;
+
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        BmcDataIn[0] = sizeof(OSP_U8);
+        BmcDataIn[1] = (OSP_U8)(Length / sizeof(VOLTAGE_TYPE_E));
+        
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)subtype);
+    }
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)subtype);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetVoltageState
+ *   : ȡѹ״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Status   ѹ״̬ 
+ *   : Status   ѹ״̬ 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013124
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetVoltageState(OSP_VOID *EnclAddr, OSP_U64 DriverId, VOLT_STAT_E *Status)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    MPA_ALARM_TABLE_S TableInfo;
+
+    if ((NULL == EnclAddr) || (NULL == Status))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 40, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
+        return DRV_RETURN_ERROR;
+    }
+    
+    OSAL_MemSet_s((OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S), INVALID_VALUE8, sizeof(MPA_CMD_INFO_S));
+    MpaCmd.Cmd = DRV_CMD_VOLT_STATE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    /*Сϵͳֻ1ֽ*/
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SENSOR_VOLT;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /* BEGIN: Added by yinhuaqiang 00305130, 2015/4/15ⵥ:DTS2015041310766  */
+    /* DMIڲѯͼϵSAS˿ʱʹôвλϢFruIdDeviceId̿һĿƿ
+       MPASESĻʹô˲λϢ */
+    MpaCmd.FruId = MPA_ConvertFruId(EnclAddr, MpaCmd.FruId);
+    /* END:   Added by yinhuaqiang 00305130, 2015/4/15 ⵥ:DTS2015041310766  */
+
+    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaCmd, sizeof(MPA_CMD_INFO_S), (OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S));
+    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaAddr, sizeof(DAL_MPA_ADDR_S), (OSP_U8 *)EnclAddr, sizeof(DAL_MPA_ADDR_S));
+    TableInfo.CommonTable.IdInfoTable = g_MpaVoltStateId;
+    TableInfo.CommonTable.TableLen = g_MpaVoltStateTableLen;
+
+    /*Ϣtarget*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)Status);
+}
+
+ 
+ 
+  /******************************************************************************
+  *     : MPAIntf_GetFruAllVoltageState
+  *   : ȡFRUۺϵѹ״̬
+  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+                  *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+                  *             Status   ѹ״̬ 
+  *   : Status   ѹ״̬ 
+  *   ֵ  : OSP_S32
+  * ˵  : 
+  * 
+  * ޸ʷ      :
+  *  1.       : 2014418
+  *           :shufan 204084
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+OSP_S32 MPAIntf_GetFruAllVoltageState(OSP_VOID *EnclAddr, OSP_U64 DriverId, VOLT_STAT_E *Status, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 BmcDataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Status))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 41, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    MpaCmd.Cmd = DRV_CMD_FRU_VOLTAGE_STATUS_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = (OSP_U16)Length;
+    MpaCmd.SdrType = SENSOR_VOLT;
+    MpaCmd.WtRd = MPA_READ;
+
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        BmcDataIn[0] = sizeof(OSP_U8);
+        BmcDataIn[1] = (OSP_U8)(Length / sizeof(VOLT_STAT_E));
+
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Status);
+    }
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetElectronicLabel
+ *   : ѯӱǩ
+ *   : EnclAddr  豸ַϢ
+ *             DriverId        豸idϢ
+ *             Elabel  ӱǩ
+ *             Length  ӱǩ
+ *   : Elabel  ӱǩ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetElectronicLabel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Elabel, OSP_U32 Length)
+{
+
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 *ElabelBuffer = NULL;/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_U32 FruId = DAL_FRU_ID(DriverId);
+        
+    if ((NULL == EnclAddr) || (NULL == Elabel) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 42, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Elabel, Length);
+        return RetVal;
+    }
+  
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    /* BEGIN: Added by shufan 00204084, 2014/8/17  ⵥ:c02, ޸ԭ:12g hds */
+    if (TRUE == MPA_If12gHdsCtrlBoardId(MpaAddr->DevFrame, FruId))
+    {
+        return MPA_Get12gHdsCommonInfo((DAL_MPA_ADDR_S *)EnclAddr,
+                                        DriverId,//עu64 driver id
+                                        SAS_12G_CMD_GET_CTRL_ELABLE,
+                                        (OSP_S8 *)Elabel, 
+                                        (OSP_U16)min(DRV_ELABLE_LEN, (OSP_S32)Length));
+    }
+    /* END: Added by shufan 00204084, 2014/8/17  ⵥ:c02 */
+
+    MpaCmd.Cmd = DRV_CMD_ELABEL_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_ELABLE_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_RAM_ELABEL;
+    MpaCmd.WtRd = MPA_READ;
+
+    ElabelBuffer = (OSP_S8 *)MPA_Malloc(DRV_ELABLE_LEN);
+    if(NULL == ElabelBuffer)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 43, "MPA malloc memory failed.");
+        return RetVal;
+    }
+    OSAL_MemSet_s(ElabelBuffer, DRV_ELABLE_LEN, 0, DRV_ELABLE_LEN);
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)EnclAddr, (OSP_VOID *)ElabelBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 44, "MPA GetElectronicLabel return error %d.", RetVal);
+        MPA_Free(ElabelBuffer);
+        ElabelBuffer = NULL;
+        return RetVal;
+    }
+    
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Elabel, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length), (OSP_U8 *)ElabelBuffer, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length));
+    
+    MPA_Free(ElabelBuffer);
+    ElabelBuffer = NULL;
+    return RetVal;
+    
+}
+
+/******************************************************************************
+*     : MPAIntf_SetCtrlBoardE2ElectronicLabel
+*   : ÿưӱǩ
+*   : EnclAddr  豸ַϢ
+*             DriverId        豸idϢ
+*             Elabel[DRV_ELABLE_LEN]  ӱǩ
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 20141028
+*           : c00221000
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetCtrlBoardE2ElectronicLabel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Elabel, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 *ElabelBuffer = NULL;/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Elabel) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "Mpa finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Elabel, Length);
+        return DRV_RETURN_ERROR;
+    }
+    
+    ElabelBuffer = (OSP_S8 *)MPA_Malloc(DRV_ELABLE_LEN);
+    if(NULL == ElabelBuffer)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "Mpa malloc memory failed.");
+        return DRV_RETURN_ERROR;
+    }
+    OSAL_MemSet_s(ElabelBuffer, DRV_ELABLE_LEN, 0, DRV_ELABLE_LEN);
+    OSAL_MemCpy_s((OSP_U8 *)ElabelBuffer, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length), (OSP_U8 *)Elabel, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length));
+
+    MpaCmd.Cmd = DRV_CMD_SET_CTRL_BOARD_ELABLE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_ELABLE_LEN;
+    MpaCmd.SdrType =  SDRTYPE_CTRL_BOARD_EEPROM_ELABLE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)ElabelBuffer, (OSP_VOID *)EnclAddr);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 344, "MPA interface returns error(%d)", RetVal);
+    }
+    
+    MPA_Free(ElabelBuffer);
+    ElabelBuffer = NULL;
+
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetCtrlBoardMemoryElectronicLabel
+ *   : ѯưڴӱǩ
+ *   : EnclAddr  豸ַϢ
+ *             DriverId        豸idϢ
+ *             Elabel  ӱǩ
+ *             Length  ӱǩ
+ *   : Elabel  ӱǩ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20141028
+ *           : c00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetCtrlBoardMemoryElectronicLabel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Elabel, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 *ElabelBuffer = NULL;/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Elabel) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "Mpa finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Elabel, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_CTRL_BOARD_MEMORY_ELABLE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_ELABLE_LEN;
+    MpaCmd.SdrType = SDRTYPE_CTRL_BOARD_MEMORY_ELABLE;
+    MpaCmd.WtRd = MPA_READ;
+
+    ElabelBuffer = (OSP_S8 *)MPA_Malloc(DRV_ELABLE_LEN);
+    if(NULL == ElabelBuffer)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "Mpa malloc memory failed.");
+        return RetVal;
+    }
+    OSAL_MemSet_s(ElabelBuffer, DRV_ELABLE_LEN, 0, DRV_ELABLE_LEN);
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)EnclAddr, (OSP_VOID *)ElabelBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 344, "MPA interface returns error(%d)", RetVal);
+        MPA_Free(ElabelBuffer);
+        ElabelBuffer = NULL;
+        return RetVal;
+    }
+    
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Elabel, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length), (OSP_U8 *)ElabelBuffer, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length));
+    
+    MPA_Free(ElabelBuffer);
+    ElabelBuffer = NULL;
+
+    return RetVal;
+}
+ 
+ /******************************************************************************
+ *     : MPAIntf_GetCtrlBoardE2ElectronicLabel
+ *   : ѯưeepromӱǩ
+ *   : EnclAddr  豸ַϢ
+ *             DriverId        豸idϢ
+ *             Elabel  ӱǩ
+ *             Length  ӱǩ
+ *   : Elabel  ӱǩ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20141028
+ *           : c00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetCtrlBoardE2ElectronicLabel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Elabel, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 *ElabelBuffer = NULL;/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Elabel) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "Mpa finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Elabel, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_CTRL_BOARD_EEPROM_ELABLE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_ELABLE_LEN;
+    MpaCmd.SdrType = SDRTYPE_CTRL_BOARD_EEPROM_ELABLE;
+    MpaCmd.WtRd = MPA_READ;
+
+    ElabelBuffer = (OSP_S8 *)MPA_Malloc(DRV_ELABLE_LEN);
+    if(NULL == ElabelBuffer)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "Mpa malloc memory failed.");
+        return RetVal;
+    }
+    OSAL_MemSet_s(ElabelBuffer, DRV_ELABLE_LEN, 0, DRV_ELABLE_LEN);
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)EnclAddr, (OSP_VOID *)ElabelBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 344, "MPA interface returns error(%d)", RetVal);
+        MPA_Free(ElabelBuffer);
+        ElabelBuffer = NULL;
+        return RetVal;
+    }
+    
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Elabel, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length), (OSP_U8 *)ElabelBuffer, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length));
+    
+    MPA_Free(ElabelBuffer);
+    ElabelBuffer = NULL;
+
+    return RetVal;
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_ClearBayconfig
+ *   : bayconfig
+ *   : EnclAddr  豸ַϢ
+ *             DriverId        豸idϢ
+ *             Flag  clear־
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.             : 201499
+ *                  : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_ClearBayconfig(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Flag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "para error,pointer %p", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_CLEAR_BAYCONFIG;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPE_CLEAR_BAYCONFIG;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Flag, (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBayconfig
+ *   : Bayconfig
+ *   : EnclAddr  豸ַϢ
+ *             DriverId        豸idϢ
+ *             Bayconfig  Bayconfig
+ *             Length  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.             : 201499
+ *                  : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBayconfig(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Bayconfig, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 *TmpData = NULL;/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Bayconfig) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA Bayconfig para error,pointer %p, %p, length %d", EnclAddr, Bayconfig, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    TmpData = (OSP_S8 *)MPA_Malloc(LENGTH_AND_BAYCONFIG);
+    if(NULL == TmpData)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA Malloc fail");
+        return DRV_RETURN_ERROR;
+    }
+    OSAL_MemSet_s(TmpData, LENGTH_AND_BAYCONFIG, 0, LENGTH_AND_BAYCONFIG);
+    OSAL_MemCpy_s((OSP_U8 *)TmpData, (OSP_U32)min(LENGTH_AND_BAYCONFIG, (OSP_S32)Length), (OSP_U8 *)Bayconfig, (OSP_U32)min(LENGTH_AND_BAYCONFIG, (OSP_S32)Length));
+
+    MpaCmd.Cmd = DRV_CMD_SET_BAYCONFIG;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = (OSP_U16)Length;    /*ʵݵĳ·֡.ᳬU16*/
+    MpaCmd.SdrType = SDRTYPE_BAYCONFIG;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)TmpData, (OSP_VOID *)EnclAddr);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 344, "MPA set Bayconfig return error %d", RetVal);
+    }
+
+    MPA_Free(TmpData);
+    TmpData = NULL;
+
+    return RetVal;
+}
+
+/******************************************************************************
+*     : MPAIntf_GetBayconfigLen
+*   : ѯBayconfig 
+*   : EnclAddr  豸ַϢ
+*             DriverId        豸idϢ
+*             Length  
+*   : Bayconfig
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.             : 201499
+*                  : chenkeren 00221000
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetBayconfigLen(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Length))
+    {
+         DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA BayconfigLen Point Null %p, %p", EnclAddr, Length);
+         return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BAYCONFIG_LEN;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_S32);
+    MpaCmd.SdrType = SDRTYPE_BAYCONFIG_LEN;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Length);
+}
+
+/******************************************************************************
+*     : MPAIntf_GetBayconfig
+*   : ѯBayconfig
+*   : EnclAddr  豸ַϢ
+*             DriverId        豸idϢ
+*             Bayconfig  Bayconfig
+*             Length  
+*   : Bayconfig
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.             : 201499
+*                  : chenkeren 00221000
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetBayconfig(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Bayconfig, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 *BayBuffer = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Bayconfig) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA Bayconfig para error,pointer %p, %p, length %d", EnclAddr, Bayconfig, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BAYCONFIG;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MAX_BAYCONFIG_LEN;
+    MpaCmd.SdrType = SDRTYPE_BAYCONFIG;
+    MpaCmd.WtRd = MPA_READ;
+
+    BayBuffer = (OSP_U8 *)MPA_Malloc(MAX_BAYCONFIG_LEN);
+    if(NULL == BayBuffer)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA Malloc fail");
+        return RetVal;
+    }
+    OSAL_MemSet_s(BayBuffer, MAX_BAYCONFIG_LEN, 0, MAX_BAYCONFIG_LEN);
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)EnclAddr, (OSP_VOID *)BayBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 344, "MPA Get Bayconfig return error %d", RetVal);
+        MPA_Free(BayBuffer);
+        BayBuffer = NULL;
+        return RetVal;
+    }
+
+    OSAL_MemCpy_s((OSP_U8 *)Bayconfig, (OSP_U32)min(MAX_BAYCONFIG_LEN, (OSP_S32)Length), (OSP_U8 *)BayBuffer, (OSP_U32)min(MAX_BAYCONFIG_LEN, (OSP_S32)Length));
+
+    MPA_Free(BayBuffer);
+    BayBuffer = NULL;
+
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPeerElabel
+ *   : ѯ԰ӱǩ
+ *   : EnclAddr  豸ַϢ
+ *             DriverId        豸idϢ
+ *             Elabel  ӱǩ
+ *             Length  ӱǩ
+ *   : Elabel  ӱǩ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014411
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPeerElabel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 PeerSlot, OSP_S8 *Elabel, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S8 *ElabelBuffer = NULL;/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Elabel) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 45, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Elabel, Length);
+        return RetVal;
+    }
+
+    (OSP_VOID)PeerSlot;
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    /*ֻsesָ֧ýӿ*/
+    if ((DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame) || (MpaAddr->DevFrame > DRV_FRAMEMODEL_12GSAS_EXP_END))
+    {
+        return RETURN_INVALID;
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_ELABEL_GET_PEER;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_ELABLE_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    ElabelBuffer = (OSP_S8 *)MPA_Malloc(DRV_ELABLE_LEN);
+    if(NULL == ElabelBuffer)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 46, "MPA malloc memory failed.");
+        return RetVal;
+    }
+    OSAL_MemSet_s(ElabelBuffer, DRV_ELABLE_LEN, 0, DRV_ELABLE_LEN);
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)EnclAddr, (OSP_VOID *)ElabelBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 47, "MPA GetPeerElabel return error %d.", RetVal);
+        MPA_Free(ElabelBuffer);
+        ElabelBuffer = NULL;
+        return RetVal;
+    }
+    
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Elabel, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length), (OSP_U8 *)ElabelBuffer, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length));
+    
+    MPA_Free(ElabelBuffer);
+    ElabelBuffer = NULL;
+    return RetVal;    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetEepromElectronicLabel
+ *   : ѯEEPROMеӱǩ(װӿڣֱӴEEPROMж)
+ *   : EnclAddr  豸ַϢ
+ *             DriverId        豸idϢ
+ *             Elabel  ӱǩ
+ *             Length  ӱǩ
+ *   : Elabel  ӱǩ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131225
+ *           : shufan 204084
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetEepromElectronicLabel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Elabel, OSP_U32 Length)
+{
+
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 *ElabelBuffer = NULL;/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_MPA_ADDR_S * MpaAddr = NULL;
+    
+    if ((NULL == EnclAddr) || (NULL == Elabel) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 48, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Elabel, Length);
+        return RetVal;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr; 
+
+    if (DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddr->DevFrame)
+    {
+        MpaCmd.Cmd = DRV_CMD_EEPROM_GET;
+        MpaCmd.FruId = DAL_FRU_ID(DriverId);
+        MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+        MpaCmd.BufLen = DRV_ELABLE_LEN;
+        MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+        MpaCmd.WtRd = MPA_READ;
+    }
+    else
+    {
+        MpaCmd.Cmd = DRV_CMD_ELABEL_GET;
+        MpaCmd.FruId = DAL_FRU_ID(DriverId);
+        MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+        MpaCmd.BufLen = DRV_ELABLE_LEN;
+        MpaCmd.SdrType = PRODUCE_INFO_EEPROM_ELABEL;
+        MpaCmd.WtRd = MPA_READ;
+    }
+
+    ElabelBuffer = (OSP_S8 *)MPA_Malloc(DRV_ELABLE_LEN);
+    if(NULL == ElabelBuffer)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 49, "MPA malloc memory failed.");
+        return RetVal;
+    }
+    OSAL_MemSet_s(ElabelBuffer, DRV_ELABLE_LEN, 0, DRV_ELABLE_LEN);
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)EnclAddr, (OSP_VOID *)ElabelBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 50, "MPA GetEepromElectronicLabel return error.");
+        MPA_Free(ElabelBuffer);
+        ElabelBuffer = NULL;
+        return RetVal;
+    }
+    
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Elabel, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length), (OSP_U8 *)ElabelBuffer, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length));
+    
+    MPA_Free(ElabelBuffer);
+    ElabelBuffer = NULL;
+    return RetVal;
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetElectronicLabel
+ *   : õӱǩ
+ *   : EnclAddr  豸ַϢ
+ *             DriverId        豸idϢ
+ *             Elabel[DRV_ELABLE_LEN]  ӱǩ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetElectronicLabel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Elabel, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 *ElabelBuffer = NULL;/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;   
+    OSP_U32 FruId = DAL_FRU_ID(DriverId);
+    if ((NULL == EnclAddr) || (NULL == Elabel) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 51, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Elabel, Length);
+        return DRV_RETURN_ERROR;
+    }
+    
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    /* BEGIN: Added by shufan 00204084, 2014/9/1  ⵥ:c02, ޸ԭ:12g hds */
+    if (TRUE == MPA_If12gHdsCtrlBoardId(MpaAddr->DevFrame, FruId))
+    {
+        return MPA_Set12gHdsCommonInfo((DAL_MPA_ADDR_S *)EnclAddr,
+                                        DriverId,//עu64 driver id
+                                        SAS_12G_CMD_SET_CTRL_ELABLE,
+                                        (OSP_VOID *)Elabel, 
+                                        DRV_ELABLE_LEN);
+    }
+    /* END: Added by shufan 00204084, 2014/9/1  ⵥ:c02 */
+
+    
+    ElabelBuffer = (OSP_S8 *)MPA_Malloc(DRV_ELABLE_LEN);
+    if(NULL == ElabelBuffer)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 52, "MPA malloc memory failed.");
+        return DRV_RETURN_ERROR;
+    }
+    OSAL_MemSet_s(ElabelBuffer, DRV_ELABLE_LEN, 0, DRV_ELABLE_LEN);
+    OSAL_MemCpy_s((OSP_U8 *)ElabelBuffer, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length), (OSP_U8 *)Elabel, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length));
+
+    MpaCmd.Cmd = DRV_CMD_ELABEL_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_ELABLE_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)ElabelBuffer, (OSP_VOID *)EnclAddr);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 53, "MPA SetELabel return error %d.", RetVal);
+    }
+    
+    MPA_Free(ElabelBuffer);
+    ElabelBuffer = NULL;
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBackBoardMac
+ *   : ȡmac
+ *   : EnclAddr  豸ַϢ
+ *             DriverId        豸idϢ
+ *             Mac  mac
+ *             Length mac
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131016
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBackBoardMac(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Mac, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 MacBuffer[DRV_MAC_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Mac) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 54, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Mac, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_MAC_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_MAC_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_MAC;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)MacBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 55, "MPA GetBackBoardMac return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Mac, (OSP_U32)min(DRV_MAC_LEN, (OSP_S32)Length), (OSP_U8 *)MacBuffer, (OSP_U32)min(DRV_MAC_LEN, (OSP_S32)Length));
+    return RetVal;
+       
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBackBoardMac
+ *   : mac
+ *   : EnclAddr  豸ַϢ
+ *             DriverId        豸idϢ
+ *             Mac  mac
+ *             Length mac
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131016
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBackBoardMac(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Mac, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Mac) || (DRV_MAC_LEN != Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 56, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Mac, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_MAC_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_MAC_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_MAC;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Mac, (OSP_VOID *)NULL);
+  
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBackBoardSN
+ *   : ȡSN
+ *   : EnclAddr  豸ַϢ
+ *             DriverId        豸idϢ
+ *             Sn  sn
+ *             Length snݳ
+ *   : Sn[DRV_SN_LEN]  sn
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131016
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBackBoardSN(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Sn, OSP_U32 Length)
+{
+#ifndef DRV_SAS_SN_GET_LEN
+#define DRV_SAS_SN_GET_LEN 30
+#endif
+
+    MPA_CMD_INFO_S MpaCmd;
+    /*sesϴѯsnӿڷ30ֽڣҪضϣֱӿڴ*/
+    OSP_S8 TmpSn[DRV_SAS_SN_GET_LEN] = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Sn) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 57, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Sn, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SN_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_SN_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_SN;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TmpSn);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 58, "MPA GetBackBoardSn return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Sn, (OSP_U32)min(DRV_SN_LEN, (OSP_S32)Length), (OSP_U8 *)TmpSn, (OSP_U32)min(DRV_SN_LEN, (OSP_S32)Length));
+    return RetVal;
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBackBoardSN
+ *   : SN
+ *   : EnclAddr  豸ַϢ
+ *             DriverId        豸idϢ
+ *             Sn  sn
+ *             Length snݳ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131016
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBackBoardSN(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Sn, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 SnBuf[DRV_SN_LEN] = {0};
+
+    if ((NULL == EnclAddr) || (NULL == Sn) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 59, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Sn, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SN_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_SN_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_SN;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    OSAL_MemCpy_s((OSP_U8 *)SnBuf, (OSP_U32)min(DRV_SN_LEN, (OSP_S32)Length), (OSP_U8 *)Sn, (OSP_U32)min(DRV_SN_LEN, (OSP_S32)Length));
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)SnBuf, (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBackBoardLicense
+ *   : ѯlicense
+ *   : EnclAddr  豸ַϢ
+ *             DriverId        豸idϢ
+ *             License  license
+ *             Length 
+ *   : License[DRV_LISENCE_LEN]  license
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBackBoardLicense(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *License, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 *LicenseBuffer = NULL;/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == License) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 60, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, License, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_LISENCE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_LISENCE_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_LICENSE;
+    MpaCmd.WtRd = MPA_READ;
+
+    LicenseBuffer = (OSP_S8 *)MPA_Malloc(DRV_LISENCE_LEN);
+    if (NULL == LicenseBuffer)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 61, "MPA malloc memory failed.");
+        return RetVal;
+    }
+    OSAL_MemSet_s(LicenseBuffer, DRV_LISENCE_LEN, 0, DRV_LISENCE_LEN);
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)LicenseBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 62, "MPA GetLicense return error.");
+        MPA_Free(LicenseBuffer);
+        LicenseBuffer = NULL;
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)License, (OSP_U32)min(DRV_LISENCE_LEN, (OSP_S32)Length), (OSP_U8 *)LicenseBuffer, (OSP_U32)min(DRV_LISENCE_LEN, (OSP_S32)Length));
+    
+    MPA_Free(LicenseBuffer);
+    LicenseBuffer = NULL;    
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBackBoardLicense
+ *   : license
+ *   : EnclAddr  豸ַϢ
+ *             DriverId        豸idϢ
+ *             License  license
+ *             Length   license
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBackBoardLicense(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *License, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 *LicenseBuffer = NULL;/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == License) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 63, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, License, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    LicenseBuffer = (OSP_S8 *)MPA_Malloc(DRV_LISENCE_LEN);
+    if (NULL == LicenseBuffer)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 64, "MPA malloc memory failed.");
+        return RetVal;
+    }
+    OSAL_MemSet_s(LicenseBuffer, DRV_LISENCE_LEN, 0, DRV_LISENCE_LEN);
+    OSAL_MemCpy_s((OSP_U8 *)LicenseBuffer, (OSP_U32)min(DRV_LISENCE_LEN, (OSP_S32)Length), (OSP_U8 *)License, (OSP_U32)min(DRV_LISENCE_LEN, (OSP_S32)Length));
+    
+    MpaCmd.Cmd = DRV_CMD_LISENCE_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_LISENCE_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_LICENSE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)LicenseBuffer, (OSP_VOID *)NULL);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 65, "MPA SetLicense return error %d.", RetVal);
+    }
+    
+    MPA_Free(LicenseBuffer);
+    LicenseBuffer = NULL;
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBackBoardBrand
+ *   : ȡƷƷ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Brand  ƷϢ
+ *             Length ƷϢ
+ *   : Brand  ƷϢ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBackBoardBrand(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Brand, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 BrandBuffer[DRV_BRAND_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Brand) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 66, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Brand, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BRAND_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_BRAND_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_BRAND;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)BrandBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 67, "MPA GetBrand return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Brand, (OSP_U32)min(DRV_BRAND_LEN, (OSP_S32)Length), (OSP_U8 *)BrandBuffer, (OSP_U32)min(DRV_BRAND_LEN, (OSP_S32)Length));
+ 
+    return RetVal;  
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBackBoardBrand
+ *   : òƷƷ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Brand  ƷϢ
+ *             Length ƷϢ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBackBoardBrand(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Brand, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 BrandBuffer[DRV_BRAND_LEN] = {0};/*ڻMPAѯ*/
+
+    if ((NULL == EnclAddr) || (NULL == Brand) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 68, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Brand, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BRAND_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_BRAND_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_BRAND;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    OSAL_MemCpy_s((OSP_U8 *)BrandBuffer, (OSP_U32)min(DRV_BRAND_LEN, (OSP_S32)Length), (OSP_U8 *)Brand, (OSP_U32)min(DRV_BRAND_LEN, (OSP_S32)Length));
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BrandBuffer, (OSP_VOID *)NULL);
+
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetBackBoardOemBrand
+ *   : ȡOEMƷƷ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Brand  ƷϢ
+ *             Length ƷϢ
+ *   : Brand  ƷϢ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131125
+ *           : shufan 204084
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBackBoardOemBrand(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Brand, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 BrandBuffer[DRV_BRAND_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Brand) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 69, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Brand, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_OEM_BRAND_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_BRAND_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)BrandBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 70, "MPA GetOemBrand return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Brand, (OSP_U32)min(DRV_BRAND_LEN, (OSP_S32)Length), (OSP_U8 *)BrandBuffer, (OSP_U32)min(DRV_BRAND_LEN, (OSP_S32)Length));
+ 
+    return RetVal;  
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBackBoardOemBrand
+ *   : OemƷƷ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Brand  ƷϢ
+ *             Length ƷϢ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBackBoardOemBrand(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Brand, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Brand) || (DRV_BRAND_LEN != Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 71, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Brand, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_OEM_BRAND_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_BRAND_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Brand, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBackBoardModel
+ *   : ȡƷͺ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             ProModel  Ʒͺ
+ *             Length    Ʒͺų
+ *   : ProModel  Ʒͺ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBackBoardModel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *ProModel, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 ModelBuffer[DRV_PROMODEL_LEN_MAX] = {0}; /* 2014-6-24 c00221000 for DTS2014062409061 for: V1-BMC32ֽ,˴32B*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == ProModel) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 72, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, ProModel, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_PROMODEL_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_CTLB_PROMODEL_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_PROMODEL;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)ModelBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 73, "MPA GetProModel return error.");
+        return RetVal;
+    }
+
+    /* BEGIN: Added by shipin, 2016-12-26 16:19:20, ⵥ:DTS2016090111116, ޸ԭ:ƷͺȫFFEAMļ */
+    /* ֲƷͺֽΪ0xFFʱDMIؿմDMI͸EAMǷַж */
+    if(MPA_DATA_IS_INVALID8((OSP_U8)ModelBuffer[0]))
+    {
+        OSAL_MemSet_s(ModelBuffer, sizeof(ModelBuffer), 0, sizeof(ModelBuffer));
+    }
+    /* END: Added by shipin, 2016-12-26 16:19:20 */
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)ProModel, (OSP_U32)min(DRV_CTLB_PROMODEL_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)ModelBuffer, (OSP_U32)min(DRV_CTLB_PROMODEL_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+
+    }
+
+ /******************************************************************************
+ *     : MPAIntf_SetBackBoardModel
+ *   : òƷͺ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             ProModel  Ʒͺ
+ *             Length    Ʒͺų
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBackBoardModel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *ProModel, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 ModelBuf[DRV_CTLB_PROMODEL_LEN] = {0};
+
+    if ((NULL == EnclAddr) || (NULL == ProModel) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 74, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, ProModel, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_PROMODEL_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_CTLB_PROMODEL_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_PROMODEL;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    OSAL_MemCpy_s((OSP_U8 *)ModelBuf, (OSP_U32)min(DRV_CTLB_PROMODEL_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)ProModel, (OSP_U32)min(DRV_CTLB_PROMODEL_LEN, (OSP_S32)Length));
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)ModelBuf, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBackBoardOemModel
+ *   : ȡoemƷͺ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             ProModel  Ʒͺ
+ *             Length    Ʒͺų
+ *   : ProModel  Ʒͺ
+ *   ֵ  : OSP_S32
+ * ˵  : ֻv2֧
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBackBoardOemModel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *ProModel, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 ModelBuffer[DRV_PROMODEL_LEN_MAX] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == ProModel) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 75, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, ProModel, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_OEM_PROMODEL_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_CTLB_PROMODEL_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_OEM_PROMODEL;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)ModelBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 76, "MPA GetProModel return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)ProModel, (OSP_U32)min(DRV_CTLB_PROMODEL_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)ModelBuffer, (OSP_U32)min(DRV_CTLB_PROMODEL_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+
+    }
+
+ /******************************************************************************
+ *     : MPAIntf_SetBackBoardOemModel
+ *   : oemƷͺ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             ProModel  Ʒͺ
+ *             Length    Ʒͺų
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : ֻv2֧
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBackBoardOemModel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *ProModel, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 ModelBuf[DRV_CTLB_PROMODEL_LEN] = {0};
+
+    if ((NULL == EnclAddr) || (NULL == ProModel) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 77, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, ProModel, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_OEM_PROMODEL_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_CTLB_PROMODEL_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_OEM_PROMODEL;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    OSAL_MemCpy_s((OSP_U8 *)ModelBuf, (OSP_U32)min(DRV_CTLB_PROMODEL_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)ProModel, (OSP_U32)min(DRV_CTLB_PROMODEL_LEN, (OSP_S32)Length));
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)ModelBuf, (OSP_VOID *)NULL);
+
+}
+ /******************************************************************************
+ *     : MPAIntf_GetBackBoardVendor
+ *   : ȡϢ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Vendor     Ϣ
+ *             Length     Ϣ
+ *   : Vendor     Ϣ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBackBoardVendor(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Vendor, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 VendorBuffer[DRV_VENDOR_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Vendor) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 78, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Vendor, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_PROVENDOR_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_VENDOR_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_VENDOR;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VendorBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 79, "MPA GetVendor return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Vendor, (OSP_U32)min(DRV_VENDOR_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VendorBuffer, (OSP_U32)min(DRV_VENDOR_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBackBoardVendor
+ *   : óϢ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Vendor     Ϣ
+ *             Length     Ϣ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBackBoardVendor(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Vendor, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 VendorBuf[DRV_VENDOR_LEN] = {0};
+
+    if ((NULL == EnclAddr) || (NULL == Vendor) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 80, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Vendor, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_PROVENDOR_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_VENDOR_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_VENDOR;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    OSAL_MemCpy_s((OSP_U8 *)VendorBuf, (OSP_U32)min(DRV_VENDOR_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)Vendor, (OSP_U32)min(DRV_VENDOR_LEN, (OSP_S32)Length));
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)VendorBuf, (OSP_VOID *)NULL);
+
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetBackBoardOemVendor
+ *   : ȡOEMϢ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Vendor     Ϣ
+ *             Length     Ϣ
+ *   : Vendor     Ϣ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131125
+ *           : shufan 204084
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBackBoardOemVendor(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Vendor, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 VendorBuffer[DRV_VENDOR_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Vendor) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 81, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Vendor, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_OEM_VENDOR_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_VENDOR_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VendorBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 82, "MPA GetOemVendor return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Vendor, (OSP_U32)min(DRV_VENDOR_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VendorBuffer, (OSP_U32)min(DRV_VENDOR_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBackBoardOemVendor
+ *   : OEMϢ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Vendor     Ϣ
+ *             Length     Ϣ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131125
+ *           : shufan 204084
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBackBoardOemVendor(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Vendor, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Vendor) || (DRV_VENDOR_LEN != Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 83, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Vendor, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_OEM_VENDOR_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_VENDOR_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Vendor, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBackBoardLogo
+ *   : ѯ־Ϣ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Logo  ־Ϣ
+ *             Length ־Ϣ
+ *   : Logo  ־Ϣ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBackBoardLogo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Logo, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 LogoBuffer[DRV_LOGO_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Logo) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 84, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Logo, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_PROLOGO_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_LOGO_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_LOGO;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)LogoBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 85, "MPA GetLogo return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Logo, (OSP_U32)min(DRV_LOGO_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)LogoBuffer, (OSP_U32)min(DRV_LOGO_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBackBoardLogo
+ *   : ñ־Ϣ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Logo  ־Ϣ
+ *             Length ־Ϣ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBackBoardLogo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Logo, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 LogoBuf[DRV_LOGO_LEN] = {0};
+
+    if ((NULL == EnclAddr) || (NULL == Logo) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 86, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Logo, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_PROLOGO_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_LOGO_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_LOGO;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    OSAL_MemCpy_s((OSP_U8 *)LogoBuf, (OSP_U32)min(DRV_LOGO_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)Logo, (OSP_U32)min(DRV_LOGO_LEN, (OSP_S32)Length));
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)LogoBuf, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBackboardESN
+ *   : ѯESN
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Esn      ESNϢ
+ *             Length   ESNϢ
+ *   : Esn      ESNϢ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBackboardESN(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Esn, OSP_U32 Length)
+{
+
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 EsnBuffer[DRV_ESN_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Esn) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 87, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Esn, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_ESN_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_ESN_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)EsnBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 88, "MPA GetBackboardESN return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Esn, (OSP_U32)min(DRV_ESN_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)EsnBuffer, (OSP_U32)min(DRV_ESN_LEN, (OSP_S32)Length));
+   
+   
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBackboardESN
+ *   : ESN
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Esn      ESNϢ
+ *             Length   ESNϢ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBackboardESN(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Esn, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 EsnBuf[DRV_ESN_LEN] = {0};
+
+    if ((NULL == EnclAddr) || (NULL == Esn) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 89, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Esn, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_ESN_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_ESN_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    OSAL_MemCpy_s((OSP_U8 *)EsnBuf, (OSP_U32)min(DRV_ESN_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)Esn, (OSP_U32)min(DRV_ESN_LEN, (OSP_S32)Length));
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)EsnBuf, (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBackboardSpec
+ *   : ѯSpec
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Spec      SpecϢ
+ *             Length   SpecϢ
+ *   : Spec      SpecϢ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20141213
+ *           : hulinhui 00289393
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBackboardSpec(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Spec, OSP_U32 Length)
+{
+
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 SpecBuffer[MPA_LENTH_16] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Spec) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 87, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Spec, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SPEC_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_LENTH_16;
+    MpaCmd.SdrType = PRODUCE_INFO_SPEC;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)SpecBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 88, "MPA GetBackboardSpec return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Spec, (OSP_U32)min(MPA_LENTH_16, (OSP_S32)Length), 
+        (OSP_U8 *)SpecBuffer, (OSP_U32)min(MPA_LENTH_16, (OSP_S32)Length));
+   
+   
+    return RetVal;
+}
+ /******************************************************************************
+ *     : MPAIntf_SetBackboardSpec
+ *   : Spec
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Spec      SpecϢ
+ *             Length   SpecϢ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20141213
+ *           : hulinhui 00289393
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBackboardSpec(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Spec, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 SpecBuf[MPA_LENTH_16] = {0};
+
+    if ((NULL == EnclAddr) || (NULL == Spec) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 89, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Spec, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SPEC_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_LENTH_16;
+    MpaCmd.SdrType = PRODUCE_INFO_SPEC;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    OSAL_MemCpy_s((OSP_U8 *)SpecBuf, (OSP_U32)min(MPA_LENTH_16, (OSP_S32)Length), 
+        (OSP_U8 *)Spec, (OSP_U32)min(MPA_LENTH_16, (OSP_S32)Length));
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)SpecBuf, (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBackboardFrameInfo
+ *   : ѯFrameInfo
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             FrameInfo      FrameInfoϢ
+ *             Length   FrameInfoϢ
+ *   : FrameInfo      FrameInfoϢ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20141213
+ *           : hulinhui 00289393
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBackboardFrameInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *FrameInfo, OSP_U32 Length)
+{
+
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 FrameInfoBuffer[MPA_LENTH_32] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == FrameInfo) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 87, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FrameInfo, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_FRAMEINFO_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_LENTH_32;
+    MpaCmd.SdrType = PRODUCE_INFO_FRAMEINFO;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)FrameInfoBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 88, "MPA GetBackboardFrameInfo return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)FrameInfo, (OSP_U32)min(MPA_LENTH_32, (OSP_S32)Length), 
+        (OSP_U8 *)FrameInfoBuffer, (OSP_U32)min(MPA_LENTH_32, (OSP_S32)Length));
+   
+   
+    return RetVal;
+}
+ /******************************************************************************
+ *     : MPAIntf_SetBackboardFrameInfo
+ *   : FrameInfo
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             FrameInfo  FrameInfoϢ
+ *             Length     FrameInfoϢ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20141213
+ *           : hulinhui 00289393
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBackboardFrameInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *FrameInfo, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 FrameInfoBuf[MPA_LENTH_32] = {0};
+
+    if ((NULL == EnclAddr) || (NULL == FrameInfo) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 89, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FrameInfo, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_FRAMEINFO_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_LENTH_32;
+    MpaCmd.SdrType = PRODUCE_INFO_FRAMEINFO;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    OSAL_MemCpy_s((OSP_U8 *)FrameInfoBuf, (OSP_U32)min(MPA_LENTH_32, (OSP_S32)Length), 
+        (OSP_U8 *)FrameInfo, (OSP_U32)min(MPA_LENTH_32, (OSP_S32)Length));
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)FrameInfoBuf, (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerConfig
+ *   : ѯPowerConfig
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                   豸idϢ
+ *             PowerConfig        PowerConfigϢ
+ *             Length             PowerConfigϢ
+ *   : PowerConfig        PowerConfigϢ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20140105
+ *           : hulinhui 00289393
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerConfig(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *PowerConfig, OSP_U32 Length)
+{
+
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 PowerConfigBuffer[MPA_LENTH_128] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == PowerConfig) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 87, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, PowerConfig, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_POWER_CONFIG;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_LENTH_128;
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_POWERCONFIG;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PowerConfigBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 88, "MPA GetPowerConfig return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)PowerConfig, (OSP_U32)min(MPA_LENTH_128, (OSP_S32)Length), 
+        (OSP_U8 *)PowerConfigBuffer, (OSP_U32)min(MPA_LENTH_128, (OSP_S32)Length));
+   
+    return RetVal;
+}
+ /******************************************************************************
+ *     : MPAIntf_SetPowerConfig
+ *   : PowerConfig
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                   豸idϢ
+ *             PowerConfig                PowerConfigϢ
+ *             Length                     PowerConfigϢ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20140105
+ *           : hulinhui 00289393
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetPowerConfig(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *PowerConfig, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 PowerConfigBuf[MPA_LENTH_128] = {0};
+
+    if ((NULL == EnclAddr) || (NULL == PowerConfig) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 89, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, PowerConfig, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_POWER_CONFIG;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_LENTH_128;
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_POWERCONFIG;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    OSAL_MemCpy_s((OSP_U8 *)PowerConfigBuf, (OSP_U32)min(MPA_LENTH_128, (OSP_S32)Length), 
+        (OSP_U8 *)PowerConfig, (OSP_U32)min(MPA_LENTH_128, (OSP_S32)Length));
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)PowerConfigBuf, (OSP_VOID *)NULL);
+}
+
+/*ðȫ*/
+ /******************************************************************************
+ *     : MPAIntf_SetBackBoardPassword
+ *   : ðȫ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Secret     
+ *             Length     
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013119
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBackBoardPassword(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Secret, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Secret) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 90, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Secret, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_PASSWORD_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = (OSP_U16)Length;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Secret, (OSP_VOID *)NULL);
+    
+}
+
+/******************************************************************************
+*     : MPAIntf_SetUserAndPassword
+*   : ûӿ
+*   : EnclAddr 豸ַϢ 
+*             DriverId  豸idϢ      
+*             UserInfo  ûϢ,ϵͳԱû,ϵͳԱ,
+*                       ܶ
+*             Length ûϢ    
+*   : 
+*   ֵ  : DRV_RETURN_OK 
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2014124
+*           : jiangfanlu 00101148
+*    ޸   : ɺ 
+*                 CR-01592961 CR-01592961-OceanStor 5800 V3 V300R002C00-ϵͳĬ
+*                 ûadminƳȲ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetUserAndPassword(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *UserInfo, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U32 DataOut;
+
+    (void)DriverId;
+
+    if ((NULL == EnclAddr) || (NULL == UserInfo) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 90, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, UserInfo, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_USER_AND_PASSWORD;
+    MpaCmd.FruId = 0;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = (OSP_U16)Length;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /* ·ĳͨDataOutݵDEV_Intf */
+    DataOut = Length;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)UserInfo, (OSP_VOID *)&DataOut);
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_ClearBackBoardPassword
+ *   : ȫ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013119
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_ClearBackBoardPassword(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*ԭdevsesȫĲ*/
+    OSP_U8 DataIn[2] = {0x35, 0x1};
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 91, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_DISABLEPHY_PARAM_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DataIn);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
+    
+}
+ /******************************************************************************
+ *     : MPAIntf_GetBackBoardNebs
+ *   : ѯNebs־
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Nebs      NebsϢ
+ *   : Nebs      NebsϢ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131021
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBackBoardNebs(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Nebs)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Nebs))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 92, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Nebs);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_NEBS_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Nebs);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBackBoardNebs
+ *   : Nebs־
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Nebs      NebsϢ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131021
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBackBoardNebs(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Nebs)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 93, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 94, "MPA sets nebs id(0x%llx), value(%d).", DriverId, Nebs);
+    MpaCmd.Cmd = DRV_CMD_NEBS_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Nebs, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBackBoardJbodFlag
+ *   : ѯjbod־
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             JbodFlag                   jbod־
+ *   : JbodFlag                   jbod־
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBackBoardJbodFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *JbodFlag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == JbodFlag))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 95, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, JbodFlag);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_JBOD_FLAG_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)JbodFlag);    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBackBoardJbodFlag
+ *   : jbod־
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             JbodFlag                   jbod־
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131017
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBackBoardJbodFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 JbodFlag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 96, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 97, "MPA sets jbod flag, id(0x%llx), value(%d).", DriverId, JbodFlag);
+    MpaCmd.Cmd = DRV_CMD_JBOD_FLAG_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&JbodFlag, (OSP_VOID *)NULL);    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBackBoardEthConfig
+ *   : ȡģʽ
+ *   : EnclAddr      豸ַϢ
+ *             DriverId      豸idϢ
+ *             Config        Ϣ
+ *   : Config        Ϣ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131125
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBackBoardEthConfig(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Config)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Config))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 98, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Config);
+        return DRV_RETURN_ERROR;
+    }
+
+    //4 ֧3Ŀǰdmiֻʹ1ʹʱҪʹڲӿת
+    MpaCmd.Cmd = DRV_CMD_BB_EEPROM_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_GET_PROD_FLAG;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Config);    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBackBoardEthConfig
+ *   : ģʽ
+ *   : EnclAddr      豸ַϢ
+ *             DriverId      豸idϢ
+ *             Config        Ϣ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : ֻ֧DOUBLE_PORT_CONNECTSINGLE_PORT_CONNECT
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131125
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBackBoardEthConfig(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 Config)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 99, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 100, "MPA sets backboard eth config, id(0x%llx), value(0x%x).", DriverId, Config);
+    MpaCmd.Cmd = DRV_CMD_BB_EEPROM_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_PROD_FLAG;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Config, (OSP_VOID *)NULL);    
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetFrameMode
+ *   : ȡ
+ *   : EnclAddr  豸ַϢ
+ *             FrameMode 
+ *   : FrameMode 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131016
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFrameMode(OSP_VOID *EnclAddr, DRV_FRAME_MODEL_E *FrameMode)
+{
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    DRV_CMD_S DevCmd;
+    DRV_ADDR_DOWNINFO_S DevAddr;
+    OSP_U8 FrameModBuffer = 0;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == FrameMode))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 101, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, FrameMode);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    
+    /*BMCʼʱbspȡ汾ţΪ*/
+    if (DAL_MNGTTYPE_BMC == MpaAddr->McuType
+          || (DAL_MNGTTYPE_IP_BMC == MpaAddr->McuType))
+    {
+        if ((OSP_U8)TRUE == MPA_GetBmcIpmiModel())
+        {
+            return MPA_GetBspFrameModel(FrameMode);
+        }
+        /*v1 bmcֱӷ*/
+        else
+        {
+            *FrameMode = (DRV_FRAME_MODEL_E)DRV_FRAMEMODEL_CTRL_BMC;
+            return DRV_RETURN_OK;
+        }
+    }
+    else
+    {
+        DevCmd.uiNetFn = 0;
+        DevCmd.uiCmd = DRV_CMD_FRAME_MODEL_GET;
+        DevCmd.ucId = DRV_ID_FRAME_TYPE_GET;
+
+        /*sas sesƿͼһü֧*/
+        if (DEVICE_SAS_SES == MpaAddr->McuType)
+        {
+            DevAddr.uiType = DEVICE_SAS_SES;
+            DevAddr.uiCtlFlag = IS_CONTRLBOARD_NO;
+        }
+        else if (DEVICE_FC_SES == MpaAddr->McuType)
+        {
+            DevAddr.uiType = DEVICE_FC_SES;
+            DevAddr.uiCtlFlag = IS_CONTRLBOARD_NO;
+        }
+        else
+        {
+            DRV_MPA_TRACE(DRV_LOG_WARN, 102, "MPA gets frame mode failed, mcu type is %x.", MpaAddr->McuType);
+            return DRV_RETURN_ERROR;
+        }
+        
+        OSAL_MemCpy_s((OSP_U8 *)&DevAddr.stDevAddr, sizeof(DevAddr.stDevAddr), (OSP_U8 *)&MpaAddr->DevAddr, sizeof(DevAddr.stDevAddr));       
+        RetVal = DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&FrameModBuffer);
+       *FrameMode  = (DRV_FRAME_MODEL_E)FrameModBuffer;
+        return RetVal;
+            
+    }
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetIntfCardType
+ *   : ȡӿڿ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             type     ӿڿ 
+ *   : type     ӿڿ 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131016
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetIntfCardType(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *type)
+{
+
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == type))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 103, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, type);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_INTFCARD_TYPE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)type);
+    
+}                
+
+ /******************************************************************************
+ *     : MPAIntf_WriteKBox
+ *   : ϻд
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             KBoxData  
+ *             Length    ݳ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131226
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_WriteKBox(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *KBoxData, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    (OSP_VOID)Length;
+    
+    if ((NULL == EnclAddr) || (NULL == KBoxData))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 104, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, KBoxData);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_WRITE_DATA_TO_KBOX;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_ELABLE_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)KBoxData, (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_ReadKBox
+ *   :  ϻӶ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             KBoxData  
+ *             Length    ݳ
+ *   : KBoxData  
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131226
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_ReadKBox(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *KBoxData, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 *KBoxDataBuffer = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == KBoxData) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 105, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, KBoxData, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_READ_DATA_FROM_KBOX;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_ELABLE_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_RAM_ELABEL;
+    MpaCmd.WtRd = MPA_READ;
+
+    KBoxDataBuffer = (OSP_S8 *)MPA_Malloc(DRV_ELABLE_LEN);
+    if(NULL == KBoxDataBuffer)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 106, "MPA malloc memory failed.");
+        return RetVal;
+    }
+    OSAL_MemSet_s(KBoxDataBuffer, DRV_ELABLE_LEN, 0, DRV_ELABLE_LEN);
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)KBoxDataBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 107, "MPA ReadKBox return error.");
+        MPA_Free(KBoxDataBuffer);
+        KBoxDataBuffer = NULL;
+        return RetVal;
+    }
+    
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)KBoxData, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)KBoxDataBuffer, (OSP_U32)min(DRV_ELABLE_LEN, (OSP_S32)Length));
+    
+    MPA_Free(KBoxDataBuffer);
+    KBoxDataBuffer = NULL;
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateMgmtPrepare
+ *   : оƬ step1׼
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131016
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateMgmtPrepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 108, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    /* BEGIN: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
+    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
+    DRV_MPA_TRACE(DRV_LOG_INFO, 109, "MPA prepares to update mgmt chip,id(0x%llx),mcutype(0x%x),devframe(0x%x),device:%d %d %d %d.", 
+                  DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->McuType,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, 
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiHostId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiChannelId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiScsiId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiLunId);
+    /* END: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
+    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
+    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_MGMT;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+
+    /* V2-BMCBMCCPLDǰFruId0x200SdrType*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = SDR_TYPE_BMC;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_SMM_A_BMC;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_SMM_B_BMC;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_FAN_CTRLBOARD, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_BMC;
+        }
+        //MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
+     }
+    
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateCpldPrepare
+ *   : cpldһ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131030
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateCpldPrepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_U8 CpldId = 0;/*Ϊһò·SES
+                                    ֧BufferIn Ϊյʧ*/
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 110, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    
+    /* BEGIN: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
+    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
+    DRV_MPA_TRACE(DRV_LOG_INFO, 111, "MPA prepares to update cpld, id(0x%llx),mcutype(0x%x),devframe(0x%x),device:%d %d %d %d.", 
+                  DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->McuType,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, 
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiHostId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiChannelId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiScsiId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiLunId);
+    /* END: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
+    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
+    
+    /* BEGIN: Added by shufan 00204084, 2014/10/20  ⵥ:c02, ޸ԭ:12g hds */
+    if (TRUE == MPA_If12gHdsCtrlBoardId(MpaAddr->DevFrame, (OSP_U32)DAL_FRU_ID(DriverId)))
+    {
+        return MPA_Set12gHdsCommonInfo((DAL_MPA_ADDR_S *)EnclAddr,
+                                        DriverId,//עu64 driver id
+                                        SAS_12G_CMD_SET_CTRL_CPLD_PRE_UPDATE,
+                                        &CpldId,
+                                        1);
+    }
+/* END: Added by qintianyi 90005776, 2014/8/5  ⵥ:c02 */
+
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_CPLD;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+
+    /* V2-BMCBMCCPLDǰFruId0x200SdrType*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = SDR_TYPE_CPLD;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_SMM_A_CPLD;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_SMM_B_CPLD;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_FAN_CTRLBOARD, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_CPLD;
+        }
+        else if (DAL_FRU_LOGIC_TYPE_MATCH(DAL_FRU_ID_TO_LOGIC_TYPE(MpaCmd.FruId), DMI_LOGIC_FRU_SHARE_IOCARD))
+        {
+            MpaCmd.SdrType = UPGRADE_TYPE_BIGCARD_0_CPLD + DAL_FRU_ID_TO_SLOT(MpaCmd.FruId);
+        }
+
+        //MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
+    }
+    
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+
+}
+
+
+/******************************************************************************
+ *     : MPAIntf_UpdateFpgaPrepare
+ *   : FPGAһ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131030
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateFpgaPrepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 112, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 113, "MPA prepares to update fpga, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_FPGA;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateBbuPrepare
+ *   : BBUһ׼
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131119
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateBbuPrepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 114, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 115, "MPA prepares to update bbu, id(0x%llx), devframe(0x%x).", DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_BBU;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+
+    /* V2-BMCBBUFruIdת0x200SdrType*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = SDR_TYPE_BBU0;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 1) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_BBU1;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 2) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_BBU2;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 3) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_BBU3;
+        }
+
+        //MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
+    }    
+    
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+*     : MPAIntf_FruidToUpgradeType
+*   : Fruid SDR typeתĿǰʵPOWER
+*   : FruId
+*   : 
+*   ֵ  : BMC ʹõ  SdrType
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2017315
+*           : limingjiang/00400933
+*    ޸   : AR-0000261890-003-007DMIֵ֧ԴFWܡ
+******************************************************************************/
+OSP_U8 MPAIntf_FruidToUpgradeType(OSP_U32 FruId)
+{
+    OSP_U8 SdrType = UPGRADE_TYPE_INVALID;
+    if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_POWER, 0) == FruId)
+    {
+        SdrType = UPGRADE_TYPE_POWER_0;
+    }
+    else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_POWER, 1) == FruId)
+    {
+         SdrType = UPGRADE_TYPE_POWER_1;
+    }
+    else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_POWER, 2) == FruId)
+    {
+         SdrType = UPGRADE_TYPE_POWER_2;
+    }
+    else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_POWER, 3) == FruId)
+    {
+         SdrType = UPGRADE_TYPE_POWER_3;
+    }
+    return SdrType;
+}
+
+/******************************************************************************
+*     : MPAIntf_UpdatePowerPrepare
+*   : POWER һ׼
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2017315
+*           : limingjiang/00400933
+*    ޸   : AR-0000261890-003-007DMIֵ֧ԴFWܡ
+******************************************************************************/
+OSP_S32 MPAIntf_UpdatePowerPrepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 114, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_POWER;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+
+    /* V2-BMCPOWERFruIdתSdrType*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        MpaCmd.SdrType = MPAIntf_FruidToUpgradeType(MpaCmd.FruId);
+    }    
+    
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+    DRV_MPA_TRACE(DRV_LOG_INFO, 115,
+        "MPA prepares to update power, id(0x%llx), devframe(0x%x) ret:%d.",
+        DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, RetVal);
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdatePCIE8796Prepare
+ *   : ׼8796
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201437
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdatePCIE8796Prepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 116, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 117, "MPA prepares to update 8796, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_CONFIGCHIP;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = UPGRADE_TYPE_8796;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+*     : MPAIntf_UpdateFanCtrlPrepare
+*   : FANCTL һ׼
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2017325
+*           : limingjiang/00400933
+*    ޸   :DMIַ֧ȿưFWܡ
+******************************************************************************/
+OSP_S32 MPAIntf_UpdateFanCtrlPrepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 114, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_FANCTRL;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_BMC; /* BMC̶ʹôֵʶȿư*/
+    
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+    DRV_MPA_TRACE(DRV_LOG_INFO, 115,
+        "MPA prepares to update fanctrl, id(0x%llx), devframe(0x%x) ret:%d.",
+        DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, RetVal);
+    return RetVal;
+}
+
+/******************************************************************************
+*     : MPAIntf_UpdateVrmPrepare
+*   : VRM step3:ʼ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ  :
+* 1.    : 2017329
+*       : limingjiang/00400933
+*   ޸: ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_UpdateVrmPrepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 164, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_VRM;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = UPGRADE_TYPE_VR;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+*     : MPAIntf_UpdateConfigChipPrepare
+*   : һ׼оƬ8796724638717DMA retimer
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+* 1.    : 2014112
+*       : 淫
+*   ޸: ɺ
+* 2.    : 2017329
+*       : limingjiang/00400933
+*   ޸: ֧VRM
+******************************************************************************/
+OSP_S32 MPAIntf_UpdateConfigChipPrepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+
+    OSP_U8 DeviceId = DAL_ELEMENT_NO(DriverId);
+
+    /*תid·*/
+    switch (DeviceId)
+    {
+        case 0:
+        case 1:
+            return MPAIntf_UpdatePCIE8796Prepare(EnclAddr, DriverId);
+        case 2:
+        case 3:
+            return MPAIntf_UpdatePCIE8717Prepare(EnclAddr, DriverId - 2);
+        case 4:
+            return MPAIntf_UpdateDmaRetimerPrepare(EnclAddr, DriverId - 4);
+        case 5:
+        case 6:
+        case 7:
+        case 8:
+        case 9:
+        case 10:
+        case 11:
+        case 12:
+        case 13:
+        case 14:
+            /* 5~14ΪVRоƬdeviceID */
+            return MPAIntf_UpdateVrmPrepare(EnclAddr, DriverId - 5);
+        default:
+            return RETURN_INVALID;
+    }
+}
+
+/******************************************************************************
+ *     : MPAIntf_UpdateSATA72463Prepare
+ *   : SATA72463һ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014111
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateSATA72463Prepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 118, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 119, "MPA prepares to update sata72463, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_SATA72463;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = UPGRADE_TYPE_SATA72463;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+
+}
+
+
+/******************************************************************************
+ *     : MPAIntf_UpdatePCIE8717Prepare
+ *   : PCIE8717һ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014112
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdatePCIE8717Prepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 120, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 121, "MPA prepares to update pcie8717, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_PCIE8717;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = UPGRADE_TYPE_PCIE8717;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+
+}
+
+
+/******************************************************************************
+ *     : MPAIntf_UpdateDmaRetimerPrepare
+ *   : DmaRetimerһ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014112
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateDmaRetimerPrepare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 122, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 123, "MPA prepares to update dma retimer, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_PRE_DMARETIMER;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = UPGRADE_TYPE_DMARETIMER;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateMgmtSendFile
+ *   : оƬ step2:
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Data      ļָ
+ *             DataLen   ļ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131016
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateMgmtSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data, OSP_U32 DataLen)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    (OSP_VOID)DataLen;
+
+    if ((NULL == EnclAddr) || (NULL == Data))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 124, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    
+    /* BEGIN: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
+    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */ 
+    DRV_MPA_TRACE(DRV_LOG_INFO, 125, "MPA sends update file to mgmt chip(%s), id(0x%llx),mcutype(0x%x),devframe(0x%x),device:%d %d %d %d.",
+                   Data, DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->McuType,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, 
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiHostId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiChannelId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiScsiId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiLunId);
+    /* END: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
+    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
+
+    /*Begin: add by q00223453 2016.06.20 reason:ģ̼ʧ*/
+    RetVal = MPA_CheckSimUpdateFailFlag(EnclAddr,DriverId,FWTYPE_MGT);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return DRV_RETURN_ERROR;
+    }
+    /* End: add by q00223453 */
+    
+    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_MGMT;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_UPGRADE_LEN;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /* V2-BMCBMCCPLDǰFruId0x200SdrType*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = SDR_TYPE_BMC;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_SMM_A_BMC;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_SMM_B_BMC;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_FAN_CTRLBOARD, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_BMC;
+        }
+
+        MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
+
+        /*2016-1-28 c00221000 for DTS2016011108932 begin: ڴ,readʧ,һ*/
+        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
+        if (MPA_INNER_ERROR_READ == RetVal)
+        {
+            DRV_MPA_TRACE(DRV_LOG_WARN, 1879, "Mpa will send bmc upgrade file again.");
+            RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
+            if (MPA_INNER_ERROR_READ == RetVal)
+            {
+                DRV_MPA_TRACE(DRV_LOG_WARN, 1879, "Mpa resend bmc upgrade file failed.");
+                return DRV_RETURN_ERROR;
+            }
+        }
+        return RetVal;        
+        /*2016-1-28 c00221000 for DTS2016011108932 end*/
+    }
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateCpldSendFile
+ *   : cpld2
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId  ID ͡FRUIDDEVICE IDϢ   
+ *             Data      ļָ
+ *             DataLen   ļ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131030
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateCpldSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data, OSP_U32 DataLen)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    (OSP_VOID)DataLen;
+
+    if ((NULL == EnclAddr) || (NULL == Data))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 126, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    
+    /* BEGIN: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
+    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
+    DRV_MPA_TRACE(DRV_LOG_INFO, 127, "MPA sends update file to cpld(%s),id(0x%llx),mcutype(0x%x),devframe(0x%x),device:%d %d %d %d.", 
+                   Data, DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->McuType,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, 
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiHostId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiChannelId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiScsiId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiLunId);
+    /* END: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
+    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
+
+    /*Begin: add by q00223453 2016.06.20 reason:ģ̼ʧ*/
+    RetVal = MPA_CheckSimUpdateFailFlag(EnclAddr,DriverId,FWTYPE_CPLD);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return DRV_RETURN_ERROR;
+    }
+    /* End: add by q00223453 */
+    
+    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_CPLD;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_UPGRADE_LEN;
+
+    /* V2-BMCBMCCPLDǰFruId0x200SdrType*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = SDR_TYPE_CPLD;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_SMM_A_CPLD;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_SMM_B_CPLD;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_FAN_CTRLBOARD, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_CPLD;
+        }
+        else if (DAL_FRU_LOGIC_TYPE_MATCH(DAL_FRU_ID_TO_LOGIC_TYPE(MpaCmd.FruId), DMI_LOGIC_FRU_SHARE_IOCARD))
+        {
+            MpaCmd.SdrType = UPGRADE_TYPE_BIGCARD_0_CPLD + DAL_FRU_ID_TO_SLOT(MpaCmd.FruId);
+        }
+
+        MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
+    }
+    
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
+
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateFpgaSendFile
+ *   : FPGA2
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Data      ļָ
+ *             DataLen   ļ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131030
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateFpgaSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data, OSP_U32 DataLen)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    (OSP_VOID)DataLen;
+
+    if ((NULL == EnclAddr) || (NULL == Data))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 128, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
+        return DRV_RETURN_ERROR;
+    }
+
+    /*Begin: add by q00223453 2016.06.20 reason:ģ̼ʧ*/
+    RetVal = MPA_CheckSimUpdateFailFlag(EnclAddr,DriverId,FWTYPE_MGT);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return DRV_RETURN_ERROR;
+    }
+    /* End: add by q00223453 */
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 129, "MPA sends update file to fpga, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_FPGA;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_UPGRADE_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateBbuSendFile
+ *   : BBUڶļ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Data      ļ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131119
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateBbuSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Data))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 130, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
+        return DRV_RETURN_ERROR;
+    }
+
+    /*Begin: add by lwx365818 2016.06.20 reason:ģ̼ʧ*/
+    RetVal = MPA_CheckSimUpdateFailFlag(EnclAddr,DriverId,FWTYPE_MGT);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return DRV_RETURN_ERROR;
+    }
+    /* End: add by lwx365818 */
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    
+    DRV_MPA_TRACE(DRV_LOG_INFO, 131, "MPA begines to send file to bbu(%s), id(0x%llx), devframe(0x%x).", 
+                        Data, DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_BBU;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_UPGRADE_LEN;
+
+    /* V2-BMCBBUFruIdת0x200SdrType*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = SDR_TYPE_BBU0;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 1) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_BBU1;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 2) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_BBU2;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 3) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_BBU3;
+        }
+
+        MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
+    }    
+
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+*     : MPAIntf_UpdatePowerSendFile
+*   : POWERڶļ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             Data      ļ
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2017315
+*           : limingjiang/00400933
+*    ޸   : AR-0000261890-003-007DMIֵ֧ԴFWܡ
+******************************************************************************/
+OSP_S32 MPAIntf_UpdatePowerSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Data))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 130, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
+        return DRV_RETURN_ERROR;
+    }
+
+    RetVal = MPA_CheckSimUpdateFailFlag(EnclAddr,DriverId,FWTYPE_MGT);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_POWER;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_UPGRADE_LEN;
+
+    /* V2-BMCPOWERFruIdתSdrType*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        MpaCmd.SdrType = MPAIntf_FruidToUpgradeType(MpaCmd.FruId);
+        MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
+    }
+
+    MpaCmd.WtRd = MPA_WRITE;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
+    DRV_MPA_TRACE(DRV_LOG_INFO, 131,
+        "MPA begines to send file to power(%s),id(0x%llx),devframe(0x%x) ret:%d.", 
+        Data, DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, RetVal);
+
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateMgmt8307SendFile
+ *   : 8307
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Data      ļ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201433
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateMgmt8307SendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Data))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 132, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 133, "MPA sends update file to 8307, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_8307;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_UPGRADE_LEN;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+*     : MPAIntf_UpdateFanCtrlSendFile
+*   : FanCtrlڶļ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             Data      ļ
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2017325
+*           : limingjiang/00400933
+*    ޸   :DMIַ֧ȿưFWܡ
+******************************************************************************/
+OSP_S32 MPAIntf_UpdateFanCtrlSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Data))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 130, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
+        return DRV_RETURN_ERROR;
+    }
+
+    RetVal = MPA_CheckSimUpdateFailFlag(EnclAddr,DriverId,FWTYPE_MGT);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_FANCTRL;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_UPGRADE_LEN;
+    MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_BMC;/* BMC̶ʹôֵʶȿư*/
+
+    MpaCmd.WtRd = MPA_WRITE;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
+    DRV_MPA_TRACE(DRV_LOG_INFO, 131,
+        "MPA begines to send file to fanctrl(%s),id(0x%llx),devframe(0x%x) ret:%d.", 
+        Data, DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, RetVal);
+
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateMgmt8307Start
+ *   : 8307
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201435
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateMgmt8307Start(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    OSP_U32 FruId = DAL_FRU_ID(DriverId);
+    DAL_POWER_STATE_E OpCode = DMI_POWER_RESET;
+
+    return MPAIntf_SetFruPowerCtrl(EnclAddr, FruId, OpCode);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateSmmBmcSendFile
+ *   : BMC  step2:
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Data      ļ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013127
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateSmmBmcSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Data))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 134, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 135, "MPA sends bmc update file to smm board, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_SMM_BMC;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_UPGRADE_LEN;
+    MpaCmd.SdrType = SDR_TYPE_SMM_A_BMC;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateSmmCpldSendFile
+ *   : CPLD  step2:
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Data      ļ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013127
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateSmmCpldSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Data))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 136, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 137, "MPA sends cpld update file to smm, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_SMM_CPLD;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_UPGRADE_LEN;
+    MpaCmd.SdrType = SDR_TYPE_SMM_A_BMC;//SDR_TYPE_SMM_CPLD;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateBbuSendFileLpc
+ *   : BBUļͨLPCͨ
+ *   : EnclAddr  
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Data      ļ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131216
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateBbuSendFileLpc(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Data))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 138, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 139, "MPA sends update file to bbu, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_BBU_LPC;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_UPGRADE_LEN;
+
+    /* V2-BMCBBUĵSdrType*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = SDR_TYPE_BBU0;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 1) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_BBU1;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 2) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_BBU2;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 3) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_BBU3;
+        }
+    }            
+
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdatePCIE8796SendFile
+ *   : 87962
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Data      ļ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201437
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdatePCIE8796SendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Data))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 140, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 141, "MPA sends update file to pcie8796(%s), id(0x%llx), devframe(0x%x).", Data, DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_CONFIGCHIP;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_UPGRADE_LEN;
+    MpaCmd.SdrType = UPGRADE_TYPE_8796;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+*     : MPAIntf_UpdateVrmSendFile
+*   : VRM 2
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             Data      ļ
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ  :
+* 1.    : 2017329
+*       : limingjiang/00400933
+*   ޸: ֧VRM 
+*
+******************************************************************************/
+OSP_S32 MPAIntf_UpdateVrmSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Data))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 146, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_VRM;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_UPGRADE_LEN;
+    MpaCmd.SdrType = UPGRADE_TYPE_VR;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateConfigChipSendFile
+ *   : оƬڶļ8796724638717DMA retimer
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Data      ļ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014112
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateConfigChipSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
+{
+    
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U8 DeviceId = DAL_ELEMENT_NO(DriverId);
+
+    if (NULL == EnclAddr)
+    {
+        return DRV_RETURN_ERROR;
+    }
+
+    /*Begin: add by lwx365818 2016.06.20 reason:ģ̼ʧ*/
+    RetVal = MPA_CheckSimUpdateFailFlag(EnclAddr,DriverId,FWTYPE_CHIP);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return DRV_RETURN_ERROR;
+    }
+    /* End: add by lwx365818 */
+
+    /*תid·, 01Ϊ8796,23Ϊ8717,4Ϊretimer */
+    switch (DeviceId)
+    {
+        case 0:
+        case 1:
+            return MPAIntf_UpdatePCIE8796SendFile(EnclAddr, DriverId, Data);
+        case 2:
+        case 3:
+            return MPAIntf_UpdatePCIE8717SendFile(EnclAddr, DriverId - 2, Data);
+        case 4:
+            return MPAIntf_UpdateDmaRetimerSendFile(EnclAddr, DriverId - 4, Data);
+        case 5:
+        case 6:
+        case 7:
+        case 8:
+        case 9:
+        case 10:
+        case 11:
+        case 12:
+        case 13:
+        case 14:
+            /* 5~14ΪVRоƬdeviceID */
+            return MPAIntf_UpdateVrmSendFile(EnclAddr, DriverId - 5, Data);
+        default:
+            return RETURN_INVALID;
+    }
+
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateSATA72463SendFile
+ *   : SATA724632
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Data      ļ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014112
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateSATA72463SendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Data))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 142, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 143, "MPA sends update file to sata72463(%s), id(0x%llx), devframe(0x%x).", Data, DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_SATA72463;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_UPGRADE_LEN;
+    MpaCmd.SdrType = UPGRADE_TYPE_SATA72463;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
+
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_UpdatePCIE8717SendFile
+ *   : PCIE87172
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Data      ļ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014112
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdatePCIE8717SendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Data))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 144, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 145, "MPA sends update file to pcie8717(%s), id(0x%llx), devframe(0x%x).", Data, DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_PCIE8717;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_UPGRADE_LEN;
+    MpaCmd.SdrType = UPGRADE_TYPE_PCIE8717;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
+
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateDmaRetimerSendFile
+ *   : DmaRetimer2
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Data      ļ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014112
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateDmaRetimerSendFile(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Data))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 146, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 147, "MPA sends update file to dma retimer, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_TRA_FILE_DMARETIMER;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_UPGRADE_LEN;
+    MpaCmd.SdrType = UPGRADE_TYPE_DMARETIMER;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Data, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateMgmtStart
+ *   : оƬ step3:ʼ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ  
+ *             Data      ļָ
+ *             DataLen   ļ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131016
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateMgmtStart(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8* Data, OSP_U32 DataLen)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    (OSP_VOID)Data;
+    (OSP_VOID)DataLen;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 148, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    
+    /* BEGIN: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
+    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
+    DRV_MPA_TRACE(DRV_LOG_INFO, 149, "MPA starts to update mgmt,id(0x%llx),mcutype(0x%x),devframe(0x%x),device:%d %d %d %d.", 
+                  DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->McuType,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, 
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiHostId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiChannelId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiScsiId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiLunId);
+    /* END: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
+    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
+    
+    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_MGMT;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+
+    /* V2-BMCBMCCPLDǰFruId0x200SdrType*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = SDR_TYPE_BMC;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_SMM_A_BMC;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_SMM_B_BMC;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_FAN_CTRLBOARD, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_BMC;
+        }
+    }
+    
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateMgmtRollBack
+ *   : ˰汾
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : sesʹ
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013119
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateMgmtRollBack(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 150, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 151, "MPA starts to roll back mgmt, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_ROLLBACK;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+
+}
+ /******************************************************************************
+ *     : MPAIntf_UpdateCpldStart
+ *   : cpld step3:ʼ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId  ID ͡FRUIDDEVICE IDϢ 
+ *             Data      ļָ
+ *             DataLen   ļ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131030
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateCpldStart(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8* Data, OSP_U32 DataLen)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S * MpaAddr = NULL;
+    OSP_U8 CpldId = 0;
+
+    (OSP_VOID)Data;
+    (OSP_VOID)DataLen;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 152, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    
+    /* BEGIN: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
+    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
+    DRV_MPA_TRACE(DRV_LOG_INFO, 153, "MPA starts to update cpld, id(0x%llx),mcutype(0x%x),devframe(0x%x),device:%d %d %d %d.", 
+                  DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->McuType,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, 
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiHostId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiChannelId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiScsiId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiLunId);
+    /* END: Added by liwei 90003951, 2015/6/09  ⵥ:DTS2015060809640  
+    , PANGEA V200R002C00B021 + MPA + SAS󿨡ǿɶλ */
+    
+/* BEGIN: Added by shufan 00204084, 2014/10/20  ⵥ:c02, ޸ԭ:12g hds */
+    if (TRUE == MPA_If12gHdsCtrlBoardId(MpaAddr->DevFrame, (OSP_U32)DAL_FRU_ID(DriverId)))
+    {
+        return MPA_Set12gHdsCommonInfo((DAL_MPA_ADDR_S *)EnclAddr,
+                                        DriverId,//עu64 driver id
+                                        SAS_12G_CMD_SET_CTRL_CPLD_START_UPDATE,
+                                        &CpldId,
+                                        1);
+    }
+/* END: Added by qintianyi 90005776, 2014/8/5  ⵥ:c02 */
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_CPLD;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+
+    /* V2-BMCBMCCPLDǰFruId0x200SdrType*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = SDR_TYPE_CPLD;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_SMM_A_CPLD;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_SMM_B_CPLD;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_FAN_CTRLBOARD, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_CPLD;
+        }
+        else if (DAL_FRU_LOGIC_TYPE_MATCH(DAL_FRU_ID_TO_LOGIC_TYPE(MpaCmd.FruId), DMI_LOGIC_FRU_SHARE_IOCARD))
+        {
+            MpaCmd.SdrType = UPGRADE_TYPE_BIGCARD_0_CPLD + DAL_FRU_ID_TO_SLOT(MpaCmd.FruId);
+        }
+
+    }
+
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+
+}
+
+
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateFpgaStart
+ *   : fpga step3:ʼ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ
+ *             Data      ļָ
+ *             DataLen   ļ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131030
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateFpgaStart(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8* Data, OSP_U32 DataLen)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    (OSP_VOID)Data;
+    (OSP_VOID)DataLen;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 154, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 155, "MPA starts to update fpga, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_FPGA;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateBbuStart
+ *   : BBUʼ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131119
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateBbuStart(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 156, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 157, "MPA starts to update bbu, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_BBU;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+
+    /* V2-BMCBBUĵSdrType*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = SDR_TYPE_BBU0;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 1) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_BBU1;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 2) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_BBU2;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 3) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_BBU3;
+        }
+    }            
+
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+
+}
+
+/******************************************************************************
+*     : MPAIntf_UpdatePowerStart
+*   : Powerʼ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ    :
+* 1.      : 2017315
+*         : limingjiang/00400933
+*   ޸  : AR-0000261890-003-007DMIֵ֧ԴFWܡ
+******************************************************************************/
+OSP_S32 MPAIntf_UpdatePowerStart(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 156, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_POWER;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+
+    /* V2-BMCPOWERĵSdrType*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        MpaCmd.SdrType = MPAIntf_FruidToUpgradeType(MpaCmd.FruId);
+    }            
+
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+    DRV_MPA_TRACE(DRV_LOG_INFO, 157,
+        "MPA starts to update power,id:0x%llx devframe:0x%x ret:%d.",
+            DriverId, MpaAddr->DevFrame, RetVal);
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdatePCIE8796Start
+ *   : 87963
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201437
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdatePCIE8796Start(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 158, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 159, "MPA starts to update pcie8796, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_CONFIGCHIP;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = UPGRADE_TYPE_8796;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+}
+
+
+/******************************************************************************
+*     : MPAIntf_UpdateFanCtrlStart
+*   : FanCtrlʼ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ    :
+* 1.      : 2017325
+*         : limingjiang/00400933
+*   ޸  :DMIַ֧ȿưFWܡ
+******************************************************************************/
+OSP_S32 MPAIntf_UpdateFanCtrlStart(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 156, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_FANCTRL;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_BMC;/* BMC̶ʹôֵʶȿư*/
+
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+    DRV_MPA_TRACE(DRV_LOG_INFO, 157,
+        "MPA starts to update fanctrl,id:0x%llx devframe(0x%x) ret:%d.",
+        DriverId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, RetVal);
+    return RetVal;
+}
+
+/******************************************************************************
+*     : MPAIntf_UpdateVrmStart
+*   : VRM step3:ʼ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ  :
+* 1.    : 2017329
+*       : limingjiang/00400933
+*   ޸: ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_UpdateVrmStart(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 164, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_VRM;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = UPGRADE_TYPE_VR;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateConfigChipStart
+ *   : оƬʼ8796724638717DMA retimer
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014112
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateConfigChipStart(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    OSP_U8 DeviceId = DAL_ELEMENT_NO(DriverId);
+
+    if (NULL == EnclAddr)
+    {
+        return DRV_RETURN_ERROR;
+    }
+
+    /*תid·*/
+    switch (DeviceId)
+    {
+        case 0:
+        case 1:
+            return MPAIntf_UpdatePCIE8796Start(EnclAddr, DriverId);
+        case 2:
+        case 3:
+            return MPAIntf_UpdatePCIE8717Start(EnclAddr, DriverId - 2);
+        case 4:
+            return MPAIntf_UpdateDmaRetimerStart(EnclAddr, DriverId - 4);
+        case 5:
+        case 6:
+        case 7:
+        case 8:
+        case 9:
+        case 10:
+        case 11:
+        case 12:
+        case 13:
+        case 14:
+            /* 5~14ΪVRоƬdeviceID */
+            return MPAIntf_UpdateVrmStart(EnclAddr, DriverId - 5);
+        default:
+            return RETURN_INVALID;
+    }
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateSATA72463Start
+ *   : SATA72463 step3:ʼ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014112
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateSATA72463Start(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 160, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 161, "MPA starts to update sata72463, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_SATA72463;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = UPGRADE_TYPE_SATA72463;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+
+}
+
+
+
+ /******************************************************************************
+ *     : MPAIntf_UpdatePCIE8717Start
+ *   : PCIE8717 step3:ʼ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014112
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdatePCIE8717Start(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 162, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 163, "MPA starts to update pcie8717, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_PCIE8717;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = UPGRADE_TYPE_PCIE8717;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdateDmaRetimerStart
+ *   : PCIE8796 step3:ʼ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014112
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdateDmaRetimerStart(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 164, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 165, "MPA starts to update dma retimer, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_UPDATE_EXE_DMARETIMER;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = UPGRADE_TYPE_DMARETIMER;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*׼ʼַǲѯ贫data indata out buffer*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetMgmtUpgradeState
+ *   : ѯоƬ״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             UpgradeState  ״̬
+ *   : UpgradeState  ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013113
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetMgmtUpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U8 Status = 0;
+
+    if ((NULL == EnclAddr) || (NULL == UpgradeState))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 166, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_MGMT;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+
+    /* ѯ״̬ʱתFruId*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = SDR_TYPE_BMC;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_SMM_A_BMC;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_SMM_B_BMC;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_FAN_CTRLBOARD, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_BMC;
+        }
+
+    }
+    
+    MpaCmd.WtRd = MPA_READ;
+    
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&Status);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return RetVal;
+    }
+
+    *UpgradeState = (DMI_UPGRADE_STAT_E)Status;
+    return RetVal;
+    
+}                           
+
+/******************************************************************************
+ *     : MPAIntf_GetCpldUpgradeState
+ *   : ѯCPLD״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             UpgradeState  ״̬
+ *   : UpgradeState  ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013113
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetCpldUpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U8 Status = 0;
+
+    if ((NULL == EnclAddr) || (NULL == UpgradeState))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 167, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_CPLD;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);//qintianyi notes: ܿOSP_U32ҪȷӰ
+
+    /* ѯ״̬ʱתFruId*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = SDR_TYPE_CPLD;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_SMM_A_CPLD;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_SMM_B_CPLD;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_FAN_CTRLBOARD, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_CPLD;
+        }
+        else if (DAL_FRU_LOGIC_TYPE_MATCH(DAL_FRU_ID_TO_LOGIC_TYPE(MpaCmd.FruId), DMI_LOGIC_FRU_SHARE_IOCARD))
+        {
+            MpaCmd.SdrType = UPGRADE_TYPE_BIGCARD_0_CPLD + DAL_FRU_ID_TO_SLOT(MpaCmd.FruId);
+        }
+
+    }
+    /*12G֮ܿĿ򣬷-5֧*/
+    else if (DRV_FRAMEMODEL_12GSAS_CTL_4U72 != MpaAddr->DevFrame)
+    {
+        return RETURN_INVALID;
+    }
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&Status);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return RetVal;
+    }
+
+    *UpgradeState = (DMI_UPGRADE_STAT_E)Status;
+    return RetVal;
+    
+}                           
+
+
+/******************************************************************************
+ *     : MPAIntf_GetFpgaUpgradeState
+ *   : ѯFPGA״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             UpgradeState  ״̬
+ *   : UpgradeState  ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013113
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFpgaUpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *UpgradeState)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == UpgradeState))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 168, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_FPGA;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)UpgradeState);    
+    
+}                           
+
+/******************************************************************************
+ *     : MPAIntf_GetBbuUpgradeState
+ *   : ѯBBU״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             UpgradeState  ״̬
+ *   : UpgradeState  ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013126
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuUpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == UpgradeState))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 169, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_BBU;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DMI_UPGRADE_STAT_E);
+
+    /* V2-BMCBBUĵSdrType*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.SdrType = SDR_TYPE_BBU0;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 1) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_BBU1;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 2) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_BBU2;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_BBU, 3) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDR_TYPE_BBU3;
+        }
+    }
+
+    MpaCmd.WtRd = MPA_READ;
+/*qty v2c01*/
+    if (DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddr->DevFrame)
+    {
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)UpgradeState);
+    }
+    else
+    {
+        OSP_U8 Status = 0;
+        MpaCmd.BufLen = sizeof(OSP_U8);
+        
+        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&Status);
+        if(DRV_RETURN_OK != RetVal)
+        {
+            return RetVal;
+        }
+
+        *UpgradeState = (DMI_UPGRADE_STAT_E)Status;
+        return RetVal;
+    }
+}
+
+/******************************************************************************
+*     : MPAIntf_GetPowerUpgradeState
+*   : ѯPOWER״̬
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId ID ͡FRUIDDEVICE IDϢ   
+*             UpgradeState  ״̬
+*   : UpgradeState  ״̬
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ  :
+* 1.    : 2017315
+*       : limingjiang/00400933
+* ޸  : AR-0000261890-003-007DMIֵ֧ԴFWܡ
+******************************************************************************/
+OSP_S32 MPAIntf_GetPowerUpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == UpgradeState))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 169, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_POWER;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DMI_UPGRADE_STAT_E);
+
+    /* V2-BMCPOWERĵSdrType*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        MpaCmd.SdrType = MPAIntf_FruidToUpgradeType(MpaCmd.FruId);
+    }
+
+    MpaCmd.WtRd = MPA_READ;
+
+    if (DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddr->DevFrame)
+    {
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)UpgradeState);
+    }
+    else
+    {
+        OSP_U8 Status = 0;
+        MpaCmd.BufLen = sizeof(OSP_U8);
+        
+        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&Status);
+        DRV_MPA_TRACE(DRV_LOG_INFO, 508, "EnclAddr:%p DriverId:%llx, ret:%d, state:%d.",
+            EnclAddr, DriverId, RetVal, Status);
+        if(DRV_RETURN_OK != RetVal)
+        {
+            return RetVal;
+        }
+
+        *UpgradeState = (DMI_UPGRADE_STAT_E)Status;
+        return RetVal;
+    }
+}                           
+
+ /******************************************************************************
+ *     : MPAIntf_GetPCIE8796UpgradeState
+ *   : ѯ8796״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             UpgradeState  ״̬
+ *   : UpgradeState  ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201437
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPCIE8796UpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == UpgradeState))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 170, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_PCIECHIP;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DMI_UPGRADE_STAT_E);
+    MpaCmd.WtRd = MPA_READ;
+    MpaCmd.SdrType = UPGRADE_TYPE_8796;
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)UpgradeState);
+}
+
+/******************************************************************************
+*     : MPAIntf_GetFanCtrlUpgradeState
+*   : ѯFanCtrl״̬
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId ID ͡FRUIDDEVICE IDϢ   
+*             UpgradeState  ״̬
+*   : UpgradeState  ״̬
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ  :
+* 1.    : 2017325
+*       : limingjiang/00400933
+* ޸  :DMIַ֧ȿưFWܡ
+******************************************************************************/
+OSP_S32 MPAIntf_GetFanCtrlUpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U8 Status = 0;
+
+    if ((NULL == EnclAddr) || (NULL == UpgradeState))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 169, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_FANCTRL;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_BMC;/* BMC̶ʹôֵʶȿư*/
+    MpaCmd.BufLen = sizeof(Status);
+
+    MpaCmd.WtRd = MPA_READ;
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&Status);
+    DRV_MPA_TRACE(DRV_LOG_INFO, 508, "EnclAddr:%p DriverId:%llx, ret:%d, state:%d.",
+        EnclAddr, DriverId, RetVal, Status);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return RetVal;
+    }
+
+    *UpgradeState = (DMI_UPGRADE_STAT_E)Status;
+    return RetVal;
+}
+ /******************************************************************************
+ *     : MPAIntf_GetPCIE8717UpgradeState
+ *   : ѯ8717״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             UpgradeState  ״̬
+ *   : UpgradeState  ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201437
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPCIE8717UpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == UpgradeState))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 171, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_PCIECHIP;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DMI_UPGRADE_STAT_E);
+    MpaCmd.WtRd = MPA_READ;
+    MpaCmd.SdrType = UPGRADE_TYPE_PCIE8717;
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)UpgradeState);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetDmaRetimerUpgradeState
+ *   : ѯdma״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             UpgradeState  ״̬
+ *   : UpgradeState  ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201437
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetDmaRetimerUpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == UpgradeState))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 172, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_PCIECHIP;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DMI_UPGRADE_STAT_E);
+    MpaCmd.WtRd = MPA_READ;
+    MpaCmd.SdrType = UPGRADE_TYPE_DMARETIMER;
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)UpgradeState);
+
+}
+
+/******************************************************************************
+*     : MPAIntf_GetVrmUpgradeState
+*   : ѯvrm״̬
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId        ID ͡FRUIDDEVICE IDϢ   
+*             UpgradeState  ״̬
+*   : UpgradeState  ״̬
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ  :
+* 1.    : 2017329
+*       : limingjiang/00400933
+*   ޸: ֧VRM
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetVrmUpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == UpgradeState))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 172, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_VRM;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DMI_UPGRADE_STAT_E);
+    MpaCmd.WtRd = MPA_READ;
+    MpaCmd.SdrType = UPGRADE_TYPE_VR;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)UpgradeState);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetConfigChipUpgradeState
+ *   : ѯ87968717retimer״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             UpgradeState  ״̬
+ *   : UpgradeState  ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201437
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetConfigChipUpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
+{
+    OSP_U8 DeviceId = DAL_ELEMENT_NO(DriverId);
+
+    /*תid·*/
+    switch (DeviceId)
+    {
+        case 0:
+        case 1:
+            return MPAIntf_GetPCIE8796UpgradeState(EnclAddr, DriverId, UpgradeState);
+        case 2:
+        case 3:
+            return MPAIntf_GetPCIE8717UpgradeState(EnclAddr, DriverId - 2, UpgradeState);
+        case 4:
+            return MPAIntf_GetDmaRetimerUpgradeState(EnclAddr, DriverId - 4, UpgradeState);
+        case 5:
+        case 6:
+        case 7:
+        case 8:
+        case 9:
+        case 10:
+        case 11:
+        case 12:
+        case 13:
+        case 14:
+            /* 5~14ΪVRоƬdeviceID */
+            return MPAIntf_GetVrmUpgradeState(EnclAddr, DriverId - 5, UpgradeState);
+        default:
+            return RETURN_INVALID;
+    }
+}
+
+/******************************************************************************
+*     : MPAIntf_GetVrmUpGradeRestCnt
+*   : ѯԴǷ֧
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             Cnt  ʣ
+*   : Cnt  ʣ
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+* 1.    : 2017329
+*       : limingjiang/00400933
+*  ޸ : ֧VRM
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetVrmUpGradeRestCnt(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32* Cnt)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U8 LocalCnt[4] = {0};
+
+    if ((NULL == EnclAddr) || (NULL == Cnt))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 169, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Cnt);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_GET_RESTCNT_VRM;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = UPGRADE_TYPE_VR;
+
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)LocalCnt);
+    /* ԼС˸ʽ͹ */
+    *Cnt = LocalCnt[0] | (LocalCnt[1] << 8) |
+           (LocalCnt[2] << 16) | (LocalCnt[3] << 24);
+    DRV_MPA_TRACE(DRV_LOG_INFO, 508, "EnclAddr:%p driverid:%llx, ret:%d, count:%d",
+        EnclAddr, DriverId, RetVal, *Cnt);
+
+    return RetVal;
+}
+
+/******************************************************************************
+*     : MPAIntf_GetConfigChipUpgradeRestCnt
+*   : ѯʣ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId        ID ͡FRUIDDEVICE IDϢ
+*             Cnt  ʣ
+*   : Cnt  ʣ
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ  :
+* 1.    : 2017329
+*       : limingjiang/00400933
+*   ޸: ֧VRM
+******************************************************************************/
+OSP_S32 MPAIntf_GetConfigChipUpgradeRestCnt(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Cnt)
+{
+    OSP_U8 DeviceId = DAL_ELEMENT_NO(DriverId);
+
+    /*תid·*/
+    switch (DeviceId)
+    {
+        case 5:
+        case 6:
+        case 7:
+        case 8:
+        case 9:
+        case 10:
+        case 11:
+        case 12:
+        case 13:
+        case 14:
+            /* 5~14ΪVRоƬdeviceID */
+            return MPAIntf_GetVrmUpGradeRestCnt(EnclAddr, DriverId - 5, Cnt);
+        default:
+            break;
+    }
+    return RETURN_INVALID;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetMgmt8307UpgradeState
+ *   : ѯ8307״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             UpgradeState  ״̬
+ *   : UpgradeState  ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201433
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetMgmt8307UpgradeState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *UpgradeState)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == UpgradeState))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 173, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpgradeState);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_UPDATE_STATE_GET_8307;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DMI_UPGRADE_STAT_E);
+    MpaCmd.WtRd = MPA_READ;
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)UpgradeState);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetMgmt8307SupportUpGrade
+ *   : ѯ8307Ƿ֧
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Support   Ƿ֧TRUE:֧֣FALSE:֧
+ *   : Support   Ƿ֧TRUE:֧֣FALSE:֧
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201435
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetMgmt8307SupportUpGrade(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_BOOL* Support)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Support))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 174, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Support);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_8305INFO_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_BOOL);
+    MpaCmd.WtRd = MPA_READ;
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Support);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerSupportUpGrade
+ *   : ѯԴǷ֧
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Support   Ƿ֧TRUE:֧֣FALSE:֧
+ *   : Support   Ƿ֧TRUE:֧֣FALSE:֧
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ * 1.    : 2017315
+ *       : limingjiang/00400933
+ *  ޸ : AR-0000261890-003-007DMIֵ֧ԴFWܡ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerSupportUpGrade(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_BOOL* Support)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U8 Status = 0;
+
+    if ((NULL == EnclAddr) || (NULL == Support))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 169, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Support);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    MpaCmd.Cmd = DRV_CMD_GET_POWER_UPGRADE_SUPPORT;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_BOOL);
+
+    /* V2-BMCPOWERĵSdrType*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        MpaCmd.SdrType = MPAIntf_FruidToUpgradeType(MpaCmd.FruId);
+    }
+
+    MpaCmd.WtRd = MPA_READ;
+
+    MpaCmd.BufLen = sizeof(OSP_U8);
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&Status);
+    DRV_MPA_TRACE(DRV_LOG_INFO, 508, "EnclAddr:%p driverid:%llx, ret:%d, state:%d",
+        EnclAddr, DriverId, RetVal, Status);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return RetVal;
+    }
+
+    *Support = (OSP_BOOL)Status;
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetFpgaVersion
+ *   : ȡFPGA汾
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             FwVer[DMI_FW_VER_LEN]  汾Ϣ
+ *   : FwVer[DMI_FW_VER_LEN]  汾Ϣ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131026
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFpgaVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *FwVer, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 VersionBuffer[DMI_FW_VER_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == FwVer) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 175, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FwVer, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_VERSION_GET_FPGA;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_FW_VER_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 176, "MPA GetFPGAVersion return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)FwVer, (OSP_U32)(OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VersionBuffer, (OSP_U32)(OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+
+ 
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetMgmtVersion
+ *   : ȡоƬ汾
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             FwVer  汾Ϣbuffer
+               Length 汾Ϣ
+ *   : FwVer  汾Ϣ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131026
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetMgmtVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *FwVer, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 VersionBuffer[DMI_FW_VER_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == FwVer) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 177, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FwVer, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_VERSION_GET_MGMT;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_FW_VER_LEN;
+    MpaCmd.SdrType = SDRTYPE_MGMTCPU_SOFTVERSION;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 178, "MPA GemgmtVersion return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)FwVer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length));
+
+    return RetVal;
+   
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetCpldVersion
+ *   : ȡcpld汾
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             FwVer[DMI_FW_VER_LEN]  汾Ϣ
+ *   : FwVer[DMI_FW_VER_LEN]  汾Ϣ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131026
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetCpldVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *FwVer, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 VersionBuffer[DMI_FW_VER_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;   
+    OSP_U32 FruId = DAL_FRU_ID(DriverId);
+    
+    if ((NULL == EnclAddr) || (NULL == FwVer) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 179, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FwVer, Length);
+        return RetVal;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    /* BEGIN: Added by shufan 00204084, 2014/8/15  ⵥ:c02, ޸ԭ:12g hds */
+    if (TRUE == MPA_If12gHdsCtrlBoardId(MpaAddr->DevFrame, FruId))
+    {
+        return MPA_Get12gHdsCommonInfo((DAL_MPA_ADDR_S *)EnclAddr,
+                                        DriverId,//עu64 driver id
+                                        SAS_12G_CMD_GET_CTRL_CPLDVERSION,
+                                        (OSP_VOID *)FwVer, 
+                                        (OSP_U16)min(DMI_FW_VER_LEN, (OSP_S32)Length));
+    }
+    /* END: Added by shufan 00204084, 2014/8/15  ⵥ:c02 */
+
+
+    MpaCmd.Cmd = DRV_CMD_VERSION_GET_CPLD;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_FW_VER_LEN;
+    MpaCmd.SdrType = SDRTYPE_CPLD_SOFTVERSION;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 180, "MPA GecpldVersion return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)FwVer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+
+ 
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPeerCpldVersion
+ *   : ѯ԰cpld汾
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             PeerSlot  ԰λ
+ *             FwVer     汾
+ *             Length    
+ *   : FwVer     汾
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014412
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPeerCpldVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 PeerSlot, OSP_S8 *FwVer, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S8 VersionBuffer[DMI_FW_VER_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == FwVer) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 181, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FwVer, Length);
+        return RetVal;
+    }
+
+    (OSP_VOID)PeerSlot;
+    
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    /*ֻsesָ֧ýӿ*/
+    if ((DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame) || (MpaAddr->DevFrame > DRV_FRAMEMODEL_12GSAS_EXP_END))
+    {
+        return RETURN_INVALID;
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_VERSION_GET_CPLD_PEER;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_FW_VER_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 182, "MPA GetPeerCpldVersion return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)FwVer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+
+ 
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPCIE8796Version
+ *   : ȡPEX87968717retimer汾ͨdeviceid
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             *FwVer  汾Ϣ
+ *             Length  汾Ϣ
+ *   : *FwVer  汾Ϣ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014111
+ *           : shufan 204084
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPCIE8796Version(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *FwVer, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 VersionBuffer[DMI_FW_VER_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == FwVer) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 183, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FwVer, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_PCIE8796_VERSION;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_FW_VER_LEN;
+    MpaCmd.SdrType = UPGRADE_TYPE_8796;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 184, "MPA GetPCIE8796Version return error.");
+        return RetVal;
+    }
+
+    /*·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)FwVer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+
+ 
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetSATA72463Version
+ *   : ȡSATA72463汾
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             *FwVer  汾Ϣ
+ *             Length  汾Ϣ
+ *   : *FwVer  汾Ϣ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014111
+ *           : shufan 204084
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetSATA72463Version(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *FwVer, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 VersionBuffer[DMI_FW_VER_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == FwVer) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 185, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FwVer, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_SATA72463_VERSION;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_FW_VER_LEN;
+    MpaCmd.SdrType = UPGRADE_TYPE_SATA72463;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 186, "MPA GetSATA72463Version return error.");
+        return RetVal;
+    }
+
+    /*·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)FwVer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+
+ 
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetPCIE8717Version
+ *   : ȡPCIE8717汾8717ͨdeviceid
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             *FwVer  汾Ϣ
+ *             Length  汾Ϣ
+ *   : *FwVer  汾Ϣ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014111
+ *           : shufan 204084
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPCIE8717Version(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *FwVer, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 VersionBuffer[DMI_FW_VER_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == FwVer) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 187, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FwVer, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_PCIE8717_VERSION;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_FW_VER_LEN;
+    MpaCmd.SdrType = UPGRADE_TYPE_PCIE8717;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 188, "MPA GetPCIE8717Version return error.");
+        return RetVal;
+    }
+
+    /*·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)FwVer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length), 
+    (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+
+ 
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetDmaRetimerVersion
+ *   : ȡDmaRetimer汾
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             *FwVer  汾Ϣ
+ *             Length  汾Ϣ
+ *   : *FwVer  汾Ϣ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014111
+ *           : shufan 204084
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetDmaRetimerVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *FwVer, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 VersionBuffer[DMI_FW_VER_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == FwVer) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 189, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FwVer, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_DMARETIMER_VERSION;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_FW_VER_LEN;
+    MpaCmd.SdrType = UPGRADE_TYPE_DMARETIMER;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 190, "MPA GetDmaRetimerVersion return error.");
+        return RetVal;
+    }
+
+    /*·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)FwVer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+}
+
+/******************************************************************************
+*     : MPAIntf_GetDVrmVersion
+*   : ȡDmaRetimer汾
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ
+*             *FwVer  汾Ϣ
+*             Length  汾Ϣ
+*   : *FwVer  汾Ϣ
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ  :
+* 1.    : 2017329
+*       : limingjiang/00400933
+*   ޸: ֧VRM
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetDVrmVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *FwVer, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 VersionBuffer[DMI_FW_VER_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == FwVer) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 189, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, FwVer, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_VRM_FW_VERSION_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_FW_VER_LEN;
+    MpaCmd.SdrType = UPGRADE_TYPE_VR;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_INFO, 190, "Get vrm chip version fail.");
+        return RetVal;
+    }
+
+    /*·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)FwVer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_FW_VER_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPCIEChipVersion
+ *   : pcie汾
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             *FwVer  汾Ϣ
+ *             Length  汾Ϣ
+ *   : *FwVer  汾Ϣ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201437
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPCIEChipVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *FwVer, OSP_U32 Length)
+{
+    OSP_U8 DeviceId = DAL_ELEMENT_NO(DriverId);
+
+    /*תid·*/
+    switch (DeviceId)
+    {
+        case 0:
+        case 1:
+            return MPAIntf_GetPCIE8796Version(EnclAddr, DriverId, FwVer, Length);
+        case 2:
+        case 3:
+            return MPAIntf_GetPCIE8717Version(EnclAddr, DriverId - 2, FwVer, Length);
+        case 4:
+            return MPAIntf_GetDmaRetimerVersion(EnclAddr, DriverId - 4, FwVer, Length);
+        case 5:
+        case 6:
+        case 7:
+        case 8:
+        case 9:
+        case 10:
+        case 11:
+        case 12:
+        case 13:
+        case 14:
+            /* 5~14ΪVRоƬdeviceID */
+            return MPAIntf_GetDVrmVersion(EnclAddr, DriverId - 5, FwVer, Length);
+        default:
+            return RETURN_INVALID;
+    }
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetMgmt8307Version
+ *   : 8307汾
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Version   8307汾
+ *             Length     8307汾
+ *   : Version   8307汾
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201433
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetMgmt8307Version(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Version, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 VersionBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Version) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 191, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Version, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_MGMT_8307_VERSION;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 192, "MPA GetMgmt8307Version return error.");
+       return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Version, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+
+    return RetVal;
+}
+ 
+ /******************************************************************************
+ *     : MPAIntf_GetHardWareVersion
+ *   : ѯFRUӲ汾
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId   FRU ID,U32DRIVER ID
+ *             HwVer  汾Ϣbuffer
+               Length 汾Ϣ
+ *   : HwVer  汾Ϣbuffer
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131023
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetHardWareVersion(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_S8 *HwVer, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 VersionBuffer[DMI_HARDWARE_VER_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_MPA_ADDR_S * MpaAddr = NULL;
+    OSP_U8 LogicTypeMatch = 0;
+    OSP_U32 FruType = 0;
+
+    if ((NULL == EnclAddr) || (NULL == HwVer) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 193, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, HwVer, Length);
+        return RetVal;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr; 
+
+    /* BEGIN: Added by qintianyi 90005776, 2014/8/5  ⵥ:c02, ޸ԭ:12g hds */
+    if (TRUE == MPA_If12gHdsCtrlBoardId(MpaAddr->DevFrame, FruId))
+    {
+        return MPA_Get12gHdsCommonInfo((DAL_MPA_ADDR_S *)EnclAddr,
+                                        (OSP_U64)DAL_BUILD_DEVICE_ID((OSP_U64)0, (OSP_U64)0, (OSP_U64)FruId, (OSP_U64)0),//עu64 driver id
+                                        SAS_12G_CMD_GET_CTRL_HWVER,
+                                      (OSP_VOID *)HwVer, 
+                                        (OSP_U16)min(DMI_HARDWARE_VER_LEN, (OSP_S32)Length));
+    }
+    /* END: Added by qintianyi 90005776, 2014/8/5  ⵥ:c02 */
+
+    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
+    LogicTypeMatch = DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_BBU);
+    if ((LogicTypeMatch)
+        &&(DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddr->DevFrame)
+        && (MpaAddr->DevFrame > DRV_FRAMEMODEL_V1_END))
+    {
+        MpaCmd.Cmd = DRV_CMD_GET_BBU_HW_VESION;
+        MpaCmd.FruId = FruId;
+        MpaCmd.DeviceId = 0;
+        MpaCmd.BufLen = DMI_HARDWARE_VER_LEN;
+        MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+        MpaCmd.WtRd = MPA_READ;
+    }
+    else
+    {
+        MpaCmd.Cmd = DRV_CMD_VERSION_GET;
+        MpaCmd.FruId = FruId;
+        MpaCmd.DeviceId = 0;
+        MpaCmd.BufLen = DMI_HARDWARE_VER_LEN;
+        MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+        MpaCmd.WtRd = MPA_READ;
+    }
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)HwVer, (OSP_U32)min(DMI_HARDWARE_VER_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_HARDWARE_VER_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+   
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPeerHwVer
+ *   : ѯ԰pcb汾
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId   FRU ID,U32DRIVER ID
+ *             PeerSlot  ԰λ
+ *             HwVer  汾Ϣbuffer
+ *             Length    
+ *   : HwVer  汾Ϣbuffer
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014411
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPeerHwVer(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 PeerSlot, OSP_S8 *HwVer, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S8 VersionBuffer[DMI_HARDWARE_VER_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == HwVer) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 195, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, HwVer, Length);
+        return RetVal;
+    }
+    
+    (OSP_VOID)PeerSlot;
+    
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    /*ֻsesָ֧ýӿ*/
+    if ((DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame) || (MpaAddr->DevFrame > DRV_FRAMEMODEL_12GSAS_EXP_END))
+    {
+        return RETURN_INVALID;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_VERSION_GET_PEER_PCB;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = DMI_HARDWARE_VER_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 196, "MPA GetPeerHwVer return error 0x%x.", RetVal);
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)HwVer, (OSP_U32)min(DMI_HARDWARE_VER_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_HARDWARE_VER_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetDeviceHardWareVersion
+ *   : ѯFRUӲ汾(DMA濨ʱ)
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             HwVer  汾Ϣbuffer
+               Length 汾Ϣ
+ *   : HwVer  汾Ϣbuffer
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014113
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetDeviceHardWareVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *HwVer, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 VersionBuffer[DMI_HARDWARE_VER_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == HwVer) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 197, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, HwVer, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_VERSION_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_HARDWARE_VER_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 198, "MPA GetDeviceHardWareVersion return error 0x%x.", RetVal);
+        return RetVal;
+    }
+
+    /*·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)HwVer, (OSP_U32)min(DMI_HARDWARE_VER_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_HARDWARE_VER_LEN, (OSP_S32)Length));
+
+    return RetVal;
+}
+
+/******************************************************************************
+*     : MPAIntf_GetBuckleBoardHardWareVersion
+*   : ѯۿӲ汾
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             HwVer  汾Ϣbuffer
+              Length 汾Ϣ
+*   : HwVer  汾Ϣbuffer
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2014430
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetBuckleBoardHardWareVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *HwVer, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 VersionBuffer[DMI_HARDWARE_VER_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == HwVer) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 199, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).",  EnclAddr, HwVer, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BUCKLEBOARD_HW_VERSION;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_HARDWARE_VER_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 200, "%s return error %d.", __FUNCTION__, RetVal);
+        return RetVal;
+    }
+
+    /*·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)HwVer, (OSP_U32)min(DMI_HARDWARE_VER_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_HARDWARE_VER_LEN, (OSP_S32)Length));
+
+    return RetVal;
+}
+
+/******************************************************************************
+*     : MPAIntf_GetBuckleBoardPresent
+*   : ѯۿλź
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             PresentState  λź
+*   : PresentState  λź
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2014430
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetBuckleBoardPresent(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *PresentState)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == PresentState))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 201, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PresentState);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BUCKLEBOARD_EXIST_STATE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PresentState);
+
+}
+
+/******************************************************************************
+*     : MPAIntf_GetBuckleBoardPowerState
+*   : ѯۿpower good״̬
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             Status    ۿpower good״̬
+*   : Status    ۿpower good״̬
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2014430
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetBuckleBoardPowerState(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Status)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Status))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 202, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BUCKLEBOARD_POWER_STATE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status);
+
+}
+
+/******************************************************************************
+*     : MPAIntf_GetBuckleBoardType
+*   : ѯۿ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             Type       ۿ
+*   : Type       ۿ
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2014430
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetBuckleBoardType(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Type)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Type))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 203, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Type);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BUCKLEBOARD_TYPE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Type);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetMgmtMasterSlave
+ *   : ȡоƬ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Flag      ӱ־
+ *   : Flag      ӱ־
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013118
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetMgmtMasterSlave(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Flag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Flag))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 204, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Flag);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_CHIPSTATUS_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Flag);
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetMgmtDegreeChange
+ *   : л
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201443
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetMgmtDegreeChange(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 205, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BMCSTATUS_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetSysKillFlag
+ *   : ȡϵͳ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Flag      ӱ־
+ *   : Flag      ӱ־
+ *   ֵ  : OSP_S32
+ * ˵  : ϽӿΪɱģʽ01½ӿcpldΪϵͳӲ12Ҫת
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013119
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetSysKillFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Flag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Flag))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 206, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Flag);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SYS_STATUS_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Flag);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 207, "MPA GetSysKillFlag fail 0x%x.", RetVal);
+        return RetVal;
+    }
+
+    /*cpldֵ1󷵻أע˵*/
+    *Flag -= 1;
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetSysKillFlag
+ *   : ôϵͳ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Flag      ӱ־
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : ϽӿΪɱģʽ01½ӿcpldΪϵͳӲ12Ҫת
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013119
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetSysKillFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Flag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 208, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return RetVal;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 208, "MPA sts system kill flag(0x%d), devframe(0x%x).", Flag, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+
+    MpaCmd.Cmd = DRV_CMD_SYS_STATUS_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*ֵ1õcpldע˵*/
+    Flag += 1;
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Flag, (OSP_VOID *)NULL);
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetIsoPara
+ *   : ѯ޲
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Para      
+ *   : Para      
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014117
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetIsoPara(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Para)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Para))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 209, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Para);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_DISABLEPHY_PARAM_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_PHY_ISO_PARA_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Para);
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetIsoPara
+ *   : ø
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Type      
+ *             Value     ֵ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014118
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetIsoPara(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Type, OSP_U8 Value)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 DataIn[2] = {0, 0};
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 210, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_DISABLEPHY_PARAM_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(Type) + sizeof(Value);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    DataIn[0] = Type;
+    DataIn[1] = Value;
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetMgmtCpuType
+ *   : ѯоƬλ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Type      оƬλ
+ *   : Type      оƬλ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014117
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetMgmtCpuType(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Type)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    
+    if ((NULL == EnclAddr) || (NULL == Type))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 211, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Type);
+        return DRV_RETURN_ERROR;
+    }
+    
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    if ((DRV_FARMEMODEL_EXP_HDS != MpaAddr->DevFrame)
+         && (DRV_FRAMEMODEL_12GSAS_CTL_4U72 != MpaAddr->DevFrame)
+         && (DRV_FARMEMODEL_12G_EXP_HDS != MpaAddr->DevFrame))
+    {
+        *Type = 0xFF;
+        return DRV_RETURN_OK;
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_CPU_TYPE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Type);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetMgmtReset
+ *   : λоƬ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013118
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetMgmtReset(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 212, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_RESET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /**/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+    
+}
+ /******************************************************************************
+ *     : MPAIntf_GetFrameNumber
+ *   : ѯ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId        FRU
+ *             FrameNumber      
+ *   : FrameNumber           
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131018
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFrameNumber(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U16 *FrameNumber)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == FrameNumber))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 213, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, FrameNumber);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_FRAMENUM_GET;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)FrameNumber);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetFrameNumber
+ *   : ÿ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId        FRU
+ *             FrameNumber      
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131018
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetFrameNumber(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U16 FrameNumber)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 214, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_FRAMENUM_SET;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&FrameNumber, (OSP_VOID *)NULL);   
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetLedStatus
+ *   : ѯled״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             Type       LED
+ *             Status      LED״̬
+ *   : Status      LED״̬ϸӿĵ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013116
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetLedStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_LIGHT_TYPE_E Type, DMI_LIGHT_STATE_E *Status)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*typeκfru idtarget*/
+    OSP_U32 DataIn[2] = {0, 0};
+    OSP_U8 BmcDataIn[2] = {0, 0};
+    
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Status))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 215, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
+        return DRV_RETURN_ERROR;
+    }
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    MpaCmd.Cmd = DRV_CMD_LED_STATUS_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DMI_LIGHT_STATE_E);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    if (DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddr->DevFrame)
+    {
+        DataIn[0] = (OSP_U32)Type;
+        DataIn[1] = MpaCmd.FruId;
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Status);    
+        
+    }
+    else
+    {
+        BmcDataIn[0] = sizeof(OSP_U8);
+        BmcDataIn[1] = (OSP_U8)Type;
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Status);    
+
+    }
+    
+    
+}                    
+
+ /******************************************************************************
+ *     : MPAIntf_SetLedStatus
+ *   : led״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             Type       LED
+ *             Status      LED״̬
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013116
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetLedStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_LIGHT_TYPE_E Type, DMI_LIGHT_STATE_E Status)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*type/fru id/Statustarget*/
+    OSP_U32 DataIn[3] = {0, 0, 0};
+
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 216, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    /* ·led״̬·һδӡһ */
+    DRV_MPA_TRACE(DRV_LOG_INFO, 217, "MPA sets led status, id(0x%llx), type(%d), value(%d), frame mode(%d), host id(0x%x), scsi id(0x%x)..", 
+                    DriverId, Type, Status, MpaAddr->DevFrame, MpaAddr->DevAddr.ScsiAddr.uiHostId, MpaAddr->DevAddr.ScsiAddr.uiScsiId);
+
+    MpaCmd.Cmd = DRV_CMD_LED_STATUS_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(Type) + sizeof(Status);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+    
+    if (MpaAddr->DevFrame < DRV_FRAMEMODEL_V1_END)
+    {
+        DataIn[0] = (OSP_U32)Type;
+        DataIn[1] = MpaCmd.FruId;
+        DataIn[2] = (OSP_U32)Status;
+    }
+    else
+    {
+        DataIn[0] = (OSP_U32)Type;
+        DataIn[1] = (OSP_U32)Status;
+    }
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetTime
+ *   : Сϵͳʱ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             Time      ʱ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013119
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetTime(OSP_VOID *EnclAddr, OSP_U64 DriverId, DAL_BMCTIME_S *Time)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DRV_BMCTIME_S OldTime;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    
+    if ((NULL == EnclAddr) || (NULL == Time))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 218, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    OSAL_MemSet_s(&OldTime, sizeof(DRV_BMCTIME_S), INVALID_VALUE8, sizeof(DRV_BMCTIME_S));
+    
+    MpaAddr =(DAL_MPA_ADDR_S *)EnclAddr; 
+    MpaCmd.Cmd = DRV_CMD_TIME_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    if (DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddr->DevFrame)
+    {
+        /* V1õʱ䲻ܱ2000С*/
+        if (Time->Year < MPA_YEAR_2000)
+        {
+            DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 219, 1, 20 * HZ, "Set time param error, set year(%d) is smaller than year 2000.", Time->Year);
+            return DRV_RETURN_ERROR;
+        }
+
+        MpaCmd.BufLen = sizeof(DRV_BMCTIME_S);
+        OldTime.ucYear = (OSP_U8)(Time->Year - MPA_YEAR_2000);
+        OldTime.ucMonth = Time->Month;
+        OldTime.ucDay = Time->Day;
+        OldTime.ucHour = Time->Hour;
+        OldTime.ucMinute = Time->Minute;
+        OldTime.ucSecond = Time->Second;
+        
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&OldTime, (OSP_VOID *)NULL);    
+    }
+    else
+    {
+        MpaCmd.BufLen = sizeof(DAL_BMCTIME_S);
+
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Time, (OSP_VOID *)NULL);    
+    }
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetTime
+ *   : ѯСϵͳʱ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             Time      ʱ
+ *   : Time      ʱ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013119
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetTime(OSP_VOID *EnclAddr, OSP_U64 DriverId, DAL_BMCTIME_S *Time)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    MPA_CMD_INFO_S MpaCmd;
+    DRV_BMCTIME_S OldTime;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Time))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 220, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Time);
+        return DRV_RETURN_ERROR;
+    }
+
+    OSAL_MemSet_s((OSP_VOID *)&OldTime, sizeof(DRV_BMCTIME_S),  INVALID_VALUE8, sizeof(DRV_BMCTIME_S));
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    MpaCmd.Cmd = DRV_CMD_TIME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    if (DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddr->DevFrame)
+    {
+        MpaCmd.BufLen = sizeof(DRV_BMCTIME_S);
+        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&OldTime);
+
+        Time->Year = (OSP_U16)(OldTime.ucYear & 0xFF) + MPA_YEAR_2000;
+        Time->Month = OldTime.ucMonth;
+        Time->Day = OldTime.ucDay;
+        Time->Hour = OldTime.ucHour;
+        Time->Minute = OldTime.ucMinute;
+        Time->Second = OldTime.ucSecond;
+        return RetVal;
+    }
+    else
+    {
+        MpaCmd.BufLen = sizeof(DAL_BMCTIME_S);
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Time);    
+    }
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetRtcTime
+ *   : RTCʱ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId  ID ͡FRUIDDEVICE IDϢ   
+ *             Time      ʱ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131212
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetRtcTime(OSP_VOID *EnclAddr, OSP_U64 DriverId, DAL_BMCTIME_S Time)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 221, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_SET_RTC_TIME;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+    MpaCmd.BufLen = sizeof(DAL_BMCTIME_S);
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Time, (OSP_VOID *)NULL);    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetRtcTime
+ *   : ѯRTCʱ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             Time      ʱ
+ *   : Time      ʱ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131212
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetRtcTime(OSP_VOID *EnclAddr, OSP_U64 DriverId, DAL_BMCTIME_S *Time)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Time))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 222, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Time);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_RTC_TIME;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DAL_BMCTIME_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Time);    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetFramePowerState
+ *   : ѯԴ״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId        FRU
+ *             FramePowerstate  Դ״̬
+ *   : FramePowerstate  Դ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131018
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFramePowerState(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 *FramePowerstate)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == FramePowerstate))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 223, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, FramePowerstate);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_FRAME_POWEROFF_GET;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)FramePowerstate);    
+    
+}                           
+
+ /******************************************************************************
+ *     : MPAIntf_SetProductConfig
+ *   : òƷ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId        FRU
+ *             ProductConfig  Ʒ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014218
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetProductConfig(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_PRODUCT_CUSTOM_CONFIG_S *ProductConfig)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == ProductConfig))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 224, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, ProductConfig);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 225, "MPA sets product config, boardcnt(%d), powercnt(%d), fancnt(%d), bbucnt(%d), bigcardcnt(%d), smallcardcnt(%d), mgmtcnt(%d).", 
+        ProductConfig->BoardCount, ProductConfig->PowerCount, ProductConfig->FanCount, ProductConfig->BbuCount, 
+        ProductConfig->BigIntfCount, ProductConfig->SmallIntfCount, ProductConfig->MgmtCount);
+        
+    MpaCmd.Cmd = DRV_CMD_SET_PRODUCT_CONFIG;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DMI_PRODUCT_CUSTOM_CONFIG_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)ProductConfig, (OSP_VOID *)NULL);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetFramePowerOnOff
+ *   : üµ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId        FRU
+ *             FramePowerCtrl    µ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131018
+ *           : 淫
+ *    ޸   : ɺ
+ *  1.       : 2013114
+ *           : qintianyi 90005776
+ *    ޸   : ޸ֿ֧ƿͼµ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetFramePowerOnOff(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 FramePowerCtrl)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 226, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+    
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DRV_MPA_TRACE(DRV_LOG_INFO, 227, "MPA sets frame power on or off, id(0x%x), value(%d), devframe(0x%x).", 
+                        FruId, FramePowerCtrl, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+
+    MpaCmd.Cmd = DRV_CMD_SET_ENCL_POWER_ONOFF;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /* V2-BMC: µ, FruIdͳһת0x200·*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
+        /* added by hulinhui 00289393 REASON: DTS2015061611133 ťµboard1ƽACϣĿ״̬һ */
+        if (DAL_NOTIFY_POWER_DOWN_MODE == FramePowerCtrl)
+        {
+            MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_ENCL, 0);
+        }
+        /* ended by hulinhui 00289393*/
+        MpaCmd.DeviceId = 0;
+    }    
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&FramePowerCtrl, (OSP_VOID *)NULL);    
+    
+}                               
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuBackupFlag
+ *   : ѯϵͳǷ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId        FRU
+ *             PowerFlag  Ƿ
+ *   : PowerFlag  Ƿ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131219
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuBackupFlag(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 *PowerFlag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == PowerFlag))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 228, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PowerFlag);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_POWER_BACKUP_FLAG;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PowerFlag);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetChipRunMode
+ *   : ѯоƬģʽ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             RunMode  ϵͳģʽ:ģʽװģʽֶģʽ 
+ *   : RunMode  ϵͳģʽ:ģʽװģʽֶģʽ 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131018
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetChipRunMode(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *RunMode)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == RunMode))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 229, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, RunMode);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_TEST_MODE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)RunMode);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetChipRunMode
+ *   : оƬģʽ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             RunMode  ϵͳģʽ:ģʽװģʽֶģʽ 
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131018
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetChipRunMode(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 RunMode)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 230, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 231, "MPA sets chip run mode, id(0x%llx), value(%d).", DriverId, RunMode);
+    MpaCmd.Cmd = DRV_CMD_RUNMODE_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&RunMode, (OSP_VOID *)NULL);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPresentState
+ *   : FRUλ״̬ѯ
+ *   : EnclAddr   :ϲ·ĵַϢmcutype,scsiַframetype          
+ *             FruId         :FRU  
+ *             PresentState  :FRUλ״̬ 1:λ0:λ
+ *   : PresentState  :FRUλ״̬ 1:λ0:λ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131018
+ *           : zhanwenbin 90003961
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPresentState(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 *PresentState)
+{
+#define MPA_SMM400_PRESENT_DEVICEID 0x10
+#define MPA_SMM401_PRESENT_DEVICEID 0x11
+
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == PresentState))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 232, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PresentState);
+        return DRV_RETURN_ERROR;
+    }
+    
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+/* BEGIN: Added by qintianyi 90005776, 2014/8/5  ⵥ:c02, ޸ԭ:12g hds */
+    if (TRUE == MPA_If12gHdsCtrlBoardId(MpaAddr->DevFrame, FruId))
+    {
+        return MPA_Get12gHdsCommonInfo((DAL_MPA_ADDR_S *)EnclAddr,
+                                        (OSP_U64)DAL_BUILD_DEVICE_ID((OSP_U64)0, (OSP_U64)0, (OSP_U64)FruId, (OSP_U64)0),//עu64 driver id
+                                        SAS_12G_CMD_GET_PRESENT,
+                                        (OSP_VOID *)PresentState, 
+                                        sizeof(OSP_U8));
+    }
+/* END: Added by qintianyi 90005776, 2014/8/5  ⵥ:c02 */
+
+    MpaCmd.Cmd = DRV_CMD_EXIST_INFO_GET;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+
+
+    /* V2-BMC: ѯλ, FruIdͳһת0x200, ͨDeviceId*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
+        {
+            MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
+            MpaCmd.DeviceId = MPA_SMM400_PRESENT_DEVICEID;
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
+        {
+            MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
+            MpaCmd.DeviceId = MPA_SMM401_PRESENT_DEVICEID;
+        }        
+    }    
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PresentState);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPeerPresentState
+ *   : ѯԿλ
+ *   : EnclAddr   :ϲ·ĵַϢmcutype,scsiַframetype          
+ *             FruId         :FRU  
+ *             PresentState  :FRUλ״̬ 1:λ0:λ
+ *   : PresentState  :FRUλ״̬ 1:λ0:λ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201414
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPeerPresentState(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 PeerSlot, OSP_U8 *PresentState)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U32 SlotId = 0xFF;
+
+    if ((NULL == EnclAddr) || (NULL == PresentState))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 233, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PresentState);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    /*ֻsesָ֧ýӿڣưbsp*/
+    if ((DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame) || (MpaAddr->DevFrame > DRV_FRAMEMODEL_12GSAS_EXP_END))
+    {
+        return RETURN_INVALID;
+    }
+
+    /*鱾id*/
+    RetVal = MPAIntf_GetBoardSlotId(EnclAddr, DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0), &SlotId);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 234, "MPA GetPeerPresentState GetBoardSlotId Fail %d.", RetVal);
+        return RetVal;
+    }
+
+    /*ֻ˫أ0xFF֧mmlѯ*/
+    if ((PeerSlot > MPA_SLOT_B) && (0xFF != PeerSlot))
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 235, "MPA GetPeerPresentState Peer Id Err %d.", PeerSlot);
+        return RETURN_INVALID;
+    }
+    if (SlotId > MPA_SLOT_B)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 236, "MPA GetPeerPresentState Local Id Err %d.", SlotId);
+        return RETURN_INVALID;        
+    }
+    if (PeerSlot == SlotId)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 237, "MPA GetPeerPresentState Id Same %d.", SlotId);
+        return RETURN_INVALID;                
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_EXIST_INFO_GET_PEER;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PresentState);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetFruPowerCtrl
+ *   : fruԴ״̬
+ *   : EnclAddr  :ϲ·ĵַϢmcutype,scsiַframetype          
+ *             FruId     :FRU  
+ *             Opcode    : fruԴ״̬
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014210
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetFruPowerCtrl(OSP_VOID *EnclAddr, OSP_U32 FruId, DAL_POWER_STATE_E Opcode)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 Value = 0;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 238, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+    
+    DRV_MPA_TRACE(DRV_LOG_INFO, 239, "MPA sets fru power, id(0x%x), value(%d), devframe(0x%x).", 
+                        FruId, Opcode, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+
+    MpaCmd.Cmd = DRV_CMD_SET_FRU_POWER;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(Value);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    if ((DRV_FRAMEMODEL_12GSAS_EXP_END < ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame)
+        && (DRV_FRAMEMODEL_1710BMC_END > ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame))
+    {
+        MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_RESET_T4;
+    }
+    MpaCmd.WtRd = MPA_WRITE;
+
+    Value = (OSP_U8)Opcode;
+
+    /* BEGIN: Added by shipin, 2015-8-6 20:45:20, ⵥ:DTS2015080608283, ޸ԭ: SDAźűסĹϹģģT4ӿڿйģ鶼Ϊδƣڹɢ*/
+    if ((DRV_FRAMEMODEL_V1_END < ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame)
+        && (DRV_FRAMEMODEL_12GSAS_EXP_END > ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame))
+    {
+        Value = (OSP_U8)(FruId & 0xFF);
+    }
+    /* END: Added by shipin, 2015-8-6 20:45:20 */
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Value, (OSP_VOID *)NULL);
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetAllAlarm
+ *   : ѯԭdev澯
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *             AlarmStatus : ԭ澯 
+ *   : AlarmStatus : ԭ澯 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201412
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetAllAlarm(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_ALL_ALARM_S *AlarmStatus)
+{
+    DRV_CMD_S DevCmd;
+    DRV_ADDR_DOWNINFO_S DevAddr;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U8 DevId = 0;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == AlarmStatus))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 240, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, AlarmStatus);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    OSAL_MemSet_s((OSP_U8 *)&DevCmd, sizeof(DevCmd), 0, sizeof(DevCmd));
+    OSAL_MemSet_s((OSP_U8 *)&DevAddr, sizeof(DevAddr), 0, sizeof(DevAddr));
+
+    DevId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    if (DevId > 1)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 241, "MPA finds device id(%d) is error.", DevId);
+        return DRV_RETURN_ERROR;
+    }
+    
+    RetVal = MPA_GetV1AddrPara((DAL_MPA_ADDR_S *)EnclAddr, &DevAddr);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return RetVal;
+    }
+    
+    DevCmd.uiCmd = DRV_CMD_ALL_ALARM_GET;
+    DevCmd.ucId = DevId;
+    RetVal = DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&AlarmStatus->stFruAlarm);
+    
+    DevCmd.uiCmd = DRV_CMD_SINGLE_ALARM_GET;
+
+    /*Կظ澯0x11ʼʹDevId*0x10ʽѯԿظ澯*/
+    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_TEMP + DevId * 0x10);
+    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&AlarmStatus->stTempratureAlarm);
+    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_BOARD + DevId * 0x10);
+    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&AlarmStatus->stCtlboardAlarm);
+    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_IOCARD + DevId * 0x10);
+    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&AlarmStatus->stIocardAlarm);
+    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_BBOARD + DevId * 0x10);
+    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&AlarmStatus->stBackboardAlarm);
+    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_POWER + DevId * 0x10);
+    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&AlarmStatus->stPowerAlarm);
+    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_BBU + DevId * 0x10);
+    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&AlarmStatus->stBbuAlarm);
+    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_FAN + DevId * 0x10);
+    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&AlarmStatus->stFanAlarm);
+
+    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_OOPCOM + DevId * 0x10);
+    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)&AlarmStatus->stOppComAlarm);
+    
+    /* V1-BMCû澯*/
+    if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame)
+    {
+        return RetVal;
+    }
+    
+    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_DISK + DevId * 0x10);
+    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)AlarmStatus->astHarddiskAlarm);
+    DevCmd.ucId = (OSP_U8)(DRV_ID_SINGLE_ALARM_EXPPORT + DevId * 0x10);
+    RetVal |= DEV_Intf(&DevCmd, &DevAddr, (OSP_VOID *)NULL, (OSP_VOID *)AlarmStatus->stExpPortAlarm);
+
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetAlarmSource
+ *   : ѯses澯Դ
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *             AlarmStatus : ses澯Դ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201427
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetAlarmSource(OSP_VOID *EnclAddr, OSP_U64 DriverId, SES_R7CTL_ALARM_INFO_ARRAY_S *AlarmStatus)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == AlarmStatus))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 242, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, AlarmStatus);
+        return DRV_RETURN_ERROR;
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_CUR_ALARM_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(SES_R7CTL_ALARM_INFO_ARRAY_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)AlarmStatus);    
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetAlarmName
+ *   : ѯ澯
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *             Name        : 澯
+ *             Length      : 澯Ƴ
+ *   : Name        : 澯
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131128
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetAlarmName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    MPA_ALARM_TABLE_S TableInfo;
+    OSP_S8 NameBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 243, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+        return DRV_RETURN_ERROR;
+    }
+    
+    OSAL_MemSet_s(NameBuffer, sizeof(NameBuffer), 0, sizeof(NameBuffer));
+
+    OSAL_MemSet_s((OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S), INVALID_VALUE8, sizeof(MPA_CMD_INFO_S));
+    MpaCmd.Cmd = DRV_CMD_GET_ALARM_NAME;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = ALARM_NAME;
+    MpaCmd.WtRd = MPA_READ;
+
+    /* BEGIN: Added by yinhuaqiang 00305130, 2015/4/15ⵥ:DTS2015041310766  */
+    /* DMIڲѯͼϵSAS˿ʱʹôвλϢFruIdDeviceId̿һĿƿ
+       MPASESĻʹô˲λϢ */
+    MpaCmd.FruId = MPA_ConvertFruId(EnclAddr, MpaCmd.FruId);
+    /* END:   Added by yinhuaqiang 00305130, 2015/4/15 ⵥ:DTS2015041310766  */
+
+    MPA_HdsBCalarmTrans((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd);
+    
+    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaCmd, sizeof(MPA_CMD_INFO_S), (OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S));
+    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaAddr, sizeof(DAL_MPA_ADDR_S), (OSP_U8 *)EnclAddr, sizeof(DAL_MPA_ADDR_S));
+    TableInfo.CommonTable.IdInfoTable = g_MpaAlarmId;
+    TableInfo.CommonTable.TableLen = g_MpaAlarmTableLen;
+
+    /*Ϣtarget*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)NameBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 244, "MPA GetAlarmName return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)NameBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+    return RetVal;
+}
+
+ 
+  /******************************************************************************
+  *     : MPAIntf_GetFruAllAlarmName
+  *   : ѯ澯
+  *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+  *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+                SubId ¶ȵID
+  *             Name        : 澯
+  *             Length      : 澯Ƴ
+  *   : Name        : 澯
+  *   ֵ  : OSP_S32
+  * ˵  : 
+  * 
+  * ޸ʷ      :
+  *  1.       : 20131128
+  *           : qintianyi 90005776
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+ OSP_S32 MPAIntf_GetFruAllAlarmName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SubId, OSP_S8 *Name, OSP_U32 Length)
+ {
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 NameBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 245, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+        return DRV_RETURN_ERROR;
+    }
+    
+    OSAL_MemSet_s(NameBuffer, sizeof(NameBuffer), 0, sizeof(NameBuffer));
+
+    MpaCmd.Cmd = DRV_CMD_GET_ALARM_NAME;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)SubId;
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = ALARM_NAME;
+    MpaCmd.WtRd = MPA_READ;
+
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NameBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 246, "MPA GetAlarmName return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)NameBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetAlarmType
+ *   : ȡ澯
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *             Type        : 澯
+ *   : Type        : 澯
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131128
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetAlarmType(OSP_VOID *EnclAddr, OSP_U64 DriverId, ALARM_E *Type)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    MPA_ALARM_TABLE_S TableInfo;
+
+    if ((NULL == EnclAddr) || (NULL == Type))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 247, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Type);
+        return DRV_RETURN_ERROR;
+    }
+
+    OSAL_MemSet_s((OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S), INVALID_VALUE8, sizeof(MPA_CMD_INFO_S));
+    MpaCmd.Cmd = DRV_CMD_GET_ALARM_TYPE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(ALARM_E);
+    MpaCmd.SdrType = ALARM_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /* BEGIN: Added by yinhuaqiang 00305130, 2015/4/15ⵥ:DTS2015041310766  */
+    /* DMIڲѯͼϵSAS˿ʱʹôвλϢFruIdDeviceId̿һĿƿ
+       MPASESĻʹô˲λϢ */
+    MpaCmd.FruId = MPA_ConvertFruId(EnclAddr, MpaCmd.FruId);
+    /* END:   Added by yinhuaqiang 00305130, 2015/4/15 ⵥ:DTS2015041310766  */
+
+    MPA_HdsBCalarmTrans((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd);
+    
+    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaCmd, sizeof(MPA_CMD_INFO_S), (OSP_U8 *)&MpaCmd, 
+        sizeof(MPA_CMD_INFO_S));
+    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaAddr, sizeof(DAL_MPA_ADDR_S), (OSP_U8 *)EnclAddr, 
+        sizeof(DAL_MPA_ADDR_S));
+    TableInfo.CommonTable.IdInfoTable = g_MpaAlarmId;
+    TableInfo.CommonTable.TableLen = g_MpaAlarmTableLen;
+
+    /*Ϣtarget*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)Type);
+}
+
+/******************************************************************************
+*     : MPA_V2BmcCheckFrameboardNewAlarm
+*   : V2-BMC ĸ澯Ƿ6
+*   : MpaAddr  
+*             FruId    
+*   : 
+*   ֵ  : OSP_U8, TRUE:澯6(Ҫbmcѯ),
+                          FALSE: 澯5
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015724
+*           : chenkeren 00221000
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_U8 MPA_V2BmcCheckFrameboardNewAlarm(DAL_MPA_ADDR_S *MpaAddr, OSP_U32 FruId)
+{
+    OSP_S8 VersionBuffer[DMI_FW_VER_LEN + 1] = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    MPA_CMD_INFO_S MpaCmd;
+
+    MpaCmd.Cmd = DRV_CMD_VERSION_GET_MGMT;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = DMI_FW_VER_LEN;
+    MpaCmd.SdrType = SDRTYPE_MGMTCPU_SOFTVERSION;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*˴MPA_Intf,ֱV2-BMC,һӿźռʱ*/
+    RetVal = MPA_Intf(MpaAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);    
+
+    /*ѯ汾Žӿʧ,Ĭϱ5澯*/
+    if (RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE_LIMIT(DRV_LOG_ERR, 0, 1, 20 * HZ, "Get mgmt(0x%x) version failed.", FruId);
+
+        return FALSE;
+    }
+
+    /*bmc25.00T78ԾۺϽ޸(һ,ش).
+        汾ű25.00T77,Ĭ6澯,T77С5
+    */
+    if (strncmp((char *)VersionBuffer, "25.00T77", strlen("25.00T77")) > 0)
+    {
+        return TRUE;
+    }
+
+    return FALSE;
+}
+  
+/*2015-7-25 c00221000 for DTS2015072500001 begin: 汾H1汾,Ϊ澯ۺϸ⵼½ӿڵʧ */
+/******************************************************************************
+*     : MPA_V2BmcFrameAlarmTypeProcess
+*   : V2-BMC澯⴦
+*   : EnclAddr  
+*             MpaCmd    
+*             DataIn    
+*             Type      
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015724
+*           : chenkeren 00221000
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPA_V2BmcFrameAlarmTypeProcess(DAL_MPA_ADDR_S *EnclAddr, MPA_CMD_INFO_S *MpaCmd, OSP_U8 *DataIn, ALARM_E *Type)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    ALARM_E AlarmType[MPA_LENTH_32];
+    OSP_U8 Flag0 = FALSE;
+    OSP_U8 Flag1 = FALSE;
+    OSP_U32 FruId = 0;
+    OSP_U16 NeedAlarmNum = 0;
+
+    /*ⲿ֤βΪ*/
+
+    /*澯С5,ֱӷ*/
+    NeedAlarmNum = DataIn[1];
+    if ((NeedAlarmNum < MPA_LENTH_5)
+        || (NeedAlarmNum > MPA_LENTH_32))
+    {
+        DRV_MPA_TRACE_LIMIT(DRV_LOG_ERR, 0, 1, 60 * HZ, "Mpa finds alarm num(%d) error.", NeedAlarmNum);
+        return DRV_RETURN_ERROR;
+    }
+
+    /*澯ͳʼΪȫF*/
+    OSAL_MemSet_s(AlarmType, sizeof(AlarmType), INVALID_VALUE32, sizeof(AlarmType));
+
+    /*ѯ2bmcİ汾,ȷǷһ5澯*/
+    FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0);
+    Flag0 = MPA_V2BmcCheckFrameboardNewAlarm(EnclAddr, FruId);
+
+    FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1);
+    Flag1 = MPA_V2BmcCheckFrameboardNewAlarm(EnclAddr, FruId);
+
+    /*ֻҪһ5澯,ͷ5ʵ澯+1ʼ澯*/
+    if ((FALSE == Flag0) || (FALSE == Flag1))
+    {
+        /*ǰ5澯ʹbmcѯ*/
+        DataIn[1] = MPA_LENTH_5;
+        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)AlarmType);
+        if (DRV_RETURN_OK != RetVal)
+        {
+            DRV_MPA_TRACE(DRV_LOG_ERR, 178, "MPA MPA_Intf return error, flag0(%d), flag1(%d), need(%d).", Flag0, Flag1, NeedAlarmNum);
+            return RetVal;
+        }
+
+        /*5ʵ+1ʼ*/
+        OSAL_MemCpy_s((OSP_U8 *)Type, MPA_LENTH_5 * sizeof(ALARM_E), (OSP_U8 *)AlarmType, 
+            MPA_LENTH_5 * sizeof(ALARM_E));
+
+        if (NeedAlarmNum > MPA_LENTH_5)
+        {
+            OSAL_MemCpy_s((OSP_U8 *)(Type + MPA_LENTH_5 ), (NeedAlarmNum - MPA_LENTH_5) * sizeof(ALARM_E), 
+                (OSP_U8 *)(AlarmType + MPA_LENTH_5), (NeedAlarmNum - MPA_LENTH_5) * sizeof(ALARM_E));
+        }
+
+        return DRV_RETURN_OK;
+    }
+    else
+    {
+        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Type);
+        if (DRV_RETURN_OK != RetVal)
+        {
+            DRV_MPA_TRACE(DRV_LOG_ERR, 178, "MPA MPA_Intf return error, need(%d).", NeedAlarmNum);
+            return RetVal;
+        }
+
+        return DRV_RETURN_OK;
+    }
+}
+
+/******************************************************************************
+*     : MPA_V2BmcFrameAlarmInfoProcess
+*   : V2-BMC澯Ϣ⴦
+*   : EnclAddr  
+*             MpaCmd    
+*             DataIn    
+*             Alarm     
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015724
+*           : chenkeren 00221000
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPA_V2BmcFrameAlarmInfoProcess(DAL_MPA_ADDR_S *EnclAddr, MPA_CMD_INFO_S *MpaCmd, OSP_U8 *DataIn, OSP_U32 *Alarm)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U32 AlarmInfo[MPA_LENTH_32] = {0};
+    OSP_U8 Flag0 = FALSE;
+    OSP_U8 Flag1 = FALSE;
+    OSP_U32 FruId = 0;
+    OSP_U16 NeedAlarmNum = 0;
+
+    /*ⲿ֤βΪ*/
+
+    /*澯С5,ֱӷ*/
+    NeedAlarmNum = DataIn[1];
+    if ((NeedAlarmNum < MPA_LENTH_5)
+        || (NeedAlarmNum > MPA_LENTH_32))
+    {
+        DRV_MPA_TRACE_LIMIT(DRV_LOG_ERR, 0, 1, 60 * HZ, "Mpa finds alarm num(%d) error.", NeedAlarmNum);
+        return DRV_RETURN_ERROR;
+    }
+
+    /*ѯ2bmcİ汾,ȷǷһ5澯*/
+    FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0);
+    Flag0 = MPA_V2BmcCheckFrameboardNewAlarm(EnclAddr, FruId);
+
+    FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1);
+    Flag1 = MPA_V2BmcCheckFrameboardNewAlarm(EnclAddr, FruId);
+
+    /*ֻҪһ5澯,ͷ5ʵ澯+1ʼ澯*/
+    if ((FALSE == Flag0) || (FALSE == Flag1))
+    {
+        /*ǰ5澯Ϣbmcѯ*/
+        DataIn[1] = MPA_LENTH_5;
+        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)AlarmInfo);
+        if (DRV_RETURN_OK != RetVal)
+        {
+            DRV_MPA_TRACE(DRV_LOG_ERR, 178, "MPA MPA_Intf return error, flag0(%d), flag1(%d), need(%d).", Flag0, Flag1, NeedAlarmNum);
+            return RetVal;
+        }
+
+        /*5ʵϢ+1ʼϢ*/
+        OSAL_MemCpy_s((OSP_U8 *)Alarm, MPA_LENTH_5 * sizeof(ALARM_E), (OSP_U8 *)AlarmInfo, 
+            MPA_LENTH_5 * sizeof(ALARM_E));
+
+        if (NeedAlarmNum > MPA_LENTH_5)
+        {
+            OSAL_MemCpy_s((OSP_U8 *)(Alarm + MPA_LENTH_5), (NeedAlarmNum - MPA_LENTH_5) * sizeof(ALARM_E), 
+                (OSP_U8 *)(AlarmInfo + MPA_LENTH_5), (NeedAlarmNum - MPA_LENTH_5) * sizeof(ALARM_E));
+        }
+        
+        return DRV_RETURN_OK;
+    }
+    else
+    {
+        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Alarm);
+        if (DRV_RETURN_OK != RetVal)
+        {
+            DRV_MPA_TRACE(DRV_LOG_ERR, 178, "MPA MPA_Intf return error,need(%d).", NeedAlarmNum);
+            return RetVal;
+        }
+
+        return DRV_RETURN_OK;
+    }
+}
+/*2015-7-25 c00221000 for DTS2015072500001 end*/
+ 
+/******************************************************************************
+*     : MPAIntf_GetFruAllAlarmType
+*   : ȡFRUۺϸ澯
+*   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+*             DriverId    : ID ͡FRUIDDEVICE IDϢ
+*             Type        : 澯
+*   : Type        : 澯
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2014418
+*           : shufan 204084
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetFruAllAlarmType(OSP_VOID *EnclAddr, OSP_U64 DriverId, ALARM_E *Type, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 BmcDataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Type))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 248, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Type);
+        return DRV_RETURN_ERROR;
+    }
+
+    OSAL_MemSet_s((OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S), INVALID_VALUE8, sizeof(MPA_CMD_INFO_S));
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    MpaCmd.Cmd = DRV_CMD_GET_FRU_ALARM_TYPE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = (OSP_U16)Length;
+    MpaCmd.SdrType = ALARM_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        BmcDataIn[0] = sizeof(OSP_U8);
+        BmcDataIn[1] = (OSP_U8)(Length / sizeof(ALARM_E));
+
+        /*2015-7-25 c00221000 for DTS2015072500001 begin: 汾H1汾,Ϊ澯ۺϸ⵼½ӿڵʧ */
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_ENCL, 0) == MpaCmd.FruId)
+        {
+            if(DRV_FRAMEMODEL_PCIE_CTRL_2U_C1_BMC == MpaAddr->DevFrame)
+                return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Type);
+            /*2016.08.25 y00379870 for DTS2016082312059 end*/
+            return MPA_V2BmcFrameAlarmTypeProcess((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, BmcDataIn, Type);
+        }
+        /*2015-7-25 c00221000 for DTS2015072500001 end*/
+
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Type);
+    }
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Type);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetAlarmInfo
+ *   : ȡ澯״̬
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *             Alarm       : 澯״̬
+ *   : Alarm       : 澯״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131128
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetAlarmInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Alarm)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    MPA_ALARM_TABLE_S TableInfo;
+
+    if ((NULL == EnclAddr) || (NULL == Alarm))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 249, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Alarm);
+        return DRV_RETURN_ERROR;
+    }
+    
+    OSAL_MemSet_s((OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S), INVALID_VALUE8, sizeof(MPA_CMD_INFO_S));
+    MpaCmd.Cmd = DRV_CMD_GET_ALARM_INFO;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = ALARM_INFO;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /* BEGIN: Added by yinhuaqiang 00305130, 2015/4/15ⵥ:DTS2015041310766  */
+    /* DMIڲѯͼϵSAS˿ʱʹôвλϢFruIdDeviceId̿һĿƿ
+       MPASESĻʹô˲λϢ */
+    MpaCmd.FruId = MPA_ConvertFruId(EnclAddr, MpaCmd.FruId);
+    /* END:   Added by yinhuaqiang 00305130, 2015/4/15 ⵥ:DTS2015041310766  */
+    
+    MPA_HdsBCalarmTrans((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd);
+    
+    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaCmd, sizeof(MPA_CMD_INFO_S), (OSP_U8 *)&MpaCmd, 
+        sizeof(MPA_CMD_INFO_S));
+    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaAddr, sizeof(DAL_MPA_ADDR_S), (OSP_U8 *)EnclAddr, 
+        sizeof(DAL_MPA_ADDR_S));
+    TableInfo.CommonTable.IdInfoTable = g_MpaAlarmId;
+    TableInfo.CommonTable.TableLen = g_MpaAlarmTableLen;
+
+    /*Ϣtarget*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)Alarm);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetCtrlBmcConnectionState
+ *   : ѯͿưBMCͨ״̬(ֻܲѯư)
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *             ConnectionState       : ͨ״̬
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014619
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetCtrlBmcConnectionState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_MGTCPU_STATE_E *ConnectionState)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    DMI_MGTCPU_STATE_E LpcState = MGTCPU_STATE_NORMAL;
+    DMI_MGTCPU_STATE_E BmcState = MGTCPU_STATE_NORMAL;
+    DMI_MGTCPU_STATE_E KboxState = MGTCPU_STATE_NORMAL;
+
+    if ((NULL == EnclAddr) || (NULL == ConnectionState))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 250, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, ConnectionState);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == MpaCmd.FruId)
+        {
+
+            LpcState = MPA_V2BmcGetCtrlBmcAlarmState();
+            BmcState = MPA_GetV2BMCLinkState();
+            KboxState = MPA_GetV2BMCKboxAlarmState();
+
+            /* ۺLPCBMCͨŸ澯 */
+            if ((MGTCPU_STATE_ABNORMAL == LpcState)
+                || (MGTCPU_STATE_ABNORMAL == BmcState)
+                || (MGTCPU_STATE_ABNORMAL == KboxState))
+            {
+                *ConnectionState = MGTCPU_STATE_ABNORMAL;
+            }
+            else
+            {
+                *ConnectionState = MGTCPU_STATE_NORMAL;
+            }
+            return DRV_RETURN_OK;
+        }
+    }
+
+    return RETURN_INVALID;
+}
+ 
+  /******************************************************************************
+  *     : MPAIntf_GetFruAllAlarmInfo
+  *   : ȡFRUۺϸ澯״̬
+  *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+  *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+  *             Alarm       : 澯״̬
+  *   : Alarm       : 澯״̬
+  *   ֵ  : OSP_S32
+  * ˵  : 
+  * 
+  * ޸ʷ      :
+  *  1.       : 2014418
+  *           : shufan 204084
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+OSP_S32 MPAIntf_GetFruAllAlarmInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Alarm, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 BmcDataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_U32 CmdIndex = 0;
+    OSP_U32 SimulateFlag = FALSE;
+
+    if ((NULL == EnclAddr) || (NULL == Alarm))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 251, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Alarm);
+        return DRV_RETURN_ERROR;
+    }
+
+    OSAL_MemSet_s((OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S), INVALID_VALUE8, sizeof(MPA_CMD_INFO_S));
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    MpaCmd.Cmd = DRV_CMD_GET_FRU_ALARM_INFO;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = (OSP_U16)Length;
+    MpaCmd.SdrType = ALARM_INFO;
+    MpaCmd.WtRd = MPA_READ;
+
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        BmcDataIn[0] = sizeof(OSP_U8);
+        BmcDataIn[1] = (OSP_U8)(Length / sizeof(ALARM_E));
+
+        /*2015-7-25 c00221000 for DTS2015072500001 begin: 汾H1汾,Ϊ澯ۺϸ⵼½ӿڵʧ */
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_ENCL, 0) == MpaCmd.FruId)
+        {
+            if(DRV_FRAMEMODEL_PCIE_CTRL_2U_C1_BMC == MpaAddr->DevFrame)
+                return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Alarm);
+            return MPA_V2BmcFrameAlarmInfoProcess((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, BmcDataIn, Alarm);
+        }
+        /*2015-7-25 c00221000 for DTS2015072500001 end*/
+
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)Alarm);
+    }
+
+    /*ģӲ̿AR-0000223578-023-004*/
+    for (CmdIndex = 0; CmdIndex < g_MpaAlarmTableLen; CmdIndex++)
+    {
+        /* BEGIN: Added by liwei 90003951, 2016/3/01  ⵥ:DTS2016022706945 
+        , PANGEA_V200R002C20ģ⼶Ϻ󣬸λSESoopsλ */
+        if(((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame == g_MpaAlarmId[CmdIndex].DevFrame
+            && (g_MpaAlarmId[CmdIndex].FruId == DAL_FRU_ID(DriverId)))
+        {
+            if(0 != g_MpaAlarmId[CmdIndex].Simulate)
+            {
+                /* MPAõĸ澯DMIõĸ澯ֱӷش */
+                if(g_MpaAlarmId[CmdIndex].DeviceId >= Length/sizeof(OSP_U32))
+                {
+                    DRV_MPA_TRACE(DRV_LOG_WARN, 251, "Lenth dismatch:%d %d", 
+                        g_MpaAlarmId[CmdIndex].DeviceId, Length);
+                    return DRV_RETURN_ERROR;
+                }
+                Alarm[g_MpaAlarmId[CmdIndex].DeviceId] = g_MpaAlarmId[CmdIndex].Simulate;
+                SimulateFlag = TRUE;
+            }
+        }
+        /* END: Added by liwei 90003951, 2016/3/01  ⵥ:DTS2016022706945 
+        , PANGEA_V200R002C20ģ⼶Ϻ󣬸λSESoopsλ */    
+    }
+
+    if(TRUE == SimulateFlag)
+    {
+        return DRV_RETURN_OK;
+    }
+    else
+    {
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Alarm);
+    }
+ }
+
+ /******************************************************************************
+ *     : MPAIntf_SetAlarmInfo
+ *   : ģ澯״̬
+ *   : EnclAddr  
+ *             DriverId  
+ *             Alarm     
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131211
+ *           : zhanwenbin 90003961
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetAlarmInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 Alarm)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    MPA_ALARM_TABLE_S TableInfo;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 252, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+    
+    DRV_MPA_TRACE(DRV_LOG_WARN, 253, "MPA sets alarm info, driverid(0x%llx), alarm(%d).", DriverId, Alarm);
+    
+    OSAL_MemSet_s((OSP_U8 *)&MpaCmd, sizeof(MPA_CMD_INFO_S), INVALID_VALUE8, sizeof(MPA_CMD_INFO_S));
+    MpaCmd.Cmd = DRV_CMD_SET_ALARM_INFO;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = ALARM_INFO;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /* BEGIN: Added by yinhuaqiang 00305130, 2015/4/15ⵥ:DTS2015041310766  */
+    /* DMIڲѯͼϵSAS˿ʱʹôвλϢFruIdDeviceId̿һĿƿ
+       MPASESĻʹô˲λϢ */
+    MpaCmd.FruId = MPA_ConvertFruId(EnclAddr, MpaCmd.FruId);
+    /* END:   Added by yinhuaqiang 00305130, 2015/4/15 ⵥ:DTS2015041310766  */
+
+    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaCmd, sizeof(MPA_CMD_INFO_S), (OSP_U8 *)&MpaCmd, 
+        sizeof(MPA_CMD_INFO_S));
+    OSAL_MemCpy_s((OSP_U8 *)&TableInfo.MpaAddr, sizeof(DAL_MPA_ADDR_S), (OSP_U8 *)EnclAddr, 
+        sizeof(DAL_MPA_ADDR_S));
+    TableInfo.CommonTable.IdInfoTable = g_MpaAlarmId;
+    TableInfo.CommonTable.TableLen = g_MpaAlarmTableLen;
+    TableInfo.Simulate = Alarm;
+
+    /*Ϣtarget*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TableInfo, (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetEnclosureFruList
+ *   : ȡfruid
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             Fru       fruڵϢ
+ *   : Fru       fruڵϢ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131018
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetEnclosureFruList(OSP_VOID *EnclAddr, ENCL_FRU_LIST_S *Fru)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Fru))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 254, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Fru);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_ENCL_FRU_LIST;
+    MpaCmd.FruId = 0;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(ENCL_FRU_LIST_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*AddrΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, EnclAddr, (OSP_VOID *)Fru);
+
+}
+
+
+ /******************************************************************************
+ *     : MPA_IsPMC12G
+ *   : ѯİǷΪ12G
+ *   : EnclAddr  
+ *             FruId     
+ *                
+ *   : 
+ *   ֵ  : OSP_U8
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20151227
+ *           : bianyanru 00188344
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_U8 MPA_IsPMC12G(OSP_VOID *EnclAddr, OSP_U32 FruId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal;
+    MPA_MGMT_BOARDTYPE_E Mgmt_BoardType = BOARD_BUTT ;
+    OSP_U8 PMCVal = FALSE;
+
+
+    MpaCmd.Cmd = DRV_CMD_GET_EXPBOARD_TYPE;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(MPA_MGMT_BOARDTYPE_E);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&Mgmt_BoardType);
+    if(DRV_RETURN_OK == RetVal)
+    {
+        if(PMC_BOARD_12G == Mgmt_BoardType)
+        {
+            PMCVal = TRUE;
+        }
+        else if(PMC_BOARD_6G == Mgmt_BoardType)
+        {
+            PMCVal = FALSE;
+        }
+    }
+    return PMCVal;
+}
+
+ /******************************************************************************
+ *     : MPA_GetExpBoardType
+ *   : ȡİ
+ *   : EnclAddr  
+ *             FruId     
+ *             FruType   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20151013
+ *           : gaoyalong 00325181
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_GetExpBoardType(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_FRU_TYPE_E *FruType)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 Type = 0xFF;
+    OSP_S32 RetVal;
+
+    MpaCmd.Cmd = DRV_CMD_CPU_TYPE_GET;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID* )&Type);
+    if (DRV_RETURN_OK == RetVal)
+    {
+        if (DRV_CPU_TYPE_LSI == Type)
+        {
+            *FruType = DMI_FRU_BOARD_12GSAS_2U25_4U24_EXP_LSI;
+        }
+        else
+        {
+            if (TRUE == MPA_IsPMC12G(EnclAddr, FruId))
+            {
+                *FruType = DMI_FRU_BOARD_12GSAS_2U25_4U24_12GEXP;
+            }
+            else
+            {
+            /*ڲѯPMCʱ12G壬Ϊ6G*/
+                *FruType = DMI_FRU_BOARD_12GSAS_2U25_4U24_EXP;
+            }
+        }
+    }
+
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetEnclosureFruType
+ *   : ȡFru
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId     Fru id,FRU IDDEVICE ID
+ *             FruType   Fru 
+ *   : FruType   Fru 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131018
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *  1.       : 2015115
+ *           : qintianyi 90005776
+ *    ޸   : ޸
+ *    ע       : SES V2R1C02֮İ汾fru typeƵsesʵ(V2R1C00/V1R12/SAS󿨲)
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetEnclosureFruType(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_FRU_TYPE_E *FruType)
+{
+#define IS_V1_SES_VIRTUAL_CARD \
+    ((MpaAddr->DevFrame < DRV_FRAMEMODEL_V1_END) \
+        && (DEVICE_SAS_SES == MpaAddr->McuType)\
+        && (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_IOCARD, 1) == FruId))
+
+#define IS_V2R1C00_CTL_BBU \
+    ((FRAME_IS_V2R1C00_CTL == MPA_IfV2R1C00CtrlSxpFrame(MpaAddr->DevFrame))\
+        && ((DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_POWER | DAL_FRU_LOGIC_TYPE_BBU | DAL_FRU_LOGIC_TYPE_FAN, 0) == FruId)\
+            || (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_POWER | DAL_FRU_LOGIC_TYPE_BBU | DAL_FRU_LOGIC_TYPE_FAN, 1) == FruId)))
+
+#define IS_V2R1C00_CTL_BOARD \
+    ((FRAME_IS_V2R1C00_CTL == MPA_IfV2R1C00CtrlSxpFrame(MpaAddr->DevFrame))\
+        && (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) == FruId))
+        
+#define IS_2U4U_EXP \
+       ((DRV_FRAMEMODEL_12GSAS_EXP_2U25 == MpaAddr->DevFrame)\
+           || (DRV_FRAMEMODEL_12GSAS_EXP_4U24 == MpaAddr->DevFrame)\
+           || (DRV_FRAMEMODEL_12GSAS_EXP_2U25_12GLINK == MpaAddr->DevFrame)\
+           || (DRV_FRAMEMODEL_12GSAS_EXP_4U24_12GLINK == MpaAddr->DevFrame))
+        
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byteͣ1byte FruId*/
+    OSP_U32 DataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U8 PresentState = INVALID_VALUE8;
+    OSP_U8 ProdType = 0;
+    OSP_BOOL Is2u4uExp = B_FALSE;
+
+    if ((NULL == EnclAddr) || (NULL == FruType))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 255, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, FruType);
+        return DRV_RETURN_ERROR;
+    }
+    
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    RetVal = BSP_GetProductType(&ProdType);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 932,
+            "MPA gets product ver from bsp failed, error code is %d.", RetVal);
+        return DRV_RETURN_ERROR;
+    }
+
+    /*v1 ̿һӿڿ1ӿڿ,ֱӷ*/
+    if (IS_V1_SES_VIRTUAL_CARD)
+    {
+        *FruType = (DMI_FRU_TYPE_E)DMI_FRU_VIRTUAL_IOCARD;
+        return DRV_RETURN_OK;
+    }
+
+    /*ȲfruǷλ*/
+    RetVal = MPAIntf_GetPresentState(EnclAddr, FruId, &PresentState);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 256, "MPA GetEnclFruType Get Present Fail %d.", RetVal);
+        return RetVal;
+    }
+    /*λЧ*/
+    if (DRV_EXIST_NOT_OK == PresentState)
+    {
+        *FruType = DMI_FRU_UNKNOWN;
+        return DRV_RETURN_OK;
+    }
+
+    *FruType = (DMI_FRU_TYPE_E)0;
+
+    MpaCmd.FruId = (MpaAddr->DevFrame > DRV_FRAMEMODEL_12GSAS_EXP_END) ? FruId : 0;
+    Is2u4uExp = 
+        ((IS_2U4U_EXP) && ((DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_EXPBOARD, 0) == FruId)
+         || (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_EXPBOARD, 1) == FruId)));
+
+    /* V2R1C00ƿҿư,Ҫݿۿ䲻ͬĵ */
+    if (IS_V2R1C00_CTL_BOARD)
+    {
+        if (SPANGEA_V2R1 == ProdType)
+        {
+            return MPA_GetV2R1C00CtrlBoardFruType(EnclAddr, FruId, FruType);
+        }
+
+        return MPA_GetFruTypeForSes(EnclAddr, FruId, FruType);
+    }
+    else if (IS_V2R1C00_CTL_BBU)
+    {
+        return MPA_GetV2R1C00CtrlPowerFanBbuFruType(EnclAddr, FruId, FruType);
+    }
+    //1 notes : SES V2R1C02֮İ汾fru typeƵsesʵ(V2R1C00/V1R12/SAS󿨲)
+    else if ((OSP_U8)TRUE == Mpa_CheckGetFruTypeForSes(MpaAddr->DevFrame))
+    {
+        return MPA_GetFruTypeForSes(EnclAddr, FruId, FruType);
+    }
+    else if (B_TRUE == Is2u4uExp)//DMI·2֣800801·
+    {
+        return MPA_GetExpBoardType(EnclAddr, FruId, FruType);
+    }
+    else
+    {
+        MpaCmd.Cmd = DRV_CMD_GET_ENCL_FRU_TYPE;
+        /*mpa cmdfru id0ӿڣfru idͨdatain*/
+        MpaCmd.DeviceId = 0;
+        MpaCmd.BufLen = sizeof(DMI_FRU_TYPE_E);
+        MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+        MpaCmd.WtRd = MPA_READ;
+    
+        /*byte0ͣbyte1 FruId*/
+        MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+        DataIn[0] = MpaAddr->DevFrame;
+
+        /* BEGIN: Added by jiangfanlu 00101148, 2015/1/16  ⵥ:, ޸ԭ:SAS˿portid */
+        /* DMIڲѯͼϵSAS˿ʱʹôвλϢFruIdDeviceId̿һĿƿ
+           MPASESĻʹô˲λϢ */
+        FruId = MPA_ConvertFruId(MpaAddr, FruId);
+        /* END:   Added by jiangfanlu 00101148, 2015/1/16 ⵥ: */
+        DataIn[1] = FruId;
+        
+        /*AddrΪδȥȡж*/
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)FruType);
+    }
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetExpBoardSpeed
+ *   : ѯ֧
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             Fru       fruڵϢ
+ *             Speed      
+ *   : Speed      
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ  :
+ *  1.       : 2017810
+ *           : ywx291300
+ *    ޸   : ɺ DTS2017081402571 ͬŻ
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetExpBoardSpeed(OSP_VOID* EnclAddr, OSP_U32 FruId, DRV_PORT_SPEED_E* Speed)
+{
+    DMI_FRU_TYPE_E FruType;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U16 Index = 0;
+   
+    if ((NULL == EnclAddr) || (NULL == Speed))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 257, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Speed);
+        return DRV_RETURN_ERROR;
+    }
+
+    /*ֻܼFRU ID*/
+    if ((DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_EXPBOARD, 0) != FruId) &&
+        (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_EXPBOARD, 1) != FruId))
+    {
+        DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 257, 1, 30 * HZ, "MPA Fru Id error(0x%x).", FruId);
+        return DRV_RETURN_ERROR;
+    }
+    
+    RetVal = MPAIntf_GetEnclosureFruType(EnclAddr, FruId, &FruType);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 256, "MPA GetEnclosureFruType Fail %d.", RetVal);
+        return RetVal;
+    }
+
+    for (Index = 0; Index < g_MpaMpaExpBoardSpeedLen; Index++)
+    {
+        if (g_MpaExpBoardSpeed[Index].FruType == FruType)
+        {
+            *Speed = g_MpaExpBoardSpeed[Index].Speed;
+            return DRV_RETURN_OK;
+        }
+    }
+
+    /*ûҵĬ6G*/
+    DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 257, 1, 30 * HZ, "MPA not find the board fru type(0x%x).", FruType);
+    *Speed = DRV_SPEED_6G;
+    return DRV_RETURN_OK;
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetEnclosureFruSilkScreen
+ *   : ѯfru˿ӡ(λ)
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             Fru       fruڵϢ
+ *             Name      ˿ӡ
+ *             Length    Ƴ
+ *   : Name      ˿ӡ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014115
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetEnclosureFruSilkScreen(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_S8 *Name, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byteͣ1byte FruId, 1byteλ*/
+    OSP_U32 DataIn[3] = {0, 0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_S8 TmpName[DMI_NAME_LEN] = {0};
+    OSP_U32 SlotId = 0xFF;
+    
+    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 257, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    /*Ȳλid*/
+    if (DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddr->DevFrame)
+    {
+        RetVal = MPAIntf_GetBoardSlotId(EnclAddr, DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0), &SlotId);
+        if (DRV_RETURN_OK != RetVal)
+        {
+            DRV_MPA_TRACE(DRV_LOG_DBG, 258, "MPA GetSilkScreen GetBoardSlotId Fail %d.", RetVal);
+            return RetVal;
+        }
+    }
+
+    OSAL_MemSet_s((OSP_U8 *)TmpName, DMI_NAME_LEN, 0, DMI_NAME_LEN);
+
+    if (MpaAddr->DevFrame > DRV_FRAMEMODEL_12GSAS_EXP_END)
+    {
+        MpaCmd.FruId = FruId;
+    }
+    else
+    {
+        MpaCmd.FruId = 0;
+
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_GET_ENCL_FRU_SILKSCREEN;
+    /*mpa cmdfru id0ӿڣfru idͨdatain*/
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*2014-8-26 c00221000 for DTS2014082510192 begin: V2-BMCѯ˿ӡͳһɿưbmc*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 0) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDRTYPE_FOR_SILK_SMMA;
+
+             MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
+        }
+        else if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_MGMTBOARD, 1) == MpaCmd.FruId)
+        {
+             MpaCmd.SdrType = SDRTYPE_FOR_SILK_SMMB;
+
+             MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
+        }
+
+    }
+    /*2014-8-26 c00221000 for DTS2014082510192 end*/
+
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = SlotId;
+    /* BEGIN: Added by jiangfanlu 00101148, 2015/1/16  ⵥ:, ޸ԭ:SAS˿portid */
+    /* DMIڲѯͼϵSAS˿ʱʹôвλϢFruIdDeviceId̿һĿƿ
+       MPASESĻʹô˲λϢ */
+    FruId = MPA_ConvertFruId(MpaAddr, FruId);
+    /* END:   Added by jiangfanlu 00101148, 2015/1/16 ⵥ: */
+    DataIn[2] = FruId;
+    /*Ϣtarget*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)TmpName);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 259, "MPA GetSilkScreen return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), (OSP_U8 *)TmpName, 
+        (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+    return RetVal;
+    
+}
+
+

+ /******************************************************************************
+ *     : MPAIntf_GetEnclFruVisibleMap
+ *   : ѯfruؿɼ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             Fru       fruڵϢ
+ *             Map      ؿɼ
+ *   : Map      ؿɼ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014211
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetEnclFruVisibleMap(OSP_VOID* EnclAddr, OSP_U32 FruId, OSP_U32 *Map)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byteͣ1byte FruId, 1byteλ*/
+    OSP_U32 DataIn[3] = {0, 0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U32 SlotId = 0xFF;
+    
+    if ((NULL == EnclAddr) || (NULL == Map))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 260, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Map);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    /*Ȳλid*/
+    RetVal = MPAIntf_GetBoardSlotId(EnclAddr, DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0), &SlotId);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 261, "MPA GetEnclFruVisibleMap GetBoardSlotId Fail %d.", RetVal);
+        return RetVal;
+    }
+
+    if (MpaAddr->DevFrame > DRV_FRAMEMODEL_12GSAS_EXP_END)
+    {
+        MpaCmd.FruId = FruId;
+    }
+    else
+    {
+        MpaCmd.FruId = 0;
+
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_GET_ENCL_FRU_VISIBLE_MAP;
+    /*mpa cmdfru id0ӿڣfru idͨdatain*/
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = SlotId;
+    /* BEGIN: Added by jiangfanlu 00101148, 2015/1/16  ⵥ:, ޸ԭ:SAS˿portid */
+    /* DMIڲѯͼϵSAS˿ʱʹôвλϢFruIdDeviceId̿һĿƿ
+       MPASESĻʹô˲λϢ */
+    FruId = MPA_ConvertFruId(MpaAddr, FruId);
+    /* END:   Added by jiangfanlu 00101148, 2015/1/16 ⵥ: */
+
+    DataIn[2] = FruId;
+    /*Ϣtarget*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Map);
+    
+}
+ /******************************************************************************
+ *     : MPAIntf_GetDeviceEnclosureFruType
+ *   : ȡFru(DMA濨ʱ)
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId     ID ͡FRUIDDEVICE IDϢ
+ *             FruType   Fru 
+ *   : FruType   Fru 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014113
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetDeviceEnclosureFruType(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_FRU_TYPE_E *FruType)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == FruType))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 262, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, FruType);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    if ((MpaAddr->DevFrame) < DRV_FRAMEMODEL_12GSAS_EXP_END)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 263, "This interface is only used for v2bmc, devframe(0x%x).", MpaAddr->DevFrame);
+        return DRV_RETURN_ERROR;
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_GET_ENCL_FRU_TYPE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DMI_FRU_TYPE_E);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)FruType);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetWatchDogEnableFlag
+ *   : ѯŹʹܱ־
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             WatchDogFlag  Źʹܱ־
+ *   : WatchDogFlag  Źʹܱ־
+ *   ֵ  : OSP_S32
+ * ˵  : ֻR3ƿֲ֧ѯŹʹܱ־
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131030
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetWatchDogEnableFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *WatchDogFlag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == WatchDogFlag))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 264, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, WatchDogFlag);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_WATCHDOG_FLAG_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)WatchDogFlag);    
+    
+}                           
+
+ /******************************************************************************
+ *     : MPAIntf_SetWatchDogEnableFlag
+ *   : ÿŹʹܱ־
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             WatchDogFlag  Źʹܱ־
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : ֻR3ƿ֧ÿŹʹܱ־
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131030
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetWatchDogEnableFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 WatchDogFlag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 265, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 266, "MPA sets wdg enable flag, id(0x%llx), value(0x%x).", DriverId, WatchDogFlag);
+    MpaCmd.Cmd = DRV_CMD_WATCHDOG_FLAG_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&WatchDogFlag, (OSP_VOID *)NULL);    
+    
+}                               
+
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetBiosSwitchFlag
+ *   : ѯ BIOSʹܱ־
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             BiosSwitchFlag  BIOSʹܱ־
+ *   : BiosSwitchFlag  BIOSʹܱ־
+ *   ֵ  : OSP_S32
+ * ˵  : ֻR3ƿֲ֧ѯ BIOSʹܱ־
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131030
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBiosSwitchFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *BiosSwitchFlag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == BiosSwitchFlag))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 267, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, BiosSwitchFlag);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BIOS_SWITCH_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)BiosSwitchFlag);    
+    
+}                           
+
+ /******************************************************************************
+ *     : MPAIntf_SetBiosSwitchFlag
+ *   :  BIOSʹܱ־
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             BiosSwitchFlag   BIOSʹܱ־
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : ֻR3ƿ֧ BIOSʹܱ־
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131030
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBiosSwitchFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 BiosSwitchFlag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 268, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 269, "MPA sets bios switch flag, id(0x%llx), value(0x%x).", DriverId, BiosSwitchFlag);
+    MpaCmd.Cmd = DRV_CMD_BIOS_SWITCH_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&BiosSwitchFlag, (OSP_VOID *)NULL);    
+    
+}                               
+
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerButtonControlMod
+ *   : ѯԴťµ־
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             PowerButtonModFlag  Դťµ־
+ *   : PowerButtonModFlag  Դťµ־
+ *   ֵ  : OSP_S32
+ * ˵  : ֻR3ƿֲ֧ѯԴťµ־
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131030
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerButtonControlMod(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *PowerButtonModFlag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == PowerButtonModFlag))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 270, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PowerButtonModFlag);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SINGLE_POWERCTL_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PowerButtonModFlag);    
+    
+}                           
+
+ /******************************************************************************
+ *     : MPAIntf_SetPowerButtonControlMod
+ *   : õԴťµ־
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             PowerButtonModFlag  Դťµ־
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : ֻR3ƿ֧õԴťµ־
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131030
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetPowerButtonControlMod(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 PowerButtonModFlag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 271, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 272, "MPA sets power button flag, id(0x%llx), value(0x%x).", DriverId, PowerButtonModFlag);
+    MpaCmd.Cmd = DRV_CMD_SINGLE_POWERCTL_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&PowerButtonModFlag, (OSP_VOID *)NULL);    
+    
+}                               
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetBoardSlotId
+ *   : ѯư/ڿĲλ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId        Fru
+ *             BoardSlotId  ư/ڿĲλ
+ *   : BoardSlotId  ư/ڿĲλ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013111
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBoardSlotId(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U32 *BoardSlotId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 SlotId = 0;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == BoardSlotId))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 273, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, BoardSlotId);
+        return DRV_RETURN_ERROR;
+    }
+    
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+        
+    MpaCmd.Cmd = DRV_CMD_EXPBOARD_SLOT_GET;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*r1ƿbspȡλ*/
+    if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame)
+    {
+        RetVal = BSP_ReadSlotId(&SlotId);
+        if (DRV_RETURN_OK != RetVal)
+        {
+            DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 274, 1, 20 * HZ, "MPA gets board slot id from bsp failed(%d).", RetVal);
+            return RetVal;
+        }
+        *BoardSlotId = SlotId;
+        return RetVal;
+    }
+    
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&SlotId);  
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 275, "MPA GetBoardSlotId return error.");
+        return RetVal;
+    }
+
+    if (DRV_FRAMEMODEL_12GSAS_EXP_END > MpaAddr->DevFrame)
+    {
+        /*쳣ֵ󷵻*/
+        if ((DRV_SLOT_A != SlotId) && (DRV_SLOT_B != SlotId))
+        {
+            DRV_MPA_TRACE(DRV_LOG_WARN, 276, "MPA gets board slot id error, slot id(0x%x) is not A or B.",SlotId);
+            return DRV_RETURN_ERROR;
+        }
+
+        /*ظDMĽӿڣSESصֵת0ʾAأ1ʾB*/
+        *BoardSlotId = (DRV_SLOT_A == SlotId) ? (MPA_SLOT_A):(MPA_SLOT_B);
+    }
+    else
+    {
+        *BoardSlotId = SlotId;
+    }
+    
+    return DRV_RETURN_OK;
+   
+}                           
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetAttachedWwn
+ *   : ȡ豸wwn
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *             Wwn         : wwnַ
+ *   : Wwn         : wwnַ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131031
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetAttachedWwn(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U64 *Wwn)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byteͣ1byte DeviceId*/
+    OSP_U8 DataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    
+    if ((NULL == EnclAddr) || (NULL == Wwn))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 277, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Wwn);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_OPPWWNINFO_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    /*device idﲻұ䣬datainȥtarget*/
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U64);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*byte0ͣbyte1 DeviceId*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+
+    /*AddrΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Wwn);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPortWidth
+ *   : ȡ˿ڿ
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *             Width       : 
+ *   : Width       : 
+ *   ֵ  : OSP_S32
+ * ˵  : ʱɿж˿ڿһ£ֿڸ˿ڿȲһ£µ
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131031
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPortWidth(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Width)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byteͣ1byte DeviceId*/
+    OSP_U8 DataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Width))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 278, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Width);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_PORT_WIDTH;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    /*device idﲻұ䣬datainȥtarget*/
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /*byte0ͣbyte1 DeviceId*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    
+    /*AddrΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Width);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPortMaxWidth
+ *   : ȡ˿ڶ
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *             Width       : 
+ *   : Width       : 
+ *   ֵ  : OSP_S32
+ * ˵  : ʱɿж˿ڿһ£ֿڸ˿ڿȲһ£µ
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131031
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPortMaxWidth(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Width)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byteͣ1byte DeviceId*/
+    OSP_U8 DataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Width))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 279, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Width);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_PORT_MAX_WIDTH;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    /*device idﲻұ䣬datainȥtarget*/
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /*byte0ͣbyte1 DeviceId*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    
+    /*AddrΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Width);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPortPhysRate
+ *   : ȡ˿֧
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *             Rate        : 
+ *   : Rate        : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013111
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPortPhysRate(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Rate)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byteͣ1byte DeviceId*/
+    OSP_U8 DataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Rate))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 280, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Rate);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_PORT_PHYS_RATE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    /*device idﲻұ䣬datainȥtarget*/
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /*byte0ͣbyte1 DeviceId*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    
+    /*AddrΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Rate);
+   
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPortLinkRate
+ *   : ȡ˿
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *             Rate        : 
+ *   : Rate        : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013111
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPortLinkRate(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Rate)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byteͣ1byte DeviceId*/
+    OSP_U8 DataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Rate))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 281, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Rate);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_LINKPORTS_SPEED_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    /*device idﲻұ䣬datainȥtarget*/
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /*byte0ͣbyte1 DeviceId*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    
+    /*AddrΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Rate);
+   
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPortLinkStatus
+ *   : ȡ˿״̬
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *             LinkStatus  : ״̬
+ *   : LinkStatus  : ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013112
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPortLinkStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *LinkStatus)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byteͣ1byte DeviceId*/
+    OSP_U8 DataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;   
+/* BEGIN: Added by shipin, 2015-8-28 17:27:20, ⵥ:DTS2015081308135, ޸ԭ:ģSES WDGλʳּڶϿͻָĸ澯 */ 
+    OSP_S32 RetVal = DRV_RETURN_ERROR;  
+/* END: Added by shipin, 2015-8-28 19:53:46 */ 
+
+    if ((NULL == EnclAddr) || (NULL == LinkStatus))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 282, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, LinkStatus);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_PORT_LINK_STATUS;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    /*device idﲻұ䣬datainȥtarget*/
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+            
+    /*byte0ͣbyte1 DeviceId*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    
+ /*AddrΪδȥȡж*/
+/* BEGIN: Added by shipin, 2015-8-28 17:27:20, ⵥ:DTS2015081308135, ޸ԭ:ģSES WDGλʳּڶϿͻָĸ澯 */     
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)LinkStatus); 
+ 
+    if (DRV_RETURN_OK != RetVal)
+    {    
+        return RetVal; 
+    }  
+
+    if (MPA_LINK_STATUS_IS_INVALID(*LinkStatus))
+    {   
+        RetVal = DRV_RETURN_NOT_READY;   
+    } 
+
+    return RetVal;   
+ /* END: Added by shipin, 2015-8-28 19:54:58 */  
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetPeerPortLinkStatus
+ *   : ѯԿض˿״̬
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *             LinkStatus  : ״̬
+ *   : LinkStatus  : ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014320
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPeerPortLinkStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *LinkStatus)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byteͣ1byte DeviceId*/
+    OSP_U8 DataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == LinkStatus))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 283, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, LinkStatus);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_PEER_PORT_LINK_STATUS;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    /*device idﲻұ䣬datainȥtarget*/
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /*byte0ͣbyte1 DeviceId*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    
+    /* BEGIN: Added by shipin, 2014-10-21 22:4:55, ⵥ:DTS2014102206003, ޸ԭ:SESλʱԶ˵Ķ˿״̬ʼΪMPA_INVALID_STATUS,Ըֵй */
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)LinkStatus);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return RetVal; 
+    }
+
+    if(MPA_LINK_STATUS_IS_INVALID(*LinkStatus))
+    {
+        RetVal = DRV_RETURN_NOT_READY;
+    }
+    /* END: Added by shipin, 2014-10-21 22:7:13 */
+    
+    return RetVal;
+
+}
+ /******************************************************************************
+ *     : MPAIntf_SetPortSwitch
+ *   : ض˿
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *             Switch      : ز0Ϊأ1Ϊ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013112
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetPortSwitch(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U32 Switch)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byteͣ1byte DeviceId*/
+    OSP_U8 DataOut[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_U8 TmpValue = (OSP_U8)Switch;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 284, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE_LIMIT(DRV_LOG_INFO, 285, 1, 20 * HZ, "MPA sets port switch, id(0x%llx), value(%d).", DriverId, Switch);
+
+    MpaCmd.Cmd = DRV_CMD_SET_PORT_SWITCH;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    /*device idﲻұ䣬dataoutȥtarget*/
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(TmpValue);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+    
+    /*byte0ͣbyte1 DeviceId*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataOut[0] = MpaAddr->DevFrame;
+    DataOut[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    
+    /*AddrΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TmpValue, (OSP_VOID *)DataOut);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetAllPortSwitch
+ *   : رж˿
+ *   : EnclAddr  
+ *             Switch    
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2017615
+ *           : shipin
+ *    ޸   : DTS2017061310967ڿΪ0xfeʱô˽ӿڣʧ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SwitchAllPortOnEncl(OSP_VOID* EnclAddr, OSP_U32 Switch)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    const OSP_U8 SES_MAX_PORT_NUM = 2;
+    OSP_U8 PortIndex = 0;
+    DAL_MPA_ADDR_S MpaAddr;
+    OSP_U64 DriverId = 0;
+    OSP_U64 FruId = 0;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 284, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    OSAL_MemCpy_s((OSP_U8*)&MpaAddr, sizeof(DAL_MPA_ADDR_S), (OSP_U8*)EnclAddr, sizeof(DAL_MPA_ADDR_S));
+
+    /* ǷʹV2̿ͣV2֧ */
+    if(DRV_FARMEMODEL_ERROR == MpaAddr.DevFrame)
+    {
+        MpaAddr.DevFrame = DRV_FRAMEMODEL_12GSAS_EXP_2U25;
+    }
+    else
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 285, "frame type not 0xfe(0x%x).", MpaAddr.DevFrame);
+        return DRV_RETURN_ERROR;
+    }
+
+    FruId = (OSP_U64)DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_EXPBOARD, 0);
+    for(PortIndex = 0; PortIndex < SES_MAX_PORT_NUM; PortIndex++)
+    {
+        DriverId = (OSP_U64)DAL_BUILD_DEVICE_ID((OSP_U64)0, (OSP_U64)0, (OSP_U64)FruId, (OSP_U64)PortIndex);
+        RetVal = MPAIntf_SetPortSwitch((OSP_VOID*)&MpaAddr, DriverId, Switch);
+        if(DRV_RETURN_OK != RetVal)
+        {
+            DRV_MPA_TRACE(DRV_LOG_WARN, 286, "set allport switch(%d),DriverId(0x%llx),res(%d).", Switch, DriverId, RetVal);
+        }
+    }
+
+    return DRV_RETURN_OK;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPortUpDownType
+ *   : ȡ˿п
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *             UpOrDownType: пڻп 
+ *   : UpOrDownType: пڻп 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013114
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPortUpDownType(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U8* UpOrDownType)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byteͣ1byte DeviceId*/
+    OSP_U8 DataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == UpOrDownType))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 286, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, UpOrDownType);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_PORT_UPDOWN_TYPE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    /*device idﲻұ䣬datainȥtarget*/
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /*byte0ͣbyte1 DeviceId*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    
+    /*AddrΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)UpOrDownType);
+
+    
+}
+
+/******************************************************************************
+*     : MPAIntf_GetLocalPortFirstPhyId
+*   : ȡض˿׸phyid
+*   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+*             DriverId    : ID ͡FRUIDDEVICE IDϢ 
+*             PhyId       : ׸phyid    
+*   : PhyId       : ׸phyid  
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2014617
+*           : jiangfanlu 00101148
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetLocalPortFirstPhyId(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U32* PhyId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byteͣ1byte DeviceId*/
+    OSP_U8 DataIn[2] = {0, 0};
+    OSP_U8 DstPhyId = INVALID_VALUE8;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S32 ErrorCode = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == PhyId))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 287, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PhyId);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_LOCAL_PORT_FIRST_ID;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    /*device idﲻұ䣬datainȥtarget*/
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /*byte0ͣbyte1 DeviceId*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    
+    /*AddrΪδȥȡж*/
+    ErrorCode = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)&DstPhyId);
+    if (DRV_RETURN_OK == ErrorCode)
+    {
+        if (INVALID_VALUE8 == DstPhyId)
+        {
+            *PhyId = INVALID_VALUE32;
+        }
+        else
+        {
+            *PhyId = DstPhyId;
+        }
+    }
+
+    return ErrorCode;
+}
+
+/******************************************************************************
+*     : MPAIntf_GetAttPortFirstPhyId
+*   : ȡԽӶ˿׸phyid
+*   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+*             DriverId    : ID ͡FRUIDDEVICE IDϢ 
+*             PhyId       : ׸phyid    
+*   : PhyId       : ׸phyid  
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2014617
+*           : jiangfanlu 00101148
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetAttPortFirstPhyId(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U32* PhyId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byteͣ1byte DeviceId*/
+    OSP_U8 DataIn[2] = {0, 0};
+    OSP_U8 DstPhyId = INVALID_VALUE8;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S32 ErrorCode = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == PhyId))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 288, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PhyId);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_ATT_PORT_FIRST_ID;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    /*device idﲻұ䣬datainȥtarget*/
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /*byte0ͣbyte1 DeviceId*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    
+    /*AddrΪδȥȡж*/
+    ErrorCode = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)&DstPhyId);
+    if (DRV_RETURN_OK == ErrorCode)
+    {
+        if (INVALID_VALUE8 == DstPhyId)
+        {
+            *PhyId = INVALID_VALUE32;
+        }
+        else
+        {
+            *PhyId = DstPhyId;
+        }
+    }
+
+    return ErrorCode;
+}
+
+/******************************************************************************
+*     : MPAIntf_GetPortWwn
+*   : ȡض˿wwn
+*   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+*             DriverId    : ID ͡FRUIDDEVICE IDϢ 
+*             Wwn         : رwwn
+*   : Wwn         : رwwn
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2014617
+*           : jiangfanlu 00101148
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetPortWwn(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U64* Wwn)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byteͣ1byte DeviceId*/
+    OSP_U8 DataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Wwn))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 289, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Wwn);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_LOCAL_PORT_WWN;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    /*device idﲻұ䣬datainȥtarget*/
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U64);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /*byte0ͣbyte1 DeviceId*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    
+    /*AddrΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Wwn);
+}
+
+/******************************************************************************
+*     : MPAIntf_GetAttPortInitOrExp
+*   : ȡض˿wwn
+*   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+*             DriverId    : ID ͡FRUIDDEVICE IDϢ 
+*             Wwn         : رwwn
+*   : Wwn         : رwwn
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2014617
+*           : jiangfanlu 00101148
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetAttPortInitOrExp(OSP_VOID* EnclAddr, OSP_U64 DriverId, DRV_PORT_MODE_E* AttachedPortMode)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byteͣ1byte DeviceId*/
+    OSP_U8 DataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == AttachedPortMode))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 290, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, AttachedPortMode);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_ATT_PORT_INITOREXP;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    /*device idﲻұ䣬datainȥtarget*/
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DRV_PORT_MODE_E);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /*byte0ͣbyte1 DeviceId*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    
+    /*AddrΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, AttachedPortMode);
+
+}
+
+/******************************************************************************
+*     : MPAIntf_GetSfpSupport
+*   : ȡ˿ڹģֵ֧
+*   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+*             DriverId    : ID ͡FRUIDDEVICE IDϢ
+*             SfpSupport: 0-NO SFP,1-SFP,2-BOTH
+*   : SfpSupport: 0-NO SFP,1-SFP,2-BOTH
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 20140507
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetSfpSupport(OSP_VOID* EnclAddr, OSP_U64 DriverId, DRV_PORT_SFP_SUPPORT_E* SfpSupport)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == SfpSupport))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 291, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, SfpSupport);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_SFP_SUPPORT;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_PORT_SFP_SUPPORT_E);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /*AddrΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)SfpSupport);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPortPhyErr
+ *   : ȡ˿phy
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *             PhyId       : ˿phy id
+ *             ErrorCode   : Ϣ
+ *   : ErrorCode   : Ϣ
+ *   ֵ  : OSP_U32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013114
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPortPhyErr(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U32 PhyId, DRV_PHY_ERROR_S *ErrorCode)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byte phy id1byteͣ1byte DeviceId*/
+    OSP_U8 DataIn[3] = {0, 0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_U8 TmpPhyId = (OSP_U8)PhyId;
+    
+    if ((NULL == EnclAddr) || (NULL == ErrorCode))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 292, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, ErrorCode);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_PORT_PHY_ERR;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    /*device idﲻұ䣬datainȥtarget*/
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DRV_PHY_ERROR_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /*byte0phy idbyte1ͣbyte2 DeviceId*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = TmpPhyId;
+    DataIn[1] = MpaAddr->DevFrame;
+    DataIn[2] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    
+    /*AddrΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)ErrorCode);
+
+
+}
+ /******************************************************************************
+  *     : MPAIntf_SetPhyErr
+  *   : PHY
+  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+  *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+  *             Thres     ֵ
+  *   : 
+  *   ֵ  : OSP_S32
+  * ˵  : 
+  * 
+  * ޸ʷ      :
+  *  1.       : 20151226
+  *           : liwei 90003951
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+ OSP_S32 MPAIntf_SetPhyErr(OSP_VOID* EnclAddr, OSP_U64 DriverId, DRV_PHY_ERROR_S *ErrorCode)
+ {
+     MPA_CMD_INFO_S MpaCmd;
+     /*32ֽ */
+     OSP_U8 DataIn[32] = {0};
+     
+     if ((NULL == EnclAddr) || (NULL == ErrorCode))
+     {
+         DRV_MPA_TRACE(DRV_LOG_WARN, 8, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, ErrorCode);
+         return DRV_RETURN_ERROR;
+     }
+ 
+     DRV_MPA_TRACE_LIMIT(DRV_LOG_INFO, 9, 1, 20 * HZ, "MPA sets port phy error, DriverId(0x%llx), uiInvalidDwords(%d), uiCodeViolations(%d), uiInConCrcErrs(%d), uiPhyChgCnt(%d), uiPhyDisparity(%d), uiPhyRstFail(%d), uiPhyDwsLost(%d), devframe(0x%x).", 
+                                 DriverId, ErrorCode->uiInvalidDwords, ErrorCode->uiCodeViolations,
+                                 ErrorCode->uiInConCrcErrs, ErrorCode->uiPhyChgCnt,
+                                 ErrorCode->uiPhyDisparity, ErrorCode->uiPhyRstFail, 
+                                 ErrorCode->uiPhyDwsLost,((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+ 
+     MpaCmd.Cmd = DRV_CMD_SET_PHY_ERR;
+     MpaCmd.FruId = DAL_FRU_ID(DriverId);
+     MpaCmd.DeviceId = 0;
+     MpaCmd.BufLen = sizeof(DRV_PHY_ERROR_S);
+     MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+     MpaCmd.WtRd = MPA_WRITE;
+
+     DataIn[0] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+
+     OSAL_MemCpy_s(&DataIn[1], sizeof(DRV_PHY_ERROR_S), (OSP_U8 *)ErrorCode, sizeof(DRV_PHY_ERROR_S));
+
+     return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
+     
+ }
+
+ /******************************************************************************
+ *     : MPAIntf_ClearAllPhyErr
+ *   : 
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201417
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_ClearAllPhyErr(OSP_VOID* EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 293, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_PHYERROR_CLEAR;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    /* BEGIN: Modify by gaoyalong 00325181, 2016-02-27 15:45:55, ⵥ:DTS2016022309456, ޸ԭ:DMIdeviceidΪ1ʱʧ */ 
+    MpaCmd.DeviceId = 0; 
+    /* END: Modify by gaoyalong 00325181, 2016-02-27 15:45:55, ⵥ:DTS2016022309456 */ 
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPortPhySwitch
+ *   : ѯ˿phy״̬
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *             PhyId       : phy
+ *             PhySwitch   : ״̬
+ *   : PhySwitch   : ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014110
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPortPhySwitch(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U32 PhyId, DRV_PHY_STATE_E *PhySwitch)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byte phy id1byteͣ1byte DeviceId*/
+    OSP_U8 DataIn[3] = {0, 0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_U8 TmpPhyId = (OSP_U8)PhyId;
+
+    if ((NULL == EnclAddr) || (NULL == PhySwitch))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 294, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PhySwitch);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_PORT_PHY_SWITCH;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    /*device idﲻұ䣬datainȥtarget*/
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DRV_PHY_STATE_E);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /*byte0phy idbyte1ͣbyte2 DeviceId*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = TmpPhyId;
+    DataIn[1] = MpaAddr->DevFrame;
+    DataIn[2] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    
+    /*AddrΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)PhySwitch);
+
+}
+
+/******************************************************************************
+*     : MPAIntf_SetBufferingSwitchFlag
+*   :  bufferingʹܱ־
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId        ID ͡FRUIDDEVICE IDϢ   
+*             Switch   bufferingʹܱ־
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : ֻ12G expanderоƬĿִ֧˹
+* 
+* ޸ʷ      :
+*  1.       : 20140423
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetBufferingSwitchFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 Switch)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 295, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_BUFFERING_SWITCH;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Switch, (OSP_VOID *)NULL);    
+    
+}                               
+
+/******************************************************************************
+*     : MPAIntf_GetBufferingSwitchFlag
+*   : ȡ bufferingʹܱ־
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId        ID ͡FRUIDDEVICE IDϢ   
+*             Switch   ȡbufferingʹܱ־
+*   : Switch   ȡbufferingʹܱ־
+*   ֵ  : OSP_S32
+* ˵  : ֻ12G expanderоƬĿִ֧˹
+* 
+* ޸ʷ      :
+*  1.       : 20140423
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetBufferingSwitchFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Switch)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Switch))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 296, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Switch);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BUFFERING_SWITCH;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Switch);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPortSwitch
+ *   : ѯ˿ڿ״̬
+ *   : EnclAddr    : ϲ·ĵַϢmcutype,scsiַframetype          
+ *             DriverId    : ID ͡FRUIDDEVICE IDϢ
+ *             Switch      : ״̬
+ *   : Switch      : ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014313
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPortSwitch(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U32 *Switch)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1byteͣ1byte DeviceId*/
+    OSP_U8 DataIn[2] = {0, 0};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Switch))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 297, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Switch);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_PORT_SWITCH;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    /*device idﲻұ䣬datainȥtarget*/
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+        MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_SWITCHPORT;
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Switch);
+    }
+
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    
+    /*AddrΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Switch);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetDiskPowerStatus
+ *   : ȡӲ̵Դ״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             PowerStat  Ӳ̵Դ״̬
+ *   : PowerStat  Ӳ̵Դ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131119
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetDiskPowerStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_DISK_POWER_E *PowerStat)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*2Σͺdevice id*/
+    OSP_U8 DataIn[2] = {0xFF, 0xFF};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_U8 *Value = NULL;
+    
+    if ((NULL == EnclAddr) || (NULL == PowerStat))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 298, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PowerStat);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_DISK_POWER_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);/*sesֻͨ1byte*/
+    MpaCmd.SdrType = SDRTYPE_GETDISKPOWERSTATUS;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*Ӳdevice IdΪδ*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+
+    Value = (OSP_U8 *)PowerStat;
+        
+    /*DataInΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Value);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetDiskLedStatus
+ *   : ȡӲled״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             Type       LED
+ *             Status      LED״̬
+ *   : Status      LED״̬ϸӿĵ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131120
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetDiskLedStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_LIGHT_TYPE_E Type, DMI_LIGHT_STATE_E *Status)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*3Σͺdevice id*/
+    OSP_U8 DataIn[3] = {0xFF, 0xFF, 0xFF};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_U8 *Value = NULL;
+    
+    if ((NULL == EnclAddr) || (NULL == Status))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 299, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_DISK_LED_STATUS_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPE_GETDISKLEDSTATUS;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*Ӳdevice IdΪδ*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    DataIn[2] = (OSP_U8)Type;
+    Value = (OSP_U8 *)Status;
+        
+    /*DataInΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Value);    
+}
+
+/******************************************************************************
+*     : MPAIntf_GetDiskInLoopStatus
+*   : ȡӲ̻·״̬
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             DiskState  Ӳ̻·״̬
+*   : DiskState  Ӳ̻·״̬
+*   ֵ  : DRV_RETURN_OK - ɹ, ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 20131121
+*           : jiangfanlu 00101148
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetDiskInLoopStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_DISK_STATUS_E* DiskState)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*2Σͺdevice id*/
+    OSP_U8 DataIn[2] = {0xFF, 0xFF};
+    OSP_U8 Value = DRV_DISK_STATUS_NOTEXIST;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == DiskState))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 300, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, DiskState);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_DISKSTATUS_INLOOP_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);/*sesֻͨ1byte*/
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*Ӳdevice IdΪδ*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+
+    /*DataInΪδȥȡж*/
+    RetVal =  MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)&Value);
+
+    if (DRV_RETURN_OK == RetVal)
+    {
+        *DiskState = (DMI_DISK_STATUS_E)Value;
+    }
+
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetDiskLedStatus
+ *   : Ӳled
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             Type       LED
+ *             Status      LED״̬
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131120
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetDiskLedStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_LIGHT_TYPE_E Type, DMI_LIGHT_STATE_E Status)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*frame/type/device id/Statustarget*/
+    OSP_U8 DataIn[4] = {0xFF, 0xFF, 0xFF, 0xFF};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 301, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_DISKLED_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = 0;
+    /*typestatusת1ֽڴsesbuf2ֽ*/
+    MpaCmd.BufLen = sizeof(DataIn);
+    MpaCmd.SdrType = SDRTYPE_SETDISKLEDSTATUS;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*Ӳdevice IdΪδ*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    DataIn[2] = (OSP_U8)Type;
+    DataIn[3] = (OSP_U8)Status;
+
+    DRV_MPA_TRACE_LIMIT(DRV_LOG_INFO, 302, 1, 20 * HZ, "MPA sets disk led status, frame mode(0x%x), id(0x%llx), type(%d), value(%d), host id(0x%x), scsi id(0x%x).", 
+                        MpaAddr->DevFrame, DriverId, Type, Status, MpaAddr->DevAddr.ScsiAddr.uiHostId, MpaAddr->DevAddr.ScsiAddr.uiScsiId);
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
+
+}
+
+/******************************************************************************
+*     : MPAIntf_SetDiskSwitchStatus
+*   : Ӳ̿
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             SwitchStatus Ӳ̿״̬ 
+*   : 
+*   ֵ  : DRV_RETURN_OK - ɹ, ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 20131121
+*           : jiangfanlu 00101148
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetDiskSwitchStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 SwitchStatus)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*frame/device id/SwitchStatustarget*/
+    OSP_U8 DataIn[3] = {0xFF, 0xFF, 0xFF};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 303, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 304, "MPA set disk switch status, id(0x%llx), value(%d), devframe(0x%x).", 
+                    DriverId, SwitchStatus, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+    MpaCmd.Cmd = DRV_CMD_DISK_OUT_OR_IN_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = 0;
+    /*SwitchStatusת1ֽڴsesbuf1ֽ*/
+    MpaCmd.BufLen = sizeof(DataIn);
+    MpaCmd.SdrType = SDRTYPE_SETDISKPHYSWITCH;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*Ӳdevice IdΪδ*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    DataIn[2] = (OSP_U8)SwitchStatus;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetDiskSwitchStatus
+ *   : ѯӲ̸״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             SwitchStatus Ӳ̿״̬ 
+ *   : SwitchStatus Ӳ̿״̬ 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014313
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetDiskSwitchStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *SwitchStatus)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*frame/device idtarget*/
+    OSP_U8 DataIn[2] = {0xFF, 0xFF};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == SwitchStatus))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 305, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, SwitchStatus);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_DISKPORT_PERROR_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = 0;
+    /*SwitchStatusת1ֽڴsesbuf1ֽ*/
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = SDRTYPE_GETDISKPHYSWITCH;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*Ӳdevice IdΪδ*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)SwitchStatus);    
+
+    
+}
+
+/******************************************************************************
+*     : MPAIntf_SetDiskPowerStatus
+*   : Ӳ̵Դ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             PowerStat Ӳ̵Դ״̬ 
+*   : 
+*   ֵ  : DRV_RETURN_OK - ɹ, ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 20131121
+*           : jiangfanlu 00101148
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetDiskPowerStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_DISK_POWER_E PowerStat)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*frame/device id/SwitchStatustarget*/
+    OSP_U8 DataIn[3] = {0xFF, 0xFF, 0xFF};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 306, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 307, "MPA set disk power status, id(0x%llx), value(%d), devframe(0x%x).", 
+                    DriverId, PowerStat, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+    MpaCmd.Cmd = DRV_CMD_DISK_POWER_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = 0;
+    /*PowerStatת1ֽڴsesbuf1ֽ*/
+    MpaCmd.BufLen = sizeof(DataIn);
+    MpaCmd.SdrType = SDRTYPE_SETDISKPOWERSTATUS;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*Ӳdevice IdΪδ*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    DataIn[2] = (OSP_U8)PowerStat;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetDiskPhyErr
+ *   : ѯӲphy
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             PhyErr    Ϣ
+ *   : PhyErr    Ϣ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131221
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetDiskPhyErr(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_PHY_ERROR_U *PhyErr)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*2Σͺdevice id*/
+    OSP_U8 DataIn[2] = {0xFF, 0xFF};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == PhyErr))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 308, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PhyErr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_DISK_PHY_ERR;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DRV_PHY_ERROR_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*Ӳdevice IdΪδ*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+
+    /*DataInΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)&(PhyErr->SasDiskErrorCode));
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetDiskTemperature
+ *   : Ӳ¶
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             TempInfo  ¶Ƚṹ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131227
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetDiskTemperature(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_DISK_TEMP_INFO_S *TempInfo)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == TempInfo))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 309, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, TempInfo);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_DISK_TEMPERATURE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DMI_DISK_TEMP_COMMON_INFO_S) + (TempInfo->DiskCommInfo.DiskCount * sizeof(DMI_SINGLE_DISK_TEMP_INFO_S));
+    MpaCmd.SdrType = SDRTYPE_SETDISKTEMPERATURE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*DataInΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)TempInfo, (OSP_VOID *)NULL);
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetFanName
+ *   : ȡFRU
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Name      
+ *             Length    Ƴ
+ *   : Name      
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013116
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFanName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};      /*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 310, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_FAN_NAME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = SDRTYPE_FAN_NAME;
+    MpaCmd.WtRd = MPA_READ;
+
+    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 311, "MPA GetFanName return error.");
+        return RetVal;
+    }
+
+    /*ȡСֵ*/
+    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
+
+    return RetVal;
+    
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerName
+ *   : ȡԴFRU
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Name      
+ *             Length    Ƴ
+ *   : Name      
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013116
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 312, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_POWER_NAME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = SDRTYPE_POWER_NAME;
+    MpaCmd.WtRd = MPA_READ;
+
+    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 313, "MPA GetPowerName return error.");
+        return RetVal;
+    }
+
+    /*ȡСֵ*/
+    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
+
+    return RetVal;
+    
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetWatchDogName
+ *   : ȡŹ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Name      
+ *             Length    Ƴ
+ *   : Name      
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013116
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetWatchDogName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 314, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_WDG_NAME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 315, "MPA GetwdgName return error.");
+        return RetVal;
+    }
+
+    /*ȡСֵ*/
+    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
+
+    return RetVal;
+    
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetDiskName
+ *   : ȡӲ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Name      
+ *             Length    Ƴ
+ *   : Name      
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013116
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetDiskName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    /*2Σͺdevice id*/
+    OSP_U8 DataIn[2] = {0xFF, 0xFF};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 316, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_DISK_NAME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = DAL_ELEMENT_NO(DriverId);
+    
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Name); 
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 317, "MPA GetdiskName return error.");
+        return RetVal;
+    }
+
+    return RetVal;
+    
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuName
+ *   : ȡBBU
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Name      
+ *             Length    Ƴ
+ *   : Name      
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013116
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 318, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BBU_NAME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = SDRTYPE_BBU_NAME;
+    MpaCmd.WtRd = MPA_READ;
+
+
+    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 319, "MPA GetBBUName return error.");
+        return RetVal;
+    }
+
+    /*ȡСֵ*/
+    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
+
+    return RetVal;
+    
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetMgmtCpuName
+ *   : ȡоƬ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Name      
+ *             Length    Ƴ
+ *   : Name      
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013116
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetMgmtCpuName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 320, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_MGMTCPU_NAME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = SDRTYPE_MGMTCPU_NAME;
+    MpaCmd.WtRd = MPA_READ;
+
+    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 321, "MPA GetMgmtCpuName return error.");
+        return RetVal;
+    }
+
+    /*ȡСֵ*/
+    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
+
+    return RetVal;
+    
+}
+
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetFpgaName
+ *   : ȡFPGA
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Name      
+ *             Length    Ƴ
+ *   : Name      
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013116
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFpgaName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 322, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_FPGA_NAME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+
+    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 323, "MPA GetFPGAName return error.");
+        return RetVal;
+    }
+
+    /*ȡСֵ*/
+    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
+
+    return RetVal;
+    
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetCpldName
+ *   : ȡCPLD
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Name      
+ *             Length    Ƴ
+ *   : Name      
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013116
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetCpldName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 324, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_CPLD_NAME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 325, "MPA GetCPLDName return error.");
+        return RetVal;
+    }
+
+    /*ȡСֵ*/
+    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
+
+    return RetVal;
+    
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetPortName
+ *   : ȡPort
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Name      
+ *             Length    Ƴ
+ *   : Name      
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013116
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPortName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 326, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_PORT_NAME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 327, "MPA GetPortName return error.");
+        return RetVal;
+    }
+
+    /*ȡСֵ*/
+    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
+
+    return RetVal;
+    
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetUartName
+ *   : ȡUart
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Name      
+ *             Length    Ƴ
+ *   : Name      
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013116
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetUartName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 328, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_UART_NAME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 329, "MPA GetUartName return error.");
+        return RetVal;
+    }
+
+    /*ȡСֵ*/
+    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
+
+    return RetVal;
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetIocardName
+ *   : ȡӿڿ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Name      
+ *             Length    Ƴ
+ *   : Name      
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013116
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetIocardName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 TempBuffer[DMI_NAME_LEN] = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 330, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_IOCARD_NAME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = SDRTYPE_IOCARD_NAME;
+    MpaCmd.WtRd = MPA_READ;
+
+    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 331, "MPA GetIocardName return error.");
+        return RetVal;
+    }
+
+    /*ȡСֵ*/
+    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)TempBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
+
+    return RetVal;
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetFanMode
+ *   : ѯģʽ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Mode       ģʽ
+ *   : Mode       ģʽ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131111
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFanMode(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Mode)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Mode))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 332, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Mode);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_FAN_MODE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Mode);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetFanMode
+ *   : ÷ģʽ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Mode       ģʽ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131111
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetFanMode(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Mode)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 333, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 334, "MPA sets fan mode, id(0x%llx), value(%d), devframe(0x%x).", 
+                        DriverId, Mode, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+
+    MpaCmd.Cmd = DRV_CMD_FAN_MODE_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Mode, (OSP_VOID *)NULL);    
+    
+}
+
+  /******************************************************************************
+  *     : MPAIntf_SetUpgradeState
+  *   : ʼ
+  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+  *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+  *             State       ״̬
+  *   : 
+  *   ֵ  : OSP_S32
+  * ˵  : 
+  * 
+  * ޸ʷ      :
+  *  1.       : 2018313
+  *           : º
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+ OSP_S32 MPAIntf_SetUpgradeState(OSP_VOID *EnclAddr, OSP_U32 DriverId, DMI_NOTIFY_UPGRADE_STAT_E State)
+ {
+     OSP_U8 UpgradeState;
+     MPA_CMD_INFO_S MpaCmd;
+     DAL_MPA_ADDR_S *MpaAddr = NULL;
+ 
+     if (NULL == EnclAddr)
+     {
+         DRV_MPA_TRACE(DRV_LOG_WARN, 333, "MPA finds the pointer is null(0x%p).", EnclAddr);
+         return DRV_RETURN_ERROR;
+     }
+ 
+     DRV_MPA_TRACE(DRV_LOG_INFO, 334, "MPA sets upgrade state, id(0x%x), value(%d), devframe(0x%x).", 
+                         DriverId, State, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+
+     MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;         
+     MpaCmd.Cmd = DRV_CMD_UPGRADE_NOTIFY;
+     MpaCmd.FruId = DriverId;
+     MpaCmd.DeviceId = 0;
+     MpaCmd.BufLen = sizeof(OSP_U8);
+     MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+     MpaCmd.WtRd = MPA_WRITE;
+     UpgradeState = State & 0xFF;
+        
+     /*BMC´,ΪBMCʼշسɹ 
+     ϲʼͽʱ2θýӿڣӿڷʧܻᵼʧ
+     ΪԤͨݶʼ·*/
+     if (MpaAddr->DevFrame < DRV_FRAMEMODEL_12GSAS_EXP_END)
+     {
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&UpgradeState, (OSP_VOID *)NULL); 
+     }
+     else
+     {
+        return DRV_RETURN_OK;
+     }
+     
+ }
+
+ /******************************************************************************
+ *     : MPAIntf_GetFanLevel
+ *   : ѯȵλ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Level       ȵλ
+ *   : Level       ȵλ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131111
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFanLevel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Level)
+{
+     MPA_CMD_INFO_S MpaCmd;
+     OSP_S32 RetVal = DRV_RETURN_ERROR;
+     DAL_MPA_ADDR_S *MpaAddr = NULL;
+     
+     if ((NULL == EnclAddr) || (NULL == Level))
+     {
+         DRV_MPA_TRACE(DRV_LOG_WARN, 335, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Level);
+         return DRV_RETURN_ERROR;
+     }
+     
+     MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+     MpaCmd.Cmd = DRV_CMD_FAN_LEVEL_GET;
+     MpaCmd.FruId = DAL_FRU_ID(DriverId);
+     MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+     MpaCmd.BufLen = sizeof(OSP_U8);
+     MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+     MpaCmd.WtRd = MPA_READ;
+
+     /* BEGIN: Added by shipin, 2016-5-27 21:19:53, ⵥ:DTS2016052503239, ޸ԭ:ȵλδ⵽ЧֵǰѯλӿҪʧ */
+     RetVal =  MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Level);
+     
+     if(DRV_RETURN_OK != RetVal)
+     {
+         return RetVal; 
+     }
+
+     /* V1򣬷ȵλͨframeInfoݿѯ޷SESӿʵ֣ڴ */
+     if (DRV_FRAMEMODEL_V1_END > MpaAddr->DevFrame)
+     {
+         if(MPA_DATA_IS_INVALID8(*Level))
+         {
+             RetVal = DRV_RETURN_NOT_READY;
+         }
+     }
+     /* END: Added by shipin, 2016-5-27 21:19:53 */
+      
+     return RetVal;    
+
+}
+
+/******************************************************************************
+*     : MPAIntf_GetFanUsrLevel
+*   : ѯûλ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             Level       ûλ
+*   : Level       ûλ
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 201781
+*           : 
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetFanUsrLevel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Level)
+{
+   MPA_CMD_INFO_S MpaCmd;
+   OSP_S32 RetVal = DRV_RETURN_ERROR;
+   DAL_MPA_ADDR_S *MpaAddr = NULL;
+   
+   if ((NULL == EnclAddr) || (NULL == Level))
+   {
+       /*ϲ㱣֤˲Чԣ˴־*/
+       DRV_MPA_TRACE(DRV_LOG_WARN, 335, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Level);
+       return DRV_RETURN_ERROR;
+   }
+   
+   MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+   MpaCmd.Cmd = DRV_CMD_FAN_USR_LEVEL_GET;
+   MpaCmd.FruId = DAL_FRU_ID(DriverId);
+   MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+   MpaCmd.BufLen = sizeof(OSP_U8);
+   MpaCmd.SdrType = SDRTYPT_GET_FAN_USR_LEVEL;
+   MpaCmd.WtRd = MPA_READ;
+
+   RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Level);
+   if(DRV_RETURN_OK != RetVal)
+   {
+       return RetVal; 
+   }
+   
+   /* V1򣬷ȵλͨframeInfoݿѯ޷SESӿʵ֣ڴ */
+   if (DRV_FRAMEMODEL_V1_END > MpaAddr->DevFrame)
+   {
+       if(MPA_DATA_IS_INVALID8(*Level))
+       {
+           RetVal = DRV_RETURN_NOT_READY;
+       }
+   }
+    
+   return RetVal;    
+
+}
+
+/******************************************************************************
+ *     : MPAIntf_SetFanLevel
+ *   : ÷ȵλ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Level       ȵλ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131111
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetFanLevel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Level)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 336, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+    
+    DRV_MPA_TRACE(DRV_LOG_INFO, 337, "MPA sets fan level, id(0x%llx), value(%d), devframe(0x%x).", 
+                DriverId, Level, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+
+    MpaCmd.Cmd = DRV_CMD_FAN_LEVEL_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Level, (OSP_VOID *)NULL);    
+    
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetFanSpeed
+ *   : ѯת
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             speed       ת
+ *   : speed       ת
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131111
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFanSpeed(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Speed)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    /*ͺdevice idtarget*/
+    OSP_U8 DataIn[3] = {0, 0, 0};
+    
+    if ((NULL == EnclAddr) || (NULL == Speed))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 338, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Speed);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_FAN_SPEED_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = DAL_FRU_ID_TO_SLOT(MpaCmd.FruId);
+    DataIn[2] = MpaCmd.DeviceId;
+    
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Speed);    
+    
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetFanState
+ *   : ѯ״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             State     ״̬
+ *   : State     ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131112
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFanState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DAL_FAN_STAT_E *State)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 FanState = 0;
+    OSP_S32 RetVal =  DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == State))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 339, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_FAN_STATE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&FanState);    
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 340, "MPA GetFanState return error 0x%x.", RetVal);
+        return RetVal;
+    }
+    *State = (DAL_FAN_STAT_E)FanState;
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetFanOnOff
+ *   : ÷µ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId   FRU
+ *             FruPowerCtrl  µƱ־
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131112
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetFanOnOff(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 FruPowerCtrl)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 341, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 342, "MPA sets fan on or off, id(0x%x), value(%d).", FruId, FruPowerCtrl);
+    MpaCmd.Cmd = DRV_CMD_SET_FAN_POWER_ONOFF;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&FruPowerCtrl, (OSP_VOID *)NULL);    
+    
+}                               
+
+ /******************************************************************************
+ *     : MPAIntf_GetFanSn
+ *   : ѯȵSN
+ *   : EnclAddr  
+ *             DriverId  
+ *             Sn        
+ *             Length    
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2016229
+ *           : shipin
+ *    ޸   : DTS2016030202964 Դһķģ飬DMIͨFRUType֣ߵԴͨȡSNϢ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFanSn(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Sn, OSP_U32 Length)
+{
+    OSP_S8 SnBuffer[DMI_NAME_LEN] = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U64 FanToPowerDriverId = 0;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    const OSP_U64 ClearFanProperty = 0xffffffffffbffdff;/* FRUSlotIdbit1 */
+    const OSP_U64 AddPowerProperty = 0x0000000000100000;/* ϵԴFRU */
+
+    if ((NULL == EnclAddr) || (NULL == Sn) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 370, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Sn, Length);
+        return RetVal;
+    }
+    
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    /* V2SES򣬵ԴһFRU޷ȵӱǩ(FruType:300B/300C)ʹõԴSN */
+    /* V2R3C01汾NVMe 2U BMC̿һʹõԴһFRU*/
+    if (((DRV_FRAMEMODEL_12GSAS_EXP_END  > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_V1_END < MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_CTL_4U72 != MpaAddr->DevFrame))
+    || (DRV_FRAMEMODEL_PCIE_CTRL_2U_C1_BMC == MpaAddr->DevFrame))
+    {
+        /* ȵDriverIdתΪԴDriverId */
+        /* תϵ: FRUID:4000/4002 Ӧ: ԴFRUID:1000 
+                     FRUID:4001/4003 Ӧ: ԴFRUID:1001
+        */
+        FanToPowerDriverId = ((DriverId & ClearFanProperty) | AddPowerProperty);
+        RetVal = MPAIntf_GetPowerSn(EnclAddr, FanToPowerDriverId, SnBuffer, Length);
+        if (DRV_RETURN_OK != RetVal)
+        {
+            /* ѯԴSNʧܣ־һӡ */
+            DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 371, 3, 24 * 60 * 60 * HZ, "MPA GetFanSn return error.DriverId(0x%llx); FanToPowerDriverId(0x%llx).", DriverId, FanToPowerDriverId);
+            return RetVal;
+        }
+
+        /*DAL·ĳʵʳȡ̵ĳȿ*/
+        OSAL_MemCpy_s((OSP_U8 *)Sn, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+            (OSP_U8 *)SnBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+    }
+    else
+    {
+        DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 372, 1, 24 * 60 * 60 * HZ, "MPA GetFanSn return error.framemode(0x%x).", MpaAddr->DevFrame);
+    }
+
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetFanHuaweiCode
+ *   : ѯȵHuaweiCode
+ *   : EnclAddr  
+ *             DriverId  
+ *             Code      
+ *             Length    
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2016229
+ *           : shipin
+ *    ޸   : DTS2016030202964 Դһķģ飬DMIͨFRUType֣ߵԴͨȡBOMϢ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFanHuaweiCode(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Code, OSP_U32 Length)
+{
+    OSP_S8 CodeBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U64 FanToPowerDriverId = 0;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    const OSP_U64 ClearFanProperty = 0xffffffffffbffdff;/* FRUSlotIdbit1 */
+    const OSP_U64 AddPowerProperty = 0x0000000000100000;/* ϵԴFRU */
+
+    if ((NULL == EnclAddr) || (NULL == Code) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 360, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Code, Length);
+        return RetVal;
+    }
+    
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    
+    /* V2SES򣬵ԴһFRU޷ȵӱǩ(FruType:300B/300C)ʹõԴBOM */
+    /* V2R3C01汾NVMe 2U BMC̿һʹõԴһFRU*/
+    if (((DRV_FRAMEMODEL_12GSAS_EXP_END  > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_V1_END < MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_CTL_4U72 != MpaAddr->DevFrame))
+    || (DRV_FRAMEMODEL_PCIE_CTRL_2U_C1_BMC == MpaAddr->DevFrame))
+    {
+        /* ȵDriverIdתΪԴDriverId */
+        /* תϵ: FRUID:4000/4002 Ӧ: Դ:1000 
+                     FRUID:4001/4003 Ӧ: Դ:1001
+        */
+        FanToPowerDriverId = ((DriverId & ClearFanProperty) | AddPowerProperty);
+        RetVal = MPAIntf_GetPowerHuaweiCode(EnclAddr, FanToPowerDriverId, CodeBuffer, Length);
+        if (DRV_RETURN_OK != RetVal)
+        {
+            /* ѯԴHuaweiCodeʧܣ־һӡ */
+            DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 361, 3, 24 * 60 * 60 * HZ, "MPA GetFanHuaweiCode return error.DriverId(0x%llx); FanToPowerDriverId(0x%llx).", DriverId, FanToPowerDriverId);
+            return RetVal;
+        }
+
+        /*DAL·ĳʵʳȡ̵ĳȿ*/
+        OSAL_MemCpy_s((OSP_U8 *)Code, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+            (OSP_U8 *)CodeBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+    }
+    else
+    {
+        DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 362, 1, 24 * 60 * 60 * HZ, "MPA GetFanHuaweiCode return error.framemode(0x%x).", MpaAddr->DevFrame);
+    }
+
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetUartSwitch
+ *   : лBMC
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             UartSwitchFlag  л־
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131112
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetUartSwitch(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 UartSwitchFlag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 343, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 344, "MPA sets uart switch, id(0x%llx), value(%d).", DriverId, UartSwitchFlag);
+    MpaCmd.Cmd = DRV_CMD_UART_SWITH;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&UartSwitchFlag, (OSP_VOID *)NULL);    
+    
+}                               
+
+
+
+ /******************************************************************************
+ *     : MPAIntf_SetUartLoopTest
+ *   : ôڻز
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             TestFlag  ڻزԱ־
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131112
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetUartLoopTest(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 TestFlag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 345, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 346, "MPA sets uart loop test, id(0x%llx), value(%d).", DriverId, TestFlag);
+    MpaCmd.Cmd = DRV_CMD_SET_UART_LOOP_TEST;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TestFlag, (OSP_VOID *)NULL);    
+    
+}                               
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerOutput
+ *   : ѯԴ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             PowerOutPut  Դ
+ *   : PowerOutPut  Դ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131113
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerOutput(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *PowerOutPut)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == PowerOutPut))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 347, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PowerOutPut);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_POWER_POUTPUT_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /* BEGIN: Modified by shipin, 2014-8-14 11:43:42, ⵥ:DTS2014073100826 , ޸ԭ: ЧжЧʱֵ */
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PowerOutPut);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return RetVal; 
+    }
+    
+    if(MPA_DATA_IS_INVALID16(*PowerOutPut))
+    {
+        RetVal = DRV_RETURN_NOT_READY;
+    }
+    /* END: Modified by shipin, 2014-8-14 11:43:42 */
+     
+    return RetVal;    
+    
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerInput
+ *   : ѯԴ빦
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             PowerInPut  Դ빦ʣλW
+ *   : PowerInPut  Դ빦ʣλW
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014128
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerInput(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *PowerInPut)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == PowerInPut))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 348, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PowerInPut);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_POWER_INPUT;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*Begin : 2015-6-26 19:27:3 by yinhuaqiang 00305130~reason: DTS2015070200769  
+    PANGEA V200R002C00B023_ƽ̨_ᵥ_SESMPAIntf_GetPowerInput
+    MPAIntf_GetPowerOutputЧʱֵͲͬ*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PowerInPut);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return RetVal; 
+    }
+    
+    if(MPA_DATA_IS_INVALID16(*PowerInPut))
+    {
+        RetVal = DRV_RETURN_NOT_READY;
+    }
+
+    return RetVal;
+    /*End : 2015-6-26 19:27:3 by yinhuaqiang 00305130~reason:  DTS2015070200769 */
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerRatedOutPut
+ *   : ȡԴ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             OutPut    Դ
+ *   : OutPut    Դ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131217
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerRatedOutPut(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *OutPut)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == OutPut))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 349, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, OutPut);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_POWER_RATED_OUTPUT_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)OutPut);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerState
+ *   : ѯԴ״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             PowerState  Դ״̬
+ *   : PowerState  Դ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131113
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerState(OSP_VOID *EnclAddr, OSP_U64 DriverId, PS_STAT_E *PowerState)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 TmpState = 0;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_MPA_ADDR_S * MpaAddr = NULL;
+    
+    if ((NULL == EnclAddr) || (NULL == PowerState))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 350, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PowerState);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_POWER_WORK_STATE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*v18bit澯v2չ16bit*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)MpaAddr, (OSP_VOID *)&TmpState);    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 351, "MPA GetPowerState err 0x%x.", RetVal);
+        return RetVal;
+    }
+
+    *PowerState = (PS_STAT_E)TmpState;
+    return DRV_RETURN_OK;
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerAlertInfo
+ *   : ѯԴ澯Ϣ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             PowerAlarm  Դ澯Ϣ
+ *   : PowerAlarm  Դ澯Ϣ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131113
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerAlertInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *PowerAlarm)
+{
+    OSP_U8 StateU8 = 0;
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_MPA_ADDR_S * MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == PowerAlarm))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 354, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PowerAlarm);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_POWER_ABSTATUS_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*v18bit澯v2չ16bit*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    if (MpaAddr->DevFrame < DRV_FRAMEMODEL_V1_END)
+    {
+        MpaCmd.BufLen = sizeof(OSP_U8);
+        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&StateU8);    
+        if(DRV_RETURN_OK != RetVal)
+        {
+            DRV_MPA_TRACE(DRV_LOG_DBG, 355, "MPA GetPowerAlarm1 return error.");
+            return RetVal;
+
+        }
+
+        /*2014-9-22 c00221000 for DTS2014091801288 begin: ЧжЧʱֵ*/
+        if(MPA_DATA_IS_INVALID8(StateU8))
+        {
+            return DRV_RETURN_NOT_READY;
+        }
+        /*2014-9-22 c00221000 for DTS2014091801288 end*/
+       *PowerAlarm = MPA_GetV1Power32BitFaultBit(StateU8);
+    }
+    else
+    {
+        MpaCmd.BufLen = sizeof(OSP_U32);
+        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PowerAlarm);    
+        if(DRV_RETURN_OK != RetVal)
+        {
+            DRV_MPA_TRACE(DRV_LOG_DBG, 356, "MPA GetPowerAlarm2 return error.");
+            return RetVal;
+
+        }
+    }
+    
+    return RetVal;
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerManufactureDate
+ *   : ѯԴ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Date      Դ
+ *             Length    Դڳ
+ *   : Date      Դ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131113
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerManufactureDate(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Date, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S8 DateBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_S8  DataTemp[DMI_NAME_LEN] = "2000-00-00";  /* ڳʼ*/
+
+    if ((NULL == EnclAddr) || (NULL == Date) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 357, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Date, Length);
+        return RetVal;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    MpaCmd.Cmd = DRV_CMD_POWER_PRODATE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)DateBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 358, "MPA GetPowerManufactureDate return error.");
+        return RetVal;
+    }
+
+    /* V1 ԴʽҪת*/
+    if (DRV_FARMEMODEL_EXP_HDS >= MpaAddr->DevFrame)   
+    {
+        /*lint -e661*/
+        if ((0 == (OSP_U8)DateBuffer[0]) || (0xFF == (OSP_U8)DateBuffer[0])) /*  СϵͳЧ,MPAת*/
+        {
+            OSAL_MemCpy_s((OSP_U8 *)Date, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+                (OSP_U8 *)DateBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+            return RetVal;
+        }
+
+        DataTemp[2] = DateBuffer[0];
+        DataTemp[3] = DateBuffer[1];
+        DataTemp[5] = DateBuffer[2];
+        DataTemp[6] = DateBuffer[3];
+        DataTemp[8] = DateBuffer[4];
+        DataTemp[9] = DateBuffer[5];
+        /*lint +e661*/
+
+        DRV_MPA_TRACE(DRV_LOG_DBG, 359, "mpa power date is : %s, data from bmc/ses is : %s.", DataTemp, DateBuffer);
+        OSAL_MemCpy_s((OSP_U8 *)Date, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+            (OSP_U8 *)DataTemp, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Date, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)DateBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerHuaweiCode
+ *   : ѯԴHuaweiCode
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Code      ԴHuaweiCode 
+ *             Length    ԴϢ
+ *   : Code      ԴHuaweiCode 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131114
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerHuaweiCode(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Code, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 CodeBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Code) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 360, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Code, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_POWER_HWCODE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)CodeBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 361, "MPA GetPowerHuaweiCode return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Code, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)CodeBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerSoftwareVersion
+ *   : ѯԴ汾
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Version   汾
+ *             Length    汾ų
+ *   : Version   汾
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131114
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerSoftwareVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Version, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 VersionBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Version) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 362, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Version, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_VERSION_GET_POWER;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 363, "MPA GetPowerSoftwareVersion return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Version, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerAcDcType
+ *   : ѯԴAC/DC
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Powertype  Դ
+ *   : Powertype  Դ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131114
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerAcDcType(OSP_VOID *EnclAddr, OSP_U64 DriverId, PS_TYPE_E *Powertype)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 TmpType = 0;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Powertype))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 364, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Powertype);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_POWER_TYPE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&TmpType);    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 365, "MPA GetPowerAcDcType err 0x%x.", RetVal);
+        return RetVal;
+    }
+
+    *Powertype = (PS_TYPE_E)TmpType;
+    return DRV_RETURN_OK;
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerOutputVoltage
+ *   : ѯԴѹ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Voltage  ѹ 
+ *   : Voltage  ѹ 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131122
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerOutputVoltage(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Voltage)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Voltage))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 366, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Voltage);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_POWER_OUTPUT_VOLTAGE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Voltage);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerOutputCurrent
+ *   : ѯԴ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Current  
+ *   : Current  
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131122
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerOutputCurrent(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Current)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Current))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 367, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Current);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_POWER_OUTPUT_CURRENT_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Current);
+
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerVendor
+ *   : ѯԴϢ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Vendor    ԴϢ
+ *             Length    ԴϢ
+ *   : Vendor    ԴϢ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131122
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerVendor(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Vendor, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 VendorBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Vendor) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 368, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Vendor, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_POWER_FACNAME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VendorBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 369, "MPA GetVendor return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Vendor, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VendorBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerSn
+ *   : ѯԴSN
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Sn    ԴSN
+ *             LengthԴSN
+ *   : Sn    ԴSN
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131122
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerSn(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Sn, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*v1v2 Դsnȶ岻һѽϴ*/
+    OSP_S8 SnBuffer[DMI_NAME_LEN] = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Sn) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 370, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Sn, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_POWER_PROSN_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)SnBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 371, "MPA GetPowerSn return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Sn, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)SnBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_SetPowerFruOnOff
+ *   : õԴ򿪡ر
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             FruPowerCtrl   򿪡رձ־0:رգ1:
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013126
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetPowerFruOnOff(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 FruPowerCtrl)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 372, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 373, "MPA sets power fru on or off, id(0x%llx), value(%d), devframe(0x%x).", 
+                        DriverId, FruPowerCtrl, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+
+    MpaCmd.Cmd = DRV_CMD_SET_POWER_FRU_ONOFF;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPE_POWER_ONOFF_ALL;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&FruPowerCtrl, (OSP_VOID *)NULL);    
+    
+}                               
+
+ /******************************************************************************
+ *     : MPAIntf_SetPowerFruOnOffSingle
+ *   : õԴ򿪡ر
+ *   : EnclAddr      
+ *             DriverId      
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             FruPowerCtrl   򿪡رձ־0:رգ1:
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014327
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetPowerFruOnOffSingle(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 FruPowerCtrl)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 374, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 375, "MPA sets power fru on or off signal, id(0x%llx), value(%d).", DriverId, FruPowerCtrl);
+    MpaCmd.Cmd = DRV_CMD_SET_POWER_FRU_ONOFF_SINGLE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPE_POWER_ONOFF_LOCAL;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&FruPowerCtrl, (OSP_VOID *)NULL);    
+    
+}           
+ /******************************************************************************
+ *     : MPAIntf_GetPowerProductName
+ *   : ѯԴƷ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Name       ԴƷ
+ *             Length     ԴƷƳ
+ *   : Name       ԴƷ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131122
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerProductName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 NameBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 376, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_POWER_PRONAME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NameBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 377, "MPA GetPowerProductName return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)NameBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerPsOKState
+ *   : ѯԴPS_OKź״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             State  ԴPS_OKź״̬(1: normal, 0: alarm)
+ *   : State  ԴPS_OKź״̬(1: normal, 0: alarm)
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013126
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerPsOKState(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == State))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 378, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_POWER_PS_OK_FLAG;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerPsAlertState
+ *   : ѯԴPS_ALERTź״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             State  ԴPS_OKź״̬(1: normal, 0: alarm)
+ *   : State  ԴPS_OKź״̬(1: normal, 0: alarm)
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013126
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerPsAlertState(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == State))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 379, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_POWER_PS_ALERT_FLAG;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerTemperature
+ *   : ѯԴ¶
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Temp      ¶ֵ
+ *   : Temp      ¶ֵλ棬ÿԴ¶ͨdeviceid֣0¶ȣ1 ԴڲоƬ¶
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201418
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+ OSP_S32 MPAIntf_GetPowerTemperature(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S32 *Temp)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Temp))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 380, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Temp);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_POWER_TEMP;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_S32);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;/**/
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Temp);    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetAllPowerConsumeAndThreshold
+ *   : ѯĺ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Spec      SpecϢ
+ *             Length   SpecϢ
+ *   : Spec      SpecϢ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20141226
+ *           : hulinhui 00289393
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetAllPowerConsumeAndThreshold(OSP_VOID *EnclAddr, OSP_U32 DriverId, DMI_SYS_POWER_COST_S *ConsumeThreshold)
+{
+
+    MPA_CMD_INFO_S MpaCmd;
+    DMI_SYS_POWER_COST_S ConsumeBuffer; /*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == ConsumeThreshold))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 87, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, ConsumeThreshold);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_CONSUME_THRESHOLD;
+    MpaCmd.FruId = DriverId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DMI_SYS_POWER_COST_S);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_POWEROUT;
+    MpaCmd.WtRd = MPA_READ;
+
+    OSAL_MemSet_s((OSP_U8 *)&ConsumeBuffer, sizeof(DMI_SYS_POWER_COST_S), INVALID_VALUE8, sizeof(DMI_SYS_POWER_COST_S));
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&ConsumeBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 88, "MPA GetAllPowerConsumeAndThreshold return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)ConsumeThreshold, sizeof(DMI_SYS_POWER_COST_S), 
+        (OSP_U8 *)&ConsumeBuffer, sizeof(DMI_SYS_POWER_COST_S));
+   
+    return RetVal;
+}
+
+/* BEGIN: Added by qintianyi, 2016/9/19  ⵥ:NA, ޸ԭ:xֵ㶨ƻԴ± */
+/******************************************************************************
+*     : MPAIntf_GetPowerTempProtect
+*   : ȡԴ±״̬
+*   : EnclAddr  
+*             DriverId  
+*             ProtectFlag     
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2016920
+*           : qintianyi
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetPowerTempProtect(OSP_VOID* EnclAddr, OSP_U64 DriverId, DMI_HIGHTEMP_RULE_E* Protect)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Protect))
+    {
+        /*ָֻΪʱӡ*/
+        DRV_MPA_TRACE(DRV_LOG_WARN, 89, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Protect);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_POWER_PROTECT_FLAG;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DMI_HIGHTEMP_RULE_E);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Protect);
+}
+
+/******************************************************************************
+*     : MPAIntf_SetPowerTempProtect
+*   : õԴ±״̬
+*   : EnclAddr     
+*             DriverId     
+*             ProtectFlag  
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2016920
+*           : qintianyi
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetPowerTempProtect(OSP_VOID* EnclAddr, OSP_U64 DriverId, DMI_HIGHTEMP_RULE_E Protect)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if (NULL == EnclAddr)
+    {
+        /*ָֻΪʱӡ*/
+        DRV_MPA_TRACE(DRV_LOG_WARN, 372, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE_LIMIT(DRV_LOG_INFO, 373, 1, 20*HZ, "MPA sets power temp protect, id(0x%llx), value(%d), devframe(0x%x).", 
+        DriverId, Protect, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+
+    MpaCmd.Cmd = DRV_CMD_SET_POWER_PROTECT_FLAG;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DMI_HIGHTEMP_RULE_E);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Protect, (OSP_VOID *)NULL);    
+    
+}
+
+/******************************************************************************
+*     : MPAIntf_GetPowerSupportSetTempProtect
+*   : ѯǷ֧õԴ±
+*   : EnclAddr     
+*             DriverId     
+*             ProtectFlag  
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2016920
+*           : qintianyi
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetPowerSupportSetTempProtect(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_BOOL* Support)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Support))
+    {
+        /*ָֻΪʱӡ*/
+        DRV_MPA_TRACE(DRV_LOG_WARN, 372, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Support);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_POWER_SUPPORT_SET_PROTECT;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_BOOL);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Support);
+}
+/* END: Added by qintianyi, 2016/9/19 */
+
+ /******************************************************************************
+ *     : MPAIntf_SetThresholdRatio
+ *   : ϵ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Ratio      RatioϢ
+ *             Length   RatioϢ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20141226
+ *           : hulinhui 00289393
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetThresholdRatio(OSP_VOID *EnclAddr, OSP_U32 DriverId, DMI_SYS_POWER_COST_LIMIT_S *Ratio)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Ratio))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 89, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Ratio);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_THRESHOLD_RATIO;
+    MpaCmd.FruId = DriverId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DMI_SYS_POWER_COST_LIMIT_S);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_RATIO;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Ratio, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+ *     : MPAIntf_GetThresholdRatio
+ *   : ѯĺ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                         豸idϢ
+ *             Spec      SpecϢ
+ *             Length   SpecϢ
+ *   : Spec      SpecϢ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20141226
+ *           : hulinhui 00289393
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetThresholdRatio(OSP_VOID *EnclAddr, OSP_U32 DriverId, DMI_SYS_POWER_COST_LIMIT_S *ThresholdRatio)
+{
+
+    MPA_CMD_INFO_S MpaCmd;
+    DMI_SYS_POWER_COST_LIMIT_S RatioBuffer;/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == ThresholdRatio))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 87, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, ThresholdRatio);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_THRESHOLD_RATIO;
+    MpaCmd.FruId = DriverId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DMI_SYS_POWER_COST_LIMIT_S);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_RATIO;
+    MpaCmd.WtRd = MPA_READ;
+
+    OSAL_MemSet_s((OSP_U8 *)&RatioBuffer, sizeof(DMI_SYS_POWER_COST_LIMIT_S), INVALID_VALUE8, sizeof(DMI_SYS_POWER_COST_LIMIT_S));
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&RatioBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 88, "MPA GetThresholdRatio return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)ThresholdRatio, sizeof(DMI_SYS_POWER_COST_LIMIT_S), 
+        (OSP_U8 *)&RatioBuffer, sizeof(DMI_SYS_POWER_COST_LIMIT_S));
+   
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuState
+ *   : ѯBBU״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             State      BBU״̬(/쳣/粻/оƬ)
+ *   : State      BBU״̬(/쳣/粻/оƬ)
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131114
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_BBU_STAT_E *State)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 TmpState = 0;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == State))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 381, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BBU_STATUS_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = BBU_STATE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&TmpState);    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 382, "MPA GetBbuState err 0x%x.", RetVal);
+        return RetVal;
+    }
+
+    *State = (DMI_BBU_STAT_E)TmpState;
+    return DRV_RETURN_OK;
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuWorkState
+ *   : ѯBBU״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             State      BBU״̬
+ *   : State      BBU״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131114
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuWorkState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_BBU_CHARGE_STAT_E *State)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 TmpState = 0;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == State))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 383, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BBU_STATE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = BBU_WORK_STATE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&TmpState);    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 384, "MPA GetBbuWorkState err 0x%x.", RetVal);
+        return RetVal;
+    }
+
+    *State = (DMI_BBU_CHARGE_STAT_E)TmpState;
+    return DRV_RETURN_OK;
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuWorkHour
+ *   : ѯBBUʹʱ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Hour     ʹʱ䣬λ:Сʱ 
+ *   : Hour     ʹʱ䣬λ:Сʱ 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131114
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuWorkHour(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Hour)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    
+    if ((NULL == EnclAddr) || (NULL == Hour))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 385, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Hour);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    MpaCmd.Cmd = DRV_CMD_BBU_USETIME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.SdrType = BBU_USE_TIME ;
+    MpaCmd.WtRd = MPA_READ;
+
+    if (MpaAddr->DevFrame < DRV_FRAMEMODEL_V1_END)
+    {
+        MpaCmd.BufLen = sizeof(OSP_U16);
+    }
+    else
+    {
+        MpaCmd.BufLen = sizeof(OSP_U32);
+    }
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Hour);    
+    
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_SetBbuWorkHour
+ *   : BBUʹʱ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Hour  BBUʹʱ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131124
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBbuWorkHour(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 Hour)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 386, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 387, "MPA sets bbu work houre, id(0x%llx), value(%d).", DriverId, Hour);
+    MpaCmd.Cmd = DRV_CMD_BBU_USETIME_CLEAR;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = BBU_USE_TIME;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Hour, (OSP_VOID *)NULL);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuHardSoftCompileVersion
+ *   : ѯBBU汾Ӳ汾汾ʱ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Version   BBU汾
+ *   : Version   BBU汾
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131114
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuHardSoftCompileVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_BBU_VER_S *Version)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Version))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 388, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Version);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BBU_HWVERSION_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_BBU_VER_S);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_HWVERSION;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Version);
+
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuSoftwareVersion
+ *   : ѯBBU汾
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Version   BBU汾
+ *             Length     BBU汾
+ *   : Version   BBU汾
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131127
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuSoftwareVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Version, OSP_U32 Length)
+{
+
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 VersionBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Version) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 389, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Version, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BBU_SWBETA_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 390, "MPA GetBbuSoftwareVersion return error.");
+       return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Version, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+
+    return RetVal;
+   
+}
+
+/******************************************************************************
+*     : MPAIntf_GetPowerFwVersion
+*   : ѯPOWER汾
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             Version   BBU汾
+*             Length     BBU汾
+*   : Version   BBU汾
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ   :
+* 1.     : 2017315
+*        : limingjiang/00400933
+*  ޸  : AR-0000261890-003-007DMIֵ֧ԴFWܡ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetPowerFwVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Version, OSP_U32 Length)
+{
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 VersionBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Version) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 389, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Version, Length);
+        return RetVal;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    MpaCmd.Cmd = DRV_CMD_POWER_FW_VERSION_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId) + 1;
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.WtRd = MPA_READ;
+
+    /* V2-BMCPOWERFruIdת SdrType*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        MpaCmd.SdrType = MPAIntf_FruidToUpgradeType(MpaCmd.FruId);
+    }
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+       DRV_MPA_TRACE(DRV_LOG_WARN, 508, "EnclAddr:%p DriverId:%llx. ret:%d, version:%s",
+           EnclAddr, DriverId, RetVal, VersionBuffer);
+       return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Version, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuSn
+ *   : ѯbbu sn(V2-BMCBBU2)
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Sn        bbuк
+ *             Length    
+ *   : Sn        bbuк
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131218
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuSn(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Sn, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 SnBuffer[DMI_NAME_LEN] = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Sn) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 391, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Sn, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BBU_SN;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_SN;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)SnBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Sn, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)SnBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+
+}
+
+/******************************************************************************
+*     : MPAIntf_GetFanCtrlFwVersion
+*   : ѯFanCtrl汾
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             Version   BBU汾
+*             Length     BBU汾
+*   : Version   BBU汾
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ   :
+* 1.     : 2017325
+*        : limingjiang/00400933
+*  ޸  :DMIַ֧ȿưFWܡ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetFanCtrlFwVersion(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Version, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 VersionBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Version) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 389, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Version, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_FANCTRL_FW_VERSION_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId) + 1;
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.WtRd = MPA_READ;
+    MpaCmd.SdrType = UPGRADE_TYPE_FAN_0_BMC;/* BMC̶ʹôֵʶȿư*/
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)VersionBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+       DRV_MPA_TRACE(DRV_LOG_WARN, 508, "EnclAddr:%p DriverId:%llx. ret:%d, version:%s",
+           EnclAddr, DriverId, RetVal, VersionBuffer);
+       return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Version, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)VersionBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuLastDischargeTime
+ *   : ѯBBUһηŵʱ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Time     BBUһηŵʱ 
+ *   : Time     BBUһηŵʱ 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131115
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuLastDischargeTime(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_BBULAST_CHARGETIME_S *Time)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Time))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 393, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Time);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BBU_LAST_DICTIME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_BBULAST_CHARGETIME_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Time);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuLastDischargeParameter
+ *   : ѯBBUһηŵ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Para      BBUһηŵ
+ *   : Para      BBUһηŵ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131116
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuLastDischargeParameter(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Para)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_MPA_ADDR_S * MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Para))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 394, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Para);
+        return RetVal;
+    }
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    MpaCmd.Cmd = DRV_CMD_BBU_LAST_DICPARA_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    if (MpaAddr->DevFrame < DRV_FRAMEMODEL_12GSAS_EXP_END)
+    {
+        MpaCmd.BufLen = sizeof(DRV_BBULAST_DISCHARGEPARA_S);
+    }
+    else
+    {
+        MpaCmd.BufLen = BBU_MAX_DISCHG_PARA_NUM * sizeof(OSP_U16);
+    }
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Para);
+
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuDischargeCount
+ *   : ѯBBUŵ(V2-BMCBBU2)
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Cnt       BBUŵ
+ *   : Cnt       BBUŵ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131116
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuDischargeCount(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Cnt)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Cnt))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 395, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Cnt);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BBU_USETIMES_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = BBU_DISCHARGE_COUNT;
+    MpaCmd.WtRd = MPA_READ;
+
+    /* BEGIN: Modified by shipin, 2014-8-13 15:40:12, ⵥ:DTS2014073100826 , ޸ԭ: ЧжЧʱֵ */
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Cnt);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return RetVal; 
+    }
+
+    if(MPA_DATA_IS_INVALID16(*Cnt))
+    {
+        RetVal = DRV_RETURN_NOT_READY;
+    }
+    /* END: Modified by shipin, 2014-8-13 15:40:12 */
+
+    return RetVal;    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuRemainingCapacity
+ *   : ѯBBUʣ(V2-BMCBBU2)
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Capacity  BBUʣ
+ *   : Capacity  BBUʣ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131116
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuRemainingCapacity(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Capacity)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Capacity))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 396, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Capacity);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BBU_ELEFT_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen =  sizeof(OSP_U8);
+    MpaCmd.SdrType = BBU_DUMP_ENERGY_PERCENTAGE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /* BEGIN: Modified by shipin, 2014-8-13 15:40:12, ⵥ:DTS2014073100826 , ޸ԭ: ЧжЧʱֵ */
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Capacity);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return RetVal; 
+    }
+
+    if(MPA_DATA_IS_INVALID8(*Capacity))
+    {
+        RetVal = DRV_RETURN_NOT_READY;
+    }
+    /* END: Modified by shipin, 2014-8-13 15:40:12 */
+
+    return RetVal;    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuRemainCapacityMah
+ *   : ѯBBUʣʱ(V2-BMCBBU2)
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Capacity  BBUBBUʣʱ
+ *   : Capacity  BBUBBUʣʱ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131220
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuRemainCapacityMah(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Capacity)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Capacity))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 397, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Capacity);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BBU_CAPACITY_MAH;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = BBU_DUMP_ENERGY_CAPACITY;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /* BEGIN: Modified by shipin, 2014-8-13 15:40:12, ⵥ:DTS2014073100826 , ޸ԭ: ЧжЧʱֵ */
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Capacity);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return RetVal; 
+    }
+
+    if(MPA_DATA_IS_INVALID16(*Capacity))
+    {
+        RetVal = DRV_RETURN_NOT_READY;
+    }
+    /* END: Modified by shipin, 2014-8-13 15:40:12 */
+
+    return RetVal;    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuChargeCurrent
+ *   : ѯBBU
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Current   BBU
+ *   : Current   BBU
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131116
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuChargeCurrent(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Current)
+
+{
+    OSP_U16 TmpCurrent = 0;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_MPA_ADDR_S * MpaAddr = NULL;
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Current))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 398, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Current);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    MpaCmd.Cmd = DRV_CMD_BBU_CHARGECURRENT_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = BBU_CHARGE_CURRENT;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&TmpCurrent);    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 399, "MPA IntF failed.");
+        return RetVal;
+    }
+
+    /* V2-BMC,BBUصĵΪ1mA, MPAתΪ0.1A*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_V1_END < MpaAddr->DevFrame))
+    {
+        TmpCurrent = TmpCurrent / MPA_PRECISION_100;
+    }
+
+    *Current = TmpCurrent;
+    return RetVal;    
+}
+ /******************************************************************************
+ *     : MPAIntf_GetBbuTemperature
+ *   : ȡbbu¶
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Temp      ¶ֵ
+ *   : Temp      ¶ֵ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131122
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuTemperature(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Temp)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Temp))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 400, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Temp);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BBU_TEMP_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = BBU_MAX_TEMP_NUM * sizeof(OSP_S8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;/**/
+    MpaCmd.WtRd = MPA_READ;
+
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Temp);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuOutPutVolt
+ *   : ȡbbuѹ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Volt      ѹֵ
+ *   : Volt      ѹֵ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131122
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuOutPutVolt(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_BBUBUCKVOL_S *Volt)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DRV_BBUBUCKVOL_S TmpVolt;
+    DAL_MPA_ADDR_S * MpaAddr = NULL;
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Volt))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 401, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Volt);
+        return DRV_RETURN_ERROR;
+    }
+
+    OSAL_MemSet_s(&TmpVolt, sizeof(DRV_BBUBUCKVOL_S), 0, sizeof(DRV_BBUBUCKVOL_S));
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    MpaCmd.Cmd = DRV_CMD_BBU_BUCKVOL_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_BBUBUCKVOL_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;/**/
+    MpaCmd.WtRd = MPA_READ;
+
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&TmpVolt);    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 402, "MPA IntF failed.");
+        return RetVal;
+    }
+
+    /* V2-BMC,BBUصĵѹΪ1mV, MPAתΪ0.1V*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_V1_END < MpaAddr->DevFrame))
+    {
+        /* BEGIN: Added by shipin, 2014-8-19 22:5:52, ⵥ:DTS2014073100826 , ޸ԭ: ЧжЧʱֵ*/
+        if(MPA_DATA_IS_INVALID16(TmpVolt.usBBUBuckVol))
+        {
+            RetVal = DRV_RETURN_NOT_READY;
+            return RetVal;
+        }
+        /* END: Added by shipin, 2014-8-19 22:5:52 */
+        
+        TmpVolt.usBBUBuckVol = TmpVolt.usBBUBuckVol / MPA_PRECISION_100;
+        TmpVolt.usBBUArvCurVol = TmpVolt.usBBUArvCurVol / MPA_PRECISION_100;
+        TmpVolt.usBBUExBusVol = TmpVolt.usBBUExBusVol / MPA_PRECISION_100;
+        TmpVolt.usBBUPkgVolVol = TmpVolt.usBBUPkgVolVol / MPA_PRECISION_100;
+    }
+    OSAL_MemCpy_s((OSP_U8 *)Volt, sizeof(DRV_BBUBUCKVOL_S), (OSP_U8 *)&TmpVolt, 
+        sizeof(DRV_BBUBUCKVOL_S));
+    return RetVal;    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuBuckVolt
+ *   : ѯbbu buckѹ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Volt      ѹֵ
+ *   : Volt      ѹֵ,λ0.01v
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014223
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuBuckVolt(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S16 *Volt)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DRV_BBUBUCKVOL_S TmpVolt;
+    
+    if ((NULL == EnclAddr) || (NULL == Volt))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 403, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Volt);
+        return DRV_RETURN_ERROR;
+    }
+
+    OSAL_MemSet_s((OSP_U8 *)&TmpVolt, sizeof(TmpVolt), 0, sizeof(TmpVolt));
+    RetVal = MPAIntf_GetBbuOutPutVolt(EnclAddr, DriverId, &TmpVolt);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 404, "MPA GetBbuBuckVolt failed! %d.", RetVal);
+        return RetVal;
+    }
+
+    *Volt = (OSP_S16)(TmpVolt.usBBUBuckVol * 10);
+    return RetVal;
+}
+
+/******************************************************************************
+*     : MPAIntf_GetBbuCellVolt
+*   : ѯbbu ذѹ
+*   : EnclAddr
+*              DriverId
+*              Volt
+*   ֵ  : OSP_S32
+*   ֵ  : 
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015414
+*           : h00289393
+*    ޸   : ɺ
+*
+******************************************************************************/
+ /* BEGIN by hulinhui 00289393, REASON: DTS2015040709129   */
+ /* ȡذѹظdmi */
+OSP_S32 MPAIntf_GetBbuCellVolt(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S16 *Volt)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U16 CellVol[LENGTH_08] = {0};
+    OSP_U16 CellVolA = 0;
+    OSP_U16 CellVolB = 0;
+    OSP_U8 DeviceId = 0;
+    /* BEGIN: Added by gouzhengxu 00289460, 2015/9/14  ⵥ:DTS2015082108074, ޸ԭ:MPAѯBBU/CBUѹӿ޸ģ²ѯCBUѹȷ */
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    /* END:   Added by gouzhengxu 00289460, 2015/9/14 ⵥ:DTS2015082108074 */
+     
+    if ((NULL == EnclAddr) || (NULL == Volt))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 403, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Volt);
+        return DRV_RETURN_ERROR;
+    }
+
+    RetVal = MPAIntf_GetBbuCellVoltage(EnclAddr, DriverId, CellVol);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 404, "MPA GetBbuCellVolt failed! %d.", RetVal);
+        return RetVal;
+    }
+
+    DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+
+    /* BEGIN: Added by gouzhengxu 00289460, 2015/9/14  ⵥ:DTS2015082108074, ޸ԭ:MPAѯBBU/CBUѹӿ޸ģ²ѯCBUѹȷ */
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    /* SESֵ֧̿BBU/CBUԤĵоѹΪ6SES/BMCֱѹ */
+    if (MpaAddr->DevFrame < DRV_FRAMEMODEL_12GSAS_EXP_END)
+    {
+        CellVolA = CellVol[BYTE_00] + CellVol[BYTE_01] + CellVol[BYTE_02] + CellVol[BYTE_03] + \
+                   CellVol[BYTE_04] + CellVol[BYTE_05];
+    }
+    else
+    {
+        CellVolA = CellVol[BYTE_00] + CellVol[BYTE_01] + CellVol[BYTE_02] + CellVol[BYTE_03];
+        CellVolB = CellVol[BYTE_04] + CellVol[BYTE_05] + CellVol[BYTE_06] + CellVol[BYTE_07];
+    }
+    /* END:   Added by gouzhengxu 00289460, 2015/9/14 ⵥ:DTS2015082108074 */
+
+    if (BYTE_00 == DeviceId)
+    {
+        *Volt = (OSP_S16)(CellVolA / MPA_PRECISION_10);
+    }
+    if (BYTE_01 == DeviceId)
+    {
+        *Volt = (OSP_S16)(CellVolB / MPA_PRECISION_10);
+    }
+     
+    return RetVal;
+}
+ /* END by hulinhui 00289393 */
+
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuFaultBit
+ *   : ȡbbu澯
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Status    64bit澯
+ *   : Status    64bit澯
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131122
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuFaultBit(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U64 *Status)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S * MpaAddr = NULL;
+    
+    if ((NULL == EnclAddr) || (NULL == Status))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 405, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
+        return DRV_RETURN_ERROR;
+    }
+
+    /*v132bit澯v2չΪ64bit*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    if (MpaAddr->DevFrame < DRV_FRAMEMODEL_V1_END)
+    {
+        MpaCmd.Cmd = DRV_CMD_BBU_TRBCAUSE_GET;
+        MpaCmd.BufLen = sizeof(OSP_U32);
+    }
+    else
+    {
+        MpaCmd.Cmd = DRV_CMD_BBU_TRBCAUSE_EXT_GET;
+        MpaCmd.BufLen = sizeof(OSP_U64);
+    }
+    
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;/**/
+    MpaCmd.WtRd = MPA_READ;
+
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status);    
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBbuFaultBit
+ *   : ģBBU 64ظ澯
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             FaultFlag    1: ģ/0: ģر
+ *             Status  64bit澯
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201427
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBbuFaultBit(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 FaultFlag, OSP_U64 Status)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 DataIn[9] = {0};
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 406, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 407, "MPA sets bbu faultbit, id(0x%llx), faultflag(%d), fault status(0x%llx).", DriverId, FaultFlag, Status);
+    MpaCmd.Cmd = DRV_CMD_BBU_TRBCAUSE_EXT_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8) + sizeof(OSP_U64);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    DataIn[0] = FaultFlag;
+    OSAL_MemCpy_s(&DataIn[1], sizeof(OSP_U64), (OSP_U8 *)&Status, sizeof(OSP_U64));
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&DataIn[0], (OSP_VOID *)NULL);    
+}
+ 
+ /******************************************************************************
+ *     : MPAIntf_GetBbuDisChargeCurrent
+ *   : ѯBBUŵ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Current   BBUŵ
+ *   : Current   BBUŵ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131116
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuDisChargeCurrent(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Current)
+{
+    OSP_U16 TmpCurrent = 0;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_MPA_ADDR_S * MpaAddr = NULL;
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Current))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 408, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Current);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    MpaCmd.Cmd = DRV_CMD_BBU_DISCHARGECURRENT_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = BBU_DISCHARGE_CURRENT;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)&TmpCurrent);    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 409, "MPA IntF failed.");
+        return RetVal;
+    }
+
+    /* V2-SES,V2-BMC,BBUصĵΪ1mA, MPAתΪ0.1A*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_V1_END < MpaAddr->DevFrame))
+    {
+        TmpCurrent = TmpCurrent / MPA_PRECISION_100;
+    }
+
+    *Current = TmpCurrent;
+    return RetVal;    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuChargeFlag
+ *   : ѯBBU־
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Flag   BBU־
+ *   : Flag   BBU־
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131116
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuChargeFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Flag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Flag))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 410, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Flag);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BBUCHARGFLAG_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = BBU_CHARGE_FULL_FLAG; 
+    MpaCmd.WtRd = MPA_READ;
+
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Flag);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuGpioInfo
+ *   : ѯBBU GPIOϢ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Info      BBU GPIOϢ
+ *             Length    BBU GPIOϢ
+ *   : Info      BBU GPIOϢ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131119
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuGpioInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Info, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 InfoBuffer[DRV_BBU_GPIO_NUM] = {0};/*ڻMPAѯ*/
+    OSP_U8 DataIn = 0;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Info) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 411, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Info, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BBU_GPIO_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_BBU_GPIO_NUM;
+    MpaCmd.SdrType = BBU_GPIO_INFO;
+    MpaCmd.WtRd = MPA_READ;
+    DataIn = (OSP_U8)DAL_FRU_SLOT_ID(DriverId);
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&DataIn, (OSP_VOID *)InfoBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 412, "MPA GetBbuGpioInfo return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Info, (OSP_U32)min(DRV_BBU_GPIO_NUM, (OSP_S32)Length), 
+        (OSP_U8 *)InfoBuffer, (OSP_U32)min(DRV_BBU_GPIO_NUM, (OSP_S32)Length));
+   
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBbuGpioInfo
+ *   : BBU GPIOϢ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             OkFlag     GPIO OKʶ
+ *             AlarmFlag  GPIO alarmʶ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131119
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBbuGpioInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 OkFlag, OSP_U8 AlarmFlag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 DataIn[2] = {0, 0};
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 413, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 414, "MPA sets bbu gpio info, id(0x%llx), value(%d), flag(%d).", DriverId, OkFlag, AlarmFlag);
+    MpaCmd.Cmd = DRV_CMD_BBU_GPIO;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OkFlag) + sizeof(AlarmFlag);
+    MpaCmd.SdrType = BBU_GPIO_INFO;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    DataIn[0] = OkFlag;
+    DataIn[1] = AlarmFlag;
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&DataIn[0], (OSP_VOID *)NULL);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBbuOnlineTest
+ *   : BBU߲
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             TestFlag  BBU߲Ա־
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131120
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBbuOnlineTest(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 TestFlag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 415, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 416, "MPA sets bbu online test, id(0x%llx), value(%d).", DriverId, TestFlag);
+    MpaCmd.Cmd = DRV_CMD_BBU_DISCHARGEEN_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = BBU_DISCHARGE_ENABLE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TestFlag, (OSP_VOID *)NULL);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBbuMixedPlugError
+ *   : BBU
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId   ID
+ *             State     BBU״̬0:noarmal , 1:abnormal
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131120
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBbuMixedPlugError(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 State)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 DataIn[3] = {0, 0, 0};
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 417, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 418, "MPA sets bbu mixed plug, id(0x%x), value(%d).", FruId, State);
+    MpaCmd.Cmd = DRV_CMD_FRU_STATE_SET;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DataIn);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+    
+    DataIn[0] = 0;/*FRU״̬ӿڣһ0ʾBBU*/
+    DataIn[1] = (OSP_U8)(MpaCmd.FruId & 0xFF);/*FRU״̬ӿڣڶ0ʾڼBBU 0ʾBBU0, 1ʾBBU1*/
+    DataIn[2] = State;/*FRU״̬ӿڣʾBBU״̬*/    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetFruValid
+ *   : fruǷ֧
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId     ID
+ *             Flag      Ƿ֧֣0Ϊ֧֣1Ϊ֧
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014122
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetFruValid(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U32 Flag)
+{
+    OSP_U32 FruType = 0;
+
+    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
+    
+    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_BBU))
+    {
+        return MPAIntf_SetBbuMixedPlugError(EnclAddr, FruId, (OSP_U8)Flag);
+    }
+    else
+    {
+        return RETURN_INVALID;
+    }
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuCommunicationFault
+ *   : ѯBBUͨŹ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Flag      BBUͨŹϱʶ
+ *   : Flag      BBUͨŹϱʶ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131120
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuCommunicationFault(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Flag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Flag))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 420, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Flag);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BBU_COMFAULT_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Flag);    
+    
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuVendor
+ *   : ѯBBUϢ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Vendor      BBUϢ
+ *   : Vendor      BBUϢ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013124
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuVendor(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_BBUVENDOR_INFO_S *Vendor)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Vendor))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 421, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Vendor);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BBU_PROINFO_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_BBUVENDOR_INFO_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Vendor);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuModel
+ *   : ȡBBUƷͺ(V2-BMCBBU2)
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Name      BBUƷ
+ *             Length    Ƴ
+ *   : Name      BBUƷ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131218
+ *           : zhanwenbin 90003961
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuModel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Model, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 TmpModel[DMI_NAME_LEN] = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Model) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 422, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Model, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BBU_MODEL;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    OSAL_MemSet_s((OSP_U8 *)TmpModel, sizeof(TmpModel), 0, sizeof(TmpModel));
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TmpModel);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 423, "MPA GetBbuModel Return %d.", RetVal);
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/   
+    OSAL_MemCpy_s((OSP_U8 *)Model, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)TmpModel, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length)); 
+    
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuManuDate
+ *   : ѯBBUʱ(V2-BMCBBU2)
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ     
+ *             Date      BBUʱ
+ *             Length    ʱ䳤
+ *   : Date      BBUʱ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131218
+ *           : zhanwenbin 90003961
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuManuDate(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Date, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 TmpDate[DMI_NAME_LEN] = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Date) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 424, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Date, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BBU_MANU_DATE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = PRODUCE_INFO_MANUFACTURE_DATE;
+    MpaCmd.WtRd = MPA_READ;
+
+    OSAL_MemSet_s((OSP_U8 *)TmpDate, sizeof(TmpDate), 0, sizeof(TmpDate));
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TmpDate);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 425, "MPA GetBbuManuDate Return %d.", RetVal);
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/   
+    DRV_MPA_TRACE(DRV_LOG_DBG, 426, "MPA GetBbuManuDate 0x%x,0x%x,0x%x,0x%x.", TmpDate[0],TmpDate[1],TmpDate[2],TmpDate[3]);
+
+    /*bbuϢЧʱbmc255*100+255=25755(0x649B),mpaҪתΪȫF*/
+    if ((0x9B == (OSP_U8)TmpDate[0]) && (0x64 == (OSP_U8)TmpDate[1]))
+    {
+        DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 427, 1, 20 * HZ, "MPA gets bbu manufacture date(0x%x, 0x%x, 0x%x, 0x%x).", TmpDate[0],TmpDate[1],TmpDate[2],TmpDate[3]);
+        OSAL_MemSet_s((OSP_U8 *)Date, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), INVALID_VALUE8, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+        return RetVal;
+    }
+    
+    OSAL_MemCpy_s((OSP_U8 *)Date, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)TmpDate, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length)); 
+    
+    return RetVal;
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuVendorName
+ *   : ѯBBU(V2-BMCBBU2)
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ  
+ *             Name      BBU
+ *             Length    Ƴ
+ *   : Name      BBU
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131218
+ *           : zhanwenbin 90003961
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuVendorName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 TmpVendor[DMI_NAME_LEN] = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Name) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 428, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Name, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BBU_VENDOR;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    /* BEGIN: Modified by jiangfanlu 00101148, 2014/7/10  ⵥ:DTS2014071000424, ޸ԭ:mpaҪȡmpaĳȡ */
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    /* END:   Modified by jiangfanlu 00101148, 2014/7/10 ⵥ:DTS2014071000424 */
+    MpaCmd.SdrType = PRODUCE_INFO_VENDOR;
+    MpaCmd.WtRd = MPA_READ;
+
+    OSAL_MemSet_s((OSP_U8 *)TmpVendor, sizeof(TmpVendor), 0, sizeof(TmpVendor));
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TmpVendor);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 429, "MPA GetBbuVendorName Return %d.", RetVal);
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/   
+    OSAL_MemCpy_s((OSP_U8 *)Name, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)TmpVendor, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length)); 
+    
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuCellVoltage
+ *   : ѯBBUоѹ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Voltage   BBUоѹ
+ *   : Voltage   BBUоѹ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013124
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuCellVoltage(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Voltage)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    
+    if ((NULL == EnclAddr) || (NULL == Voltage))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 430, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Voltage);
+        return RetVal;
+    }
+    
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    MpaCmd.Cmd = DRV_CMD_BBU_CHIPVOL_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    if (MpaAddr->DevFrame < DRV_FRAMEMODEL_12GSAS_EXP_END)
+    {
+        MpaCmd.BufLen = sizeof(DRV_BBUCOREVOL_S);
+    }
+    else
+    {
+        MpaCmd.BufLen = BBU_MAX_CELL_VOLT_NUM * sizeof(OSP_U16);
+    }
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Voltage);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBbuPreLife
+ *   : bbuԤ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             PreAlarmTime  Ԥʱ䣬λΪ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : V1֧
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131220
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBbuPreLife(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 PreAlarmTime)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 431, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_BBU_PRE_LIFE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = BBU_LIFE_PRE_ALARM_TIME;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&PreAlarmTime, (OSP_VOID *)NULL);
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuPreLife
+ *   : ѯbbuԤ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             PreAlarmTime  Ԥʱ䣬λΪ
+ *   : PreAlarmTime  Ԥʱ䣬λΪ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131220
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuPreLife(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *PreAlarmTime)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == PreAlarmTime))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 432, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PreAlarmTime);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BBU_PRE_LIFE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = BBU_LIFE_PRE_ALARM_TIME;
+    MpaCmd.WtRd = MPA_READ;
+
+    /* BEGIN: Modified by shipin, 2014-8-13 15:39:35, ⵥ:DTS2014073100826 , ޸ԭ: ЧжЧʱֵ*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)PreAlarmTime);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return RetVal; 
+    }
+
+    if(MPA_DATA_IS_INVALID16(*PreAlarmTime))
+    {
+        RetVal = DRV_RETURN_NOT_READY;
+    }
+    /* END: Modified by shipin, 2014-8-13 15:39:35 */
+
+    return RetVal;
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBbuLife
+ *   : bbu
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             PreAlarmTime ʱ䣬λΪ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : V1֧
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131220
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBbuLife(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 AlarmTime)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 433, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_BBU_LIFE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = BBU_LIFE_ALARM_TIME;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&AlarmTime, (OSP_VOID *)NULL);
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuLife
+ *   : ѯbbu
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             PreAlarmTime  Ԥʱ䣬λΪ
+ *   : PreAlarmTime  Ԥʱ䣬λΪ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131220
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuLife(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *AlarmTime)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == AlarmTime))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 434, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, AlarmTime);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BBU_LIFE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = BBU_LIFE_ALARM_TIME;
+    MpaCmd.WtRd = MPA_READ;
+
+    /* BEGIN: Modified by shipin, 2014-8-13 15:40:12, ⵥ:DTS2014073100826 , ޸ԭ: ЧжЧʱֵ */
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)AlarmTime);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        return RetVal; 
+    }
+
+    if(MPA_DATA_IS_INVALID16(*AlarmTime))
+    {
+        RetVal = DRV_RETURN_NOT_READY;
+    }
+    /* END: Modified by shipin, 2014-8-13 15:40:12 */
+
+    return RetVal;
+    
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetCbuESR
+ *   : ѯcbu ESR
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             ESR       ESRֵλŷ
+ *   : ESR       ESRֵλŷ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014829
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetCbuESR(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *ESR)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == ESR))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, ESR);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_CBU_ESR;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = INVALID_VALUE8;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)ESR);
+}
+
+/* BEGIN: Added by gouzhengxu 00289460, 2015/9/22  ⵥ:NA, ޸ԭ:CBU̬ѹ */
+/******************************************************************************
+*     : MPAIntf_SetCbuVolt
+*   : CBUѹ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             OpCode      ѹڲ
+*                           0 Invalid
+*                           1 CBUһѹ(С)
+*                           2 CBUڶѹ
+*                           3 CBUѹ
+*                           4 CBUĵѹ
+*   : NA
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015922
+*           : gouzhengxu 00289460
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetCbuVolt(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 OpCode)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_CBU_VOLT;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&OpCode, (OSP_VOID *)NULL);
+
+}
+
+/******************************************************************************
+*     : MPAIntf_GetAdjustVoltFlag
+*   : ѯǷֶ֧̬ѹ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             *Flag       Ƿֶ֧̬ѹ־
+*   : *Flag       Ƿֶ֧̬ѹ־
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015922
+*           : gouzhengxu 00289460
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetAdjustVoltFlag(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U16* Flag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Flag))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Flag);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_ADJUST_VOLT_FLAG;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = INVALID_VALUE8;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)Flag);
+}
+/* END:   Added by gouzhengxu 00289460, 2015/9/22 ⵥ:NA */
+
+/* BEGIN: Added by gouzhengxu 00289460, 2015/12/31  ⵥ:NA, ޸ԭ:ģBBU/CBUϽӿ */
+/******************************************************************************
+*     : MPAIntf_SimulateBbuAlarm
+*   : ģBBU/CBUϽӿ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             AlarmType  ģָ澯
+*             OpCode     ģ澯/ģ
+*   : NA
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 201614
+*           : gouzhengxu 00289460
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SimulateBbuAlarm(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 AlarmType, OSP_U8 OpCode)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U8 DataIn[2] = {0, 0};
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SIMULATE_BBU_ALARM;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(AlarmType) + sizeof(OpCode);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    DataIn[0] = AlarmType;
+    DataIn[1] = OpCode;
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&DataIn[0], (OSP_VOID *)NULL); 
+
+}
+/* END:   Added by gouzhengxu 00289460, 2015/12/31 ⵥ:NA */
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuPreLifeAlarm
+ *   : ѯbbuԤڸ澯״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Alarm  Ԥڸ澯
+ *   : Alarm  Ԥڸ澯
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131220
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuPreLifeAlarm(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Alarm)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Alarm))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 435, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Alarm);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BBU_PRE_LIFE_ALARM;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = BBU_LIFE_PRE_ALARM_STATUS;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)Alarm);
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuLifeAlarm
+ *   : ѯbbuڸ澯
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Alarm  ڸ澯
+ *   : Alarm  ڸ澯
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014313
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuLifeAlarm(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Alarm)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Alarm))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 436, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Alarm);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BBU_LIFE_ALARM;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = BBU_LIFE_ALARM_STATUS;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)Alarm);
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuCapacityPreAlarm
+ *   : ѯBBUԤ澯
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             CapacityPreAlarm    BBUԤ澯
+ *   : CapacityPreAlarm    BBUԤ澯
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131220
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuCapacityPreAlarm(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *CapacityPreAlarm)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == CapacityPreAlarm))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 437, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, CapacityPreAlarm);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BBU_CAPACITY_PRE_ALARM;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = BBU_CAPACITY_PRE_ALARM_LIMIT;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)CapacityPreAlarm);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBbuCapacityPreAlarm
+ *   : BBUԤ澯
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             CapacityPreAlarm    BBUԤ澯
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131220
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBbuCapacityPreAlarm(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 CapacityPreAlarm)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 438, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 439, "MPA sets bbu capacity prealarm, id(0x%llx), value(%d).", DriverId, CapacityPreAlarm);
+    MpaCmd.Cmd = DRV_CMD_SET_BBU_CAPACITY_PRE_ALARM;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = BBU_CAPACITY_PRE_ALARM_LIMIT;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&CapacityPreAlarm, (OSP_VOID *)NULL);    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBbuCapacityAlarm
+ *   : ѯBBU澯
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             CapacityAlarm  BBU澯
+ *   : CapacityAlarm  BBU澯
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131220
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuCapacityAlarm(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *CapacityAlarm)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == CapacityAlarm))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 440, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, CapacityAlarm);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BBU_CAPACITY_ALARM;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = BBU_CAPACITY_ALARM_LIMIT;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)CapacityAlarm);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBbuCapacityAlarm
+ *   : BBU澯
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             CapacityAlarm  BBU澯
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131220
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBbuCapacityAlarm(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 CapacityAlarm)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 441, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 442, "MPA sets bbu capacity alarm, id(0x%llx), value(%d).", DriverId, CapacityAlarm);
+    MpaCmd.Cmd = DRV_CMD_SET_BBU_CAPACITY_ALARM;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = BBU_CAPACITY_ALARM_LIMIT;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&CapacityAlarm, (OSP_VOID *)NULL);    
+}
+
+/******************************************************************************
+*     : MPAIntf_ClearTdmErrCode
+*   : tdm 
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             ClearFlag  
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2014913
+*           : chenkeren 00221000
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_ClearTdmErrCode(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 ClearFlag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "%s, Point NULL %p", __FUNCTION__, EnclAddr);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_CLEAR_TDM_ERRCODE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPE_TDM_ERRCODE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&ClearFlag, (OSP_VOID *)NULL);
+} 
+
+/******************************************************************************
+*     : MPAIntf_GetTdmErrCode
+*   : ѯtdm 
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             TdmErrCode  tdm 
+*   : TdmErrCode  tdm 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2014913
+*           : chenkeren 00221000
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetTdmErrCode(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *TdmErrCode)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == TdmErrCode))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "%s, Point NULL %p, %p", __FUNCTION__, EnclAddr, TdmErrCode);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_TDM_ERRCODE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = SDRTYPE_TDM_ERRCODE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)TdmErrCode);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetMgmtCpuLog
+ *   : ѯоƬ־
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Log       ־Ϣ
+ *             Length    ־Ϣ
+ *   : Log       ־Ϣ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131115
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetMgmtCpuLog(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Log, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    static OSP_U8 LogCnt = 0;
+    
+    if ((NULL == EnclAddr) || (NULL == Log) || (Length > MPA_LOG_LENGTH))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 443, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Log, Length);
+        return RetVal;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+
+    MpaCmd.Cmd = DRV_CMD_LOG_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_UPGRADE_LEN;                     /* DTS2014012407685 */
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*2014-10-25 c00221000 for DTS2014102008537 begin: ŻV2-BMCѼ־*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        //DMIĿư塢涼,˴ָȡFRUIDǿư
+        if (DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0) != MpaCmd.FruId)
+        {
+            return DRV_RETURN_OK;
+        }
+        
+        LogCnt++;
+        
+        /*lint -e774*/
+        if (0 == (LogCnt % 2))  //3 ÿζѼ־
+        {
+            return DRV_RETURN_OK;
+        }
+        /*lint +e774*/
+
+    }
+    /*2014-10-25 c00221000 for DTS2014102008537 end*/
+
+/*2014-1-27 c00221000 for DTS2014012407685 begin: ѯ־ȵbuffer
+    ֱϲbufferMPAõ*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Log);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 446, "MPA Getlog return error.");
+        return RetVal;
+    }
+/*2014-1-27 c00221000 for DTS2014012407685 end*/
+
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetCustomRules
+ *   : òƷ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId  ID ͡FRUIDDEVICE IDϢ   
+ *             Rule      Ʒ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014228
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetCustomRules(OSP_VOID *EnclAddr, OSP_U64 DriverId, CUSTOM_RULE_S *Rule)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Rule))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 447, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Rule);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame)
+    {
+        return RETURN_INVALID;
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_CUSTOM_RULE_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(CUSTOM_RULE_S);
+    MpaCmd.SdrType = SDRTYPE_LED_RULE;
+    MpaCmd.WtRd = MPA_WRITE;
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        MpaCmd.BufLen = sizeof(Rule->UcFrameNumHexCode);
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&(Rule->UcFrameNumHexCode), (OSP_VOID *)NULL); 
+    }
+    else
+    {
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Rule, (OSP_VOID *)NULL);  
+    }
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetCustomRules
+ *   : ѯƷƻ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId  ID ͡FRUIDDEVICE IDϢ   
+ *             Rule      Ʒ
+ *   : Rule      Ʒ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014424
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetCustomRules(OSP_VOID *EnclAddr, OSP_U64 DriverId, CUSTOM_RULE_S *Rule)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == Rule))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 449, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Rule);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    if (DRV_FRAMEMODEL_CTRL_BMC == MpaAddr->DevFrame)
+    {
+        return RETURN_INVALID;
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_CUSTOM_RULE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(CUSTOM_RULE_S);
+    MpaCmd.SdrType = SDRTYPE_LED_RULE;
+    MpaCmd.WtRd = MPA_READ;
+
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+    && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Rule); 
+    }
+    else
+    {
+        return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Rule, (OSP_VOID *)Rule);  
+    }
+}
+
+/******************************************************************************
+*     : MPAIntf_SetCpldBit
+*   : ߼Ĵֵ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId  ID ͡FRUIDDEVICE IDϢ
+*             RegAddr   ߼Ĵַ
+*             RegBit    ߼Ĵbitλ
+*             BitValue  ø߼Ĵֵ
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 20170406
+*           : chenlifu 00378798
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetCpldBit(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32  RegAddr, OSP_U32 RegBit, OSP_U32 BitValue)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 DataIn[12] = {0};
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 345, "MPA finds the pointer is null 0x%p.", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+    MpaCmd.Cmd = DRV_CMD_CPLD_BIT_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U32) + sizeof(OSP_U32) + sizeof(OSP_U32);
+    MpaCmd.SdrType = SDRTYPT_RW_CPLD_BIT;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    DataIn[0] = (OSP_U8)(RegAddr & 0xFF); 
+    DataIn[1] = (OSP_U8)((RegAddr >> MPA_OFFSET_BIT8) & 0xFF); 
+    DataIn[4] = (OSP_U8)(RegBit & 0xFF); 
+    DataIn[8] = (OSP_U8)(BitValue & 0xFF); 
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
+}
+ 
+/******************************************************************************
+*     : MPAIntf_GetCpldBit
+*   : ȡ߼Ĵֵ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId  ID ͡FRUIDDEVICE IDϢ
+*             RegAddr   ߼Ĵַ
+*             RegBit    ߼Ĵbitλ
+*             BitValue   ѯֵ
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 20170406
+*           : chenlifu 00378798
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetCpldBit(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32  RegAddr, OSP_U32 RegBit, OSP_U8 *BitValue)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 DataIn[9] = {0};
+
+    if ((NULL == EnclAddr) || (NULL == BitValue))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, BitValue);
+        return DRV_RETURN_ERROR;
+    }
+    MpaCmd.Cmd = DRV_CMD_CPLD_BIT_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPT_RW_CPLD_BIT;
+    MpaCmd.WtRd = MPA_READ;
+    /*BMCĲѯҪȴ볤,BMCȷϳ8,˴ħ*/
+    DataIn[0] = 8;
+    DataIn[1] = (OSP_U8)(RegAddr & 0xFF); 
+    DataIn[2] = (OSP_U8)((RegAddr >> MPA_OFFSET_BIT8) & 0xFF); 
+    DataIn[5] = (OSP_U8)(RegBit & 0xFF); 
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)BitValue);   
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetMgmtCpuEepromLog
+ *   : ѯоƬEEPROM־
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Log       EEPROM־Ϣ
+ *             Length    EEPROM־Ϣ
+ *   : Log       EEPROM־Ϣ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131115
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetMgmtCpuEepromLog(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Log, OSP_U32 Length)
+{
+
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 *LogBuffer = NULL;/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Log) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 451, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Log, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_EEPROM_LOG_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_SES_LOG_LENGTH;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    LogBuffer = (OSP_S8 *)MPA_Malloc(DRV_SES_LOG_LENGTH);
+    if(NULL == LogBuffer)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 452, "MPA malloc memory failed.");
+        return RetVal;
+    }
+    OSAL_MemSet_s(LogBuffer, DRV_SES_LOG_LENGTH, 0, DRV_SES_LOG_LENGTH);
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)LogBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 453, "MPA GeEepromlog return error.");
+        MPA_Free(LogBuffer);
+        LogBuffer = NULL;
+        return RetVal;
+    }
+    
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Log, (OSP_U32)min(DRV_SES_LOG_LENGTH, (OSP_S32)Length), 
+        (OSP_U8 *)LogBuffer, (OSP_U32)min(DRV_SES_LOG_LENGTH, (OSP_S32)Length));
+    
+    MPA_Free(LogBuffer);
+    LogBuffer = NULL;
+    return RetVal;
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBoardWdtSignal
+ *   : ιź
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             WdtSignal  ιź
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131211
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBoardWdtSignal(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 WdtSignal)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 454, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return RetVal;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 455, "MPA sets board wdtsignal, id(0x%llx), wdtsignal(%d).", DriverId, WdtSignal);
+    
+    MpaCmd.Cmd = DRV_CMD_WATCHDOG_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&WdtSignal, (OSP_VOID *)NULL);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetShakeSensorRecord
+ *   : ѯ񶯴¼
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Record    񶯴¼
+ *   : Record    񶯴¼
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131115
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetShakeSensorRecord(OSP_VOID *EnclAddr, OSP_U64 DriverId, DrvShakeRecord_S *Record)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Record))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 456, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Record);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SHAKEINFO_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DrvShakeRecord_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Record);    
+    
+}
+
+/******************************************************************************
+*     : MPAIntf_GetShakeSensorInfo
+*   : ѯ񶯴Ϣ(X,Y,Z)
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             Info    񶯴Ϣ(X,Y,Z)
+*   : Info    񶯴Ϣ(X,Y,Z)
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 20130413
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetShakeSensorInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_SES_MOTION_SENSOR_INFO_S *Info)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Info))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 457, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Info);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SENSOR_INFO_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_SES_MOTION_SENSOR_INFO_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Info);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetSmmMasterSlave
+ *   : ù״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Flag    ״̬
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131125
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetSmmMasterSlave(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Flag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 458, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SMM_STATUS_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Flag, (OSP_VOID *)NULL);
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetIntfCardPowerStatus
+ *   : ѯӿڿԴ״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Status    ӿڿԴ״̬
+ *   : Status    ӿڿԴ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131125
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetIntfCardPowerStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Status)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Status))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 459, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_INTFCARD_POWER_STATUS_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status);
+    
+}           
+
+ /******************************************************************************
+ *     : MPAIntf_GetIntfCardPowerGoodStatus
+ *   : ѯӿڿԴ״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId      FRUID  
+ *             Info    ӿڿԴ״̬
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014513
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetIntfCardPowerGoodStatus(OSP_VOID *EnclAddr, OSP_U32 FruId, FRU_DFD_INFO_S *Info)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U8 Status = 0;
+    OSP_U64 DriverId = 0;
+    OSP_U32 FruType = 0;
+    
+    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
+    DriverId = (OSP_U64)FruId << SHIFT_08;
+
+    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_IOCARD)
+        || (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_SHARE_IOCARD)))
+    {
+        RetVal = MPAIntf_GetIntfCardPowerStatus(EnclAddr, DriverId, &Status);
+        if (DRV_RETURN_OK != RetVal)
+        {
+            return RetVal;
+        }
+
+        Info->PowerGood = (OSP_U32)Status;
+        return RetVal;
+    }
+    else
+    {
+        return RETURN_INVALID;
+    }
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetIoCardPowerConsume
+ *   : ѯ ӿڿĹ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             PowerConsume  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014623
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetIoCardPowerConsume(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *PowerConsume)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == PowerConsume))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 460, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PowerConsume);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_IOCARD_POWER_CONSUME_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = SDRTYPE_CARD_POWER_CONSUME;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PowerConsume);
+    
+}           
+
+ /******************************************************************************
+ *     : MPAIntf_SetIoCardSfpSleepStatus
+ *   : ýӿڿsleepź
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Status    ״̬
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014623
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetIoCardSfpSleepStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 Status)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 461, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+    
+    DRV_MPA_TRACE(DRV_LOG_INFO, 462, "MPA sets iocard sfp sleep status, id(0x%llx), value(%d).", DriverId, Status);
+
+    MpaCmd.Cmd = DRV_CMD_IOCARD_SFP_SLEEP_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);    
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPE_CARD_SET_SFP_SLEEEP_STATE;
+    MpaCmd.WtRd = MPA_WRITE;
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Status, (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetIoCardSfpSleepStatus
+ *   : ѯӿڿsleepź
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Status    ״̬
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201471
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetIoCardSfpSleepStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_LIGHT_STATE_E *Status)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 TmpStatus = 0;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Status))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 463, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_IOCARD_SFP_SLEEP_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);    
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPE_CARD_GET_SFP_SLEEEP_STATE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd,  (OSP_VOID *)NULL, (OSP_VOID *)&TmpStatus);    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 464, "MPA GetIoCardSfpSleepStatus err 0x%x.", RetVal);
+        return RetVal;
+    }
+
+    *Status = (DMI_LIGHT_STATE_E)TmpStatus;
+    return DRV_RETURN_OK;
+}
+
+/******************************************************************************
+*     : MPAIntf_SetIoCardImgCs
+*   : ýӿڿƬѡź
+*   : EnclAddr ϲ·ĵַϢmcutype,scsiַframetype  
+*             DriverId ID ͡FRUIDDEVICE IDϢ   
+*             FwId      
+*   : 
+*   ֵ  : DRV_RETURN_OK - ɹ;ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 201485
+*           : jiangfanlu 00101148
+*    ޸   : ɺ AR-0000787332
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetIoCardImgCs(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 FwId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_IOCARD_IMG_CS_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);    
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = SDRTYPE_IOCARD_CS;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&FwId, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+*     : MPAIntf_GetIoCardImgCs
+*   : ȡӿڿfpga Ƭѡź
+*   : EnclAddr ϲ·ĵַϢmcutype,scsiַframetype  
+*             DriverId ID ͡FRUIDDEVICE IDϢ   
+*             FwId           
+*   : FwId      
+*   ֵ  : DRV_RETURN_OK - ɹ;ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 201485
+*           : jiangfanlu 00101148
+*    ޸   : ɺ AR-0000787332
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetIoCardImgCs(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *FwId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == FwId))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, FwId);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_IOCARD_IMG_CS_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);    
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = SDRTYPE_IOCARD_CS;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd,  (OSP_VOID *)NULL, (OSP_VOID *)FwId);    
+
+}
+ 
+ /******************************************************************************
+ *     : MPAIntf_GetBmcEccInfo
+ *   : ѯ1710ECCϢ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             EccInfo   ECCϢ
+ *             Length    
+ *   : EccInfo   ECCϢ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131125
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBmcEccInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *EccInfo, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 Buffer[MPA_BMC_1710_ECC_LENGTH] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == EccInfo) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 465, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, EccInfo, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_ECC_INFO_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_BMC_1710_ECC_LENGTH;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Buffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 466, "MPA GetBmcEccInfo return error.");
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)EccInfo, (OSP_U32)(OSP_U32)min(MPA_BMC_1710_ECC_LENGTH, (OSP_S32)Length), 
+        (OSP_U8 *)Buffer, (OSP_U32)(OSP_U32)min(MPA_BMC_1710_ECC_LENGTH, (OSP_S32)Length));
+   
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetSwitchChipSpeed
+ *   : ȡоƬ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Speed      
+ *   : Speed      
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131123
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetSwitchChipSpeed(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_PORT_SPEED_E *Speed)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Speed))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 467, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Speed);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SWITCH_SPEED_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_PORT_SPEED_E);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;/**/
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Speed);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetSwitchChipLostData
+ *   : ȡоƬ
+ *   : EnclAddr  
+ *             DriverId  
+ *             Speed     
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131123
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetSwitchChipLostData(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Data))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 468, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Data);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SWITCH_LOST_DATA_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_PORT_SPEED_E);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;/**/
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Data);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetMceInfo
+ *   : ѯmceϢ
+ *   : EnclAddr  
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             EccInfo   MCEϢ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014422
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetMceInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *MceInfo)
+{
+#define MCE_INFO_LENGTH_V2  (500)   /* 2CPU,20Bank, 1Bank 25Byte*/
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == MceInfo))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 469, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, MceInfo);
+        return RetVal;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    MpaCmd.Cmd = DRV_CMD_MCE_INFO_GET_V2BMC;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MCE_INFO_LENGTH_V2;
+    MpaCmd.SdrType = SDRTYPE_MCE_INFO;
+    MpaCmd.WtRd = MPA_READ;
+
+    /* V2-BMC*/
+    if ((DRV_FRAMEMODEL_1710BMC_END > MpaAddr->DevFrame)
+        && (DRV_FRAMEMODEL_12GSAS_EXP_END < MpaAddr->DevFrame))
+    {
+        /* ȡMCE*/
+        RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)MceInfo);
+        if (DRV_RETURN_OK != RetVal)
+        {
+            DRV_MPA_TRACE(DRV_LOG_DBG, 470, "MPA GetBmcMceInfo return error.");
+            return RetVal;
+        }
+    }
+
+    return DRV_RETURN_OK;
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetDimmMceInfo
+ *   : ȡڴMCEϢ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ      
+ *             EccInfo   DAL_MCA_INFO_Sṹ巵MCEϢ
+ *   : EccInfo   DAL_MCA_INFO_Sṹ巵MCEϢ
+ *   ֵ  : OSP_S32
+ * ˵  : ǰMPAֻBMCѯMCEϢ
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131128
+ *           : zhanwenbin 90003961
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetDimmMceInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, DAL_MCA_INFO_S* EccInfo)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 *MceInfo = NULL;/*ڻMPAѯ*/
+    OSP_U8 MceValidFlag = 0;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == EccInfo))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 471, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, EccInfo);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_MCE_INFO_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_V1R1MCE_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*ȡMCEϢ*/
+    MPA_GetV1R1MceData(&MceInfo);
+
+    /*ݶȡMCEϢӦڴǷMCE*/
+    RetVal = MPA_CheckDimmMceValid((OSP_U8)MpaCmd.DeviceId, (OSP_VOID *)MceInfo, &MceValidFlag);
+
+    if(DRV_RETURN_ERROR == RetVal)
+    {
+        EccInfo->McAVaildFlag = 0;
+        EccInfo->MCACount = 0;
+        return DRV_RETURN_OK;
+    }
+    
+    if(MCE_INFO_VALID == MceValidFlag)
+    {
+        EccInfo->McAVaildFlag = 1;
+        EccInfo->MCACount = 1;
+    }
+    else
+    {
+        EccInfo->McAVaildFlag = 0;
+        EccInfo->MCACount = 0;
+    }
+
+    return DRV_RETURN_OK;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetCpldRegister
+ *   : ѯcpldĴ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ      
+ *             CpldValue  cpldĴֵ
+ *             Length     
+ *   : CpldValue  cpldĴֵ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013124
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetCpldRegister(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *CpldValue, OSP_U32 Length)
+{
+#define MPA_CPLD_REG_LEN 0x200
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 *TempBuffer = NULL;      /*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == CpldValue) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 472, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, CpldValue, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_FPGA_CPLD_READ;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_CPLD_REG_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /* 2014-08-19  c00221000 for DTS2014070814034 begin: mpaʱڴ棬ʱȡСֵ*/
+    TempBuffer = (OSP_U8 *)MPA_Malloc(MPA_CPLD_REG_LEN);
+    if (NULL == TempBuffer)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 473, "MPA malloc memory failed.");
+        return RetVal;
+    }
+    OSAL_MemSet_s(TempBuffer, MPA_CPLD_REG_LEN, 0, MPA_CPLD_REG_LEN);
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 474, "in %s, MPA_Intf return error.", __FUNCTION__);
+        MPA_Free(TempBuffer);
+        TempBuffer = NULL;
+        return RetVal;
+    }
+
+    /*·ĳʵʳȵСֵ*/
+    OSAL_MemCpy_s((OSP_U8 *)CpldValue, (OSP_U32)min(MPA_CPLD_REG_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)TempBuffer, (OSP_U32)min(MPA_CPLD_REG_LEN, (OSP_S32)Length));
+    
+    MPA_Free(TempBuffer);
+    TempBuffer = NULL;    
+    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
+
+    return RetVal;
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_SetUsbHubReset
+ *   : λusb hub
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ      
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013127
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetUsbHubReset(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 475, "MPA finds the pointer is null.");
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 476, "MPA sets usbhub reset, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_USBHUB_RESET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetUsbHubChannel
+ *   : лusb hub
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ      
+ *             Channel   USBͨ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013127
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetUsbHubChannel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Channel)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 477, "MPA finds the pointer is null.");
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 478, "MPA sets usbhub channel, id(0x%llx), value(%d), devframe(0x%x).", DriverId, Channel, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+    MpaCmd.Cmd = DRV_CMD_USBSWTICH_CHOOSE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Channel, (OSP_VOID *)NULL);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetUsbHubChannel
+ *   :  ѯUSBͨ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ      
+ *             Channel   USBͨ0:ưAͨ 1:ưBͨ
+ *   : Channel   USBͨ0:ưAͨ 1:ưBͨ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201418
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetUsbHubChannel(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Channel)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Channel))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 479, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Channel);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_USB_SWTICH;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Channel);    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetSpiTestResult
+ *   : ѯSPIԽ
+ *   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             *Result    SPIԽ, 0:PASS; 1:FAIL
+ *   : *Result    SPIԽ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013127
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetSpiTestResult(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Result)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Result))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 480, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Result);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_SPI_TEST_RESULT;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Result);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetQsfpInfo
+ *   : ѯģϢ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Info      ģϢ
+ *             Length    Ϣ
+ *   : Info      ģϢ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131211
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetQsfpInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_CHAR *Info, OSP_U16 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*תΪԭdev sub id*/
+    OSP_U8 DataIn = 0;
+    OSP_U8 CardSlot = INVALID_VALUE8;
+    OSP_U8 Channel = INVALID_VALUE8;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_CHAR *QsfpInfo = NULL;
+    
+    if ((NULL == EnclAddr) || (NULL == Info) || (DRV_QSFP_INFO_LEN != Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 481, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Info, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    /*bmcضһֽڴ*/
+    QsfpInfo = (OSP_CHAR *)MPA_Malloc(DRV_QSFP_INFO_LEN + 1);
+    if (NULL == QsfpInfo)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 482, "MPA malloc memory failed.");
+        return DRV_RETURN_ERROR;
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_QSFP_INFO_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_QSFP_INFO_LEN + 1;
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_QSFP;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*ǰdevתsub id4λΪλ4λΪͨ*/
+    CardSlot = (OSP_U8)DAL_FRU_ID_TO_SLOT(MpaCmd.FruId);
+    Channel = MpaCmd.DeviceId + 1;
+    DataIn = (OSP_U8)(CardSlot << 4) | Channel; 
+    
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&DataIn, (OSP_VOID *)QsfpInfo);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 483, "MPA GetQsfpInfo Fail 0x%x.", RetVal);
+        MPA_Free(QsfpInfo);
+        QsfpInfo = NULL;
+        return RetVal;
+    }
+
+    /*Ϊ0ģϢѯɹ640ֽϢ*/
+    if (0 == QsfpInfo[0])
+    {
+        OSAL_MemCpy_s((OSP_U8 *)Info, DRV_QSFP_INFO_LEN, (OSP_U8 *)&QsfpInfo[1], DRV_QSFP_INFO_LEN);
+    }
+    else
+    {
+        DRV_MPA_TRACE_LIMIT(DRV_LOG_WARN, 1941, 1, 20 * HZ, "MPA gets qsfp info failed(0x%x).", QsfpInfo[0]);
+        RetVal = QsfpInfo[0];
+    }
+    
+    MPA_Free(QsfpInfo);
+    QsfpInfo = NULL;
+    return RetVal;
+    
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_SetQsfpInfo
+ *   : ùģϢ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Info      ģϢ
+ *             Length    Ϣ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131211
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetQsfpInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_CHAR *Info, OSP_U16 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*תΪԭdev sub id*/
+    OSP_U8 DataIn[SET_QSFP_INFO_LEN + 1] = {0};
+    OSP_U8 CardSlot = INVALID_VALUE8;
+    OSP_U8 Channel = INVALID_VALUE8;
+    
+    if ((NULL == EnclAddr) || (NULL == Info) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 484, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Info, Length);
+        return DRV_RETURN_ERROR;
+    }
+    
+    DRV_MPA_TRACE(DRV_LOG_INFO, 485, "MPA sets qsfpInfo, id(0x%llx), data(0x%x, 0x%x, 0x%x), devframe(0x%x).", 
+                        DriverId, (OSP_U8)Info[0], (OSP_U8)Info[1], (OSP_U8)Info[2], ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+                        
+    MpaCmd.Cmd = DRV_CMD_QSFP_INFO_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = SET_QSFP_INFO_LEN;
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_QSFP;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*ǰdevתsub id4λΪλ4λΪͨ*/
+    CardSlot = (OSP_U8)DAL_FRU_ID_TO_SLOT(MpaCmd.FruId);
+    Channel = MpaCmd.DeviceId + 1;
+    DataIn[0] = (OSP_U8)(CardSlot << 4) | Channel; 
+    OSAL_MemCpy_s(&DataIn[1], SET_QSFP_INFO_LEN, (OSP_U8 *)Info, SET_QSFP_INFO_LEN);
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
+
+}
+
+/******************************************************************************
+*     : MPAIntf_GetSfpInfo
+*   : ȡģϢ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             Info      ģϢ
+*             Length    Ϣ
+*   : Info      ģϢ
+*             Length    Ϣ
+*   ֵ  : DRV_RETURN_OK - ɹ;ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2014327
+*           : jiangfanlu 00101148
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetSfpInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_CHAR *Info, OSP_U32 Length, DRV_CABLE_CONNECTOR_TYPE_E* ConnType)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    MPA_SAS_SFP_INFO_S *SasSfpInfo = NULL;
+    
+    if ((NULL == EnclAddr) || (NULL == Info) || (NULL == ConnType)|| (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 486, "MPA finds the pointer is null(0x%p, 0x%p, 0x%p), length(%d).", EnclAddr, Info, ConnType, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+
+    SasSfpInfo = (MPA_SAS_SFP_INFO_S *)MPA_Malloc(sizeof(MPA_SAS_SFP_INFO_S));
+    
+    if (NULL == SasSfpInfo)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 487, "MPA malloc memory failed.");
+        return DRV_RETURN_ERROR;
+    }
+    
+    OSAL_MemSet_s((OSP_U8 *)SasSfpInfo, sizeof(MPA_SAS_SFP_INFO_S), 0, sizeof(MPA_SAS_SFP_INFO_S));
+
+    MpaCmd.Cmd = DRV_CMD_GET_SFP_RAW_INFO;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(MPA_SAS_SFP_INFO_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)SasSfpInfo);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 488, "MPA GetSfpInfo Fail %d.", RetVal);
+        MPA_Free(SasSfpInfo);
+        SasSfpInfo = NULL;
+        return RetVal;
+    }
+
+    OSAL_MemCpy_s((OSP_U8 *)Info, DRV_QSFP_INFO_LEN, (OSP_U8 *)SasSfpInfo->SfpInfo, 
+        (OSP_U32)min((OSP_S32)Length, DRV_QSFP_INFO_LEN));
+    *ConnType = SasSfpInfo->ConnType;
+    
+    MPA_Free(SasSfpInfo);
+    SasSfpInfo = NULL;
+    return RetVal;
+    
+}
+
+/******************************************************************************
+*     : MPAIntf_GetSfpDetailInfo
+*   : ȡģϢ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*   : SfpDetail      ģϢ
+*   ֵ  : DRV_RETURN_OK - ɹ;ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 201728
+*           : limingjiang 00400933
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetSfpDetailInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_SFP_INFO_DETAIL_S *SfpDetail)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == SfpDetail))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 486,
+            "MPA finds the pointer is null(0x%p, 0x%p)", EnclAddr, SfpDetail);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_SFP_INFO;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_SFP_INFO_DETAIL_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)SfpDetail);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_INFO, 488, "MPA interface ret:%d.", RetVal);
+        return RetVal;
+    }
+
+    return RetVal;
+}
+
+/******************************************************************************
+*     : MPAIntf_GetSfpPresent
+*   : ȡsasģλϢ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             PresentStatus      ģλϢ
+*   : PresentStatus      ģλϢ
+*   ֵ  : DRV_RETURN_OK - ɹ;ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2014327
+*           : jiangfanlu 00101148
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetSfpPresent(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *PresentStatus)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == PresentStatus))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 489, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PresentStatus);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_SFP_PRESENT_STATE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /*AddrΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PresentStatus);
+
+}
+
+/******************************************************************************
+*     : MPAIntf_GetSfpState
+*   : ȡsasģ齡״̬
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             PresentStatus      ģλϢ
+*   : PresentStatus      ģλϢ
+*   ֵ  : DRV_RETURN_OK - ɹ;ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2014327
+*           : jiangfanlu 00101148
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetSfpState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_SFP_STAT_E *State)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == State))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 490, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_SFP_STATE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_SFP_STAT_E);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    
+    /*AddrΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetUsbSwitchEnable
+ *   : USB SWITCHʹ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Flag  USB SWITCHʹ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131211
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetUsbSwitchEnable(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Flag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 491, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 492, "MPA sets usb switch enable, id(0x%llx), value(%d).", DriverId, Flag);
+    MpaCmd.Cmd = DRV_CMD_USBSWTICH_CONTROL;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Flag, (OSP_VOID *)NULL);    
+    
+}                               
+
+ /******************************************************************************
+ *     : MPAIntf_SetEarPowerEnable
+ *   : ùҶԴ·ʹ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Flag  ҶԴ·ʹ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131211
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetEarPowerEnable(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Flag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 493, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 494, "MPA set ear power enable, id(0x%llx), value(%d).", DriverId, Flag);
+    MpaCmd.Cmd = DRV_CMD_EAR_POWER_CONTROL;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Flag, (OSP_VOID *)NULL);    
+    
+}                               
+
+ /******************************************************************************
+ *     : MPAIntf_GetEarButtonState
+ *   : ѯҶť״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             State      Ҷť״̬
+ *   : State      Ҷť״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131213
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetEarButtonState(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == State))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 495, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_EAR_BUTTON_STATE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);    
+    
+}
+
+/******************************************************************************
+*     : MPAIntf_SetPowerEnState
+*   : poweren()
+*   : EnclAddr  
+*             FruId        FRU
+*             PowerEn   
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015131
+*           : chenkeren 00221000
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetPowerEnState(OSP_VOID *EnclAddr, OSP_U32 FruId,  OSP_U32 PowerEn)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 493, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 494, "MPA set power enable, id(%d), devframe(0x%x), value(%d).", 
+                    FruId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame, PowerEn);
+
+    MpaCmd.Cmd = DRV_CMD_SET_POWER_EN;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_POWER_EN;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&PowerEn, (OSP_VOID *)NULL);    
+}                               
+ 
+/******************************************************************************
+*     : MPAIntf_GetPowerEnState
+*   : ѯpoweren()
+*   : EnclAddr  
+*             FruId        FRU
+*             PowerEn   
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015131
+*           : chenkeren 00221000
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetPowerEnState(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U32 *PowerEn)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == PowerEn))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 495, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PowerEn);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_DBG, 494, "MPA get power enable, id(%d), devframe(0x%x).", 
+                    FruId, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+
+    MpaCmd.Cmd = DRV_CMD_GET_POWER_EN;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_POWER_EN;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PowerEn);    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_ClearEarButtonState
+ *   : Ҷť״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ      
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131225
+ *           : shufan 204084
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_ClearEarButtonState(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 496, "MPA finds the pointer is null.");
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 497, "MPA clears ear button state, id(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_CLEAR_EAR_BUTTON_STATE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetEarUsbHubState
+ *   : ѯҶUSB-HUB״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             State       ҶUSB-HUB״̬
+ *   : State       ҶUSB-HUB״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131213
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetEarUsbHubState(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == State))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 498, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_EAR_USBHUB_STATE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetEarInfo
+ *   : ѯҶϢ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Info        ҶϢ
+ *   : Info        ҶϢ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131219
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetEarInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 *Info)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Info))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 499, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Info);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_EAR_INFO;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Info);    
+}
+ 
+/******************************************************************************
+*     : MPAIntf_GetDftEarInfo
+*   : ѯװҶϢ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             Info        ҶϢ
+*   : Info        ҶϢ
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 201343
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetDftEarInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_EAR_DFT_INFO_s *Info)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Info))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 500, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Info);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_EAR_DFT_INFO_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_EAR_DFT_INFO_s);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Info);    
+}
+
+/******************************************************************************
+*     : MPAIntf_SetDftEarInfo
+*   : װҶϢ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             Info       װҶϢ
+*   : Info       װҶϢ
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 201343
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetDftEarInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_EAR_DFT_INFO_s DftEarInfo)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 501, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+                        
+    MpaCmd.Cmd = DRV_CMD_EAR_DFT_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_EAR_DFT_INFO_s);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&DftEarInfo, (OSP_VOID *)NULL);
+
+}
+
+/******************************************************************************
+*     : MPAIntf_GetDftIocardInfo
+*   : ѯװӿڿϢ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             Info       װӿڿϢ
+*   : Info       װӿڿϢ
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 201343
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetDftIocardInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, SES_IOCARD_DFT_INFO_S *DftIocardInfo)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == DftIocardInfo))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 502, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, DftIocardInfo);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_IOCARD_DFTINFO_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(SES_IOCARD_DFT_INFO_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)DftIocardInfo);    
+}
+
+/******************************************************************************
+*     : MPAIntf_SetDftIocardInfo
+*   : װӿڿϢ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ   
+*             Info       װӿڿϢ
+*             Length     װӿڿϢ
+*   : Info       װӿڿϢ
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 201343
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetDftIocardInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Info, OSP_U16 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Info) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 503, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Info, Length);
+        return DRV_RETURN_ERROR;
+    }
+                        
+    MpaCmd.Cmd = DRV_CMD_IOCARD_DFT9555_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = SET_DFT_IOCARD_INFO_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Info, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetUartSwitch
+ *   : ѯл
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             State       л
+ *   : State       л
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131213
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetUartSwitch(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == State))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 504, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_UART_STATE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);    
+    
+}
+
+/******************************************************************************
+*     : MPAIntf_SetStorageDeviceTest
+*   : ô洢
+*   : EnclAddr ϲ·ĵַϢmcutype,scsiַframetype  
+*             DriverId ID ͡FRUIDDEVICE IDϢ    
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2014331
+*           : jiangfanlu 00101148
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetStorageDeviceTest(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*ԭdevӿڣҪ2Σʱչ*/
+    OSP_U8 DataIn[2] = {0, 0};
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 505, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_STORAGE_DEVICE_SELFTEST;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetStorageDeviceTestResult
+ *   : ѯ洢Խ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             State       洢Խ
+ *   : State       洢Խ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131220
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetStorageDeviceTestResult(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == State))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 506, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_STORAGE_DEVICE_SELFTEST;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);    
+    
+}
+
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetSmmGeHeartBeatResult
+ *   : ѯGEͨԽ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             State      GEͨԽ
+ *   : State      GEͨԽ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131221
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetSmmGeHeartBeatResult(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == State))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 507, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_SMM_GE_HEARTBEAT;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetSmmCtrlHeartBeatResult
+ *   : ѯưGEͨԽ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             State      GEͨԽ
+ *   : State      GEͨԽ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131228
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetSmmCtrlHeartBeatResult(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == State))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 508, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_SMM_CTRL_HEARTBEAT;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetChipFwVer
+ *   : ѯchip汾
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Version   汾
+ *             Length    汾
+ *   : Version   汾
+ *   ֵ  : OSP_S32
+ * ˵  : ǰֻ֧bbu
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131224
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetChipFwVer(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Version, OSP_U32 Length)
+{
+    OSP_U32 FruId = 0;
+    OSP_U32 FruType = 0;
+
+    FruId = DAL_FRU_ID(DriverId);
+    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
+    
+    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_BBU))
+    {
+        return MPAIntf_GetBbuSoftwareVersion(EnclAddr, DriverId, Version, Length);
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_FAN_CTRLBOARD))
+    {
+        return MPAIntf_GetFanCtrlFwVersion(EnclAddr, DriverId, Version, Length);
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_MGMTBOARD))
+    {
+        return MPAIntf_GetMgmt8307Version(EnclAddr, DriverId, Version, Length);
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_CTRLBOARD))
+    {
+        return MPAIntf_GetPCIEChipVersion(EnclAddr, DriverId, (OSP_U8 *)Version, Length);
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_POWER))
+    {
+        return MPAIntf_GetPowerFwVersion(EnclAddr, DriverId, Version, Length);
+    }
+    else
+    {
+        return RETURN_INVALID;
+    }
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetChipName
+ *   : ѯchip
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Name   
+ *             Length    Ƴ
+ *   : Name   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : ǰֻ֧bbu
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131224
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetChipName(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_S8 *Name, OSP_U32 Length)
+{
+    OSP_U32 FruId = 0;
+    OSP_U32 FruType = 0;
+
+    FruId = DAL_FRU_ID(DriverId);
+    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
+    
+    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_BBU))
+    {
+        return MPAIntf_GetBbuName(EnclAddr, DriverId, Name, Length);
+    }
+    else
+    {
+        return RETURN_INVALID;
+    }
+}
+
+ /******************************************************************************
+ *     : MPAIntf_UpdataChipPrePare
+ *   : chipоƬһ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131224
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdataChipPrePare(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    OSP_U32 FruId = 0;
+    OSP_U32 FruType = 0;
+
+    FruId = DAL_FRU_ID(DriverId);
+    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
+    
+    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_BBU))
+    {
+        return MPAIntf_UpdateBbuPrepare(EnclAddr, DriverId);
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_FAN_CTRLBOARD))
+    {
+        return MPAIntf_UpdateFanCtrlPrepare(EnclAddr, DriverId);
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_CTRLBOARD))
+    {
+        return MPAIntf_UpdateConfigChipPrepare(EnclAddr, DriverId);
+    }
+    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_POWER))
+    {
+        return MPAIntf_UpdatePowerPrepare(EnclAddr, DriverId);
+    }
+    else
+    {
+        return RETURN_INVALID;
+    }
+
+}
+ /******************************************************************************
+ *     : MPAIntf_UpdataChipTransData
+ *   : chipоƬڶ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId  ID ͡FRUIDDEVICE IDϢ
+ *             Data      ļָ
+ *             DataLen   ļ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131224
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdataChipTransData(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Data, OSP_U32 DataLen)
+{
+    OSP_U32 FruId = 0;
+    OSP_U32 FruType = 0;
+
+    (OSP_VOID)DataLen;
+
+    FruId = DAL_FRU_ID(DriverId);
+    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
+    
+    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_BBU))
+    {
+        return MPAIntf_UpdateBbuSendFile(EnclAddr, DriverId, Data);
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_FAN_CTRLBOARD))
+    {
+        return MPAIntf_UpdateFanCtrlSendFile(EnclAddr, DriverId, Data);
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_MGMTBOARD))
+    {
+        return MPAIntf_UpdateMgmt8307SendFile(EnclAddr, DriverId, Data);
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_CTRLBOARD))
+    {
+        return MPAIntf_UpdateConfigChipSendFile(EnclAddr, DriverId, Data);
+    }
+    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_POWER))
+    {
+        return MPAIntf_UpdatePowerSendFile(EnclAddr, DriverId, Data);
+    }
+    else
+    {
+        return RETURN_INVALID;
+    }
+
+} 
+
+/******************************************************************************
+ *     : MPAIntf_UpdataChipStart
+ *   : chipоƬ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId  ID ͡FRUIDDEVICE IDϢ   
+ *             Data      ļָ
+ *             DataLen   ļ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131224
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_UpdataChipStart(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8* Data, OSP_U32 DataLen)
+{
+    OSP_U32 FruId = 0;
+    OSP_U32 FruType = 0;
+
+    (OSP_VOID)Data;
+    (OSP_VOID)DataLen;
+
+    FruId = DAL_FRU_ID(DriverId);
+    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
+    
+    DRV_MPA_TRACE(DRV_LOG_DBG, 509, "MPA starts to update chip, id(0x%llx).", DriverId);
+    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_BBU))
+    {
+        return MPAIntf_UpdateBbuStart(EnclAddr, DriverId);
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_FAN_CTRLBOARD))
+    {
+        return MPAIntf_UpdateFanCtrlStart(EnclAddr, DriverId);
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_MGMTBOARD))
+    {
+        return MPAIntf_UpdateMgmt8307Start(EnclAddr, DriverId);
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_CTRLBOARD))
+    {
+        return MPAIntf_UpdateConfigChipStart(EnclAddr, DriverId);
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_POWER))
+    {
+        return MPAIntf_UpdatePowerStart(EnclAddr, DriverId);
+    }
+    else
+    {
+        return RETURN_INVALID;
+    }
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetChipUpdateStatus
+ *   : ѯchip״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             State     ״̬
+ *   : State     ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014211
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetChipUpdateStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_UPGRADE_STAT_E *State)
+{
+    OSP_U32 FruId = 0;
+    OSP_U32 FruType = 0;
+
+    FruId = DAL_FRU_ID(DriverId);
+    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
+    
+    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_BBU))
+    {
+        return MPAIntf_GetBbuUpgradeState(EnclAddr, DriverId, State);
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_FAN_CTRLBOARD))
+    {
+        return MPAIntf_GetFanCtrlUpgradeState(EnclAddr, DriverId, State);
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_MGMTBOARD))
+    {
+        return MPAIntf_GetMgmt8307UpgradeState(EnclAddr, DriverId, State);
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_CTRLBOARD))
+    {
+        return MPAIntf_GetConfigChipUpgradeState(EnclAddr, DriverId, State);
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_POWER))
+    {
+        return MPAIntf_GetPowerUpgradeState(EnclAddr, DriverId, State);
+    }
+    else
+    {
+        return RETURN_INVALID;
+    }
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetChipSupportUpgrade
+ *   : ѯǷ֧
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Support   Ƿ֧TRUE:֧֣FALSE:֧
+ *   : Support   Ƿ֧TRUE:֧֣FALSE:֧
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201435
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetChipSupportUpgrade(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_BOOL* Support)
+{
+    OSP_U32 FruId = 0;
+    OSP_U32 FruType = 0;
+    
+    if ((NULL == EnclAddr) || (NULL == Support))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 510, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Support);
+        return DRV_RETURN_ERROR;
+    }
+
+    FruId = DAL_FRU_ID(DriverId);
+    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
+    
+    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_BBU))
+    {
+        *Support = (OSP_BOOL)TRUE;
+        return DRV_RETURN_OK;
+    }
+    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_FAN_CTRLBOARD))
+    {
+        *Support = (OSP_BOOL)TRUE;
+        return DRV_RETURN_OK;
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_MGMTBOARD))
+    {
+        return MPAIntf_GetMgmt8307SupportUpGrade(EnclAddr, DriverId, Support);
+    }
+    else if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_POWER))
+    {
+        return MPAIntf_GetPowerSupportUpGrade(EnclAddr, DriverId, Support);
+    }
+    else
+    {
+        return RETURN_INVALID;
+    }
+    
+}
+
+/******************************************************************************
+*     : MPAIntf_GetChipUpgradeRestCnt
+*   : ѯʣ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId   ID ͡FRUIDDEVICE IDϢ
+*             Cnt Ƿ֧TRUE:֧֣FALSE:֧
+*   : Cnt Ƿ֧TRUE:֧֣FALSE:֧
+*   ֵ  : OSP_S32
+* ˵  :
+*
+* ޸ʷ  :
+* 1.    : 2017329
+*       : limingjiang/00400933
+*   ޸: ֧VRM
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetChipUpgradeRestCnt(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Cnt)
+{
+    OSP_U32 FruId = 0;
+    OSP_U32 FruType = 0;
+
+    if ((NULL == EnclAddr) || (NULL == Cnt))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 510, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Cnt);
+        return DRV_RETURN_ERROR;
+    }
+
+    FruId = DAL_FRU_ID(DriverId);
+    FruType = DAL_FRU_ID_TO_LOGIC_TYPE(FruId);
+
+    if (DAL_FRU_LOGIC_TYPE_MATCH(FruType, DMI_LOGIC_FRU_CTRLBOARD))
+    {
+        return MPAIntf_GetConfigChipUpgradeRestCnt(EnclAddr, DriverId, Cnt);
+    }
+    else
+    {
+        return RETURN_INVALID;
+    }
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetBbuStopDischarge
+ *   : bbuֹͣŵ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Flag Ʊ־
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  :
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131224
+ *           : shufan 204084
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBbuStopDischarge(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Flag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 511, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BBU_RUNCTL_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = BBU_STOP_DISCHARGE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Flag, (OSP_VOID *)NULL);
+    
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetSmmSwitchRegister
+ *   : ѯswitchĴֵ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             RegValue   Ĵֵ
+ *   : RegValue   Ĵֵ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013127
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetSmmSwitchRegister(OSP_VOID *EnclAddr, OSP_U64 DriverId, 
+                                                    OSP_U8 PortId, OSP_U8 RegArrd, OSP_U16 *RegValue)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 DataIn[3] = {0, 0, 0};
+   
+    if ((NULL == EnclAddr) || (NULL == RegValue))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 512, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, RegValue);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SMM_SWITCH_REGISTER_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    DataIn[0] = sizeof(OSP_U8) + sizeof(OSP_U8);
+    DataIn[1] = PortId;
+    DataIn[2] = RegArrd;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)RegValue);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetSmmSwitchRegister
+ *   : ùswitchĴֵ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             RegValue   Ĵֵ
+ *   : RegValue   Ĵֵ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014120
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetSmmSwitchRegister(OSP_VOID *EnclAddr, OSP_U64 DriverId, 
+                                                    OSP_U8 PortId, OSP_U8 RegArrd, OSP_U16 RegValue)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 DataIn[4] = {0, 0, 0, 0};
+   
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 513, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SMM_SWITCH_REGISTER_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+    DataIn[0] = PortId;
+    DataIn[1] = RegArrd;
+    DataIn[2] = (OSP_U8)(RegValue & INVALID_VALUE8);
+    DataIn[3] = (OSP_U8)(RegValue >> MPA_SHIFT_BIT_8);
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
+    
+}
+
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetSmmMac
+ *   : ȡMAC
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Mac      MAC
+ *             Length    Ƴ
+ *   : Mac      MAC
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131230
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetSmmMac(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Mac, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 TempBuffer[DRV_MAC_LEN] = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Mac) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 514, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Mac, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_SMM_MAC;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_MAC_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /* 2014-08-19 c00221000 for DTS2014070814034 begin: mpaҪʱbufferڴԽ*/
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TempBuffer); 
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 515, "MPA GetSmmMac return error.");
+        return RetVal;
+    }
+
+    /*ȡСֵ*/
+    OSAL_MemCpy_s((OSP_U8 *)Mac, (OSP_U32)min(DRV_MAC_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)TempBuffer, (OSP_U32)min(DRV_MAC_LEN, (OSP_S32)Length));
+    /* 2014-08-19  c00221000 for DTS2014070814034 end*/
+
+    return RetVal;
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetSmmMac
+ *   : SMM mac
+ *   : EnclAddr  豸ַϢ
+ *             DriverId        豸idϢ
+ *             Mac  mac
+ *             Length mac
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131230
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetSmmMac(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Mac, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Mac) || (DRV_MAC_LEN != Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 516, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Mac, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_SMM_MAC;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_MAC_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Mac, (OSP_VOID *)NULL);
+  
+}
+
+/******************************************************************************
+ *     : MPAIntf_SetBbuTemperature
+ *   : BBU¶
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Value ¶ֵ     
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131224
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBbuTemperature(OSP_VOID *EnclAddr, OSP_U64 DriverId, BBU_TEMPERATURE_S *Value)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Value))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 517, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_BBU_TEMP_SIMULATE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);    
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+    MpaCmd.BufLen = sizeof(BBU_TEMPERATURE_S);
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Value, (OSP_VOID *)NULL);
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SystemSetTemperature
+ *   : ϵͳ¶
+ *   : EnclAddr  ϲ·ĵַϢ
+ *             DriverId  ID 
+ *             Type       ¶
+ *             TempId    ¶ȵID
+ *             Temp      ¶ֵ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201418
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SystemSetTemperature(OSP_VOID *EnclAddr, OSP_U64 DriverId, TEMP_TYPE_E Type, OSP_S16 Temp)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U16 DataIn[3] = {0};
+    OSP_U32 TempType = (OSP_U32)Type;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 518, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_SYSTEM_SET_TEMP;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);    
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+    MpaCmd.BufLen = sizeof(TEMP_TYPE_E) + sizeof(OSP_S16);
+
+    DataIn[0] = (OSP_U16)(TempType & 0x0000FFFF);
+    DataIn[1] = (OSP_U16)((TempType >> MPA_SHIFT_BIT_16) & 0x0000FFFF);
+    DataIn[2] = (OSP_U16)Temp;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetIocardSlotId
+ *   : ѯӿڿλ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             SlotId      ӿڿλ
+ *   : SlotId      ӿڿλ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131225
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetIocardSlotId(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *SlotId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == SlotId))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 519, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, SlotId);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_INTFCARD_ID_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)SlotId);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetEthStaticMacValid
+ *   : ѯ̬MACЧ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Valid      Ч 
+ *   : Valid      Ч 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201438
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetEthStaticMacValid(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Valid)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Valid))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 520, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Valid);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_ETH_STATIC_MAC_VALID;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Valid);    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetEthStaticMac
+ *   : þ̬mac
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Mac       macַ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201438
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetEthStaticMac(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Mac)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Mac))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 521, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Mac);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 522, "MPA sets static mac.");
+    MpaCmd.Cmd = DRV_CMD_SET_ETH_STATIC_MAC;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_MAC_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Mac, (OSP_VOID *)NULL);
+  
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetEthSwitchMac
+ *   : ѯmac
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Mac       macַ
+ *   : Mac       macַ
+ *   ֵ  : OSP_S32
+ * ˵  : Ϊһ£macβlengthϲ㱣֤·ȴڵ6
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131225
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetEthSwitchMac(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Mac)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Mac))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 523, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Mac);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_NETCARD_MAC_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_MAC_LEN;
+    MpaCmd.SdrType = SDRTYPE_SMM_ETH_MAC;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Mac);
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetEthSwitchMac
+ *   : mac
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Mac       macַ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131225
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetEthSwitchMac(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Mac)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Mac))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 524, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Mac);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 525, "MPA sets eth switch mac, devframe(0x%x).", ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+    MpaCmd.Cmd = DRV_CMD_NETCARD_MAC_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DRV_MAC_LEN;
+    MpaCmd.SdrType = SDRTYPE_SMM_ETH_MAC;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)Mac, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetEthSwitchIpAddr
+ *   : ѯIpַ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             IpAddr       IPַ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014513
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetEthSwitchIpAddr(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *IpAddr)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == IpAddr))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 526, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, IpAddr);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_NETCARD_MAC_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = IP_ADDR_INFO_LEN;
+    MpaCmd.SdrType = SDRTYPE_SMM_ETH_IP;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)IpAddr);
+}
+ 
+ /******************************************************************************
+ *     : MPAIntf_SetEthSwitchIpAddr
+ *   : Ipַ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             IpAddr       IPַ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014513
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetEthSwitchIpAddr(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *IpAddr)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == IpAddr))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 527, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, IpAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 528, "MPA sets eth switch ip address.");
+    MpaCmd.Cmd = DRV_CMD_NETCARD_MAC_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = IP_ADDR_INFO_LEN;
+    MpaCmd.SdrType = SDRTYPE_SMM_ETH_IP;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)IpAddr, (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetEthSwitchNetMask
+ *   : ѯ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             NetMask       
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014513
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetEthSwitchNetMask(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *NetMask)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == NetMask))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 529, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, NetMask);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_NETCARD_MAC_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = NET_MASK_INFO_LEN;
+    MpaCmd.SdrType = SDRTYPE_SMM_ETH_NETMASK;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NetMask);
+}
+ 
+ /******************************************************************************
+ *     : MPAIntf_SetEthSwitchNetMask
+ *   : 
+  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             NetMask       
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014513
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetEthSwitchNetMask(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *NetMask)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == NetMask))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 530, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, NetMask);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 531, "MPA sets eth switch net mask.");
+    MpaCmd.Cmd = DRV_CMD_NETCARD_MAC_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = NET_MASK_INFO_LEN;
+    MpaCmd.SdrType = SDRTYPE_SMM_ETH_NETMASK;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NetMask, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+ *     : MPAIntf_GetEthSwitchGateWay
+ *   : ѯ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             GateWay       
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014513
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetEthSwitchGateWay(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *GateWay)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == GateWay))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 532, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, GateWay);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_NETCARD_MAC_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = GATE_WAY_INFO_LEN;
+    MpaCmd.SdrType = SDRTYPE_SMM_ETH_GATEWAY;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)GateWay);
+}
+ 
+ /******************************************************************************
+ *     : MPAIntf_SetEthSwitchGateWay
+ *   : 
+  *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             GateWay       
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014513
+ *           : chenkeren 00221000
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetEthSwitchGateWay(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *GateWay)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == GateWay))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 533, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, GateWay);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 534, "MPA sets eth switch gateway.");
+    MpaCmd.Cmd = DRV_CMD_NETCARD_MAC_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = GATE_WAY_INFO_LEN;
+    MpaCmd.SdrType = SDRTYPE_SMM_ETH_GATEWAY;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)GateWay, (OSP_VOID *)NULL);
+}
+ 
+ /******************************************************************************
+ *     : MPAIntf_SetEthSwitchOnoff
+ *   : ڿ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Switch     ڿ״̬       
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131225
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetEthSwitchOnoff(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U32 Switch)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 Status = 0;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 535, "MPA finds the pointer is null.");
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 536, "MPA sets eth switch on or off, id(0x%llx), value(%u), devframe(0x%x).",
+            DriverId, Switch, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+            
+    MpaCmd.Cmd = DRV_CMD_SET_ETH_SWITCH_ONOFF;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    Status = (OSP_U8)Switch;
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Status, (OSP_VOID *)NULL);
+  
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_ResetEthSwitchPort
+ *   : λڣpcie޸
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014210
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_ResetEthSwitchPort(OSP_VOID* EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*1ʾλ*/
+    OSP_U8 Status = 1;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 537, "MPA finds the pointer is null.");
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 538, "MPA resets ethswitch, portid(0x%llx).", DriverId);
+    MpaCmd.Cmd = DRV_CMD_NETPORT_RESET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Status, (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetEthSwitchStatus
+ *   : ѯ״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Status    ״̬
+ *   : Status    ״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131225
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetEthSwitchStatus(OSP_VOID* EnclAddr, OSP_U64 DriverId, DRV_PORT_STATUS_E* Status)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Status))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 539, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_ETH_SWITCH_STATUS;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_PORT_STATUS_E);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status);  
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetEthSwitchSpeed
+ *   : ѯ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Speed     
+ *   : Speed     
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131225
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetEthSwitchSpeed(OSP_VOID* EnclAddr, OSP_U64 DriverId, DRV_SPEED_S *Speed)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Speed))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 540, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Speed);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_ETH_SWITCH_SPEED;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_SPEED_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Speed);  
+    
+}
+
+/* BEGIN: Added by qintianyi 90005776, 2014/8/22  ⵥ:DTS2014081808235, ޸ԭ:vlan switch */
+ /******************************************************************************
+ *     : MPAIntf_SetVlanSwitch
+ *   : vlanת
+ *   : 
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014822
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetVlanSwitch(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_BOOL Switch)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U8 DataIn = 0;
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 541, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return RetVal;
+    }
+    DRV_MPA_TRACE(DRV_LOG_INFO, 542, "MPA sets vlan switch, id(0x%llx), switch(%d), devframe(0x%x).", DriverId, Switch, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+
+    DataIn = (OSP_U8)Switch;
+    MpaCmd.Cmd = DRV_CMD_SET_VLAN_SWITCH;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_SWITCH; 
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&DataIn, (OSP_VOID *)NULL);  
+
+}
+/* END: Added by qintianyi 90005776, 2014/8/22  ⵥ:DTS2014081808235 */
+
+/******************************************************************************
+ *     : MPAIntf_GetVlanSwitch
+ *   : ȡvlanת
+ *   : 
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2016526
+ *           : hulinhui 00289393
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetVlanSwitch(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_BOOL* Switch)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Switch))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 543, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Switch);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_VLAN_SWITCH;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_BOOL);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_SWITCH;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Switch);    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetUsbInfo
+ *   : ѯUSBϢ(λsize)
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Info      USBϢ(λsize)
+ *   : Info      USBϢ(λsize)
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131230
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetUsbInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, MPA_BMC_USB_INFO_S *Info)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Info))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 543, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Info);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_USB_INFO;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(MPA_BMC_USB_INFO_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Info);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetEarPowerState
+ *   : ѯҶԴ״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Status    ҶԴ澯״̬
+ *   : Status    ҶԴ澯״̬
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014116
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetEarPowerState(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Status)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Status))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 544, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_EAR_POWER_STATE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status);    
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBmcResetReason
+ *   : ѯBMCλԭ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId  ID ͡FRUIDDEVICE IDϢ   
+ *             *Reason   BMCλԭ
+ *   : *Reason   BMCλԭ
+                          0 ϵ縴λ
+                          1 ⲿⲿŹλ
+                          2 ڲ߿Źλ
+
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014111
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBmcResetReason(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Reason)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Reason))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 545, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Reason);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BMCRESET_CAUSE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Reason);  
+    
+}
+ 
+ /******************************************************************************
+ *     : MPAIntf_SetWatchDogTime
+ *   : ÿŹλʱ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId  ID ͡FRUIDDEVICE IDϢ   
+ *             Time      Źλʱ
+                          0 10S
+                          1 30S
+                          2 60S
+                          3 120S
+ *   : 
+
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014111
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetWatchDogTime(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Time)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 546, "MPA finds the pointer is null.");
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_WATCHDOGTIME_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Time, (OSP_VOID *)NULL);
+  
+}
+ 
+ /******************************************************************************
+ *     : MPAIntf_SetPowerInterruptSignal
+ *   : õԴжź
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId  ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014113
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetPowerInterruptSignal(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 547, "MPA finds the pointer is null.");
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_POWER_INTERRUPT_SINGLE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /**/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerInterruptSignal
+ *   : ѯԴжź
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId  ID ͡FRUIDDEVICE IDϢ   
+ *             *State    Դжź
+ *   : *State    Դжźţ0:жϣ 1:ж
+
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014111
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerInterruptSignal(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == State))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 548, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_POWER_INTERRUPT_SINGLE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);  
+    
+}
+ 
+ /******************************************************************************
+ *     : MPAIntf_SetPowerAlarmSignal
+ *   : õԴ澯ź
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId  ID ͡FRUIDDEVICE IDϢ   
+ *             State     Դ澯źţ0:޸澯 1:и澯
+ *   : 
+
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014111
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetPowerAlarmSignal(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 State)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 549, "MPA finds the pointer is null.");
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_POWER_ALARM;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&State, (OSP_VOID *)NULL);
+  
+    
+}
+ 
+ /******************************************************************************
+ *     : MPAIntf_GetSmmServiceEthLoopTest
+ *   : serviceڻزԽ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId  ID ͡FRUIDDEVICE IDϢ   
+ *             *Result   serviceڻزԽ0:pass ;1:fail
+ *   : *Result   serviceڻزԽ0:pass ;1:fail
+
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014111
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetSmmServiceEthLoopTest(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Result)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Result))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 550, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Result);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_SMM_ETH_LOOPTEST;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Result);  
+    
+}
+ 
+ /******************************************************************************
+ *     : MPAIntf_SetOsResetCount
+ *   : ôϵͳλ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId  ID ͡FRUIDDEVICE IDϢ   
+ *             Count     ϵͳλ
+ *   : 
+
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014111
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetOsResetCount(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Count)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 551, "MPA finds the pointer is null.");
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_X86_OS_RESETCOUNT;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Count, (OSP_VOID *)NULL);
+  
+    
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetFruAlarm
+ *   : ѯFru澯
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId  ID ͡FRUIDDEVICE IDϢ   
+ *             *State    Fru澯0:޸澯1:и澯
+ *   : *State    Fru澯0:޸澯1:и澯
+
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014113
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFruAlarm(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *State)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == State))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 552, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_FRU_ALARM;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);  
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPowerSingalBackboardType
+ *   : ѯԴ塢źűͣͨdeviceid֣0ΪԴ壬1Ϊźű
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId  ID ͡FRUIDDEVICE IDϢ   
+ *             *Type     
+ *   : *Type     
+                         0x06 :6Uźű                               
+                         0x17 :6UԴ                               
+                         0x0c :3Uźű                               
+                         0    :3UԴ                         
+
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014126
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPowerSingalBackboardType(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Type)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Type))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 553, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Type);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_POWER_SINGAL_TYPE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Type);  
+    
+}
+/******************************************************************************
+*   : MPAIntf_SetCK420Config
+* : CK420
+* : EnclAddr ϲ·ĵַϢmcutype,scsiַframetype
+*           FruId     FRUID 
+*           config    Ϣ
+*           Value     õĲ
+* : 
+            
+* ֵ  : OSP_S32
+* ˵:  
+*
+* ޸ʷ      :
+*  1.       : 2017317
+*           : 
+*    ޸   : ɺ
+******************************************************************************/
+OSP_S32 MPAIntf_SetCK420Config(OSP_VOID *EnclAddr, OSP_U32 FruId, CK420_CONFIG Config, OSP_U8 *Value)
+{
+    MPA_CMD_INFO_S MpaCmd = {0}; 
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 335, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 336, "MPA set ck420 config, id(0x%x), datelen(%d), datelen(%x).",
+        FruId, Config.DataLen, Config.StartReg);
+
+    MpaCmd.Cmd = DRV_CMD_SET_CK420_CONFIG;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(CK420_CONFIG);
+    MpaCmd.SdrType = SDRTYPT_SET_CK420_CONFIG;
+    MpaCmd.WtRd = MPA_WRITE;
+
+ return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Config, (OSP_VOID *)Value);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetCK420Config
+ *   : ȡCK420
+ *   : EnclAddr  
+ *             DriverId  
+ *             Value     
+ *             Length    
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2017411
+ *           : c00378798 
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+ OSP_S32 MPAIntf_GetCK420Config(OSP_VOID *EnclAddr, OSP_U64 DriverId, CK420_GET_CONFIG Config, OSP_U32 Length, OSP_U8 *Value)
+ {
+     MPA_CMD_INFO_S MpaCmd;
+     OSP_S8 MacBuffer[CK420_LEN] = {0};/*ڻMPAѯ*/
+     OSP_S32 RetVal = DRV_RETURN_ERROR;
+     OSP_U8 BmcDataIn[3] = {0};
+     
+     if ((NULL == EnclAddr) || (NULL == Value) || (0 == Length))
+     {
+         DRV_MPA_TRACE(DRV_LOG_WARN, 54, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Value, Length);
+         return RetVal;
+     }
+ 
+     MpaCmd.Cmd = DRV_CMD_GET_CK420_CONFIG;
+     MpaCmd.FruId = DAL_FRU_ID(DriverId);
+     MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+     MpaCmd.BufLen = CK420_LEN;
+     MpaCmd.SdrType = SDRTYPE_DATA_IN_FOR_CK420;
+     MpaCmd.WtRd = MPA_READ;
+     BmcDataIn[0] = 2;
+     BmcDataIn[1] = Config.DataLen;
+     BmcDataIn[2] = Config.StartReg;
+ 
+     RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)MacBuffer);
+     if (DRV_RETURN_OK != RetVal)
+     {
+         DRV_MPA_TRACE(DRV_LOG_DBG, 55, "Mpa get ck420 config return %d.", RetVal);
+         return RetVal;
+     }
+ 
+     /*DAL·ĳʵʳȡ̵ĳȿ*/
+     OSAL_MemCpy_s((OSP_U8 *)Value, (OSP_U32)min(CK420_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)MacBuffer, (OSP_U32)min(CK420_LEN, (OSP_S32)Length));
+     return RetVal;
+        
+ }
+
+ /******************************************************************************
+ *     : MPAIntf_I2CRwConfig
+ *   : SES IICַдͨýӿ
+ *   : EnclAddr  
+ *             DriverId  
+ *             Config
+ *             Value
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2017427
+ *           : c00378798 
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+ OSP_S32 MPAIntf_I2CRwConfig(OSP_VOID *EnclAddr, OSP_U64 DriverId, IIC_GET_CPLD Config, OSP_U8 *Value)
+ {
+     MPA_CMD_INFO_S MpaCmd;
+     OSP_U8 CpldValue[CPLD_READ_LEN] = {0};/*ڻMPAѯ*/
+     OSP_S32 RetVal = DRV_RETURN_ERROR;
+     
+     if (NULL == EnclAddr)
+     {
+         DRV_MPA_TRACE(DRV_LOG_WARN, 54, "MPA finds the pointer is null(0x%p).", EnclAddr);
+         return RetVal;
+     }
+ 
+     MpaCmd.Cmd = DRV_CMD_WRITEREAD_IIC;
+     MpaCmd.FruId = DAL_FRU_ID(DriverId);
+     MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+     MpaCmd.BufLen = Config.ReadLen;
+     MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+     MpaCmd.WtRd = MPA_READ;
+ 
+     RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Config, (OSP_VOID *)CpldValue);
+     if (DRV_RETURN_OK != RetVal)
+     {
+         DRV_MPA_TRACE(DRV_LOG_DBG, 55, "Mpa get cpld value return %d.", RetVal);
+         return RetVal;
+     }
+     
+     /*ֶ֧ȡ󳤶ʵʳȡ̵ĳȿ*/
+     OSAL_MemCpy_s((OSP_U8 *)Value, (OSP_U32)min(CPLD_READ_LEN, (OSP_S32)Config.ReadLen), 
+        CpldValue, (OSP_U32)min(CPLD_READ_LEN, (OSP_S32)Config.ReadLen));
+     return RetVal;       
+ }
+
+ /******************************************************************************
+ *     : MPAIntf_GetTDMBusRegister
+ *   : ȡTDM߼ĴTDMͨdeviceid
+ *   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             *Value     TDM߼Ĵ
+ *             Length     TDM߼ĴȣDMI_NAME_LEN
+ *   : *Value     TDM߼Ĵ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014113
+ *           : shufan 204084
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetTDMBusRegister(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Value , OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 ValueBuffer[DMI_NAME_LEN] = {0};/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Value) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 554, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Value, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_TDM_BUS_REGISTER;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = DMI_NAME_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)ValueBuffer);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 555, "MPA GetTDMBusRegister return error.");
+        return RetVal;
+    }
+
+    /*·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)Value, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)ValueBuffer, (OSP_U32)min(DMI_NAME_LEN, (OSP_S32)Length));
+   
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetRMIITest
+ *   : װRMIIͨ
+ *   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014311
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetRMIITest(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 556, "MPA finds the pointer is null.");
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_RMII_TEST;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = 0;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetOopsInfo
+ *   : ѯϵͳoopsϢ
+ *   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
+ *             Info       oopsϢַ
+ *             Length     Ϣ
+ *   : Info       oopsϢַ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014128
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetOopsInfo(OSP_VOID *EnclAddr, OSP_U8 *Info, OSP_U32 Length)
+{
+#define MPA_BMC_OOPS_INFO_LEN 0x400
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 *OopsInfo = NULL;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Info) || (LENGTH_OOPS_INFO > Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 557, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Info, Length);
+        return DRV_RETURN_ERROR;
+    }
+
+    OopsInfo = (OSP_U8 *)MPA_Malloc(MPA_BMC_OOPS_INFO_LEN);
+    if (NULL == OopsInfo)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 558, "MPA malloc memory failed.");
+        return DRV_RETURN_ERROR;
+    }
+
+    OSAL_MemSet_s(OopsInfo, MPA_BMC_OOPS_INFO_LEN, 0, MPA_BMC_OOPS_INFO_LEN);
+    MpaCmd.Cmd = DRV_CMD_OOPSINFO_GET;
+    MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = LENGTH_OOPS_INFO;
+    MpaCmd.SdrType = SDRTYPE_OOPS_INFO;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)OopsInfo);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 559, "MPA GetOopsInfo Return fail %d.", RetVal);
+        MPA_Free(OopsInfo);
+        OopsInfo = NULL;
+        return DRV_RETURN_ERROR;
+    }
+
+    OSAL_MemCpy_s((OSP_U8 *)Info, (OSP_U32)min(MPA_BMC_OOPS_INFO_LEN, (OSP_S32)Length), 
+        (OSP_U8 *)OopsInfo, (OSP_U32)min(MPA_BMC_OOPS_INFO_LEN, (OSP_S32)Length));
+    MPA_Free(OopsInfo);
+    OopsInfo = NULL;
+    return DRV_RETURN_OK;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_ClearOopsInfo
+ *   : oopsϢ
+ *   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014128
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_ClearOopsInfo(OSP_VOID *EnclAddr)
+{
+#define CLEAR_ID 1
+    MPA_CMD_INFO_S MpaCmd;
+    /*ԭdevӿڲ1ʾoopsϢ*/
+    OSP_U8 Flag = CLEAR_ID;
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 560, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 560, "os will clear Oops info.");
+
+    MpaCmd.Cmd = DRV_CMD_OOPSINFO_CLEAN;
+    MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_CTRLBOARD, 0);
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(Flag);
+    MpaCmd.SdrType = SDRTYPE_OOPS_INFO; /*DTS2016012610431 */
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Flag, (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_Set6GPhyInfo
+ *   : 6GźŲ
+ *   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Type      ͣ0SAS1SATA
+ *             PreEmp    Ԥֵ0x000x0C
+ *             Swing     ڷֵ0x000x0F
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014416
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_Set6GPhyInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Type, OSP_U8 PreEmp, OSP_U8 Swing)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /* źŲΪ4ʼΪ0 */
+    OSP_U8 DataIn[4] = {0, 0, 0, 0};
+    OSP_U8 PhyId = 0;
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 561, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_6GPHYINFO_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DataIn);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    PhyId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    DataIn[0] = Type;
+    DataIn[1] = PreEmp;
+    DataIn[2] = Swing;
+    DataIn[3] = PhyId;
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_Set3GPhyInfo
+ *   : 3GźŲ
+ *   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Type      ͣ0SAS1SATA
+ *             PreEmp    Ԥֵ0x000x0C
+ *             Swing     ڷֵ0x000x0F
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014416
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_Set3GPhyInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Type, OSP_U8 PreEmp, OSP_U8 Swing)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /* źŲΪ4ʼΪ0 */
+    OSP_U8 DataIn[4] = {0, 0, 0, 0};
+    OSP_U8 PhyId = 0;
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 562, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_3GPHYINFO_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DataIn);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    PhyId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    DataIn[0] = Type;
+    DataIn[1] = PreEmp;
+    DataIn[2] = Swing;
+    DataIn[3] = PhyId;
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
+
+}
+/******************************************************************************
+*     : MPAIntf_GetI2cStatus
+*   : I2C״̬Ϣȡ
+*   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 201442
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetI2cStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, MPA_I2C_STATUS_INFO_S *Info, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Info) || (MPA_I2C_STATUS_INFO_MAX_LEN != Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 563, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Info, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_I2C_STATUS_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_I2C_STATUS_INFO_MAX_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Info); 
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 564, "%s return error %d.", __FUNCTION__, RetVal);
+        return RetVal;
+    }
+
+    return RetVal;
+    
+}
+
+/******************************************************************************
+*     : MPAIntf_GetG2AlarmStatus
+*   : G2 ALARM״̬Ϣȡ
+*   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 201442
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetG2AlarmStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, MPA_VAR_STATUS_INFO_S *Info, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Info) || (MPA_VAR_STATUS_INFO_MAX_LEN != Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 565, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Info, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_G2_SINGLE_ALARM_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_VAR_STATUS_INFO_MAX_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Info); 
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 566, "%s return error %d.", __FUNCTION__, RetVal);
+        return RetVal;
+    }
+
+    return RetVal;
+    
+}
+
+/******************************************************************************
+*     : MPAIntf_GetG2AllAlarmStatus
+*   : G2 ALARM״̬Ϣȡ
+*   : EnclAddr   ϲ·ĵַϢmcutype,scsiַframetype
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 201442
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetG2AllAlarmStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, MPA_VAR_STATUS_INFO_S *Info, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Info) || (MPA_VAR_STATUS_INFO_MAX_LEN != Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 567, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, Info, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_G2_ALL_ALARM_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_VAR_STATUS_INFO_MAX_LEN;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Info); 
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 568, "%s return error %d.", __FUNCTION__, RetVal);
+        return RetVal;
+    }
+
+    return RetVal;
+    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetMgmtIpInfo
+ *   : ѯIPϢ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *                    DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *                    Info     IPϢ
+  *   :Info     IPϢ
+  
+         byte0   Ipv4Valid   1ʾѾùIP0ʾδùIP
+         byte1-16  Ipv4Addr  16ַֽIPַ
+         byte 17-32  Ipv4Mask  16ַֽ
+         byte 33-48  Ipv4Gateway 16ַֽ
+         byte 49 Ipv6Valid   1ʾѾùIP0ʾδùIP
+         byte7 50-113  Ipv6Addr  64ַֽIPַ
+         byte8 114-117   Ipv6MaskLen 4ֽڳ
+         byte 118-181  Ipv6Gateway 64ַֽ
+         
+ *   ֵ  : OSP_S32
+ * ˵  :   
+ *
+ * ޸ʷ      :
+ *  1.       : 2014413
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+ OSP_S32 MPAIntf_GetMgmtIpInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_CHAR *IpInfo, OSP_U32 Length)
+
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 *LicenseBuffer = NULL;/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == IpInfo) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 569, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, IpInfo, Length);
+        return RetVal;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_MGMT_IP_INFO;
+    /* 0x4ffʾ */
+    MpaCmd.FruId = 0x4ff;
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_MGMT_IP_CFG_LENGTH;
+    MpaCmd.SdrType = (OSP_U8)(DAL_FRU_ID(DriverId) & 0xff);
+    MpaCmd.WtRd = MPA_READ;
+
+    LicenseBuffer = (OSP_U8 *)MPA_Malloc(MPA_MGMT_IP_CFG_LENGTH);
+    if (NULL == LicenseBuffer)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 570, "MPA malloc memory failed.");
+        return RetVal;
+    }
+    OSAL_MemSet_s(LicenseBuffer, MPA_MGMT_IP_CFG_LENGTH, 0, MPA_MGMT_IP_CFG_LENGTH);
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)LicenseBuffer);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 571, "MPA GetMgmtIpInfo return error.");
+        MPA_Free(LicenseBuffer);
+        LicenseBuffer = NULL;
+        return RetVal;
+    }
+
+    /*DAL·ĳʵʳȡ̵ĳȿ*/
+    OSAL_MemCpy_s((OSP_U8 *)IpInfo, (OSP_U32)min(MPA_MGMT_IP_CFG_LENGTH, (OSP_S32)Length), 
+        (OSP_U8 *)LicenseBuffer, (OSP_U32)min(MPA_MGMT_IP_CFG_LENGTH, (OSP_S32)Length));
+
+    MPA_Free(LicenseBuffer);
+    LicenseBuffer = NULL;
+    return RetVal;
+}
+
+ 
+/******************************************************************************
+*     : MPAIntf_SetTemperatureLimit
+*   : ùIPϢ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*           DriverId   ID ͡FRUIDDEVICE IDϢ   
+*         IpInfo   ֵ
+
+        byte0 Ipv4Valid 1ʾѾùIP0ʾδùIP
+        byte1-16  Ipv4Addr  16ַֽIPַ
+        byte 17-32  Ipv4Mask  16ַֽ
+        byte 33-48  Ipv4Gateway 16ַֽ
+        byte 49 Ipv6Valid 1ʾѾùIP0ʾδùIP
+        byte7 50-113  Ipv6Addr  64ַֽIPַ
+        byte8 114-117 Ipv6MaskLen 4ֽڳ
+        byte 118-181  Ipv6Gateway 64ַֽ
+
+*   :
+
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ    :
+*  1.     : 2014413
+*       : 淫
+*  ޸ : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetMgmtIpInfo(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_CHAR *IpInfo, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S8 *InfoBuffer = NULL;/*ڻMPAѯ*/
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == IpInfo) || (0 == Length))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 572, "MPA finds the pointer is null(0x%p, 0x%p), length(%d).", EnclAddr, IpInfo, Length);
+        return DRV_RETURN_ERROR;
+    }
+    
+    InfoBuffer = (OSP_S8 *)MPA_Malloc(MPA_MGMT_IP_CFG_LENGTH);
+    if(NULL == InfoBuffer)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 573, "MPA malloc memory failed.");
+        return DRV_RETURN_ERROR;
+    }
+    OSAL_MemSet_s(InfoBuffer, MPA_MGMT_IP_CFG_LENGTH, 0, MPA_MGMT_IP_CFG_LENGTH);
+    OSAL_MemCpy_s((OSP_U8 *)InfoBuffer, (OSP_U32)min(182, (OSP_S32)Length), 
+        (OSP_U8 *)IpInfo, (OSP_U32)min(182, (OSP_S32)Length));
+
+    MpaCmd.Cmd = DRV_CMD_SET_MGMT_IP_INFO;
+    MpaCmd.FruId = 0x4ff;
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = MPA_MGMT_IP_CFG_LENGTH;
+    MpaCmd.SdrType =(OSP_U8)(DAL_FRU_ID(DriverId) & 0xff);
+    MpaCmd.WtRd = MPA_WRITE;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)InfoBuffer, (OSP_VOID *)NULL);
+    if(DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_DBG, 574, "MPA SetMgmtIpInfo return error %d.", RetVal);
+    }
+    
+    MPA_Free(InfoBuffer);
+    InfoBuffer = NULL;
+    return RetVal;
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_NotifyOsState
+ *   : Ʒͬϵͳ״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Thres     ֵ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201457
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_NotifyOsState(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_SYS_STATE_S *State)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == State))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 575, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 576, "MPA notify os state, id(0x%llx), slotid(0x%x), state:0x%x.", 
+                    DriverId, State->SlotId, State->State);
+    
+    MpaCmd.Cmd = DRV_CMD_NOTIFY_OS_STATE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DMI_SYS_STATE_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)State, (OSP_VOID *)NULL);
+    
+}
+
+/******************************************************************************
+*     : MPAIntf_SetPhyRate
+*   :  12G phy
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId        ID ͡FRUIDDEVICE IDϢ   
+*             PhyTxPara   Ͳ
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : ֻ12G expanderоƬĿִ֧˹
+* 
+* ޸ʷ      :
+*  1.       : 20140423
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetPhyRate(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Rate)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 577, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_PHY_RATE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(Rate);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Rate, (OSP_VOID *)NULL);    
+}  
+
+/******************************************************************************
+*     : MPAIntf_SetPhyTxPara
+*   :  12G phyͲ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId        ID ͡FRUIDDEVICE IDϢ   
+*             PhyTxPara   Ͳ
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : ֻ12G expanderоƬĿִ֧˹
+* 
+* ޸ʷ      :
+*  1.       : 20140423
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetPhyTxPara(OSP_VOID *EnclAddr, OSP_U64 DriverId, SAS_12G_PHY_TX_PARA_S PhyTxPara)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 578, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_PHY_TX_PARA;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(SAS_12G_PHY_TX_PARA_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&PhyTxPara, (OSP_VOID *)NULL);    
+    
+}    
+
+/******************************************************************************
+*     : MPAIntf_GetPhyTxPara
+*   : ѯ 12G phyͲ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId        ID ͡FRUIDDEVICE IDϢ
+*             Type          
+*             PhyTxPara   Ͳ
+*   : PhyTxPara   Ͳ
+*   ֵ  : OSP_S32
+* ˵  : ֻ12G expanderоƬĿִ֧˹
+* 
+* ޸ʷ      :
+*  1.       : 20140423
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetPhyTxPara(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Type, SAS_12G_PHY_TX_PARA_S *PhyTxPara)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr)
+        || (NULL == PhyTxPara))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 579, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PhyTxPara);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_PHY_TX_PARA;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(SAS_12G_PHY_TX_PARA_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Type, (OSP_VOID *)PhyTxPara);    
+    
+} 
+
+/******************************************************************************
+*     : MPAIntf_GetPhyRxPara
+*   : ѯ 12G phyղ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId        ID ͡FRUIDDEVICE IDϢ
+*             Type          
+*             PhyTxPara   Ͳ
+*   : PhyTxPara   Ͳ
+*   ֵ  : OSP_S32
+* ˵  : ֻ12G expanderоƬĿִ֧˹
+* 
+* ޸ʷ      :
+*  1.       : 20140423
+*           : jiangfanlu
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetPhyRxPara(OSP_VOID *EnclAddr, OSP_U64 DriverId, rx_adapt_results_struct *PhyRxPara)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr)
+        || (NULL == PhyRxPara))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 580, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PhyRxPara);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_PHY_RX_PARA;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(rx_adapt_results_struct);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PhyRxPara);    
+}  
+
+ /******************************************************************************
+ *     : MPAIntf_TestHeartBeat
+ *   : Сϵͳ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ
+ *             Result    Խ
+ *   : Result    Խ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014728
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_TestHeartBeat(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Result)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Result))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Result);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_HEART_BEAT_TEST;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*ݺֵжϳɹʧܣֱΪɹ*/
+    *Result = DRV_RETURN_OK;
+
+    /*ctlຯֱӸݺֵжִн*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)NULL);    
+
+}      
+
+ /******************************************************************************
+ *     : MPAIntf_GetConnecterStatus
+ *   : ѯ״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ
+ *             Status    Խ
+ *   : Status    Խ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014728
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetConnecterStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Status)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Status))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_CONNECTOR_STATUS;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status); 
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetPower5vPgState
+ *   : ѯȰԴ5V PGź״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ
+ *             Status   5v״̬, 0 -ALARM;1-OK
+ *   : Status   5v״̬, 0 -ALARM;1-OK
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201491
+ *           : shufan 00204084
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetPower5vPgState(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *Status)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Status))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_12G_HDS_5VPG_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status); 
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetPower5vPgState
+ *   : ÷Ȱ5V PGźſ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Mode       5V PGźſ, 0 -ر;1-
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201491
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetPower5vPgState(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Mode)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 344, "MPAIntf set power 5v state Id(0x%llx), value(%d).", DriverId, Mode);
+    MpaCmd.Cmd = DRV_CMD_12G_HDS_5VPG_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Mode, (OSP_VOID *)NULL);    
+    
+}
+
+
+ /******************************************************************************
+ *     : MPAIntf_GetCpldBitValue
+ *   : ѯCPLDָĴַָbitλֵ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             RegAddr       CPLDĴַ
+ *             RegBit          CPLDĴַbitλ
+                BitValue        CPLDĴַbitλֵ
+ *   :BitValue        CPLDĴַbitλֵ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201499
+ *           : shufan 00204084
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetCpldBitValue(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32  RegAddr, OSP_U32 RegBit, OSP_U32 *BitValue)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*RegAddrκRegBittarget*/
+    OSP_U32 DataIn[2] = {0, 0};
+
+    if ((NULL == EnclAddr) || (NULL == BitValue))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, BitValue);
+        return DRV_RETURN_ERROR;
+    }
+    MpaCmd.Cmd = DRV_CMD_12G_HDS_CPLDVALUE_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    DataIn[0] = RegAddr;
+    DataIn[1] = RegBit;
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)BitValue);    
+}                    
+
+ /******************************************************************************
+ *     : MPAIntf_SetCpldBitValue
+ *   : CPLDָĴַָbitλֵ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             Type       LED
+ *             Status      LED״̬
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201499
+ *           : shufan 00204084
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+ OSP_S32 MPAIntf_SetCpldBitValue(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32  RegAddr, OSP_U32 RegBit, OSP_U32 BitValue)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*RegAddr/RegBit/BitValuetarget*/
+    OSP_U32 DataIn[3] = {0, 0, 0};
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 344, "MPA finds the pointer is null(0x%p)", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 344, "MPA set cpld bit value Id(0x%llx), addr(0x%x), bit(0x%x), value(0x%x).", DriverId, RegAddr, RegBit, BitValue);
+    MpaCmd.Cmd = DRV_CMD_12G_HDS_CPLDVALUE_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(RegAddr) + sizeof(RegBit) + sizeof(BitValue);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+    
+    DataIn[0] = RegAddr;
+    DataIn[1] = RegBit;
+    DataIn[2] = BitValue;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
+    
+}
+/******************************************************************************
+*     : MPAIntf_GetEnclAllDiskLedStatus
+*   : ѯһӲ̵״̬
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId        ID ͡FRUIDDEVICE IDϢ
+*             TypeBuff  Ӳ״̬buffer
+*             BuffLen   buffer
+*   : TypeBuff  Ӳ״̬buffer
+*   ֵ  : DRV_RETURN_OK - ɹ;ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 20140930
+*           : jiangfanlu
+*    ޸   : ɺ CR-01521364
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetEnclAllDiskLedStatus(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_LIGHT_TYPE_E *TypeBuff, OSP_U32 BuffLen)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_U8 DataIn[2] = {INVALID_VALUE8, INVALID_VALUE8};
+
+    if ((NULL == EnclAddr)
+        || (NULL == TypeBuff)
+        || (0 == BuffLen))/* ˴ȽжǷΪ,ÿҪȲͬ,ڸԴж */
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 1939, "MPA finds the pointer is null(0x%p, 0x%p), buflen is %u.", EnclAddr, TypeBuff, BuffLen);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = (OSP_U8)MpaAddr->DevFrame; /*  */
+    DataIn[1] = (OSP_U8)(BuffLen / sizeof(DMI_LIGHT_TYPE_E)); /* Ӳ̸ */
+    MpaCmd.Cmd = DRV_CMD_GET_ENCL_ALL_DISK_LED;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = (OSP_U16)BuffLen;/* ˴ȽжǷΪ,ÿҪȲͬ,ڸԴж */
+    MpaCmd.SdrType = SDRTYPE_GETALLDISKLEDSTATUS;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)TypeBuff);    
+}
+
+/******************************************************************************
+*     : MPAIntf_GetEnclAllDiskInLoop
+*   : ѯһӲڻ״̬
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId        ID ͡FRUIDDEVICE IDϢ
+*             TypeBuff  Ӳ״̬buffer
+*             BuffLen   buffer
+*   : TypeBuff  Ӳ״̬buffer
+*   ֵ  : DRV_RETURN_OK - ɹ;ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 20140930
+*           : jiangfanlu
+*    ޸   : ɺ CR-01521364
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetEnclAllDiskInLoop(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_DISK_STATUS_E* State, OSP_U32 BuffLen)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_U8 DataIn[2] = {INVALID_VALUE8, INVALID_VALUE8};
+
+    if ((NULL == EnclAddr)
+        || (NULL == State)
+        || (0 == BuffLen))/* ˴ȽжǷΪ,ÿҪȲͬ,ڸԴж */
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 1940, "MPA finds the pointer is null(0x%p, 0x%p), buflen is %u.", EnclAddr, State, BuffLen);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = (OSP_U8)MpaAddr->DevFrame; /*  */
+    DataIn[1] = (OSP_U8)(BuffLen / sizeof(DMI_DISK_STATUS_E)); /* Ӳ̸ */
+    MpaCmd.Cmd = DRV_CMD_GET_ENCL_ALL_DISK_INLOOP;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = (OSP_U16)BuffLen;/* ˴ȽжǷΪ,ÿҪȲͬ,ڸԴж */
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)State);    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetSesHostBufInfoToLog
+ *   : SESBufferϢӡSES־
+ *   : EnclAddr  
+ *             DriverId  
+ *   : 
+ *   ֵ  : DRV_RETURN_OK - ɹ;ʧ
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014126
+ *           : caijingye
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetSesHostBufInfoToLog(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U32 uiTmp = 0;
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 580, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_SES_HOST_BUF_INFO_2_LOG;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&uiTmp, (OSP_VOID *)NULL);    
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetLinkLedStatus
+ *   : sasװԵ˿LINK
+ *   : EnclAddr   
+ *             DriverId   
+ *             LedStatus  01̵23
+ *   : 
+ *   ֵ  : DRV_RETURN_OK - ɹ;ʧ
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20141215
+ *           : caijingye
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetLinkLedStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 LedStatus)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 1940, "MPA finds the pointer is null(0x%p)", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    if (LedStatus >= PORT_LED_BUTT)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 1990, "LedStatus:0x%x", LedStatus);   
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_SES_PORT_LED_STATUS;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(LedStatus);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*sasж˿ںΪ0~5*/
+    if (MpaCmd.DeviceId > 5) 
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 1991, "DevId:0x%x Err", MpaCmd.DeviceId);   
+        return DRV_RETURN_ERROR;
+    }
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&LedStatus, NULL); 
+}
+
+/******************************************************************************
+*     : MPAIntf_ExpLoopTestModeSet
+*   : ô̿˿ڻģʽ
+*   : EnclAddr  
+*             DriverId  
+*             Mode     ģʽ0ʾرпڻأ1ʾпڻأ
+*   : 
+*   ֵ  : OSP_S32 DRV_RETURN_OK - ɹ;ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 20141216
+*           : caijingye
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_ExpLoopTestModeSet(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 LoopMode)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 1940, "MPA finds the pointer is null(0x%p)", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    if (LoopMode >= PORT_LOOP_STATE_BUTT)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 1992, "LoopMode:0x%x Err", LoopMode);   
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_SES_PORT_LOOP_MODE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(LoopMode);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_LOOP;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*sasж˿ںΪ6~9*/
+    if ((MpaCmd.DeviceId > 9) || (MpaCmd.DeviceId < 6))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 1993, "DevId:0x%x Err", MpaCmd.DeviceId);   
+        return DRV_RETURN_ERROR;
+    }
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&LoopMode, NULL); 
+}
+
+ /******************************************************************************
+ *     : MPAIntf_ExpLoopTestModeGet
+ *   : ȡ˿⻷״̬
+ *   : EnclAddr  
+ *             DriverId  
+ *             TestMode  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201518
+ *           : caijingye
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_ExpLoopTestModeGet(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *TestMode)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == TestMode))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 1940, "MPA finds pointer null(0x%p) (0x%p)", EnclAddr, TestMode);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_SES_PORT_LOOP_MODE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_LOOP;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*sasж˿ںΪ6~9*/
+    if ((MpaCmd.DeviceId > 9) || (MpaCmd.DeviceId < 6))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 1993, "DevId:0x%x Err", MpaCmd.DeviceId);   
+        return DRV_RETURN_ERROR;
+    }
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)TestMode); 
+}
+
+ /******************************************************************************
+ *     : MPAIntf_ExpBitSteamTest
+ *   : ̿
+ *   : EnclAddr  
+ *             DriverId  
+ *             Mode      1-ʼԣ0-ѯԽ
+ *             Result   0-ʾɹʧ.bit0ʾ˿phy0Խbit1ʾ˿phy1Խ...bitnʾ˿phynĲԽ
+ *   : 
+ *   ֵ  : OSP_S32 DRV_RETURN_OK - ɹ;ʧ
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20141216
+ *           : caijingye
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_ExpBitSteamTest(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Mode, OSP_U32 *Result)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Result))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 1940, "MPA finds the pointer is null(0x%p, 0x%p)", EnclAddr, Result);
+        return DRV_RETURN_ERROR;
+    }
+
+    if (Mode >= PORT_BITSTREAM_BUTT)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 1994, "Mode:0x%x", Mode);   
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SES_BIT_STREAM_TEST;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*sasж˿ںΪ0~5*/
+    if (MpaCmd.DeviceId > 5) 
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 1995, "DevId:0x%x Err", MpaCmd.DeviceId);   
+        return DRV_RETURN_ERROR;
+    }
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Mode, (OSP_VOID *)Result); 
+}
+
+/******************************************************************************
+*     : MPAIntf_GetMemFree
+*   : ȡBMCʣڴ
+*   : EnclAddr  
+*             DriverId  
+*             Status    
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015818
+*           : h00289393
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetMemFree(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *Status)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Status))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 1940, "MPA finds pointer null(0x%p) (0x%p)", EnclAddr, Status);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_FREE_MEM;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U32) * 2;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)Status);
+}
+
+/******************************************************************************
+*     : MPAIntf_SetSensorErr
+*   : ôȡ쳣
+*   : EnclAddr  
+*             DriverId  
+*             IsErr     
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 20151027
+*           : h00289393
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetSensorErr(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 IsErr)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 333, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 334, "MPA sets SENSOR err, id(0x%llx), value(%d), devframe(0x%x).", 
+                        DriverId, IsErr, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+
+    MpaCmd.Cmd = DRV_CMD_SET_SENSOR_ERR;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SENSOR_TEMP;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&IsErr, (OSP_VOID *)NULL);    
+    
+}
+
+/******************************************************************************
+*     : MPAIntf_SetNumaFlag
+*   : numa
+*   : EnclAddr  
+*             DriverId  
+*             IsErr     
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2016528
+*           : h00289393
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetNumaFlag(OSP_VOID* EnclAddr, OSP_U32 FruId, OSP_BOOL Switch)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 333, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 334, "MPA sets NumaFlag err, id(0x%x), value(%d), devframe(0x%x).", 
+                        FruId, Switch, ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame);
+
+    MpaCmd.Cmd = DRV_CMD_SET_NUMA_FLAG;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_NUMA_FLAG;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Switch, (OSP_VOID *)NULL);    
+    
+}
+
+/******************************************************************************
+ *     : MPAIntf_GetNumaFlag
+ *   : ѯnuma
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             SlotId      ӿڿλ
+ *   : SlotId      ӿڿλ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2016528
+ *           : hulinhui 00289393
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetNumaFlag(OSP_VOID* EnclAddr, OSP_U32 FruId, OSP_BOOL* Switch)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Switch))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 519, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Switch);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_NUMA_FLAG;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_NUMA_FLAG;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Switch);    
+    
+}
+
+/******************************************************************************
+ *     : MPAIntf_SetBbuOnlinetTestSwitch
+ *   : BBU߲ԵĿ״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             SlotId      ӿڿλ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201756
+ *           : chenlifu 00378798
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBbuOnlinetTestSwitch(OSP_VOID* EnclAddr, OSP_U32 FruId, DMI_BBU_TEST_SWITCH_STATE_E SwitchState)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 519, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+ 
+    MpaCmd.Cmd = DRV_CMD_SET_BBU_ONLINE_TEST_SWITCH;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DMI_BBU_TEST_SWITCH_STATE_E);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_SET_BBU_ONLINE_TEST_SWITCH;
+    MpaCmd.WtRd = MPA_WRITE;
+ 
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&SwitchState, (OSP_VOID *)NULL);
+}
+
+
+/******************************************************************************
+ *     : MPAIntf_GetBbuOnlinetTestSwitch
+ *   : ѯBBU߲ԵĿ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             SlotId      ӿڿλ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201754
+ *           : c00378798 
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBbuOnlinetTestSwitch(OSP_VOID* EnclAddr, OSP_U32 FruId, DMI_BBU_TEST_SWITCH_STATE_E* SwitchState)
+{
+    MPA_CMD_INFO_S MpaCmd;
+     
+    if (NULL == EnclAddr || NULL == SwitchState)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 519, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, SwitchState);
+        return DRV_RETURN_ERROR;
+    }
+ 
+    MpaCmd.Cmd = DRV_CMD_GET_BBU_ONLINE_TEST_SWITCH;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DMI_BBU_TEST_SWITCH_STATE_E);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_GET_BBU_ONLINE_TEST_SWITCH;
+    MpaCmd.WtRd = MPA_READ;
+    
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)SwitchState);
+}
+
+
+/******************************************************************************
+ *     : MPA_RegisterEnclIntfToDM
+ *   : MPAע عܽӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131019
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterEnclIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    ENCL_HEADER_OP_S EnclOp;
+    OSAL_MemSet_s((OSP_U8 *)&EnclOp, sizeof(EnclOp), 0, sizeof(EnclOp));
+
+    EnclOp.GetHwVer = MPAIntf_GetHardWareVersion;
+    EnclOp.GetState = NULL;
+    EnclOp.PowerCtrl = MPAIntf_SetFramePowerOnOff;
+    EnclOp.GetFrameNum = MPAIntf_GetFrameNumber;
+    EnclOp.SetFrameNum = MPAIntf_SetFrameNumber;
+    EnclOp.GetLedState = NULL;
+    EnclOp.OperateLed = NULL;
+    EnclOp.GetRunStatus = MPAIntf_GetFramePowerState;
+    EnclOp.SetProductConfig = MPAIntf_SetProductConfig;
+    EnclOp.GetDiskLightType = MPAIntf_GetEnclAllDiskLedStatus;
+    EnclOp.GetDiskState = MPAIntf_GetEnclAllDiskInLoop;
+
+    EnclOp.Opts = NULL;
+    EnclOp.GetSysPowerCost = MPAIntf_GetAllPowerConsumeAndThreshold;
+    EnclOp.GetSysPowerCostLimit = MPAIntf_GetThresholdRatio;
+    EnclOp.SetSysPowerCostLimit = MPAIntf_SetThresholdRatio;
+    EnclOp.SetDmaType = MPAIntf_SetFrameDmaType;
+    EnclOp.GetDmaType = MPAIntf_GetFrameDmaType;
+
+    EnclOp.GetFramePowerType = MPAIntf_GetFramePowerType;
+    EnclOp.GetFrameSupportDiskMaxSpeed = MPAIntf_GetDiskMaxRate;
+    EnclOp.GetFanFullSpeedFlag = MPAIntf_GetFanMaxLevelFlag;
+    EnclOp.SetBbuOnlinetTestSwitch = MPAIntf_SetBbuOnlinetTestSwitch;
+    EnclOp.GetBbuOnlinetTestSwitch = MPAIntf_GetBbuOnlinetTestSwitch;
+
+    EnclOp.SetFramePortMode = MPAIntf_SetFramePortMode;
+    EnclOp.GetFramePortMode = MPAIntf_GetFramePortMode;
+    EnclOp.GetCtrlBoardState = MPAIntf_GetCtrlBoardOnlineState;
+    /* Efuse (used to ctrl disk slot power) can not be seen out of PANGEA. */
+    EnclOp.GetSlotPwrCtrlCfg = MPAIntf_GetFrameSlotPwrCtrlCfg;
+    EnclOp.NotifyCpuAffinity = MPAIntf_NotifyCpuAffinity;
+    EnclOp.NotifyUpgradeStatus = MPAIntf_SetUpgradeState;
+    RetVal = DAL_RegisterEnclOp(DRV_TYPE_DEV, &EnclOp);
+
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 581, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterFruIntfToDM
+ *   : MPAעFRUعܽӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131019
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterFruIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    FRU_HEADER_OP_S FruOp;
+    OSAL_MemSet_s((OSP_U8 *)&FruOp, sizeof(FruOp), 0, sizeof(FruOp));
+
+    FruOp.GetFruType = MPAIntf_GetEnclosureFruType;
+    FruOp.GetHwVer = MPAIntf_GetHardWareVersion;
+    FruOp.GetPeerHwVer = MPAIntf_GetPeerHwVer;
+    FruOp.GetState = MPAIntf_GetPresentState;
+    FruOp.GetPeerState = MPAIntf_GetPeerPresentState;
+    FruOp.PowerCtrl = MPAIntf_SetFruPowerCtrl;
+    FruOp.GetLedState = NULL;
+    FruOp.OperateLed = NULL;
+    FruOp.GetSlot = MPAIntf_GetBoardSlotId;
+    FruOp.Remove = NULL;
+    FruOp.SetFruValidity = MPAIntf_SetFruValid;
+    //.IsFruSupported = NULL;
+    FruOp.GetDfdInfo = MPAIntf_GetIntfCardPowerGoodStatus;
+    FruOp.GetFruPowerEnable = MPAIntf_GetPowerEnState;
+    FruOp.SetFruPowerEnable = MPAIntf_SetPowerEnState;
+    FruOp.SetFruPowerOffDelay = MPAIntf_SetIntfBoardDelay;
+    /*Add by yanajianqiang 00310577 for DTS2015091807980 on 2105.10.10 :ȥ8717DMIѯλͽӿ*/
+    FruOp.GetSubCardState = MPAIntf_GetSubCardState;
+    FruOp.GetSubCardType   = MPAIntf_GetSubCardType;    
+    FruOp.NotifyCtrlReset = MPAIntf_NotifyCtrlReset;
+    FruOp.SetNumaFlag = MPAIntf_SetNumaFlag;
+    FruOp.GetNumaFlag = MPAIntf_GetNumaFlag;
+    FruOp.GetFruSubType = MPAIntf_GetFruSubType;
+    FruOp.GetBoardPowerCost = MPAIntf_GetCtrlBoardPowerCost;
+    FruOp.GetFruMaxSupportSpeed = MPAIntf_GetExpBoardSpeed;
+    FruOp.NotifySysInfo = MPAIntf_NotifySysInfo;
+    FruOp.GetLightBoardPresentStatus = MPAIntf_GetLightBoardPresentStatus;
+    FruOp.SetLightBoardLightStatus = MPAIntf_SetLightBoardLightStatus;
+    FruOp.GetLightBoardLightStatus = MPAIntf_GetLightBoardLightStatus;
+    FruOp.Opts = NULL;
+
+    RetVal = DAL_RegisterFruOp(DRV_TYPE_DEV, &FruOp);
+
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 582, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterTemperatureIntfToDM
+ *   : MPAע¶عܽӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131019
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterTemperatureIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    DAL_TEMP_OP_S TemperatureOp;
+    OSAL_MemSet_s((OSP_U8 *)&TemperatureOp, sizeof(TemperatureOp), 0, sizeof(TemperatureOp));
+
+    TemperatureOp.GetName = MPAIntf_GetTemperatureName;
+    TemperatureOp.GetSubtype = MPAIntf_GetTemperatureSubtype;
+    TemperatureOp.GetStatus = MPAIntf_GetTemperatureState;
+    TemperatureOp.GetTemp = MPAIntf_GetTemperature;
+    TemperatureOp.SetTemp = MPAIntf_SetTemperature;
+    TemperatureOp.GetThres = MPAIntf_GetTemperatureLimit;
+    TemperatureOp.SetThres = MPAIntf_SetTemperatureLimit;
+    TemperatureOp.NotifyTemp = MPAIntf_SystemSetTemperature;
+    TemperatureOp.RestoreDefaultThres = MPAIntf_RestoreTemperatureThres;
+
+
+    RetVal = DAL_RegisterTempOp(DRV_TYPE_DEV, &TemperatureOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 583, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+}
+
+ 
+  /******************************************************************************
+  *     : MPA_RegisterFruTemperatureIntfToDM
+  *   : MPAעFRUۺ¶عܽӿDMģ
+  *   : OSP_VOID  
+  *   : 
+  *   ֵ  : OSP_S32
+  * ˵  : 
+  * 
+  * ޸ʷ      :
+  *  1.       : 2014418
+  *           : 淫
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+ OSP_S32 MPA_RegisterFruTemperatureIntfToDM(OSP_VOID)
+ {
+     OSP_S32 RetVal = DRV_RETURN_ERROR;
+ 
+     DAL_TEMP_SET_OP_S TemperatureOp;
+     OSAL_MemSet_s((OSP_U8 *)&TemperatureOp, sizeof(TemperatureOp), 0, sizeof(TemperatureOp));
+     
+     TemperatureOp.GetName = MPAIntf_GetFruSingleTemperatureName;
+     TemperatureOp.GetSubtype = MPAIntf_GetFruAllTemperatureSubtype;
+     TemperatureOp.GetStatus = MPAIntf_GetFruAllTemperatureState;
+     TemperatureOp.GetTemp = MPAIntf_GetFruAllTemperature;
+     TemperatureOp.SetTemp = MPAIntf_SetFruSingleTemperature;
+     TemperatureOp.GetThres = MPAIntf_GetFruSingleTemperatureLimit;
+     TemperatureOp.SetThres = MPAIntf_SetFruSingleTemperatureLimit;
+     TemperatureOp.NotifyTemp = MPAIntf_SystemSetTemperature;
+     TemperatureOp.RestoreDefaultThres = MPAIntf_RestoreFruTemperatureThres;
+
+     RetVal = DAL_RegisterTempSetOp(DRV_TYPE_DEV, &TemperatureOp);
+     
+     if (DRV_RETURN_OK != RetVal)
+     {
+         DRV_MPA_TRACE(DRV_LOG_WARN, 584, "MPA registers interface function to dm failed(0x%x).", RetVal);
+     }
+ 
+     return RetVal;
+ 
+ }
+
+ /******************************************************************************
+ *     : MPA_RegisterVoltIntfToDM
+ *   : MPAעѹعܽӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131019
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterVoltIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    DAL_VOLT_OP_S VoltageOp;
+    OSAL_MemSet_s((OSP_U8 *)&VoltageOp, sizeof(VoltageOp), 0, sizeof(VoltageOp));
+
+    VoltageOp.GetName = MPAIntf_GetVoltageName;
+    VoltageOp.GetSubtype = MPAIntf_GetVoltageSubtype;
+    VoltageOp.GetStatus = MPAIntf_GetVoltageState;
+    VoltageOp.GetVolt = MPAIntf_GetVoltage;
+    VoltageOp.GetThres = MPAIntf_GetVoltageThreshold;
+    VoltageOp.SetThres = MPAIntf_SetVoltageThreshold;
+
+    RetVal = DAL_RegisterVoltOp(DRV_TYPE_DEV, &VoltageOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 585, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+  
+}
+
+ 
+  /******************************************************************************
+  *     : MPA_RegisterFruVoltIntfToDM
+  *   : MPAעFRUۺϵѹعܽӿDMģ
+  *   : OSP_VOID  
+  *   : 
+  *   ֵ  : OSP_S32
+  * ˵  : 
+  * 
+  * ޸ʷ      :
+  *  1.       : 2014418
+  *           : 淫
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+ OSP_S32 MPA_RegisterFruVoltIntfToDM(OSP_VOID)
+ {
+     OSP_S32 RetVal = DRV_RETURN_ERROR;
+     
+     DAL_VOLT_SET_OP_S VoltageOp;
+     OSAL_MemSet_s((OSP_U8 *)&VoltageOp, sizeof(VoltageOp), 0, sizeof(VoltageOp));
+     
+     VoltageOp.GetName = MPAIntf_GetFruSingleVoltageName;
+     VoltageOp.GetSubtype = MPAIntf_GetFruAllVoltageSubtype;
+     VoltageOp.GetStatus = MPAIntf_GetFruAllVoltageState;
+     VoltageOp.GetVolt = MPAIntf_GetFruAllVoltage;
+     VoltageOp.GetThres = MPAIntf_GetFruSingleVoltageThreshold;
+     VoltageOp.SetThres = MPAIntf_SetFruSingleVoltageThreshold;
+
+     RetVal = DAL_RegisterVoltSetOp(DRV_TYPE_DEV, &VoltageOp);
+     
+     if (DRV_RETURN_OK != RetVal)
+     {
+         DRV_MPA_TRACE(DRV_LOG_WARN, 586, "MPA registers interface function to dm failed(0x%x).", RetVal);
+     }
+ 
+     return RetVal;
+   
+ }
+
+ /******************************************************************************
+ *     : MPA_RegisterFanIntfToDM
+ *   : MPAעعܽӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131019
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterFanIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+   
+    DAL_FAN_OP_S FanOp;
+    OSAL_MemSet_s((OSP_U8 *)&FanOp, sizeof(FanOp), 0, sizeof(FanOp));
+
+    FanOp.GetName = MPAIntf_GetFanName;
+    FanOp.GetStatus = MPAIntf_GetFanState;
+    FanOp.GetLevel = MPAIntf_GetFanLevel;
+    FanOp.GetSpeed = MPAIntf_GetFanSpeed;
+    FanOp.GetMode = MPAIntf_GetFanMode;
+    FanOp.SetMode = MPAIntf_SetFanMode;
+    FanOp.SetLevel = MPAIntf_SetFanLevel;
+    FanOp.GetHwCode = MPAIntf_GetFanHuaweiCode;
+    FanOp.GetSN = MPAIntf_GetFanSn;
+    FanOp.GetUsrLevel = MPAIntf_GetFanUsrLevel;
+    //.Operate = NULL,
+
+    
+    RetVal = DAL_RegisterFanOp(DRV_TYPE_DEV, &FanOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 587, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+    
+}
+
+
+ /******************************************************************************
+ *     : MPA_RegisterPowerIntfToDM
+ *   : MPAעԴعܽӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131019
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterPowerIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    DAL_PS_OP_S PowerOp;
+    OSAL_MemSet_s((OSP_U8 *)&PowerOp, sizeof(PowerOp), 0, sizeof(PowerOp));
+
+    PowerOp.GetName = MPAIntf_GetPowerName;
+    PowerOp.GetStatus = MPAIntf_GetPowerState;
+    PowerOp.GetOutput = MPAIntf_GetPowerOutput;
+    PowerOp.GetRatedPower = MPAIntf_GetPowerRatedOutPut;
+    PowerOp.GetAlert = MPAIntf_GetPowerAlertInfo;
+    PowerOp.Operate = MPAIntf_SetPowerFruOnOff;
+    PowerOp.GetProName = MPAIntf_GetPowerProductName;
+    PowerOp.GetProDate = MPAIntf_GetPowerManufactureDate;
+    PowerOp.GetHwCode = MPAIntf_GetPowerHuaweiCode;
+    PowerOp.GetVersion = MPAIntf_GetPowerSoftwareVersion;
+    PowerOp.GetType = MPAIntf_GetPowerAcDcType;
+    PowerOp.GetVendor = MPAIntf_GetPowerVendor;
+    PowerOp.GetSN = MPAIntf_GetPowerSn;
+    PowerOp.GetInput = MPAIntf_GetPowerInput;
+    PowerOp.SupportHighTemp = MPAIntf_GetPowerSupportSetTempProtect;
+    PowerOp.SetHighTempRule = MPAIntf_SetPowerTempProtect;
+    PowerOp.GetHighTempRule = MPAIntf_GetPowerTempProtect;
+
+    RetVal = DAL_RegisterPsOp(DRV_TYPE_DEV, &PowerOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 588, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+ 
+}
+
+
+ /******************************************************************************
+ *     : MPA_RegisterCpldIntfToDM
+ *   : MPAעCPLDعܽӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131019
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterCpldIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    DAL_CPLD_OP_S CpldOp;
+    OSAL_MemSet_s((OSP_U8 *)&CpldOp, sizeof(CpldOp), 0, sizeof(CpldOp));
+
+    CpldOp.GetName = MPAIntf_GetCpldName;
+    CpldOp.GetFwVer = MPAIntf_GetCpldVersion;
+    CpldOp.GetPeerFwVer = MPAIntf_GetPeerCpldVersion;
+    CpldOp.UpdatePrepare = MPAIntf_UpdateCpldPrepare;    
+    CpldOp.UpdateTransData = MPAIntf_UpdateCpldSendFile;
+    CpldOp.UpdateStart = MPAIntf_UpdateCpldStart;
+    CpldOp.UpdateGetStatus = MPAIntf_GetCpldUpgradeState;
+
+
+    RetVal = DAL_RegisterCpldOp(DRV_TYPE_DEV, &CpldOp);
+
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 589, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+    
+}
+ /******************************************************************************
+ *     : MPA_RegisterFpgaIntfToDM
+ *   : MPAעFpgaعܽӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013118
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterFpgaIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    DAL_FPGA_OP_S FpgaOp;
+    OSAL_MemSet_s((OSP_U8 *)&FpgaOp, sizeof(FpgaOp), 0, sizeof(FpgaOp));
+
+    FpgaOp.GetName = MPAIntf_GetFpgaName;
+    FpgaOp.GetFwVer = MPAIntf_GetFpgaVersion;
+    FpgaOp.UpdatePrepare = MPAIntf_UpdateFpgaPrepare;    
+    FpgaOp.UpdateTransData = MPAIntf_UpdateFpgaSendFile;
+    FpgaOp.UpdateStart = MPAIntf_UpdateFpgaStart;
+
+
+    RetVal = DAL_RegisterFpgaOp(DRV_TYPE_DEV, &FpgaOp);
+
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 590, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+    
+}
+ /******************************************************************************
+ *     : MPA_RegisterBbuIntfToDM
+ *   : MPAעBBUعܽӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131019
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterBbuIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_BBU_OP_S BbuOp;
+    OSAL_MemSet_s((OSP_U8 *)&BbuOp, sizeof(BbuOp), 0, sizeof(BbuOp));
+
+    BbuOp.GetName = MPAIntf_GetBbuName;
+    BbuOp.GetManuDate = MPAIntf_GetBbuManuDate;
+    BbuOp.GetModel = MPAIntf_GetBbuModel;
+    BbuOp.GetVendor = MPAIntf_GetBbuVendorName;
+    BbuOp.GetSn = MPAIntf_GetBbuSn;
+    BbuOp.GetStatus = MPAIntf_GetBbuState;
+    BbuOp.GetChargeStat = MPAIntf_GetBbuWorkState;
+    /* BEGIN by hulinhui 00289393, REASON: DTS2015040709129   */
+    /* ȡذѹظdmi */
+    BbuOp.GetVolt = MPAIntf_GetBbuCellVolt;
+    /* END by hulinhui 00289393*/
+    BbuOp.SetPreAlarmTime = MPAIntf_SetBbuPreLife;
+    BbuOp.GetPreAlarmTime = MPAIntf_GetBbuPreLife;
+    BbuOp.GetLife = MPAIntf_GetBbuLife;
+    BbuOp.SetLife = MPAIntf_SetBbuLife;
+    BbuOp.GetPreAlarmStatus = MPAIntf_GetBbuPreLifeAlarm;
+    BbuOp.GetLifeAlarm = MPAIntf_GetBbuLifeAlarm;
+
+    BbuOp.SetPreAlarmCapacity = MPAIntf_SetBbuCapacityPreAlarm;
+    BbuOp.SetAlarmCapacity = MPAIntf_SetBbuCapacityAlarm;
+    BbuOp.GetPreAlarmCapacity = MPAIntf_GetBbuCapacityPreAlarm;
+    BbuOp.GetAlarmCapacity = MPAIntf_GetBbuCapacityAlarm;
+    BbuOp.GetCapacity = MPAIntf_GetBbuRemainCapacityMah;
+    
+    BbuOp.GetQRemain = MPAIntf_GetBbuRemainingCapacity;
+    BbuOp.GetDischargeCount = MPAIntf_GetBbuDischargeCount;
+    BbuOp.GetErrBitmap = MPAIntf_GetBbuFaultBit;
+
+    /* BEGIN: Added by gouzhengxu 00289460, 2015/9/22  ⵥ:NA, ޸ԭ:CBU̬ѹ */
+    BbuOp.SetOnlineTest = MPAIntf_SetBbuOnlineTest;
+    BbuOp.GetAdjustVoltFlag = MPAIntf_GetAdjustVoltFlag;
+    /* END:   Added by gouzhengxu 00289460, 2015/9/22 ⵥ:NA */
+
+    RetVal = DAL_RegisterBbuOp(DRV_TYPE_DEV,  &BbuOp);
+
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 591, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+    
+}
+
+
+ /******************************************************************************
+ *     : MPA_RegisterMgmtCpuIntfToDM
+ *   : MPAעоƬCPUعܽӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131019
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterMgmtCpuIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    DAL_MGMT_CPU_OP_S MgmtCpuOp;
+    OSAL_MemSet_s((OSP_U8 *)&MgmtCpuOp, sizeof(MgmtCpuOp), 0, sizeof(MgmtCpuOp));
+
+    MgmtCpuOp.GetName = MPAIntf_GetMgmtCpuName;
+    MgmtCpuOp.GetFwVer = MPAIntf_GetMgmtVersion;
+    MgmtCpuOp.UpdatePrepare = MPAIntf_UpdateMgmtPrepare;
+    MgmtCpuOp.UpdateTransData = MPAIntf_UpdateMgmtSendFile;
+    MgmtCpuOp.UpdateStart = MPAIntf_UpdateMgmtStart;
+    MgmtCpuOp.UpdateGetStatus = MPAIntf_GetMgmtUpgradeState;
+    /* BEGIN: Added by shipin, 2014-8-29 18:56:48, ⵥ:DTS2014082908010, ޸ԭ:Ӳ2UƿûСϵͳ¿ƿMACûй̻Ч */
+    MgmtCpuOp.Reset = MPAIntf_SetMgmtReset;
+    /* END: Added by shipin, 2014-8-29 18:56:48 */
+    MgmtCpuOp.GetTime = MPAIntf_GetTime;
+    MgmtCpuOp.SetTime = MPAIntf_SetTime;
+    MgmtCpuOp.GetLog = MPAIntf_GetMgmtCpuLog;
+    MgmtCpuOp.GetDegree = NULL;
+    MgmtCpuOp.SetDegree = NULL;
+    MgmtCpuOp.SetCustomRule = MPAIntf_SetCustomRules;
+    MgmtCpuOp.GetCustomRule = MPAIntf_GetCustomRules;
+    MgmtCpuOp.GetIsoPara = NULL;
+    MgmtCpuOp.SetIsoPara = NULL;
+    MgmtCpuOp.GetRunMode = MPAIntf_GetChipRunMode;
+    MgmtCpuOp.SetRunMode = MPAIntf_SetChipRunMode;
+    MgmtCpuOp.GetKillFlag = MPAIntf_GetSysKillFlag;
+    MgmtCpuOp.SetKillFlag = MPAIntf_SetSysKillFlag;
+    MgmtCpuOp.SetLoginPassword = MPAIntf_SetBackBoardPassword;
+    /* BEGIN: Added by jiangfanlu 00101148, 2014/12/8  ⵥ:CR-01602318, ޸ԭ:CR-01592961-OceanStor 5800 V3 V300R002C00-ϵͳĬûadminƳȲ) */
+    MgmtCpuOp.SetUserAndPassword = MPAIntf_SetUserAndPassword;
+    /* END:   Added by jiangfanlu 00101148, 2014/12/8 ⵥ:CR-01602318 */
+    MgmtCpuOp.NotifyDiskTemp = MPAIntf_SetDiskTemperature;
+    MgmtCpuOp.SetBufferingSwitch = MPAIntf_SetBufferingSwitchFlag;
+    MgmtCpuOp.GetBufferingSwitch = MPAIntf_GetBufferingSwitchFlag;
+    //.NotifyTemp = NULL,
+    MgmtCpuOp.SetSysState = MPAIntf_NotifyOsState;
+    MgmtCpuOp.GetState = MPAIntf_GetCtrlBmcConnectionState;
+    /* BEGIN: Added by shipin, 2016-1-20 18:41:46, ⵥ:ALMCR201601134871051, ޸ԭ:άӸλԿؼģ */
+    MgmtCpuOp.ResetOther = MPAIntf_ResetOtherBoard;
+    /* END: Added by shipin, 2016-1-23 10:24:58 */
+
+
+    RetVal = DAL_RegisterMgmtCpuOp(DRV_TYPE_DEV, &MgmtCpuOp);
+
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 592, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+    
+}
+
+
+ /******************************************************************************
+ *     : MPA_RegisterDiskIntfToDM
+ *   : MPAעӲعܽӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131019
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterDiskIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    DAL_DISK_SAS_OP_S DiskOp;
+    OSAL_MemSet_s((OSP_U8 *)&DiskOp, sizeof(DiskOp), 0, sizeof(DiskOp));
+
+    DiskOp.GetName = MPAIntf_GetDiskName;
+    DiskOp.GetState = MPAIntf_GetDiskInLoopStatus;
+    DiskOp.GetPower = MPAIntf_GetDiskPowerStatus;
+    DiskOp.SetPower = MPAIntf_SetDiskPowerStatus;
+    DiskOp.SwitchPhy = MPAIntf_SetDiskSwitchStatus;
+    DiskOp.GetPhySwitch = MPAIntf_GetDiskSwitchStatus;
+    DiskOp.OperateLed = MPAIntf_SetDiskLedStatus;
+    DiskOp.GetLedState = MPAIntf_GetDiskLedStatus;
+    DiskOp.GetPhyErr = MPAIntf_GetDiskPhyErr;
+    /* BEGIN: Added by shipin, 2015-6-4 15:48:45, ????:AR-0000942937, ????:SES?????? */
+    DiskOp.LoopBackTestStart = MPAIntf_DiskLoopBackStart;
+    DiskOp.LoopBackTestStop = MPAIntf_DiskLoopBackStop;
+    DiskOp.LoopBackTestCheck= MPAIntf_DiskLoopBackCheck;
+    /* END: Added by shipin, 2015-6-4 15:48:45 */
+    DiskOp.GetPresent = MPAIntf_GetDiskPresent;
+    DiskOp.SendTemperature = NULL;
+    DiskOp.GetStatusInfo = MPAIntf_GetDiskStatusInfo;
+    DiskOp.GetSubHealthyState = NULL;
+
+
+    RetVal = DAL_RegisterDiskSasOp(DRV_TYPE_DEV, &DiskOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 593, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+}
+
+
+ /******************************************************************************
+ *     : MPA_RegisterElabelIntfToDM
+ *   : MPAעӱǩعܽӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131022
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterElabelIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    DAL_MANU_ELABEL_OP_S ElabelOp;
+    OSAL_MemSet_s((OSP_U8 *)&ElabelOp, sizeof(ElabelOp), 0, sizeof(ElabelOp));
+
+    ElabelOp.GetElabel = MPAIntf_GetElectronicLabel;
+    ElabelOp.SetElabel = MPAIntf_SetElectronicLabel;
+    ElabelOp.GetPeerElabel = MPAIntf_GetPeerElabel;
+
+
+    RetVal = DAL_RegisterElabelOp(DRV_TYPE_DEV, &ElabelOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 594, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+    
+}
+
+/******************************************************************************
+*     : MPA_RegisterSaleElabelIntfToDM
+*   : MPAעưӱǩعܽӿDMģ
+*   : OSP_VOID  
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 20141118
+*           : chenkeren 00221000
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPA_RegisterSaleElabelIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    DAL_MANU_ELABEL_OP_S SaleElabelOp;
+    OSAL_MemSet_s((OSP_U8 *)&SaleElabelOp, sizeof(SaleElabelOp), 0, sizeof(SaleElabelOp));
+
+    SaleElabelOp.GetElabel = MPAIntf_GetCtrlBoardMemoryElectronicLabel;
+    SaleElabelOp.SetElabel = MPAIntf_SetCtrlBoardE2ElectronicLabel;
+    SaleElabelOp.GetPeerElabel = NULL;
+
+    RetVal = DAL_RegisterSaleElabelOp(DRV_TYPE_DEV, &SaleElabelOp);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 2672, "MPA registers ctrl interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterMacIntfToDM
+ *   : MPAעMACַعܽӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131022
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterMacIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    DAL_MANU_MAC_OP_S MacOp;
+    OSAL_MemSet_s((OSP_U8 *)&MacOp, sizeof(MacOp), 0, sizeof(MacOp));
+
+    MacOp.GetMac = MPAIntf_GetBackBoardMac;
+    MacOp.SetMac = MPAIntf_SetBackBoardMac;
+
+
+    RetVal = DAL_RegisterMacOp(DRV_TYPE_DEV, &MacOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 595, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+    
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterSnIntfToDM
+ *   : MPAעSNعܽӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131022
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterSnIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    DAL_MANU_SN_OP_S SnOp;
+    OSAL_MemSet_s((OSP_U8 *)&SnOp, sizeof(SnOp), 0, sizeof(SnOp));
+
+    SnOp.GetSn = MPAIntf_GetBackBoardSN;
+    SnOp.SetSn = MPAIntf_SetBackBoardSN;
+
+
+    RetVal = DAL_RegisterSnOp(DRV_TYPE_DEV, &SnOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 596, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+    
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterProLogoIntfToDM
+ *   : MPAע־عܽӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131022
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterProLogoIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    DAL_MANU_PROLOGO_OP_S LogoOp;
+    OSAL_MemSet_s((OSP_U8 *)&LogoOp, sizeof(LogoOp), 0, sizeof(LogoOp));
+
+    LogoOp.GetProLogo = MPAIntf_GetBackBoardLogo;
+    LogoOp.SetProLogo = MPAIntf_SetBackBoardLogo;
+
+
+    RetVal = DAL_RegisterPrologoOp(DRV_TYPE_DEV, &LogoOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 597, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+    
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterVendorIntfToDM
+ *   : MPAע᳧عܽӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131022
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterVendorIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    DAL_MANU_VENDOR_OP_S VendorOp;
+    OSAL_MemSet_s((OSP_U8 *)&VendorOp, sizeof(VendorOp), 0, sizeof(VendorOp));
+
+    VendorOp.GetVendor = MPAIntf_GetBackBoardVendor;
+    VendorOp.SetVendor = MPAIntf_SetBackBoardVendor;
+
+
+    RetVal = DAL_RegisterVendorOp(DRV_TYPE_DEV, &VendorOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 598, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+    
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterBrandInfoToDM
+ *   : MPAעϢӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131022
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterBrandInfoToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    DAL_MANU_BRAND_OP_S BrandOp;
+    OSAL_MemSet_s((OSP_U8 *)&BrandOp, sizeof(BrandOp), 0, sizeof(BrandOp));
+
+    BrandOp.GetBrand = MPAIntf_GetBackBoardBrand;
+    BrandOp.SetBrand = MPAIntf_SetBackBoardBrand;
+
+
+    RetVal = DAL_RegisterBrandOp(DRV_TYPE_DEV, &BrandOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 599, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+    
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterEsnInfoToDM
+ *   : MPAעESNϢӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131022
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterEsnInfoToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    DAL_MANU_ESN_OP_S EsnOp;
+    OSAL_MemSet_s((OSP_U8 *)&EsnOp, sizeof(EsnOp), 0, sizeof(EsnOp));
+
+    EsnOp.GetESN = MPAIntf_GetBackboardESN;
+    EsnOp.SetESN = MPAIntf_SetBackboardESN;
+
+
+    RetVal = DAL_RegisterEsnOp(DRV_TYPE_DEV, &EsnOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 600, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+    
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterLicenseInfoToDM
+ *   : MPAעLICENSEϢӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131022
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterLicenseInfoToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    DAL_MANU_LICENSE_OP_S LicenseOp;
+    OSAL_MemSet_s((OSP_U8 *)&LicenseOp, sizeof(LicenseOp), 0, sizeof(LicenseOp));
+
+    LicenseOp.GetLicense = MPAIntf_GetBackBoardLicense;
+    LicenseOp.SetLicense = MPAIntf_SetBackBoardLicense;
+
+
+    RetVal = DAL_RegisterLicenseOp(DRV_TYPE_DEV, &LicenseOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 601, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+    
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterProLogoInfoToDM
+ *   : MPAעproduct logoϢӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131022
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterProLogoInfoToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    DAL_MANU_PROMODEL_OP_S PromodelOp;
+    OSAL_MemSet_s((OSP_U8 *)&PromodelOp, sizeof(PromodelOp), 0, sizeof(PromodelOp));
+
+    PromodelOp.GetProModel = MPAIntf_GetBackBoardModel;
+    PromodelOp.SetProModel = MPAIntf_SetBackBoardModel;
+    PromodelOp.GetOemProModel = MPAIntf_GetBackBoardOemModel;
+    PromodelOp.SetOemProModel = MPAIntf_SetBackBoardOemModel;
+
+
+    RetVal = DAL_RegisterPromodelOp(DRV_TYPE_DEV, &PromodelOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 602, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+    
+}
+
+ /******************************************************************************
+ *     : MPA_RegisteAlarmInfoToDM
+ *   : MPAעalarmϢӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131022
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisteAlarmInfoToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    ALARM_ELEMENT_OP_S AlarmOp;
+    OSAL_MemSet_s((OSP_U8 *)&AlarmOp, sizeof(AlarmOp), 0, sizeof(AlarmOp));
+
+    AlarmOp.GetName = MPAIntf_GetAlarmName;
+    AlarmOp.GetType = MPAIntf_GetAlarmType;
+    AlarmOp.GetInfo = MPAIntf_GetAlarmInfo;
+
+
+    RetVal = DAL_RegisterAlarmElementOp(DRV_TYPE_DEV, &AlarmOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 603, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+    
+}
+
+
+ 
+  /******************************************************************************
+  *     : MPA_RegisteFruAllAlarmInfoToDM
+  *   : MPAעalarmϢӿDMģ
+  *   : OSP_VOID  
+  *   : 
+  *   ֵ  : OSP_S32
+  * ˵  : 
+  * 
+  * ޸ʷ      :
+  *  1.       : 2014419
+  *           : 淫
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+ OSP_S32 MPA_RegisteFruAllAlarmInfoToDM(OSP_VOID)
+ {
+     OSP_S32 RetVal = DRV_RETURN_ERROR;
+     DAL_ALARM_SET_OP_S AlarmOp;
+     OSAL_MemSet_s((OSP_U8 *)&AlarmOp, sizeof(AlarmOp), 0, sizeof(AlarmOp));
+     
+     AlarmOp.GetName = MPAIntf_GetFruAllAlarmName;
+     AlarmOp.GetType = MPAIntf_GetFruAllAlarmType;
+     AlarmOp.GetInfo = MPAIntf_GetFruAllAlarmInfo;
+ 
+     RetVal = DAL_RegisterAlarmSetOp(DRV_TYPE_DEV, &AlarmOp);
+     
+     if (DRV_RETURN_OK != RetVal)
+     {
+         DRV_MPA_TRACE(DRV_LOG_WARN, 604, "MPA registers interface function to dm failed(0x%x).", RetVal);
+     }
+ 
+     return RetVal;
+ 
+     
+ }
+
+ /******************************************************************************
+ *     : MPA_RegisterFrameConfigInfoToDM
+ *   : MPAעϢӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131022
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterFrameConfigInfoToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    DAL_CONF_PICKER_S FrameConfInfoOp;
+    OSAL_MemSet_s((OSP_U8 *)&FrameConfInfoOp, sizeof(FrameConfInfoOp), 0, sizeof(FrameConfInfoOp));
+
+    FrameConfInfoOp.GetEnclType = MPAIntf_GetFrameMode;
+    FrameConfInfoOp.GetFruType = MPAIntf_GetEnclosureFruType;
+    FrameConfInfoOp.GetEnclFruList = MPAIntf_GetEnclosureFruList;
+    FrameConfInfoOp.GetFruSlotName = MPAIntf_GetEnclosureFruSilkScreen;
+    FrameConfInfoOp.GetFruVisibleMap = MPAIntf_GetEnclFruVisibleMap;
+    FrameConfInfoOp.SwitchAllPortOnEncl = MPAIntf_SwitchAllPortOnEncl;
+
+    RetVal = DAL_RegisterConfPicker(DRV_TYPE_DEV, &FrameConfInfoOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 605, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+    
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterPortIntfToDM
+ *   : MPAע˿ϢӿDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013114
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterPortIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    DAL_PORT_SAS_OP_S SasOp;
+    OSAL_MemSet_s((OSP_U8 *)&SasOp, sizeof(SasOp), 0, sizeof(SasOp));
+
+    SasOp.GetPhyRate = MPAIntf_GetPortPhysRate;
+    SasOp.GetLinkRate = MPAIntf_GetPortLinkRate;
+    SasOp.GetPortStatus = MPAIntf_GetPortLinkStatus;
+    SasOp.GetPeerPortStatus = MPAIntf_GetPeerPortLinkStatus;
+    SasOp.SwitchPort = MPAIntf_SetPortSwitch;
+    SasOp.GetPortSwitch = MPAIntf_GetPortSwitch;
+    SasOp.GetWidth = MPAIntf_GetPortWidth;
+    SasOp.GetMaxWidth = MPAIntf_GetPortMaxWidth;
+    SasOp.GetUpOrDownType = MPAIntf_GetPortUpDownType;
+    SasOp.GetAttachedWwn = MPAIntf_GetAttachedWwn;
+    SasOp.GetErrorCode = MPAIntf_GetPortPhyErr;
+    SasOp.ClearErrorCode = MPAIntf_ClearAllPhyErr;
+    SasOp.GetPhySwitch = MPAIntf_GetPortPhySwitch;
+    SasOp.GetSfpSupport = MPAIntf_GetSfpSupport;
+    SasOp.GetAttachedPortMode = MPAIntf_GetAttPortInitOrExp;
+    SasOp.GetAttachedPhyId = MPAIntf_GetAttPortFirstPhyId;
+    SasOp.GetPhyId = MPAIntf_GetLocalPortFirstPhyId;
+    SasOp.GetWwn = MPAIntf_GetPortWwn;
+    /* BEGIN: Added by shipin, 2015-6-4 15:48:45, ????:AR-0000942937, ????:SES?????? */
+    SasOp.LoopBackTestStart = MPAIntf_PortLoopBackStart;
+    SasOp.LoopBackTestStop = MPAIntf_PortLoopBackStop;
+    SasOp.LoopBackTestCheck = MPAIntf_PortLoopBackCheck;
+    SasOp.LoopBackPeerStart = MPAIntf_PortLoopBackPeerStart;
+    SasOp.LoopBackPeerStop= MPAIntf_PortLoopBackPeerStop;
+    SasOp.LoopBackPeerCheck= MPAIntf_PortLoopBackPeerCheck;
+    /* END: Added by shipin, 2015-6-4 15:48:45 */
+    RetVal = DAL_RegisterPortSasOp(DRV_TYPE_DEV, &SasOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 606, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+    
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterLedIntfToDM
+ *   : עledDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2013118
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterLedIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_LED_OP_S LedOp;
+    OSAL_MemSet_s((OSP_U8 *)&LedOp, sizeof(LedOp), 0, sizeof(LedOp));
+
+    LedOp.Operate = MPAIntf_SetLedStatus;
+    LedOp.GetStatus = MPAIntf_GetLedStatus;
+
+
+    RetVal = DAL_RegisterLedOp(DRV_TYPE_DEV, &LedOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 607, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterMceValidIntfToDM
+ *   : עMCEЧϢ麯DALģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131129
+ *           : zhanwenbin 90003961
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterMceValidIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    DAL_DIMM_OP_S DimmOp;
+    OSAL_MemSet_s((OSP_U8 *)&DimmOp, sizeof(DimmOp), 0, sizeof(DimmOp));
+
+    DimmOp.GetDimmMceInfo = MPAIntf_GetDimmMceInfo;
+
+
+    RetVal = DAL_RegisterDimmOp(DRV_TYPE_DEV, &DimmOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 608, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+    
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterEthConfInfoToDM
+ *   : עģʽDMģ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131127
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterEthConfInfoToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_MANU_ETH_CONF_OP_S EthConfOp;
+    OSAL_MemSet_s((OSP_U8 *)&EthConfOp, sizeof(EthConfOp), 0, sizeof(EthConfOp));
+
+    EthConfOp.GetEthConfig = MPAIntf_GetBackBoardEthConfig;
+    EthConfOp.SetEthConfig = MPAIntf_SetBackBoardEthConfig;
+
+    
+    RetVal = DAL_RegisterEthConfOp(DRV_TYPE_DEV, &EthConfOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 609, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+}
+
+/******************************************************************************
+*     : MPA_RegisterSfpIntfToDM
+*   : עsasģϢdm
+*   : OSP_VOID  
+*   : 
+*   ֵ  : DRV_RETURN_OK - ɹ; ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2014327
+*           : jiangfanlu 00101148
+*    ޸   : ɺ
+*  2.       : 201597
+*           : daiyanjun 900039
+*    ޸   : DTS2015090708287
+******************************************************************************/
+OSP_S32 MPA_RegisterSfpIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_SFP_OP_S SfpOp;
+    OSAL_MemSet_s((OSP_U8 *)&SfpOp, sizeof(SfpOp), 0, sizeof(SfpOp));
+
+    SfpOp.GetName = NULL;
+    SfpOp.GetInfo = MPAIntf_GetSfpDetailInfo;
+    SfpOp.GetQsfpInfo = MPAIntf_GetQsfpInfo;
+    SfpOp.SetQsfpInfo = MPAIntf_SetQsfpInfo;
+    SfpOp.Operate = NULL;
+    SfpOp.GetMaxSpeed = NULL;
+    SfpOp.GetState = MPAIntf_GetSfpState;
+    SfpOp.GetPresent = MPAIntf_GetSfpPresent;
+    SfpOp.GetRawInfo = MPAIntf_GetSfpInfo;
+  /*added by hulinhui 00289393 DTS2015042901137ؽӿڿģ 20150506*/
+    SfpOp.SetPowerStatus = MPAIntf_SetIoCardSfpSleepStatus;
+  /*ended by hulinhui 00289393*/
+    
+    RetVal = DAL_RegisterSfpOp(DRV_TYPE_DEV, &SfpOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 611, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPA_RegiserChipIntfToDM
+ *   : עchipоƬ(BBU/Դ)
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131211
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegiserChipIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_CHIP_OP_S ChipOp;
+    OSAL_MemSet_s((OSP_U8 *)&ChipOp, sizeof(ChipOp), 0, sizeof(ChipOp));
+
+    ChipOp.GetName = MPAIntf_GetChipName;
+    ChipOp.GetFwVer = MPAIntf_GetChipFwVer;
+    ChipOp.UpdatePrepare = MPAIntf_UpdataChipPrePare;
+    ChipOp.UpdateTransData = MPAIntf_UpdataChipTransData;
+    ChipOp.UpdateStart = MPAIntf_UpdataChipStart;
+    ChipOp.UpdateGetStatus = MPAIntf_GetChipUpdateStatus;
+    ChipOp.Reset = NULL;
+    ChipOp.GetLog = NULL;
+    ChipOp.SupportUpgrade = MPAIntf_GetChipSupportUpgrade;
+    /* BEGIN: Added by jiangfanlu 00101148, 2014/8/8  ⵥ:AR-0000787332, ޸ԭ:עúͲѯӿڿƬѡӿڵdmichip */
+    ChipOp.SetFwId = MPAIntf_SetIoCardImgCs;
+    ChipOp.GetFwId = MPAIntf_GetIoCardImgCs;
+    /* END:   Added by jiangfanlu 00101148, 2014/8/8 ⵥ:AR-0000787332 */
+
+    
+    RetVal = DAL_RegisterChipOp(DRV_TYPE_DEV, &ChipOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 612, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterEthSwitchToDM
+ *   : עؽӿ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131225
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterEthSwitchToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_PORT_ETH_SWITCH_OP_S EthSwitchOp;
+    OSAL_MemSet_s((OSP_U8 *)&EthSwitchOp, sizeof(EthSwitchOp), 0, sizeof(EthSwitchOp));
+
+    EthSwitchOp.GetMac = MPAIntf_GetEthSwitchMac;
+    EthSwitchOp.SetMac = MPAIntf_SetEthSwitchMac;
+    EthSwitchOp.SwitchPort = MPAIntf_SetEthSwitchOnoff;
+    EthSwitchOp.GetPortSwitch = MPAIntf_GetPortSwitch;
+    EthSwitchOp.ResetPort = MPAIntf_ResetEthSwitchPort;
+    EthSwitchOp.GetPortStatus = MPAIntf_GetEthSwitchStatus;
+    EthSwitchOp.GetLinkRate = MPAIntf_GetEthSwitchSpeed;
+    EthSwitchOp.SetVlanSwitch = MPAIntf_SetVlanSwitch;
+  EthSwitchOp.GetVlanSwitch = MPAIntf_GetVlanSwitch;
+    
+    RetVal = DAL_RegisterPortEthSwitchOp(DRV_TYPE_DEV, &EthSwitchOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 613, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterEthSwitchC01ToDM
+ *   : עc01ӿ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201438
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterEthSwitchC01ToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_ETH_SWITCH_OP_S EthSwitchOp;
+    OSAL_MemSet_s((OSP_U8 *)&EthSwitchOp, sizeof(EthSwitchOp), 0, sizeof(EthSwitchOp));
+
+    EthSwitchOp.GetMacValidity = MPAIntf_GetEthStaticMacValid;
+    EthSwitchOp.SetMac = MPAIntf_SetEthStaticMac;
+
+    
+    RetVal = DAL_RegisterEthSwitchOp(DRV_TYPE_DEV, &EthSwitchOp);
+    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 614, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterShakeIntfToDM
+ *   : ע־dm
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131226
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterShakeIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_SHAKE_OP_S ShakeOp;
+    OSAL_MemSet_s((OSP_U8 *)&ShakeOp, sizeof(ShakeOp), 0, sizeof(ShakeOp));
+
+    ShakeOp.GetName = NULL;
+    ShakeOp.GetShakeRecord = MPAIntf_GetShakeSensorRecord;
+    ShakeOp.Op = NULL;
+
+    
+    RetVal = DAL_RegisterShakeOp(DRV_TYPE_DEV, &ShakeOp);    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 615, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterWifiIntfToDM
+ *   : עwifidm
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2014120
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterWifiIntfToDM(OSP_VOID)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_WIFI_OP_S WifiOp; 
+    OSAL_MemSet_s((OSP_U8 *)&WifiOp, sizeof(WifiOp), 0, sizeof(WifiOp));
+
+    WifiOp.GetWifiEarPowerStatus = MPAIntf_GetEarPowerState;
+    WifiOp.SetUsbSwtich = MPAIntf_SetUsbHubChannel;
+
+    
+    RetVal = DAL_RegisterWifiOp(DRV_TYPE_DEV, &WifiOp);    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 616, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+
+}
+
+ /******************************************************************************
+ *     : MPA_RegisterOopsInfoToDM
+ *   : עϵͳoopsϢ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201428
+ *           : qintianyi 90005776
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_RegisterOopsInfoToDM(OSP_VOID)
+{
+#ifdef PANGEA_USER_MODE
+/*û̬mpa agentע*/
+    return RETURN_OK;
+#else
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_OOPS_INFO_OP_S OopsInfo;
+    OSAL_MemSet_s((OSP_U8 *)&OopsInfo, sizeof(OopsInfo), 0, sizeof(OopsInfo));
+
+    OopsInfo.GetOopsInfo = MPAIntf_GetOopsInfo;
+    OopsInfo.ClearOopsInfo = MPAIntf_ClearOopsInfo;
+
+    
+    RetVal = DAL_RegisterOopsInfoOp(DRV_TYPE_DEV, &OopsInfo);    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 617, "MPA registers interface function to dm failed(0x%x).", RetVal);
+    }
+
+    return RetVal;
+#endif
+}
+ 
+ 
+  /******************************************************************************
+  *     : MPA_RegisterIpConfigToDM
+  *   : עIPϢ
+  *   : OSP_VOID  
+  *   : 
+  *   ֵ  : OSP_S32
+  * ˵  : 
+  * 
+  * ޸ʷ    :
+  *  1.     : 201428
+  *         : shufan 204084
+  *    ޸   : ɺ
+  *
+  ******************************************************************************/
+ OSP_S32 MPA_RegisterIpConfigToDM(OSP_VOID)
+ {
+   OSP_S32 RetVal = DRV_RETURN_ERROR;
+   DAL_IP_CONF_OP_S IpConfigInfo; 
+     OSAL_MemSet_s((OSP_U8 *)&IpConfigInfo, sizeof(IpConfigInfo), 0, sizeof(IpConfigInfo));
+ 
+   IpConfigInfo.GetIp = MPAIntf_GetMgmtIpInfo;
+   IpConfigInfo.SetIp = MPAIntf_SetMgmtIpInfo;
+   /* Begin: added by liuzhiqiang 00192096 for DTS2015082608808 @2015-9-6 */
+   IpConfigInfo.GetIpOwner = MPAIntf_GetMgmtIpOwner;
+     /* End: added by liuzhiqiang 00192096 for DTS2015082608808 @2015-9-6 */
+   
+   RetVal = DAL_RegisterIpConfOp(DRV_TYPE_DEV, &IpConfigInfo);    
+   if (DRV_RETURN_OK != RetVal)
+   {
+     DRV_MPA_TRACE(DRV_LOG_WARN, 618, "MPA registers interface function to dm failed(0x%x).", RetVal);
+   }
+ 
+   return RetVal;
+ 
+ }
+ /******************************************************************************
+ *     : MPA_RegisterIntfToDM
+ *   : MPADMģעӿ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_VOID
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131019
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_VOID MPA_RegisterIntfToDM(OSP_VOID)
+{
+    (OSP_VOID)MPA_RegisterEnclIntfToDM();
+    (OSP_VOID)MPA_RegisterFruIntfToDM();
+    (OSP_VOID)MPA_RegisterTemperatureIntfToDM();
+    (OSP_VOID)MPA_RegisterFruTemperatureIntfToDM();    
+    (OSP_VOID)MPA_RegisterVoltIntfToDM();
+    (OSP_VOID)MPA_RegisterFruVoltIntfToDM();
+    (OSP_VOID)MPA_RegisterFanIntfToDM();
+    (OSP_VOID)MPA_RegisterPowerIntfToDM();
+    (OSP_VOID)MPA_RegisterCpldIntfToDM();
+    (OSP_VOID)MPA_RegisterBbuIntfToDM();
+    (OSP_VOID)MPA_RegisterMgmtCpuIntfToDM();
+    (OSP_VOID)MPA_RegisterDiskIntfToDM();
+    (OSP_VOID)MPA_RegisterElabelIntfToDM();
+    (OSP_VOID)MPA_RegisterSaleElabelIntfToDM();    
+    (OSP_VOID)MPA_RegisterMacIntfToDM();
+    (OSP_VOID)MPA_RegisterSnIntfToDM();
+    (OSP_VOID)MPA_RegisterProLogoIntfToDM();
+    (OSP_VOID)MPA_RegisterVendorIntfToDM();
+    (OSP_VOID)MPA_RegisterBrandInfoToDM();
+    (OSP_VOID)MPA_RegisterEsnInfoToDM();
+    (OSP_VOID)MPA_RegisterLicenseInfoToDM();
+    (OSP_VOID)MPA_RegisterProLogoInfoToDM();
+    (OSP_VOID)MPA_RegisterEthConfInfoToDM();
+    (OSP_VOID)MPA_RegisterMceValidIntfToDM();
+    (OSP_VOID)MPA_RegisteAlarmInfoToDM();
+    (OSP_VOID)MPA_RegisteFruAllAlarmInfoToDM();
+    (OSP_VOID)MPA_RegisterFrameConfigInfoToDM();
+    (OSP_VOID)MPA_RegisterPortIntfToDM();
+    (OSP_VOID)MPA_RegisterLedIntfToDM();  
+    (OSP_VOID)MPA_RegisterFpgaIntfToDM();
+    (OSP_VOID)MPA_RegisterSfpIntfToDM();
+    (OSP_VOID)MPA_RegiserChipIntfToDM();
+    (OSP_VOID)MPA_RegisterEthSwitchToDM();
+    (OSP_VOID)MPA_RegisterEthSwitchC01ToDM();
+    (OSP_VOID)MPA_RegisterShakeIntfToDM();
+    (OSP_VOID)MPA_RegisterWifiIntfToDM();
+    (OSP_VOID)MPA_RegisterOopsInfoToDM();
+    (OSP_VOID)MPA_RegisterIpConfigToDM();
+  
+ }
+
+ /******************************************************************************
+ *     : MPA_UnRegisterIntfToDM
+ *   : עעᵽDMģĹܽӿ
+ *   : OSP_VOID  
+ *   : 
+ *   ֵ  : OSP_VOID
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131024
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_VOID MPA_UnRegisterIntfToDM(OSP_VOID)
+{
+    DAL_UnregisterEnclOp(DRV_TYPE_DEV);
+    DAL_UnregisterFruOp(DRV_TYPE_DEV);
+    DAL_UnregisterTempOp(DRV_TYPE_DEV);
+    DAL_UnregisterVoltOp(DRV_TYPE_DEV);
+    DAL_UnregisterFanOp(DRV_TYPE_DEV);
+    DAL_UnregisterPsOp(DRV_TYPE_DEV);
+    DAL_UnregisterCpldOp(DRV_TYPE_DEV);
+    DAL_UnregisterBbuOp(DRV_TYPE_DEV);
+    DAL_UnegisterMgmtCpuOp(DRV_TYPE_DEV);
+    DAL_UnregisterDiskSasOp(DRV_TYPE_DEV);
+    DAL_UnregisterElabelOp(DRV_TYPE_DEV);
+    DAL_UnregisterSaleElabelOp(DRV_TYPE_DEV);
+    DAL_UnregisterMacOp(DRV_TYPE_DEV);
+    DAL_UnregisterSnOp(DRV_TYPE_DEV);
+    DAL_UnregisterPrologoOp(DRV_TYPE_DEV);
+    DAL_UnregisterVendorOp(DRV_TYPE_DEV);
+    DAL_UnregisterBrandOp(DRV_TYPE_DEV);
+    DAL_UnregisterEsnOp(DRV_TYPE_DEV);
+    DAL_UnregisterLicenseOp(DRV_TYPE_DEV);
+    DAL_UnregisterPromodelOp(DRV_TYPE_DEV);
+    DAL_UnregisterEthConfOp(DRV_TYPE_DEV);
+    DAL_UnregisterDimmOp(DRV_TYPE_DEV);
+    DAL_UnregisterAlarmElementOp(DRV_TYPE_DEV);
+    DAL_UnregisterConfPicker(DRV_TYPE_DEV);
+    DAL_UnregisterPortSasOp(DRV_TYPE_DEV);
+    DAL_UnregisterLedOp(DRV_TYPE_DEV);
+    DAL_UnregisterFpgaOp(DRV_TYPE_DEV);
+    DAL_UnregisterSfpOp(DRV_TYPE_DEV);
+    DAL_UnregisterChipOp(DRV_TYPE_DEV);
+    DAL_UnregisterPortEthSwitchOp(DRV_TYPE_DEV);
+    DAL_UnregisterEthSwitchOp(DRV_TYPE_DEV);
+    DAL_UnregisterShakeOp(DRV_TYPE_DEV);
+    DAL_UnregisterWifiOp(DRV_TYPE_DEV);
+#ifndef PANGEA_USER_MODE
+/*û̬mpa agentע*/
+    DAL_UnregisterOopsInfoOp(DRV_TYPE_DEV);
+#endif
+  DAL_UnregisterIpConfOp(DRV_TYPE_DEV);
+    DAL_UnregisterTempSetOp(DRV_TYPE_DEV);
+    DAL_UnregisterVoltSetOp(DRV_TYPE_DEV);
+    DAL_UnregisterAlarmSetOp(DRV_TYPE_DEV);
+}  
+ 
+ /******************************************************************************
+ *     : MPA_GetDtfIntfParameter
+ *   : MPAṩItestװӿڣװʽ
+ *   : Operate       
+ *             EnclosureWWN  WWN
+ *             DataBuff      buffer
+ *             BuffLen      buffer 
+ *   : DataBuff      buffer
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20131217
+ *           : 淫
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPA_GetDtfIntfParameter(DMI_ENCLOSURE_OPCODE Operate, OSP_U64 EnclosureWWN, OSP_U32 BoardSlot,
+                         DEVICE_ID_INFO_S *DataBuff, OSP_U32 BuffLen)
+{
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    DAL_MPA_ADDR_S  Address;
+    if (NULL == DataBuff)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 619, "MPA finds the pointer is null(0x%p).", DataBuff);
+        return DRV_RETURN_ERROR;
+    }
+
+    
+    (OSP_VOID)Operate;
+    (OSP_VOID)BuffLen;
+    
+    OSAL_MemSet_s((OSP_U8 *)&Address, sizeof(Address), 0, sizeof(Address));
+    
+    /* BEGIN: Modified by jiangfanlu 00101148, 2014-3-25 12:11:56, ⵥ:  , ޸ԭ: װӿδָֿ֧,DMIȡMPA_ADDRESS */
+    RetVal = DAL_GetEnclAddrInfo(EnclosureWWN, BoardSlot, &Address);    
+    if (DRV_RETURN_OK != RetVal)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 620, "MPA gets enclosure address info(0x%x).", RetVal);
+        return DRV_RETURN_ERROR;
+    }
+    *(DAL_MPA_ADDR_S *)DataBuff->EnclAddr = Address;
+
+    /*C01Ŀת䣬ǰһ£C01*/
+    DRV_MPA_TRACE(DRV_LOG_INFO, 621, "The frame model from other module is 0x%x.", Address.DevFrame);
+    if (Address.DevFrame > DRV_FRAMEMODEL_12GSAS_EXP_END)
+    {
+        /*תΪU64 DrivrId*/
+        DataBuff->DevId = (OSP_U8)DataBuff->UserId  
+            | (((OSP_U8)DataBuff->FruId) << MPA_SHIFT_BIT_8) 
+            | (OSP_U32)((OSP_U16)(0x1 << (OSP_U8)DataBuff->FruType) << (OSP_U8)MPA_SHIFT_BIT_16);
+    }
+    else
+    {
+        /*תΪU64 DrivrId*/
+        (OSP_VOID)MPA_GetDtfIntfDriverId(&Address, DataBuff);
+    }
+    
+    /* END: Modified by jiangfanlu 00101148, 2014-3-25 12:11:56 */
+    
+    DRV_MPA_TRACE(DRV_LOG_INFO, 622, "MPA receives data, fru type(0x%x), fru id(0x%x), device id (0x%llx), dev type(0x%x), user id(0x%x).",
+                   DataBuff->FruType, DataBuff->FruId, DataBuff->DevId, DataBuff->DevType, DataBuff->UserId);
+    
+    return DRV_RETURN_OK;
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetIsMainPowerDown
+ *   : ѯǷµɹ
+ *   : EnclAddr  ϲ·ĵַϢṹָΪmpa豸ϢָMPA_ADDR_S
+ *             DriverId  ID ͡FRUIDDEVICE IDϢ
+ *   : PowerStatus  ״̬ÿ1bitʾһ·1ʾµɹ0ʾɹ
+ *   ֵ  : OSP_S32 DRV_RETURN_OK - ɹ;ʧ
+ * ˵  : ˽ӿֻSASװµɹ1βѯ
+ * 
+ * ޸ʷ      :
+ *  1.       : 20141219
+ *           : yinhuaqiang
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetIsMainPowerDown(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U32 *PowerStatus)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == PowerStatus))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 627, "MPA finds the pointer is null(0x%p, 0x%p)", EnclAddr, PowerStatus);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_SES_MAIN_POWER_STATUS;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, NULL, (OSP_VOID *)PowerStatus); 
+}
+
+/******************************************************************************
+*     : MPAIntf_SetFanStatus
+*   : ģķ״̬
+*   : EnclAddr    ϲ·ĵַϢmcutype,scsiַframetype
+*             DriverId    ID ͡FRUIDDEVICE IDϢ   
+*             Mode        ״̬
+*             Offset      תƫ
+*             OffsetDir   תƫƷ
+*   : 
+*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 201541
+*           : linrenchun 00295404
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetFanStatus(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 Mode, OSP_U8 Offset, OSP_U8 OffsetDir)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*Mode/Offset/OffsetDirtarget*/
+    OSP_U8 DataIn[3] = {0, 0, 0};
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 628, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 629, "MPAIntf_SetFanStatus, Mode(%d), Offset(%d), OffsetDir(%d).", Mode, Offset, OffsetDir);
+
+    MpaCmd.Cmd = DRV_CMD_FAN_STATUS_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DataIn);
+    MpaCmd.SdrType = SDRTYPT_V2R2C00_FOR_RW_FAN_STATUS;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    DataIn[0] = Mode;
+    DataIn[1] = Offset;
+    DataIn[2] = OffsetDir;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+*     : MPAIntf_GetIntfBoardDelay
+*   : ӿڿλӳµ
+*   : *EnclAddr   ַ
+*             FruId       ӳµFruID
+*             CtrlId      ǰID
+*             *Status     ӳµ״̬
+*   : 
+*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015325
+*           : linrenchun 00295404
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetIntfBoardDelay(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 CtrlId, DMI_INTF_DELAY_STATUS_E *Status)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*FruId/CtrlIdtarget*/
+    OSP_U8 DataIn[6] = {0, 0, 0, 0, 0, 0};
+
+    if ((NULL == EnclAddr) || (NULL == Status))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 630, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_BOARD_DELAY;
+    MpaCmd.FruId = 0x4ff;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = SDRTYPT_RW_BOARD_DELAY;
+    MpaCmd.WtRd = MPA_READ;
+
+    DataIn[0] = 5;
+    DataIn[1] = (OSP_U8)(FruId & 0xff);
+    DataIn[2] = (OSP_U8)((FruId >> 8) & 0xff);
+    DataIn[3] = (OSP_U8)((FruId >> 16) & 0xff);
+    DataIn[4] = (OSP_U8)((FruId >> 24) & 0xff);
+    DataIn[5] = CtrlId;
+
+    return MPA_Intf((DAL_MPA_ADDR_S*)EnclAddr, &MpaCmd, (OSP_VOID*)DataIn, (OSP_VOID*)Status);
+}
+
+/******************************************************************************
+*     : MPAIntf_SetIntfBoardDelay
+*   : дӿڿλӳµ
+*   : *EnclAddr   ַ
+*             FruId       ӳµFruID
+*             CtrlId      ǰID
+*             Status      ӳµ״̬
+*   : 
+*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015325
+*           : linrenchun 00295404
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetIntfBoardDelay(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 CtrlId, DMI_INTF_DELAY_STATUS_E Status)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*FruId/CtrlId/Statustarget*/
+    OSP_U8 DataIn[6] = {0, 0, 0, 0, 0, 0};
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 631, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 632, "MPAIntf_SetIntfBoardDelay, FruId(0x%x), CtrlId(%d), Status(%d).", FruId, CtrlId, Status);
+
+    MpaCmd.Cmd = DRV_CMD_SET_BOARD_DELAY;
+    MpaCmd.FruId = 0x4ff;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DataIn);
+    MpaCmd.SdrType = SDRTYPT_RW_BOARD_DELAY;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    DataIn[0] = (OSP_U8)(FruId & 0xff);
+    DataIn[1] = (OSP_U8)((FruId >> 8) & 0xff);
+    DataIn[2] = (OSP_U8)((FruId >> 16) & 0xff);
+    DataIn[3] = (OSP_U8)((FruId >> 24) & 0xff);
+    DataIn[4] = CtrlId;
+    DataIn[5] = Status;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+*     : MPAIntf_SetFrameDmaType
+*   : ÿDMA
+*   : *EnclAddr  ַ
+*             FruId      FRU
+*             DmaType    DMA
+*   : 
+*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015429
+*           : linrenchun 00295404
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_SetFrameDmaType(OSP_VOID *EnclAddr, OSP_U32 FruId, DRV_FRAME_DMA_TYPE_E DmaType)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_U32 Index = 0;
+    OSP_U32 mpaDMATypeForBmclen = 0;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 633, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    mpaDMATypeForBmclen = sizeof(g_MpaDMATypeForBmc) / sizeof(MPA_DMA_TYPE_S);
+    for (Index = 0; Index < mpaDMATypeForBmclen; Index++)
+    {
+        if (MpaAddr->DevFrame == g_MpaDMATypeForBmc[Index].FrameMode)
+        {
+            return g_MpaDMATypeForBmc[Index].RetValule;
+        }
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_FRAME_DMA_TYPE;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = SDRTYPT_FRAME_DMA_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&DmaType, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+*     : MPAIntf_GetFrameDmaType
+*   : ѯDMA
+*   : *EnclAddr  ַ
+*             FruId      FRU
+*             *DmaType   DMA
+*   : 
+*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015429
+*           : linrenchun 00295404
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetFrameDmaType(OSP_VOID *EnclAddr, OSP_U32 FruId, DRV_FRAME_DMA_TYPE_E *DmaType)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_U32 Index = 0;
+    OSP_U32 mpaDMATypeForBmclen = 0;
+
+    if ((NULL == EnclAddr) || (NULL == DmaType))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 634, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, DmaType);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    mpaDMATypeForBmclen = sizeof(g_MpaDMATypeForBmc) / sizeof(MPA_DMA_TYPE_S);
+    for (Index = 0; Index < mpaDMATypeForBmclen; Index++)
+    {
+        if (MpaAddr->DevFrame == g_MpaDMATypeForBmc[Index].FrameMode)
+        {
+            return g_MpaDMATypeForBmc[Index].RetValule;
+        }
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_GET_FRAME_DMA_TYPE;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = SDRTYPT_FRAME_DMA_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)DmaType);
+}
+ /******************************************************************************
+ *     : MPAIntf_GetExpBoardType
+ *   : ѯ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Type      оƬ
+ *   : Type      оƬ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20151014
+ *           : bianyanru 00188344
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetExpBoardType(OSP_VOID *EnclAddr, OSP_U64 DriverId, MPA_MGMT_BOARDTYPE_E *Type)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    
+    if ((NULL == EnclAddr) || (NULL == Type))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 635, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Type);
+        return RetVal;
+    }
+
+
+    MpaCmd.Cmd = DRV_CMD_GET_EXPBOARD_TYPE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(MPA_MGMT_BOARDTYPE_E);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Type);
+
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBackBoardRate
+ *   : ѯ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Rate      
+ *   : Rate      
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20151014
+ *           : bianyanru 00188344
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBackBoardRate(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_PORT_SPEED_E *Rate)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Rate))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 636, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Rate);
+        return RetVal;
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_GET_BACKBOARD_RATE;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_PORT_SPEED_E);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Rate);
+}
+
+/******************************************************************************
+ *     : MPAIntf_GetFramePowerType
+ *   : ȡԴ
+ *   : EnclAddr  
+ *             FruId  
+ *             type 1Ϊƽ棬2Ϊ˫ƽ
+ *   : 
+ *   ֵ  : OSP_S32 DRV_RETURN_OK - ɹ;ʧ
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20151027
+ *           : yanjianqiang 00310577
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFramePowerType(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_POWERFRAME_TYPE_E *type)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == type))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 4012, "MPA finds the pointer is null(0x%p, 0x%p)", EnclAddr, type);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_FRAMEPOWER_TYPE;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_FRAMEPOWER_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (DMI_POWERFRAME_TYPE_E *)type);
+}
+
+/* Begin: added by liuzhiqiang 00192096 for DTS2015082608808 @2015-9-7 */
+/******************************************************************************
+*     : MPAIntf_GetMgmtIpOwner
+*   : ѯIPϢ
+*   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+*                     DriverId   ID ͡FRUIDDEVICE IDϢ   
+*                     IpOwner     IPϢ
+*   :Info     IPϢ
+
+       byte0   Ipv4Valid   1ʾѾùIP0ʾδùIP
+       byte1-16  Ipv4Addr  16ַֽIPַ
+       byte 17-32  Ipv4Mask  16ַֽ
+       byte 33-48  Ipv4Gateway 16ַֽ
+       byte 49 Ipv6Valid   1ʾѾùIP0ʾδùIP
+       byte7 50-113  Ipv6Addr  64ַֽIPַ
+       byte8 114-117   Ipv6MaskLen 4ֽڳ
+       byte 118-181  Ipv6Gateway 64ַֽ
+       
+*   ֵ  : OSP_S32
+* ˵  :   
+*
+* ޸ʷ      :
+*  1.       : 201597
+*           : liuzhiqiang 00192096
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_GetMgmtIpOwner(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 *IpOwner)
+{
+    MPA_CMD_INFO_S MpaCmd;
+  OSP_U8 BmcDataIn[2] = {0, 0};
+  
+    if ((NULL == EnclAddr) || (NULL == IpOwner))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 2000, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, IpOwner);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_MGMT_IP_OWNER; 
+    MpaCmd.FruId = 0x4ff;  /* 4ffֻ */ 
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPT_GET_IP_OWNER;
+    MpaCmd.WtRd = MPA_READ;
+
+    BmcDataIn[0] = sizeof(OSP_U8);
+  BmcDataIn[1] = (OSP_U8)(DAL_FRU_ID(DriverId) & 0xff);
+  
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)BmcDataIn, (OSP_VOID *)IpOwner);
+}
+/* End: added by liuzhiqiang 00192096 for DTS2015082608808 @2015-9-7 */ 
+/*Add by yanajianqiang 00310577 for DTS2015091807980 on 2105.10.10 :ȥ8717DMIѯλͽӿ*/
+/******************************************************************************
+ *     : MPAIntf_GetSubCardOnLine
+ *   : ȡưfruλ
+ *   : EnclAddr  
+ *             FruId  
+ *             Online      0-λ 1-λ
+ *   : 
+ *   ֵ  : OSP_S32 DRV_RETURN_OK - ɹ;ʧ
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20151010
+ *           : yanjianqiang 00310577
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetSubCardState(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 *Online)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == Online))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 4012, "MPA finds the pointer is null(0x%p, 0x%p)", EnclAddr, Online);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_SUBCARD_STATE;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_SUBCARD_STATE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Online);
+}
+
+/******************************************************************************
+ *     : MPAIntf_GetFruSubType
+ *   : ȡfru(Ŀǰֲֻ֧ѯSAS)
+ *   : EnclAddr  
+ *             FruId  
+ *             type      DMI_FRU_SUB_TYPE_E
+ *   : 
+ *   ֵ  : OSP_S32 DRV_RETURN_OK - ɹ;ʧ
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2017217
+ *           : c00378798
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFruSubType(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U32* type)
+{
+    MPA_CMD_INFO_S MpaCmd = {0};
+
+    if ((NULL == EnclAddr) || (NULL == type))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 4012, "MPA finds the pointer is null(0x%p, 0x%p)", EnclAddr, type);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_FRU_SUBTYPE;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_FRUSUBTYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_U32 *)type);
+
+}
+
+/*Add by yanajianqiang 00310577 for DTS2015091807980 on 2105.10.10 :ȥ8717DMIѯλͽӿ*/
+/******************************************************************************
+ *     : MPAIntf_GetSubCardOnLine
+ *   : ȡưfru
+ *   : EnclAddr  
+ *             FruId  
+ *             type      DMI_SUBCARD_TYPE_E
+ *   : 
+ *   ֵ  : OSP_S32 DRV_RETURN_OK - ɹ;ʧ
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20151010
+ *           : yanjianqiang 00310577
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetSubCardType(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_SUBCARD_TYPE_E *type)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == type))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 4012, "MPA finds the pointer is null(0x%p, 0x%p)", EnclAddr, type);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_SUBCARD_TYPE;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_SUBCARD_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (DMI_SUBCARD_TYPE_E *)type);
+}
+
+/******************************************************************************
+*     : MPAIntf_NotifyCtrlReset
+*   : ÿλ
+*   : EnclAddr   
+*             FruId   
+*             *ResetInfo  
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 20151024
+*           : chenkeren 00221000
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_NotifyCtrlReset(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_CTRL_RESET_INFO_S *ResetInfo)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_U8 DataIn[3] = {0};
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 333, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 334, "MPA sets signal ctrl reset, srctrl(%d), dstctrl(%d), reset type(%d).", 
+                        ResetInfo->SrcCtrlId, ResetInfo->DstCtrlId, ResetInfo->ResetType);
+
+    /* V2R3C01汾ûй壬λԿҪͨ·FRU IDBMC */
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    if (DRV_FRAMEMODEL_PCIE_CTRL_2U_C1_BMC == MpaAddr->DevFrame)
+    {
+        MpaCmd.FruId = FruId;
+    }
+    else
+    {
+        MpaCmd.FruId = 0x4FF;
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_SET_CTRL_RESET;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8) + sizeof(OSP_U8) + sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPT_SET_CTRL_RESET;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    DataIn[0] = ResetInfo->SrcCtrlId;
+    DataIn[1] = ResetInfo->DstCtrlId;
+    DataIn[2] = ResetInfo->ResetType;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);    
+}
+/******************************************************************************
+*     : MPAIntf_PortLoopBackStart
+*   : ڻԿʼ
+*   : *EnclAddr  ַ
+*             DriverId   DriverId
+*             TestData   ʼ
+*   : 
+*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015521
+*           : linrenchun 00295404
+*    ޸   : AR-0000942937, ޸ԭ:SESֻ֧
+*
+******************************************************************************/
+OSP_S32 MPAIntf_PortLoopBackStart(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_LOOPBACK_CHECK_START_S TestData)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 627, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_PORT_LOOP_BACK_START;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_LOOPBACK_CHECK_START_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TestData, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+*     : MPAIntf_PortLoopBackStop
+*   : ڻֹͣ
+*   : *EnclAddr  ַ
+*             DriverId   DriverId
+*             TestData   ֹͣ
+*   : 
+*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015521
+*           : linrenchun 00295404
+*    ޸   : AR-0000942937, ޸ԭ:SESֻ֧
+*
+******************************************************************************/
+OSP_S32 MPAIntf_PortLoopBackStop(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_VOID *TestData)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*2Σͺdevice id*/
+    OSP_U8 DataIn[2] = {0xff, 0xff};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    (OSP_VOID)TestData;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 628, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_PORT_LOOP_BACK_STOP;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*Ӳdevice IdΪδ*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+*     : MPAIntf_PortLoopBackCheck
+*   : ڻԲѯ
+*   : *EnclAddr  ַ
+*             DriverId   DriverId
+*             TestData   ѯ
+*   : 
+*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015521
+*           : linrenchun 00295404
+*    ޸   : AR-0000942937, ޸ԭ:SESֻ֧
+*
+******************************************************************************/
+OSP_S32 MPAIntf_PortLoopBackCheck(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_LOOPBACK_CHECK_RESULT_S *TestData)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == TestData))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 629, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, TestData);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_PORT_LOOP_BACK_CHECK;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_LOOPBACK_CHECK_RESULT_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TestData);
+}
+
+/******************************************************************************
+*     : MPAIntf_PortLoopBackPeerStart
+*   : ⻷Կʼ
+*   : *EnclAddr  ַ
+*             DriverId   DriverId
+*             TestData   ʼ
+*   : 
+*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015521
+*           : linrenchun 00295404
+*    ޸   : AR-0000942937, ޸ԭ:SESֻ֧
+*
+******************************************************************************/
+OSP_S32 MPAIntf_PortLoopBackPeerStart(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_LOOPBACK_CHECK_START_S TestData)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 630, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_PORT_LOOP_BACK_PEER_START;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_LOOPBACK_CHECK_START_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TestData, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+*     : MPAIntf_PortLoopBackPeerStop
+*   : ⻷ֹͣ
+*   : *EnclAddr  ַ
+*             DriverId   DriverId
+*             TestData   ֹͣ
+*   : 
+*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015521
+*           : linrenchun 00295404
+*    ޸   : AR-0000942937, ޸ԭ:SESֻ֧
+*
+******************************************************************************/
+OSP_S32 MPAIntf_PortLoopBackPeerStop(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_VOID *TestData)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*2Σͺdevice id*/
+    OSP_U8 DataIn[2] = {0xff, 0xff};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    (OSP_VOID)TestData;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 631, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_PORT_LOOP_BACK_PEER_STOP;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*Ӳdevice IdΪδ*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+*     : MPAIntf_PortLoopBackPeerCheck
+*   : ⻷Բѯ
+*   : *EnclAddr  ַ
+*             DriverId   DriverId
+*             TestData   ѯ
+*   : 
+*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015521
+*           : linrenchun 00295404
+*    ޸   : AR-0000942937, ޸ԭ:SESֻ֧
+*
+******************************************************************************/
+OSP_S32 MPAIntf_PortLoopBackPeerCheck(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_LOOPBACK_CHECK_RESULT_S *TestData)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if ((NULL == EnclAddr) || (NULL == TestData))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 632, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, TestData);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_PORT_LOOP_BACK_PEER_CHECK;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_LOOPBACK_CHECK_RESULT_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)TestData);
+}
+
+/******************************************************************************
+*     : MPAIntf_DiskLoopBackStart
+*   : Ӳ̻زԿʼ
+*   : *EnclAddr  ַ
+*             DriverId   DriverId
+*             TestData   ʼ
+*   : 
+*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015521
+*           : linrenchun 00295404
+*    ޸   : AR-0000942937, ޸ԭ:SESֻ֧
+*
+******************************************************************************/
+OSP_S32 MPAIntf_DiskLoopBackStart(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_LOOPBACK_CHECK_START_S TestData)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 633, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_DISK_LOOP_BACK_START;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(DRV_LOOPBACK_CHECK_START_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&TestData, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+*     : MPAIntf_DiskLoopBackStop
+*   : Ӳ̻زֹͣ
+*   : *EnclAddr  ַ
+*             DriverId   DriverId
+*             TestData   ֹͣ
+*   : 
+*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015521
+*           : linrenchun 00295404
+*    ޸   : AR-0000942937, ޸ԭ:SESֻ֧
+*
+******************************************************************************/
+OSP_S32 MPAIntf_DiskLoopBackStop(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_VOID *TestData)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*2Σͺdevice id*/
+    OSP_U8 DataIn[2] = {0xff, 0xff};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    (OSP_VOID)TestData;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 634, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_DISK_LOOP_BACK_STOP;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = 0;
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    /*Ӳdevice IdΪδ*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+*     : MPAIntf_DiskLoopBackCheck
+*   : Ӳ̻زԲѯ
+*   : *EnclAddr  ַ
+*             DriverId   DriverId
+*             TestData   ѯ
+*   : 
+*   ֵ  : OSP_S32 DRV_RETURN_OK,ɹ; ,ʧ
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 2015521
+*           : linrenchun 00295404
+*    ޸   : AR-0000942937, ޸ԭ:SESֻ֧
+*
+******************************************************************************/
+OSP_S32 MPAIntf_DiskLoopBackCheck(OSP_VOID *EnclAddr, OSP_U64 DriverId, DRV_LOOPBACK_CHECK_RESULT_S *TestData)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*2Σͺdevice id*/
+    OSP_U8 DataIn[2] = {0xff, 0xff};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+
+    if ((NULL == EnclAddr) || (NULL == TestData))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 635, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, TestData);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_DISK_LOOP_BACK_CHECK;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DRV_LOOPBACK_CHECK_RESULT_S);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*Ӳdevice IdΪδ*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)TestData);
+}
+/******************************************************************************
+ *     : MPAIntf_ResetOtherBoard
+ *   : λԶ˹CPU
+ *   : EnclAddr  
+ *             FruId     
+ *             PeerSlot  
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2016123
+ *           : shipin
+ *    ޸   : ⵥ:ALMCR201601134871051, ޸ԭ:άӸλԿؼģ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_ResetOtherBoard(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 PeerSlot)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_U8 DataIn = 0;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 333, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 334, "MPA Set peer board reset, id(0x%llx), peerslot(%d), devframe(0x%x), scsi(%d:%d).", 
+                  DriverId, 
+                  PeerSlot,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevFrame,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiHostId,
+                  ((DAL_MPA_ADDR_S *)EnclAddr)->DevAddr.ScsiAddr.uiScsiId);
+
+    MpaCmd.Cmd = DRV_CMD_SET_OTHER_BOARD_RESET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    DataIn = PeerSlot;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&DataIn, (OSP_VOID *)NULL);    
+}
+/* BEGIN: Added by gaoyalong 00325181, 2016/4/1  ⵥ:DTS2016032509661, ޸ԭ:ӽӿڻȡ̵֧ */
+/******************************************************************************
+ *     : MPAIntf_GetSupportDiskMaxSpeed
+ *   : ѯ̵֧
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Rate      ̵֧
+ *   : Rate      ̵֧
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2016331
+ *           : gaoyalong 00325181
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetSupportDiskMaxSpeed(OSP_VOID *EnclAddr,  DRV_PORT_SPEED_E *Rate)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Rate))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 636, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Rate);
+        return RetVal;
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_GET_SUPPORT_DISKMAXSPEED;
+    MpaCmd.FruId = DAL_BUILD_FRU_ID(DAL_FRU_LOGIC_TYPE_ENCL, 0);
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DRV_PORT_SPEED_E);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Rate);
+    if (DRV_RETURN_OK != RetVal)
+    {
+        *Rate = DRV_SPEED_6G;
+        RetVal = DRV_RETURN_OK;
+        DRV_MPA_TRACE(DRV_LOG_WARN, 636, "Get support disk max speed failed, return default rate(6G).");
+    }
+
+    return RetVal;
+}
+/* END: Added by gaoyalong 00325181, 2016/4/1  ⵥ:DTS2016032509661 */
+
+/******************************************************************************
+ *     : MPAIntf_GetDiskMaxRate
+ *   : ѯ̵֧
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *             Rate      ̵֧
+ *   : Rate      ̵֧
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20160613
+ *           : c00217527
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetDiskMaxRate(OSP_VOID* EnclAddr, OSP_U32 FruId, DRV_PORT_SPEED_E* Rate)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == Rate))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 636, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Rate);
+        return RetVal;
+    }
+    
+    MpaCmd.Cmd = DRV_CMD_GET_SUPPORT_DISKMAXSPEED;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DRV_PORT_SPEED_E);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Rate);
+
+    return RetVal;
+}
+
+/* Begin: add by c00217527 2016.04.19 ⵥ: AR_0000247774-001-005 reason: ֵ֧װʱ־־û */
+/******************************************************************************
+ *     : MPAIntf_SetUnderBoardMaxRateFlag
+ *   : õװʱʾ
+ *   : EnclAddr                   豸ַϢ
+ *             DriverId                   豸idϢ
+ *             MaxRate                    max rate־
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20160424
+ *           : c00217527
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetUnderBoardMaxRateFlag(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U8 MaxRate)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 96, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 97, "MPA set max rate flag, id(0x%llx), value(%d).", DriverId, MaxRate);
+    MpaCmd.Cmd = DRV_CMD_SET_SUPPORT_DISKMAXSPEED;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&MaxRate, (OSP_VOID *)NULL);    
+}
+/* End: add by c00217527 */
+
+ /******************************************************************************
+ *     : MPAIntf_KboxTest
+ *   : ϻͨ
+ *   : EnclAddr  
+ *             FruId     
+ *             State    
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20161220
+ *           : yanjianqiang 00310577
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_KboxTest(OSP_VOID* EnclAddr, OSP_U32 FruId, OSP_U8* State)
+{
+    MPA_CMD_INFO_S MpaCmd = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+    OSP_U8 DataOut[BYTE_01] = {0x55};/*д0x55BMC0xAA*/
+    OSP_U8 DataClr[BYTE_01] = {0xFF};/**/
+    OSP_U8 *UseAddr = NULL;
+    OSP_U8 *KboxAddr = NULL;
+    static OSP_U8 LocalState = MGTCPU_STATE_NORMAL;
+
+    if ((NULL == EnclAddr) || (NULL == State))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 550, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, State);
+        return DRV_RETURN_ERROR;
+    }
+
+    KboxAddr = KboxAddrNew;
+    if (NULL == KboxAddr)
+    {
+        DRV_MPA_LOG_TRACE_LIMIT(DRV_LOG_WARN, 884, MPA_LEV1, 60 * HZ, "Kbox Test addr is null.");
+        *State = MGTCPU_STATE_ABNORMAL; /*ַΪΪ쳣*/
+        return DRV_RETURN_OK;
+    }
+    UseAddr = MPA_PCIE_KBOX_GET_OFFSET(KboxAddr, BMC_KBOX_OFFSET_TEST);
+
+    /*д0x55BMC0xAAдkbox֮ǰ0xFF*/
+    OSAL_MemCpy_s(UseAddr, BYTE_01, DataClr, BYTE_01);
+    OSAL_MemCpy_s(UseAddr, BYTE_01, DataOut, BYTE_01);
+
+    MpaCmd.Cmd = DRV_CMD_KBOX_TEST;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_KBOX_TEST;
+    MpaCmd.WtRd = MPA_READ;
+
+    RetVal = MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)State);
+    if(DRV_RETURN_OK == RetVal)
+    {
+        *State = (0xAA == *State) ? MGTCPU_STATE_NORMAL : MGTCPU_STATE_ABNORMAL;
+        LocalState = *State;
+    }
+    else
+    {
+        DRV_MPA_LOG_TRACE_LIMIT(DRV_LOG_WARN, 885, MPA_LEV1, 60 * HZ, "Kbox Test MPA/IPMI error, so as default.");
+        *State = LocalState; /*ֻ֧IPMIɹֵΪֵжĬOK߷һ*/
+    }
+
+    return DRV_RETURN_OK;
+}
+
+/******************************************************************************
+*     : MPAIntf_KboxNull
+*   : ϻͨ -- ģӳʧ
+*   : EnclAddr  
+*             FruId     
+*             State    
+*   : 
+*   ֵ  : OSP_S32
+* ˵  : 
+* 
+* ޸ʷ      :
+*  1.       : 20161220
+*           : yanjianqiang 00310577
+*    ޸   : ɺ
+*
+******************************************************************************/
+OSP_S32 MPAIntf_KboxNull(OSP_VOID* EnclAddr, OSP_U32 FruId, OSP_U8 Flag)
+{
+    (OSP_VOID) FruId;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 555, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    /*FlagΪ0,ÿ,FlagΪ1,·*/
+    if(0 == Flag)
+    {
+        if(NULL != KboxAddrNew)
+        {
+            MPA_PcieKboxFree(KboxAddrNew);
+            KboxAddrNew = NULL;
+        }
+    }
+    else
+    {
+        if(NULL == KboxAddrNew)
+        {
+            KboxAddrNew = MPA_PcieKboxMalloc(BMC_KBOX_ADDR_NEW, BMC_KBOX_SIZE_UPDATE_PKG);
+        }
+    }
+
+    return DRV_RETURN_OK;
+}
+/******************************************************************************
+ *     : MPAIntf_SetBMCSensorRoutinePeriod
+ *   :  BMC
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId        ID ͡FRUIDDEVICE IDϢ   
+ *             RoutinePeriod   BMC
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20160719
+ *           : Ѧϼ00354852
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetBMCSensorRoutinePeriod(OSP_VOID *EnclAddr, OSP_U64 DriverId, OSP_U16 RoutinePeriod)
+{
+    MPA_CMD_INFO_S MpaCmd;
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 627, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    DRV_MPA_TRACE(DRV_LOG_INFO, 628, "MPA sets bmc sensor routine period, id(0x%llx), value(%d).", DriverId, RoutinePeriod);
+    
+    MpaCmd.Cmd = DRV_CMD_BMCSENSOR_ROUTINEPERIOD_SET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = SDRTYPE_SETBMCROUTINEPERIOD;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)(&RoutinePeriod), (OSP_VOID *)NULL);
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetBMCSensorRoutinePeriod
+ *   : ѯBMC
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   ID ͡FRUIDDEVICE IDϢ   
+ *                  ڣλ:
+ *   :      ڣλ:
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20160719
+ *           : xuebingxia 00354852
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetBMCSensorRoutinePeriod(OSP_VOID* EnclAddr, OSP_U64 DriverId, OSP_U16* Period)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Period))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 385, "MPA finds the pointer is null.");
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_BMCSENSOR_ROUTINEPERIOD_GET;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+    MpaCmd.BufLen = sizeof(OSP_U16);
+    MpaCmd.SdrType = SDRTYPE_GETBMCROUTINEPERIOD;
+    MpaCmd.WtRd = MPA_READ;
+ 
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Period);       
+}
+
+ /******************************************************************************
+ *     : MPAIntf_GetDiskStatusInfo
+ *   : ѯӲĿ״̬Ϣ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             DriverId   Ӳ̵ID   
+ *   : StatusInfo ӲĿ״̬Ϣ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 20160815
+ *           : xuebingxia 00354852
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetDiskStatusInfo(OSP_VOID* EnclAddr, OSP_U64 DriverId, DRV_DISK_GET_STATUS_INFO_S* StatusInfo)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*2Σͺdevice id*/
+    OSP_U8 DataIn[2] = {0xFF, 0xFF};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    DRV_DISK_GET_STATUS_INFO_S *Value = NULL;
+    
+    if ((NULL == EnclAddr) || (NULL == StatusInfo))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 298, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, StatusInfo);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_DISKSTATUSINFO;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DRV_DISK_GET_STATUS_INFO_S);
+    MpaCmd.SdrType = SDRTYPE_GETDISKSTATUSINFO;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*Ӳdevice IdΪδ*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+
+    Value = StatusInfo;
+        
+    /*DataInΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Value);      
+}
+
+/******************************************************************************
+ *         : MPAIntf_GetCtrlBoardPowerCost
+ *   : ȡưԴ(ֻpurley°֧)
+ *   : EnclAddr
+ *                             FruId
+ *   : PowerCost     ư幦
+ *   ֵ      : OSP_S32 DRV_RETURN_OK - ɹ;ʧ
+ * ˵  : ĵλMHz
+ * 
+ * ޸ʷ      :
+ *  1.              : 2017316
+ *                   : j00352645
+ *    ޸   : ɺ
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetCtrlBoardPowerCost(OSP_VOID* EnclAddr, OSP_U32 FruId, OSP_U32* PowerCost)
+{
+    MPA_CMD_INFO_S MpaCmd = {0};
+
+    if ((NULL == EnclAddr) || (NULL == PowerCost))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 4012, "MPA finds the pointer is null(0x%p, 0x%p)", EnclAddr, PowerCost);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_CTRL_BOARD_PW_COST;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_CTRLBOARD_OUTPUT;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_U32 *)PowerCost);
+}
+
+/******************************************************************************
+ *         : MPAIntf_GetFanMaxLevelFlag
+ *   : ȡȫٱ־
+ *   : EnclAddr
+ *                             FruId
+ *   : Output     ư幦
+ *   ֵ      : OSP_S32 DRV_RETURN_OK - ɹ;ʧ
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.              : 2017316
+ *                   : j00352645
+ *    ޸   : ɺ
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFanMaxLevelFlag(OSP_VOID* EnclAddr, OSP_U32 FruId, OSP_U8* Flag)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    
+    if ((NULL == EnclAddr) || (NULL == Flag))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 600, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Flag);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_FAN_MAX_LEVEL_FLAG;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_FAN_MAXFLAG;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Flag); 
+}
+
+/* BEGIN: Added by yangping/00382561, 2017-4-22  ⵥ:AR.SR.SF-0000274408.005.002, ޸ԭ:󿨶Խ12Gܿ,ʶڶ˿ģʽ(˿/˫˿) */
+/******************************************************************************
+ *     : MPAIntf_GetFramePortMode
+ *   : ѯ˿ģʽ,ֵ˿(0x1)˫˿(0x2)
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId        FRU
+ *             PortMode    ˿ģʽ
+ *   : PortMode    ˿ģʽ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2017-4-24
+ *           : yangping/00382561
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFramePortMode(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U32* PortMode)
+{
+    MPA_CMD_INFO_S MpaCmd = {0};
+
+    if ((NULL == EnclAddr) || (NULL == PortMode))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 213, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, PortMode);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_FRAME_VISIBLE_MAP;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)PortMode);    
+}
+
+ /******************************************************************************
+ *     : MPAIntf_SetFramePortMode
+ *   : ÿ˿ģʽ,ֵ˿(0x1)˫˿(0x2)
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId        FRU
+ *             PortMode    ˿ģʽ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2017-4-24
+ *           : yangping/00382561
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetFramePortMode(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U32 PortMode)
+{
+    MPA_CMD_INFO_S MpaCmd = {0};
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 214, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_FRAME_VISIBLE_MAP;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&PortMode, (OSP_VOID *)NULL);   
+}
+/* END: Added by yangping/00382561, 2017-4-22 */
+
+/******************************************************************************
+ *     : MPAIntf_GetCtrlBoardOnlineState
+ *   :  ѯưλ״̬Ϣ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId     FRU
+ *   : CtrlBoardOnlineState  ưλ״̬Ϣ
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2017823
+ *           : l00404270
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetCtrlBoardOnlineState(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U8 *CtrlBoardOnlineState)
+{
+    MPA_CMD_INFO_S MpaCmd = {0};
+    OSP_S32 RetVal = DRV_RETURN_ERROR;
+
+    if ((NULL == EnclAddr) || (NULL == CtrlBoardOnlineState))
+    {
+        /*־ֵΪʱӡ*/
+        DRV_MPA_TRACE(DRV_LOG_WARN, 532, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, CtrlBoardOnlineState);
+        return RetVal;
+    }
+    MpaCmd.Cmd = DRV_CMD_GET_CTRL_ONLINE_STATE;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_GET_CTRL_ONLINE_STATE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)CtrlBoardOnlineState);
+}
+
+ /* BEGIN: Added by gaoyalong/00325181, 2017-5-15  ⵥ:DTS2017051501761 , ޸ԭ:ӲѯӲλӿ */
+ /******************************************************************************
+ *     : MPAIntf_GetDiskPresent
+ *   : ѯӲ̵λ״̬
+ *   : EnclAddr  
+ *             DriverId  
+ *             Present   
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 201759
+ *           : gaoyalong 00325181
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetDiskPresent(OSP_VOID *EnclAddr, OSP_U64 DriverId, DMI_DISK_PRESENT_STATUS_E *Present)
+{
+    MPA_CMD_INFO_S MpaCmd;
+    /*2Σͺdevice id*/
+    OSP_U8 DataIn[2] = {0xFF, 0xFF};
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    OSP_U8 *Value = NULL;
+    
+    if ((NULL == EnclAddr) || (NULL == Present))
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 298, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Present);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_DISK_PRESENT;
+    MpaCmd.FruId = DAL_FRU_ID(DriverId);
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U8);/*sesֻͨ1byte*/
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    /*Ӳdevice IdΪδ*/
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    DataIn[0] = MpaAddr->DevFrame;
+    DataIn[1] = (OSP_U8)DAL_ELEMENT_NO(DriverId);
+
+    Value = (OSP_U8 *)Present;
+        
+    /*DataInΪδȥȡж*/
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)DataIn, (OSP_VOID *)Value);
+}
+/* END: Added by gaoyalong/00325181, 2017-5-15 */
+
+/******************************************************************************
+ *     : MPAIntf_GetFrameSlotPwrCtrlCfg
+ *   : ȡ򱳰ǷӲ̲λԴƵϢ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId        FRU
+ *             CfgInfo    Ӳ̲λԴƵϢ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2017-09-06
+ *           : chenzhi 00219029
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetFrameSlotPwrCtrlCfg(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_U32 *CfgInfo)
+{
+    MPA_CMD_INFO_S MpaCmd = {0};
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 214, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_FRAME_SLOT_PWR_CTRL_CFG;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(OSP_U32);
+    MpaCmd.SdrType = MPA_INVALID_SDR_TYPE;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)CfgInfo);   
+}
+
+/******************************************************************************
+ *     : MPAIntf_NotifySysInfo
+ *   : ֪ͨϵͳϢСϵͳ
+ *   : EnclAddr  ϲ·ĵַϢ, mcutype,scsiַ, frametype
+ *             FruId        FRU
+ *             SysInfo    ϵͳϢ
+ *             Length     ϵͳϢ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2017-11-22
+ *           : chenzhi 00219029
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_NotifySysInfo(OSP_VOID *EnclAddr, OSP_U32 FruId, OSP_VOID *SysInfo, OSP_U32 Length)
+{
+    MPA_CMD_INFO_S MpaCmd = {0};
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 214, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_NOTIFY_SYS_INFO;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = (OSP_U16)Length;
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_SYS_INFO;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)SysInfo, (OSP_VOID *)NULL);  
+}
+
+/******************************************************************************
+ *     : MPAIntf_GetLightBoardPresentStatus
+ *   : ȡưλ״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId     FRU
+ *             Status    ưλ״̬
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2017-12-15
+ *           : lulingyun 00380217
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetLightBoardPresentStatus(OSP_VOID *EnclAddr, OSP_U32 FruId, 
+    DMI_OBJ_PRESENT_STATUS_E *Status)
+{
+    MPA_CMD_INFO_S MpaCmd = {0};
+
+    if (NULL == EnclAddr || NULL == Status)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 214, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_LIGHT_BOARD_PRESENT;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DMI_OBJ_PRESENT_STATUS_E);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_GET_LIGHT_BOARD_PRESENT;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status);
+}
+
+/******************************************************************************
+ *     : MPAIntf_SetLightBoardLightStatus
+ *   : õư״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId      FRU
+ *             Status    ư״̬
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2017-09-06
+ *           : lulingyun 00380217
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_SetLightBoardLightStatus(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_LIGHT_STATE_E Status)
+{
+    MPA_CMD_INFO_S MpaCmd = {0};
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 214, "MPA finds the pointer is null(0x%p).", EnclAddr);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_SET_LIGHT_BOARD_STATUS;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DMI_LIGHT_STATE_E);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_LIGHT_BOARD_STATUS;
+    MpaCmd.WtRd = MPA_WRITE;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)&Status, (OSP_VOID *)NULL);
+}
+
+/******************************************************************************
+ *     : MPAIntf_GetLightBoardLightStatus
+ *   : ȡư״̬
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId      FRU
+ *             Status    ư״̬
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2017-12-15
+ *           : lulingyun 00380217
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_GetLightBoardLightStatus(OSP_VOID *EnclAddr, OSP_U32 FruId, DMI_LIGHT_STATE_E *Status)
+{
+    MPA_CMD_INFO_S MpaCmd = {0};
+
+    if (NULL == EnclAddr)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 214, "MPA finds the pointer is null(0x%p, 0x%p).", EnclAddr, Status);
+        return DRV_RETURN_ERROR;
+    }
+
+    MpaCmd.Cmd = DRV_CMD_GET_LIGHT_BOARD_STATUS;
+    MpaCmd.FruId = FruId;
+    MpaCmd.DeviceId = 0;
+    MpaCmd.BufLen = sizeof(DMI_LIGHT_STATE_E);
+    MpaCmd.SdrType = SDRTYPE_V2R2C00_FOR_LIGHT_BOARD_STATUS;
+    MpaCmd.WtRd = MPA_READ;
+
+    return MPA_Intf((DAL_MPA_ADDR_S *)EnclAddr, &MpaCmd, (OSP_VOID *)NULL, (OSP_VOID *)Status);
+}
+
+/******************************************************************************
+ *     : MPAIntf_NotifyCpuAffinity
+ *   : ·CPU׺ԼϢ
+ *   : EnclAddr  ϲ·ĵַϢmcutype,scsiַframetype
+ *             FruId      FRU
+ *             Conf       CPU׺ԼϢ
+ *   : 
+ *   ֵ  : OSP_S32
+ * ˵  : 
+ * 
+ * ޸ʷ      :
+ *  1.       : 2017-12-15
+ *           : lulingyun 00380217
+ *    ޸   : ɺ
+ *
+ ******************************************************************************/
+OSP_S32 MPAIntf_NotifyCpuAffinity(OSP_VOID *EnclAddr, OSP_U32 FruId, DRV_CPU_AFFINITY_INFO_S *Conf)
+{
+    REFERNCE_VAR(EnclAddr);
+    REFERNCE_VAR(FruId);
+
+    /*CPU׺ԼϢ¼MPAȫϢУڰ*/
+    OSAL_MemSet_s(&(g_MpaCpuAffinity.ConfInfo), sizeof(DRV_CPU_AFFINITY_INFO_S),
+        0, sizeof(DRV_CPU_AFFINITY_INFO_S));
+
+    g_MpaCpuAffinity.ConfInfo = *Conf;
+    g_MpaCpuAffinity.ConfValid = B_TRUE;
+
+    return RETURN_OK;
+}
+
+
+/** Ϊ֧װֱӵõĽӿ*/
+EXPORT_SYMBOL(MPAIntf_GetFanMode);
+EXPORT_SYMBOL(MPAIntf_SetFanMode);
+EXPORT_SYMBOL(MPAIntf_GetFanLevel);
+EXPORT_SYMBOL(MPAIntf_SetFanLevel);
+EXPORT_SYMBOL(MPAIntf_GetFanSpeed);
+EXPORT_SYMBOL(MPAIntf_GetFanState);
+EXPORT_SYMBOL(MPAIntf_SetFanOnOff);
+
+EXPORT_SYMBOL(MPAIntf_GetEnclosureFruType);
+EXPORT_SYMBOL(MPAIntf_GetDeviceEnclosureFruType);
+/* BEGIN: Added by ywx291300, 2017/8/10  ⵥ:DTS2017081402571, ޸ԭ:ͬŻṩʲѯӿ*/
+EXPORT_SYMBOL(MPAIntf_GetExpBoardSpeed);
+/* END: Added by by ywx291300, 2017/8/10 */
+
+EXPORT_SYMBOL(MPAIntf_GetMgmtVersion);
+EXPORT_SYMBOL(MPAIntf_GetCpldVersion);
+EXPORT_SYMBOL(MPAIntf_GetFpgaVersion);
+EXPORT_SYMBOL(MPAIntf_GetHardWareVersion);
+EXPORT_SYMBOL(MPAIntf_GetDeviceHardWareVersion);
+EXPORT_SYMBOL(MPAIntf_GetBbuSoftwareVersion);
+EXPORT_SYMBOL(MPAIntf_GetBbuHardSoftCompileVersion);
+EXPORT_SYMBOL(MPAIntf_GetPresentState);
+EXPORT_SYMBOL(MPAIntf_GetAlarmName);
+EXPORT_SYMBOL(MPAIntf_GetAlarmType);
+EXPORT_SYMBOL(MPAIntf_GetAlarmInfo);
+
+EXPORT_SYMBOL(MPAIntf_GetTemperature);
+EXPORT_SYMBOL(MPAIntf_GetTemperatureLimit);
+EXPORT_SYMBOL(MPAIntf_SetTemperatureLimit);
+
+EXPORT_SYMBOL(MPAIntf_GetVoltage);
+EXPORT_SYMBOL(MPAIntf_GetVoltageThreshold);
+
+EXPORT_SYMBOL(MPAIntf_GetMgmtMasterSlave);
+EXPORT_SYMBOL(MPAIntf_SetSmmMasterSlave);
+EXPORT_SYMBOL(MPAIntf_GetIntfCardPowerStatus);
+EXPORT_SYMBOL(MPAIntf_GetIoCardPowerConsume);
+EXPORT_SYMBOL(MPAIntf_SetIoCardSfpSleepStatus);
+EXPORT_SYMBOL(MPAIntf_GetIoCardSfpSleepStatus);
+
+EXPORT_SYMBOL(MPAIntf_SetFramePowerOnOff);
+EXPORT_SYMBOL(MPAIntf_SetLedStatus);
+
+EXPORT_SYMBOL(MPAIntf_GetPowerVendor);
+EXPORT_SYMBOL(MPAIntf_GetPowerSn);
+EXPORT_SYMBOL(MPAIntf_GetPowerAcDcType);
+EXPORT_SYMBOL(MPAIntf_GetPowerAlertInfo);
+EXPORT_SYMBOL(MPAIntf_GetPowerState);
+EXPORT_SYMBOL(MPAIntf_GetPowerOutput);
+EXPORT_SYMBOL(MPAIntf_GetPowerOutputVoltage);
+EXPORT_SYMBOL(MPAIntf_GetPowerOutputCurrent);
+
+EXPORT_SYMBOL(MPAIntf_GetBbuTemperature);
+EXPORT_SYMBOL(MPAIntf_GetBbuOutPutVolt);
+EXPORT_SYMBOL(MPAIntf_GetBbuFaultBit);
+EXPORT_SYMBOL(MPAIntf_SetBbuFaultBit);
+EXPORT_SYMBOL(MPAIntf_GetBbuRemainingCapacity);
+EXPORT_SYMBOL(MPAIntf_GetBbuDisChargeCurrent);
+EXPORT_SYMBOL(MPAIntf_SetBbuOnlineTest);
+EXPORT_SYMBOL(MPAIntf_GetBbuDischargeCount);
+EXPORT_SYMBOL(MPAIntf_GetBbuWorkState);
+
+/* ȡϻ*/
+EXPORT_SYMBOL(MPAIntf_WriteKBox);
+EXPORT_SYMBOL(MPAIntf_ReadKBox);
+
+/* BMC*/
+EXPORT_SYMBOL(MPAIntf_UpdateMgmtPrepare);
+EXPORT_SYMBOL(MPAIntf_UpdateMgmtSendFile);
+EXPORT_SYMBOL(MPAIntf_UpdateMgmtStart);
+EXPORT_SYMBOL(MPAIntf_GetMgmtUpgradeState);
+
+/* CPLD*/
+EXPORT_SYMBOL(MPAIntf_UpdateCpldPrepare);
+EXPORT_SYMBOL(MPAIntf_UpdateCpldSendFile);
+EXPORT_SYMBOL(MPAIntf_UpdateCpldStart);
+EXPORT_SYMBOL(MPAIntf_GetCpldUpgradeState);
+
+/* BBU*/
+EXPORT_SYMBOL(MPAIntf_UpdateBbuPrepare);
+EXPORT_SYMBOL(MPAIntf_UpdateBbuSendFile);
+EXPORT_SYMBOL(MPAIntf_UpdateBbuStart);
+EXPORT_SYMBOL(MPAIntf_GetBbuUpgradeState);
+
+/*Դ*/
+EXPORT_SYMBOL(MPAIntf_SetPowerFruOnOff);
+EXPORT_SYMBOL(MPAIntf_SetPowerFruOnOffSingle);
+EXPORT_SYMBOL(MPAIntf_GetPowerPsOKState);
+EXPORT_SYMBOL(MPAIntf_GetPowerPsAlertState);
+
+/*USB*/
+EXPORT_SYMBOL(MPAIntf_SetUsbHubChannel);
+EXPORT_SYMBOL(MPAIntf_SetUsbHubReset);
+
+
+/*ʱ*/
+EXPORT_SYMBOL(MPAIntf_SetTime);
+
+/*Itestתýӿ*/
+EXPORT_SYMBOL(MPA_GetDtfIntfParameter);
+
+/*洢*/
+EXPORT_SYMBOL(MPAIntf_GetStorageDeviceTestResult);
+EXPORT_SYMBOL(MPAIntf_SetStorageDeviceTest);
+
+/*ѯڹ*/
+EXPORT_SYMBOL(MPAIntf_GetUartSwitch);
+
+/*ѯѹ״̬*/
+EXPORT_SYMBOL(MPAIntf_GetVoltageState);
+
+/*ùоƬλ*/
+EXPORT_SYMBOL(MPAIntf_SetMgmtReset);
+
+/*ѯоƬswitchĴ*/
+EXPORT_SYMBOL(MPAIntf_GetSmmGeHeartBeatResult);
+EXPORT_SYMBOL(MPAIntf_GetSmmCtrlHeartBeatResult);
+
+/*ѯECCϢ*/
+EXPORT_SYMBOL(MPAIntf_GetBmcEccInfo);
+
+/*ѯRTCʱ*/
+EXPORT_SYMBOL(MPAIntf_GetRtcTime);
+
+/*RTCʱ*/
+EXPORT_SYMBOL(MPAIntf_SetRtcTime);
+
+/*ȡҶϢ*/
+EXPORT_SYMBOL(MPAIntf_GetEarInfo);
+/*ȡװҶϢ*/
+EXPORT_SYMBOL(MPAIntf_GetDftEarInfo);
+EXPORT_SYMBOL(MPAIntf_SetDftEarInfo);
+/*ȡװӿڿϢ*/
+EXPORT_SYMBOL(MPAIntf_GetDftIocardInfo);
+EXPORT_SYMBOL(MPAIntf_SetDftIocardInfo);
+/*RTCʱ*/
+EXPORT_SYMBOL(MPAIntf_GetBbuWorkHour);
+
+EXPORT_SYMBOL(MPAIntf_GetBbuLastDischargeTime);
+
+EXPORT_SYMBOL(MPAIntf_GetBbuLastDischargeParameter);
+
+EXPORT_SYMBOL(MPAIntf_GetBbuCellVoltage);
+
+EXPORT_SYMBOL(MPAIntf_GetBbuChargeCurrent);
+
+EXPORT_SYMBOL(MPAIntf_GetBbuVendorName);
+
+EXPORT_SYMBOL(MPAIntf_GetBbuChargeFlag);
+
+EXPORT_SYMBOL(MPAIntf_GetBbuGpioInfo);
+
+EXPORT_SYMBOL(MPAIntf_GetBbuLife);
+EXPORT_SYMBOL(MPAIntf_SetBbuLife);
+EXPORT_SYMBOL(MPAIntf_GetBbuPreLife);
+EXPORT_SYMBOL(MPAIntf_SetBbuPreLife);
+EXPORT_SYMBOL(MPAIntf_GetBbuCapacityAlarm);
+EXPORT_SYMBOL(MPAIntf_SetBbuCapacityAlarm);
+EXPORT_SYMBOL(MPAIntf_ClearTdmErrCode);
+EXPORT_SYMBOL(MPAIntf_GetTdmErrCode);
+EXPORT_SYMBOL(MPAIntf_GetBbuCapacityPreAlarm);
+EXPORT_SYMBOL(MPAIntf_SetBbuCapacityPreAlarm);
+EXPORT_SYMBOL(MPAIntf_SetUsbSwitchEnable);
+EXPORT_SYMBOL(MPAIntf_SetEarPowerEnable);
+EXPORT_SYMBOL(MPAIntf_GetEarButtonState);
+EXPORT_SYMBOL(MPAIntf_ClearEarButtonState);
+EXPORT_SYMBOL(MPAIntf_GetEarUsbHubState);
+EXPORT_SYMBOL(MPAIntf_SetBoardWdtSignal);
+EXPORT_SYMBOL(MPAIntf_GetSmmSwitchRegister);
+EXPORT_SYMBOL(MPAIntf_SetUartSwitch);
+EXPORT_SYMBOL(MPAIntf_SetUartLoopTest);
+EXPORT_SYMBOL(MPAIntf_GetMgmtCpuName);
+EXPORT_SYMBOL(MPAIntf_GetFanName);
+EXPORT_SYMBOL(MPAIntf_GetPowerName);
+EXPORT_SYMBOL(MPAIntf_GetBbuName);
+EXPORT_SYMBOL(MPAIntf_GetIocardName);
+EXPORT_SYMBOL(MPAIntf_GetIocardSlotId);
+EXPORT_SYMBOL(MPAIntf_GetTemperatureName);
+EXPORT_SYMBOL(MPAIntf_GetTemperatureSubtype);
+EXPORT_SYMBOL(MPAIntf_GetTemperatureState);
+EXPORT_SYMBOL(MPAIntf_GetVoltageName);
+EXPORT_SYMBOL(MPAIntf_SetBbuStopDischarge);
+EXPORT_SYMBOL(MPAIntf_SetBbuGpioInfo);
+EXPORT_SYMBOL(MPAIntf_SetBbuTemperature);
+EXPORT_SYMBOL(MPAIntf_SetBbuWorkHour);
+EXPORT_SYMBOL(MPAIntf_GetBackBoardModel);
+EXPORT_SYMBOL(MPAIntf_SetBackBoardModel);
+EXPORT_SYMBOL(MPAIntf_GetBackBoardBrand);
+EXPORT_SYMBOL(MPAIntf_SetBackBoardBrand);
+EXPORT_SYMBOL(MPAIntf_GetBackBoardVendor);
+EXPORT_SYMBOL(MPAIntf_SetBackBoardVendor);
+EXPORT_SYMBOL(MPAIntf_GetBackBoardOemVendor);
+EXPORT_SYMBOL(MPAIntf_SetBackBoardOemVendor);
+EXPORT_SYMBOL(MPAIntf_GetElectronicLabel);
+EXPORT_SYMBOL(MPAIntf_GetEepromElectronicLabel);
+EXPORT_SYMBOL(MPAIntf_SetElectronicLabel);
+EXPORT_SYMBOL(MPAIntf_SetChipRunMode);
+EXPORT_SYMBOL(MPAIntf_GetChipRunMode);
+EXPORT_SYMBOL(MPAIntf_GetBackBoardOemModel);
+EXPORT_SYMBOL(MPAIntf_SetBackBoardOemModel);
+EXPORT_SYMBOL(MPAIntf_GetVoltageSubtype);
+EXPORT_SYMBOL(MPAIntf_GetEthSwitchMac);
+EXPORT_SYMBOL(MPAIntf_SetEthSwitchMac);
+EXPORT_SYMBOL(MPAIntf_GetUsbInfo);
+EXPORT_SYMBOL(MPAIntf_GetBbuState);
+EXPORT_SYMBOL(MPAIntf_GetBbuPreLifeAlarm);
+EXPORT_SYMBOL(MPAIntf_GetCbuESR);
+EXPORT_SYMBOL(MPAIntf_SetCbuVolt);
+EXPORT_SYMBOL(MPAIntf_GetAdjustVoltFlag);
+EXPORT_SYMBOL(MPAIntf_GetBackBoardRate);
+EXPORT_SYMBOL(MPAIntf_GetExpBoardType);
+EXPORT_SYMBOL(MPAIntf_GetBackBoardMac);
+EXPORT_SYMBOL(MPAIntf_SetBackBoardMac);
+EXPORT_SYMBOL(MPAIntf_GetPCIE8796Version);
+EXPORT_SYMBOL(MPAIntf_GetSATA72463Version);
+EXPORT_SYMBOL(MPAIntf_GetPCIE8717Version);
+EXPORT_SYMBOL(MPAIntf_GetDmaRetimerVersion);
+EXPORT_SYMBOL(MPAIntf_UpdateConfigChipPrepare);
+EXPORT_SYMBOL(MPAIntf_UpdateConfigChipSendFile);
+EXPORT_SYMBOL(MPAIntf_UpdateConfigChipStart);
+EXPORT_SYMBOL(MPAIntf_GetFruAlarm);
+EXPORT_SYMBOL(MPAIntf_SetPowerAlarmSignal);
+EXPORT_SYMBOL(MPAIntf_GetPowerInterruptSignal);
+EXPORT_SYMBOL(MPAIntf_SetPowerInterruptSignal);
+EXPORT_SYMBOL(MPAIntf_SetWatchDogTime);
+EXPORT_SYMBOL(MPAIntf_GetBmcResetReason);
+EXPORT_SYMBOL(MPAIntf_GetPowerTemperature);
+EXPORT_SYMBOL(MPAIntf_SetOsResetCount);
+EXPORT_SYMBOL(MPAIntf_GetUsbHubChannel);
+EXPORT_SYMBOL(MPAIntf_GetBoardSlotId);
+EXPORT_SYMBOL(MPAIntf_GetTDMBusRegister);
+EXPORT_SYMBOL(MPAIntf_GetBbuManuDate);
+EXPORT_SYMBOL(MPAIntf_SetSmmSwitchRegister);
+EXPORT_SYMBOL(MPAIntf_GetPowerSingalBackboardType);
+EXPORT_SYMBOL(MPAIntf_GetPowerInput);
+EXPORT_SYMBOL(MPAIntf_SetTemperature);
+EXPORT_SYMBOL(MPAIntf_GetChipFwVer);
+EXPORT_SYMBOL(MPAIntf_UpdataChipPrePare);
+EXPORT_SYMBOL(MPAIntf_UpdataChipTransData);
+EXPORT_SYMBOL(MPAIntf_UpdataChipStart);
+EXPORT_SYMBOL(MPAIntf_GetChipUpdateStatus);
+EXPORT_SYMBOL(MPAIntf_SetRMIITest);
+EXPORT_SYMBOL(MPAIntf_GetI2cStatus);
+EXPORT_SYMBOL(MPAIntf_ClearAllPhyErr);
+EXPORT_SYMBOL(MPAIntf_SetBackBoardSN);
+EXPORT_SYMBOL(MPAIntf_GetBackBoardSN);
+EXPORT_SYMBOL(MPAIntf_GetEnclosureFruList);
+EXPORT_SYMBOL(MPAIntf_GetPortPhyErr);
+EXPORT_SYMBOL(MPAIntf_GetTime);
+EXPORT_SYMBOL(MPAIntf_GetFramePowerState);
+EXPORT_SYMBOL(MPAIntf_SetIsoPara);
+EXPORT_SYMBOL(MPAIntf_SetDiskPowerStatus);
+EXPORT_SYMBOL(MPAIntf_SetDiskSwitchStatus);
+EXPORT_SYMBOL(MPAIntf_GetPowerProductName);
+EXPORT_SYMBOL(MPAIntf_SetMgmtDegreeChange);
+EXPORT_SYMBOL(MPAIntf_GetBuckleBoardHardWareVersion);
+EXPORT_SYMBOL(MPAIntf_GetBuckleBoardPowerState);
+EXPORT_SYMBOL(MPAIntf_GetBuckleBoardPresent);
+EXPORT_SYMBOL(MPAIntf_GetBuckleBoardType);
+EXPORT_SYMBOL(MPAIntf_GetShakeSensorInfo);
+EXPORT_SYMBOL(MPAIntf_SetDiskLedStatus);
+EXPORT_SYMBOL(MPAIntf_GetIsMainPowerDown);
+EXPORT_SYMBOL(MPAIntf_GetPortLinkStatus);
+EXPORT_SYMBOL(MPAIntf_GetPortLinkRate);
+EXPORT_SYMBOL(MPAIntf_ExpBitSteamTest);
+EXPORT_SYMBOL(MPAIntf_ExpLoopTestModeSet);
+EXPORT_SYMBOL(MPAIntf_ExpLoopTestModeGet);
+EXPORT_SYMBOL(MPAIntf_SetLinkLedStatus);
+EXPORT_SYMBOL(MPAIntf_GetBbuRemainCapacityMah);
+EXPORT_SYMBOL(MPAIntf_GetPeerPresentState);
+EXPORT_SYMBOL(MPAIntf_GetPower5vPgState);
+EXPORT_SYMBOL(MPAIntf_SetPower5vPgState);
+EXPORT_SYMBOL(MPAIntf_GetCpldBitValue);
+EXPORT_SYMBOL(MPAIntf_SetCpldBitValue);
+EXPORT_SYMBOL(MPAIntf_GetSfpPresent);
+EXPORT_SYMBOL(MPAIntf_GetIntfBoardDelay);
+EXPORT_SYMBOL(MPAIntf_SetIntfBoardDelay);
+EXPORT_SYMBOL(MPAIntf_GetFramePortMode);
+EXPORT_SYMBOL(MPAIntf_SetFramePortMode);
+EXPORT_SYMBOL(MPAIntf_GetFrameSlotPwrCtrlCfg);
+EXPORT_SYMBOL(MPAIntf_NotifySysInfo);
+
+OSP_VOID MPAIntf_CtrlEnclFanStatusPro(OSP_VOID *EnclAddr, OSP_U64 DriverId)
+{
+    DAL_MPA_ADDR_S *MpaAddr = NULL;
+    DAL_SYS_POWER_CONTROL_E FramePowerState = DAL_SYS_POWER_CONTROL_BUTT;
+    DAL_FAN_STAT_E FanState = FAN_STAT_BUTT;
+
+    if (EnclAddr == NULL)
+    {
+        DRV_MPA_TRACE(DRV_LOG_WARN, 1, "MPA finds the encladdr pointer is null(0x%p).", EnclAddr);
+        return;
+    }
+
+    MpaAddr = (DAL_MPA_ADDR_S *)EnclAddr;
+    if ((DAL_FRU_LOGIC_TYPE(DriverId) == DAL_FRU_LOGIC_TYPE_CTRLBOARD) 
+        && ((MpaAddr->DevFrame == DRV_FRAMEMODEL_12GSAS_CTL_2U25_EAR)
+        ||  (MpaAddr->DevFrame == DRV_FRAMEMODEL_12GSAS_CTL_2U12_EAR)))
+    {     
+        (void)MPAIntf_GetFanState(EnclAddr, ((OSP_U64)0x6000 << FRU_ID_OFFSET), &FanState);
+        if (FanState == FAN_SLEEP)
+        {
+            (void)MPAIntf_GetFramePowerState(EnclAddr, 0x800000, (OSP_U8 *)&FramePowerState);
+            if (FramePowerState == DAL_SYS_UP)
+            {
+                (void)MPAIntf_SetFanOnOff(EnclAddr, 0x6000, 1);
+            }
+        }
+    }
+}
+
