/usr/src/redhat/BUILD/libsmbios-2.2.21/src/include/smbios/ISmi.h

Go to the documentation of this file.
00001 // vim:expandtab:autoindent:tabstop=4:shiftwidth=4:filetype=c:
00002 /*
00003  * Copyright (C) 2005 Dell Inc.
00004  *  by Michael Brown <Michael_E_Brown@dell.com>
00005  * Licensed under the Open Software License version 2.1
00006  *
00007  * Alternatively, you can redistribute it and/or modify
00008  * it under the terms of the GNU General Public License as published
00009  * by the Free Software Foundation; either version 2 of the License,
00010  * or (at your option) any later version.
00011 
00012  * This program is distributed in the hope that it will be useful, but
00013  * WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00015  * See the GNU General Public License for more details.
00016  */
00017 
00018 
00019 #ifndef SMIINTERFACE_H
00020 #define SMIINTERFACE_H
00021 
00022 // compat header should always be first header, if system headers included
00023 #include "smbios/compat.h"
00024 
00025 #include <iostream>
00026 #include <memory>
00027 
00028 // types.h should be first user-defined header.
00029 #include "smbios/types.h"
00030 
00031 #include "smbios/IFactory.h"
00032 #include "smbios/IException.h"
00033 
00034 // abi_prefix should be last header included before declarations
00035 #include "smbios/config/abi_prefix.hpp"
00036 
00037 namespace smi
00038 {
00040 
00042     // Exceptions
00043     DECLARE_EXCEPTION( SmiException );
00044     DECLARE_EXCEPTION_EX( InvalidSmiMode, smi, SmiException );
00045     DECLARE_EXCEPTION_EX( ParameterError, smi, SmiException );
00046     DECLARE_EXCEPTION_EX( UnhandledSmi, smi, SmiException );
00047     DECLARE_EXCEPTION_EX( UnsupportedSmi, smi, SmiException );
00048     DECLARE_EXCEPTION_EX( SmiExecutedWithError, smi, SmiException );
00049     DECLARE_EXCEPTION_EX( PasswordVerificationFailed, smi, SmiException );
00050     DECLARE_EXCEPTION_EX( ConfigError, smi, SmiException );
00051 
00052     class IDellCallingInterfaceSmi
00053     {
00054     public:
00055         virtual ~IDellCallingInterfaceSmi();
00056         // compiler-generated copy and operator = are good for now, I think.
00057 
00058         virtual void setClass( u16 newClass ) = 0;
00059         virtual void setSelect( u16 newSelect ) = 0;
00060         virtual void setArg( u8 argNumber, u32 argValue ) = 0;
00061         virtual u32  getRes( u8 resNumber ) const = 0;
00062         virtual void setArgAsPhysicalAddress( u8 argNumber, u32 bufferOffset ) = 0;
00063         virtual void setBufferSize(size_t size) = 0;
00064         virtual void setBufferContents(const u8 *, size_t size) = 0;
00065         virtual const u8 *getBufferPtr() = 0;
00066 
00067         virtual void execute() = 0;
00068 
00069     protected:
00070         explicit IDellCallingInterfaceSmi();
00071     };
00072 
00073     // NOTE: does not hand out singletons
00074     class SmiFactory : public virtual factory::IFactory
00075     {
00076     public:
00077         enum { DELL_CALLING_INTERFACE_SMI_RAW, DELL_CALLING_INTERFACE_SMI,};
00078 
00079         static SmiFactory *getFactory();
00080         virtual ~SmiFactory() throw();
00081         virtual std::auto_ptr<IDellCallingInterfaceSmi> makeNew(u8 type) = 0; // not for use
00082     protected:
00083         SmiFactory();
00084     };
00085 
00086     enum {cbARG1 = 0, cbARG2 = 1, cbARG3 = 2, cbARG4 = 3};
00087     enum {cbRES1 = 0, cbRES2 = 1, cbRES3 = 2, cbRES4 = 3};
00088 
00089     // non-member helper functions
00090     // These encapsulate some common calling-interface SMI functions
00091     //
00092     void doSimpleCallingInterfaceSmi(u16 smiClass, u16 select, const u32 args[4], u32 res[4]);
00093     std::auto_ptr<smi::IDellCallingInterfaceSmi> setupCallingInterfaceSmi(u16 smiClass, u16 select, const u32 args[4]);
00094     u32 getAuthenticationKey(const std::string &password);
00095 
00096     enum password_format_enum { PW_FORMAT_UNKNOWN, PW_FORMAT_SCAN_CODE, PW_FORMAT_ASCII };
00097     password_format_enum getPasswordFormat();
00098 
00099 #if 0
00100     // not yet implemented
00101     std::string getServiceTag();
00102     void setServiceTag(const std::string &password, const std::string &newTag);
00103     std::string getAssetTag();
00104     void setAssetTag(const std::string &password, const std::string &newTag);
00105 #endif
00106 
00107     bool getPasswordStatus(u16 which);
00108 
00109     u32 readNVStorage         (u32 location, u32 *minValue, u32 *maxValue);
00110     u32 readBatteryModeSetting(u32 location, u32 *minValue, u32 *maxValue);
00111     u32 readACModeSetting     (u32 location, u32 *minValue, u32 *maxValue);
00112     u32 readSystemStatus(u32 *failingSensorHandle);
00113 
00114     u32 writeNVStorage         (const std::string &password, u32 location, u32 value, u32 *minValue, u32 *maxValue);
00115     u32 writeBatteryModeSetting(const std::string &password, u32 location, u32 value, u32 *minValue, u32 *maxValue);
00116     u32 writeACModeSetting     (const std::string &password, u32 location, u32 value, u32 *minValue, u32 *maxValue);
00117 
00118     void getDisplayType(u32 &type, u32 &resolution, u32 &memSizeX256kb);
00119     void getPanelResolution(u32 &horiz, u32 &vert);
00120     void getActiveDisplays(u32 &bits);
00121     void setActiveDisplays(u32 &bits);
00122 
00123     void getPropertyOwnershipTag(char *tagBuf, size_t size);
00124     void setPropertyOwnershipTag(const std::string password, const char *newTag, size_t size);
00125 
00126     // newer interface
00127     extern const int Bluetooth_Devices_Disable;  // docs appear to be wrong. They say 0x0152, but this looks backwards from reality
00128     extern const int Bluetooth_Devices_Enable;  // docs appear to be wrong. They say 0x0153, but this looks backwards from reality
00129     extern const int Cellular_Radio_Disable;
00130     extern const int Cellular_Radio_Enable;
00131     extern const int WiFi_Locator_Disable;
00132     extern const int WiFi_Locator_Enable;
00133     extern const int Wireless_LAN_Disable;
00134     extern const int Wireless_LAN_Enable;
00135     extern const int Wireless_Switch_Bluetooth_Control_Disable;
00136     extern const int Wireless_Switch_Bluetooth_Control_Enable;
00137     extern const int Wireless_Switch_Cellular_Control_Disable;
00138     extern const int Wireless_Switch_Cellular_Control_Enable;
00139     extern const int Wireless_Switch_Wireless_LAN_Control_Disable;
00140     extern const int Wireless_Switch_Wireless_LAN_Control_Enable;
00141 
00142     // old interface
00143     extern const int Radio_Transmission_Enable;
00144     extern const int Radio_Transmission_Disable;
00145     extern const int Wireless_Device_Disable;
00146     extern const int Wireless_Device_App_Control;
00147     extern const int Wireless_Device_App_Or_Hotkey_Control;
00148 
00149     enum radioNum { WLAN_RADIO_NUM=1, BLUETOOTH_RADIO_NUM=2, WWAN_RADIO_NUM=3 };
00150     void wirelessRadioControl(bool enable, bool boot, bool runtime, int enable_token, int disable_token, int radioNum, std::string password);
00151 
00152     enum { WLAN_SWITCH_CTL=1, BLUETOOTH_SWITCH_CTL=2, WWAN_SWITCH_CTL=4, LOCATOR_SWITCH_CTL=5 };
00153     void wirelessSwitchControl(bool enable, bool boot, bool runtime, int enable_token, int disable_token, int switchNum, std::string password);
00154 
00155     enum radioStatusCode { STATUS_ENABLED, STATUS_DISABLED, STATUS_NOT_PRESENT, STATUS_UNSUPPORTED, STATUS_UNKNOWN };
00156     radioStatusCode wirelessRadioStatus(radioNum which, std::ostream &cout=std::cout, u32 defRes2=0);
00157 }
00158 
00159 // always should be last thing in header file
00160 #include "smbios/config/abi_suffix.hpp"
00161 
00162 #endif  /* SMIINTERFACE_H */

Generated on Mon Apr 23 19:33:43 2012 for libsmbios_c library by  doxygen 1.4.7