// ===================================================================
// Title:       Device Elements 2.7
// Filename:    Device27_Elements.mof
// Version:     2.7.0
// Release:     Final
// Date:        03/31/03
// ===================================================================
// Copyright 1998-2003 Distributed Management Task Force, Inc. (DMTF).
// All rights reserved.  
// DMTF is a not-for-profit association of industry members dedicated 
// to promoting enterprise and systems management and interoperability. 
// DMTF specifications and documents may be reproduced for uses
// consistent with this purpose by members and non-members, 
// provided that correct attribution is given. 
// As DMTF specifications may be revised from time to time, 
// the particular version and release date should always be noted.
//
// Implementation of certain elements of this standard or proposed 
// standard may be subject to third party patent rights, including 
// provisional patent rights (herein "patent rights"). DMTF makes 
// no representations to users of the standard as to the existence 
// of such rights, and is not responsible to recognize, disclose, or
// identify any or all such third party patent right, owners or 
// claimants, nor for any incomplete or inaccurate identification or 
// disclosure of such rights, owners or claimants. DMTF shall have no 
// liability to any party, in any manner or circumstance, under any 
// legal theory whatsoever, for failure to recognize, disclose, or 
// identify any such third party patent rights, or for such party's
// reliance on the standard or incorporation thereof in its product, 
// protocols or testing procedures. DMTF shall have no liability to 
// any party implementing such standard, whether such implementation 
// is foreseeable or not, nor to any patent owner or claimant, and shall 
// have no liability or responsibility for costs or losses incurred if 
// a standard is withdrawn or modified after publication, and shall be
// indemnified and held harmless by any party implementing the 
// standard from any and all claims of infringement by a patent owner 
// for such implementations.
//
// For information about patents held by third-parties which have 
// notified the DMTF that, in their opinion, such patent may relate to 
// or impact implementations of DMTF standards, visit 
// http://www.dmtf.org/about/policies/disclosures.php.
// ===================================================================
// Description: The Device Model extends the management concepts that
//              are related to LogicalDevices. This file defines the 
//              basic concepts that generally apply to all devices, 
//              such as error statistics and connections between devices.
//
//              The object classes below are listed in an order that
//              avoids forward references. Required objects, defined 
//              by other working groups, are omitted.
// ==================================================================
// Change Log for v2.7 Final
// CR942 - Rename DeviceErrorCountData to DeviceErrorData.
// CR970 - Removal of the Experimental qualifier.
//
// Change Log for v2.7
// CR621 - Add PackageDependency
// CR622 - Fix the DMI mapping string to include the attribute number
//         DeviceErrorCounts.CriticalErrorCount, .MajorErrorCount, &
//         .WarningCount
// CR721 - Add DeviceErrorCountData that is part of the new statistics
//         hierarchy
// ================================================================== 

#pragma locale ("en_US")


// ===================================================================
// DeviceConnection
// ===================================================================
[Association, Version ("2.6.0"), Description (
    "The DeviceConnection relationship indicates that two or more "
    "Device are connected together.") ] 
class CIM_DeviceConnection : CIM_Dependency {
   
    [Override ("Antecedent"),
        Description ("A LogicalDevice.") ]
    CIM_LogicalDevice REF Antecedent;
   
    [Override ("Dependent"),
        Description (
            "A second LogicalDevice connected to the Antecedent "
            "Device.") ]
    CIM_LogicalDevice REF Dependent;
   
    [Description (
        "When several bus and/or connection speeds are possible, the "
        "NegotiatedSpeed property defines the one in use between the "
        "Devices.  Speed is specified in bits per second.  If "
        "connection or bus speeds are not negotiated, or if this "
        "information is not available/important to Device management, "
        "the property should be set to 0."), 
        Units ("Bits per Second"),
        MappingStrings {"MIF.DMTF|Bus Port Association|001.2"} ]
    uint64 NegotiatedSpeed;
   
    [Description (
        "When several bus and/or connection data widths are possible, "
        "the NegotiatedDataWidth property defines the one in use "
        "between the Devices.  Data width is specified in bits.  If "
        "data width is not negotiated, or if this information is not "
        "available/important to Device management, the property should "
        "be set to 0."),
        Units ("Bits"),
        MappingStrings {"MIF.DMTF|Bus Port Association|001.3"} ]
    uint32 NegotiatedDataWidth;
};


