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