// ===================================================================
// Title:       Storage Devices 2.7
// Filename:    Device27_StorageDevices.mof
// Version:     2.7.0
// Release:     Final
// Date:        03/31/03
// ===================================================================
// Copyright 1999-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 management of storage devices (floppies, 
//              CD-ROMs, hard drives, etc.).
//
//              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
// CR970 - Removal of the Experimental qualifier
//
// Change Log for v2.7
// CR721 - Add DeviceErrorCountData that is part of the new statistics
//         hierarchy
// ================================================================== 

#pragma locale ("en_US")


// ===================================================================
// MediaAccessDevice
// ===================================================================
[Version ("2.6.0"), Description (
    "A MediaAccessDevice represents the ability to access one or "
    "more media and use this media to store and retrieve data.") ] 
class CIM_MediaAccessDevice : CIM_LogicalDevice {

    [Description (
        "Capabilities of the MediaAccessDevice. For example, the " 
        "Device may support \"Random Access\", removeable media and "
        "\"Automatic Cleaning\". In this case, the values 3, 7 and 9 "
        "would be written to the array. \n"
        "Several of the enumerated values require some explanation: "
        "1) Value 11, Supports Dual Sided Media, distinguishes a "
        "Device that can access both sides of dual sided Media, from "
        "a Device that reads only a single side and requires the "
        "Media to be flipped; and, 2) Value 12, Predismount Eject "
        "Not Required, indicates that Media does not have to be "
        "explicitly ejected from the Device before being accessed "
        "by a PickerElement."), 
        ArrayType ("Indexed"),
        ValueMap {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", 
            "10", "11", "12"},
        Values {"Unknown", "Other", "Sequential Access", 
            "Random Access", "Supports Writing", "Encryption",
            "Compression", "Supports Removeable Media",
            "Manual Cleaning", "Automatic Cleaning", 
            // 10
            "SMART Notification", "Supports Dual Sided Media", 
            "Predismount Eject Not Required"}, 
        MappingStrings {"MIF.DMTF|Storage Devices|001.9", 
            "MIF.DMTF|Storage Devices|001.11", 
            "MIF.DMTF|Storage Devices|001.12",
            "MIF.DMTF|Disks|003.7", "MIF.DMTF|Host Disk|001.2",  
            "MIF.DMTF|Host Disk|001.4"}, 
        ModelCorrespondence {
            "CIM_MediaAccessDevice.CapabilityDescriptions"} ]
    uint16 Capabilities[];

    [Description (
        "An array of free-form strings providing more detailed "
        "explanations for any of the AccessDevice features indicated "
        "in the Capabilities array. Note, each entry of this array "
        "is related to the entry in the Capabilities array that "
        "is located at the same index."),
        ArrayType ("Indexed"),
        ModelCorrespondence {"CIM_MediaAccessDevice.Capabilities"} ]
    string CapabilityDescriptions[];

    [Description (
        "ErrorMethodology is a free-form string describing "
        "the type(s) of error detection and correction supported "
        "by this Device.") ]
    string ErrorMethodology;

    [Description (      
        "A free form string indicating the algorithm or tool used "
        "by the device to support compression. "
        "If it is not possible or not desired to describe the "
        "compression scheme (perhaps because it is not known), "
        "recommend using the following words: \"Unknown\" to "
        "represent that it is not known whether the device supports "
        "compression capabilities or not, \"Compressed\" to represent "
        "that the device supports compression capabilities but either "
        "its compression scheme is not known or not disclosed, and "
        "\"Not Compressed\" to represent that the devices does not "
        "support compression capabilities.") ]
    string CompressionMethod;

    [Description (
        "When the MediaAccessDevice supports multiple individual "
        "Media, this property defines the maximum number which can "
        "be supported or inserted.") ]
    uint32 NumberOfMediaSupported;

    [Description (
        "Maximum size, in KBytes, of media supported by this Device. "
        "KBytes is interpreted as the number of bytes multiplied by "
        "1000 (NOT the number of bytes multiplied by 1024)."),
        MappingStrings {"MIF.DMTF|Sequential Access Devices|001.2", 
            "MIF.DMTF|Host Disk|001.5"} ]
    uint64 MaxMediaSize;

    [Description ("Default block size, in bytes, for this Device."),
        Units ("Bytes") ]
    uint64 DefaultBlockSize;

    [Description (
        "Maximum block size, in bytes, for media accessed by this "
        "Device."),
        Units ("Bytes") ]
    uint64 MaxBlockSize;

    [Description (
        "Minimum block size, in bytes, for media accessed by this "
        "Device."),
        Units ("Bytes") ]
    uint64 MinBlockSize;