// ===================================================================
// DeviceIdentity
// ===================================================================
[Association, Version ("2.6.0"), Description (
    "CIM_DeviceIdentity indicates that two LogicalDevices "
    "represent different aspects of the same underlying entity. "
    "This association refines the CIM_LogicalIdentity superclass "
    "by restricting it to the Device level and defining its use in "
    "well understood scenarios. One of these scenarios is to "
    "represent that a Device is both a 'bus' entity and a "
    "'functional' entity. For example, a Device could be both a PCI "
    "Device (or a USB Device), as well as a CIM_Keyboard. The other "
    "scenario is where a Device plays multiple functional roles "
    "that can not be distinguished by their hardware realization "
    "alone. For example, a Fibre Channel adapter might have aspects "
    "of both a NetworkAdapter and a SCSIController.") ]
class CIM_DeviceIdentity: CIM_LogicalIdentity {
   
    [Override ("SystemElement"), 
        Description (
            "SystemElement represents one aspect of the Device.") ]
    CIM_LogicalDevice ref SystemElement;
    
    [Override ("SameElement"), 
        Description (
        "SameElement represents an alternate aspect of "
        "the System entity.") ]
    CIM_LogicalDevice ref SameElement;
};


// ==================================================================
// PackageDependency
// ==================================================================
[Association, Version ("2.6.0"), Description (
    "A LogicalDevice is installed in a Package such as "
    "a Chassis or a Rack, not for a specific Device, but to "
    "function with the Package in general.  This relationship "
    "is described by the PackageDependency association.") ]
class CIM_PackageDependency : CIM_Dependency {
    
    [Override ("Antecedent"), Description (
        "The Logical Device for the Package.")]
    CIM_LogicalDevice REF Antecedent;
    
    [Override ("Dependent"), Description (
        "The PhysicalPackage whose environment is affected.")]
    CIM_PhysicalPackage REF Dependent;
};

 
// ===================================================================
// DeviceSoftware
// ===================================================================
[Association, Version ("2.6.0"), Description (
    "The DeviceSoftware relationship identifies any software that "
    "is associated with a Device - such as drivers, configuration "
    "or application software, or firmware.") ] 
class CIM_DeviceSoftware : CIM_Dependency {

    [Override ("Antecedent"), Description (
        "The SoftwareElement.") ]
    CIM_SoftwareElement REF Antecedent;

    [Override ("Dependent"), Description (
        "The LogicalDevice that requires or uses the software.") ]
    CIM_LogicalDevice REF Dependent;

    [Description (
        "An enumerated integer to indicate the role this software "
        "plays in regards to its associated Device. For example, this "
        "software could be instrumentation (value=5) or firmware (6)."),
        ValueMap {"0", "1", "2", "3", "4", "5", "6", "7", "8"},
        Values {"Unknown", "Other", "Driver", "Configuration Software", 
            "Application Software", "Instrumentation", "Firmware",
            "BIOS", "Boot ROM"},
        ModelCorrespondence {"CIM_DeviceSoftware.PurposeDescription"},
        MappingStrings {"MIF.DMTF|SubComponent Software|001.2"} ]
    uint16 Purpose;

    [Description (
        "A free-form string to provide more information for "
        "the Purpose property, e.g. \"Application Software\"."),
        ModelCorrespondence {"CIM_DeviceSoftware.Purpose"} ] 
    string PurposeDescription;

    [Description (
        "Boolean indicating that the software is 'burned into' or "
        "otherwise located on the hardware of the LogicalDevice.") ]
    boolean LoadedOnDevice; 

    [Description (
        "Boolean indicating whether the software is upgradeable, "
        "when it is LoadedOnDevice. Software that is loaded as "
        "part of the OperatingSystem is typically changeable and "
        "upgradeable. However, when DeviceSoftware is burned into "
        "EEPROM or a chip that Realizes the LogicalDevice, then "
        "it may not be upgradeable. This property indicates the "
        "ability to update and upgrade DeviceSoftware.") ]
    boolean UpgradeableOnDevice;
};


// ==================================================================
// DeviceErrorCounts
// ==================================================================
[Version ("2.7.0"), Description (
    "DeviceErrorCounts is a statistical class containing error-" 
    "related counters for a LogicalDevice. The types of errors " 
    "are as defined by CCITT (Rec X.733) and ISO (IEC 10164-4). "
    "Note that the CIM_DeviceErrorCountData class uses a "
    "simplified naming/identity algorithm as compared to this class. "
    "DeviceErrorCounts is not deprecated since its naming algorithm "
    "is still in use in various implementations.") ] 
class CIM_DeviceErrorCounts : CIM_StatisticalInformation {

    [Propagated ("CIM_LogicalDevice.SystemCreationClassName"), 
        Key, MaxLen (256), Description (
            "The scoping System's CreationClassName. ") ]
    string SystemCreationClassName; 

    [Propagated ("CIM_LogicalDevice.SystemName"), 
        Key, MaxLen (256), Description (
            "The scoping System's Name. ") ]
    string SystemName; 

