// Copyright (c) 2005 DMTF.  All rights reserved.
   [Version ( "2.10.0" ), 
    UMLPackagePath ( "CIM::Device::Processor" ), 
    Description ( 
       "CIM_Watchdog is a timer that is implemented in the system "
       "hardware. It allows the hardware to monitor the state of the "
       "Operating System, BIOS, or a software component that is "
       "installed on the System. If the monitored component fails to "
       "re-arm the timer before its expiration, the hardware assumes "
       "that the System is in a critical state, and could reset the "
       "ComputerSystem. This feature can also be used as an "
       "application watchdog timer for a mission-critical application. "
       "In this case, the application would assume responsibility for "
       "re-arming the timer before expiration." )]
class CIM_Watchdog : CIM_LogicalDevice {

      [Description ( 
          "The entity that is currently being monitored by the "
          "WatchDog. This property is used to identify the module "
          "that is responsible for re-arming, or whose information "
          "is used to re-arm, the watchdog at periodic intervals." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8" }, 
       Values { "Unknown", "Other", "Operating System", 
          "Operating System Boot Process", 
          "Operating System Shutdown Process", 
          "Firmware Boot Process", "BIOS Boot Process", 
          "Application", "Service Processor" }]
   uint16 MonitoredEntity;

      [Description ( 
          "A string that describes more textual information about "
          "the monitored entity." ), 
       MaxLen ( 256 )]
   string MonitoredEntityDescription;

      [Description ( 
          "The timeout interval that is used by the watchdog, in "
          "MicroSeconds." ), 
       Units ( "MicroSeconds" ), 
       PUnit ( "second * 10^-6" )]
   uint32 TimeoutInterval;

      [Description ( 
          "Resolution of the timer. For example, if this value is "
          "100, then the timer can expire anytime between "
          "(TimeoutInterval- 100) microseconds or "
          "(TimeoutInterval+100) microseconds." ), 
       Units ( "MicroSeconds" ), 
       PUnit ( "second * 10^-6" )]
   uint32 TimerResolution;

      [Description ( "The time of the last timer expiry." )]
   datetime TimeOfLastExpiration;

      [Description ( 
          "Monitored entity at the time of last timer expiry." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8" }, 
       Values { "Unknown", "Other", "Operating System", 
          "Operating System Boot Process", 
          "Operating System Shutdown Process", 
          "Firmware Boot Process", "BIOS Boot Process", 
          "Application", "Service Processor" }]
   uint16 MonitoredEntityOnLastExpiration;

      [Description ( 
          "The action that should happen upon the expiry of the watchdog."
           ), 
       ValueMap { "0", "1", "2", "3", "4", "5" }, 
       Values { "None - Status Only", "System Reset", 
          "System Power Off", "System Power Off, then On", 
          "Generate System NonMaskableInterrupt (NMI)", 
          "Generate System Management Interrupt (SMI)" }]
   uint16 ActionOnExpiration;


      [Description ( 
          "A method to re-arm the timer. This method is used only "
          "if the MonitoredEntity is \"Application\". It returns 0 "
          "if successful, 1 if unsupported, and any other value if "
          "an error occurred. 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\' can also be "
          "specified in the subclass as a Values array qualifier." )]
   uint32 KeepAlive(
);

};
