ID: 70 - Fixes and updates for ipmitool hpm

Added a new field to show the Deferred firmware version value as part
of the 'hpm check' subcommand.

The deferred firmware version is the version of the firmware which has
been loaded with the 'hpm upgrade' command, but not yet activated.

Commit for Dan Gora
This commit is contained in:
Zdenek Styblik 2013-07-17 10:36:07 +00:00
parent 25fa0f80ae
commit cee8fc659a

View File

@ -1014,6 +1014,9 @@ typedef struct _VERSIONINFO
unsigned char rollbackMajor; unsigned char rollbackMajor;
unsigned char rollbackMinor; unsigned char rollbackMinor;
unsigned char rollbackAux[4]; unsigned char rollbackAux[4];
unsigned char deferredMajor;
unsigned char deferredMinor;
unsigned char deferredAux[4];
unsigned char imageMajor; unsigned char imageMajor;
unsigned char imageMinor; unsigned char imageMinor;
unsigned char imageAux[4]; unsigned char imageAux[4];
@ -1192,16 +1195,20 @@ void HpmDisplayVersionHeader(int mode)
if ( mode & IMAGE_VER) if ( mode & IMAGE_VER)
{ {
HpmDisplayLine("-",74 ); HpmDisplayLine("-",74 );
printf("|ID | Name | Versions |\n"); printf(
printf("| | | Active | Backup | File |\n"); "|ID | Name | Versions |\n");
printf(
"| | | Active | Backup | File |\n");
HpmDisplayLine("-",74 ); HpmDisplayLine("-",74 );
} }
else else
{ {
HpmDisplayLine("-",56 ); HpmDisplayLine("-",74 );
printf("|ID | Name | Versions |\n"); printf(
printf("| | | Active | Backup |\n"); "|ID | Name | Versions |\n");
HpmDisplayLine("-",56 ); printf(
"| | | Active | Backup | Deferred |\n");
HpmDisplayLine("-",74 );
} }
} }
@ -1214,70 +1221,89 @@ void HpmDisplayVersionHeader(int mode)
*****************************************************************************/ *****************************************************************************/
void HpmDisplayVersion(int mode, VERSIONINFO *pVersion, int upgradable) void HpmDisplayVersion(int mode, VERSIONINFO *pVersion, int upgradable)
{ {
char descString[16]; char descString[16];
memset(&descString,0x00,sizeof(descString)); memset(&descString,0x00,sizeof(descString));
/* /*
* Added this to ensure that even if the description string * Added this to ensure that even if the description string
* is more than required it does not give problem in displaying it * is more than required it does not give problem in displaying it
*/ */
strncpy(descString,pVersion->descString,13); strncpy(descString,pVersion->descString,13);
/*
* If the cold reset is required then we can display * on it
* so that user is aware that he needs to do payload power
* cycle after upgrade
*/
printf("|%c%c%2d|%-13s|",
pVersion->coldResetRequired?'*':' ',
upgradable ? '^': ' ',
pVersion->componentId,descString);
if (mode & TARGET_VER) /*
{ * If the cold reset is required then we can display * on it
if (pVersion->targetMajor == 0xFF && pVersion->targetMinor == 0xFF) * so that user is aware that he needs to do payload power
printf(" ---.-- -------- |"); * cycle after upgrade
else */
printf(" %3d.%02x %02X%02X%02X%02X |", printf("|%c%c%2d|%-13s|",
pVersion->targetMajor, pVersion->coldResetRequired?'*':' ',
pVersion->targetMinor, upgradable ? '^': ' ',
pVersion->targetAux[0], pVersion->componentId,descString);
pVersion->targetAux[1],
pVersion->targetAux[2],
pVersion->targetAux[3]
);
if (mode & ROLLBACK_VER) if (mode & TARGET_VER)
{ {
if (pVersion->rollbackMajor == 0xFF && pVersion->rollbackMinor == 0xFF) if ((pVersion->targetMajor == 0xFF ||
printf(" ---.-- -------- |"); (pVersion->targetMajor == 0x7F)) &&
else pVersion->targetMinor == 0xFF)
printf(" %3d.%02x %02X%02X%02X%02X |", printf(" ---.-- -------- |");
pVersion->rollbackMajor, else
pVersion->rollbackMinor, printf(" %3d.%02x %02X%02X%02X%02X |",
pVersion->rollbackAux[0], pVersion->targetMajor,
pVersion->rollbackAux[1], pVersion->targetMinor,
pVersion->rollbackAux[2], pVersion->targetAux[0],
pVersion->rollbackAux[3]); pVersion->targetAux[1],
} pVersion->targetAux[2],
else pVersion->targetAux[3]);
{
printf(" ---.-- -------- |");
}
}
if (mode & IMAGE_VER) if (mode & ROLLBACK_VER)
{ {
if (pVersion->imageMajor == 0xFF && pVersion->imageMinor == 0xFF) if ((pVersion->rollbackMajor == 0xFF ||
printf(" ---.-- |"); (pVersion->rollbackMajor == 0x7F)) &&
else pVersion->rollbackMinor == 0xFF)
printf(" %3d.%02x %02X%02X%02X%02X |", printf(" ---.-- -------- |");
pVersion->imageMajor, else
pVersion->imageMinor, printf(" %3d.%02x %02X%02X%02X%02X |",
pVersion->imageAux[0], pVersion->rollbackMajor,
pVersion->imageAux[1], pVersion->rollbackMinor,
pVersion->imageAux[2], pVersion->rollbackAux[0],
pVersion->imageAux[3]); pVersion->rollbackAux[1],
} pVersion->rollbackAux[2],
pVersion->rollbackAux[3]);
}
else
printf(" ---.-- -------- |");
}
if (mode & IMAGE_VER)
{
if ((pVersion->imageMajor == 0xFF ||
(pVersion->imageMajor == 0x7F)) &&
pVersion->imageMinor == 0xFF)
printf(" ---.-- |");
else
printf(" %3d.%02x %02X%02X%02X%02X |",
pVersion->imageMajor,
pVersion->imageMinor,
pVersion->imageAux[0],
pVersion->imageAux[1],
pVersion->imageAux[2],
pVersion->imageAux[3]);
}
else
{
if ((pVersion->deferredMajor == 0xFF ||
(pVersion->deferredMajor == 0x7F)) &&
pVersion->deferredMinor == 0xFF)
printf(" ---.-- -------- |");
else
printf(" %3d.%02x %02X%02X%02X%02X |",
pVersion->deferredMajor,
pVersion->deferredMinor,
pVersion->deferredAux[0],
pVersion->deferredAux[1],
pVersion->deferredAux[2],
pVersion->deferredAux[3]);
}
} }
@ -1397,17 +1423,45 @@ int HpmfwupgTargetCheck(struct ipmi_intf * intf, int option)
.Response.rollbackFwVersionResp.rollbackFwVersion[0]; .Response.rollbackFwVersionResp.rollbackFwVersion[0];
gVersionInfo[componentId].rollbackMinor = getCompProp.resp gVersionInfo[componentId].rollbackMinor = getCompProp.resp
.Response.rollbackFwVersionResp.rollbackFwVersion[1]; .Response.rollbackFwVersionResp.rollbackFwVersion[1];
gVersionInfo[componentId].rollbackAux[0] = getCompProp.resp.Response. gVersionInfo[componentId].rollbackAux[0] = getCompProp.resp.Response.rollbackFwVersionResp.rollbackFwVersion[2];
rollbackFwVersionResp.rollbackFwVersion[2]; gVersionInfo[componentId].rollbackAux[1] = getCompProp.resp.Response.rollbackFwVersionResp.rollbackFwVersion[3];
gVersionInfo[componentId].rollbackAux[1] = getCompProp.resp.Response. gVersionInfo[componentId].rollbackAux[2] = getCompProp.resp.Response.rollbackFwVersionResp.rollbackFwVersion[4];
rollbackFwVersionResp.rollbackFwVersion[3]; gVersionInfo[componentId].rollbackAux[3] = getCompProp.resp.Response.rollbackFwVersionResp.rollbackFwVersion[5];
gVersionInfo[componentId].rollbackAux[2] = getCompProp.resp.Response. }
rollbackFwVersionResp.rollbackFwVersion[4];
gVersionInfo[componentId].rollbackAux[3] = getCompProp.resp.Response. getCompProp.req.selector = HPMFWUPG_COMP_DEFERRED_FIRMWARE_VERSION;
rollbackFwVersionResp.rollbackFwVersion[5]; rc = HpmfwupgGetComponentProperties(intf, &getCompProp);
if (rc != HPMFWUPG_SUCCESS)
{
lprintf(LOG_NOTICE,"Get CompRollbackVersion Failed for component Id %d\n",componentId);
} else {
gVersionInfo[componentId].deferredMajor = getCompProp.resp
.Response.deferredFwVersionResp.deferredFwVersion[0];
gVersionInfo[componentId].deferredMinor = getCompProp.resp
.Response.deferredFwVersionResp.deferredFwVersion[1];
gVersionInfo[componentId].deferredAux[0] = getCompProp.resp.Response.deferredFwVersionResp.deferredFwVersion[2];
gVersionInfo[componentId].deferredAux[1] = getCompProp.resp.Response.deferredFwVersionResp.deferredFwVersion[3];
gVersionInfo[componentId].deferredAux[2] = getCompProp.resp.Response.deferredFwVersionResp.deferredFwVersion[4];
gVersionInfo[componentId].deferredAux[3] = getCompProp.resp.Response.deferredFwVersionResp.deferredFwVersion[5];
} }
mode |= ROLLBACK_VER; mode |= ROLLBACK_VER;
} }
else
{
gVersionInfo[componentId].rollbackMajor = 0xff;
gVersionInfo[componentId].rollbackMinor = 0xff;
gVersionInfo[componentId].rollbackAux[0] = 0xff;
gVersionInfo[componentId].rollbackAux[1] = 0xff;
gVersionInfo[componentId].rollbackAux[2] = 0xff;
gVersionInfo[componentId].rollbackAux[3] = 0xff;
gVersionInfo[componentId].deferredMajor = 0xff;
gVersionInfo[componentId].deferredMinor = 0xff;
gVersionInfo[componentId].deferredAux[0] = 0xff;
gVersionInfo[componentId].deferredAux[1] = 0xff;
gVersionInfo[componentId].deferredAux[2] = 0xff;
gVersionInfo[componentId].deferredAux[3] = 0xff;
}
if (gVersionInfo[componentId].coldResetRequired) if (gVersionInfo[componentId].coldResetRequired)
{ {
@ -1427,7 +1481,7 @@ int HpmfwupgTargetCheck(struct ipmi_intf * intf, int option)
if (option & VIEW_MODE) if (option & VIEW_MODE)
{ {
HpmDisplayLine("-",56 ); HpmDisplayLine("-",74 );
fflush(stdout); fflush(stdout);
lprintf(LOG_NOTICE,"(*) Component requires Payload Cold Reset"); lprintf(LOG_NOTICE,"(*) Component requires Payload Cold Reset");
printf("\n\n"); printf("\n\n");