-- *****************************************************************
-- CISCO-BOOT-HWDIAGS-MIB.my
--   
-- Copyright (c) 2009 by cisco Systems Inc.
-- All rights reserved.
--   
-- *****************************************************************

CISCO-BOOT-HWDIAGS-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY,
    OBJECT-TYPE,
    Unsigned32
        FROM SNMPv2-SMI
    MODULE-COMPLIANCE,
    OBJECT-GROUP
        FROM SNMPv2-CONF
    DisplayString,
    TruthValue
        FROM SNMPv2-TC
    ciscoMgmt
        FROM CISCO-SMI;


ciscoBootHwDiagsMIB MODULE-IDENTITY
    LAST-UPDATED    "200905120000Z"
    ORGANIZATION    "Cisco Systems, Inc."
    CONTACT-INFO
            "Cisco Systems
            Customer Service

            Postal: 170 W Tasman Drive
            San Jose, CA  95134
            USA

            Tel: +1 800 553-NETS

            E-mail: tac@cisco.com"
    DESCRIPTION
        "This MIB is used to configure those devices that support
        boot-time hardware diagnostics.  It provides the reports 
        about the respective diagnostic tests executed by the 
        devices as well. 

        Boot-time diagnostics are run after the ROMMON has 
        transferred control to the start code of IOS and before 
        any IOS subsystem has started. 

        Such diagnostics may or may not include those that are 
        destructive to the operation of IOS or communications
        links that are serviced by IOS and, as such, must be run
        before IOS has completed booting and before any subsystem
        has started. 

        During boot-up from either power-on or a reload, and
        before IOS starts, a loop of all such diagnostics is executed
        according to the following flow: 

             bank = current_bank 
             for index = 1 to number of diagnostics { 
                if diag[index] is configured AND armed for bank { 
                  call diagnostic_function[index]; 
                  store results in memory = structure.bank.index; 
                } 

        After all the IOS subsystems have started, one can
        use either the CLI or this MIB to query the status of the 
        diagnostic tests for each bank. 

        The diagnostic tests are tabulated on the CLI as
        follows. 

               Information for Hardware Diagnostics Bank 0 
               (Current bank = 0) 

                                Last Boot         Next Boot 
                                - 
             Diagnostic         Ran? Pass/Failed? Configured? Armed?

             EDAC test          YES  PASSED       YES         NO 
             EEPROM test        YES  PASSED       YES         NO 
             FPGA(s) test       YES  FAILED       YES         NO 

             FPGA Diags: FPGA1:F, FPGA2-REG:P, FPGA2-SRAM:P, FPGA3:F


        In the table above, there are 3 diagnostic_function 
        categories: 

        EDAC, EEPROM, and FPGA(s).   The FPGA category has 4
        subtests one associated with FPGA1, two with FPGA2, and one
        with FPGA3. 

        The MIB shall be used to configure the diagnostic tests
        to be run on each bank and read the results of the same.  The
        selection of a particular bank to run the tests is hardware-
        dependent.

                            GLOSSARY
        CLI    - Command Line Interface
        diags  - abbreviation for diagnostics
        EDAC   - Error Detection and Correction
        EEPROM - Electrically Eraseable Programmable Read-Only Memory
        FPGA   - Field Programmable Gate Array
        IOS    - Internet Operating System
        MIB    - Management Information Base
        NVRAM  - Non-volatile Random Access Memory
        SRAM   - Static Random Access Memory"
    REVISION        "200905120000Z"
    DESCRIPTION
        "Initial version of this MIB module."
    ::= { ciscoMgmt 696 }


ciscoBootHwDiagsMIBNotifs  OBJECT IDENTIFIER
    ::= { ciscoBootHwDiagsMIB 0 }

ciscoBootHwDiagsMIBObjects  OBJECT IDENTIFIER
    ::= { ciscoBootHwDiagsMIB 1 }

ciscoBootHwDiagsMIBConform  OBJECT IDENTIFIER
    ::= { ciscoBootHwDiagsMIB 2 }


ciscoBootHwDiagsMIBCurrentBank OBJECT-TYPE
    SYNTAX          Unsigned32 (0..1000)
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object identifies the current bank the device has booted
        with and executed the diagnostic tests." 
    ::= { ciscoBootHwDiagsMIBObjects 1 }

ciscoBootHwDiagsMIBTestTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF CiscoBootHwDiagsMIBTestEntry 
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This table gives the list of possible diagnostic test
        'categories' that may be configured, armed, and run for
        each bank.  The categories are the same for all banks.
        In the CLI example given above, the categories are:
        EDAC test, EEPROM test, and FGPA(s) test."
    ::= { ciscoBootHwDiagsMIBObjects 2 }

ciscoBootHwDiagsMIBTestEntry OBJECT-TYPE
    SYNTAX          CiscoBootHwDiagsMIBTestEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Each entry represents a  row in ciscoBootHwDiagsMIBTestTable
        and corresponds to the information about the various 
        categories of diagnostic tests."
    INDEX           { ciscoBootHwDiagsMIBTestIndex } 
    ::= { ciscoBootHwDiagsMIBTestTable 1 }

CiscoBootHwDiagsMIBTestEntry ::= SEQUENCE {
        ciscoBootHwDiagsMIBTestIndex Unsigned32,
        ciscoBootHwDiagsMIBTestName  DisplayString
}

ciscoBootHwDiagsMIBTestIndex OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object uniquely identifies the information about a
        particular category of test." 
    ::= { ciscoBootHwDiagsMIBTestEntry 1 }

ciscoBootHwDiagsMIBTestName OBJECT-TYPE
    SYNTAX          DisplayString (SIZE  (3..255))
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object represents the name of the diagnostic test." 
    ::= { ciscoBootHwDiagsMIBTestEntry 2 }
 


ciscoBootHwDiagsMIBTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF CiscoBootHwDiagsMIBEntry 
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "The table lists the configuration and results of the tests run
        on the banks. The results correspond to the execution of the 
        respective tests run at the most recent boot of the device."
    ::= { ciscoBootHwDiagsMIBObjects 3 }

ciscoBootHwDiagsMIBEntry OBJECT-TYPE
    SYNTAX          CiscoBootHwDiagsMIBEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Each entry represents a  row in ciscoBootHwDiagsMIBTable and
        corresponds to the information about the diagnostic tests for a
        particular
        bank."
    INDEX           {
                        ciscoBootHwDiagsMIBBankIndex,
                        ciscoBootHwDiagsMIBTestIndex
                    } 
    ::= { ciscoBootHwDiagsMIBTable 1 }

CiscoBootHwDiagsMIBEntry ::= SEQUENCE {
        ciscoBootHwDiagsMIBBankIndex          Unsigned32,
        ciscoBootHwDiagsMIBLastBootExecuted   TruthValue,
        ciscoBootHwDiagsMIBLastBootPassed     TruthValue,
        ciscoBootHwDiagsMIBNextBootConfigured TruthValue,
        ciscoBootHwDiagsMIBNextBootArmed      TruthValue,
        ciscoBootHwDiagsMIBConfigCode         Unsigned32,
        ciscoBootHwDiagsMIBResultCode         Unsigned32
}

ciscoBootHwDiagsMIBBankIndex OBJECT-TYPE
    SYNTAX          Unsigned32 (0..1000)
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object, together with ciscoBootHwDiagsMIBTestIndex,
        uniquely  identifies the information about a particular 
        diagnostic test." 
    ::= { ciscoBootHwDiagsMIBEntry 1 }

ciscoBootHwDiagsMIBLastBootExecuted OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object represents the execution status of the test.  A
        value of 'true' indicates that the test has been executed on
        the most recent boot of the device.  A value of 'false' 
        indicates that the test has not been executed."
    DEFVAL          { false } 
    ::= { ciscoBootHwDiagsMIBEntry 2 }

ciscoBootHwDiagsMIBLastBootPassed OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object represents the result of the test on the most
        recent boot of the device. A value of 'true' indicates that the 
        test passed.  A  value of 'false' indicates that the test 
        failed." 
    ::= { ciscoBootHwDiagsMIBEntry 3 }

ciscoBootHwDiagsMIBNextBootConfigured OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "This object indicates the action to be taken on this bank at
        the next boot.  A value of 'true' indicates that the test
        identified by ciscoBootHwDiagsMIBTestName will be executed at
        the next boot, provided  the device chooses this bank for 
        diagnosis."
    DEFVAL          { false } 
    ::= { ciscoBootHwDiagsMIBEntry 4 }

ciscoBootHwDiagsMIBNextBootArmed OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "A value of 'true' indicates that, for a particular numbered
        bank, all the configured tests for that same numbered bank are
        run."
    DEFVAL          { false } 
    ::= { ciscoBootHwDiagsMIBEntry 5 }

ciscoBootHwDiagsMIBConfigCode OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "This object provides additional optional detailed configuration
        options (sub-tests configurations) for a diagnostics test
        category. The decoding of this unsigned 32-bit integer is 
        platform-specific and allows for many platform-specific
        configurations.  For the CLI example above, a
        ciscoBootHwDiagsMIBConfigCode for the FPGA(s) test category
        will cause all FPGA tests to be disabled, whereas, 
        a ciscoBootHwDiagsMIBConfigCode of 1 will enable FPGA1 test.
        A ciscoBootHwDiagsMIBConfigCode of 3 will enable FPGA1 AND
        FPGA2-subtest1, and so forth (since there is only one test
        for FPGA1, but two tests for FPGA2). Hence the encoding is
        platform dependent and flexible."
    DEFVAL          { 0 } 
    ::= { ciscoBootHwDiagsMIBEntry 6 }

ciscoBootHwDiagsMIBResultCode OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object represents a return code that may be mapped to
        detailed testresults in an analogous way to how the 
        ciscoBootHwDiagsMIBConfigCode  is mapped to configurations.  
        That is, for the CLI example above, a 
        ciscoBootHwDiagsMIBResultCode of F (hex) indicates that all
        FPGA tests passed. A ciscoBootHwDiagsMIBResultCode of 
        1 (hex), indicates that ONLY FPGA1 test passed. A 
        ciscoBootHwDiagsMIBResultCode of 3 (hex) indicates that only
        FPGA1 AND FPGA2-subtest1 passed, and so forth (since there is
        only one test for FPGA1, but two tests for FPGA2).  Hence the
        encoding is platform dependent and flexible." 
    ::= { ciscoBootHwDiagsMIBEntry 7 }
 

ciscoBootHwDiagsMIBCompliances  OBJECT IDENTIFIER
    ::= { ciscoBootHwDiagsMIBConform 1 }

ciscoBootHwDiagsMIBGroups  OBJECT IDENTIFIER
    ::= { ciscoBootHwDiagsMIBConform 2 }


ciscoBootHwDiagsMIBCompliance MODULE-COMPLIANCE
    STATUS          current
    DESCRIPTION
        "The compliance statement for the entities that implement the
        ciscoBootHwDiagsMIB module."
    MODULE          -- this module
    MANDATORY-GROUPS { ciscoBootHwDiagsMIBMainObjectGroup }
    ::= { ciscoBootHwDiagsMIBCompliances 1 }

-- Units of Conformance

ciscoBootHwDiagsMIBMainObjectGroup OBJECT-GROUP
    OBJECTS         {
                        ciscoBootHwDiagsMIBCurrentBank,
                        ciscoBootHwDiagsMIBTestName,
                        ciscoBootHwDiagsMIBLastBootExecuted,
                        ciscoBootHwDiagsMIBLastBootPassed,
                        ciscoBootHwDiagsMIBNextBootConfigured,
                        ciscoBootHwDiagsMIBNextBootArmed,
                        ciscoBootHwDiagsMIBConfigCode,
                        ciscoBootHwDiagsMIBResultCode
                    }
    STATUS          current
    DESCRIPTION
        "This group represents the information about the banks and the
        diagnostic tests run on them."
    ::= { ciscoBootHwDiagsMIBGroups 1 }

END
