summaryrefslogtreecommitdiffstats
path: root/src/hardware/LMI_MemoryProvider.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/hardware/LMI_MemoryProvider.c')
-rw-r--r--src/hardware/LMI_MemoryProvider.c322
1 files changed, 322 insertions, 0 deletions
diff --git a/src/hardware/LMI_MemoryProvider.c b/src/hardware/LMI_MemoryProvider.c
new file mode 100644
index 0000000..6c9a2ec
--- /dev/null
+++ b/src/hardware/LMI_MemoryProvider.c
@@ -0,0 +1,322 @@
+/*
+ * Copyright (C) 2013 Red Hat, Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Authors: Peter Schiffer <pschiffe@redhat.com>
+ */
+
+#include <konkret/konkret.h>
+#include "LMI_Memory.h"
+#include "LMI_Hardware.h"
+#include "globals.h"
+#include "dmidecode.h"
+#include "procfs.h"
+
+static const CMPIBroker* _cb = NULL;
+
+static void LMI_MemoryInitialize()
+{
+}
+
+static CMPIStatus LMI_MemoryCleanup(
+ CMPIInstanceMI* mi,
+ const CMPIContext* cc,
+ CMPIBoolean term)
+{
+ CMReturn(CMPI_RC_OK);
+}
+
+static CMPIStatus LMI_MemoryEnumInstanceNames(
+ CMPIInstanceMI* mi,
+ const CMPIContext* cc,
+ const CMPIResult* cr,
+ const CMPIObjectPath* cop)
+{
+ return KDefaultEnumerateInstanceNames(
+ _cb, mi, cc, cr, cop);
+}
+
+static CMPIStatus LMI_MemoryEnumInstances(
+ CMPIInstanceMI* mi,
+ const CMPIContext* cc,
+ const CMPIResult* cr,
+ const CMPIObjectPath* cop,
+ const char** properties)
+{
+ LMI_Memory lmi_mem;
+ const char *ns = KNameSpace(cop), *name = "System Memory";
+ char *error_msg = NULL;
+ unsigned long fallback_memory_size = 0;
+ DmiMemory dmi_memory;
+
+ if (dmi_get_memory(&dmi_memory) != 0) {
+ fallback_memory_size = meminfo_get_memory_size();
+ if (!fallback_memory_size) {
+ error_msg = "Unable to get memory information.";
+ goto done;
+ }
+ }
+
+ LMI_Memory_Init(&lmi_mem, _cb, ns);
+
+ LMI_Memory_Set_SystemCreationClassName(&lmi_mem,
+ get_system_creation_class_name());
+ LMI_Memory_Set_SystemName(&lmi_mem, get_system_name());
+ LMI_Memory_Set_CreationClassName(&lmi_mem, ORGID "_" MEM_CLASS_NAME);
+
+ LMI_Memory_Set_DeviceID(&lmi_mem, "0");
+ LMI_Memory_Set_Volatile(&lmi_mem, 1);
+ LMI_Memory_Set_Access(&lmi_mem, LMI_Memory_Access_Read_Write_Supported);
+ LMI_Memory_Set_BlockSize(&lmi_mem, 1);
+ LMI_Memory_Set_EnabledState(&lmi_mem, LMI_Memory_EnabledState_Enabled);
+ LMI_Memory_Init_OperationalStatus(&lmi_mem, 1);
+ LMI_Memory_Set_OperationalStatus(&lmi_mem, 0,
+ LMI_Memory_OperationalStatus_Unknown);
+ LMI_Memory_Set_HealthState(&lmi_mem, LMI_Memory_HealthState_Unknown);
+ LMI_Memory_Set_ElementName(&lmi_mem, name);
+ LMI_Memory_Set_Caption(&lmi_mem, name);
+ LMI_Memory_Set_Name(&lmi_mem, name);
+ LMI_Memory_Set_Description(&lmi_mem,
+ "This object represents all memory available in system.");
+ LMI_Memory_Set_InstanceID(&lmi_mem, ORGID ":" MEM_CLASS_NAME ":0");
+ LMI_Memory_Set_IsCompressed(&lmi_mem, 0);
+ LMI_Memory_Set_Purpose(&lmi_mem, "The system memory is temporary storage "
+ "area storing instructions and data required by processor "
+ "to run programs.");
+
+ if (!fallback_memory_size) {
+ LMI_Memory_Set_NumberOfBlocks(&lmi_mem, dmi_memory.physical_size);
+ LMI_Memory_Set_ConsumableBlocks(&lmi_mem, dmi_memory.available_size);
+ LMI_Memory_Set_StartingAddress(&lmi_mem, dmi_memory.start_addr);
+ LMI_Memory_Set_EndingAddress(&lmi_mem, dmi_memory.end_addr);
+ } else {
+ LMI_Memory_Set_NumberOfBlocks(&lmi_mem, fallback_memory_size);
+ }
+
+ KReturnInstance(cr, lmi_mem);
+
+done:
+ dmi_free_memory(&dmi_memory);
+
+ if (error_msg) {
+ KReturn2(_cb, ERR_FAILED, error_msg);
+ }
+
+ CMReturn(CMPI_RC_OK);
+}
+
+static CMPIStatus LMI_MemoryGetInstance(
+ CMPIInstanceMI* mi,
+ const CMPIContext* cc,
+ const CMPIResult* cr,
+ const CMPIObjectPath* cop,
+ const char** properties)
+{
+ return KDefaultGetInstance(
+ _cb, mi, cc, cr, cop, properties);
+}
+
+static CMPIStatus LMI_MemoryCreateInstance(
+ CMPIInstanceMI* mi,
+ const CMPIContext* cc,
+ const CMPIResult* cr,
+ const CMPIObjectPath* cop,
+ const CMPIInstance* ci)
+{
+ CMReturn(CMPI_RC_ERR_NOT_SUPPORTED);
+}
+
+static CMPIStatus LMI_MemoryModifyInstance(
+ 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 LMI_MemoryDeleteInstance(
+ CMPIInstanceMI* mi,
+ const CMPIContext* cc,
+ const CMPIResult* cr,
+ const CMPIObjectPath* cop)
+{
+ CMReturn(CMPI_RC_ERR_NOT_SUPPORTED);
+}
+
+static CMPIStatus LMI_MemoryExecQuery(
+ CMPIInstanceMI* mi,
+ const CMPIContext* cc,
+ const CMPIResult* cr,
+ const CMPIObjectPath* cop,
+ const char* lang,
+ const char* query)
+{
+ CMReturn(CMPI_RC_ERR_NOT_SUPPORTED);
+}
+
+CMInstanceMIStub(
+ LMI_Memory,
+ LMI_Memory,
+ _cb,
+ LMI_MemoryInitialize())
+
+static CMPIStatus LMI_MemoryMethodCleanup(
+ CMPIMethodMI* mi,
+ const CMPIContext* cc,
+ CMPIBoolean term)
+{
+ CMReturn(CMPI_RC_OK);
+}
+
+static CMPIStatus LMI_MemoryInvokeMethod(
+ CMPIMethodMI* mi,
+ const CMPIContext* cc,
+ const CMPIResult* cr,
+ const CMPIObjectPath* cop,
+ const char* meth,
+ const CMPIArgs* in,
+ CMPIArgs* out)
+{
+ return LMI_Memory_DispatchMethod(
+ _cb, mi, cc, cr, cop, meth, in, out);
+}
+
+CMMethodMIStub(
+ LMI_Memory,
+ LMI_Memory,
+ _cb,
+ LMI_MemoryInitialize())
+
+KUint32 LMI_Memory_RequestStateChange(
+ const CMPIBroker* cb,
+ CMPIMethodMI* mi,
+ const CMPIContext* context,
+ const LMI_MemoryRef* self,
+ const KUint16* RequestedState,
+ KRef* Job,
+ const KDateTime* TimeoutPeriod,
+ CMPIStatus* status)
+{
+ KUint32 result = KUINT32_INIT;
+
+ KSetStatus(status, ERR_NOT_SUPPORTED);
+ return result;
+}
+
+KUint32 LMI_Memory_SetPowerState(
+ const CMPIBroker* cb,
+ CMPIMethodMI* mi,
+ const CMPIContext* context,
+ const LMI_MemoryRef* self,
+ const KUint16* PowerState,
+ const KDateTime* Time,
+ CMPIStatus* status)
+{
+ KUint32 result = KUINT32_INIT;
+
+ KSetStatus(status, ERR_NOT_SUPPORTED);
+ return result;
+}
+
+KUint32 LMI_Memory_Reset(
+ const CMPIBroker* cb,
+ CMPIMethodMI* mi,
+ const CMPIContext* context,
+ const LMI_MemoryRef* self,
+ CMPIStatus* status)
+{
+ KUint32 result = KUINT32_INIT;
+
+ KSetStatus(status, ERR_NOT_SUPPORTED);
+ return result;
+}
+
+KUint32 LMI_Memory_EnableDevice(
+ const CMPIBroker* cb,
+ CMPIMethodMI* mi,
+ const CMPIContext* context,
+ const LMI_MemoryRef* self,
+ const KBoolean* Enabled,
+ CMPIStatus* status)
+{
+ KUint32 result = KUINT32_INIT;
+
+ KSetStatus(status, ERR_NOT_SUPPORTED);
+ return result;
+}
+
+KUint32 LMI_Memory_OnlineDevice(
+ const CMPIBroker* cb,
+ CMPIMethodMI* mi,
+ const CMPIContext* context,
+ const LMI_MemoryRef* self,
+ const KBoolean* Online,
+ CMPIStatus* status)
+{
+ KUint32 result = KUINT32_INIT;
+
+ KSetStatus(status, ERR_NOT_SUPPORTED);
+ return result;
+}
+
+KUint32 LMI_Memory_QuiesceDevice(
+ const CMPIBroker* cb,
+ CMPIMethodMI* mi,
+ const CMPIContext* context,
+ const LMI_MemoryRef* self,
+ const KBoolean* Quiesce,
+ CMPIStatus* status)
+{
+ KUint32 result = KUINT32_INIT;
+
+ KSetStatus(status, ERR_NOT_SUPPORTED);
+ return result;
+}
+
+KUint32 LMI_Memory_SaveProperties(
+ const CMPIBroker* cb,
+ CMPIMethodMI* mi,
+ const CMPIContext* context,
+ const LMI_MemoryRef* self,
+ CMPIStatus* status)
+{
+ KUint32 result = KUINT32_INIT;
+
+ KSetStatus(status, ERR_NOT_SUPPORTED);
+ return result;
+}
+
+KUint32 LMI_Memory_RestoreProperties(
+ const CMPIBroker* cb,
+ CMPIMethodMI* mi,
+ const CMPIContext* context,
+ const LMI_MemoryRef* self,
+ CMPIStatus* status)
+{
+ KUint32 result = KUINT32_INIT;
+
+ KSetStatus(status, ERR_NOT_SUPPORTED);
+ return result;
+}
+
+KONKRET_REGISTRATION(
+ "root/cimv2",
+ "LMI_Memory",
+ "LMI_Memory",
+ "instance method")