// ===================================================================
// Title:       Storage Devices 2.8
// Filename:    Device28_StorageDevices.mof
// Version:     2.8
// Status:      Final
// Date:        Jan 26, 2004
// ===================================================================
// 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.8 Final:
// CR1233 - SysDev omnibus CR - minor MOF corrections
// 
// 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."), 
       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" },
       ArrayType ( "Indexed" ), 
       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, Description (
             "If TRUE, lock the media. If FALSE release the media.")]
      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 {

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

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

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

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

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

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

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

      [Description (
          "The number of unrecoverable seek operations."), 
       Counter]
   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, Description (
             "The counter to reset."), 
          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 {

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

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

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

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

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

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

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

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


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