    [Propagated ("CIM_LogicalDevice.CreationClassName"), 
        Key, MaxLen (256), Description (
            "The scoping Device's CreationClassName. ") ]
    string DeviceCreationClassName; 

    [Propagated ("CIM_LogicalDevice.DeviceID"), 
        Key, MaxLen (64), Description (
            "The scoping Device's ID. ") ]
    string DeviceID; 

    [Override ("Name"), 
        Key, MaxLen (256), Description (
            "The inherited Name serves as part of the key for the " 
            "DeviceErrorCounts instance. The object is scoped by " 
            "the LogicalDevice to which the statistics apply. ") ] 
    string Name; 

    [Description ("Count of the indeterminate errors. "),
        Counter ] 
    uint64 IndeterminateErrorCount; 

    [Description ("Count of the critical errors. "), 
        MappingStrings {"MIF.DMTF|Operational State|006.7"}, 
        Counter ] 
    uint64 CriticalErrorCount; 

    [Description ("Count of the major errors. "), 
        MappingStrings {"MIF.DMTF|Operational State|006.8"}, 
        Counter ] 
    uint64 MajorErrorCount; 

    [Description ("Count of the minor errors. "), 
        Counter ] 
    uint64 MinorErrorCount; 

    [Description ("Count of the warnings. "), 
        MappingStrings {"MIF.DMTF|Operational State|006.9"}, 
        Counter ] 
    uint64 WarningCount; 

    [Description (
        "Method to reset the error and warning counters. The method " 
        "takes one parameter as input - an integer indicating which "
        "counter to reset. For this input parameter, 0 indicates all, "
        "1 indicates a reset of the indeterminate error counter, "
        "2 the critical error counter, 3 the major error counter, "
        "4 the minor error counter and 5 the warning counter. The "
        "method returns 0 if successful, 1 if not supported, and any " 
        "other value if an error occurred. A method is specified so "
        "that the LogicalDevice's instrumentation, which tabulates "
        "the errors and warnings, can also reset its internal "
        "processing and counters. \n"
        "In a subclass, the set of possible return codes could be "
        "specified, using a ValueMap qualifier on the method. The "
        "strings to which the ValueMap contents are 'translated' "
        "may also be specified in the subclass as a Values "
        "array qualifier.") ]
    uint32 ResetCounter (
        [IN, 
            ValueMap {"0", "1", "2", "3", "4", "5"},
            Values {"All", "Indeterminate Error Counter", 
                "Critical Error Counter", "Major Error Counter", 
                "Minor Error Counter", "Warning Counter"} ] 
        uint16 SelectedCounter);
};


// ==================================================================
// ErrorCountersForDevice
// ================================================================== 
[Association, Version ("2.6.0"), Description (
    "ErrorCountersForDevice relates the DeviceErrorCounts class "
    "to the LogicalDevice to which it applies. ") ]
class CIM_ErrorCountersForDevice : CIM_Statistics { 

    [Override ("Stats"), Weak,
        Description (
        "The statistical object - in this case, the error counter "
        "class.") ]
    CIM_DeviceErrorCounts REF Stats; 

    [Override ("Element"), Min (1), Max (1),
        Description ("The Device to which the error counters apply. ") ]
    CIM_LogicalDevice REF Element;
};


// ==================================================================
// DeviceErrorData
// ==================================================================
[Version ("2.7.0"), Description (
    "DeviceErrorData is a statistical class containing error-" 
    "related counters for a LogicalDevice. The types of errors " 
    "are as defined by CCITT (Rec X.733) and ISO (IEC 10164-4)."
    "The element whose statistics are described is associated "
    "using the relationship, ElementStatisticalData. Note that "
    "this class uses a simplified identity/naming algorithm over "
    "CIM_DeviceErrorCounts.") ]
class CIM_DeviceErrorData : CIM_StatisticalData {

    [Description ("Count of the indeterminate errors. "),
        Counter ] 
    uint64 IndeterminateErrorCount; 

    [Description ("Count of the critical errors. "), 
        MappingStrings {"MIF.DMTF|Operational State|006.7"}, 
        Counter ] 
    uint64 CriticalErrorCount; 

    [Description ("Count of the major errors. "), 
        MappingStrings {"MIF.DMTF|Operational State|006.8"}, 
        Counter ] 
    uint64 MajorErrorCount; 

    [Description ("Count of the minor errors. "), 
        Counter ] 
    uint64 MinorErrorCount; 
 
    [Description ("Count of the warnings. "), 
        MappingStrings {"MIF.DMTF|Operational State|006.9"}, 
        Counter ] 
    uint64 WarningCount; 
};


// ===================================================================
// end of file
// ===================================================================
