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.

For example:

root@octeon:~# ./ipmitool hpm check

PICMG HPM.1 Upgrade Agent 1.0.8:

-------Target Information-------
Device Id          : 0x12
Device Revision    : 0x80
Product Id         : 0xbaba
Manufacturer Id    : 0x400a (Pigeon Point Systems)

--------------------------------------------------------------------------
|ID  | Name        |                     Versions                        |
|    |             |     Active      |     Backup      |      Deferred   |
--------------------------------------------------------------------------
|*  0|H8S-AMCc F/W |   2.00 10000000 |   2.00 0F000000 | ---.-- -------- |
|   1|H8S-AMCc B/L |   2.00 00000000 | ---.-- -------- | ---.-- -------- |
|   2|H8S-AMCc F/I |   2.00 10000000 | ---.-- -------- | ---.-- -------- |
--------------------------------------------------------------------------
(*) Component requires Payload Cold Reset

root@octeon:~# ./ipmitool hpm upgrade hpm1fw.img.16

PICMG HPM.1 Upgrade Agent 1.0.8:

Validating firmware image integrity...OK
Performing preparation stage...
Services may be affected during upgrade. Do you wish to continue? y/n y
OK

Performing upgrade stage:

-------------------------------------------------------------------------------
|ID  | Name        |                     Versions                        | %  |
|    |             |      Active     |      Backup     |      File       |    |
|----|-------------|-----------------|-----------------|-----------------|----|
|*  0|H8S-AMCc F/W |   2.00 10000000 |   2.00 0F000000 |   2.00 10000000 |100%|
|    |Upload Time: 03:09             | Image Size: 143942                      |
-------------------------------------------------------------------------------
(*) Component requires Payload Cold Reset

Firmware upgrade procedure successful

root@octeon:~# ./ipmitool hpm check

PICMG HPM.1 Upgrade Agent 1.0.8:

-------Target Information-------
Device Id          : 0x12
Device Revision    : 0x80
Product Id         : 0xbaba
Manufacturer Id    : 0x400a (Pigeon Point Systems)

--------------------------------------------------------------------------
|ID  | Name        |                     Versions                        |
|    |             |     Active      |     Backup      |      Deferred   |
--------------------------------------------------------------------------
|*  0|H8S-AMCc F/W |   2.00 10000000 | ---.-- -------- |   2.00 10000000 |
|   1|H8S-AMCc B/L |   2.00 00000000 | ---.-- -------- | ---.-- -------- |
|   2|H8S-AMCc F/I |   2.00 10000000 | ---.-- -------- | ---.-- -------- |
--------------------------------------------------------------------------
(*) Component requires Payload Cold Reset

t@octeon:~# ./ipmitool hpm activate

PICMG HPM.1 Upgrade Agent 1.0.8:

root@octeon:~# ./ipmitool hpm check

PICMG HPM.1 Upgrade Agent 1.0.8:

-------Target Information-------
Device Id          : 0x12
Device Revision    : 0x80
Product Id         : 0xbaba
Manufacturer Id    : 0x400a (Pigeon Point Systems)

--------------------------------------------------------------------------
|ID  | Name        |                     Versions                        |
|    |             |     Active      |     Backup      |      Deferred   |
--------------------------------------------------------------------------
|*  0|H8S-AMCc F/W |   2.00 10000000 |   2.00 10000000 | ---.-- -------- |
|   1|H8S-AMCc B/L |   2.00 00000000 | ---.-- -------- | ---.-- -------- |
|   2|H8S-AMCc F/I |   2.00 10000000 | ---.-- -------- | ---.-- -------- |
--------------------------------------------------------------------------
(*) Component requires Payload Cold Reset

Signed-off-by: Dan Gora <d...@adax.com>
---
 ipmitool/lib/ipmi_hpmfwupg.c |  204 ++++++++++++++++++++++++++---------------
 1 files changed, 129 insertions(+), 75 deletions(-)

diff --git a/ipmitool/lib/ipmi_hpmfwupg.c b/ipmitool/lib/ipmi_hpmfwupg.c
index 7704104..27ba044 100644
--- a/ipmitool/lib/ipmi_hpmfwupg.c
+++ b/ipmitool/lib/ipmi_hpmfwupg.c
@@ -1014,6 +1014,9 @@ typedef struct _VERSIONINFO
     unsigned char rollbackMajor;
     unsigned char rollbackMinor;
     unsigned char rollbackAux[4];
+    unsigned char deferredMajor;
+    unsigned char deferredMinor;
+    unsigned char deferredAux[4];
     unsigned char imageMajor;
     unsigned char imageMinor;
     unsigned char imageAux[4];
