// ===================================================================
// Title:  System Resources
// $State: Exp $
// $Date: 2004/08/15 05:55:42 $
// $Source: /cvsroot/wbemservices/open/mof/dmtf/2.9/System_SystemResources.mof,v $
// $Revision: 1.1 $
// ===================================================================
//#pragma inLine ("Includes/copyright.inc")
// Copyright 1998-2004 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.
//#pragma inLine
// ===================================================================
// Description: The System Model defines system related management
//              concepts. This file defines the specific concepts for
//              identifying and managing system hardware and
//              software resources.
// 
//              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
// CR969 - Remove the experimental qualifier
// 
// Change Log for v2.7
// CR757 - Change the subclassing of SystemResource from LogicalElement
//         to EnabledLogicalElement
// CR769 - Update the Decription of SystemResource
//       - Add property SystemResource.ImplementationInfo
//       - Add ResourceOfSystem
//       - Change subclassing of ComputerSystemResource to Resource
//         OfSystem
// CR771 - Add the Composition qualifer to ComputerSystemResource,
//         CIM_ComputerSystemIRQ, CIM_ComputerSystemMappedIO,
//         and CIM_ComputerSystemDMA
// ==================================================================

#pragma locale ("en_US")


// ===================================================================
// SystemResource
// ===================================================================
   [Abstract, Version ( "2.7.0" ), Description (
       "An entity managed by BIOS, an OperatingSystem or other "
       "software, which is available for use by application software "
       "and/or LogicalDevices. Resources are individually identified "
       "and allocated entities, that are assignable, reservable, "
       "counted/ tracked, releasable, reset-able, etc. Examples of "
       "software Resources are message queues, shared memory segments "
       "(identified by a key value), and named pipes, while examples "
       "of hardware Resources (in an x86 environment) are IRQs, DMA "
       "channels and memory mapped I/O.")]
class CIM_SystemResource : CIM_EnabledLogicalElement {

      [Description (
          "Boolean indicating whether the Resource can be shared.")]
   boolean Shareable;

      [Description (
          "Indicates whether the Resource is implemented in hardware, "
          "software or both."), 
       ValueMap { "0", "2", "3", "4" }, 
       Values { "Unknown", "Hardware Only", "Software Only",
          "Hardware and Software" }]
   uint16 ImplementationInfo;
};


// ===================================================================
// IRQ
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "Personal computer architecture IRQ.")]
class CIM_IRQ : CIM_SystemResource {

      [Key, Propagated ( "CIM_ComputerSystem.CreationClassName" ), 
       Description (
          "The scoping ComputerSystem's CreationClassName."), 
       MaxLen ( 256 )]
   string CSCreationClassName;

      [Key, Propagated ( "CIM_ComputerSystem.Name" ), Description (
          "The scoping ComputerSystem's Name."), 
       MaxLen ( 256 )]
   string CSName;

      [Key, Description (
          "CreationClassName indicates the name of the class or the "
          "subclass used in the creation of an instance. When used "
          "with the other key properties of this class, this property "
          "allows all instances of this class and its subclasses to be "
          "uniquely identified."), 
       MaxLen ( 256 )]
   string CreationClassName;

      [Key, Description (
          "A part of the object's key value, IRQ Number."), 
       MappingStrings { "MIF.DMTF|IRQ|002.1" }]
   uint32 IRQNumber;

      [Description (
          "Availability of the IRQ."), 
       ValueMap { "1", "2", "3", "4", "5" }, 
       Values { "Other", "Unknown", "Available",
          "In Use/Not Available", "In Use and Available/Shareable" }, 
       MappingStrings { "MIF.DMTF|IRQ|002.2" }]
   uint16 Availability;

      [Description (
          "IRQ trigger type indicating whether edge (value=4) or level "
          "triggered (value=3) interrupts occur. Also, \"Other\" (1) "
          "and \"Unknown\" (2) may be defined."), 
       ValueMap { "1", "2", "3", "4" }, 
       Values { "Other", "Unknown", "Level", "Edge" }, 
       MappingStrings { "MIF.DMTF|IRQ|002.3",
          "MIF.DMTF|System Resource IRQ Info|001.2" }]
   uint16 TriggerType;

      [Description (
          "IRQ trigger level indicating whether the interrupt is "
          "triggered by the hardware signal going high (value=4) or "
          "low (value=3). Also, \"Other\" (1) and \"Unknown\" (2) may "
          "be defined."), 
       ValueMap { "1", "2", "3", "4" }, 
       Values { "Other", "Unknown", "Active Low", "Active High" }, 
       MappingStrings { "MIF.DMTF|System Resource IRQ Info|001.3" }]
   uint16 TriggerLevel;

