Index: plugins/ipmidirect/ipmi_entity.h
===================================================================
--- plugins/ipmidirect/ipmi_entity.h	(revision 6518)
+++ plugins/ipmidirect/ipmi_entity.h	(working copy)
@@ -88,9 +88,11 @@
   eIpmiEntityIdPicMgFrontBoard              = 0xa0,
   eIpmiEntityIdPicMgRearTransitionModule    = 0xc0,
   eIpmiEntityIdPicMgAdvancedMcModule        = 0xc1,
+  eIpmiEntityIdPicMgMicroTcaCarrierHub      = 0xc2,
   eIpmiEntityIdPicmgShelfManager            = 0xf0,
   eIpmiEntityIdPicmgFiltrationUnit          = 0xf1,
   eIpmiEntityIdPicmgShelfFruInformation     = 0xf2,
+  eIpmiEntityIdPicmgAlarmPanel              = 0xf3,
 };
 
 const char *IpmiEntityIdToString( tIpmiEntityId id );
Index: plugins/ipmidirect/ipmi_mc_vendor_intel.cpp
===================================================================
--- plugins/ipmidirect/ipmi_mc_vendor_intel.cpp	(revision 6518)
+++ plugins/ipmidirect/ipmi_mc_vendor_intel.cpp	(working copy)
@@ -60,7 +60,7 @@
               m_busid = PRIVATE_BUS_ID; break;  
   }
 
