00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
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   
00067   virtual bool InitMc( cIpmiMc *mc, const cIpmiMsg &devid );
00068 
00069   
00070   virtual void CleanupMc( cIpmiMc *mc );
00071 
00072   
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   
00079   virtual bool CreateRdrs( cIpmiDomain *domain, cIpmiMc *mc, cIpmiSdrs *sdrs );
00080 
00081   
00082   virtual bool CreateResources( cIpmiDomain *domain, cIpmiMc *source_mc, cIpmiSdrs *sdrs );
00083 
00084   
00085   virtual cIpmiResource *FindOrCreateResource( cIpmiDomain *domain, cIpmiMc *mc, unsigned int fru_id,
00086                                                cIpmiSdr *sdr, cIpmiSdrs *sdrs );
00087 
00088   
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   
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   
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   
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   
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   
00151   virtual bool CreateWatchdogs( cIpmiDomain *domain, cIpmiMc *mc );
00152 
00153 public:
00154   
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   
00173   GList *m_mc_vendors;
00174 
00175   
00176   cIpmiMcVendor *m_default;
00177 
00178 public:
00179   
00180   bool Register( cIpmiMcVendor *mv );
00181 
00182   
00183   bool Unregister( unsigned int manufacturer_id,
00184                    unsigned int product_id );
00185 
00186   
00187   cIpmiMcVendor *Find( unsigned int manufacturer_id,
00188                        unsigned int product_id );
00189 
00190   
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