      [Override ( "Shareable" ), Description (
          "Boolean indicating whether the IRQ can be shared."), 
       MappingStrings { "MIF.DMTF|IRQ|002.4" }]
   boolean Shareable;

      [Description (
          "The Hardware property indicates whether the interrupt is "
          "hardware or software based. (If TRUE, the interrupt is "
          "hardware based.) On a personal computer, a hardware IRQ is "
          "a physical wire to a programmable interrupt controller "
          "(PIC) chip, through which the CPU can be notified of time "
          "critical events. Some IRQ lines are reserved for standard "
          "Devices such as the keyboard, floppy disk drives, and the "
          "system clock. A software interrupt is a programmatic "
          "mechanism to allow an application to get the attention of "
          "the Processor.")]
   boolean Hardware;
};

// ===================================================================
// MemoryMappedIO
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "Personal Computer architecture Memory Mapped I/O. This class "
       "addresses both memory and port I/O resources. The property, "
       "MappedResource, defines whether memory or I/O is mapped (and "
       "for I/O whether the mapping is to a memory or a port space).")]
class CIM_MemoryMappedIO : CIM_SystemResource {

      [Key, Propagated ( "CIM_ComputerSystem.CreationClassName" ), 
       Description (
          "The scoping ComputerSystem's CreationClassName."), 
       MaxLen ( 256 )]
   string CSCreationClassName;

      [Key, Propagated ( "CIM_ComputerSystem.Name" ), Description (
          "The scoping ComputerSystem's Name."), 
       MaxLen ( 256 )]
   string CSName;

      [Key, Description (
          "CreationClassName indicates the name of the class or the "
          "subclass used in the creation of an instance. When used "
          "with the other key properties of this class, this property "
          "allows all instances of this class and its subclasses to be "
          "uniquely identified."), 
       MaxLen ( 256 )]
   string CreationClassName;

      [Key, Description (
          "A part of the object's key value, the starting address of "
          "memory mapped I/O."), 
       MappingStrings { "MIF.DMTF|Memory Mapped I/O|001.1" }]
   uint64 StartingAddress;

      [Description (
          "Ending address of memory mapped I/O."), 
       MappingStrings { "MIF.DMTF|Memory Mapped I/O|001.2" }]
   uint64 EndingAddress;

      [Description (
          "Type of memory mapped I/O. MappedResource defines whether "
          "memory or I/O is mapped, and for I/O, whether the mapping "
          "is to a memory or a port space."), 
       ValueMap { "0", "1", "2", "3" }, 
       Values { "Other", "Mapped Memory", "I/O Mapped to Memory Space",
          "I/O Mapped to Port Space" }]
   uint16 MappedResource;
};


// ===================================================================
// MemoryResource
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "Since the MemoryMappedIO class applies to memory AND port "
       "resources, there is the potential for key conflict. For "
       "example, both a memory resource and a port resource may be "
       "located at address 0. Since StartingAddress is the "
       "distinguishing key of MemoryMappedIO, two instances would be "
       "created with the same key. This is prevented by defining "
       "memory and port resource subclasses of MemoryMappedIO, and "
       "allowing the CreationClassName key property to distinguish "
       "between them and force uniqueness in their keys.")]
class CIM_MemoryResource : CIM_MemoryMappedIO {
};


// ===================================================================
// PortResource
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "Since the MemoryMappedIO class applies to memory AND port "
       "resources, there is the potential for key conflict. For "
       "example, both a memory resource and a port resource may be "
       "located at address 0. Since StartingAddress is the "
       "distinguishing key of MemoryMappedIO, two instances would be "
       "created with the same key. This is prevented by defining "
       "memory and port resource subclasses of MemoryMappedIO, and "
       "allowing the CreationClassName key property to distinguish "
       "between them and force uniqueness in their keys.")]
class CIM_PortResource : CIM_MemoryMappedIO {
};


// ===================================================================
// DMA
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "Personal computer architecture DMA.")]
class CIM_DMA : CIM_SystemResource {

      [Key, Propagated ( "CIM_ComputerSystem.CreationClassName" ), 
       Description (
          "The scoping ComputerSystem's CreationClassName."), 
       MaxLen ( 256 )]
   string CSCreationClassName;

      [Key, Propagated ( "CIM_ComputerSystem.Name" ), Description (
          "The scoping ComputerSystem's Name."), 
       MaxLen ( 256 )]
   string CSName;