-  if (mc->IsAtcaBoard()) return true;
+  if (mc->IsTcaMc()) return true;
   /* 
    * If here, the MC has (manuf_id == 0x000157) Intel, and  
    * product_id == one of these: { 0x000C, 0x001B, 0x0022, 0x4311, 
@@ -87,7 +87,7 @@
   char dstr[80];
   int i;
 
-  if (mc->IsAtcaBoard()) return true;
+  if (mc->IsTcaMc()) return true;
 
   for ( int j = 0; j < mc->NumResources(); j++ )
   {
@@ -163,7 +163,7 @@
   stdlog << "ProcessFru: Intel MC " << sa << " enableHSC " 
 	   << g_enableHSC << "\n";
 
-  if (mc->IsAtcaBoard()) return true;
+  if (mc->IsTcaMc()) return true;
 
   if (type == SAHPI_ENT_SYSTEM_BOARD) {
       cIpmiResource *res  = inv->Resource();
Index: plugins/ipmidirect/ipmi_domain.cpp
===================================================================
--- plugins/ipmidirect/ipmi_domain.cpp	(revision 6518)
+++ plugins/ipmidirect/ipmi_domain.cpp	(working copy)
@@ -28,7 +28,7 @@
 
 
 cIpmiDomain::cIpmiDomain()
-  : m_con( 0 ), m_is_atca( false ), m_main_sdrs( 0 ),
+  : m_con( 0 ), m_is_tca( false ), m_main_sdrs( 0 ),
     m_sensors_in_main_sdr( 0 ),
     m_major_version( 0 ), m_minor_version( 0 ), m_sdr_repository_support( false ),
     m_si_mc( 0 ),
@@ -90,6 +90,12 @@
 
   // rear transition module
   SetAtcaSiteProperty( eIpmiAtcaSiteTypeRearTransitionModule, prop, 32 );
+
+  // MicroTca Carrier Hub
+  SetAtcaSiteProperty( eIpmiAtcaSiteTypeMicroTcaCarrierHub, prop, 8 );
+
+  // Power Module
+  SetAtcaSiteProperty( eIpmiAtcaSiteTypePowerModule, prop, 8 );
 }
 
 
@@ -244,11 +250,11 @@
 
   stdlog << "Domain ID " << m_did << "\n";
 
-  // check for ATCA an modify m_mc_to_check
-  CheckAtca();
+  // check for TCA an modify m_mc_to_check
+  CheckTca();
 
-  // Non ATCA system -> adjust BMC info
-  if ( !m_is_atca )
+  // Non TCA system -> adjust BMC info
+  if ( !m_is_tca )
   {
     cIpmiFruInfo *fi = FindFruInfo( dIpmiBmcSlaveAddr, 0 );
 
@@ -270,7 +276,7 @@
             // Just report an error, it shouldn't be a big deal if this
             // fails.
             stdlog << "could not get main SDRs, error " << rv << " !\n";
-       else if ( !m_is_atca )
+       else if ( !m_is_tca )
           {
             // for each mc device locator record in main repository
             // create an entry in m_mc_to_check.
@@ -445,7 +451,7 @@
 
 
 SaErrorT
-cIpmiDomain::CheckAtca()
+cIpmiDomain::CheckTca()
 {
   cIpmiMsg msg( eIpmiNetfnPicmg, eIpmiCmdGetPicMgProperties );
   msg.m_data_len = 1;
@@ -455,18 +461,18 @@
   SaErrorT rv;
   int i;
 
-  m_is_atca = false;
+  m_is_tca = false;
 
   if ( !m_si_mc )
       return SA_ERR_HPI_INTERNAL_ERROR;
 
-  stdlog << "checking for ATCA system.\n";
+  stdlog << "checking for TCA system.\n";
 
   rv = m_si_mc->SendCommand( msg, rsp );
 
   if ( rv != SA_OK || rsp.m_data[0] || rsp.m_data[1] != dIpmiPicMgId )
      {
-       stdlog << "not an ATCA system.\n";
+       stdlog << "not a TCA system.\n";
 
        return (rv != SA_OK) ? rv : SA_ERR_HPI_INVALID_DATA;
      }
@@ -474,18 +480,25 @@
   unsigned char minor = (rsp.m_data[2] >> 4) & 0x0f;
   unsigned char major = rsp.m_data[2] & 0x0f;
 
-  stdlog << "found a PicMg system version " << (unsigned int)major << "." << (unsigned int)minor << ".\n";
+  stdlog << "found a PICMG system, Extension Version " << (unsigned int)major << "." << (unsigned int)minor << ".\n";
 
-  if ( major != 2 )
+  switch ( major )
+  {
+  default:
        return SA_OK;
+  case 2:
+       stdlog << "found an ATCA system.\n";
+       break;
+  case 5:
+       stdlog << "found a MicroTCA system.\n";
+       break;
+  }
 
-  stdlog << "found an ATCA system.\n";
-
   // use atca timeout
   stdlog << "set timeout to " << m_con_atca_timeout << ".\n";
   m_con->m_timeout = m_con_atca_timeout;
 
-  m_is_atca = true;
+  m_is_tca = true;
 
   // read all fru addr
   msg.m_netfn   = eIpmiNetfnPicmg;
@@ -506,7 +519,9 @@
     "Alarm",
     "AdvancedMC Module",
     "PMC",
-    "Rear Transition Module"
+    "Rear Transition Module",
+    "MicroTCA Carrier Hub",
+    "Power Module"
   };
 
   static int map_num = sizeof( map ) / sizeof( char * );
@@ -618,8 +633,8 @@
      {
        cIpmiMc *mc = m_mcs[i];
 
-       // Event receiver on ATCA must be set to the active ShMc
-       if ( IsAtca() )
+       // Event receiver on TCA must be set to the active ShMc
+       if ( IsTca() )
        {
            if ( mc->GetAddress() == dIpmiBmcSlaveAddr )
                return mc;
Index: plugins/ipmidirect/ipmi_mc_vendor.cpp
===================================================================
--- plugins/ipmidirect/ipmi_mc_vendor.cpp	(revision 6518)
+++ plugins/ipmidirect/ipmi_mc_vendor.cpp	(working copy)
@@ -514,6 +514,44 @@
   if ( instance >= 0x60 )
        instance -= 0x60;
 
+  switch (type)
+  {
+    default:
+        break;
+
+    case eIpmiEntityIdPicMgFrontBoard:
+        type = SaHpiEntityTypeT(ATCAHPI_ENT_PICMG_FRONT_BLADE);
+        break;
+
+    case eIpmiEntityIdPicMgRearTransitionModule:
+        type = SAHPI_ENT_BACK_PANEL_BOARD;
+        break;
+
+    case eIpmiEntityIdPicMgAdvancedMcModule:
+        type = SaHpiEntityTypeT(ATCAHPI_ENT_AMC);
+        break;
+
+    case eIpmiEntityIdPicMgMicroTcaCarrierHub:
+        type = SAHPI_ENT_SWITCH_BLADE;
+        break;
+
+    case eIpmiEntityIdPicmgShelfManager:
+        type = SAHPI_ENT_SHELF_MANAGER;
+        break;
+
+    case eIpmiEntityIdPicmgFiltrationUnit:
+        type = SaHpiEntityTypeT(ATCAHPI_ENT_FILTRATION_UNIT);
+        break;
+
+    case eIpmiEntityIdPicmgShelfFruInformation:
+        type = SaHpiEntityTypeT(ATCAHPI_ENT_SHELF_FRU_DEVICE);
+        break;
+
+    case eIpmiEntityIdPicmgAlarmPanel:
+        type = SAHPI_ENT_ALARM_MANAGER;
+        break;
+  }
+
   bottom.SetEntry( 0, type, instance );
   bottom.AppendRoot( 1 );
 
@@ -860,7 +898,7 @@
   if ( source_mc == 0 )
        return true;
 
-  if ( source_mc->IsAtcaBoard() )
+  if ( source_mc->IsTcaMc() )
      {
        return CreateControlsAtca( domain, source_mc, sdrs );
      }
Index: plugins/ipmidirect/ipmi_fru_info.h
===================================================================
--- plugins/ipmidirect/ipmi_fru_info.h	(revision 6518)
+++ plugins/ipmidirect/ipmi_fru_info.h	(working copy)
@@ -37,6 +37,8 @@
   eIpmiAtcaSiteTypeAdvancedMcModule = 7,
   eIpmiAtcaSiteTypePMC = 8,
   eIpmiAtcaSiteTypeRearTransitionModule = 9,
+  eIpmiAtcaSiteTypeMicroTcaCarrierHub = 10,
+  eIpmiAtcaSiteTypePowerModule = 11,
   eIpmiAtcaSiteTypeUnknown
 };
 
Index: plugins/ipmidirect/ipmi_discover.cpp
===================================================================
--- plugins/ipmidirect/ipmi_discover.cpp	(revision 6518)
+++ plugins/ipmidirect/ipmi_discover.cpp	(working copy)
@@ -324,12 +324,12 @@
        return;
      }
 
-  m_mc->CheckAtca();
+  m_mc->CheckTca();
 
-  if ( m_domain->IsAtca() )
+  if ( m_domain->IsTca() )
   {
       // If board is not ATCA, just give up
-      if (!m_mc->IsAtcaBoard())
+      if (!m_mc->IsTcaMc())
       {
           m_mc->Cleanup();
           delete m_mc;
Index: plugins/ipmidirect/ipmi_mc.h
===================================================================
--- plugins/ipmidirect/ipmi_mc.h	(revision 6518)
+++ plugins/ipmidirect/ipmi_mc.h	(working copy)
@@ -121,7 +121,7 @@
 
   unsigned char  m_aux_fw_revision[4];
 
-  bool           m_is_atca_board;
+  bool           m_is_tca_mc;
   bool           m_is_rms_board;
 
   SaErrorT SendSetEventRcvr( unsigned int addr );
@@ -161,9 +161,9 @@
 
   const cIpmiAddr &Addr() { return m_addr; }
 
-  void CheckAtca();
+  void CheckTca();
 
-  bool IsAtcaBoard() { return m_is_atca_board; }
+  bool IsTcaMc() { return m_is_tca_mc; }
 
   bool &IsRmsBoard() { return m_is_rms_board; }
 
Index: plugins/ipmidirect/ipmi_fru_info.cpp
===================================================================
--- plugins/ipmidirect/ipmi_fru_info.cpp	(revision 6518)
+++ plugins/ipmidirect/ipmi_fru_info.cpp	(working copy)
@@ -16,6 +16,10 @@
  *     Pierre Sangouard  <psangouard@eso-tech.com>
  */
 
