|
@@ -49,25 +49,6 @@ uint8_t libipmi_GetBits(uint8_t orig, uint8_t startbit, uint8_t endbit)
|
|
/*****************************************************************************
|
|
/*****************************************************************************
|
|
System Event Log
|
|
System Event Log
|
|
******************************************************************************/
|
|
******************************************************************************/
|
|
-uint16_t IPMICMD_GetSELInfo(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
|
|
- SELInfo_T *pResGetSELInfo,
|
|
|
|
- int timeout)
|
|
|
|
-{
|
|
|
|
- uint16_t wRet;
|
|
|
|
- uint32_t dwResLen;
|
|
|
|
- uint8_t DummyReqData[8];
|
|
|
|
- uint8_t NetFnLunStorage = (NETFN_STORAGE << 2);
|
|
|
|
-
|
|
|
|
- dwResLen = sizeof(SELInfo_T);
|
|
|
|
- wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
|
|
- NetFnLunStorage, CMD_GET_SEL_INFO,
|
|
|
|
- (uint8_t*)DummyReqData, 0,
|
|
|
|
- (uint8_t *)pResGetSELInfo, &dwResLen,
|
|
|
|
- timeout);
|
|
|
|
- return wRet;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
|
|
uint16_t IPMICMD_GetSELAllocationInfo(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
uint16_t IPMICMD_GetSELAllocationInfo(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
SELAllocInfo_T *pResGetSELAllocInfo,
|
|
SELAllocInfo_T *pResGetSELAllocInfo,
|
|
@@ -76,11 +57,10 @@ uint16_t IPMICMD_GetSELAllocationInfo(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
uint16_t wRet;
|
|
uint16_t wRet;
|
|
uint32_t dwResLen;
|
|
uint32_t dwResLen;
|
|
uint8_t DummyReqData[8];
|
|
uint8_t DummyReqData[8];
|
|
- uint8_t NetFnLunStorage = (NETFN_STORAGE << 2);
|
|
|
|
|
|
|
|
dwResLen = sizeof(SELAllocInfo_T);
|
|
dwResLen = sizeof(SELAllocInfo_T);
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
- NetFnLunStorage, CMD_GET_SEL_ALLOCATION_INFO,
|
|
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_GET_SEL_ALLOCATION_INFO,
|
|
(uint8_t*)DummyReqData, 0,
|
|
(uint8_t*)DummyReqData, 0,
|
|
(uint8_t *)pResGetSELAllocInfo, &dwResLen,
|
|
(uint8_t *)pResGetSELAllocInfo, &dwResLen,
|
|
timeout);
|
|
timeout);
|
|
@@ -96,28 +76,65 @@ uint16_t IPMICMD_ReserveSEL(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
uint32_t dwResLen = 0;
|
|
uint32_t dwResLen = 0;
|
|
|
|
|
|
memset(pReserveSelRes, 0, sizeof(ReserveSELRes_T));
|
|
memset(pReserveSelRes, 0, sizeof(ReserveSELRes_T));
|
|
-
|
|
|
|
- dwResLen = sizeof(ReserveSELRes_T);
|
|
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
- (NETFN_STORAGE << 2), CMD_RESERVE_SEL,
|
|
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_RESERVE_SEL,
|
|
NULL, 0,
|
|
NULL, 0,
|
|
(uint8_t *)pReserveSelRes, &dwResLen,
|
|
(uint8_t *)pReserveSelRes, &dwResLen,
|
|
timeout);
|
|
timeout);
|
|
|
|
|
|
- if ( (wRet != 0) && (pReserveSelRes->CompletionCode != CC_INV_CMD) )
|
|
|
|
|
|
+ /* If ReserveSEL command is not implemented, return 0x0000 as reservation ID */
|
|
|
|
+ if ( pReserveSelRes->CompletionCode == CC_INV_CMD )
|
|
|
|
+ {
|
|
|
|
+ pReserveSelRes->ReservationID = 0x0000;
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(wRet != 0)
|
|
{
|
|
{
|
|
printf("Could not get SEL reservation!!\n");
|
|
printf("Could not get SEL reservation!!\n");
|
|
return wRet;
|
|
return wRet;
|
|
}
|
|
}
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+uint16_t IPMC_ReserveSEL(IPMI20_UDS_SESSION_T *pUDSSession, uint8_t IpmbAddr,
|
|
|
|
+ ReserveSELRes_T* pReserveSelRes,
|
|
|
|
+ int timeout)
|
|
|
|
+{
|
|
|
|
+ int wRet = 0;
|
|
|
|
+ uint32_t dwResLen;
|
|
|
|
+ uint8_t Req[50] = {0};
|
|
|
|
+ uint8_t Res[50] = {0};
|
|
|
|
+
|
|
|
|
+ Req[0] = 0x40; //Track | channel 0
|
|
|
|
+ Req[1] = IpmbAddr;
|
|
|
|
+ Req[2] = NETFNLUN_IPMI_APP;
|
|
|
|
+ Req[3] = 0x100 - (Req[1] + Req[2])&0xff; //checksum1
|
|
|
|
+ Req[4] = 0x20;
|
|
|
|
+ Req[5] = 0x10;
|
|
|
|
+ Req[6] = CMD_RESERVE_SEL;
|
|
|
|
+ Req[7] = 0x100 - (Req[4] + Req[5] + Req[6])&0xff;
|
|
|
|
+
|
|
|
|
+ wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_SEND_MSG,
|
|
|
|
+ Req, 8,
|
|
|
|
+ Res, &dwResLen,
|
|
|
|
+ timeout);
|
|
|
|
|
|
|
|
+ memcpy(pReserveSelRes, &Res[6], sizeof(ReserveSELRes_T));
|
|
/* If ReserveSEL command is not implemented, return 0x0000 as reservation ID */
|
|
/* If ReserveSEL command is not implemented, return 0x0000 as reservation ID */
|
|
if ( pReserveSelRes->CompletionCode == CC_INV_CMD )
|
|
if ( pReserveSelRes->CompletionCode == CC_INV_CMD )
|
|
{
|
|
{
|
|
pReserveSelRes->ReservationID = 0x0000;
|
|
pReserveSelRes->ReservationID = 0x0000;
|
|
- wRet = 0;
|
|
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
- return wRet;
|
|
|
|
|
|
+ if(wRet != 0)
|
|
|
|
+ {
|
|
|
|
+ printf("Could not get SEL reservation!!\n");
|
|
|
|
+ return wRet;
|
|
|
|
+ }
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
/* This function gets an entry from SEL. */
|
|
/* This function gets an entry from SEL. */
|
|
@@ -128,16 +145,94 @@ uint16_t IPMICMD_GetSELEntry(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
int timeout)
|
|
int timeout)
|
|
{
|
|
{
|
|
uint16_t wRet = 0;
|
|
uint16_t wRet = 0;
|
|
- uint8_t NetFnLunStorage = (NETFN_STORAGE << 2);
|
|
|
|
|
|
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
- NetFnLunStorage, CMD_GET_SEL_ENTRY,
|
|
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_GET_SEL_ENTRY,
|
|
(uint8_t*)pGetSELReqData, sizeof(GetSELReq_T),
|
|
(uint8_t*)pGetSELReqData, sizeof(GetSELReq_T),
|
|
(uint8_t *)pGetSELResData, &ResDataLen,
|
|
(uint8_t *)pGetSELResData, &ResDataLen,
|
|
timeout);
|
|
timeout);
|
|
return wRet;
|
|
return wRet;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+uint16_t IPMI_GetSELEntry(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
|
|
+ GetSELReq_T* pGetSELReqData,
|
|
|
|
+ SELEventRecord_T* pSELEventData,
|
|
|
|
+ uint16_t *nextRecID,
|
|
|
|
+ int timeout)
|
|
|
|
+{
|
|
|
|
+ uint16_t wRet = 0;
|
|
|
|
+ uint8_t Res[50];
|
|
|
|
+ uint32_t dwResLen;
|
|
|
|
+
|
|
|
|
+ wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
|
|
+ NETFNLUN_IPMI_STORAGE, CMD_GET_SEL_ENTRY,
|
|
|
|
+ (uint8_t*)pGetSELReqData, sizeof(GetSELReq_T),
|
|
|
|
+ Res, &dwResLen,
|
|
|
|
+ timeout);
|
|
|
|
+ // printf("---> Res ");
|
|
|
|
+ // int i;
|
|
|
|
+ // for(i=0;i<17;i++)
|
|
|
|
+ // printf("%02x ", Res[i]);
|
|
|
|
+ // printf("\n");
|
|
|
|
+ if((wRet != 0) || (Res[0] != 0))
|
|
|
|
+ {
|
|
|
|
+ printf("IPMI_GetSELEntry failed\n");
|
|
|
|
+ *nextRecID = 0xffff;
|
|
|
|
+ memset(pSELEventData, 0, sizeof(SELEventRecord_T));
|
|
|
|
+ return wRet;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ *nextRecID = (Res[2]<<8) | Res[1];
|
|
|
|
+ memcpy(pSELEventData, &Res[3], sizeof(SELEventRecord_T));
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+uint16_t IPMC_GetSELEntry(IPMI20_UDS_SESSION_T *pUDSSession, uint8_t IpmbAddr,
|
|
|
|
+ GetSELReq_T* pGetSELReqData,
|
|
|
|
+ SELEventRecord_T* pSELEventData,
|
|
|
|
+ uint16_t *nextRecID,
|
|
|
|
+ int timeout)
|
|
|
|
+{
|
|
|
|
+ int wRet = 0;
|
|
|
|
+ uint32_t dwResLen;
|
|
|
|
+ uint8_t Req[50] = {0};
|
|
|
|
+ uint8_t Res[50] = {0};
|
|
|
|
+
|
|
|
|
+ Req[0] = 0x40; //Track | channel 0
|
|
|
|
+ Req[1] = IpmbAddr;
|
|
|
|
+ Req[2] = NETFNLUN_IPMI_STORAGE;
|
|
|
|
+ Req[3] = 0x100 - (Req[1] + Req[2])&0xff; //checksum1
|
|
|
|
+ Req[4] = 0x20;
|
|
|
|
+ Req[5] = 0x10;
|
|
|
|
+ Req[6] = CMD_GET_SEL_ENTRY;
|
|
|
|
+ Req[7] = pGetSELReqData->ReservationID&0xff;
|
|
|
|
+ Req[8] = (pGetSELReqData->ReservationID>>8)&0xff;
|
|
|
|
+ Req[9] = pGetSELReqData->RecID&0xff;
|
|
|
|
+ Req[10] = (pGetSELReqData->RecID>>8)&0xff;
|
|
|
|
+ Req[11] = pGetSELReqData->Offset;
|
|
|
|
+ Req[12] = pGetSELReqData->Size;
|
|
|
|
+ Req[13] = 0x100 - (Req[4] + Req[5] + Req[6] + Req[7] + Req[8] + Req[9] + Req[10] + Req[11] + Req[12])&0xff;
|
|
|
|
+
|
|
|
|
+ wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_SEND_MSG,
|
|
|
|
+ Req, 14,
|
|
|
|
+ Res, &dwResLen,
|
|
|
|
+ timeout);
|
|
|
|
+ if((wRet != 0) || (Res[6] != 0))
|
|
|
|
+ {
|
|
|
|
+ printf("IPMI_GetSELEntry failed\n");
|
|
|
|
+ *nextRecID = 0xffff;
|
|
|
|
+ memset(pSELEventData, 0, sizeof(SELEventRecord_T));
|
|
|
|
+ return wRet;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ *nextRecID = (Res[8]<<8) | Res[7];
|
|
|
|
+ memcpy(pSELEventData, &Res[9], sizeof(SELEventRecord_T));
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
/* This function adds an entry into SEL. */
|
|
/* This function adds an entry into SEL. */
|
|
uint16_t IPMICMD_AddSELEntry(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
uint16_t IPMICMD_AddSELEntry(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
SELEventRecord_T* pSELReqData,
|
|
SELEventRecord_T* pSELReqData,
|
|
@@ -146,11 +241,10 @@ uint16_t IPMICMD_AddSELEntry(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
{
|
|
{
|
|
uint16_t wRet = 0;
|
|
uint16_t wRet = 0;
|
|
uint32_t dwResLen;
|
|
uint32_t dwResLen;
|
|
- uint8_t NetFnLunStorage = (NETFN_STORAGE << 2);
|
|
|
|
|
|
|
|
dwResLen = sizeof(AddSELRes_T);
|
|
dwResLen = sizeof(AddSELRes_T);
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
- NetFnLunStorage, CMD_ADD_SEL_ENTRY,
|
|
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_ADD_SEL_ENTRY,
|
|
(uint8_t*)pSELReqData, sizeof(SELEventRecord_T),
|
|
(uint8_t*)pSELReqData, sizeof(SELEventRecord_T),
|
|
(uint8_t *)pSELResData, &dwResLen,
|
|
(uint8_t *)pSELResData, &dwResLen,
|
|
timeout);
|
|
timeout);
|
|
@@ -175,7 +269,7 @@ uint16_t IPMICMD_DeleteSELEntry(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
//first do a SEL reservation
|
|
//first do a SEL reservation
|
|
dwResLen = sizeof(ReserveSELRes_T);
|
|
dwResLen = sizeof(ReserveSELRes_T);
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
- (NETFN_STORAGE << 2), CMD_RESERVE_SEL,
|
|
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_RESERVE_SEL,
|
|
NULL, 0,
|
|
NULL, 0,
|
|
(uint8_t *)&ReserveSelRes, &dwResLen,
|
|
(uint8_t *)&ReserveSelRes, &dwResLen,
|
|
timeout);
|
|
timeout);
|
|
@@ -199,7 +293,7 @@ uint16_t IPMICMD_DeleteSELEntry(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
DeleteSELReqData.RecID = RecordID;
|
|
DeleteSELReqData.RecID = RecordID;
|
|
|
|
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
- (NETFN_STORAGE << 2), CMD_DELETE_SEL_ENTRY,
|
|
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_DELETE_SEL_ENTRY,
|
|
(uint8_t*)&DeleteSELReqData, sizeof(DeleteSELReqData),
|
|
(uint8_t*)&DeleteSELReqData, sizeof(DeleteSELReqData),
|
|
(uint8_t *)&DeleteSELResData, &dwResLen,
|
|
(uint8_t *)&DeleteSELResData, &dwResLen,
|
|
timeout);
|
|
timeout);
|
|
@@ -217,12 +311,10 @@ uint16_t IPMICMD_ClearSEL(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
|
|
|
|
uint8_t DummyReqData[8];
|
|
uint8_t DummyReqData[8];
|
|
|
|
|
|
- uint8_t NetFnLunStorage = (NETFN_STORAGE << 2);
|
|
|
|
-
|
|
|
|
//first do a SEL reservation
|
|
//first do a SEL reservation
|
|
dwResLen = sizeof(ReserveSELRes_T);
|
|
dwResLen = sizeof(ReserveSELRes_T);
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
- NetFnLunStorage, CMD_RESERVE_SEL,
|
|
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_RESERVE_SEL,
|
|
(uint8_t*)DummyReqData, 0,
|
|
(uint8_t*)DummyReqData, 0,
|
|
(uint8_t *)&ReserveSelRes, &dwResLen,
|
|
(uint8_t *)&ReserveSelRes, &dwResLen,
|
|
timeout);
|
|
timeout);
|
|
@@ -251,7 +343,7 @@ uint16_t IPMICMD_ClearSEL(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
|
|
|
|
dwResLen = sizeof(ClearSELRes_T);
|
|
dwResLen = sizeof(ClearSELRes_T);
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
- NetFnLunStorage, CMD_CLEAR_SEL,
|
|
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_CLEAR_SEL,
|
|
(uint8_t*)&ClearSelReq, sizeof(ClearSELReq_T),
|
|
(uint8_t*)&ClearSelReq, sizeof(ClearSELReq_T),
|
|
(uint8_t *)&ClearSelRes, &dwResLen,
|
|
(uint8_t *)&ClearSelRes, &dwResLen,
|
|
timeout);
|
|
timeout);
|
|
@@ -340,17 +432,25 @@ uint16_t LIBIPMI_HL_GetNumOfSELEntries(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
uint16_t* nNumOfSELEntries,
|
|
uint16_t* nNumOfSELEntries,
|
|
int timeout)
|
|
int timeout)
|
|
{
|
|
{
|
|
- uint16_t wRet = 0;
|
|
|
|
SELInfo_T SELInfo;
|
|
SELInfo_T SELInfo;
|
|
|
|
+ uint16_t wRet;
|
|
|
|
+ uint32_t dwResLen;
|
|
|
|
+ uint8_t DummyReqData[8];
|
|
|
|
|
|
- wRet = IPMICMD_GetSELInfo(pUDSSession,&SELInfo,timeout);
|
|
|
|
- if(wRet != 0)
|
|
|
|
|
|
+ dwResLen = sizeof(SELInfo_T);
|
|
|
|
+ wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
|
|
+ NETFNLUN_IPMI_STORAGE, CMD_GET_SEL_INFO,
|
|
|
|
+ (uint8_t*)DummyReqData, 0,
|
|
|
|
+ (uint8_t *)&SELInfo, &dwResLen,
|
|
|
|
+ timeout);
|
|
|
|
+ if((wRet != 0) || (SELInfo.CompletionCode != 0))
|
|
{
|
|
{
|
|
printf("LIBIPMI_HL_GetNumOfSELEntries: Error getting SEL info\n");
|
|
printf("LIBIPMI_HL_GetNumOfSELEntries: Error getting SEL info\n");
|
|
|
|
+ *nNumOfSELEntries = 0;
|
|
return wRet;
|
|
return wRet;
|
|
}
|
|
}
|
|
*nNumOfSELEntries = (SELInfo.RecCt);
|
|
*nNumOfSELEntries = (SELInfo.RecCt);
|
|
- return wRet;
|
|
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
uint16_t IPMC_GetNumOfSELEntries(IPMI20_UDS_SESSION_T *pUDSSession, uint8_t IpmbAddr,
|
|
uint16_t IPMC_GetNumOfSELEntries(IPMI20_UDS_SESSION_T *pUDSSession, uint8_t IpmbAddr,
|
|
@@ -388,63 +488,9 @@ uint16_t IPMC_GetNumOfSELEntries(IPMI20_UDS_SESSION_T *pUDSSession, uint8_t Ipmb
|
|
pSELInfo = (SELInfo_T *)&Res[6];
|
|
pSELInfo = (SELInfo_T *)&Res[6];
|
|
*nNumOfSELEntries = (pSELInfo->RecCt);
|
|
*nNumOfSELEntries = (pSELInfo->RecCt);
|
|
|
|
|
|
- return wRet;
|
|
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-/* This function returns max possible number of SEL entries in the system at any time */
|
|
|
|
-uint16_t LIBIPMI_HL_GetMaxPossibleSELEntries(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
|
|
- uint16_t* nMaxPossibleSELEntries,
|
|
|
|
- int timeout)
|
|
|
|
-{
|
|
|
|
- uint16_t wRet = 0;
|
|
|
|
- SELAllocInfo_T SELAllocInfo;
|
|
|
|
-
|
|
|
|
- wRet = IPMICMD_GetSELAllocationInfo(pUDSSession,&SELAllocInfo,timeout);
|
|
|
|
- if(wRet != 0)
|
|
|
|
- {
|
|
|
|
- printf("LIBIPMI_HL_GetMaxPossibleSELEntries: Error getting SEL Alloc info\n");
|
|
|
|
- return wRet;
|
|
|
|
- }
|
|
|
|
- *nMaxPossibleSELEntries = (SELAllocInfo.NumAllocUnits);
|
|
|
|
- return wRet;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-uint16_t IPMC_GetMaxPossibleSELEntries(IPMI20_UDS_SESSION_T *pUDSSession, uint8_t IpmbAddr,
|
|
|
|
- uint16_t* nMaxPossibleSELEntries,
|
|
|
|
- int timeout)
|
|
|
|
-{
|
|
|
|
- int wRet = 0;
|
|
|
|
- uint32_t dwResLen;
|
|
|
|
- uint8_t Req[50] = {0};
|
|
|
|
- uint8_t Res[50] = {0};
|
|
|
|
- SELAllocInfo_T *pSELAllocInfo;
|
|
|
|
-
|
|
|
|
- Req[0] = 0x40; //Track | channel 0
|
|
|
|
- Req[1] = IpmbAddr;
|
|
|
|
- Req[2] = NETFNLUN_IPMI_STORAGE;
|
|
|
|
- Req[3] = 0x100 - (Req[1] + Req[2])&0xff; //checksum1
|
|
|
|
- Req[4] = 0x20;
|
|
|
|
- Req[5] = 0x10;
|
|
|
|
- Req[6] = CMD_GET_SEL_ALLOCATION_INFO;
|
|
|
|
- Req[7] = 0x100 - (Req[4] + Req[5] + Req[6])&0xff;
|
|
|
|
-
|
|
|
|
- wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
|
|
- NETFNLUN_IPMI_APP, CMD_SEND_MSG,
|
|
|
|
- Req, 8,
|
|
|
|
- Res, &dwResLen,
|
|
|
|
- timeout);
|
|
|
|
-
|
|
|
|
- if ( (wRet != 0) || (Res[6] != 0) )
|
|
|
|
- {
|
|
|
|
- printf("Get SEL Number failed!\n");
|
|
|
|
- *nMaxPossibleSELEntries = 0;
|
|
|
|
- return wRet;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- pSELAllocInfo = (SELAllocInfo_T*)&Res[6];
|
|
|
|
- *nMaxPossibleSELEntries = (pSELAllocInfo->NumAllocUnits);
|
|
|
|
- return wRet;
|
|
|
|
-}
|
|
|
|
|
|
|
|
/* This function returns total number of SEL entries present in the system at that time.
|
|
/* This function returns total number of SEL entries present in the system at that time.
|
|
IMPORTANT:
|
|
IMPORTANT:
|
|
@@ -928,11 +974,10 @@ uint16_t IPMICMD_GetFRUInventoryAreaInfo(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
{
|
|
{
|
|
uint16_t wRet,tmp;
|
|
uint16_t wRet,tmp;
|
|
uint32_t dwResLen;
|
|
uint32_t dwResLen;
|
|
- uint8_t NetFnLunStorage = (NETFN_STORAGE << 2);
|
|
|
|
|
|
|
|
dwResLen = sizeof(FRUInventoryAreaInfoRes_T);
|
|
dwResLen = sizeof(FRUInventoryAreaInfoRes_T);
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
- NetFnLunStorage, CMD_FRU_INVENTORY_AREA_INFO,
|
|
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_FRU_INVENTORY_AREA_INFO,
|
|
(uint8_t *)pReqFRUInventoryAreaInfo, sizeof(FRUInventoryAreaInfoReq_T),
|
|
(uint8_t *)pReqFRUInventoryAreaInfo, sizeof(FRUInventoryAreaInfoReq_T),
|
|
(uint8_t *)pResFRUInventoryAreaInfo, &dwResLen,
|
|
(uint8_t *)pResFRUInventoryAreaInfo, &dwResLen,
|
|
timeout);
|
|
timeout);
|
|
@@ -949,11 +994,10 @@ uint16_t IPMICMD_ReadFRUData(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
{
|
|
{
|
|
uint16_t wRet = 0;
|
|
uint16_t wRet = 0;
|
|
uint32_t dwResLen;
|
|
uint32_t dwResLen;
|
|
- uint8_t NetFnLunStorage = (NETFN_STORAGE << 2);
|
|
|
|
|
|
|
|
dwResLen = sizeof(FRUReadRes_T) + (pFRUReadReqData->CountToRead);
|
|
dwResLen = sizeof(FRUReadRes_T) + (pFRUReadReqData->CountToRead);
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
- NetFnLunStorage, CMD_READ_FRU_DATA,
|
|
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_READ_FRU_DATA,
|
|
(uint8_t *)pFRUReadReqData, sizeof(FRUReadReq_T),
|
|
(uint8_t *)pFRUReadReqData, sizeof(FRUReadReq_T),
|
|
(uint8_t *)pFRUReadResData, &dwResLen,
|
|
(uint8_t *)pFRUReadResData, &dwResLen,
|
|
timeout);
|
|
timeout);
|
|
@@ -968,11 +1012,10 @@ uint16_t IPMICMD_WriteFRUData(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
{
|
|
{
|
|
uint16_t wRet = 0;
|
|
uint16_t wRet = 0;
|
|
uint32_t dwResLen;
|
|
uint32_t dwResLen;
|
|
- uint8_t NetFnLunStorage = (NETFN_STORAGE << 2);
|
|
|
|
|
|
|
|
dwResLen = sizeof(FRUWriteRes_T);
|
|
dwResLen = sizeof(FRUWriteRes_T);
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
- NetFnLunStorage, CMD_WRITE_FRU_DATA,
|
|
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_WRITE_FRU_DATA,
|
|
(uint8_t *)pFRUWriteReqData, ReqDataLen,
|
|
(uint8_t *)pFRUWriteReqData, ReqDataLen,
|
|
(uint8_t *)pFRUWriteResData, &dwResLen,
|
|
(uint8_t *)pFRUWriteResData, &dwResLen,
|
|
timeout);
|
|
timeout);
|
|
@@ -1109,11 +1152,10 @@ uint8_t IPMICMD_GetSELTime(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
uint16_t wRet;
|
|
uint16_t wRet;
|
|
uint32_t dwResLen;
|
|
uint32_t dwResLen;
|
|
uint8_t DummyReqData[8];
|
|
uint8_t DummyReqData[8];
|
|
- uint8_t NetFnLunStorage = (NETFN_STORAGE << 2);
|
|
|
|
|
|
|
|
dwResLen = sizeof(GetSELTimeRes_T);
|
|
dwResLen = sizeof(GetSELTimeRes_T);
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
- NetFnLunStorage, CMD_GET_SEL_TIME,
|
|
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_GET_SEL_TIME,
|
|
(uint8_t*)DummyReqData, 0,
|
|
(uint8_t*)DummyReqData, 0,
|
|
(uint8_t *)pGetSELTimeRes, &dwResLen,
|
|
(uint8_t *)pGetSELTimeRes, &dwResLen,
|
|
timeout);
|
|
timeout);
|
|
@@ -1124,17 +1166,49 @@ uint8_t IPMICMD_GetSELTime(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
return wRet;
|
|
return wRet;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+uint8_t IPMC_GetSELTime(IPMI20_UDS_SESSION_T *pUDSSession, uint8_t IpmbAddr,
|
|
|
|
+ GetSELTimeRes_T *pGetSELTimeRes, int timeout)
|
|
|
|
+{
|
|
|
|
+ int wRet = 0;
|
|
|
|
+ uint32_t dwResLen;
|
|
|
|
+ uint8_t Req[50] = {0};
|
|
|
|
+ uint8_t Res[50] = {0};
|
|
|
|
+
|
|
|
|
+ Req[0] = 0x40; //Track | channel 0
|
|
|
|
+ Req[1] = IpmbAddr;
|
|
|
|
+ Req[2] = NETFNLUN_IPMI_APP;
|
|
|
|
+ Req[3] = 0x100 - (Req[1] + Req[2])&0xff; //checksum1
|
|
|
|
+ Req[4] = 0x20;
|
|
|
|
+ Req[5] = 0x10;
|
|
|
|
+ Req[6] = CMD_GET_SEL_TIME;
|
|
|
|
+ Req[7] = 0x100 - (Req[4] + Req[5] + Req[6])&0xff;
|
|
|
|
+
|
|
|
|
+ wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_SEND_MSG,
|
|
|
|
+ Req, 8,
|
|
|
|
+ Res, &dwResLen,
|
|
|
|
+ timeout);
|
|
|
|
+ if ((wRet != 0) || (Res[6] != 0))
|
|
|
|
+ {
|
|
|
|
+ printf("Error getting SEL Time::%x\n",wRet);
|
|
|
|
+ pGetSELTimeRes->CompletionCode = Res[6];
|
|
|
|
+ pGetSELTimeRes->Time = 0;
|
|
|
|
+ return wRet;
|
|
|
|
+ }
|
|
|
|
+ memcpy(pGetSELTimeRes, &Res[6], sizeof(GetSELTimeRes_T));
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
uint8_t IPMICMD_SetSELTime(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
uint8_t IPMICMD_SetSELTime(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
SetSELTimeReq_T *pSetSELTimeReq, int timeout)
|
|
SetSELTimeReq_T *pSetSELTimeReq, int timeout)
|
|
{
|
|
{
|
|
uint16_t wRet;
|
|
uint16_t wRet;
|
|
uint32_t dwResLen;
|
|
uint32_t dwResLen;
|
|
uint8_t DummyResData[8];
|
|
uint8_t DummyResData[8];
|
|
- uint8_t NetFnLunStorage = (NETFN_STORAGE << 2);
|
|
|
|
|
|
|
|
dwResLen = sizeof(uint8_t);
|
|
dwResLen = sizeof(uint8_t);
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
- NetFnLunStorage, CMD_SET_SEL_TIME,
|
|
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_SET_SEL_TIME,
|
|
(uint8_t *)pSetSELTimeReq, sizeof(SetSELTimeReq_T),
|
|
(uint8_t *)pSetSELTimeReq, sizeof(SetSELTimeReq_T),
|
|
(uint8_t *)DummyResData, &dwResLen,
|
|
(uint8_t *)DummyResData, &dwResLen,
|
|
timeout);
|
|
timeout);
|
|
@@ -1148,54 +1222,33 @@ uint8_t IPMICMD_SetSELTime(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
uint8_t IPMC_SetSELTime(IPMI20_UDS_SESSION_T *pUDSSession, uint8_t IpmbAddr,
|
|
uint8_t IPMC_SetSELTime(IPMI20_UDS_SESSION_T *pUDSSession, uint8_t IpmbAddr,
|
|
SetSELTimeReq_T *pSetSELTimeReq, int timeout)
|
|
SetSELTimeReq_T *pSetSELTimeReq, int timeout)
|
|
{
|
|
{
|
|
- uint16_t wRet;
|
|
|
|
|
|
+ int wRet = 0;
|
|
uint32_t dwResLen;
|
|
uint32_t dwResLen;
|
|
- uint8_t DummyResData[8];
|
|
|
|
- uint8_t NetFnLunStorage = (NETFN_STORAGE << 2);
|
|
|
|
|
|
+ uint8_t Req[50] = {0};
|
|
|
|
+ uint8_t Res[50] = {0};
|
|
|
|
+
|
|
|
|
+ Req[0] = 0x40; //Track | channel 0
|
|
|
|
+ Req[1] = IpmbAddr;
|
|
|
|
+ Req[2] = NETFNLUN_IPMI_APP;
|
|
|
|
+ Req[3] = 0x100 - (Req[1] + Req[2])&0xff; //checksum1
|
|
|
|
+ Req[4] = 0x20;
|
|
|
|
+ Req[5] = 0x10;
|
|
|
|
+ Req[6] = CMD_SET_SEL_TIME;
|
|
|
|
+ Req[7] = pSetSELTimeReq->Time&0xff;
|
|
|
|
+ Req[8] = (pSetSELTimeReq->Time>>8)&0xff;
|
|
|
|
+ Req[9] = (pSetSELTimeReq->Time>>16)&0xff;
|
|
|
|
+ Req[10] = (pSetSELTimeReq->Time>>24)&0xff;
|
|
|
|
+ Req[11] = 0x100 - (Req[4] + Req[5] + Req[6] + Req[7] + Req[8] + Req[9] + Req[10])&0xff;
|
|
|
|
|
|
- dwResLen = sizeof(uint8_t);
|
|
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
- NetFnLunStorage, CMD_SET_SEL_TIME,
|
|
|
|
- (uint8_t *)pSetSELTimeReq, sizeof(SetSELTimeReq_T),
|
|
|
|
- (uint8_t *)DummyResData, &dwResLen,
|
|
|
|
- timeout);
|
|
|
|
- if (wRet != 0)
|
|
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_SEND_MSG,
|
|
|
|
+ Req, 12,
|
|
|
|
+ Res, &dwResLen,
|
|
|
|
+ timeout);
|
|
|
|
+ if ((wRet != 0) || (Res[6] != 0))
|
|
{
|
|
{
|
|
printf("Error setting SEL Time::%x\n",wRet);
|
|
printf("Error setting SEL Time::%x\n",wRet);
|
|
}
|
|
}
|
|
-
|
|
|
|
- // int wRet = 0;
|
|
|
|
- // uint32_t dwResLen;
|
|
|
|
- // uint8_t Req[50] = {0};
|
|
|
|
- // uint8_t Res[50] = {0};
|
|
|
|
-
|
|
|
|
- // Req[0] = 0x40; //Track | channel 0
|
|
|
|
- // Req[1] = IpmbAddr;
|
|
|
|
- // Req[2] = NETFNLUN_IPMI_STORAGE;
|
|
|
|
- // Req[3] = 0x100 - (Req[1] + Req[2])&0xff; //checksum1
|
|
|
|
- // Req[4] = 0x20;
|
|
|
|
- // Req[5] = 0x10;
|
|
|
|
- // Req[6] = CMD_SET_SEL_TIME;
|
|
|
|
- // Req[7] = (pSetSELTimeReq->Time)&0xff;
|
|
|
|
- // Req[8] = (pSetSELTimeReq->Time>>8)&0xff;
|
|
|
|
- // Req[9] = (pSetSELTimeReq->Time>>16)&0xff;
|
|
|
|
- // Req[10] = (pSetSELTimeReq->Time>>24)&0xff;
|
|
|
|
- // Req[11] = 0x100 - (Req[4] + Req[5] + Req[6] + Req[7] + Req[8] + Req[9] + Req[10])&0xff;
|
|
|
|
-
|
|
|
|
- // wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
|
|
- // NETFNLUN_IPMI_APP, CMD_SEND_MSG,
|
|
|
|
- // Req, 8,
|
|
|
|
- // Res, &dwResLen,
|
|
|
|
- // timeout);
|
|
|
|
-
|
|
|
|
- // if((wRet != 0) || (Res[6] != 0))
|
|
|
|
- // {
|
|
|
|
- // printf("IPMC_SetSELTime failed!\n");
|
|
|
|
- // return -1;
|
|
|
|
- // }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
return wRet;
|
|
return wRet;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1205,11 +1258,10 @@ uint8_t IPMICMD_GetSELTimeUTCOffset(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
uint16_t wRet;
|
|
uint16_t wRet;
|
|
uint32_t dwResLen;
|
|
uint32_t dwResLen;
|
|
uint8_t DummyReqData[8];
|
|
uint8_t DummyReqData[8];
|
|
- uint8_t NetFnLunStorage = (NETFN_STORAGE << 2);
|
|
|
|
|
|
|
|
dwResLen = sizeof(GetSELTimeUTCOffsetRes_T);
|
|
dwResLen = sizeof(GetSELTimeUTCOffsetRes_T);
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
- NetFnLunStorage, CMD_GET_SEL_TIME_UTC_OFFSET,
|
|
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_GET_SEL_TIME_UTC_OFFSET,
|
|
(uint8_t*)DummyReqData, 0,
|
|
(uint8_t*)DummyReqData, 0,
|
|
(uint8_t *)pGetSELTimeUTCOffsetRes, &dwResLen,
|
|
(uint8_t *)pGetSELTimeUTCOffsetRes, &dwResLen,
|
|
timeout);
|
|
timeout);
|
|
@@ -1220,17 +1272,49 @@ uint8_t IPMICMD_GetSELTimeUTCOffset(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
return wRet;
|
|
return wRet;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+uint8_t IPMC_GetSELTimeUTCOffset(IPMI20_UDS_SESSION_T *pUDSSession, uint8_t IpmbAddr,
|
|
|
|
+ GetSELTimeUTCOffsetRes_T *pGetSELTimeUTCOffsetRes, int timeout)
|
|
|
|
+{
|
|
|
|
+ int wRet = 0;
|
|
|
|
+ uint32_t dwResLen;
|
|
|
|
+ uint8_t Req[50] = {0};
|
|
|
|
+ uint8_t Res[50] = {0};
|
|
|
|
+
|
|
|
|
+ Req[0] = 0x40; //Track | channel 0
|
|
|
|
+ Req[1] = IpmbAddr;
|
|
|
|
+ Req[2] = NETFNLUN_IPMI_APP;
|
|
|
|
+ Req[3] = 0x100 - (Req[1] + Req[2])&0xff; //checksum1
|
|
|
|
+ Req[4] = 0x20;
|
|
|
|
+ Req[5] = 0x10;
|
|
|
|
+ Req[6] = CMD_GET_SEL_TIME_UTC_OFFSET;
|
|
|
|
+ Req[7] = 0x100 - (Req[4] + Req[5] + Req[6])&0xff;
|
|
|
|
+
|
|
|
|
+ wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_SEND_MSG,
|
|
|
|
+ Req, 8,
|
|
|
|
+ Res, &dwResLen,
|
|
|
|
+ timeout);
|
|
|
|
+ if ((wRet != 0) || (Res[6] != 0))
|
|
|
|
+ {
|
|
|
|
+ printf("Error getting SEL Time UTC Offset::%x\n",wRet);
|
|
|
|
+ pGetSELTimeUTCOffsetRes->CompletionCode;
|
|
|
|
+ pGetSELTimeUTCOffsetRes->UTCOffset = 0;
|
|
|
|
+ return wRet;
|
|
|
|
+ }
|
|
|
|
+ memcpy(pGetSELTimeUTCOffsetRes, &Res[6], sizeof(GetSELTimeUTCOffsetRes_T));
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
uint8_t IPMICMD_SetSELTimeUTCOffset(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
uint8_t IPMICMD_SetSELTimeUTCOffset(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
SetSELTimeUTCOffsetReq_T *pSetSELTimeUTCOffsetReq, int timeout)
|
|
SetSELTimeUTCOffsetReq_T *pSetSELTimeUTCOffsetReq, int timeout)
|
|
{
|
|
{
|
|
uint16_t wRet;
|
|
uint16_t wRet;
|
|
uint32_t dwResLen;
|
|
uint32_t dwResLen;
|
|
SetSELTimeUTCOffsetRes_T pSetSELTimeUTCOffsetRes;
|
|
SetSELTimeUTCOffsetRes_T pSetSELTimeUTCOffsetRes;
|
|
- uint8_t NetFnLunStorage = (NETFN_STORAGE << 2);
|
|
|
|
|
|
|
|
dwResLen = sizeof(SetSELTimeUTCOffsetRes_T);
|
|
dwResLen = sizeof(SetSELTimeUTCOffsetRes_T);
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
- NetFnLunStorage, CMD_SET_SEL_TIME_UTC_OFFSET,
|
|
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_SET_SEL_TIME_UTC_OFFSET,
|
|
(uint8_t *)pSetSELTimeUTCOffsetReq, sizeof(SetSELTimeUTCOffsetReq_T),
|
|
(uint8_t *)pSetSELTimeUTCOffsetReq, sizeof(SetSELTimeUTCOffsetReq_T),
|
|
(uint8_t *)&pSetSELTimeUTCOffsetRes, &dwResLen,
|
|
(uint8_t *)&pSetSELTimeUTCOffsetRes, &dwResLen,
|
|
timeout);
|
|
timeout);
|
|
@@ -1240,3 +1324,37 @@ uint8_t IPMICMD_SetSELTimeUTCOffset(IPMI20_UDS_SESSION_T *pUDSSession,
|
|
}
|
|
}
|
|
return wRet;
|
|
return wRet;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+uint8_t IPMC_SetSELTimeUTCOffset(IPMI20_UDS_SESSION_T *pUDSSession, uint8_t IpmbAddr,
|
|
|
|
+ SetSELTimeUTCOffsetReq_T *pSetSELTimeUTCOffsetReq, int timeout)
|
|
|
|
+{
|
|
|
|
+ int wRet = 0;
|
|
|
|
+ uint32_t dwResLen;
|
|
|
|
+ uint8_t Req[50] = {0};
|
|
|
|
+ uint8_t Res[50] = {0};
|
|
|
|
+
|
|
|
|
+ Req[0] = 0x40; //Track | channel 0
|
|
|
|
+ Req[1] = IpmbAddr;
|
|
|
|
+ Req[2] = NETFNLUN_IPMI_APP;
|
|
|
|
+ Req[3] = 0x100 - (Req[1] + Req[2])&0xff; //checksum1
|
|
|
|
+ Req[4] = 0x20;
|
|
|
|
+ Req[5] = 0x10;
|
|
|
|
+ Req[6] = CMD_SET_SEL_TIME_UTC_OFFSET;
|
|
|
|
+ Req[7] = pSetSELTimeUTCOffsetReq->UTCOffset&0xff;
|
|
|
|
+ Req[8] = (pSetSELTimeUTCOffsetReq->UTCOffset>>8)&0xff;
|
|
|
|
+ Req[9] = (pSetSELTimeUTCOffsetReq->UTCOffset>>16)&0xff;
|
|
|
|
+ Req[10] = (pSetSELTimeUTCOffsetReq->UTCOffset>>24)&0xff;
|
|
|
|
+ Req[11] = 0x100 - (Req[4] + Req[5] + Req[6] + Req[7] + Req[8] + Req[9] + Req[10])&0xff;
|
|
|
|
+
|
|
|
|
+ wRet = LIBIPMI_Send_RAW_IPMI2_0_Command(pUDSSession,
|
|
|
|
+ NETFNLUN_IPMI_APP, CMD_SEND_MSG,
|
|
|
|
+ Req, 12,
|
|
|
|
+ Res, &dwResLen,
|
|
|
|
+ timeout);
|
|
|
|
+ if ((wRet != 0) || (Res[6] != 0))
|
|
|
|
+ {
|
|
|
|
+ printf("Error setting SEL Time UTC Offset::%x\n",wRet);
|
|
|
|
+ return wRet;
|
|
|
|
+ }
|
|
|
|
+ return 0;
|
|
|
|
+}
|