#include #include "Linux_PowerManagementCapabilities.h" #include "power.h" static const CMPIBroker* _cb = NULL; static void Linux_PowerManagementCapabilitiesInitialize(CMPIInstanceMI *mi) { mi->hdl = power_ref(_cb); } static void Linux_PowerManagementCapabilitiesInitializeMethod(CMPIMethodMI *mi) { mi->hdl = power_ref(_cb); } static CMPIStatus Linux_PowerManagementCapabilitiesCleanup( CMPIInstanceMI* mi, const CMPIContext* cc, CMPIBoolean term) { power_unref(mi->hdl); mi->hdl = NULL; CMReturn(CMPI_RC_OK); } static CMPIStatus Linux_PowerManagementCapabilitiesEnumInstanceNames( CMPIInstanceMI* mi, const CMPIContext* cc, const CMPIResult* cr, const CMPIObjectPath* cop) { return KDefaultEnumerateInstanceNames( _cb, mi, cc, cr, cop); } static CMPIStatus Linux_PowerManagementCapabilitiesEnumInstances( CMPIInstanceMI* mi, const CMPIContext* cc, const CMPIResult* cr, const CMPIObjectPath* cop, const char** properties) { const char *ns = KNameSpace(cop); Linux_PowerManagementCapabilities w; Linux_PowerManagementCapabilities_Init(&w, _cb, ns); // TODO: make it unique Linux_PowerManagementCapabilities_Set_InstanceID(&w, "Linux:PowerManagementCapabilities"); Linux_PowerManagementCapabilities_Set_ElementName(&w, "Linux:PowerManagementCapabilities"); Linux_PowerManagementCapabilities_Set_Caption(&w, "Linux:PowerManagementCapabilities"); int count; unsigned short *list = power_available_requested_power_states(mi->hdl, &count); Linux_PowerManagementCapabilities_Init_PowerStatesSupported(&w, count); for (int i = 0; i < count; i++) { Linux_PowerManagementCapabilities_Set_PowerStatesSupported(&w, i, list[i]); } // TODO: get this list dynamically from PowerStatesSupported (see SMASH) Linux_PowerManagementCapabilities_Init_PowerChangeCapabilities(&w, 3); Linux_PowerManagementCapabilities_Set_PowerChangeCapabilities(&w, 0, Linux_PowerManagementCapabilities_PowerChangeCapabilities_Power_State_Settable); Linux_PowerManagementCapabilities_Set_PowerChangeCapabilities(&w, 1, Linux_PowerManagementCapabilities_PowerChangeCapabilities_Power_Cycling_Supported); Linux_PowerManagementCapabilities_Set_PowerChangeCapabilities(&w, 2, Linux_PowerManagementCapabilities_PowerChangeCapabilities_Graceful_Shutdown_Supported); KReturnInstance(cr, w); CMReturn(CMPI_RC_OK); } static CMPIStatus Linux_PowerManagementCapabilitiesGetInstance( CMPIInstanceMI* mi, const CMPIContext* cc, const CMPIResult* cr, const CMPIObjectPath* cop, const char** properties) { return KDefaultGetInstance( _cb, mi, cc, cr, cop, properties); } static CMPIStatus Linux_PowerManagementCapabilitiesCreateInstance( CMPIInstanceMI* mi, const CMPIContext* cc, const CMPIResult* cr, const CMPIObjectPath* cop, const CMPIInstance* ci) { CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); } static CMPIStatus Linux_PowerManagementCapabilitiesModifyInstance( CMPIInstanceMI* mi, const CMPIContext* cc, const CMPIResult* cr, const CMPIObjectPath* cop, const CMPIInstance* ci, const char** properties) { CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); } static CMPIStatus Linux_PowerManagementCapabilitiesDeleteInstance( CMPIInstanceMI* mi, const CMPIContext* cc, const CMPIResult* cr, const CMPIObjectPath* cop) { CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); } static CMPIStatus Linux_PowerManagementCapabilitiesExecQuery( CMPIInstanceMI* mi, const CMPIContext* cc, const CMPIResult* cr, const CMPIObjectPath* cop, const char* lang, const char* query) { CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); } CMInstanceMIStub( Linux_PowerManagementCapabilities, Linux_PowerManagementCapabilities, _cb, Linux_PowerManagementCapabilitiesInitialize(&mi)) static CMPIStatus Linux_PowerManagementCapabilitiesMethodCleanup( CMPIMethodMI* mi, const CMPIContext* cc, CMPIBoolean term) { power_unref(mi->hdl); mi->hdl = NULL; CMReturn(CMPI_RC_OK); } static CMPIStatus Linux_PowerManagementCapabilitiesInvokeMethod( CMPIMethodMI* mi, const CMPIContext* cc, const CMPIResult* cr, const CMPIObjectPath* cop, const char* meth, const CMPIArgs* in, CMPIArgs* out) { return Linux_PowerManagementCapabilities_DispatchMethod( _cb, mi, cc, cr, cop, meth, in, out); } CMMethodMIStub( Linux_PowerManagementCapabilities, Linux_PowerManagementCapabilities, _cb, Linux_PowerManagementCapabilitiesInitializeMethod(&mi)) KONKRET_REGISTRATION( "root/cimv2", "Linux_PowerManagementCapabilities", "Linux_PowerManagementCapabilities", "instance method")