+extern "C" {
+#include "SaHpiAtca.h"
+}
+
 #include <assert.h>
 #include "ipmi_fru_info.h"
 
@@ -26,18 +30,20 @@
   static SaHpiEntityTypeT et[] = 
   {
     SAHPI_ENT_PHYSICAL_SLOT,
-    SAHPI_ENT_POWER_SUPPLY,
-    SAHPI_ENT_EXTERNAL_ENVIRONMENT,
-    SAHPI_ENT_SHELF_MANAGER,
-    SAHPI_ENT_COOLING_UNIT,
-    SAHPI_ENT_CHASSIS_SPECIFIC,
-    (SaHpiEntityTypeT)(SAHPI_ENT_CHASSIS_SPECIFIC+1),
-    (SaHpiEntityTypeT)(SAHPI_ENT_CHASSIS_SPECIFIC+2),
-    (SaHpiEntityTypeT)(SAHPI_ENT_CHASSIS_SPECIFIC+3),
-    (SaHpiEntityTypeT)(SAHPI_ENT_CHASSIS_SPECIFIC+4)
+    SaHpiEntityTypeT(ATCAHPI_ENT_POWER_ENTRY_MODULE_SLOT),
+    SaHpiEntityTypeT(ATCAHPI_ENT_SHELF_FRU_DEVICE_SLOT),
+    SaHpiEntityTypeT(ATCAHPI_ENT_SHELF_MANAGER_SLOT),
+    SaHpiEntityTypeT(ATCAHPI_ENT_FAN_TRAY_SLOT),
+    SaHpiEntityTypeT(ATCAHPI_ENT_FAN_FILTER_TRAY_SLOT),
+    SaHpiEntityTypeT(ATCAHPI_ENT_ALARM_SLOT),
+    SaHpiEntityTypeT(ATCAHPI_ENT_AMC_SLOT),
+    SaHpiEntityTypeT(ATCAHPI_ENT_PMC_SLOT),
+    SaHpiEntityTypeT(ATCAHPI_ENT_RTM_SLOT),
+    SaHpiEntityTypeT(ATCAHPI_ENT_SHELF_MANAGER_SLOT),
+    SaHpiEntityTypeT(ATCAHPI_ENT_POWER_ENTRY_MODULE_SLOT)
   };
 