    [Description (
        "Boolean indicating that the MediaAccessDevice needs cleaning. " 
        "Whether manual or automatic cleaning is possible is indicated "
        "in the Capabilities array property.") ]
    boolean NeedsCleaning;

    [Description (
        "True indicates that the media is locked in the Device "
        "and can not be ejected. For non-removeable Devices, this "
        "value should be true.") ]
    boolean MediaIsLocked;

    [Description (
        "An enumeration indicating the operational security defined "
        "for the MediaAccessDevice. For example, information that "
        "the Device is \"Read Only\" (value=4) or \"Boot Bypass\" "
        "(value=6) can be described using this property."), 
        ValueMap {"1", "2", "3", "4", "5", "6", "7"}, 
        Values {"Other", "Unknown", "None", "Read Only", "Locked Out",
            "Boot Bypass", "Boot Bypass and Read Only"}, 
        MappingStrings {"MIF.DMTF|Disks|003.22"} ]
    uint16 Security;

    [Description (
        "The date and time on which the Device was last cleaned.") ]
    datetime LastCleaned;

    [Description (
        "Time in milliseconds to move from the first location on "
        "the Media to the location that is furthest with respect to "
        "time. For a DiskDrive, this represents full seek + full "
        "rotational delay. For TapeDrives, this represents a search "
        "from the beginning of the tape to the most physically "
        "distant point. (The end of a tape may be at its most "
        "physically distant point, but this is not necessarily "
        "true.)"), 
        Units ("MilliSeconds") ]
    uint64 MaxAccessTime;

    [Description (
        "The sustained data transfer rate in KB/sec that the "
        "Device can read from and write to a Media. This is a "
        "sustained, raw data rate. Maximum rates or rates "
        "assuming compression should not be reported in this "
        "property."), 
        Units ("KiloBytes per Second") ]
    uint32 UncompressedDataRate;

    [Description (
        "Time in milliseconds from 'load' to being able to read "
        "or write a Media. For example, for DiskDrives, this is "
        "the interval between a disk not spinning to the disk "
        "reporting that it is ready for read/write (ie, the disk "
        "spinning at nominal speeds). For TapeDrives, this is "
        "the time from a Media being injected to reporting that "
        "it is ready for an application. This is usually at the "
        "tape's BOT area."), 
        Units ("MilliSeconds") ]
    uint64 LoadTime;

    [Description (
        "Time in milliseconds from being able to read or write a "
        "Media to its 'unload'. For example, for DiskDrives, "
        "this is the interval between a disk spinning at nominal "
        "speeds and a disk not spinning. For TapeDrives, this is "
        "the time for a Media to go from its BOT to being fully "
        "ejected and accessible to a PickerElement or human "
        "operator."), 
        Units ("MilliSeconds") ]
    uint64 UnloadTime;

    [Description (
        "For a MediaAccessDevice that supports removable Media, "
        "the number of times that Media have been mounted for "
        "data transfer or to clean the Device. For Devices "
        "accessing nonremovable Media, such as hard disks, "
        "this property is not applicable and should be set to 0."),
        Counter ]
    uint64 MountCount;

    [Description (
        "For a MediaAccessDevice that supports removable Media, "
        "the most recent date and time that Media was mounted "
        "on the Device. For Devices accessing nonremovable Media, "
        "such as hard disks, this property has no meaning and is "
        "not applicable.") ]
    datetime TimeOfLastMount;

    [Description (
        "For a MediaAccessDevice that supports removable Media, "
        "the total time (in seconds) that Media have been mounted "
        "for data transfer or to clean the Device. For Devices "
        "accessing nonremovable Media, such as hard disks, "
        "this property is not applicable and should be set to 0.") ]
    uint64 TotalMountTime;

    [Description (
        "Defines 'Units' relative to its use in the property, "
        "MaxUnitsBeforeCleaning. This describes the criteria used "
        "to determine when the MediaAccessDevice should be cleaned."),
        ModelCorrespondence {
            "CIM_MediaAccessDevice.MaxUnitsBeforeCleaning",
            "CIM_MediaAccessDevice.UnitsUsed"} ]
    string UnitsDescription;
    
    [Description (
        "An unsigned integer indicating the maximum 'units' "
        "that can be used, with respect to the AccessDevice, "
        "before the Device should be cleaned. The property, "
        "UnitsDescription, defines how 'units' should be "
        "interpreted."),
        ModelCorrespondence {
            "CIM_MediaAccessDevice.UnitsDescription"} ]
    uint64 MaxUnitsBeforeCleaning;

