From 1e773b6af3066658ccc7eb7c4092894d76285f32 Mon Sep 17 00:00:00 2001 From: Peter Schiffer Date: Thu, 25 Jul 2013 20:34:30 +0200 Subject: Hardware: Added associations to the CIM_ComputerSystem class New providers: * LMI_ProcessorSystemDeviceProvider * LMI_MemorySystemDeviceProvider * LMI_PCIDeviceSystemDeviceProvider * LMI_BatterySystemDeviceProvider * LMI_ChassisComputerSystemPackageProvider --- mof/60_LMI_Hardware.mof | 50 ++++ src/hardware/LMI_BatterySystemDeviceProvider.c | 268 ++++++++++++++++++++ .../LMI_ChassisComputerSystemPackageProvider.c | 266 ++++++++++++++++++++ src/hardware/LMI_Hardware.h | 3 + src/hardware/LMI_MemorySystemDeviceProvider.c | 254 +++++++++++++++++++ src/hardware/LMI_PCIDeviceProvider.c | 1 - src/hardware/LMI_PCIDeviceSystemDeviceProvider.c | 272 +++++++++++++++++++++ src/hardware/LMI_ProcessorSystemDeviceProvider.c | 268 ++++++++++++++++++++ 8 files changed, 1381 insertions(+), 1 deletion(-) create mode 100644 src/hardware/LMI_BatterySystemDeviceProvider.c create mode 100644 src/hardware/LMI_ChassisComputerSystemPackageProvider.c create mode 100644 src/hardware/LMI_MemorySystemDeviceProvider.c create mode 100644 src/hardware/LMI_PCIDeviceSystemDeviceProvider.c create mode 100644 src/hardware/LMI_ProcessorSystemDeviceProvider.c diff --git a/mof/60_LMI_Hardware.mof b/mof/60_LMI_Hardware.mof index 74b85a2..c5f2b22 100644 --- a/mof/60_LMI_Hardware.mof +++ b/mof/60_LMI_Hardware.mof @@ -162,6 +162,16 @@ class LMI_ProcessorChipRealizes: CIM_Realizes LMI_Processor REF Dependent; }; +[ Provider("cmpi:cmpiLMI_ProcessorSystemDevice"), Association ] +class LMI_ProcessorSystemDevice: CIM_SystemDevice +{ + [Override("GroupComponent")] + CIM_ComputerSystem REF GroupComponent; + + [Override("PartComponent")] + LMI_Processor REF PartComponent; +}; + /****************************************************************************** * Memory */ @@ -206,6 +216,16 @@ class LMI_PhysicalMemoryRealizes: CIM_Realizes LMI_Memory REF Dependent; }; +[ Provider("cmpi:cmpiLMI_MemorySystemDevice"), Association ] +class LMI_MemorySystemDevice: CIM_SystemDevice +{ + [Override("GroupComponent")] + CIM_ComputerSystem REF GroupComponent; + + [Override("PartComponent")] + LMI_Memory REF PartComponent; +}; + /****************************************************************************** * Physical Asset */ @@ -240,6 +260,16 @@ class LMI_ProcessorChipContainer: CIM_Container LMI_ProcessorChip REF PartComponent; }; +[ Provider("cmpi:cmpiLMI_ChassisComputerSystemPackage"), Association ] +class LMI_ChassisComputerSystemPackage: CIM_ComputerSystemPackage +{ + [Override("Antecedent")] + LMI_Chassis REF Antecedent; + + [Override("Dependent")] + CIM_ComputerSystem REF Dependent; +}; + [ Provider("cmpi:cmpiLMI_MemorySlot") ] class LMI_MemorySlot: CIM_Slot { @@ -349,6 +379,16 @@ class LMI_PhysicalBatteryContainer: CIM_Container LMI_BatteryPhysicalPackage REF PartComponent; }; +[ Provider("cmpi:cmpiLMI_BatterySystemDevice"), Association ] +class LMI_BatterySystemDevice: CIM_SystemDevice +{ + [Override("GroupComponent")] + CIM_ComputerSystem REF GroupComponent; + + [Override("PartComponent")] + LMI_Battery REF PartComponent; +}; + /****************************************************************************** * PCI Devices */ @@ -368,3 +408,13 @@ class LMI_PCIDevice: CIM_PCIDevice [ Description("Name of the subsystem") ] string SubsystemName; }; + +[ Provider("cmpi:cmpiLMI_PCIDeviceSystemDevice"), Association ] +class LMI_PCIDeviceSystemDevice: CIM_SystemDevice +{ + [Override("GroupComponent")] + CIM_ComputerSystem REF GroupComponent; + + [Override("PartComponent")] + LMI_PCIDevice REF PartComponent; +}; diff --git a/src/hardware/LMI_BatterySystemDeviceProvider.c b/src/hardware/LMI_BatterySystemDeviceProvider.c new file mode 100644 index 0000000..58d59dc --- /dev/null +++ b/src/hardware/LMI_BatterySystemDeviceProvider.c @@ -0,0 +1,268 @@ +/* + * 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 + */ + +#include +#include "LMI_BatterySystemDevice.h" +#include "LMI_Hardware.h" +#include "globals.h" +#include "dmidecode.h" + +static const CMPIBroker* _cb; + +static void LMI_BatterySystemDeviceInitialize() +{ +} + +static CMPIStatus LMI_BatterySystemDeviceCleanup( + CMPIInstanceMI* mi, + const CMPIContext* cc, + CMPIBoolean term) +{ + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus LMI_BatterySystemDeviceEnumInstanceNames( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop) +{ + return KDefaultEnumerateInstanceNames( + _cb, mi, cc, cr, cop); +} + +static CMPIStatus LMI_BatterySystemDeviceEnumInstances( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char** properties) +{ + LMI_BatterySystemDevice lmi_batt_sys_device; + CIM_ComputerSystemRef cim_cs; + LMI_BatteryRef lmi_batt; + CMPIObjectPath *o; + CMPIStatus st; + const char *ns = KNameSpace(cop); + unsigned i; + DmiBattery *dmi_batt = NULL; + unsigned dmi_batt_nb = 0; + + if (dmi_get_batteries(&dmi_batt, &dmi_batt_nb) != 0 || dmi_batt_nb < 1) { + goto done; + } + + CIM_ComputerSystemRef_Init(&cim_cs, _cb, ns); + CIM_ComputerSystemRef_Set_Name(&cim_cs, get_system_name()); + CIM_ComputerSystemRef_Set_CreationClassName(&cim_cs, + get_system_creation_class_name()); + o = CIM_ComputerSystemRef_ToObjectPath(&cim_cs, &st); + CMSetClassName(o, get_system_creation_class_name()); + + for (i = 0; i < dmi_batt_nb; i++) { + LMI_BatterySystemDevice_Init(&lmi_batt_sys_device, _cb, ns); + + LMI_BatteryRef_Init(&lmi_batt, _cb, ns); + LMI_BatteryRef_Set_SystemCreationClassName(&lmi_batt, + get_system_creation_class_name()); + LMI_BatteryRef_Set_SystemName(&lmi_batt, get_system_name()); + LMI_BatteryRef_Set_CreationClassName(&lmi_batt, + ORGID "_" BATTERY_CLASS_NAME); + LMI_BatteryRef_Set_DeviceID(&lmi_batt, dmi_batt[i].name); + + LMI_BatterySystemDevice_SetObjectPath_GroupComponent( + &lmi_batt_sys_device, o); + LMI_BatterySystemDevice_Set_PartComponent(&lmi_batt_sys_device, + &lmi_batt); + + KReturnInstance(cr, lmi_batt_sys_device); + } + +done: + dmi_free_batteries(&dmi_batt, &dmi_batt_nb); + + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus LMI_BatterySystemDeviceGetInstance( + 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_BatterySystemDeviceCreateInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const CMPIInstance* ci) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_BatterySystemDeviceModifyInstance( + 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_BatterySystemDeviceDeleteInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_BatterySystemDeviceExecQuery( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* lang, + const char* query) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_BatterySystemDeviceAssociationCleanup( + CMPIAssociationMI* mi, + const CMPIContext* cc, + CMPIBoolean term) +{ + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus LMI_BatterySystemDeviceAssociators( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* resultClass, + const char* role, + const char* resultRole, + const char** properties) +{ + return KDefaultAssociators( + _cb, + mi, + cc, + cr, + cop, + LMI_BatterySystemDevice_ClassName, + assocClass, + resultClass, + role, + resultRole, + properties); +} + +static CMPIStatus LMI_BatterySystemDeviceAssociatorNames( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* resultClass, + const char* role, + const char* resultRole) +{ + return KDefaultAssociatorNames( + _cb, + mi, + cc, + cr, + cop, + LMI_BatterySystemDevice_ClassName, + assocClass, + resultClass, + role, + resultRole); +} + +static CMPIStatus LMI_BatterySystemDeviceReferences( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* role, + const char** properties) +{ + return KDefaultReferences( + _cb, + mi, + cc, + cr, + cop, + LMI_BatterySystemDevice_ClassName, + assocClass, + role, + properties); +} + +static CMPIStatus LMI_BatterySystemDeviceReferenceNames( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* role) +{ + return KDefaultReferenceNames( + _cb, + mi, + cc, + cr, + cop, + LMI_BatterySystemDevice_ClassName, + assocClass, + role); +} + +CMInstanceMIStub( + LMI_BatterySystemDevice, + LMI_BatterySystemDevice, + _cb, + LMI_BatterySystemDeviceInitialize()) + +CMAssociationMIStub( + LMI_BatterySystemDevice, + LMI_BatterySystemDevice, + _cb, + LMI_BatterySystemDeviceInitialize()) + +KONKRET_REGISTRATION( + "root/cimv2", + "LMI_BatterySystemDevice", + "LMI_BatterySystemDevice", + "instance association") diff --git a/src/hardware/LMI_ChassisComputerSystemPackageProvider.c b/src/hardware/LMI_ChassisComputerSystemPackageProvider.c new file mode 100644 index 0000000..d0fc004 --- /dev/null +++ b/src/hardware/LMI_ChassisComputerSystemPackageProvider.c @@ -0,0 +1,266 @@ +/* + * 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 + */ + +#include +#include "LMI_ChassisComputerSystemPackage.h" +#include "LMI_Hardware.h" +#include "globals.h" +#include "dmidecode.h" + +static const CMPIBroker* _cb; + +static void LMI_ChassisComputerSystemPackageInitialize() +{ +} + +static CMPIStatus LMI_ChassisComputerSystemPackageCleanup( + CMPIInstanceMI* mi, + const CMPIContext* cc, + CMPIBoolean term) +{ + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus LMI_ChassisComputerSystemPackageEnumInstanceNames( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop) +{ + return KDefaultEnumerateInstanceNames( + _cb, mi, cc, cr, cop); +} + +static CMPIStatus LMI_ChassisComputerSystemPackageEnumInstances( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char** properties) +{ + LMI_ChassisComputerSystemPackage lmi_chassis_cs_pkg; + CIM_ComputerSystemRef cim_cs; + LMI_ChassisRef lmi_chassis; + CMPIObjectPath *o; + CMPIStatus st; + const char *ns = KNameSpace(cop); + DmiChassis dmi_chassis; + + if (dmi_get_chassis(&dmi_chassis) != 0) { + goto done; + } + + CIM_ComputerSystemRef_Init(&cim_cs, _cb, ns); + CIM_ComputerSystemRef_Set_Name(&cim_cs, get_system_name()); + CIM_ComputerSystemRef_Set_CreationClassName(&cim_cs, + get_system_creation_class_name()); + o = CIM_ComputerSystemRef_ToObjectPath(&cim_cs, &st); + CMSetClassName(o, get_system_creation_class_name()); + + LMI_ChassisComputerSystemPackage_Init(&lmi_chassis_cs_pkg, _cb, ns); + + LMI_ChassisRef_Init(&lmi_chassis, _cb, ns); + LMI_ChassisRef_Set_CreationClassName(&lmi_chassis, + ORGID "_" CHASSIS_CLASS_NAME); + if (strcmp(dmi_chassis.serial_number, "Not Specified") == 0) { + LMI_ChassisRef_Set_Tag(&lmi_chassis, "0"); + } else { + LMI_ChassisRef_Set_Tag(&lmi_chassis, dmi_chassis.serial_number); + } + + LMI_ChassisComputerSystemPackage_SetObjectPath_Dependent( + &lmi_chassis_cs_pkg, o); + LMI_ChassisComputerSystemPackage_Set_Antecedent(&lmi_chassis_cs_pkg, + &lmi_chassis); + LMI_ChassisComputerSystemPackage_Set_PlatformGUID(&lmi_chassis_cs_pkg, "0"); + + KReturnInstance(cr, lmi_chassis_cs_pkg); + +done: + dmi_free_chassis(&dmi_chassis); + + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus LMI_ChassisComputerSystemPackageGetInstance( + 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_ChassisComputerSystemPackageCreateInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const CMPIInstance* ci) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_ChassisComputerSystemPackageModifyInstance( + 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_ChassisComputerSystemPackageDeleteInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_ChassisComputerSystemPackageExecQuery( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* lang, + const char* query) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_ChassisComputerSystemPackageAssociationCleanup( + CMPIAssociationMI* mi, + const CMPIContext* cc, + CMPIBoolean term) +{ + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus LMI_ChassisComputerSystemPackageAssociators( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* resultClass, + const char* role, + const char* resultRole, + const char** properties) +{ + return KDefaultAssociators( + _cb, + mi, + cc, + cr, + cop, + LMI_ChassisComputerSystemPackage_ClassName, + assocClass, + resultClass, + role, + resultRole, + properties); +} + +static CMPIStatus LMI_ChassisComputerSystemPackageAssociatorNames( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* resultClass, + const char* role, + const char* resultRole) +{ + return KDefaultAssociatorNames( + _cb, + mi, + cc, + cr, + cop, + LMI_ChassisComputerSystemPackage_ClassName, + assocClass, + resultClass, + role, + resultRole); +} + +static CMPIStatus LMI_ChassisComputerSystemPackageReferences( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* role, + const char** properties) +{ + return KDefaultReferences( + _cb, + mi, + cc, + cr, + cop, + LMI_ChassisComputerSystemPackage_ClassName, + assocClass, + role, + properties); +} + +static CMPIStatus LMI_ChassisComputerSystemPackageReferenceNames( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* role) +{ + return KDefaultReferenceNames( + _cb, + mi, + cc, + cr, + cop, + LMI_ChassisComputerSystemPackage_ClassName, + assocClass, + role); +} + +CMInstanceMIStub( + LMI_ChassisComputerSystemPackage, + LMI_ChassisComputerSystemPackage, + _cb, + LMI_ChassisComputerSystemPackageInitialize()) + +CMAssociationMIStub( + LMI_ChassisComputerSystemPackage, + LMI_ChassisComputerSystemPackage, + _cb, + LMI_ChassisComputerSystemPackageInitialize()) + +KONKRET_REGISTRATION( + "root/cimv2", + "LMI_ChassisComputerSystemPackage", + "LMI_ChassisComputerSystemPackage", + "instance association") diff --git a/src/hardware/LMI_Hardware.h b/src/hardware/LMI_Hardware.h index 1361dd4..e72536a 100644 --- a/src/hardware/LMI_Hardware.h +++ b/src/hardware/LMI_Hardware.h @@ -41,4 +41,7 @@ #define BATTERY_PHYS_PKG_CLASS_NAME "BatteryPhysicalPackage" #define PCI_DEVICE_CLASS_NAME "PCIDevice" +/* PCIDevices */ +#define PCI_DEVID_STR_SIZE 55 + #endif /* LMI_HARDWARE_H_ */ diff --git a/src/hardware/LMI_MemorySystemDeviceProvider.c b/src/hardware/LMI_MemorySystemDeviceProvider.c new file mode 100644 index 0000000..d4d310a --- /dev/null +++ b/src/hardware/LMI_MemorySystemDeviceProvider.c @@ -0,0 +1,254 @@ +/* + * 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 + */ + +#include +#include "LMI_MemorySystemDevice.h" +#include "LMI_Hardware.h" +#include "globals.h" + +static const CMPIBroker* _cb; + +static void LMI_MemorySystemDeviceInitialize() +{ +} + +static CMPIStatus LMI_MemorySystemDeviceCleanup( + CMPIInstanceMI* mi, + const CMPIContext* cc, + CMPIBoolean term) +{ + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus LMI_MemorySystemDeviceEnumInstanceNames( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop) +{ + return KDefaultEnumerateInstanceNames( + _cb, mi, cc, cr, cop); +} + +static CMPIStatus LMI_MemorySystemDeviceEnumInstances( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char** properties) +{ + LMI_MemorySystemDevice lmi_mem_sys_device; + CIM_ComputerSystemRef cim_cs; + LMI_MemoryRef lmi_mem; + CMPIObjectPath *o; + CMPIStatus st; + const char *ns = KNameSpace(cop); + + CIM_ComputerSystemRef_Init(&cim_cs, _cb, ns); + CIM_ComputerSystemRef_Set_Name(&cim_cs, get_system_name()); + CIM_ComputerSystemRef_Set_CreationClassName(&cim_cs, + get_system_creation_class_name()); + o = CIM_ComputerSystemRef_ToObjectPath(&cim_cs, &st); + CMSetClassName(o, get_system_creation_class_name()); + + LMI_MemorySystemDevice_Init(&lmi_mem_sys_device, _cb, ns); + + LMI_MemoryRef_Init(&lmi_mem, _cb, ns); + LMI_MemoryRef_Set_SystemCreationClassName(&lmi_mem, + get_system_creation_class_name()); + LMI_MemoryRef_Set_SystemName(&lmi_mem, get_system_name()); + LMI_MemoryRef_Set_CreationClassName(&lmi_mem, ORGID "_" MEM_CLASS_NAME); + LMI_MemoryRef_Set_DeviceID(&lmi_mem, "0"); + + LMI_MemorySystemDevice_SetObjectPath_GroupComponent( + &lmi_mem_sys_device, o); + LMI_MemorySystemDevice_Set_PartComponent(&lmi_mem_sys_device, + &lmi_mem); + + KReturnInstance(cr, lmi_mem_sys_device); + + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus LMI_MemorySystemDeviceGetInstance( + 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_MemorySystemDeviceCreateInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const CMPIInstance* ci) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_MemorySystemDeviceModifyInstance( + 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_MemorySystemDeviceDeleteInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_MemorySystemDeviceExecQuery( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* lang, + const char* query) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_MemorySystemDeviceAssociationCleanup( + CMPIAssociationMI* mi, + const CMPIContext* cc, + CMPIBoolean term) +{ + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus LMI_MemorySystemDeviceAssociators( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* resultClass, + const char* role, + const char* resultRole, + const char** properties) +{ + return KDefaultAssociators( + _cb, + mi, + cc, + cr, + cop, + LMI_MemorySystemDevice_ClassName, + assocClass, + resultClass, + role, + resultRole, + properties); +} + +static CMPIStatus LMI_MemorySystemDeviceAssociatorNames( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* resultClass, + const char* role, + const char* resultRole) +{ + return KDefaultAssociatorNames( + _cb, + mi, + cc, + cr, + cop, + LMI_MemorySystemDevice_ClassName, + assocClass, + resultClass, + role, + resultRole); +} + +static CMPIStatus LMI_MemorySystemDeviceReferences( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* role, + const char** properties) +{ + return KDefaultReferences( + _cb, + mi, + cc, + cr, + cop, + LMI_MemorySystemDevice_ClassName, + assocClass, + role, + properties); +} + +static CMPIStatus LMI_MemorySystemDeviceReferenceNames( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* role) +{ + return KDefaultReferenceNames( + _cb, + mi, + cc, + cr, + cop, + LMI_MemorySystemDevice_ClassName, + assocClass, + role); +} + +CMInstanceMIStub( + LMI_MemorySystemDevice, + LMI_MemorySystemDevice, + _cb, + LMI_MemorySystemDeviceInitialize()) + +CMAssociationMIStub( + LMI_MemorySystemDevice, + LMI_MemorySystemDevice, + _cb, + LMI_MemorySystemDeviceInitialize()) + +KONKRET_REGISTRATION( + "root/cimv2", + "LMI_MemorySystemDevice", + "LMI_MemorySystemDevice", + "instance association") diff --git a/src/hardware/LMI_PCIDeviceProvider.c b/src/hardware/LMI_PCIDeviceProvider.c index 2daf0a6..a88f9cd 100644 --- a/src/hardware/LMI_PCIDeviceProvider.c +++ b/src/hardware/LMI_PCIDeviceProvider.c @@ -26,7 +26,6 @@ #include "globals.h" #define NAME_BUF_SIZE 128 -#define PCI_DEVID_STR_SIZE 55 void get_subid(struct pci_dev *d, u16 *subvp, u16 *subdp); CMPIUint16 get_capability(const u16 pci_cap); diff --git a/src/hardware/LMI_PCIDeviceSystemDeviceProvider.c b/src/hardware/LMI_PCIDeviceSystemDeviceProvider.c new file mode 100644 index 0000000..e473ddf --- /dev/null +++ b/src/hardware/LMI_PCIDeviceSystemDeviceProvider.c @@ -0,0 +1,272 @@ +/* + * 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 + */ + +#include +#include +#include "LMI_PCIDeviceSystemDevice.h" +#include "LMI_Hardware.h" +#include "globals.h" + +static const CMPIBroker* _cb; + +static void LMI_PCIDeviceSystemDeviceInitialize() +{ +} + +static CMPIStatus LMI_PCIDeviceSystemDeviceCleanup( + CMPIInstanceMI* mi, + const CMPIContext* cc, + CMPIBoolean term) +{ + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus LMI_PCIDeviceSystemDeviceEnumInstanceNames( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop) +{ + return KDefaultEnumerateInstanceNames( + _cb, mi, cc, cr, cop); +} + +static CMPIStatus LMI_PCIDeviceSystemDeviceEnumInstances( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char** properties) +{ + LMI_PCIDeviceSystemDevice lmi_pci_sys_device; + CIM_ComputerSystemRef cim_cs; + LMI_PCIDeviceRef lmi_dev; + CMPIObjectPath *o; + CMPIStatus st; + const char *ns = KNameSpace(cop); + struct pci_access *acc; + struct pci_dev *dev; + char device_id_str[PCI_DEVID_STR_SIZE]; + + CIM_ComputerSystemRef_Init(&cim_cs, _cb, ns); + CIM_ComputerSystemRef_Set_Name(&cim_cs, get_system_name()); + CIM_ComputerSystemRef_Set_CreationClassName(&cim_cs, + get_system_creation_class_name()); + o = CIM_ComputerSystemRef_ToObjectPath(&cim_cs, &st); + CMSetClassName(o, get_system_creation_class_name()); + + if (!(acc = pci_alloc())) { + KReturn2(_cb, ERR_FAILED, "Can't access the PCI bus."); + } + pci_init(acc); + pci_scan_bus(acc); + + for (dev = acc->devices; dev; dev = dev->next) { + LMI_PCIDeviceSystemDevice_Init(&lmi_pci_sys_device, _cb, ns); + + snprintf(device_id_str, PCI_DEVID_STR_SIZE, "%02x:%02x.%u", + dev->bus, dev->dev, dev->func); + + LMI_PCIDeviceRef_Init(&lmi_dev, _cb, ns); + LMI_PCIDeviceRef_Set_SystemCreationClassName(&lmi_dev, + get_system_creation_class_name()); + LMI_PCIDeviceRef_Set_SystemName(&lmi_dev, get_system_name()); + LMI_PCIDeviceRef_Set_CreationClassName(&lmi_dev, + ORGID "_" PCI_DEVICE_CLASS_NAME); + LMI_PCIDeviceRef_Set_DeviceID(&lmi_dev, device_id_str); + + LMI_PCIDeviceSystemDevice_SetObjectPath_GroupComponent( + &lmi_pci_sys_device, o); + LMI_PCIDeviceSystemDevice_Set_PartComponent(&lmi_pci_sys_device, + &lmi_dev); + + KReturnInstance(cr, lmi_pci_sys_device); + } + + pci_cleanup(acc); + + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus LMI_PCIDeviceSystemDeviceGetInstance( + 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_PCIDeviceSystemDeviceCreateInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const CMPIInstance* ci) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_PCIDeviceSystemDeviceModifyInstance( + 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_PCIDeviceSystemDeviceDeleteInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_PCIDeviceSystemDeviceExecQuery( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* lang, + const char* query) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_PCIDeviceSystemDeviceAssociationCleanup( + CMPIAssociationMI* mi, + const CMPIContext* cc, + CMPIBoolean term) +{ + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus LMI_PCIDeviceSystemDeviceAssociators( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* resultClass, + const char* role, + const char* resultRole, + const char** properties) +{ + return KDefaultAssociators( + _cb, + mi, + cc, + cr, + cop, + LMI_PCIDeviceSystemDevice_ClassName, + assocClass, + resultClass, + role, + resultRole, + properties); +} + +static CMPIStatus LMI_PCIDeviceSystemDeviceAssociatorNames( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* resultClass, + const char* role, + const char* resultRole) +{ + return KDefaultAssociatorNames( + _cb, + mi, + cc, + cr, + cop, + LMI_PCIDeviceSystemDevice_ClassName, + assocClass, + resultClass, + role, + resultRole); +} + +static CMPIStatus LMI_PCIDeviceSystemDeviceReferences( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* role, + const char** properties) +{ + return KDefaultReferences( + _cb, + mi, + cc, + cr, + cop, + LMI_PCIDeviceSystemDevice_ClassName, + assocClass, + role, + properties); +} + +static CMPIStatus LMI_PCIDeviceSystemDeviceReferenceNames( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* role) +{ + return KDefaultReferenceNames( + _cb, + mi, + cc, + cr, + cop, + LMI_PCIDeviceSystemDevice_ClassName, + assocClass, + role); +} + +CMInstanceMIStub( + LMI_PCIDeviceSystemDevice, + LMI_PCIDeviceSystemDevice, + _cb, + LMI_PCIDeviceSystemDeviceInitialize()) + +CMAssociationMIStub( + LMI_PCIDeviceSystemDevice, + LMI_PCIDeviceSystemDevice, + _cb, + LMI_PCIDeviceSystemDeviceInitialize()) + +KONKRET_REGISTRATION( + "root/cimv2", + "LMI_PCIDeviceSystemDevice", + "LMI_PCIDeviceSystemDevice", + "instance association") diff --git a/src/hardware/LMI_ProcessorSystemDeviceProvider.c b/src/hardware/LMI_ProcessorSystemDeviceProvider.c new file mode 100644 index 0000000..327f711 --- /dev/null +++ b/src/hardware/LMI_ProcessorSystemDeviceProvider.c @@ -0,0 +1,268 @@ +/* + * 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 + */ + +#include +#include "LMI_ProcessorSystemDevice.h" +#include "LMI_Hardware.h" +#include "globals.h" +#include "dmidecode.h" + +static const CMPIBroker* _cb; + +static void LMI_ProcessorSystemDeviceInitialize() +{ +} + +static CMPIStatus LMI_ProcessorSystemDeviceCleanup( + CMPIInstanceMI* mi, + const CMPIContext* cc, + CMPIBoolean term) +{ + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus LMI_ProcessorSystemDeviceEnumInstanceNames( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop) +{ + return KDefaultEnumerateInstanceNames( + _cb, mi, cc, cr, cop); +} + +static CMPIStatus LMI_ProcessorSystemDeviceEnumInstances( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char** properties) +{ + LMI_ProcessorSystemDevice lmi_cpu_sys_device; + CIM_ComputerSystemRef cim_cs; + LMI_ProcessorRef lmi_cpu; + CMPIObjectPath *o; + CMPIStatus st; + const char *ns = KNameSpace(cop); + unsigned i; + DmiProcessor *dmi_cpus = NULL; + unsigned dmi_cpus_nb = 0; + + if (dmi_get_processors(&dmi_cpus, &dmi_cpus_nb) != 0 || dmi_cpus_nb < 1) { + goto done; + } + + CIM_ComputerSystemRef_Init(&cim_cs, _cb, ns); + CIM_ComputerSystemRef_Set_Name(&cim_cs, get_system_name()); + CIM_ComputerSystemRef_Set_CreationClassName(&cim_cs, + get_system_creation_class_name()); + o = CIM_ComputerSystemRef_ToObjectPath(&cim_cs, &st); + CMSetClassName(o, get_system_creation_class_name()); + + for (i = 0; i < dmi_cpus_nb; i++) { + LMI_ProcessorSystemDevice_Init(&lmi_cpu_sys_device, _cb, ns); + + LMI_ProcessorRef_Init(&lmi_cpu, _cb, ns); + LMI_ProcessorRef_Set_SystemCreationClassName(&lmi_cpu, + get_system_creation_class_name()); + LMI_ProcessorRef_Set_SystemName(&lmi_cpu, get_system_name()); + LMI_ProcessorRef_Set_CreationClassName(&lmi_cpu, + ORGID "_" CPU_CLASS_NAME); + LMI_ProcessorRef_Set_DeviceID(&lmi_cpu, dmi_cpus[i].id); + + LMI_ProcessorSystemDevice_SetObjectPath_GroupComponent( + &lmi_cpu_sys_device, o); + LMI_ProcessorSystemDevice_Set_PartComponent(&lmi_cpu_sys_device, + &lmi_cpu); + + KReturnInstance(cr, lmi_cpu_sys_device); + } + +done: + dmi_free_processors(&dmi_cpus, &dmi_cpus_nb); + + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus LMI_ProcessorSystemDeviceGetInstance( + 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_ProcessorSystemDeviceCreateInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const CMPIInstance* ci) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_ProcessorSystemDeviceModifyInstance( + 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_ProcessorSystemDeviceDeleteInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_ProcessorSystemDeviceExecQuery( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* lang, + const char* query) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_ProcessorSystemDeviceAssociationCleanup( + CMPIAssociationMI* mi, + const CMPIContext* cc, + CMPIBoolean term) +{ + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus LMI_ProcessorSystemDeviceAssociators( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* resultClass, + const char* role, + const char* resultRole, + const char** properties) +{ + return KDefaultAssociators( + _cb, + mi, + cc, + cr, + cop, + LMI_ProcessorSystemDevice_ClassName, + assocClass, + resultClass, + role, + resultRole, + properties); +} + +static CMPIStatus LMI_ProcessorSystemDeviceAssociatorNames( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* resultClass, + const char* role, + const char* resultRole) +{ + return KDefaultAssociatorNames( + _cb, + mi, + cc, + cr, + cop, + LMI_ProcessorSystemDevice_ClassName, + assocClass, + resultClass, + role, + resultRole); +} + +static CMPIStatus LMI_ProcessorSystemDeviceReferences( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* role, + const char** properties) +{ + return KDefaultReferences( + _cb, + mi, + cc, + cr, + cop, + LMI_ProcessorSystemDevice_ClassName, + assocClass, + role, + properties); +} + +static CMPIStatus LMI_ProcessorSystemDeviceReferenceNames( + CMPIAssociationMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* assocClass, + const char* role) +{ + return KDefaultReferenceNames( + _cb, + mi, + cc, + cr, + cop, + LMI_ProcessorSystemDevice_ClassName, + assocClass, + role); +} + +CMInstanceMIStub( + LMI_ProcessorSystemDevice, + LMI_ProcessorSystemDevice, + _cb, + LMI_ProcessorSystemDeviceInitialize()) + +CMAssociationMIStub( + LMI_ProcessorSystemDevice, + LMI_ProcessorSystemDevice, + _cb, + LMI_ProcessorSystemDeviceInitialize()) + +KONKRET_REGISTRATION( + "root/cimv2", + "LMI_ProcessorSystemDevice", + "LMI_ProcessorSystemDevice", + "instance association") -- cgit