Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

ipmi_mc_vendor.h

00001 /*
00002  * ipmi_mc_vendor.h
00003  *
00004  * Copyright (c) 2004 by FORCE Computers
00005  * Copyright (c) 2005-2006 by ESO Technologies.
00006  *
00007  * This program is distributed in the hope that it will be useful,
00008  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00009  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  This
00010  * file and program are licensed under a BSD style license.  See
00011  * the Copying file included with the OpenHPI distribution for
00012  * full licensing terms.
00013  *
00014  * Authors:
00015  *     Thomas Kanngieser <thomas.kanngieser@fci.com>
00016  *     Pierre Sangouard  <psangouard@eso-tech.com>
00017  */
00018 
00019 #ifndef dIpmiMcVendor_h
00020 #define dIpmiMcVendor_h
00021 
00022 
00023 #ifndef dIpmiSensorHotswap_h
00024 #include "ipmi_sensor_hotswap.h"
00025 #endif
00026 
00027 #ifndef dIpmiSensorThreshold_h
00028 #include "ipmi_sensor_threshold.h"
00029 #endif
00030 
00031 #ifndef dIpmiMsg_h
00032 #include "ipmi_msg.h"
00033 #endif
00034 
00035 #ifndef dIpmiFruInfo_h
00036 #include "ipmi_fru_info.h"
00037 #endif
00038 
00039 #ifndef dIpmiInventory_h
00040 #include "ipmi_inventory.h"
00041 #endif
00042 
00043 class cIpmiMc;
00044 
00045 
00046 class cIpmiMcVendor
00047 {
00048   static SaHpiEntityLocationT m_unique_instance;
00049 
00050 public:
00051   unsigned int m_manufacturer_id;
00052   unsigned int m_product_id;
00053   char         m_description[80];
00054 
00055   cIpmiMcVendor( unsigned int manufacturer_id,
00056                  unsigned int product_id,
00057                  const char *desc );
00058 
00059   virtual ~cIpmiMcVendor();
00060 
00061   SaHpiEntityLocationT GetUniqueInstance()
00062   {
00063     return m_unique_instance++;
00064   }
00065 
00066   // a new MC is found
00067   virtual bool InitMc( cIpmiMc *mc, const cIpmiMsg &devid );
00068 
00069   // cleanup code for an MC
00070   virtual void CleanupMc( cIpmiMc *mc );
00071 
00072   // give vendors a chance to modify the sdrs
00073   virtual bool ProcessSdr( cIpmiDomain *domain, cIpmiMc *mc, cIpmiSdrs *sdrs );
00074 
00075   virtual bool ProcessFru( cIpmiInventory *inv, cIpmiMc *mc, unsigned int sa,
00076                         SaHpiEntityTypeT type);
00077 
00078   // called after reading an SDR to create sensors, controls, frus, sel
00079   virtual bool CreateRdrs( cIpmiDomain *domain, cIpmiMc *mc, cIpmiSdrs *sdrs );
00080 
00081   // create resources from sdr
00082   virtual bool CreateResources( cIpmiDomain *domain, cIpmiMc *source_mc, cIpmiSdrs *sdrs );
00083 
00084   // find or create resource
00085   virtual cIpmiResource *FindOrCreateResource( cIpmiDomain *domain, cIpmiMc *mc, unsigned int fru_id,
00086                                                cIpmiSdr *sdr, cIpmiSdrs *sdrs );
00087 
00088   // find resource
00089   virtual cIpmiResource *FindResource( cIpmiDomain *domain, cIpmiMc *mc, unsigned int fru_id,
00090                                                cIpmiSdr *sdr, cIpmiSdrs *sdrs );
00091 
00092   virtual cIpmiResource *FindResource( cIpmiDomain *domain, cIpmiMc *mc,
00093                              unsigned int fru_id,
00094                              SaHpiEntityTypeT type,
00095                              SaHpiEntityLocationT instance,
00096                              cIpmiSdrs *sdrs );
00097 protected:
00098   // create a new resource
00099   virtual cIpmiResource *CreateResource( cIpmiDomain *domain, cIpmiMc *mc, unsigned int fru_id,
00100                                          cIpmiSdr *sdr, cIpmiSdrs *sdrs );
00101   cIpmiEntityPath CreateEntityPath( cIpmiDomain *domain, unsigned int mc_addr,
00102                                     unsigned int fru_id, SaHpiEntityTypeT type,
00103                                     SaHpiEntityLocationT instance, cIpmiSdrs *sdrs );
00104 
00105 public:
00106   // create sensors
00107   virtual bool CreateSensors( cIpmiDomain *domain, cIpmiMc *source_mc, 
00108                               cIpmiSdrs *sdrs );
00109 
00110 protected:
00111   virtual GList *GetSensorsFromSdrs( cIpmiDomain *domain, cIpmiMc *source_mc,
00112                                      cIpmiSdrs *sdrs );
00113   virtual GList *CreateSensorFromFullSensorRecord( cIpmiDomain *domain, cIpmiMc *source_mc,
00114                                                    cIpmiSdr *sdr, cIpmiSdrs *sdrs );
00115 
00116   virtual GList *CreateSensorHotswap( cIpmiDomain *domain, cIpmiMc *mc,
00117                                       cIpmiSdr *sdr, cIpmiSdrs *sdrs );
00118   virtual GList *CreateSensorThreshold( cIpmiDomain *domain, cIpmiMc *mc,
00119                                         cIpmiSdr *sdr, cIpmiSdrs *sdrs );
00120   virtual GList *CreateSensorDiscrete( cIpmiDomain *domain, cIpmiMc *mc,
00121                                        cIpmiSdr *sdr , cIpmiSdrs *sdrs);
00122   virtual GList *CreateSensorDefault( cIpmiDomain *domain, cIpmiMc *mc,
00123                                       cIpmiSdr *sdr, cIpmiSdrs *sdrs );
00124 
00125   void CreateSensorEntityPath( cIpmiDomain *domain, cIpmiSensor *s, 
00126                                cIpmiMc *source_mc,
00127                                cIpmiSdr *sdr, cIpmiSdrs *sdrs ); 
00128 
00129   virtual cIpmiMc *FindMcBySdr( cIpmiDomain *domain, cIpmiSdr *sdr );
00130 
00131 public:
00132   // create controls
00133   virtual bool CreateControls( cIpmiDomain *domain, cIpmiMc *mc,
00134                                cIpmiSdrs *sdrs );
00135 
00136 protected:
00137   virtual bool CreateControlsAtca( cIpmiDomain *domain, cIpmiMc *mc, cIpmiSdrs *sdrs );
00138   virtual bool CreateControlAtcaFan( cIpmiDomain *domain, cIpmiResource *res, cIpmiSdrs *sdrs );
00139   virtual bool CreateControlAtcaLed( cIpmiDomain *domain, cIpmiResource *res, cIpmiSdrs *sdrs );
00140 
00141 public:
00142   // create inventory
00143   virtual bool CreateInvs( cIpmiDomain *domain, cIpmiMc *mc, cIpmiSdrs *sdrs );
00144 
00145 protected:
00146   virtual bool CreateInv( cIpmiDomain *domain, cIpmiMc *mc, cIpmiSdr *sdr,
00147                           cIpmiSdrs *sdrs );
00148 
00149 public:
00150   // create watchdogs
00151   virtual bool CreateWatchdogs( cIpmiDomain *domain, cIpmiMc *mc );
00152 
00153 public:
00154   // create SEL
00155   virtual bool CreateSels( cIpmiDomain *domain, cIpmiMc *source_mc, cIpmiSdrs *sdrs );
00156 };
00157 
00158 
00159 class cIpmiMcVendorFactory
00160 {
00161   static cIpmiMcVendorFactory *m_factory;
00162 
00163   cIpmiMcVendorFactory();
00164   ~cIpmiMcVendorFactory();
00165 public:
00166 
00167   static void InitFactory();
00168   static void CleanupFactory();
00169   static cIpmiMcVendorFactory *GetFactory() { return m_factory; }
00170 
00171 protected:
00172   // list of all vendor MCs
00173   GList *m_mc_vendors;
00174 
00175   // default mc vendor
00176   cIpmiMcVendor *m_default;
00177 
00178 public:
00179   // register a new cIpmiMcVendor
00180   bool Register( cIpmiMcVendor *mv );
00181 
00182   // unregister cIpmiMcVendor
00183   bool Unregister( unsigned int manufacturer_id,
00184                    unsigned int product_id );
00185 
00186   // find a cIpmiMcVendor to a give manufacturer id and product id
00187   cIpmiMcVendor *Find( unsigned int manufacturer_id,
00188                        unsigned int product_id );
00189 
00190   // returns the default if not found
00191   cIpmiMcVendor *Get( unsigned int manufacturer_id,
00192                       unsigned int product_id );
00193 
00194   cIpmiMcVendor *Default()
00195   {
00196     return m_default;
00197   }
00198 };
00199 
00200 
00201 #endif

Generated on Thu Mar 4 19:33:14 2010 for New Simulator by  doxygen 1.4.4