    [Description (
        "An unsigned integer indicating the currently used " 
        "'units' of the AccessDevice, helpful to describe "
        "when the Device may require cleaning. The property, "
        "UnitsDescription, defines how 'units' should be "
        "interpreted."),
        Gauge,
        ModelCorrespondence {
            "CIM_MediaAccessDevice.UnitsDescription",
            "CIM_MediaAccessDevice.MaxUnitsBeforeCleaning"} ]
    uint64 UnitsUsed;

    [Description (
        "Method to lock and unlock the media in a removeable Access"
        "Device. The method takes one parameter as input - a boolean "
        "indicating whether to lock or unlock. TRUE indicates that "
        "the media should be locked in the Device, FALSE indicates "
        "that the media should be unlocked. The method returns 0 if "
        "successful, 1 if not supported, and any other value if an "
        "error occurred. The set of possible return codes should be "
        "specified in a ValueMap qualifier on the method. The strings "
        "to which the ValueMap contents are 'translated' should be "
        "specified as a Values array qualifier on the method.") ]
    uint32 LockMedia (
        [IN] 
        boolean Lock);
};


// ===================================================================
// DiskDrive
// ===================================================================
[Version ("2.6.0"), Description (
    "Capabilities and managment of a DiskDrive, a subtype of "
    "MediaAccessDevice.") ] 
class CIM_DiskDrive : CIM_MediaAccessDevice {
};


// ===================================================================
// DisketteDrive
// ===================================================================
[Version ("2.6.0"), Description (
    "Capabilities and managment of a DisketteDrive, a subtype of "
    "MediaAccessDevice.") ] 
class CIM_DisketteDrive : CIM_MediaAccessDevice {
};


// ===================================================================
// CDROMDrive
// ===================================================================
[Version ("2.6.0"), Description (
    "Capabilities and managment of a CDROMDrive, a subtype of "
    "MediaAccessDevice.") ] 
class CIM_CDROMDrive : CIM_MediaAccessDevice {
};


// ===================================================================
// DVDDrive 
// ===================================================================
[Version ("2.6.0"), Description (
    "Capabilities and management of a DVDDrive, a subtype of "
    "MediaAccessDevice.") ]
class CIM_DVDDrive : CIM_MediaAccessDevice {

    [Description (
        "The CD and DVD formats that are supported by this Device. "
        "For example, the Drive may support \"CD-ROM\" and "
        "\"DVD-RAM\". In this case, the values 16 and 24 would be "
        "written to the array. This property's values align with "
        "those defined in PhysicalMedia.MediaType."), 
        ValueMap {"0", "1", "16", "17", "18", "19", "22", "23", "24", 
            "25", "26", "27", "33", "34", "35", "36", "37", "38", 
            "39", "40", "41", "42"}, 
        Values {"Unknown", "Other", "CD-ROM", "CD-ROM/XA", 
            "CD-I", "CD Recordable", "DVD", "DVD-RW+", 
            "DVD-RAM", "DVD-ROM", "DVD-Video", "Divx", "CD-RW", 
            "CD-DA", "CD+", "DVD Recordable", "DVD-RW", 
            "DVD-Audio", "DVD-5", "DVD-9", "DVD-10", "DVD-18"},
        ModelCorrespondence {"CIM_PhysicalMedia.MediaType"} ]
    uint16 FormatsSupported[];
};


// ===================================================================
// WORMDrive
// ===================================================================
[Version ("2.6.0"), Description (
    "Capabilities and managment of a WORMDrive, a subtype of "
    "MediaAccessDevice.") ] 
class CIM_WORMDrive : CIM_MediaAccessDevice {
};


// ===================================================================
// MagnetoOpticalDrive
// ===================================================================
[Version ("2.6.0"), Description (
    "Capabilities and managment of a MagnetoOpticalDrive, a "
    "subtype of MediaAccessDevice.") ] 
class CIM_MagnetoOpticalDrive : CIM_MediaAccessDevice {
};


// ===================================================================
// TapeDrive
// ===================================================================
[Version ("2.6.0"), Description (
    "Capabilities and managment of a TapeDrive, a subtype of "
    "MediaAccessDevice.") ] 
class CIM_TapeDrive : CIM_MediaAccessDevice {

    [Description (
        "EOTWarningZoneSize indicates the size, in bytes, of the "
        "area designated as 'end of tape'. Access in this area "
        "generates an 'end of tape' warning."),
        Units ("Bytes") ]
    uint32 EOTWarningZoneSize;

    [Description (
        "Maximum partition count for the TapeDrive.") ]
    uint32 MaxPartitionCount;