-  if ( type > eIpmiAtcaSiteTypeRearTransitionModule )
+  if ( type >= eIpmiAtcaSiteTypeUnknown )
      {
        return SAHPI_ENT_UNKNOWN;
      }
Index: plugins/ipmidirect/ipmi_mc.cpp
===================================================================
--- plugins/ipmidirect/ipmi_mc.cpp	(revision 6518)
+++ plugins/ipmidirect/ipmi_mc.cpp	(working copy)
@@ -49,7 +49,7 @@
     m_sdr_repository_support( false ), m_sensor_device_support( false ),
     m_major_fw_revision( 0 ), m_minor_fw_revision( 0 ),
     m_major_version( 0 ), m_minor_version( 0 ),
-    m_manufacturer_id( 0 ), m_product_id( 0 ), m_is_atca_board( false ), m_is_rms_board( false )
+    m_manufacturer_id( 0 ), m_product_id( 0 ), m_is_tca_mc( false ), m_is_rms_board( false )
 {
   stdlog << "adding MC: " << addr.m_channel << " " << addr.m_slave_addr << "\n";
 
@@ -269,7 +269,7 @@
 
            m_sel->m_fetched = false;
 
-           if (IsAtcaBoard()) {
+           if (IsTcaMc()) {
                rv = m_sel->ClearSel();
                if ( rv != SA_OK )
                    m_sel_device_support = false;
@@ -303,7 +303,7 @@
        stdlog << "New mc, event_rcvr " << GetAddress() << "\n";
   }
 
-  if ( event_rcvr && IsAtcaBoard())  
+  if ( event_rcvr && IsTcaMc())
      {
        // This is a re-arm of all sensors of the MC
        // => each sensor sends the pending events again.
@@ -401,7 +401,7 @@
 }
 
 void
-cIpmiMc::CheckAtca()
+cIpmiMc::CheckTca()
 {
     cIpmiMsg msg( eIpmiNetfnPicmg, eIpmiCmdGetPicMgProperties );
     msg.m_data_len = 1;
@@ -410,7 +410,7 @@
     cIpmiMsg rsp;
     SaErrorT rv;
 
-    m_is_atca_board = false;
+    m_is_tca_mc = false;
     m_picmg_major = 0;
     m_picmg_minor = 0;
 
@@ -418,7 +418,7 @@
 
     if ( rv != SA_OK || rsp.m_data[0] || rsp.m_data[1] != dIpmiPicMgId )
     {
-        stdlog << "WARNING: MC " << m_addr.m_slave_addr << " is not an ATCA board !!!\n";
+        stdlog << "WARNING: MC " << m_addr.m_slave_addr << " is not a TCA MC !!!\n";
         return;
     }
 
@@ -427,12 +427,18 @@
 
     if ( m_picmg_major == 2 )
     {
-        stdlog << "MC " << m_addr.m_slave_addr << " is an ATCA board, PICMG Extension version " << (int)m_picmg_major << "." << (int)m_picmg_minor << "\n";
-        m_is_atca_board = true;
+        stdlog << "MC " << m_addr.m_slave_addr << " is an ATCA MC, PICMG Extension version " << (int)m_picmg_major << "." << (int)m_picmg_minor << "\n";
+        m_is_tca_mc = true;
         return;
     }
+    else if ( m_picmg_major == 5 )
+    {
+        stdlog << "MC " << m_addr.m_slave_addr << " is a MicroTCA MC, PICMG Extension version " << (int)m_picmg_major << "." << (int)m_picmg_minor << "\n";
+        m_is_tca_mc = true;
+        return;
+    }
 
-    stdlog << "WARNING: MC " << m_addr.m_slave_addr << " is not an ATCA board !!!\n";
+    stdlog << "WARNING: MC " << m_addr.m_slave_addr << " is not an ATCA MC !!!\n";
     return;
 }
 
Index: plugins/ipmidirect/hotswap.cpp
===================================================================
--- plugins/ipmidirect/hotswap.cpp	(revision 6518)
+++ plugins/ipmidirect/hotswap.cpp	(working copy)
@@ -69,7 +69,7 @@
 SaErrorT
 cIpmi::IfSetHotswapState( cIpmiResource *res, SaHpiHsStateT state )
 {
-  if ( !m_is_atca )
+  if ( !m_is_tca )
      {
        stdlog << "ATCA not supported by SI !\n";
        return SA_ERR_HPI_INVALID_CMD;
@@ -125,7 +125,7 @@
 cIpmi::IfRequestHotswapAction( cIpmiResource *res,
                                SaHpiHsActionT act )
 {
-  if ( !m_is_atca )
+  if ( !m_is_tca )
      {
        stdlog << "ATCA not supported by SI !\n";
        return SA_ERR_HPI_INVALID_REQUEST;
@@ -174,7 +174,7 @@
 cIpmi::IfHotswapPolicyCancel( cIpmiResource *res,
                                SaHpiTimeoutT timeout )
 {
-  if ( !m_is_atca )
+  if ( !m_is_tca )
      {
        stdlog << "ATCA not supported by SI !\n";
        return SA_ERR_HPI_INVALID_REQUEST;
@@ -188,7 +188,7 @@
 SaErrorT
 cIpmi::IfSetAutoInsertTimeout( SaHpiTimeoutT timeout )
 {
-  if ( !m_is_atca )
+  if ( !m_is_tca )
      {
        stdlog << "ATCA not supported by SI !\n";
        return SA_ERR_HPI_INVALID_REQUEST;
@@ -202,7 +202,7 @@
 SaErrorT
 cIpmi::IfGetAutoExtractTimeout( cIpmiResource *res, SaHpiTimeoutT &timeout )
 {
-  if ( !m_is_atca )
+  if ( !m_is_tca )
      {
        stdlog << "ATCA not supported by SI !\n";
        return SA_ERR_HPI_INVALID_REQUEST;
@@ -216,7 +216,7 @@
 SaErrorT
 cIpmi::IfSetAutoExtractTimeout( cIpmiResource *res, SaHpiTimeoutT timeout )
 {
-  if ( !m_is_atca )
+  if ( !m_is_tca )
      {
        stdlog << "ATCA not supported by SI !\n";
        return SA_ERR_HPI_INVALID_REQUEST;
Index: plugins/ipmidirect/ipmi_entity.cpp
===================================================================
--- plugins/ipmidirect/ipmi_entity.cpp	(revision 6518)
+++ plugins/ipmidirect/ipmi_entity.cpp	(working copy)
@@ -99,6 +99,9 @@
        case eIpmiEntityIdPicMgAdvancedMcModule:
             return "PicMgAdvancedMcModule";
 
+       case eIpmiEntityIdPicMgMicroTcaCarrierHub:
+            return "PicMgMicroTcaCarrierHub";
+
        case eIpmiEntityIdPicmgShelfManager:
             return "PicmgShelfManager";
 
@@ -107,6 +110,10 @@
 
        case eIpmiEntityIdPicmgShelfFruInformation:
             return "PicmgShelfFruInformation";
+
+       case eIpmiEntityIdPicmgAlarmPanel:
+            return "PicmgAlarmPanel";
+
        default:
            break;
      }
Index: plugins/ipmidirect/ipmi_resource.cpp
===================================================================
--- plugins/ipmidirect/ipmi_resource.cpp	(revision 6518)
+++ plugins/ipmidirect/ipmi_resource.cpp	(working copy)
@@ -160,7 +160,7 @@
             }
 
         // Reset supported on ATCA FRUs - Don't allow it on fru #0 of the active ShMC
-        if ( m_mc->IsAtcaBoard() )
+        if ( m_mc->IsTcaMc() )
            {
                 if (!( (m_mc->GetAddress() == dIpmiBmcSlaveAddr) && (m_fru_id == 0) ))
                 {
Index: plugins/ipmidirect/ipmi_domain.h
===================================================================
--- plugins/ipmidirect/ipmi_domain.h	(revision 6518)
+++ plugins/ipmidirect/ipmi_domain.h	(working copy)
@@ -122,11 +122,11 @@
     return m_con->LogLevel( v );
   }
 
-  // true => ATCA
-  bool           m_is_atca;
+  // true => TCA
+  bool           m_is_tca;
 
 public:
-  bool IsAtca() { return m_is_atca; }
+  bool IsTca() { return m_is_tca; }
 
 protected:
   // properties for site types
@@ -194,7 +194,7 @@
   unsigned int m_sel_rescan_interval;
   bool m_bmc_discovered;
 
-  SaErrorT CheckAtca();
+  SaErrorT CheckTca();
 
 public:
   void AddMc( cIpmiMc *mc );