@@ -1192,16 +1195,20 @@ void HpmDisplayVersionHeader(int mode)
    if ( mode & IMAGE_VER)
    {
         HpmDisplayLine("-",74 );
-        printf("|ID  | Name        |                     Versions              
          |\n");
-        printf("|    |             |     Active      |     Backup      |      
File       |\n");
+        printf(
+ "|ID  | Name        |                     Versions                        
|\n");
+        printf(
+ "|    |             |     Active      |     Backup      |      File       
|\n");
         HpmDisplayLine("-",74 );
    }
    else
    {
-        HpmDisplayLine("-",56 );
-        printf("|ID  | Name        |             Versions              |\n");
-        printf("|    |             |     Active      |     Backup      |\n");
-        HpmDisplayLine("-",56 );
+        HpmDisplayLine("-",74 );
+        printf(
+ "|ID  | Name        |                     Versions                        
|\n");
+        printf(
+ "|    |             |     Active      |     Backup      |      Deferred   
|\n");
+        HpmDisplayLine("-",74 );
    }
 }
 
@@ -1214,70 +1221,89 @@ void HpmDisplayVersionHeader(int mode)
 *****************************************************************************/
 void HpmDisplayVersion(int mode, VERSIONINFO *pVersion, int upgradable)
 {
-      char descString[16];
+       char descString[16];
 
-      memset(&descString,0x00,sizeof(descString));
-      /*
-       * Added this to ensure that even if the description string
-       * is more than required it does not give problem in displaying it
-       */
-      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);
+       memset(&descString,0x00,sizeof(descString));
+       /*
+        * Added this to ensure that even if the description string
+        * is more than required it does not give problem in displaying it
+        */
+       strncpy(descString,pVersion->descString,13);
 
-      if (mode & TARGET_VER)
-      {
-              if (pVersion->targetMajor == 0xFF && pVersion->targetMinor == 
0xFF)
-                printf(" ---.-- -------- |");
-              else
-                printf(" %3d.%02x %02X%02X%02X%02X |",
-                 pVersion->targetMajor,
-                 pVersion->targetMinor,
-                 pVersion->targetAux[0],
-                 pVersion->targetAux[1],
-                 pVersion->targetAux[2],
-                 pVersion->targetAux[3]
-                 );
+       /*
+        * 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 & ROLLBACK_VER)
-              {
-                    if (pVersion->rollbackMajor == 0xFF && 
pVersion->rollbackMinor == 0xFF)
-                        printf(" ---.-- -------- |");
-                    else
-                        printf(" %3d.%02x %02X%02X%02X%02X |",
-                         pVersion->rollbackMajor,
-                         pVersion->rollbackMinor,
-                         pVersion->rollbackAux[0],
-                         pVersion->rollbackAux[1],
-                            pVersion->rollbackAux[2],
-                            pVersion->rollbackAux[3]);
-              }
-              else
-              {
-                    printf(" ---.-- -------- |");
-              }
-      }
+       if (mode & TARGET_VER)
+               {
+               if ((pVersion->targetMajor == 0xFF ||
+                    (pVersion->targetMajor == 0x7F)) && 
+                       pVersion->targetMinor == 0xFF)
+                       printf(" ---.-- -------- |");
+               else
+                       printf(" %3d.%02x %02X%02X%02X%02X |",
+                               pVersion->targetMajor,
+                               pVersion->targetMinor,
+                               pVersion->targetAux[0],
+                               pVersion->targetAux[1],
+                               pVersion->targetAux[2],
+                               pVersion->targetAux[3]);
 
-      if (mode & IMAGE_VER)
-      {
-              if (pVersion->imageMajor == 0xFF && 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]);
-      }
+               if (mode & ROLLBACK_VER)
+                       {
+                       if ((pVersion->rollbackMajor == 0xFF ||
+                            (pVersion->rollbackMajor == 0x7F)) && 
+                               pVersion->rollbackMinor == 0xFF)
+                               printf(" ---.-- -------- |");
+                           else
+                               printf(" %3d.%02x %02X%02X%02X%02X |",
+                                       pVersion->rollbackMajor,
+                                       pVersion->rollbackMinor,
+                                       pVersion->rollbackAux[0],
+                                       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];
                     gVersionInfo[componentId].rollbackMinor = getCompProp.resp
                       .Response.rollbackFwVersionResp.rollbackFwVersion[1];
-                    gVersionInfo[componentId].rollbackAux[0] = 
getCompProp.resp.Response.
-                     rollbackFwVersionResp.rollbackFwVersion[2];
-                    gVersionInfo[componentId].rollbackAux[1] = 
getCompProp.resp.Response.
-                     rollbackFwVersionResp.rollbackFwVersion[3];
-                    gVersionInfo[componentId].rollbackAux[2] = 
getCompProp.resp.Response.
-                     rollbackFwVersionResp.rollbackFwVersion[4];
-                    gVersionInfo[componentId].rollbackAux[3] = 
getCompProp.resp.Response.
-                     rollbackFwVersionResp.rollbackFwVersion[5];
+                    gVersionInfo[componentId].rollbackAux[0] = 
getCompProp.resp.Response.rollbackFwVersionResp.rollbackFwVersion[2];
+                    gVersionInfo[componentId].rollbackAux[1] = 
getCompProp.resp.Response.rollbackFwVersionResp.rollbackFwVersion[3];
+                    gVersionInfo[componentId].rollbackAux[2] = 
getCompProp.resp.Response.rollbackFwVersionResp.rollbackFwVersion[4];
+                    gVersionInfo[componentId].rollbackAux[3] = 
getCompProp.resp.Response.rollbackFwVersionResp.rollbackFwVersion[5];
+                }
+
+                getCompProp.req.selector = 
HPMFWUPG_COMP_DEFERRED_FIRMWARE_VERSION;
+                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;
             }
+           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)
             {
@@ -1427,7 +1481,7 @@ int HpmfwupgTargetCheck(struct ipmi_intf * intf, int 
option)
 
     if (option & VIEW_MODE)
     {
-        HpmDisplayLine("-",56 );
+        HpmDisplayLine("-",74 );
        fflush(stdout);
        lprintf(LOG_NOTICE,"(*) Component requires Payload Cold Reset");
         printf("\n\n");
-- 
1.7.7


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar
_______________________________________________
Ipmitool-devel mailing list
Ipmitool-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ipmitool-devel

Reply via email to