    [Description (
        "Padding indicates the number of bytes inserted between "
        "blocks on a tape Media."),
        Units ("Bytes") ]
    uint32 Padding;

    [Description (
        "Time in milliseconds to move from the most physically distant "
        "point on the tape to the beginning."), 
        Units ("MilliSeconds") ]
    uint64 MaxRewindTime;
};


// ===================================================================
// MediaAccessStatInfo
// ===================================================================
[Version ("2.6.0"), Description (
    "Statistics related to reading and writing at a specific "
    "MediaAccessDevice, or for a specific StorageExtent. Although "
    "the same class is used to represent this data, at the instance "
    "level the object holds information for the MediaAccessDevice "
    "(independent of the StorageExtent), OR for the Extent "
    "(independent of its AccessDevice). Note that this class "
    "models the same properties as MediaAccessStatData. The latter, "
    "however, uses the simplified key mechanisms of the "
    "StatisticalData class.") ]
class CIM_MediaAccessStatInfo : CIM_DeviceStatisticalInformation {

    [Counter, Description ("The number of attempted read operations.") ]
    uint64 ReadOperations;

    [Counter, 
         Description ("The number of unrecoverable read operations.") ]
    uint64 UnrecoverableReadOperations;

    [Counter, 
        Description ("The number of attempted write operations.") ]
    uint64 WriteOperations;

    [Counter, 
        Description ("The number of unrecoverable write operations.") ]
    uint64 UnrecoverableWriteOperations;

    [Counter, Description ("The number of recovered read operations.") ]
    uint64 RecoveredReadOperations;

    [Counter, Description ("The number of recovered write operations.") ]
    uint64 RecoveredWriteOperations;

    [Counter, Description ("The number of recovered seek operations.") ]
    uint64 RecoveredSeekOperations;

    [Counter, 
        Description ("The number of unrecoverable seek operations.") ]
    uint64 UnrecoverableSeekOperations;

    [Description (
        "Method to reset the statistical counters. The method takes "
        "one parameter as input - an integer indicating which counter "
        "to reset. For this input parameter, 0 indicates all, 1-2 and "
        "5 reset the 'read operation'-related counters, 3-4 and 6 "
        "reset the 'write operation'-related counters, and 7-8 reset "
        "the seek-related counters. 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 Device's "
        "instrumentation can also reset its internal processing and "
        "counters. \n"
        "In a subclass, the set of possible return codes should be "
        "specified in a ValueMap qualifier on the method. The strings "
        "to which the ValueMap contents are 'translated' can be "
        "specified as a Values array qualifier.") ]
    uint32 ResetCounter (
        [IN, 
            ValueMap {"0", "1", "2", "3", "4", "5", "6", "7", "8"},
            Values {"All", "Read Operations", 
                "Unrecoverable Read Operations", "Write Operations", 
                "Unrecoverable Write Operations", 
                "Recovered Read Operations", 
                "Recovered Write Operations", "Recovered Seeks", 
                "Unrecoverable Seeks"} ] 
        uint16 SelectedCounter);
};


// ===================================================================
// MediaAccessStatData
// ===================================================================
[Version ("2.7.0"), Description (
    "Statistics related to reading and writing at a specific "
    "MediaAccessDevice, or for a specific StorageExtent. The same "
    "class is used to represent this data - whether for the "
    "MediaAccessDevice (independent of the StorageExtent), OR for "
    "the Extent (independent of its AccessDevice). The element "
    "whose statistics are described is associated using the "
    "relationship, ElementStatisticalData. Note that this class "
    "models the same properties as MediaAccessStatInfo. This class, "
    "however, uses the simplified key mechanisms of its "
    "superclass, StatisticalData.") ]
class CIM_MediaAccessStatData : CIM_StatisticalData {

    [Counter, Description ("The number of attempted read operations.") ]
    uint64 ReadOperations;

    [Counter, 
        Description ("The number of unrecoverable read operations.") ]
    uint64 UnrecoverableReadOperations;

    [Counter, Description ("The number of attempted write operations.") ]
    uint64 WriteOperations;

    [Counter, 
        Description ("The number of unrecoverable write operations.") ]
    uint64 UnrecoverableWriteOperations;

    [Counter, Description ("The number of recovered read operations.") ]
    uint64 RecoveredReadOperations;

    [Counter, Description ("The number of recovered write operations.") ]
    uint64 RecoveredWriteOperations;

    [Counter, Description ("The number of recovered seek operations.") ]
    uint64 RecoveredSeekOperations;

    [Counter, 
        Description ("The number of unrecoverable seek operations.") ]
    uint64 UnrecoverableSeekOperations;
};


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