00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef SMIINTERFACE_H
00020 #define SMIINTERFACE_H
00021
00022
00023 #include "smbios/compat.h"
00024
00025
00026 #include "smbios/types.h"
00027
00028 #include "smbios/IFactory.h"
00029 #include "smbios/IException.h"
00030
00031
00032 #include "smbios/config/abi_prefix.hpp"
00033
00034 namespace smi
00035 {
00037
00039
00040 DECLARE_EXCEPTION( SmiException );
00041 DECLARE_EXCEPTION_EX( InvalidSmiMode, smi, SmiException );
00042 DECLARE_EXCEPTION_EX( ParameterError, smi, SmiException );
00043 DECLARE_EXCEPTION_EX( UnhandledSmi, smi, SmiException );
00044 DECLARE_EXCEPTION_EX( UnsupportedSmi, smi, SmiException );
00045 DECLARE_EXCEPTION_EX( SmiExecutedWithError, smi, SmiException );
00046 DECLARE_EXCEPTION_EX( PasswordVerificationFailed, smi, SmiException );
00047
00048
00049 class ISmi;
00050
00051
00052 class SmiFactory : public virtual factory::IFactory
00053 {
00054 public:
00055 enum { RAW_SMI, DELL_CALLING_INTERFACE_SMI, };
00056
00057 static SmiFactory *getFactory();
00058 virtual ~SmiFactory() throw();
00059 virtual std::auto_ptr<ISmi> makeNew(u8 type) = 0;
00060 protected:
00061 SmiFactory();
00062 };
00063
00064 class ISmi
00065 {
00066 public:
00067 explicit ISmi();
00068
00069
00070 virtual void execute() = 0;
00071 virtual u8 *getBufferPtr() = 0;
00072 virtual void setBufferSize(size_t newSize) = 0;
00073 virtual void setCommandIOMagic( u16 address, u8 code ) = 0;
00074
00075 virtual ~ISmi();
00076 };
00077
00078 class IDellCallingInterfaceSmi : virtual public ISmi
00079 {
00080 public:
00081 explicit IDellCallingInterfaceSmi();
00082
00083
00084 virtual void setClass( u16 newClass ) = 0;
00085 virtual void setSelect( u16 newSelect ) = 0;
00086 virtual void setArg( u8 argNumber, u32 argValue ) = 0;
00087 virtual u32 getRes( u8 resNumber ) const = 0;
00088 virtual void setArgAsPhysicalAddress( u8 argNumber, u32 bufferOffset ) = 0;
00089
00090 virtual ~IDellCallingInterfaceSmi();
00091 };
00092
00093
00094
00095
00096 void doSimpleCallingInterfaceSmi(u16 smiClass, u16 select, const u32 args[4], u32 res[4]);
00097 std::auto_ptr<smi::IDellCallingInterfaceSmi> setupCallingInterfaceSmi(u16 smiClass, u16 select, const u32 args[4]);
00098 u32 getAuthenticationKey(const std::string &password);
00099
00100 enum password_format_enum { PW_FORMAT_UNKNOWN, PW_FORMAT_SCAN_CODE, PW_FORMAT_ASCII };
00101 password_format_enum getPasswordFormat();
00102
00103 std::string getServiceTag();
00104 void setServiceTag(const std::string &password, const std::string &newTag);
00105 std::string getAssetTag();
00106 void setAssetTag(const std::string &password, const std::string &newTag);
00107
00108 u32 readNVStorage (u32 location, u32 *minValue, u32 *maxValue);
00109 u32 readBatteryModeSetting(u32 location, u32 *minValue, u32 *maxValue);
00110 u32 readACModeSetting (u32 location, u32 *minValue, u32 *maxValue);
00111 u32 readSystemStatus(u32 *failingSensorHandle);
00112
00113 u32 writeNVStorage (const std::string &password, u32 location, u32 value, u32 *minValue, u32 *maxValue);
00114 u32 writeBatteryModeSetting(const std::string &password, u32 location, u32 value, u32 *minValue, u32 *maxValue);
00115 u32 writeACModeSetting (const std::string &password, u32 location, u32 value, u32 *minValue, u32 *maxValue);
00116
00117 void getDisplayType(u32 &type, u32 &resolution, u32 &memSizeX256kb);
00118 void getPanelResolution(u32 &horiz, u32 &vert);
00119 void getActiveDisplays(u32 &bits);
00120 void setActiveDisplays(u32 &bits);
00121
00122 void getPropertyOwnershipTag(char *tagBuf, size_t size);
00123 void setPropertyOwnershipTag(const std::string password, const char *newTag, size_t size);
00124 }
00125
00126
00127 #include "smbios/config/abi_suffix.hpp"
00128
00129 #endif