ID: 46 - ipmi_fwum needs some re-work

KfwumGetInfoFromFirmware() - code formatting, simplify
This commit is contained in:
Zdenek Styblik 2013-10-26 19:16:36 +00:00
parent 4e2ac7d097
commit 5bf68a4769

View File

@ -1296,87 +1296,81 @@ KfwumGetTraceLog(struct ipmi_intf *intf)
#define KWUM_GET_BYTE_AT_OFFSET(pBuffer,os) pBuffer[os] #define KWUM_GET_BYTE_AT_OFFSET(pBuffer,os) pBuffer[os]
tKFWUM_Status KfwumGetInfoFromFirmware(unsigned char * pBuf, tKFWUM_Status
unsigned long bufSize, tKFWUM_InFirmwareInfo * pInfo) KfwumGetInfoFromFirmware(unsigned char *pBuf, unsigned long bufSize,
tKFWUM_InFirmwareInfo *pInfo)
{ {
tKFWUM_Status status = KFWUM_STATUS_ERROR; unsigned long offset = 0;
if (bufSize < (IN_FIRMWARE_INFO_OFFSET_LOCATION + IN_FIRMWARE_INFO_SIZE)) {
if(bufSize >= (IN_FIRMWARE_INFO_OFFSET_LOCATION + IN_FIRMWARE_INFO_SIZE)) return KFWUM_STATUS_ERROR;
{ }
unsigned long offset = IN_FIRMWARE_INFO_OFFSET_LOCATION; offset = IN_FIRMWARE_INFO_OFFSET_LOCATION;
/* Now, fill the structure with read informations */ /* Now, fill the structure with read informations */
pInfo->checksum = (unsigned short)KWUM_GET_BYTE_AT_OFFSET(pBuf, pInfo->checksum = (unsigned short)KWUM_GET_BYTE_AT_OFFSET(pBuf,
offset+0+IN_FIRMWARE_INFO_OFFSET_CHECKSUM ) << 8; offset + 0 + IN_FIRMWARE_INFO_OFFSET_CHECKSUM ) << 8;
pInfo->checksum |= (unsigned short)KWUM_GET_BYTE_AT_OFFSET(pBuf,
offset+1+IN_FIRMWARE_INFO_OFFSET_CHECKSUM );
pInfo->checksum|= (unsigned short)KWUM_GET_BYTE_AT_OFFSET(pBuf,
offset + 1 + IN_FIRMWARE_INFO_OFFSET_CHECKSUM);
pInfo->sumToRemoveFromChecksum= pInfo->sumToRemoveFromChecksum = KWUM_GET_BYTE_AT_OFFSET(pBuf,
KWUM_GET_BYTE_AT_OFFSET(pBuf, offset + IN_FIRMWARE_INFO_OFFSET_CHECKSUM);
offset+IN_FIRMWARE_INFO_OFFSET_CHECKSUM);
pInfo->sumToRemoveFromChecksum+= pInfo->sumToRemoveFromChecksum+= KWUM_GET_BYTE_AT_OFFSET(pBuf,
KWUM_GET_BYTE_AT_OFFSET(pBuf , offset + IN_FIRMWARE_INFO_OFFSET_CHECKSUM + 1);
offset+IN_FIRMWARE_INFO_OFFSET_CHECKSUM+1);
pInfo->fileSize = pInfo->fileSize = KWUM_GET_BYTE_AT_OFFSET(pBuf,
KWUM_GET_BYTE_AT_OFFSET(pBuf , offset + IN_FIRMWARE_INFO_OFFSET_FILE_SIZE + 0) << 24;
offset+IN_FIRMWARE_INFO_OFFSET_FILE_SIZE+0) << 24;
pInfo->fileSize |=
(unsigned long)KWUM_GET_BYTE_AT_OFFSET(pBuf,
offset+IN_FIRMWARE_INFO_OFFSET_FILE_SIZE+1) << 16;
pInfo->fileSize |=
(unsigned long)KWUM_GET_BYTE_AT_OFFSET(pBuf,
offset+IN_FIRMWARE_INFO_OFFSET_FILE_SIZE+2) << 8;
pInfo->fileSize |=
(unsigned long)KWUM_GET_BYTE_AT_OFFSET(pBuf,
offset+IN_FIRMWARE_INFO_OFFSET_FILE_SIZE+3);
pInfo->boardId = pInfo->fileSize|= (unsigned long)KWUM_GET_BYTE_AT_OFFSET(pBuf,
KWUM_GET_BYTE_AT_OFFSET(pBuf, offset + IN_FIRMWARE_INFO_OFFSET_FILE_SIZE + 1) << 16;
offset+IN_FIRMWARE_INFO_OFFSET_BOARD_ID+0) << 8;
pInfo->boardId |=
KWUM_GET_BYTE_AT_OFFSET(pBuf,
offset+IN_FIRMWARE_INFO_OFFSET_BOARD_ID+1);
pInfo->deviceId = pInfo->fileSize|= (unsigned long)KWUM_GET_BYTE_AT_OFFSET(pBuf,
KWUM_GET_BYTE_AT_OFFSET(pBuf, offset + IN_FIRMWARE_INFO_OFFSET_FILE_SIZE + 2) << 8;
offset+IN_FIRMWARE_INFO_OFFSET_DEVICE_ID);
pInfo->tableVers = pInfo->fileSize|= (unsigned long)KWUM_GET_BYTE_AT_OFFSET(pBuf,
KWUM_GET_BYTE_AT_OFFSET(pBuf, offset + IN_FIRMWARE_INFO_OFFSET_FILE_SIZE + 3);
offset+IN_FIRMWARE_INFO_OFFSET_TABLE_VERSION);
pInfo->implRev = pInfo->boardId = KWUM_GET_BYTE_AT_OFFSET(pBuf,
KWUM_GET_BYTE_AT_OFFSET(pBuf, offset + IN_FIRMWARE_INFO_OFFSET_BOARD_ID + 0) << 8;
offset+IN_FIRMWARE_INFO_OFFSET_IMPLEMENT_REV);
pInfo->versMajor = pInfo->boardId|= KWUM_GET_BYTE_AT_OFFSET(pBuf,
(KWUM_GET_BYTE_AT_OFFSET(pBuf, offset + IN_FIRMWARE_INFO_OFFSET_BOARD_ID + 1);
offset+IN_FIRMWARE_INFO_OFFSET_VERSION_MAJOR)) & 0x0f;
pInfo->versMinor = pInfo->deviceId = KWUM_GET_BYTE_AT_OFFSET(pBuf,
(KWUM_GET_BYTE_AT_OFFSET(pBuf, offset + IN_FIRMWARE_INFO_OFFSET_DEVICE_ID);
offset+IN_FIRMWARE_INFO_OFFSET_VERSION_MINSUB)>>4) & 0x0f;
pInfo->versSubMinor = pInfo->tableVers = KWUM_GET_BYTE_AT_OFFSET(pBuf,
(KWUM_GET_BYTE_AT_OFFSET(pBuf, offset + IN_FIRMWARE_INFO_OFFSET_TABLE_VERSION);
offset+IN_FIRMWARE_INFO_OFFSET_VERSION_MINSUB)) & 0x0f;
pInfo->sdrRev = pInfo->implRev = KWUM_GET_BYTE_AT_OFFSET(pBuf,
KWUM_GET_BYTE_AT_OFFSET(pBuf, offset + IN_FIRMWARE_INFO_OFFSET_IMPLEMENT_REV);
offset+IN_FIRMWARE_INFO_OFFSET_SDR_REV);
pInfo->iana = pInfo->versMajor = (KWUM_GET_BYTE_AT_OFFSET(pBuf,
KWUM_GET_BYTE_AT_OFFSET(pBuf , offset
offset+IN_FIRMWARE_INFO_OFFSET_IANA2) << 16; + IN_FIRMWARE_INFO_OFFSET_VERSION_MAJOR)) & 0x0f;
pInfo->iana |=
(unsigned long)KWUM_GET_BYTE_AT_OFFSET(pBuf, pInfo->versMinor = (KWUM_GET_BYTE_AT_OFFSET(pBuf,
offset+IN_FIRMWARE_INFO_OFFSET_IANA1) << 8; offset
pInfo->iana |= + IN_FIRMWARE_INFO_OFFSET_VERSION_MINSUB) >> 4) & 0x0f;
(unsigned long)KWUM_GET_BYTE_AT_OFFSET(pBuf,
offset+IN_FIRMWARE_INFO_OFFSET_IANA0); pInfo->versSubMinor = (KWUM_GET_BYTE_AT_OFFSET(pBuf,
offset + IN_FIRMWARE_INFO_OFFSET_VERSION_MINSUB)) & 0x0f;
pInfo->sdrRev = KWUM_GET_BYTE_AT_OFFSET(pBuf,
offset + IN_FIRMWARE_INFO_OFFSET_SDR_REV);
pInfo->iana = KWUM_GET_BYTE_AT_OFFSET(pBuf,
offset + IN_FIRMWARE_INFO_OFFSET_IANA2) << 16;
pInfo->iana|= (unsigned long)KWUM_GET_BYTE_AT_OFFSET(pBuf,
offset + IN_FIRMWARE_INFO_OFFSET_IANA1) << 8;
pInfo->iana|= (unsigned long)KWUM_GET_BYTE_AT_OFFSET(pBuf,
offset + IN_FIRMWARE_INFO_OFFSET_IANA0);
KfwumFixTableVersionForOldFirmware(pInfo); KfwumFixTableVersionForOldFirmware(pInfo);
return KFWUM_STATUS_OK;
status = KFWUM_STATUS_OK;
}
return(status);
} }