      [Key, Description (
          "CreationClassName indicates the name of the class or the "
          "subclass used in the creation of an instance. When used "
          "with the other key properties of this class, this property "
          "allows all instances of this class and its subclasses to be "
          "uniquely identified."), 
       MaxLen ( 256 )]
   string CreationClassName;

      [Key, Description (
          "A part of the object's key value, the DMA Channel number."), 
       MappingStrings { "MIF.DMTF|DMA|001.1" }]
   uint32 DMAChannel;

      [Description (
          "Availability of the DMA."), 
       ValueMap { "1", "2", "3", "4", "5" }, 
       Values { "Other", "Unknown", "Available",
          "In Use/Not Available", "In Use and Available/Shareable" }, 
       MappingStrings { "MIF.DMTF|DMA|001.2" }]
   uint16 Availability;

      [Description (
          "Indication that the DMA Channel supports burst mode."), 
       MappingStrings { "MIF.DMTF|DMA|001.3" }]
   boolean BurstMode;

      [Description (
          "An array indicating all the transfer widths (in bits) "
          "supported by this DMA Channel. Permissible values are 8, "
          "16, 32, 64 or 128 bits. If unknown, enter 0."), 
       Units ( "Bits" ), 
       ValueMap { "0", "8", "16", "32", "64", "128" }, 
       MappingStrings { "MIF.DMTF|System Resource DMA Info|001.2" }]
   uint16 TransferWidths[];

      [Description (
          "An integer indicating the DMA Channel address size in bits. "
          "Permissible values are 8, 16, 32 or 64 bits. If unknown, "
          "enter 0."), 
       Units ( "Bits" ), 
       ValueMap { "0", "8", "16", "32", "64" }, 
       MappingStrings { "MIF.DMTF|System Resource DMA Info|001.3" }]
   uint16 AddressSize;

      [Description (
          "The maximum number of bytes that can be transferred by this "
          "DMA Channel. If unknown, enter 0."), 
       Units ( "Bytes" ), 
       MappingStrings { "MIF.DMTF|System Resource DMA Info|001.4" }]
   uint32 MaxTransferSize;

      [Description (
          "Indicates whether DMA may execute in 'count by byte' mode "
          "(value=4) or not (value=3). Also, \"Other\" (1) and "
          "\"Unknown\" (2) may be defined."), 
       ValueMap { "1", "2", "3", "4" }, 
       Values { "Other", "Unknown",
          "Not execute in 'count by byte' mode",
          "Execute in 'count by byte' mode" }, 
       MappingStrings { "MIF.DMTF|System Resource DMA Info|001.7" }]
   uint16 ByteMode;

      [Description (
          "Indicates whether DMA may execute in 'count by word' mode "
          "(value=4) or not (value=3). Also, \"Other\" (1) and "
          "\"Unknown\" (2) may be defined."), 
       ValueMap { "1", "2", "3", "4" }, 
       Values { "Other", "Unknown",
          "Not execute in 'count by word' mode",
          "Execute in 'count by word' mode" }, 
       MappingStrings { "MIF.DMTF|System Resource DMA Info|001.8" }]
   uint16 WordMode;

      [Description (
          "DMA channel timing. For example, \"Type A\" (value =4) or "
          "\"Type F\" (6) could be specified."), 
       ValueMap { "1", "2", "3", "4", "5", "6" }, 
       Values { "Other", "Unknown", "ISA Compatible", "Type A",
          "Type B", "Type F" }, 
       MappingStrings { "MIF.DMTF|System Resource DMA Info|001.9" }]
   uint16 ChannelTiming;

      [Description (
          "Indicates whether C type (burst) timing is supported "
          "(value=5) or not (value=4). Also, \"Other\" (1), "
          "\"Unknown\" (2) and \"ISA Compatible\" (3) are defined."), 
       ValueMap { "1", "2", "3", "4", "5" }, 
       Values { "Other", "Unknown", "ISA Compatible", "Not Supported",
          "Supported" }, 
       MappingStrings { "MIF.DMTF|System Resource DMA Info|001.10" }]
   uint16 TypeCTiming;
};


// ===================================================================
// ResourceOfSystem
// ===================================================================
   [Association, Aggregation, Composition, Version ( "2.7.2" ), 
    Description (
       "An association between a System and a SystemResource that "
       "exists and is allocated in the context of the System.")]
class CIM_ResourceOfSystem : CIM_SystemComponent {

      [Aggregate, Override ( "GroupComponent" ), Min ( 1 ), Max ( 1 ), 
       Description (
          "The System in whose context the Resource exists and is "
          "allocated.")]
   CIM_System REF GroupComponent;

      [Override ( "PartComponent" ), Description (
          "A Resource of the System.")]
   CIM_SystemResource REF PartComponent;
};


// ===================================================================
// ComputerSystemResource
// ===================================================================
   [Association, Aggregation, Composition, Version ( "2.7.0" ), 
    Description (
       "An association between a ComputerSystem and the System "
       "Resources available on it.")]
class CIM_ComputerSystemResource : CIM_ResourceOfSystem {

      [Aggregate, Override ( "GroupComponent" ), Min ( 1 ), Max ( 1 ), 
       Description (
          "The ComputerSystem.")]
   CIM_ComputerSystem REF GroupComponent;

      [Override ( "PartComponent" ), Description (
          "A SystemResource of the ComputerSystem.")]
   CIM_SystemResource REF PartComponent;
};


// ===================================================================
// ComputerSystemIRQ
// ===================================================================
   [Association, Aggregation, Composition, Version ( "2.7.0" ), 
    Description (
       "An association between a ComputerSystem and the IRQs available "
       "on it.")]
class CIM_ComputerSystemIRQ : CIM_ComputerSystemResource {

      [Aggregate, Override ( "GroupComponent" ), Min ( 1 ), Max ( 1 ), 
       Description (
          "The ComputerSystem.")]
   CIM_ComputerSystem REF GroupComponent;

      [Override ( "PartComponent" ), Weak, Description (
          "An IRQ of the ComputerSystem.")]
   CIM_IRQ REF PartComponent;
};


// ===================================================================
// ComputerSystemMappedIO
// ===================================================================
   [Association, Aggregation, Composition, Version ( "2.7.0" ), 
    Description (
       "An association between a ComputerSystem and the Memory Mapped "
       "I/O ports available on it.")]
class CIM_ComputerSystemMappedIO : CIM_ComputerSystemResource {

      [Aggregate, Override ( "GroupComponent" ), Min ( 1 ), Max ( 1 ), 
       Description (
          "The ComputerSystem.")]
   CIM_ComputerSystem REF GroupComponent;

      [Override ( "PartComponent" ), Weak, Description (
          "A memory mapped I/O port of the ComputerSystem.")]
   CIM_MemoryMappedIO REF PartComponent;
};


// ===================================================================
// ComputerSystemDMA
// ===================================================================
   [Association, Aggregation, Composition, Version ( "2.7.0" ), 
    Description (
       "An association between a ComputerSystem and the DMA channels "
       "available on it.")]
class CIM_ComputerSystemDMA : CIM_ComputerSystemResource {

      [Aggregate, Override ( "GroupComponent" ), Min ( 1 ), Max ( 1 ), 
       Description (
          "The ComputerSystem.")]
   CIM_ComputerSystem REF GroupComponent;

      [Override ( "PartComponent" ), Weak, Description (
          "A DMA channel of the ComputerSystem.")]
   CIM_DMA REF PartComponent;
};


// ===================================================================
// AllocatedResource
// ===================================================================
   [Association, Version ( "2.6.0" ), Description (
       "An association between LogicalDevices and SystemResources, "
       "indicating that the Resource is assigned to the Device.")]
class CIM_AllocatedResource : CIM_Dependency {

      [Override ( "Antecedent" ), Description (
          "The Resource.")]
   CIM_SystemResource REF Antecedent;

      [Override ( "Dependent" ), Description (
          "The LogicalDevice to which the Resource is assigned.")]
   CIM_LogicalDevice REF Dependent;
};


// ===================================================================
// AllocatedDMA
// ===================================================================
   [Association, Version ( "2.6.0" ), Description (
       "An association between a LogicalDevice and a DMA System "
       "Resource indicating that the DMA Channel is assigned to the "
       "Device.")]
class CIM_AllocatedDMA : CIM_AllocatedResource {

      [Override ( "Antecedent" ), Description (
          "The DMA Channel.")]
   CIM_DMA REF Antecedent;

      [Override ( "Dependent" ), Description (
          "The LogicalDevice to which the Resource is assigned.")]
   CIM_LogicalDevice REF Dependent;

      [Description (
          "Boolean indicating whether the LogicalDevice can act as a "
          "bus master on the DMA Channel."), 
       MappingStrings { "MIF.DMTF|System Resource DMA Info|001.6" }]
   boolean BusMaster;
};


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