diff options
author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2014-07-06 18:04:32 +0200 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2014-07-06 18:04:32 +0200 |
commit | a7f89980e5b3f4b9a74c70dbc5ffe8aabd28be28 (patch) | |
tree | 41c4deec1fdfbafd7821b4ca7a9772ac0abd92f5 /hpiutil |
Imported Upstream version 2.9.3upstream/2.9.3
Diffstat (limited to 'hpiutil')
-rw-r--r-- | hpiutil/COPYING | 28 | ||||
-rw-r--r-- | hpiutil/ChangeLog | 106 | ||||
-rw-r--r-- | hpiutil/INSTALL | 27 | ||||
-rw-r--r-- | hpiutil/Makefile | 77 | ||||
-rw-r--r-- | hpiutil/README | 249 | ||||
-rw-r--r-- | hpiutil/SaHpi.h | 4509 | ||||
-rw-r--r-- | hpiutil/SaHpi.h-A | 4509 | ||||
-rw-r--r-- | hpiutil/SaHpi.h-B | 6785 | ||||
-rw-r--r-- | hpiutil/TODO | 65 | ||||
-rwxr-xr-x | hpiutil/env.hpi | 11 | ||||
-rwxr-xr-x | hpiutil/env.openhpi | 2 | ||||
-rw-r--r-- | hpiutil/hpialarmpanel.c | 373 | ||||
-rw-r--r-- | hpiutil/hpievent.c | 621 | ||||
-rw-r--r-- | hpiutil/hpifru.c | 19 | ||||
-rw-r--r-- | hpiutil/hpifrua.c | 550 | ||||
-rw-r--r-- | hpiutil/hpifrub.c | 619 | ||||
-rwxr-xr-x | hpiutil/hpiinit.sh | 69 | ||||
-rw-r--r-- | hpiutil/hpireset.c | 225 | ||||
-rw-r--r-- | hpiutil/hpisel.c | 934 | ||||
-rw-r--r-- | hpiutil/hpisensor.c | 467 | ||||
-rw-r--r-- | hpiutil/hpiutil.spec | 199 | ||||
-rw-r--r-- | hpiutil/hpiwdt.c | 272 | ||||
-rwxr-xr-x | hpiutil/mkrpm | 135 | ||||
-rwxr-xr-x | hpiutil/upd | 24 |
24 files changed, 20875 insertions, 0 deletions
diff --git a/hpiutil/COPYING b/hpiutil/COPYING new file mode 100644 index 0000000..1a27065 --- /dev/null +++ b/hpiutil/COPYING @@ -0,0 +1,28 @@ +The BSD License + +Copyright (c) 2003, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + a.. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + b.. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + c.. Neither the name of Intel Corporation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/hpiutil/ChangeLog b/hpiutil/ChangeLog new file mode 100644 index 0000000..755db47 --- /dev/null +++ b/hpiutil/ChangeLog @@ -0,0 +1,106 @@ +06/20/03 hpiutil 1.0.0 ARCress - initial release, includes: + hpisensor + hpisel + hpifru + hpireset + hpiwdt + hpialarmpanel + SpiLibd + libSpi*.so +06/26/03 hpiutil 1.0.1 ARCress + SpiLibd code: disabled RestoreDefault functions, + fixed Entity path root truncation, + tweaked EventTranslation for event data + hpisel: changed event data logic + hpisensor: added -t for thresholds + hpireset: cut out functions not supported in HPI 1.0 +06/27/03 hpiutil 1.0.2 ARCress + hpiutil.spec: check for ipmidrvr rpm, since no /dev/imb until reboot + Build MV CGE 2.1 rpm (gcc 2) + README: change test suite contact, added Test Notes + env.hpi: increased log level to 5 for errors only + hpiinit.sh: increased log level to 5 for errors only +07/08/03 hpiutil 1.0.3 ARCress + README: added list of APIs +07/22/03 hpiutil 1.0.4 ARCress + Makefile: added changes for OpenHPI + INSTALL: created build/install instructions + env.openhpi: created + hpisel.c: added BUGGY section for OpenHPI Discover workaround + hpisensor.c: added BUGGY section for OpenHPI Discover workaround +08/12/03 hpiutil 1.0.4-2 ARCress + built rh80open rpm with everything for OpenIPMI +09/25/03 hpiutil 1.0.5 ARCress + don't include libraries in rpms +11/12/03 hpiutil 1.0.6 ARCress + hpisel.c: check for CAPABLITY_SEL in RPT +02/19/04 hpiutil 1.1.0 ARCress + hpifru.c: added IsBmcTag() to generalize tag parsing + hpiinit.sh: added LD_ASSUME_KERNEL to avoid RH EL 3 NPTL + hpiutil.spec: changed /etc/init.d name to just "hpi" + hpisensor.c: recognize common errors for Compact & mBMC sensors. + SpiLibd: rebuilt lib objects with Gold Intel HPI 1.0 libraries + README updated for new OSs, etc. +02/23/04 hpiutil 1.1.1 ARCress + hpialarmpanel: added checking/setting disk LEDs + SpiLibd: fixed disk LEDs for mBMC + fixed IPMI timeout for mBMC +03/16/04 hpiutil 1.1.2 ARCress + hpievent 0.8: added general search for any Fan sensor + hpisel 1.2: use better free space logic now + hpiwdt 1.0: use description strings for use and action values, + fixed another 0xcc error w pretimeout byte. + SpiLibd: recognize special Watchdog sensor for mBMC + recognize System Boot records in domain SEL + skip Hysteresis if mBMC (caused ThresholdsGet error) + special code to allow mBMC ThresholdsSet +03/18/04 hpiutil 1.1.3 ARCress + SpiLibd: Check for bad SdrLock at init if mBMC + fix to mBMC ThresholdsSet + fix to not abort if SEL delete timestamp changes + hpievent 1.0: changed general search to a Temp sensor (has Low Major) +03/26/04 hpiutil 1.1.4 ARCress + hpiutil.spec - changes for kill scripts + hpiinit.sh - changes for chkconfig + SpiLibd: Changed timeouts for GetEvent, etc. +06/24/04 hpiutil 1.1.5 ARCress + SpiLibd: Fixed GetIpmiEvent for fast events, more than 1 per second. + test/hpieventloop.c Created for testing fast events, not in rpm + spi-lib.conf: Changed SpiLibHlpResponseTimeout from 9000 to 11000 + for "hpifru -a" client timeout error. +09/02/04 hpiutil 1.1.6 ARCress + SpiLibd: Changed saHpiInitialize to report version 0x010101 (A.01.01) + rather than 0x000101 (pre HPI 1.0) +09/15/04 hpiutil 1.1.7 ARCress + SpiLibd: fixed uninitialized pointer in debug printf for GetEvent +01/12/05 hpiutil 1.1.8 ARCress + SpiLibd: fixed spiCpsRptInfoGetRspCodec for 32bit UpdateCount + SaHpi.h-A: new file, include file for HPI A.01.01 spec + (SaHpi.h is the working copy) + SaHpi.h-B: new file, include file for HPI B.01.01 spec + hpialarmpanel.c: added HPI_A/HPI_B logic, misc changes + hpisel.c: added HPI_A/HPI_B logic + hpisensor.c: added HPI_A/HPI_B logic, misc changes + hpiwdt v1.1 - fixed RPT loop, added more decoding, + added flags for HPI_A/HPI_B. + hpireset v1.1 - added HPI_A/B flags + hpifru v1.3 - added HPI_A/B flags, + increased buffer sizes, check null ptr in fixstr + hpifrub.c new file, fully ported to HPI B + hpifrua.c new file, changed to skip read errors + hpievent.c - added HPI_A/B flags + Makefile - added a common HPI_A/B compile option + +03/16/05 hpiutil 1.1.9 ARCress + SpiLibd: various changes for new TIGI2U platform + hpifrub.c - added FieldSet for asset tag, Changed IsTagBmc usage + hpifrua.c - only write asset tag if IsTagBmc + hpisel.c - decode more of the record for IPMI sensor events + +04/07/05 hpiutil 1.1.10 ARCress + hpievent.c - set UpMajor if not Fan threshold + hpisel.c - add logic to show domain event log if HPI_B + +08/30/11 hpiutil 1.1.11 ARCress + hpiutil.spec - updated Version, syntax of header + hpiinit.sh - use /var/run if /var/lock/subsys is not present. diff --git a/hpiutil/INSTALL b/hpiutil/INSTALL new file mode 100644 index 0000000..ef5790f --- /dev/null +++ b/hpiutil/INSTALL @@ -0,0 +1,27 @@ +hpiutil
+
+BUILD & INSTALL INSTRUCTIONS
+
+This package uses the Intel HPI library implementation (closed source),
+but there is also an OpenHPI library implementation that could also be
+linked with these utilities. There are comments in the Makefile to show
+how this can be done.
+
+How to make the utilities:
+1) If OpenHPI, edit the makefile to uncomment the 2 lines indicated.
+2) do ". env.hpi" or ". env.openhpi" to set the environment variables
+3) make clean
+4) make
+
+How to make the rpms:
+(Only valid for Intel HPI at this time.)
+mkrpm $OS
+ where OS = rh80 | as21 | mv21 | mv30 | mv30wv | el3 | mv31
+
+How to install the rpms:
+(Only valid for Intel HPI at this time.)
+rpm -i hpiutil-1.0.3-as21.i386.rpm
+ The hpi utilities will be in /usr/bin.
+ The SaHpi libraries will be in /usr/lib.
+ The *.conf files will be in /etc/hpi.
+
diff --git a/hpiutil/Makefile b/hpiutil/Makefile new file mode 100644 index 0000000..e1faa35 --- /dev/null +++ b/hpiutil/Makefile @@ -0,0 +1,77 @@ +################################################################################ +# +# Makefile for hpiutils +# +################################################################################ + +# All items listed will be linked. By default, each has a dependency of the corresponding .o file. +# Each .o file has a default dependency of the correspoonding .c file. +TARGETS = hpialarmpanel hpisensor hpisel hpireset hpiwdt hpifru hpievent + +ifeq ($(DEBUG),y) +DEBFLAGS = -O -g3 -DDEBUG +else +DEBFLAGS = -O2 +endif +CFLAGS = $(DEBFLAGS) -Wall -D_REENTRANT -DLINUX -DUNIX -DUWSVR4 +INCLUDES = + +# Intel HPI parameters +LIBDIR = /root/hpi/lib +#LIBDIR = /usr/lib +#LIBDIR = ./rpm/usr/lib +LIBHPI = SaHpi +HPIA = -DHPI_A +# OpenHPI parameters (uncomment the next 3 lines) +#LIBDIR = /usr/local/lib +#LIBHPI = openhpi +#HPIA = +# (If openhpi is less than version 2.0.0, don't uncomment #HPIA.) + +# Additional compile flags +CC = gcc +CFLAGS += +LIBHPIF = $(LIBDIR)/lib$(LIBHPI).so + +# Link flags +LDFLAGS = -pthread +LDFLAGS += -lc +LDFLAGS += -lm +LDFLAGS += -L $(LIBDIR) +LD_LIBRARY_PATH = $(LIBDIR) + +all: $(TARGETS) + +hpialarmpanel: hpialarmpanel.o $(LIBHPIF) + $(CC) $(LDFLAGS) -l$(LIBHPI) -o hpialarmpanel hpialarmpanel.o + +hpisensor: hpisensor.o $(LIBHPIF) + $(CC) $(LDFLAGS) -l$(LIBHPI) -o hpisensor hpisensor.o + +hpisel: hpisel.o $(LIBHPIF) + $(CC) $(LDFLAGS) -l$(LIBHPI) -o hpisel hpisel.o + +hpifru: hpifru.o $(LIBHPIF) + $(CC) $(LDFLAGS) -l$(LIBHPI) -o hpifru hpifru.o + +hpireset: hpireset.o $(LIBHPIF) + $(CC) $(LDFLAGS) -l$(LIBHPI) -o hpireset hpireset.o + +hpiwdt: hpiwdt.o $(LIBHPIF) + $(CC) $(LDFLAGS) -l$(LIBHPI) -o hpiwdt hpiwdt.o + +hpievent: hpievent.o $(LIBHPIF) + $(CC) $(LDFLAGS) -l$(LIBHPI) -o hpievent hpievent.o + +hpieventloop: hpieventloop.o $(LIBHPIF) + $(CC) $(LDFLAGS) -l$(LIBHPI) -o hpieventloop hpieventloop.o + +clean: + rm -f *.o *.i *.s $(TARGETS) + +distclean: clean + rm -f Makefile.deps + +%.o: %.c + $(CC) -c $(CFLAGS) $(INCLUDES) $(HPIA) -o $@ $< + diff --git a/hpiutil/README b/hpiutil/README new file mode 100644 index 0000000..75594f0 --- /dev/null +++ b/hpiutil/README @@ -0,0 +1,249 @@ +hpiutil
+
+OVERVIEW
+
+The HPI utilities package provides system management utilities that
+conform to the SA Forum's Hardware Platform Interface specification, and
+as such are hardware-independent across platforms that have an HPI
+library implementation. The HPI library on Intel platforms requires
+an IPMI driver. An IPMI driver can be provided by either the Intel
+IPMI driver (/dev/imb) or the OpenIPMI driver (/dev/ipmi0) in Linux
+kernel versions 2.4.20 and greater.
+
+This Intel HPI library is currently configured to use the /dev/imb
+interface, since that will coexist well with Intel Server Management
+software. The hpiutil rpms default to the /dev/imb interface.
+Note that the OpenIPMI driver also has imb emulation
+as an option.
+
+To switch to using the OpenIPMI driver's /dev/ipmi0 interface with
+this hpiutil package, do this after installing the rpm:
+ cp /usr/lib/libSpiModIpmi.so /usr/lib/libSpiModIpmi.so-imb
+ cp /usr/lib/libSpiModIpmi.so-open /usr/lib/libSpiModIpmi.so
+ sed -e 's/imb/ipmi0/' /etc/hpi/spi-daemon.conf >/tmp/spi
+ cp /tmp/spi /etc/hpi/spi-daemon.conf
+
+This package includes the Intel HPI binary libraries and the
+following HPI utilities.
+ hpialarmpanel
+ hpisel
+ hpifru
+ hpisensor
+ hpireset
+ hpiwdt
+
+NOTES
+This package uses the Intel HPI library implementation, but there
+is also an OpenHPI library implementation that could also be linked
+with these utilities. There are comments in the Makefile to show
+how this can be done.
+The hpiutil utilities are included in OpenHPI 1.0.0 and greater
+as openhpi-clients.
+The openhpi-2.6.3 and greater releases with the ipmidirect plugin
+have been tested to work well on IPMI systems.
+
+Variations from HPI 1.0 spec:
+
+- SystemGUID added. Implemented as a FRU Product Custom field.
+ The IPMI SystemGUID was not supported in the HPI FRU fields.
+ This library implementation shows SystemGUID as part of FRU, but
+ does not try to write GUID as part of FRU.
+ See HPI 1.0 spec errata #66
+
+- Power down added to Chassis/Cold Reset RDR via ControlStateSet(OFF)
+ There was no mechanism defined in the HPI 1.0 spec to support chassis
+ power down. Here is the way this was implemented with this library.
+ Doing ControlStateSet(ON) with the Reset RDR causes a hard reset.
+ Doing ControlStateSet(OFF) with the Reset RDR causes a power down.
+ See HPI 1.0 spec errata #30
+
+- Alarm LED RDRs were not differentiated.
+ This variation is required to implement ControlStateSet for Alarm LEDs.
+ See also HPI 1.0 spec errata #75
+ The oem field values are used to do this according to the following schema.
+
+ Control.Type Control.OutputType Control.Oem Meaning
+ Digital (=0) LED (=1) 0x10 Alarm panel Power LED
+ Digital (=0) LED (=1) 0x11 Alarm panel Critical LED
+ Digital (=0) LED (=1) 0x12 Alarm panel Major LED
+ Digital (=0) LED (=1) 0x13 Alarm panel Minor LED
+ Digital (=0) LED (=1) 0x14 - 0x1F Alarm panel other LEDs
+ Digital (=0) LED (=1) 0x20 - 0x2F Disk LEDs (if used)
+ Digital (=0) LED (=1) 0x30 - 0x3F NIC LEDs (if used)
+ Analog (=2) LED (=1) 0x60 Chassis Identify LED
+ Analog (=2) LED (=1) 0x61 - 0x6F Other Analog LEDs (if used)
+ Digital (=0) Generic (=0) 0x70 - 0x7F Chassis Reset Control
+
+
+SUPPORT
+
+The following error codes are returned by HPI APIs and are defined in SaHpi.h.
+ 0 SA_OK
+-1001 SA_ERR_HPI_ERROR
+-1002 SA_ERR_HPI_UNSUPPORTED_API
+-1003 SA_ERR_HPI_BUSY
+-1004 SA_ERR_HPI_INVALID
+-1005 SA_ERR_HPI_INVALID_CMD
+-1006 SA_ERR_HPI_TIMEOUT
+-1007 SA_ERR_HPI_OUT_OF_SPACE
+-1008 SA_ERR_HPI_DATA_TRUNCATED
+-1009 SA_ERR_HPI_DATA_LEN_INVALID
+-1010 SA_ERR_HPI_DATA_EX_LIMITS
+-1011 SA_ERR_HPI_INVALID_PARAMS
+-1012 SA_ERR_HPI_INVALID_DATA
+-1013 SA_ERR_HPI_NOT_PRESENT
+-1014 SA_ERR_HPI_INVALID_DATA_FIELD
+-1015 SA_ERR_HPI_INVALID_SENSOR_CMD
+-1016 SA_ERR_HPI_NO_RESPONSE
+-1017 SA_ERR_HPI_DUPLICATE
+-1018 SA_ERR_HPI_UPDATING
+-1019 SA_ERR_HPI_INITIALIZING
+-1020 SA_ERR_HPI_UNKNOWN
+-1021 SA_ERR_HPI_INVALID_SESSION
+-1022 SA_ERR_HPI_INVALID_DOMAIN
+-1023 SA_ERR_HPI_INVALID_RESOURCE
+-1024 SA_ERR_HPI_INVALID_REQUEST
+-1025 SA_ERR_HPI_ENTITY_NOT_PRESENT
+-1026 SA_ERR_HPI_UNINITIALIZED
+
+If problems occur, additional debug information can be obtained by
+editing the SPI_DAEMON_LOG_LEVEL variable in the /etc/rc.d/init.d/hpi
+script to change the log level.
+SPI_DAEMON_LOG_LEVEL - Level at which to log debug information. The
+ following list describes each of the logging
+ switches. Multiple switches may be used at once.
+ -l<num>: Logs data at a given level. Where num...
+ 1 = Logs debug low through fatal errors.
+ 2 = Logs debug high through fatal errors.
+ 3 = Logs informational through fatal errors.
+ 4 = Logs warnings through fatal errors.
+ 5 = Log non-fatal errors and fatal errors.
+ 6 = Logs fatal errors only.
+ -lf: Logs function entrance and exit.*
+ -lm: Logs memory usage.*
+ -ls: Logs semaphore usage.*
+ * = In order to use these options, the -l<num>
+ option must also be set.
+
+Support for the hpiutil rpm is provided on a best-effort basis via
+ tltsupport@linux.intel.com
+
+
+REFERENCES
+
+IPMI 1.5 specification: http://www.intel.com/design/servers/ipmi/
+Open source IPMI utilities: http://panicsel.sourceforge.net
+SA Forum HPI 1.0 spec: http://www.saforum.org/specification/HPI_Specification
+Intel HPI 1.0 compliance test suite: Contact Keith.L.Perrin@Intel.com
+OpenHPI project: http://openhpi.sourceforge.net
+
+TESTING
+
+ The binary HPI libraries included in this package have been tested to be
+ HPI 1.0 compliant via the Intel HPI 1.0 compliance test suite.
+
+ This package has been tested and is supported on the following Intel
+ servers: TSRLT2, TSRMT2, TIGPR2U, TIGPT1U.
+ See also http://www.saforum.org for platform support information.
+ Most of the utilities (except hpialarmpanel) should work on other
+ platforms as well, if they have IPMI 1.5 support.
+ Note that mBMC platforms, such as TIGPT1U, do not support the
+ Power On Hours function, which is optional in IPMI 1.5.
+
+ This hpiutil package is not inherently dependent on any OS variance,
+ as long as there is an IPMI driver. However, the version of glibc/gcc
+ does matter, since the library includes shared object files.
+ This HPI library and the HPI utilities have been tested on the
+ following Linux OSs.
+ RedHat EL 3 (gcc 3.2.3, glibc 2.3.2)
+ RedHat AS 2.1 (gcc 2.96, glibc 2.2.4)
+ RedHat 8.0 (gcc 3.2, glibc 2.2.93)
+ MontaVista CGE 2.1 (gcc 2.95.3, glibc 2.2.3 )
+ MontaVista CGE 3.0 (gcc 3.2.1, glibc 2.2.5)
+ MontaVista CGE 3.1 (gcc 3.2.1, glibc 2.2.5)
+ Other Linux OSs should work fine using an rpm with similar gcc/glibc.
+
+ SA-HPI Release 1.0 Library APIs
+ The following APIs are supported in this release:
+
+Initialization and Cleanup
+saHpiInitialize()
+saHpiFinalize()
+Session Management
+saHpiSessionOpen()
+saHpiSessionClose()
+
+Discovery of Resources
+saHpiResourcesDiscover()
+saHpiRptInfoGet()
+saHpiRptEntryGet()
+saHpiRptEntryGetByResourceId()
+saHpiResourceSeveritySet()
+saHpiResourceTagSet()
+saHpiResourceIdGet()
+saHpiEntitySchemaGet()
+
+Event Log Management
+saHpiEventLogInfoGet()
+saHpiEventLogEntryGet()
+saHpiEventLogEntryAdd()
+saHpiEventLogEntryDelete ()
+saHpiEventLogClear()
+saHpiEventLogTimeGet()
+saHpiEventLogTimeSet()
+saHpiEventLogStateGet()
+saHpiEventLogStateSet()
+
+Events
+saHpiSubscribe()
+saHpiUnsubscribe()
+saHpiEventGet()
+
+RDR Repository Management
+saHpiRdrGet()
+
+Sensor Functions
+saHpiSensorReadingGet()
+saHpiSensorReadingConvert()
+saHpiSensorThresholdsGet()
+saHpiSensorThresholdsSet()
+saHpiSensorTypeGet()
+saHpiSensorEventEnablesGet()
+saHpiSensorEventEnablesSet()
+
+Controls
+saHpiControlTypeGet()
+saHpiControlStateGet()
+saHpiControlStateSet()
+
+Entity Inventory Data
+saHpiEntityInventoryDataRead()
+saHpiEntityInventoryDataWrite()
+
+Watchdog Timer
+saHpiWatchdogTimerGet()
+saHpiWatchdogTimerSet()
+saHpiWatchdogTimerReset()
+
+Reset
+saHpiResourceResetStateGet()
+saHpiResourceResetStateSet()
+
+Hot Swap Routines
+saHpiHotSwapControlRequest()
+saHpiResourceActiveSet()
+saHpiResourceInactiveSet()
+saHpiAutoInsertTimeoutGet()
+saHpiAutoInsertTimeoutSet()
+saHpiAutoExtractTimeoutGet()
+saHpiAutoExtractTimeoutSet()
+saHpiHotSwapStateGet()
+saHpiHotSwapActionRequest()
+saHpiResourcePowerStateGet()
+saHpiResourcePowerStateSet()
+saHpiHotSwapIndicatorStateGet()
+saHpiHotSwapIndicatorStateSet()
+
+Configuration
+saHpiParmControl() - disabled for this library by design
+
diff --git a/hpiutil/SaHpi.h b/hpiutil/SaHpi.h new file mode 100644 index 0000000..6efd5e9 --- /dev/null +++ b/hpiutil/SaHpi.h @@ -0,0 +1,4509 @@ +/*******************************************************************************
+**
+** FILE:
+** SaHpi.h
+**
+** DESCRIPTION:
+** This file provides the C language binding for the Service
+** Availability(TM) Forum Platform Interface. It contains all of
+** the prototypes and type definitions. Note, this file was
+** generated from the Platform Interface specification document.
+**
+** SPECIFICATION VERSION:
+** SAI-HPI-A.01.01
+**
+** DATE:
+** Thu Oct 3 14:48:41 2002
+**
+** LEGAL:
+** OWNERSHIP OF SPECIFICATION AND COPYRIGHTS.
+** The Specification and all worldwide copyrights therein are
+** the exclusive property of Licensor. You may not remove, obscure, or
+** alter any copyright or other proprietary rights notices that are in or
+** on the copy of the Specification you download. You must reproduce all
+** such notices on all copies of the Specification you make. Licensor
+** may make changes to the Specification, or to items referenced therein,
+** at any time without notice. Licensor is not obligated to support or
+** update the Specification.
+**
+** Copyright(c) 2002, Service Availability(TM) Forum. All rights
+** reserved.
+**
+*******************************************************************************/
+
+#ifndef __SAHPI_H
+#define __SAHPI_H
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Basic Data Types and Values **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* General Types - need to be specified correctly for the host architecture */
+typedef unsigned char SaHpiUint8T;
+typedef unsigned short SaHpiUint16T;
+typedef unsigned int SaHpiUint32T;
+typedef char SaHpiInt8T;
+typedef short SaHpiInt16T;
+typedef int SaHpiInt32T;
+typedef long long SaHpiInt64T;
+typedef float SaHpiFloat32T;
+typedef double SaHpiFloat64T;
+
+typedef SaHpiUint8T SaHpiBoolT;
+#define SAHPI_TRUE 1
+#define SAHPI_FALSE 0
+
+/* Platform, O/S, or Vendor dependent */
+#define SAHPI_API
+#define SAHPI_IN
+#define SAHPI_OUT
+#define SAHPI_INOUT
+
+/*
+** Identifier for the manufacturer
+**
+** This is the IANA-assigned private enterprise number for the
+** manufacturer of the resource or FRU, or of the manufacturer
+** defining an OEM control or event type. A list of current
+** IANA-assigned private enterprise numbers may be obtained at
+**
+** http://www.iana.org/assignments/enterprise-numbers
+**
+** If a manufacturer does not currently have an assigned number, one
+** may be obtained by following the instructions located at
+**
+** http://www.iana.org/cgi-bin/enterprise.pl
+*/
+typedef SaHpiUint32T SaHpiManufacturerIdT;
+#define SAHPI_MANUFACTURER_ID_UNSPECIFIED (SaHpiManufacturerIdT)0
+
+/* Version Types */
+typedef SaHpiUint32T SaHpiVersionT;
+
+/*
+** Interface Version
+**
+** The interface version is the version of the actual interface and not the
+** version of the implementation. It is a 24 bit value where
+** the most significant 8 bits represent the compatibility level
+** (with letters represented as the corresponding numbers);
+** the next 8 bits represent the major version number; and
+** the least significant 8 bits represent the minor version number.
+*/
+#define SAHPI_INTERFACE_VERSION (SaHpiVersionT)0x010101 /* A.01.01 */
+
+/*
+** Return Codes
+**
+** SaErrorT is defined in the HPI specification. In the future a
+** common SAF types definition may be created to contain this type. At
+** that time, this typedef should be removed.
+*/
+typedef SaHpiInt32T SaErrorT; /* Return code */
+
+/*
+** SA_OK: This code indicates that a command completed successfully.
+*/
+#define SA_OK (SaErrorT)0x0000
+
+/* This value is the base for all HPI-specific error codes. */
+#define SA_HPI_ERR_BASE -1000
+
+/*
+** SA_ERR_HPI_ERROR: An unspecified error occurred. This code should
+** be returned only as a last resort; eg. if the cause of an error
+** cannot be determined.
+*/
+#define SA_ERR_HPI_ERROR (SaErrorT)(SA_HPI_ERR_BASE - 1)
+
+/*
+** SA_ERR_HPI_UNSUPPORTED_API: The HPI implementation does not support
+** this API. This code is appropriate, for example, if invoking the
+** Hot Swap functions on an HPI implementation which has no hot swap
+** support. Note that such an implementation would not report any hot
+** swap capabilities via its RDRs.
+*/
+#define SA_ERR_HPI_UNSUPPORTED_API (SaErrorT)(SA_HPI_ERR_BASE - 2)
+
+/*
+** SA_ERR_HPI_BUSY: The command cannot be performed because the
+** targeted device is busy.
+*/
+#define SA_ERR_HPI_BUSY (SaErrorT)(SA_HPI_ERR_BASE - 3)
+
+/*
+** SA_ERR_HPI_INVALID: The request is fundamentally invalid.
+*/
+#define SA_ERR_HPI_INVALID (SaErrorT)(SA_HPI_ERR_BASE - 4)
+
+/*
+** SA_ERR_HPI_INVALID_CMD: The specific object to which a command was
+** directed does not support that command (which was otherwise valid).
+*/
+#define SA_ERR_HPI_INVALID_CMD (SaErrorT)(SA_HPI_ERR_BASE - 5)
+
+/*
+** SA_ERR_HPI_TIMEOUT: The requested operation, which had a timeout
+** value specified, timed out. For example, when reading input with a
+** timeout value, if no input arrives within the timeout interval,
+** this code should be returned. This should only be returned in
+** cases where a timeout is anticipated as a valid consequence of the
+** operation; if the addressed entity is not responding due to a
+** fault, use SA_ERR_HPI_NO_RESPONSE (qv).
+*/
+#define SA_ERR_HPI_TIMEOUT (SaErrorT)(SA_HPI_ERR_BASE - 6)
+
+/*
+** SA_ERR_HPI_OUT_OF_SPACE: The requested command failed due to
+** resource limits.
+*/
+#define SA_ERR_HPI_OUT_OF_SPACE (SaErrorT)(SA_HPI_ERR_BASE - 7)
+
+/*
+** SA_ERR_HPI_DATA_TRUNCATED: The returned data was truncated. For
+** example, when reading data into a fixed-size buffer, if the data is
+** larger than the buffer, this code should be returned.
+*/
+#define SA_ERR_HPI_DATA_TRUNCATED (SaErrorT)(SA_HPI_ERR_BASE - 8)
+
+/*
+** SA_ERR_HPI_DATA_LEN_INVALID: The specified data length is invalid.
+*/
+#define SA_ERR_HPI_DATA_LEN_INVALID (SaErrorT)(SA_HPI_ERR_BASE - 9)
+
+/*
+** SA_ERR_HPI_DATA_EX_LIMITS: The supplied data exceeds limits.
+*/
+#define SA_ERR_HPI_DATA_EX_LIMITS (SaErrorT)(SA_HPI_ERR_BASE - 10)
+
+/*
+** SA_ERR_HPI_INVALID_PARAMS: One or more parameters to the command
+** were invalid.
+*/
+#define SA_ERR_HPI_INVALID_PARAMS (SaErrorT)(SA_HPI_ERR_BASE - 11)
+
+/*
+** SA_ERR_HPI_INVALID_DATA: Cannot return requested data; eg. the
+** specific object to which a command was directed does not support
+** the data required by the command.
+*/
+#define SA_ERR_HPI_INVALID_DATA (SaErrorT)(SA_HPI_ERR_BASE - 12)
+
+/*
+** SA_ERR_HPI_NOT_PRESENT: The requested object was not present. For
+** example, this code would be returned when attempting to access an
+** entry in a RPT or RDR which is not present. As another example, this
+** code would also be returned when accessing an invalid management
+** instrument on a valid resource.
+*/
+#define SA_ERR_HPI_NOT_PRESENT (SaErrorT)(SA_HPI_ERR_BASE - 13)
+
+/*
+** SA_ERR_HPI_INVALID_DATA_FIELD: Invalid data field.
+*/
+#define SA_ERR_HPI_INVALID_DATA_FIELD (SaErrorT)(SA_HPI_ERR_BASE - 14)
+
+/*
+** SA_ERR_HPI_INVALID_SENSOR_CMD: Invalid sensor command.
+*/
+#define SA_ERR_HPI_INVALID_SENSOR_CMD (SaErrorT)(SA_HPI_ERR_BASE - 15)
+
+/*
+** SA_ERR_HPI_NO_RESPONSE: There was no response from the domain or
+** object targeted by the command, due to some fault. This code
+** indicates an un-anticipated failure to respond; compare with
+** SA_ERR_HPI_TIMEOUT.
+*/
+#define SA_ERR_HPI_NO_RESPONSE (SaErrorT)(SA_HPI_ERR_BASE - 16)
+
+/*
+** SA_ERR_HPI_DUPLICATE: Duplicate request -- such as attempting to
+** initialize something which has already been initialized (and which
+** cannot be initialized twice).
+*/
+#define SA_ERR_HPI_DUPLICATE (SaErrorT)(SA_HPI_ERR_BASE - 17)
+
+/*
+** SA_ERR_HPI_UPDATING: The command could not be completed because
+** the targeted object is in update mode.
+*/
+#define SA_ERR_HPI_UPDATING (SaErrorT)(SA_HPI_ERR_BASE - 18)
+
+/*
+** SA_ERR_HPI_INITIALIZING: The command could not be completed because
+** the targeted object is initializing.
+*/
+#define SA_ERR_HPI_INITIALIZING (SaErrorT)(SA_HPI_ERR_BASE - 19)
+
+/*
+** SA_ERR_HPI_UNKNOWN: This code should be returned if, for some
+** reason, the HPI implementation cannot determine the proper response
+** to a command. For example, there may be a proper value to return
+** for a given call, but the implementation may be unable to determine
+** which one it is.
+*/
+#define SA_ERR_HPI_UNKNOWN (SaErrorT)(SA_HPI_ERR_BASE - 20)
+
+/*
+** SA_ERR_HPI_INVALID_SESSION: An invalid session ID was specified in
+** the command.
+*/
+#define SA_ERR_HPI_INVALID_SESSION (SaErrorT)(SA_HPI_ERR_BASE - 21)
+
+/*
+** SA_ERR_HPI_INVALID_DOMAIN: Invalid domain ID specified -- ie. a
+** domain ID which does not correspond to any real domain was
+** specified in the command.
+*/
+#define SA_ERR_HPI_INVALID_DOMAIN (SaErrorT)(SA_HPI_ERR_BASE - 22)
+
+/*
+** SA_ERR_HPI_INVALID_RESOURCE: Invalid resource ID specified -- ie. a
+** resource ID which does not correspond to a resource in the addressed
+** domain was specified in the command.
+*/
+#define SA_ERR_HPI_INVALID_RESOURCE (SaErrorT)(SA_HPI_ERR_BASE - 23)
+
+/*
+** SA_ERR_HPI_INVALID_REQUEST: The request is invalid in the current
+** context. An example would be attempting to unsubscribe for events,
+** when the caller has not subscribed to events.
+*/
+#define SA_ERR_HPI_INVALID_REQUEST (SaErrorT)(SA_HPI_ERR_BASE - 24)
+
+/*
+** SA_ERR_HPI_ENTITY_NOT_PRESENT: The addressed management instrument is not active
+** because the entity with which it is associated is not present. This
+** condition could occur, for instance, when an alarm module is managing a
+** fan tray FRU. The alarm module would contain management instruments (sensors,
+** etc) for the fan tray. The fan tray may be removed, even though the
+** management instruments are still represented in the alarm module. In this
+** case, SA_ERR_HPI_ENTITY_NOT_PRESENT would be returned if a management instrument
+** associated with a removed entity is accessed.
+*/
+#define SA_ERR_HPI_ENTITY_NOT_PRESENT (SaErrorT)(SA_HPI_ERR_BASE - 25)
+
+/*
+** SA_ERR_HPI_UNINITIALIZED: This code is returned when a request is
+** made, and the HPI has not, yet, been initialized via saHpiInitialize().
+*/
+#define SA_ERR_HPI_UNINITIALIZED (SaErrorT)(SA_HPI_ERR_BASE - 26)
+
+
+/*
+** Domain, Session and Resource Type Definitions
+*/
+
+/* Domain ID. */
+typedef SaHpiUint32T SaHpiDomainIdT;
+#define SAHPI_DEFAULT_DOMAIN_ID (SaHpiDomainIdT)0
+
+/* The SAHPI_UNSPECIFIED_DOMAIN_ID value may be used by an implementation
+** when populating the ResourceId value for an RPT entry that is a
+** domain only.
+*/
+#define SAHPI_UNSPECIFIED_DOMAIN_ID (SaHpiDomainIdT) 0xFFFFFFFF
+
+/* Session ID. */
+typedef SaHpiUint32T SaHpiSessionIdT;
+
+/* Resource identifier. */
+typedef SaHpiUint32T SaHpiResourceIdT;
+
+/* The SAHPI_UNSPECIFIED_RESOURCE_ID value may be used by an implementation
+** when populating the DomainId value for an RPT entry that is a
+** resource only. Note that this reserved value (0xFFFFFFFF) is also used
+** to designate the domain controller, for domain-based event log access.
+*/
+#define SAHPI_UNSPECIFIED_RESOURCE_ID (SaHpiResourceIdT) 0xFFFFFFFF
+
+/* The SAHPI_DOMAIN_CONTROLLER_ID value is a reserved resource ID
+** value which is used to select the domain controller's event log
+** (as opposed to a real resource's event log) when accessing logs.
+** This value must not be used as the ID of any real resource.
+*/
+#define SAHPI_DOMAIN_CONTROLLER_ID (SaHpiResourceIdT) 0xFFFFFFFE
+
+/* Table Related Type Definitions */
+typedef SaHpiUint32T SaHpiEntryIdT;
+#define SAHPI_FIRST_ENTRY (SaHpiEntryIdT)0x00000000
+#define SAHPI_LAST_ENTRY (SaHpiEntryIdT)0xFFFFFFFF
+
+/*
+** Time Related Type Definitions
+**
+** An HPI time value represents the local time as the number of nanoseconds
+** from 00:00:00, January 1, 1970, in a 64-bit signed integer. This format
+** is sufficient to represent times with nano-second resolution from the
+** year 1678 to 2262. Every API which deals with time values must define
+** the timezone used.
+**
+** It should be noted that although nano-second resolution is supported
+** in the data type, the actual resolution provided by an implementation
+** may be more limited than this.
+**
+** The value -2**63, which is 0x8000000000000000, is used to indicate
+** "unknown/unspecified time".
+**
+** Conversion to/from POSIX and other common time representations is
+** relatively straightforward. The following code framgment converts
+** between SaHpiTimeT and time_t:
+**
+** time_t tt1, tt2;
+** SaHpiTimeT saHpiTime;
+**
+** time(&tt1);
+** saHpiTime = (SaHpiTimeT) tt1 * 1000000000;
+** tt2 = saHpiTime / 1000000000;
+**
+** The following fragment converts between SaHpiTimeT and a struct timeval:
+**
+** struct timeval tv1, tv2;
+** SaHpiTimeT saHpiTime;
+**
+** gettimeofday(&tv1, NULL);
+** saHpiTime = (SaHpiTimeT) tv1.tv_sec * 1000000000 + tv1.tv_usec * 1000;
+** tv2.tv_sec = saHpiTime / 1000000000;
+** tv2.tv_usec = saHpiTime % 1000000000 / 1000;
+**
+** The following fragment converts between SaHpiTimeT and a struct timespec:
+**
+** struct timespec ts1, ts2;
+** SaHpiTimeT saHpiTime;
+**
+** clock_gettime(CLOCK_REALTIME, &ts1);
+** saHpiTime = (SaHpiTimeT) ts1.tv_sec * 1000000000 + ts1.tv_nsec;
+** ts2.tv_sec = saHpiTime / 1000000000;
+** ts2.tv_nsec = saHpiTime % 1000000000;
+**
+** Note, however, that since time_t is (effectively) universally 32 bits,
+** all of these conversions will cease to work on January 18, 2038.
+**
+** Some subsystems may need the flexibility to report either absolute or
+** relative (eg. to system boot) times. This will typically be in the
+** case of a board which may or may not, depending on the system setup,
+** have an idea of absolute time. For example, some boards may have
+** "time of day" clocks which start at zero, and never get set to the
+** time of day.
+**
+** In these cases, times which represent "current" time (in events, for
+** example) can be reported based on the clock value, whether it has been
+** set to the actual date/time, or whether it represents the elapsed time
+** since boot. If it is the time since boot, the value will be (for 27
+** years) less than 0x0C00000000000000, which is Mon May 26 16:58:48 1997.
+** If the value is greater than this, then it can be assumed to be an
+** absolute time.
+**
+** Every API which can report either absolute or relative times must
+** state this rule clearly in its interface specification.
+*/
+typedef SaHpiInt64T SaHpiTimeT; /* Time in nanoseconds */
+
+/* Unspecified or unknown time */
+#define SAHPI_TIME_UNSPECIFIED (SaHpiTimeT) 0x8000000000000000
+
+/* Maximum time that can be specified as relative */
+#define SAHPI_TIME_MAX_RELATIVE (SaHpiTimeT) 0x0C00000000000000
+typedef SaHpiInt64T SaHpiTimeoutT; /* Timeout in nanoseconds */
+
+/* Non-blocking call */
+#define SAHPI_TIMEOUT_IMMEDIATE (SaHpiTimeoutT) 0x0000000000000000
+
+/* Blocking call, wait indefinitely for call to complete */
+#define SAHPI_TIMEOUT_BLOCK (SaHpiTimeoutT) -1
+
+/*
+** Language
+**
+** This enumeration lists all of the languages that can be associated with text.
+**
+** SAHPI_LANG_UNDEF indicates that the language is unspecified or
+** unknown.
+*/
+typedef enum {
+ SAHPI_LANG_UNDEF = 0, SAHPI_LANG_AFAR, SAHPI_LANG_ABKHAZIAN,
+ SAHPI_LANG_AFRIKAANS, SAHPI_LANG_AMHARIC, SAHPI_LANG_ARABIC,
+ SAHPI_LANG_ASSAMESE, SAHPI_LANG_AYMARA, SAHPI_LANG_AZERBAIJANI,
+ SAHPI_LANG_BASHKIR, SAHPI_LANG_BYELORUSSIAN, SAHPI_LANG_BULGARIAN,
+ SAHPI_LANG_BIHARI, SAHPI_LANG_BISLAMA, SAHPI_LANG_BENGALI,
+ SAHPI_LANG_TIBETAN, SAHPI_LANG_BRETON, SAHPI_LANG_CATALAN,
+ SAHPI_LANG_CORSICAN, SAHPI_LANG_CZECH, SAHPI_LANG_WELSH,
+ SAHPI_LANG_DANISH, SAHPI_LANG_GERMAN, SAHPI_LANG_BHUTANI,
+ SAHPI_LANG_GREEK, SAHPI_LANG_ENGLISH, SAHPI_LANG_ESPERANTO,
+ SAHPI_LANG_SPANISH, SAHPI_LANG_ESTONIAN, SAHPI_LANG_BASQUE,
+ SAHPI_LANG_PERSIAN, SAHPI_LANG_FINNISH, SAHPI_LANG_FIJI,
+ SAHPI_LANG_FAEROESE, SAHPI_LANG_FRENCH, SAHPI_LANG_FRISIAN,
+ SAHPI_LANG_IRISH, SAHPI_LANG_SCOTSGAELIC, SAHPI_LANG_GALICIAN,
+ SAHPI_LANG_GUARANI, SAHPI_LANG_GUJARATI, SAHPI_LANG_HAUSA,
+ SAHPI_LANG_HINDI, SAHPI_LANG_CROATIAN, SAHPI_LANG_HUNGARIAN,
+ SAHPI_LANG_ARMENIAN, SAHPI_LANG_INTERLINGUA, SAHPI_LANG_INTERLINGUE,
+ SAHPI_LANG_INUPIAK, SAHPI_LANG_INDONESIAN, SAHPI_LANG_ICELANDIC,
+ SAHPI_LANG_ITALIAN, SAHPI_LANG_HEBREW, SAHPI_LANG_JAPANESE,
+ SAHPI_LANG_YIDDISH, SAHPI_LANG_JAVANESE, SAHPI_LANG_GEORGIAN,
+ SAHPI_LANG_KAZAKH, SAHPI_LANG_GREENLANDIC, SAHPI_LANG_CAMBODIAN,
+ SAHPI_LANG_KANNADA, SAHPI_LANG_KOREAN, SAHPI_LANG_KASHMIRI,
+ SAHPI_LANG_KURDISH, SAHPI_LANG_KIRGHIZ, SAHPI_LANG_LATIN,
+ SAHPI_LANG_LINGALA, SAHPI_LANG_LAOTHIAN, SAHPI_LANG_LITHUANIAN,
+ SAHPI_LANG_LATVIANLETTISH, SAHPI_LANG_MALAGASY, SAHPI_LANG_MAORI,
+ SAHPI_LANG_MACEDONIAN, SAHPI_LANG_MALAYALAM, SAHPI_LANG_MONGOLIAN,
+ SAHPI_LANG_MOLDAVIAN, SAHPI_LANG_MARATHI, SAHPI_LANG_MALAY,
+ SAHPI_LANG_MALTESE, SAHPI_LANG_BURMESE, SAHPI_LANG_NAURU,
+ SAHPI_LANG_NEPALI, SAHPI_LANG_DUTCH, SAHPI_LANG_NORWEGIAN,
+ SAHPI_LANG_OCCITAN, SAHPI_LANG_AFANOROMO, SAHPI_LANG_ORIYA,
+ SAHPI_LANG_PUNJABI, SAHPI_LANG_POLISH, SAHPI_LANG_PASHTOPUSHTO,
+ SAHPI_LANG_PORTUGUESE, SAHPI_LANG_QUECHUA, SAHPI_LANG_RHAETOROMANCE,
+ SAHPI_LANG_KIRUNDI, SAHPI_LANG_ROMANIAN, SAHPI_LANG_RUSSIAN,
+ SAHPI_LANG_KINYARWANDA, SAHPI_LANG_SANSKRIT, SAHPI_LANG_SINDHI,
+ SAHPI_LANG_SANGRO, SAHPI_LANG_SERBOCROATIAN, SAHPI_LANG_SINGHALESE,
+ SAHPI_LANG_SLOVAK, SAHPI_LANG_SLOVENIAN, SAHPI_LANG_SAMOAN,
+ SAHPI_LANG_SHONA, SAHPI_LANG_SOMALI, SAHPI_LANG_ALBANIAN,
+ SAHPI_LANG_SERBIAN, SAHPI_LANG_SISWATI, SAHPI_LANG_SESOTHO,
+ SAHPI_LANG_SUDANESE, SAHPI_LANG_SWEDISH, SAHPI_LANG_SWAHILI,
+ SAHPI_LANG_TAMIL, SAHPI_LANG_TELUGU, SAHPI_LANG_TAJIK,
+ SAHPI_LANG_THAI, SAHPI_LANG_TIGRINYA, SAHPI_LANG_TURKMEN,
+ SAHPI_LANG_TAGALOG, SAHPI_LANG_SETSWANA, SAHPI_LANG_TONGA,
+ SAHPI_LANG_TURKISH, SAHPI_LANG_TSONGA, SAHPI_LANG_TATAR,
+ SAHPI_LANG_TWI, SAHPI_LANG_UKRAINIAN, SAHPI_LANG_URDU,
+ SAHPI_LANG_UZBEK, SAHPI_LANG_VIETNAMESE, SAHPI_LANG_VOLAPUK,
+ SAHPI_LANG_WOLOF, SAHPI_LANG_XHOSA, SAHPI_LANG_YORUBA,
+ SAHPI_LANG_CHINESE, SAHPI_LANG_ZULU
+} SaHpiLanguageT;
+
+/*
+** Text Buffers
+**
+** These structures are used for defining the type of data in the text buffer
+** and the length of the buffer. Text buffers are used in the inventory data,
+** RDR, RPT, etc. for variable length strings of data.
+*/
+
+#define SAHPI_MAX_TEXT_BUFFER_LENGTH 255
+
+typedef enum {
+ SAHPI_TL_TYPE_BINARY = 0, /* String of bytes, any values legal */
+ SAHPI_TL_TYPE_BCDPLUS, /* String of 0-9, space, dash, period ONLY */
+ SAHPI_TL_TYPE_ASCII6, /* Reduced ASCII character set: 0x20-0x5F
+ ONLY */
+ SAHPI_TL_TYPE_LANGUAGE /* ASCII or UNICODE depending on language */
+} SaHpiTextTypeT;
+
+typedef struct {
+ SaHpiTextTypeT DataType;
+ SaHpiLanguageT Language; /* Language the text is in. */
+ SaHpiUint8T DataLength; /* Bytes used in Data buffer */
+ SaHpiUint8T Data[SAHPI_MAX_TEXT_BUFFER_LENGTH]; /* Data buffer */
+} SaHpiTextBufferT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Entities **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+/*
+** Entity Types
+**
+** Entities are used to associate specific hardware components with sensors,
+** controls, watchdogs, or resources. Entities are defined with an entity
+** type enumeration, and an entity instance number (to distinguish between
+** multiple instances of a particular type of entity; e.g., multiple power
+** supplies in a system).
+**
+** Entities are uniquely identified in a system with an ordered series of
+** Entity Type / Entity Instance pairs called an "Entity Path". Each subsequent
+** Entity Type/Entity Instance in the path is the next higher "containing"
+** entity. The "root" of the Entity Path (the outermost level of containment)
+** is designated with an Entity Type of SAHPI_ENT_ROOT if the entire Entity Path
+** is fewer than SAHPI_MAX_ENTITY_PATH entries in length.
+**
+** Enumerated Entity Types include those types enumerated by the IPMI Consortium
+** for IPMI-managed entities, as well as additional types defined by the
+** HPI specification. Room is left in the enumeration for the inclusion of
+** Entity Types taken from other lists, if needed in the future.
+*/
+/* Base values for entity types from various sources. */
+#define SAHPI_ENT_IPMI_GROUP 0
+#define SAHPI_ENT_SAFHPI_GROUP 0x10000
+#define SAHPI_ENT_ROOT_VALUE 0xFFFF
+typedef enum
+{
+ SAHPI_ENT_UNSPECIFIED = SAHPI_ENT_IPMI_GROUP,
+ SAHPI_ENT_OTHER,
+ SAHPI_ENT_UNKNOWN,
+ SAHPI_ENT_PROCESSOR,
+ SAHPI_ENT_DISK_BAY, /* Disk or disk bay */
+ SAHPI_ENT_PERIPHERAL_BAY,
+ SAHPI_ENT_SYS_MGMNT_MODULE, /* System management module */
+ SAHPI_ENT_SYSTEM_BOARD, /* Main system board, may also be
+ processor board and/or internal
+ expansion board */
+ SAHPI_ENT_MEMORY_MODULE, /* Board holding memory devices */
+ SAHPI_ENT_PROCESSOR_MODULE, /* Holds processors, use this
+ designation when processors are not
+ mounted on system board */
+ SAHPI_ENT_POWER_SUPPLY, /* Main power supply (supplies) for the
+ system */
+ SAHPI_ENT_ADD_IN_CARD,
+ SAHPI_ENT_FRONT_PANEL_BOARD, /* Control panel */
+ SAHPI_ENT_BACK_PANEL_BOARD,
+ SAHPI_ENT_POWER_SYSTEM_BOARD,
+ SAHPI_ENT_DRIVE_BACKPLANE,
+ SAHPI_ENT_SYS_EXPANSION_BOARD, /* System internal expansion board
+ (contains expansion slots). */
+ SAHPI_ENT_OTHER_SYSTEM_BOARD, /* Part of board set */
+ SAHPI_ENT_PROCESSOR_BOARD, /* Holds 1 or more processors. Includes
+ boards that hold SECC modules) */
+ SAHPI_ENT_POWER_UNIT, /* Power unit / power domain (typically
+ used as a pre-defined logical entity
+ for grouping power supplies)*/
+ SAHPI_ENT_POWER_MODULE, /* Power module / DC-to-DC converter.
+ Use this value for internal
+ converters. Note: You should use
+ entity ID (power supply) for the
+ main power supply even if the main
+ supply is a DC-to-DC converter */
+ SAHPI_ENT_POWER_MGMNT, /* Power management/distribution
+ board */
+ SAHPI_ENT_CHASSIS_BACK_PANEL_BOARD,
+ SAHPI_ENT_SYSTEM_CHASSIS,
+ SAHPI_ENT_SUB_CHASSIS,
+ SAHPI_ENT_OTHER_CHASSIS_BOARD,
+ SAHPI_ENT_DISK_DRIVE_BAY,
+ SAHPI_ENT_PERIPHERAL_BAY_2,
+ SAHPI_ENT_DEVICE_BAY,
+ SAHPI_ENT_COOLING_DEVICE, /* Fan/cooling device */
+ SAHPI_ENT_COOLING_UNIT, /* Can be used as a pre-defined logical
+ entity for grouping fans or other
+ cooling devices. */
+ SAHPI_ENT_INTERCONNECT, /* Cable / interconnect */
+ SAHPI_ENT_MEMORY_DEVICE, /* This Entity ID should be used for
+ replaceable memory devices, e.g.
+ DIMM/SIMM. It is recommended that
+ Entity IDs not be used for
+ individual non-replaceable memory
+ devices. Rather, monitoring and
+ error reporting should be associated
+ with the FRU [e.g. memory card]
+ holding the memory. */
+ SAHPI_ENT_SYS_MGMNT_SOFTWARE, /* System Management Software */
+ SAHPI_ENT_BIOS,
+ SAHPI_ENT_OPERATING_SYSTEM,
+ SAHPI_ENT_SYSTEM_BUS,
+ SAHPI_ENT_GROUP, /* This is a logical entity for use with
+ Entity Association records. It is
+ provided to allow a sensor data
+ record to point to an entity-
+ association record when there is no
+ appropriate pre-defined logical
+ entity for the entity grouping.
+ This Entity should not be used as a
+ physical entity. */
+ SAHPI_ENT_REMOTE, /* Out of band management communication
+ device */
+ SAHPI_ENT_EXTERNAL_ENVIRONMENT,
+ SAHPI_ENT_BATTERY,
+ SAHPI_ENT_CHASSIS_SPECIFIC = SAHPI_ENT_IPMI_GROUP + 0x90,
+ SAHPI_ENT_BOARD_SET_SPECIFIC = SAHPI_ENT_IPMI_GROUP + 0xB0,
+ SAHPI_ENT_OEM_SYSINT_SPECIFIC = SAHPI_ENT_IPMI_GROUP + 0xD0,
+ SAHPI_ENT_ROOT = SAHPI_ENT_ROOT_VALUE,
+ SAHPI_ENT_RACK = SAHPI_ENT_SAFHPI_GROUP,
+ SAHPI_ENT_SUBRACK,
+ SAHPI_ENT_COMPACTPCI_CHASSIS,
+ SAHPI_ENT_ADVANCEDTCA_CHASSIS,
+ SAHPI_ENT_SYSTEM_SLOT,
+ SAHPI_ENT_SBC_BLADE,
+ SAHPI_ENT_IO_BLADE,
+ SAHPI_ENT_DISK_BLADE,
+ SAHPI_ENT_DISK_DRIVE,
+ SAHPI_ENT_FAN,
+ SAHPI_ENT_POWER_DISTRIBUTION_UNIT,
+ SAHPI_ENT_SPEC_PROC_BLADE, /* Special Processing Blade,
+ including DSP */
+ SAHPI_ENT_IO_SUBBOARD, /* I/O Sub-Board, including
+ PMC I/O board */
+ SAHPI_ENT_SBC_SUBBOARD, /* SBC Sub-Board, including PMC
+ SBC board */
+ SAHPI_ENT_ALARM_MANAGER, /* Chassis alarm manager board */
+ SAHPI_ENT_ALARM_MANAGER_BLADE, /* Blade-based alarm manager */
+ SAHPI_ENT_SUBBOARD_CARRIER_BLADE /* Includes PMC Carrier Blade --
+ Use only if "carrier" is only
+ function of blade. Else use
+ primary function (SBC_BLADE,
+ DSP_BLADE, etc.). */
+ } SaHpiEntityTypeT;
+
+typedef SaHpiUint32T SaHpiEntityInstanceT;
+
+typedef struct {
+ SaHpiEntityTypeT EntityType;
+ SaHpiEntityInstanceT EntityInstance;
+} SaHpiEntityT;
+
+#define SAHPI_MAX_ENTITY_PATH 16
+
+typedef struct {
+ SaHpiEntityT Entry[SAHPI_MAX_ENTITY_PATH];
+} SaHpiEntityPathT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Events, part 1 **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** Category
+**
+** Sensor events contain an event category and event state. Depending on the
+** event category, the event states take on different meanings for events
+** generated by specific sensors.
+**
+** The SAHPI_EC_GENERIC category can be used for discrete sensors which have
+** state meanings other than those identified with other event categories.
+*/
+typedef SaHpiUint8T SaHpiEventCategoryT;
+
+#define SAHPI_EC_UNSPECIFIED (SaHpiEventCategoryT)0x00 /* Unspecified */
+#define SAHPI_EC_THRESHOLD (SaHpiEventCategoryT)0x01 /* Threshold
+ events */
+#define SAHPI_EC_USAGE (SaHpiEventCategoryT)0x02 /* Usage state
+ events */
+#define SAHPI_EC_STATE (SaHpiEventCategoryT)0x03 /* Generic state
+ events */
+#define SAHPI_EC_PRED_FAIL (SaHpiEventCategoryT)0x04 /* Predictive fail
+ events */
+#define SAHPI_EC_LIMIT (SaHpiEventCategoryT)0x05 /* Limit events */
+#define SAHPI_EC_PERFORMANCE (SaHpiEventCategoryT)0x06 /* Performance
+ events */
+#define SAHPI_EC_SEVERITY (SaHpiEventCategoryT)0x07 /* Severity
+ indicating
+ events */
+#define SAHPI_EC_PRESENCE (SaHpiEventCategoryT)0x08 /* Device presence
+ events */
+#define SAHPI_EC_ENABLE (SaHpiEventCategoryT)0x09 /* Device enabled
+ events */
+#define SAHPI_EC_AVAILABILITY (SaHpiEventCategoryT)0x0A /* Availability
+ state events */
+
+#define SAHPI_EC_REDUNDANCY (SaHpiEventCategoryT)0x0B /* Redundancy
+ state events */
+#define SAHPI_EC_USER (SaHpiEventCategoryT)0x7E /* User defined
+ events */
+#define SAHPI_EC_GENERIC (SaHpiEventCategoryT)0x7F /* OEM defined
+ events */
+
+/*
+** Event States
+**
+** The following event states are specified relative to the categories listed
+** above. The event types are only valid for their given category. Each set of
+** events is labeled as to which category it belongs to.
+** Each event will have only one event state associated with it. When retrieving
+** the event status or event enabled status a bit mask of all applicable event
+** states is used. Similarly, when setting the event enabled status a bit mask
+** of all applicable event states is used.
+*/
+typedef SaHpiUint16T SaHpiEventStateT;
+
+/*
+** SaHpiEventCategoryT == <any>
+*/
+#define SAHPI_ES_UNSPECIFIED (SaHpiEventStateT)0x0000
+
+/*
+** SaHpiEventCategoryT == SAHPI_EC_THRESHOLD
+** When using these event states, the event state should match
+** the event severity (for example SAHPI_ES_LOWER_MINOR should have an
+** event severity of SAHPI_MINOR).
+*/
+#define SAHPI_ES_LOWER_MINOR (SaHpiEventStateT)0x0001
+#define SAHPI_ES_LOWER_MAJOR (SaHpiEventStateT)0x0002
+#define SAHPI_ES_LOWER_CRIT (SaHpiEventStateT)0x0004
+#define SAHPI_ES_UPPER_MINOR (SaHpiEventStateT)0x0008
+#define SAHPI_ES_UPPER_MAJOR (SaHpiEventStateT)0x0010
+#define SAHPI_ES_UPPER_CRIT (SaHpiEventStateT)0x0020
+
+/* SaHpiEventCategoryT == SAHPI_EC_USAGE */
+#define SAHPI_ES_IDLE (SaHpiEventStateT)0x0001
+#define SAHPI_ES_ACTIVE (SaHpiEventStateT)0x0002
+#define SAHPI_ES_BUSY (SaHpiEventStateT)0x0004
+
+/* SaHpiEventCategoryT == SAHPI_EC_STATE */
+#define SAHPI_ES_STATE_DEASSERTED (SaHpiEventStateT)0x0001
+#define SAHPI_ES_STATE_ASSERTED (SaHpiEventStateT)0x0002
+
+/* SaHpiEventCategoryT == SAHPI_EC_PRED_FAIL */
+#define SAHPI_ES_PRED_FAILURE_DEASSERT (SaHpiEventStateT)0x0001
+#define SAHPI_ES_PRED_FAILURE_ASSERT (SaHpiEventStateT)0x0002
+
+/* SaHpiEventCategoryT == SAHPI_EC_LIMIT */
+#define SAHPI_ES_LIMIT_NOT_EXCEEDED (SaHpiEventStateT)0x0001
+#define SAHPI_ES_LIMIT_EXCEEDED (SaHpiEventStateT)0x0002
+
+/* SaHpiEventCategoryT == SAHPI_EC_PERFORMANCE */
+#define SAHPI_ES_PERFORMANCE_MET (SaHpiEventStateT)0x0001
+#define SAHPI_ES_PERFORMANCE_LAGS (SaHpiEventStateT)0x0002
+
+/*
+** SaHpiEventCategoryT == SAHPI_EC_SEVERITY
+** When using these event states, the event state should match
+** the event severity
+*/
+#define SAHPI_ES_OK (SaHpiEventStateT)0x0001
+#define SAHPI_ES_MINOR_FROM_OK (SaHpiEventStateT)0x0002
+#define SAHPI_ES_MAJOR_FROM_LESS (SaHpiEventStateT)0x0004
+#define SAHPI_ES_CRITICAL_FROM_LESS (SaHpiEventStateT)0x0008
+#define SAHPI_ES_MINOR_FROM_MORE (SaHpiEventStateT)0x0010
+#define SAHPI_ES_MAJOR_FROM_CRITICAL (SaHpiEventStateT)0x0020
+#define SAHPI_ES_CRITICAL (SaHpiEventStateT)0x0040
+#define SAHPI_ES_MONITOR (SaHpiEventStateT)0x0080
+#define SAHPI_ES_INFORMATIONAL (SaHpiEventStateT)0x0100
+
+/* SaHpiEventCategoryT == SAHPI_EC_PRESENCE */
+#define SAHPI_ES_ABSENT (SaHpiEventStateT)0x0001
+#define SAHPI_ES_PRESENT (SaHpiEventStateT)0x0002
+
+/* SaHpiEventCategoryT == SAHPI_EC_ENABLE */
+#define SAHPI_ES_DISABLED (SaHpiEventStateT)0x0001
+#define SAHPI_ES_ENABLED (SaHpiEventStateT)0x0002
+
+/* SaHpiEventCategoryT == SAHPI_EC_AVAILABILITY */
+#define SAHPI_ES_RUNNING (SaHpiEventStateT)0x0001
+#define SAHPI_ES_TEST (SaHpiEventStateT)0x0002
+#define SAHPI_ES_POWER_OFF (SaHpiEventStateT)0x0004
+#define SAHPI_ES_ON_LINE (SaHpiEventStateT)0x0008
+#define SAHPI_ES_OFF_LINE (SaHpiEventStateT)0x0010
+#define SAHPI_ES_OFF_DUTY (SaHpiEventStateT)0x0020
+#define SAHPI_ES_DEGRADED (SaHpiEventStateT)0x0040
+#define SAHPI_ES_POWER_SAVE (SaHpiEventStateT)0x0080
+#define SAHPI_ES_INSTALL_ERROR (SaHpiEventStateT)0x0100
+
+/* SaHpiEventCategoryT == SAHPI_EC_REDUNDANCY */
+#define SAHPI_ES_FULLY_REDUNDANT (SaHpiEventStateT)0x0001
+#define SAHPI_ES_REDUNDANCY_LOST (SaHpiEventStateT)0x0002
+#define SAHPI_ES_REDUNDANCY_DEGRADED (SaHpiEventStateT)0x0004
+#define SAHPI_ES_REDUNDANCY_LOST_SUFFICIENT_RESOURCES \
+ (SaHpiEventStateT)0x0008
+#define SAHPI_ES_NON_REDUNDANT_SUFFICIENT_RESOURCES \
+ (SaHpiEventStateT)0x0010
+#define SAHPI_ES_NON_REDUNDANT_INSUFFICIENT_RESOURCES \
+ (SaHpiEventStateT)0x0020
+#define SAHPI_ES_REDUNDANCY_DEGRADED_FROM_FULL (SaHpiEventStateT)0x0040
+#define SAHPI_ES_REDUNDANCY_DEGRADED_FROM_NON (SaHpiEventStateT)0x0080
+
+/*
+** SaHpiEventCategoryT == SAHPI_EC_GENERIC || SAHPI_EC_USER
+** These event states are defined by the OEM or the user of the
+** implementation.
+*/
+#define SAHPI_ES_STATE_00 (SaHpiEventStateT)0x0001
+#define SAHPI_ES_STATE_01 (SaHpiEventStateT)0x0002
+#define SAHPI_ES_STATE_02 (SaHpiEventStateT)0x0004
+#define SAHPI_ES_STATE_03 (SaHpiEventStateT)0x0008
+#define SAHPI_ES_STATE_04 (SaHpiEventStateT)0x0010
+#define SAHPI_ES_STATE_05 (SaHpiEventStateT)0x0020
+#define SAHPI_ES_STATE_06 (SaHpiEventStateT)0x0040
+#define SAHPI_ES_STATE_07 (SaHpiEventStateT)0x0080
+#define SAHPI_ES_STATE_08 (SaHpiEventStateT)0x0100
+#define SAHPI_ES_STATE_09 (SaHpiEventStateT)0x0200
+#define SAHPI_ES_STATE_10 (SaHpiEventStateT)0x0400
+#define SAHPI_ES_STATE_11 (SaHpiEventStateT)0x0800
+#define SAHPI_ES_STATE_12 (SaHpiEventStateT)0x1000
+#define SAHPI_ES_STATE_13 (SaHpiEventStateT)0x2000
+#define SAHPI_ES_STATE_14 (SaHpiEventStateT)0x4000
+
+
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Sensors **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* Sensor Number */
+typedef SaHpiUint8T SaHpiSensorNumT;
+
+/* Type of Sensor */
+typedef enum {
+ SAHPI_TEMPERATURE = 0x01,
+ SAHPI_VOLTAGE,
+ SAHPI_CURRENT,
+ SAHPI_FAN,
+ SAHPI_PHYSICAL_SECURITY,
+ SAHPI_PLATFORM_VIOLATION,
+ SAHPI_PROCESSOR,
+ SAHPI_POWER_SUPPLY,
+ SAHPI_POWER_UNIT,
+ SAHPI_COOLING_DEVICE,
+ SAHPI_OTHER_UNITS_BASED_SENSOR,
+ SAHPI_MEMORY,
+ SAHPI_DRIVE_SLOT,
+ SAHPI_POST_MEMORY_RESIZE,
+ SAHPI_SYSTEM_FW_PROGRESS,
+ SAHPI_EVENT_LOGGING_DISABLED,
+ SAHPI_RESERVED1,
+ SAHPI_SYSTEM_EVENT,
+ SAHPI_CRITICAL_INTERRUPT,
+ SAHPI_BUTTON,
+ SAHPI_MODULE_BOARD,
+ SAHPI_MICROCONTROLLER_COPROCESSOR,
+ SAHPI_ADDIN_CARD,
+ SAHPI_CHASSIS,
+ SAHPI_CHIP_SET,
+ SAHPI_OTHER_FRU,
+ SAHPI_CABLE_INTERCONNECT,
+ SAHPI_TERMINATOR,
+ SAHPI_SYSTEM_BOOT_INITIATED,
+ SAHPI_BOOT_ERROR,
+ SAHPI_OS_BOOT,
+ SAHPI_OS_CRITICAL_STOP,
+ SAHPI_SLOT_CONNECTOR,
+ SAHPI_SYSTEM_ACPI_POWER_STATE,
+ SAHPI_RESERVED2,
+ SAHPI_PLATFORM_ALERT,
+ SAHPI_ENTITY_PRESENCE,
+ SAHPI_MONITOR_ASIC_IC,
+ SAHPI_LAN,
+ SAHPI_MANAGEMENT_SUBSYSTEM_HEALTH,
+ SAHPI_BATTERY,
+ SAHPI_OPERATIONAL = 0xA0,
+ SAHPI_OEM_SENSOR=0xC0
+} SaHpiSensorTypeT;
+
+/*
+** Interpreted Sensor Reading Type
+**
+** These definitions list the available data types that can be
+** used for interpreted sensor readings. Interpreted sensor readings are provided
+** because typically sensors measure their associated entities in a way that is
+** not human readable/understandable. For example a fan sensor may measure the
+** number of ticks that it takes a fan blade to move passed a sensor. The human
+** readable reading type would be revolutions per minute (RPM).
+*/
+
+#define SAHPI_SENSOR_BUFFER_LENGTH 32
+
+typedef enum {
+ SAHPI_SENSOR_INTERPRETED_TYPE_UINT8,
+ SAHPI_SENSOR_INTERPRETED_TYPE_UINT16,
+ SAHPI_SENSOR_INTERPRETED_TYPE_UINT32,
+ SAHPI_SENSOR_INTERPRETED_TYPE_INT8,
+ SAHPI_SENSOR_INTERPRETED_TYPE_INT16,
+ SAHPI_SENSOR_INTERPRETED_TYPE_INT32,
+ SAHPI_SENSOR_INTERPRETED_TYPE_FLOAT32,
+ SAHPI_SENSOR_INTERPRETED_TYPE_BUFFER /* 32 byte array */
+} SaHpiSensorInterpretedTypeT;
+
+typedef union {
+ SaHpiUint8T SensorUint8;
+ SaHpiUint16T SensorUint16;
+ SaHpiUint32T SensorUint32;
+ SaHpiInt8T SensorInt8;
+ SaHpiInt16T SensorInt16;
+ SaHpiInt32T SensorInt32;
+ SaHpiFloat32T SensorFloat32;
+ SaHpiUint8T SensorBuffer[SAHPI_SENSOR_BUFFER_LENGTH];
+} SaHpiSensorInterpretedUnionT;
+
+typedef struct {
+ SaHpiSensorInterpretedTypeT Type;
+ SaHpiSensorInterpretedUnionT Value;
+} SaHpiSensorInterpretedT;
+
+/*
+** Sensor Status
+**
+** The sensor status structure is used to determine if sensor scanning is
+** enabled and if events are enabled. If events are enabled, the structure will
+** have valid data for the outstanding sensor event states.
+*/
+typedef SaHpiUint8T SaHpiSensorStatusT;
+#define SAHPI_SENSTAT_EVENTS_ENABLED (SaHpiSensorStatusT)0x80
+#define SAHPI_SENSTAT_SCAN_ENABLED (SaHpiSensorStatusT)0x40
+#define SAHPI_SENSTAT_BUSY (SaHpiSensorStatusT)0x20
+
+typedef struct {
+ SaHpiSensorStatusT SensorStatus;
+ SaHpiEventStateT EventStatus;
+} SaHpiSensorEvtStatusT;
+
+/* Sensor Event Enables */
+typedef struct {
+ SaHpiSensorStatusT SensorStatus;
+ SaHpiEventStateT AssertEvents;
+ SaHpiEventStateT DeassertEvents;
+} SaHpiSensorEvtEnablesT;
+
+/*
+** Sensor Reading
+**
+** The sensor reading type is the data structure returned from a call to get
+** sensor reading. The structure is also used when setting and getting sensor
+** threshold values and reporting sensor ranges.
+** Each sensor may support one or more of raw, interpreted, or event status
+** representations of the sensor data. For analog sensors the raw value is the
+** raw value from the sensor (such as ticks per fan blade) and the interpreted
+** value is the raw value converted in to a usable format (such as RPM). The
+** interpreted value can be calculated by the HPI implementation using the
+** sensor factors or by another OEM means.
+*/
+typedef SaHpiUint8T SaHpiSensorReadingFormatsT;
+#define SAHPI_SRF_RAW (SaHpiSensorReadingFormatsT)0x01
+#define SAHPI_SRF_INTERPRETED (SaHpiSensorReadingFormatsT)0x02
+#define SAHPI_SRF_EVENT_STATE (SaHpiSensorReadingFormatsT)0x04
+
+typedef struct {
+ SaHpiSensorReadingFormatsT ValuesPresent;
+ SaHpiUint32T Raw;
+ SaHpiSensorInterpretedT Interpreted;
+ SaHpiSensorEvtStatusT EventStatus;
+} SaHpiSensorReadingT;
+
+/*
+** Threshold Values
+** This structure encompasses all of the thresholds that can be set.
+*/
+typedef struct {
+ SaHpiSensorReadingT LowCritical; /* Lower Critical Threshold */
+ SaHpiSensorReadingT LowMajor; /* Lower Major Threshold */
+ SaHpiSensorReadingT LowMinor; /* Lower Minor Threshold */
+ SaHpiSensorReadingT UpCritical; /* Upper critical Threshold */
+ SaHpiSensorReadingT UpMajor; /* Upper major Threshold */
+ SaHpiSensorReadingT UpMinor; /* Upper minor Threshold */
+ SaHpiSensorReadingT PosThdHysteresis; /* Positive Threshold Hysteresis */
+ SaHpiSensorReadingT NegThdHysteresis; /* Negative Threshold Hysteresis */
+}SaHpiSensorThresholdsT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Sensor Resource Data Records **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** Sensor Factors
+**
+** The sensor factors structure defines the conversion factors for linear and
+** linearized sensors.
+** The SaHpiSensorLinearizationT enumeration coupled with the various other
+** sensor factors define a formula that can be applied to raw sensor data to
+** convert it to appropriate engineering units. If linearization is
+** SAHPI_SL_NONLINEAR, SAHPI_SL_UNSPECIFIED, or SAHPI_SL_OEM then there is no
+** predefined conversion from raw to interpreted and the sensor factors may or
+** may not be meaningful depending on the implementation.
+** For other linearization values, raw readings may be converted to interpreted
+** values using the formula:
+**Interpreted = L [( M*raw + B*10^ExpB )*10^ExpR ]
+**where "L[x]" is the indicated linearization function
+** (for SAHPI_SL_LINEAR, L[x]=x).
+** The Tolerance Factor is given as +/- 1/2 raw counts, so tolerance in
+** interpreted values can be calculated as:
+** L[ M * ToleranceFactor/2 * 10^ExpR ]
+** The Accuracy Factor is given as 1/100 of a percent, scaled up by ExpA. Thus
+** the accuracy is:
+**( ( AccuracyFactor/100 ) / 10^ExpA )%
+*/
+typedef enum {
+ SAHPI_SL_LINEAR = 0, /* Already linear */
+ SAHPI_SL_LN,
+ SAHPI_SL_LOG10,
+ SAHPI_SL_LOG2,
+ SAHPI_SL_E,
+ SAHPI_SL_EXP10,
+ SAHPI_SL_EXP2,
+ SAHPI_SL_1OVERX,
+ SAHPI_SL_SQRX,
+ SAHPI_SL_CUBEX,
+ SAHPI_SL_SQRTX,
+ SAHPI_SL_CUBERTX,
+ SAHPI_SL_NONLINEAR = 0x70, /* Cannot be linearized with a predefind formula*/
+ SAHPI_SL_OEM,
+ SAHPI_SL_UNSPECIFIED = 0xFF
+} SaHpiSensorLinearizationT;
+
+typedef struct {
+ SaHpiInt16T M_Factor; /* M Factor */
+ SaHpiInt16T B_Factor; /* B Factor */
+ SaHpiUint16T AccuracyFactor; /* Accuracy */
+ SaHpiUint8T ToleranceFactor; /* Tolerance */
+ SaHpiUint8T ExpA; /* Accuracy Exp */
+ SaHpiInt8T ExpR; /* Result Exp */
+ SaHpiInt8T ExpB; /* B Exp */
+ SaHpiSensorLinearizationT Linearization;
+} SaHpiSensorFactorsT;
+
+/*
+** Sensor Range
+** Sensor range values can include minimum, maximum, normal minimum, normal
+** maximum, and nominal values.
+*/
+typedef SaHpiUint8T SaHpiSensorRangeFlagsT;
+#define SAHPI_SRF_MIN (SaHpiSensorRangeFlagsT)0x10
+#define SAHPI_SRF_MAX (SaHpiSensorRangeFlagsT)0x08
+#define SAHPI_SRF_NORMAL_MIN (SaHpiSensorRangeFlagsT)0x04
+#define SAHPI_SRF_NORMAL_MAX (SaHpiSensorRangeFlagsT)0x02
+#define SAHPI_SRF_NOMINAL (SaHpiSensorRangeFlagsT)0x01
+
+typedef struct {
+ SaHpiSensorRangeFlagsT Flags;
+ SaHpiSensorReadingT Max;
+ SaHpiSensorReadingT Min;
+ SaHpiSensorReadingT Nominal;
+ SaHpiSensorReadingT NormalMax;
+ SaHpiSensorReadingT NormalMin;
+} SaHpiSensorRangeT;
+
+/*
+** Sensor Units
+** This is a list of all the sensor units supported by HPI.
+*/
+typedef enum {
+ SAHPI_SU_UNSPECIFIED = 0, SAHPI_SU_DEGREES_C, SAHPI_SU_DEGREES_F,
+ SAHPI_SU_DEGREES_K, SAHPI_SU_VOLTS, SAHPI_SU_AMPS,
+ SAHPI_SU_WATTS, SAHPI_SU_JOULES, SAHPI_SU_COULOMBS,
+ SAHPI_SU_VA, SAHPI_SU_NITS, SAHPI_SU_LUMEN,
+ SAHPI_SU_LUX, SAHPI_SU_CANDELA, SAHPI_SU_KPA,
+ SAHPI_SU_PSI, SAHPI_SU_NEWTON, SAHPI_SU_CFM,
+ SAHPI_SU_RPM, SAHPI_SU_HZ, SAHPI_SU_MICROSECOND,
+ SAHPI_SU_MILLISECOND, SAHPI_SU_SECOND, SAHPI_SU_MINUTE,
+ SAHPI_SU_HOUR, SAHPI_SU_DAY, SAHPI_SU_WEEK,
+ SAHPI_SU_MIL, SAHPI_SU_INCHES, SAHPI_SU_FEET,
+ SAHPI_SU_CU_IN, SAHPI_SU_CU_FEET, SAHPI_SU_MM,
+ SAHPI_SU_CM, SAHPI_SU_M, SAHPI_SU_CU_CM,
+ SAHPI_SU_CU_M, SAHPI_SU_LITERS, SAHPI_SU_FLUID_OUNCE,
+ SAHPI_SU_RADIANS, SAHPI_SU_STERADIANS, SAHPI_SU_REVOLUTIONS,
+ SAHPI_SU_CYCLES, SAHPI_SU_GRAVITIES, SAHPI_SU_OUNCE,
+ SAHPI_SU_POUND, SAHPI_SU_FT_LB, SAHPI_SU_OZ_IN,
+ SAHPI_SU_GAUSS, SAHPI_SU_GILBERTS, SAHPI_SU_HENRY,
+ SAHPI_SU_MILLIHENRY, SAHPI_SU_FARAD, SAHPI_SU_MICROFARAD,
+ SAHPI_SU_OHMS, SAHPI_SU_SIEMENS, SAHPI_SU_MOLE,
+ SAHPI_SU_BECQUEREL, SAHPI_SU_PPM, SAHPI_SU_RESERVED,
+ SAHPI_SU_DECIBELS, SAHPI_SU_DBA, SAHPI_SU_DBC,
+ SAHPI_SU_GRAY, SAHPI_SU_SIEVERT, SAHPI_SU_COLOR_TEMP_DEG_K,
+ SAHPI_SU_BIT, SAHPI_SU_KILOBIT, SAHPI_SU_MEGABIT,
+ SAHPI_SU_GIGABIT, SAHPI_SU_BYTE, SAHPI_SU_KILOBYTE,
+ SAHPI_SU_MEGABYTE, SAHPI_SU_GIGABYTE, SAHPI_SU_WORD,
+ SAHPI_SU_DWORD, SAHPI_SU_QWORD, SAHPI_SU_LINE,
+ SAHPI_SU_HIT, SAHPI_SU_MISS, SAHPI_SU_RETRY,
+ SAHPI_SU_RESET, SAHPI_SU_OVERRUN, SAHPI_SU_UNDERRUN,
+ SAHPI_SU_COLLISION, SAHPI_SU_PACKETS, SAHPI_SU_MESSAGES,
+ SAHPI_SU_CHARACTERS, SAHPI_SU_ERRORS, SAHPI_SU_CORRECTABLE_ERRORS,
+ SAHPI_SU_UNCORRECTABLE_ERRORS
+} SaHpiSensorUnitsT;
+
+/*
+** Modifier Unit Use
+** This type defines how the modifier unit is used. For example: base unit ==
+** meter, modifier unit == seconds, and modifier unit use ==
+** SAHPI_SMUU_BASIC_OVER_MODIFIER. The resulting unit would be meters per second.
+*/
+typedef enum {
+ SAHPI_SMUU_NONE = 0,
+ SAHPI_SMUU_BASIC_OVER_MODIFIER, /* Basic Unit / Modifier Unit */
+ SAHPI_SMUU_BASIC_TIMES_MODIFIER /* Basic Unit * Modifier Unit */
+} SaHpiSensorModUnitUseT;
+
+/*
+** Sign Format
+** This type defines what the sign format of the sensor's raw value is (1's
+** complement, unsigned, etc.).
+*/
+typedef enum {
+ SAHPI_SDF_UNSIGNED = 0,
+ SAHPI_SDF_1S_COMPLEMENT,
+ SAHPI_SDF_2S_COMPLEMENT
+} SaHpiSensorSignFormatT;
+
+/*
+** Data Format
+** This structure encapsulates all of the various types that make up the
+** definition of sensor data.
+*/
+typedef struct {
+ SaHpiSensorReadingFormatsT ReadingFormats; /* Indicates if sensor supports
+ readings in raw, interpreted,
+ and/or event status formats */
+ SaHpiBoolT IsNumeric; /* If FALSE, rest of this
+ structure is not
+ meaningful */
+ SaHpiSensorSignFormatT SignFormat; /* Signed format */
+ SaHpiSensorUnitsT BaseUnits; /* Base units (meters, etc.) */
+ SaHpiSensorUnitsT ModifierUnits; /* Modifier unit (second, etc.) */
+ SaHpiSensorModUnitUseT ModifierUse; /* Modifier use(m/sec, etc.) */
+ SaHpiBoolT FactorsStatic; /* True if the sensor factors
+ are static. If false
+ factors vary over sensor
+ range, and are not
+ accessible through HPI */
+ SaHpiSensorFactorsT Factors;
+ SaHpiBoolT Percentage; /* Is value a percentage */
+ SaHpiSensorRangeT Range; /* Valid range of sensor */
+} SaHpiSensorDataFormatT;
+
+/*
+** Threshold Support
+**
+** These types define what threshold values are readable, writable, and fixed.
+** It also defines how the threshold values are read and written.
+*/
+typedef SaHpiUint8T SaHpiSensorThdMaskT;
+#define SAHPI_STM_LOW_MINOR (SaHpiSensorThdMaskT)0x01
+#define SAHPI_STM_LOW_MAJOR (SaHpiSensorThdMaskT)0x02
+#define SAHPI_STM_LOW_CRIT (SaHpiSensorThdMaskT)0x04
+#define SAHPI_STM_UP_MINOR (SaHpiSensorThdMaskT)0x08
+#define SAHPI_STM_UP_MAJOR (SaHpiSensorThdMaskT)0x10
+#define SAHPI_STM_UP_CRIT (SaHpiSensorThdMaskT)0x20
+#define SAHPI_STM_UP_HYSTERESIS (SaHpiSensorThdMaskT)0x40
+#define SAHPI_STM_LOW_HYSTERESIS (SaHpiSensorThdMaskT)0x80
+
+typedef SaHpiUint8T SaHpiSensorThdCapT;
+#define SAHPI_STC_RAW (SaHpiSensorThdMaskT)0x01 /* read/write as
+ raw counts */
+#define SAHPI_STC_INTERPRETED (SaHpiSensorThdMaskT)0x02 /* read/write as
+ interpreted */
+
+typedef struct {
+ SaHpiBoolT IsThreshold; /* True if the sensor
+ supports thresholds. If false,
+ rest of structure is not
+ meaningful. */
+ SaHpiSensorThdCapT TholdCapabilities;
+ SaHpiSensorThdMaskT ReadThold; /* Readable thresholds */
+ SaHpiSensorThdMaskT WriteThold; /* Writable thresholds */
+ SaHpiSensorThdMaskT FixedThold; /* Fixed thresholds */
+} SaHpiSensorThdDefnT;
+
+/*
+** Event Control
+**
+** This type defines how sensor event messages can be controlled (can be turned
+** off and on for each type of event, etc.).
+*/
+typedef enum {
+ SAHPI_SEC_PER_EVENT = 0, /* Event message control per event */
+ SAHPI_SEC_ENTIRE_SENSOR, /* Control for entire sensor only */
+ SAHPI_SEC_GLOBAL_DISABLE, /* Global disable of events only */
+ SAHPI_SEC_NO_EVENTS /* Events not supported */
+} SaHpiSensorEventCtrlT;
+
+/*
+** Record
+**
+** This is the sensor resource data record which describes all of the static
+** data associated with a sensor.
+*/
+typedef struct {
+ SaHpiSensorNumT Num; /* Sensor Number/Index */
+ SaHpiSensorTypeT Type; /* General Sensor Type */
+ SaHpiEventCategoryT Category; /* Event category */
+ SaHpiSensorEventCtrlT EventCtrl; /* How events can be controlled */
+ SaHpiEventStateT Events; /* Bit mask of event states
+ supported */
+ SaHpiBoolT Ignore; /* Ignore sensor (entity not
+ present, disabled, etc.) */
+ SaHpiSensorDataFormatT DataFormat; /* Format of the data */
+ SaHpiSensorThdDefnT ThresholdDefn; /* Threshold Definition */
+ SaHpiUint32T Oem; /* Reserved for OEM use */
+} SaHpiSensorRecT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Aggregate Status **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* These are the default sensor numbers for aggregate status. */
+#define SAHPI_DEFAGSENS_OPER (SaHpiSensorNumT)0xFE
+#define SAHPI_DEFAGSENS_PWR (SaHpiSensorNumT)0xFD
+#define SAHPI_DEFAGSENS_TEMP (SaHpiSensorNumT)0xFC
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Controls **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* Control Number */
+typedef SaHpiUint8T SaHpiCtrlNumT;
+
+/*
+** Type of Control
+**
+** This enumerated type defines the different types of generic controls.
+*/
+typedef enum {
+ SAHPI_CTRL_TYPE_DIGITAL = 0x00,
+ SAHPI_CTRL_TYPE_DISCRETE,
+ SAHPI_CTRL_TYPE_ANALOG,
+ SAHPI_CTRL_TYPE_STREAM,
+ SAHPI_CTRL_TYPE_TEXT,
+ SAHPI_CTRL_TYPE_OEM = 0xC0
+} SaHpiCtrlTypeT;
+
+/*
+** Control State Type Definitions
+**
+** Defines the types of control states.
+*/
+typedef enum {
+ SAHPI_CTRL_STATE_OFF = 0,
+ SAHPI_CTRL_STATE_ON,
+ SAHPI_CTRL_STATE_PULSE_OFF,
+ SAHPI_CTRL_STATE_PULSE_ON,
+ SAHPI_CTRL_STATE_AUTO = 0xFF
+} SaHpiCtrlStateDigitalT;
+
+typedef SaHpiUint32T SaHpiCtrlStateDiscreteT;
+
+typedef SaHpiInt32T SaHpiCtrlStateAnalogT;
+
+#define SAHPI_CTRL_MAX_STREAM_LENGTH 4
+typedef struct {
+ SaHpiBoolT Repeat; /* Repeat flag */
+ SaHpiUint32T StreamLength; /* Length of the data, in bytes,
+ ** stored in the stream. */
+ SaHpiUint8T Stream[SAHPI_CTRL_MAX_STREAM_LENGTH];
+} SaHpiCtrlStateStreamT;
+
+typedef SaHpiUint8T SaHpiTxtLineNumT;
+
+/* Reserved number for sending output to all lines */
+#define SAHPI_TLN_ALL_LINES (SaHpiTxtLineNumT)0xFF
+
+typedef struct {
+ SaHpiTxtLineNumT Line; /* Operate on line # */
+ SaHpiTextBufferT Text; /* Text to display */
+} SaHpiCtrlStateTextT;
+
+#define SAHPI_CTRL_MAX_OEM_BODY_LENGTH 255
+typedef struct {
+ SaHpiManufacturerIdT MId;
+ SaHpiUint8T BodyLength;
+ SaHpiUint8T Body[SAHPI_CTRL_MAX_OEM_BODY_LENGTH]; /* OEM Specific */
+} SaHpiCtrlStateOemT;
+
+typedef union {
+ SaHpiCtrlStateDigitalT Digital;
+ SaHpiCtrlStateDiscreteT Discrete;
+ SaHpiCtrlStateAnalogT Analog;
+ SaHpiCtrlStateStreamT Stream;
+ SaHpiCtrlStateTextT Text;
+ SaHpiCtrlStateOemT Oem;
+} SaHpiCtrlStateUnionT;
+
+typedef struct {
+ SaHpiCtrlTypeT Type; /* Type of control */
+ SaHpiCtrlStateUnionT StateUnion; /* Data for control type */
+} SaHpiCtrlStateT;
+
+
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Control Resource Data Records **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** Output Type
+**
+** This enumeration defines the what the control's output will be.
+*/
+typedef enum {
+ SAHPI_CTRL_GENERIC = 0,
+ SAHPI_CTRL_LED,
+ SAHPI_CTRL_FAN_SPEED,
+ SAHPI_CTRL_DRY_CONTACT_CLOSURE,
+ SAHPI_CTRL_POWER_SUPPLY_INHIBIT,
+ SAHPI_CTRL_AUDIBLE,
+ SAHPI_CTRL_FRONT_PANEL_LOCKOUT,
+ SAHPI_CTRL_POWER_INTERLOCK,
+ SAHPI_CTRL_POWER_STATE,
+ SAHPI_CTRL_LCD_DISPLAY,
+ SAHPI_CTRL_OEM
+} SaHpiCtrlOutputTypeT;
+
+/*
+** Specific Record Types
+** These types represent the specific types of control resource data records.
+*/
+typedef struct {
+ SaHpiCtrlStateDigitalT Default;
+} SaHpiCtrlRecDigitalT;
+
+typedef struct {
+ SaHpiCtrlStateDiscreteT Default;
+} SaHpiCtrlRecDiscreteT;
+
+typedef struct {
+ SaHpiCtrlStateAnalogT Min; /* Minimum Value */
+ SaHpiCtrlStateAnalogT Max; /* Maximum Value */
+ SaHpiCtrlStateAnalogT Default;
+} SaHpiCtrlRecAnalogT;
+
+typedef struct {
+ SaHpiCtrlStateStreamT Default;
+} SaHpiCtrlRecStreamT;
+
+typedef struct {
+ SaHpiUint8T MaxChars; /* Maximum chars per line */
+ SaHpiUint8T MaxLines; /* Maximum # of lines */
+ SaHpiLanguageT Language; /* Language Code */
+ SaHpiTextTypeT DataType; /* Permitted Data */
+ SaHpiCtrlStateTextT Default;
+} SaHpiCtrlRecTextT;
+
+#define SAHPI_CTRL_OEM_CONFIG_LENGTH 10
+typedef struct {
+ SaHpiManufacturerIdT MId;
+ SaHpiUint8T ConfigData[SAHPI_CTRL_OEM_CONFIG_LENGTH];
+ SaHpiCtrlStateOemT Default;
+} SaHpiCtrlRecOemT;
+
+typedef union {
+ SaHpiCtrlRecDigitalT Digital;
+ SaHpiCtrlRecDiscreteT Discrete;
+ SaHpiCtrlRecAnalogT Analog;
+ SaHpiCtrlRecStreamT Stream;
+ SaHpiCtrlRecTextT Text;
+ SaHpiCtrlRecOemT Oem;
+} SaHpiCtrlRecUnionT;
+
+/*
+** Record Definition
+** Definition of the control resource data record.
+*/
+typedef struct {
+ SaHpiCtrlNumT Num; /* Control Number/Index */
+ SaHpiBoolT Ignore; /* Ignore control (entity
+ not present, disabled, etc.) */
+ SaHpiCtrlOutputTypeT OutputType;
+ SaHpiCtrlTypeT Type; /* Type of control */
+ SaHpiCtrlRecUnionT TypeUnion; /* Specific control record */
+ SaHpiUint32T Oem; /* Reserved for OEM use */
+} SaHpiCtrlRecT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Entity Inventory Data **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+/*
+** These structures are used to read and write inventory data to entity inventory
+** repositories within a resource.
+*/
+/*
+** Entity Inventory Repository ID
+** Identifier for an entity inventory repository.
+*/
+typedef SaHpiUint8T SaHpiEirIdT;
+#define SAHPI_DEFAULT_INVENTORY_ID (SaHpiEirIdT)0x00
+
+/* Data Validity */
+typedef enum {
+ SAHPI_INVENT_DATA_VALID,
+ SAHPI_INVENT_DATA_INVALID,
+ SAHPI_INVENT_DATA_OVERFLOW
+} SaHpiInventDataValidityT;
+
+/* Inventory Record definitions */
+typedef enum {
+ SAHPI_INVENT_RECTYPE_INTERNAL_USE = 0xB0,
+ SAHPI_INVENT_RECTYPE_CHASSIS_INFO,
+ SAHPI_INVENT_RECTYPE_BOARD_INFO,
+ SAHPI_INVENT_RECTYPE_PRODUCT_INFO,
+ SAHPI_INVENT_RECTYPE_OEM = 0xC0
+} SaHpiInventDataRecordTypeT;
+
+typedef enum {
+ SAHPI_INVENT_CTYP_OTHER = 1,
+ SAHPI_INVENT_CTYP_UNKNOWN,
+ SAHPI_INVENT_CTYP_DESKTOP,
+ SAHPI_INVENT_CTYP_LOW_PROFILE_DESKTOP,
+ SAHPI_INVENT_CTYP_PIZZA_BOX,
+ SAHPI_INVENT_CTYP_MINI_TOWER,
+ SAHPI_INVENT_CTYP_TOWER,
+ SAHPI_INVENT_CTYP_PORTABLE,
+ SAHPI_INVENT_CTYP_LAPTOP,
+ SAHPI_INVENT_CTYP_NOTEBOOK,
+ SAHPI_INVENT_CTYP_HANDHELD,
+ SAHPI_INVENT_CTYP_DOCKING_STATION,
+ SAHPI_INVENT_CTYP_ALLINONE,
+ SAHPI_INVENT_CTYP_SUBNOTEBOOK,
+ SAHPI_INVENT_CTYP_SPACE_SAVING,
+ SAHPI_INVENT_CTYP_LUNCH_BOX,
+ SAHPI_INVENT_CTYP_MAIN_SERVER,
+ SAHPI_INVENT_CTYP_EXPANSION,
+ SAHPI_INVENT_CTYP_SUBCHASSIS,
+ SAHPI_INVENT_CTYP_BUS_EXPANSION_CHASSIS,
+ SAHPI_INVENT_CTYP_PERIPHERAL_CHASSIS,
+ SAHPI_INVENT_CTYP_RAID_CHASSIS,
+ SAHPI_INVENT_CTYP_RACKMOUNT
+} SaHpiInventChassisTypeT;
+
+typedef struct {
+ SaHpiUint8T Data[1]; /* Variable length opaque data */
+} SaHpiInventInternalUseDataT;
+
+typedef struct {
+ SaHpiTimeT MfgDateTime; /* May be set to
+ SAHPI_TIME_UNSPECIFIED
+ if manufacturing
+ date/time not available */
+ SaHpiTextBufferT *Manufacturer;
+ SaHpiTextBufferT *ProductName;
+ SaHpiTextBufferT *ProductVersion;
+ SaHpiTextBufferT *ModelNumber;
+ SaHpiTextBufferT *SerialNumber;
+ SaHpiTextBufferT *PartNumber;
+ SaHpiTextBufferT *FileId;
+ SaHpiTextBufferT *AssetTag;
+ SaHpiTextBufferT *CustomField[1]; /* Variable number of fields,
+ last is NULL */
+} SaHpiInventGeneralDataT;
+
+typedef struct {
+ SaHpiInventChassisTypeT Type; /* Type of chassis */
+ SaHpiInventGeneralDataT GeneralData;
+} SaHpiInventChassisDataT;
+
+typedef struct {
+ SaHpiManufacturerIdT MId;/* OEM Manuf. ID */
+ SaHpiUint8T Data[1]; /* Variable length data, defined by OEM,
+ Length derived from DataLength in
+ SaHpiInventDataRecordT structure:
+ DataLength - 4(because DataLength
+ includes the MId) */
+} SaHpiInventOemDataT;
+
+typedef union {
+ SaHpiInventInternalUseDataT InternalUse;
+ SaHpiInventChassisDataT ChassisInfo;
+ SaHpiInventGeneralDataT BoardInfo;
+ SaHpiInventGeneralDataT ProductInfo;
+ SaHpiInventOemDataT OemData;
+} SaHpiInventDataUnionT;
+
+typedef struct {
+ SaHpiInventDataRecordTypeT RecordType;
+ SaHpiUint32T DataLength; /* Length of Data field for
+ this record */
+ SaHpiInventDataUnionT RecordData; /* Variable length data */
+} SaHpiInventDataRecordT;
+
+typedef struct {
+ SaHpiInventDataValidityT Validity; /* Indication as to whether data
+ Returned by
+ saHpiEntityInventoryDataRead() is
+ complete and valid. Unless this
+ flag indicates valid data,
+ saHpiEntityInventoryDataWrite() will
+ not take any actions except to
+ return an error.*/
+ SaHpiInventDataRecordT *DataRecords[1]; /* Array of pointers to inventory
+ Data Records. Variable
+ number of entries. Last
+ entry is NULL. */
+} SaHpiInventoryDataT;
+
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Inventory Resource Data Records **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** All inventory data contained in an entity inventory repository
+** must be represented in the RDR repository
+** with an SaHpiInventoryRecT.
+*/
+typedef struct {
+ SaHpiEirIdT EirId;
+ SaHpiUint32T Oem;
+} SaHpiInventoryRecT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Watchdogs **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** This section defines all of the data types associated with watchdog timers.
+*/
+
+/* Watchdog Number - Identifier for a watchdog timer. */
+typedef SaHpiUint8T SaHpiWatchdogNumT;
+#define SAHPI_DEFAULT_WATCHDOG_NUM (SaHpiWatchdogNumT)0x00
+
+/*
+** Watchdog Timer Action
+**
+** These enumerations represent the possible actions to be taken upon watchdog
+** timer timeout and the events that are generated for watchdog actions.
+*/
+typedef enum {
+ SAHPI_WA_NO_ACTION = 0,
+ SAHPI_WA_RESET,
+ SAHPI_WA_POWER_DOWN,
+ SAHPI_WA_POWER_CYCLE
+} SaHpiWatchdogActionT;
+
+typedef enum {
+ SAHPI_WAE_NO_ACTION = 0,
+ SAHPI_WAE_RESET,
+ SAHPI_WAE_POWER_DOWN,
+ SAHPI_WAE_POWER_CYCLE,
+ SAHPI_WAE_TIMER_INT=0x08 /* Used if Timer Preinterrupt only */
+} SaHpiWatchdogActionEventT;
+
+/*
+** Watchdog Pre-timer Interrupt
+**
+** These enumerations represent the possible types of interrupts that may be
+** triggered by a watchdog pre-timer event. The actual meaning of these
+** operations may differ depending on the hardware architecture.
+*/
+typedef enum {
+ SAHPI_WPI_NONE = 0,
+ SAHPI_WPI_SMI,
+ SAHPI_WPI_NMI,
+ SAHPI_WPI_MESSAGE_INTERRUPT,
+ SAHPI_WPI_OEM = 0x0F
+} SaHpiWatchdogPretimerInterruptT;
+
+/*
+** Watchdog Timer Use
+**
+** These enumerations represent the possible watchdog users that may have caused
+** the watchdog to expire. For instance, if watchdog is being used during power
+** on self test (POST), and it expires, the SAHPI_WTU_BIOS_POST expiration type
+** will be set. Most specific uses for Watchdog timer by users of HPI should
+** indicate SAHPI_WTU_SMS_OS if the use is to provide an OS-healthy heartbeat,
+** or SAHPI_WTU_OEM if it is used for some other purpose.
+*/
+typedef enum {
+ SAHPI_WTU_NONE = 0,
+ SAHPI_WTU_BIOS_FRB2,
+ SAHPI_WTU_BIOS_POST,
+ SAHPI_WTU_OS_LOAD,
+ SAHPI_WTU_SMS_OS, /* System Management System providing
+ heartbeat for OS */
+ SAHPI_WTU_OEM,
+ SAHPI_WTU_UNSPECIFIED = 0x0F
+} SaHpiWatchdogTimerUseT;
+
+/*
+** Timer Use Expiration Flags
+** These values are used for the Watchdog Timer Use Expiration flags in the
+** SaHpiWatchdogT structure.
+*/
+typedef SaHpiUint8T SaHpiWatchdogExpFlagsT;
+#define SAHPI_WATCHDOG_EXP_BIOS_FRB2 (SaHpiWatchdogExpFlagsT)0x02
+#define SAHPI_WATCHDOG_EXP_BIOS_POST (SaHpiWatchdogExpFlagsT)0x04
+#define SAHPI_WATCHDOG_EXP_OS_LOAD (SaHpiWatchdogExpFlagsT)0x08
+#define SAHPI_WATCHDOG_EXP_SMS_OS (SaHpiWatchdogExpFlagsT)0x10
+#define SAHPI_WATCHDOG_EXP_OEM (SaHpiWatchdogExpFlagsT)0x20
+
+/*
+** Watchdog Structure
+**
+** This structure is used by the saHpiWatchdogTimerGet() and
+** saHpiWatchdogTimerSet() functions. The use of the structure varies slightly by
+** each function.
+**
+** For saHpiWatchdogTimerGet() :
+**
+** Log - indicates whether or not the Watchdog is configured to
+** issue an event when it next times out. TRUE=event will
+** be issued on timeout.
+** Running - indicates whether or not the Watchdog is currently
+** running or stopped. TRUE=Watchdog is running.
+** TimerUse - indicates the current use of the timer; one of five
+** preset uses which was included on the last
+** saHpiWatchdogTimerSet() function call, or through some
+** other implementation-dependent means to start the
+** Watchdog timer.
+** TimerAction - indicates what action will be taken when the Watchdog
+** times out.
+** PretimerInterrupt - indicates which action will be taken
+** "PreTimeoutInterval" seconds prior to Watchdog timer
+** expiration.
+** PreTimeoutInterval - indicates how many milliseconds prior to timer time
+** out the PretimerInterrupt action will be taken. If
+** "PreTimeoutInterval" = 0, the PretimerInterrupt action
+** will occur concurrently with "TimerAction." HPI
+** implementations may not be able to support millisecond
+** resolution and may have a maximum value restriction.
+** These restrictions should be documented by the
+** provider of the HPI interface.
+** TimerUseExpFlags - set of five bit flags which indicate that a Watchdog
+** timer timeout has occurred while the corresponding
+** TimerUse value was set. Once set, these flags stay
+** set until specifically cleared with a
+** saHpiWatchdogTimerSet() call, or by some other
+** implementation-dependent means.
+** InitialCount - The time, in milliseconds, before the timer will time
+** out after a saHpiWatchdogTimerReset() function call is
+** made, or some other implementation-dependent strobe is
+** sent to the Watchdog. HPI implementations may not be
+** able to support millisecond resolution and may have a
+** maximum value restriction. These restrictions should
+** be documented by the provider of the HPI interface.
+** PresentCount - The remaining time in milliseconds before the timer
+** will time out unless a saHpiWatchdogTimerReset()
+** function call is made, or some other implementation-
+** dependent strobe is sent to the Watchdog.
+** HPI implementations may not be able to support
+** millisecond resolution on watchdog timers, but will
+** return the number of clock ticks remaining times the
+** number of milliseconds between each tick.
+**
+** For saHpiWatchdogTimerSet():
+**
+** Log - indicates whether or not the Watchdog should issue
+** an event when it next times out. TRUE=event will be
+** issued on timeout.
+** Running - indicates whether or not the Watchdog should be
+** stopped before updating.
+** TRUE = Watchdog is not stopped. If it is already
+** stopped, it will remain stopped, but if it is
+** running, it will continue to run, with the
+** countdown timer reset to the new InitialCount.
+** Note that there is a race condition possible
+** with this setting, so it should be used with
+** care.
+** FALSE = Watchdog is stopped. After
+** saHpiWatchdogTimerSet() is called, a subsequent
+** call to saHpiWatchdogTimerReset() is required to
+** start the timer.
+** TimerUse - indicates the current use of the timer. Will control
+** which TimerUseExpFlag is set if the timer expires.
+** TimerAction - indicates what action will be taken when the Watchdog
+** times out.
+** PretimerInterrupt - indicates which action will be taken
+** "PreTimeoutInterval" seconds prior to Watchdog timer
+** expiration.
+** PreTimeoutInterval - indicates how many milliseconds prior to timer time
+** out the PretimerInterrupt action will be taken. If
+** "PreTimeoutInterval" = 0, the PretimerInterrupt action
+** will occur concurrently with "TimerAction." HPI
+** implementations may not be able to support millisecond
+** resolution and may have a maximum value restriction.
+** These restrictions should be documented by the
+** provider of the HPI interface.
+** TimerUseExpFlags - Set of five bit flags corresponding to the five
+** TimerUse values. For each bit set, the corresponding
+** Timer Use Expiration Flag will be CLEARED. Generally,
+** a program should only clear the Timer Use Expiration
+** Flag corresponding to its own TimerUse, so that other
+** software, which may have used the timer for another
+** purpose in the past can still read its TimerUseExpFlag
+** to determine whether or not the timer expired during
+** that use.
+** InitialCount - The time, in milliseconds, before the timer will time
+** out after a saHpiWatchdogTimerReset() function call is
+** made, or some other implementation-dependent strobe is
+** sent to the Watchdog. HPI implementations may not be
+** able to support millisecond resolution and may have a
+** maximum value restriction. These restrictions should
+** be documented by the provider of the HPI interface.
+** PresentCount - Not used on saHpiWatchdogTimerSet() function. Ignored.
+**
+*/
+
+typedef struct {
+ SaHpiBoolT Log;
+ SaHpiBoolT Running;
+ SaHpiWatchdogTimerUseT TimerUse;
+ SaHpiWatchdogActionT TimerAction;
+ SaHpiWatchdogPretimerInterruptT PretimerInterrupt;
+ SaHpiUint32T PreTimeoutInterval;
+ SaHpiWatchdogExpFlagsT TimerUseExpFlags;
+ SaHpiUint32T InitialCount;
+ SaHpiUint32T PresentCount;
+} SaHpiWatchdogT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Watchdog Resource Data Records **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** When the "Watchdog" capability is set in a resource, a watchdog with an
+** identifier of SAHPI_DEFAULT_WATCHDOG_NUM is required. All watchdogs must be
+** represented in the RDR repository with an SaHpiWatchdogRecT, including the
+** watchdog with an identifier of SAHPI_DEFAULT_WATCHDOG_NUM.
+*/
+typedef struct {
+ SaHpiWatchdogNumT WatchdogNum;
+ SaHpiUint32T Oem;
+} SaHpiWatchdogRecT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Resource Data Record **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** The following describes the different types of records that exist within a
+** RDR repository and the RDR super-structure to all of the specific RDR types
+** (sensor, inventory data, watchdog, etc.).
+*/
+typedef enum {
+ SAHPI_NO_RECORD,
+ SAHPI_CTRL_RDR,
+ SAHPI_SENSOR_RDR,
+ SAHPI_INVENTORY_RDR,
+ SAHPI_WATCHDOG_RDR
+} SaHpiRdrTypeT;
+
+typedef union {
+ SaHpiCtrlRecT CtrlRec;
+ SaHpiSensorRecT SensorRec;
+ SaHpiInventoryRecT InventoryRec;
+ SaHpiWatchdogRecT WatchdogRec;
+} SaHpiRdrTypeUnionT;
+
+typedef struct {
+ SaHpiEntryIdT RecordId;
+ SaHpiRdrTypeT RdrType;
+ SaHpiEntityPathT Entity; /* Entity to which this RDR relates. */
+ SaHpiRdrTypeUnionT RdrTypeUnion;
+ SaHpiTextBufferT IdString;
+} SaHpiRdrT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Hot Swap **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* Power State */
+typedef enum {
+ SAHPI_HS_POWER_OFF = 0,
+ SAHPI_HS_POWER_ON,
+ SAHPI_HS_POWER_CYCLE
+} SaHpiHsPowerStateT;
+
+/* Hot Swap Indicator State */
+typedef enum {
+ SAHPI_HS_INDICATOR_OFF = 0,
+ SAHPI_HS_INDICATOR_ON
+} SaHpiHsIndicatorStateT;
+
+/* Hot Swap Action */
+typedef enum {
+ SAHPI_HS_ACTION_INSERTION = 0,
+ SAHPI_HS_ACTION_EXTRACTION
+} SaHpiHsActionT;
+
+/* Hot Swap State */
+typedef enum {
+ SAHPI_HS_STATE_INACTIVE = 0,
+ SAHPI_HS_STATE_INSERTION_PENDING,
+ SAHPI_HS_STATE_ACTIVE_HEALTHY,
+ SAHPI_HS_STATE_ACTIVE_UNHEALTHY,
+ SAHPI_HS_STATE_EXTRACTION_PENDING,
+ SAHPI_HS_STATE_NOT_PRESENT
+} SaHpiHsStateT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Events, Part 2 **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* Event Data Structures */
+
+/*
+** Sensor Optional Data
+**
+** Sensor events may contain optional data items passed and stored with the
+** event. If these optional data items are present, they will be included with
+** the event data returned in response to a saHpiEventGet() or
+** saHpiEventLogEntryGet() function call. Also, the optional data items may be
+** included with the event data passed to the saHpiEventLogEntryAdd() function.
+**
+** Specific implementations of HPI may have restrictions on how much data may
+** be passed to saHpiEventLogEntryAdd(). These restrictions should be documented
+** by the provider of the HPI interface.
+*/
+typedef enum {
+ SAHPI_CRITICAL = 0,
+ SAHPI_MAJOR,
+ SAHPI_MINOR,
+ SAHPI_INFORMATIONAL,
+ SAHPI_OK,
+ SAHPI_DEBUG = 0xF0
+} SaHpiSeverityT;
+
+typedef SaHpiUint8T SaHpiSensorOptionalDataT;
+
+#define SAHPI_SOD_TRIGGER_READING (SaHpiSensorOptionalDataT)0x01
+#define SAHPI_SOD_TRIGGER_THRESHOLD (SaHpiSensorOptionalDataT)0x02
+#define SAHPI_SOD_OEM (SaHpiSensorOptionalDataT)0x04
+#define SAHPI_SOD_PREVIOUS_STATE (SaHpiSensorOptionalDataT)0x08
+#define SAHPI_SOD_SENSOR_SPECIFIC (SaHpiSensorOptionalDataT)0x10
+
+typedef struct {
+ SaHpiSensorNumT SensorNum;
+ SaHpiSensorTypeT SensorType;
+ SaHpiEventCategoryT EventCategory;
+ SaHpiBoolT Assertion; /* TRUE = Event State asserted
+ FALSE = deasserted */
+ SaHpiEventStateT EventState; /* State being asserted
+ deasserted */
+ SaHpiSensorOptionalDataT OptionalDataPresent;
+ SaHpiSensorReadingT TriggerReading; /* Reading that triggered
+ the event */
+ SaHpiSensorReadingT TriggerThreshold;
+ SaHpiEventStateT PreviousState;
+ SaHpiUint32T Oem;
+ SaHpiUint32T SensorSpecific;
+} SaHpiSensorEventT;
+
+typedef struct {
+ SaHpiHsStateT HotSwapState;
+ SaHpiHsStateT PreviousHotSwapState;
+} SaHpiHotSwapEventT;
+
+typedef struct {
+ SaHpiWatchdogNumT WatchdogNum;
+ SaHpiWatchdogActionEventT WatchdogAction;
+ SaHpiWatchdogPretimerInterruptT WatchdogPreTimerAction;
+ SaHpiWatchdogTimerUseT WatchdogUse;
+} SaHpiWatchdogEventT;
+
+#define SAHPI_OEM_EVENT_DATA_SIZE 32
+typedef struct {
+ SaHpiManufacturerIdT MId;
+ SaHpiUint8T OemEventData[SAHPI_OEM_EVENT_DATA_SIZE];
+} SaHpiOemEventT;
+
+/*
+** User events may be used for storing custom events created by the application / middleware;
+** eg. when injecting events into the event log using saHpiEventLogEntryAdd().
+*/
+#define SAHPI_USER_EVENT_DATA_SIZE 32
+typedef struct {
+ SaHpiUint8T UserEventData[SAHPI_USER_EVENT_DATA_SIZE];
+} SaHpiUserEventT;
+
+typedef enum {
+ SAHPI_ET_SENSOR,
+ SAHPI_ET_HOTSWAP,
+ SAHPI_ET_WATCHDOG,
+ SAHPI_ET_OEM,
+ SAHPI_ET_USER
+} SaHpiEventTypeT;
+
+typedef union {
+ SaHpiSensorEventT SensorEvent;
+ SaHpiHotSwapEventT HotSwapEvent;
+ SaHpiWatchdogEventT WatchdogEvent;
+ SaHpiOemEventT OemEvent;
+ SaHpiUserEventT UserEvent;
+} SaHpiEventUnionT;
+
+typedef struct {
+ SaHpiResourceIdT Source;
+ SaHpiEventTypeT EventType;
+ SaHpiTimeT Timestamp;
+ SaHpiSeverityT Severity;
+ SaHpiEventUnionT EventDataUnion;
+} SaHpiEventT;
+
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Parameter Control **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+typedef enum {
+ SAHPI_DEFAULT_PARM = 0,
+ SAHPI_SAVE_PARM,
+ SAHPI_RESTORE_PARM
+} SaHpiParmActionT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Reset **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+typedef enum {
+ SAHPI_COLD_RESET = 0,
+ SAHPI_WARM_RESET,
+ SAHPI_RESET_ASSERT,
+ SAHPI_RESET_DEASSERT
+} SaHpiResetActionT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Resource Presence Table **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* This section defines the types associated with the RPT. */
+
+typedef struct {
+ SaHpiUint32T UpdateCount; /* This count is incremented any time the table
+ is changed. It rolls over to zero when the
+ maximum value is reached */
+ SaHpiTimeT UpdateTimestamp; /* This time is set any time the table is
+ changed. If the implementation cannot
+ supply an absolute timestamp, then it may
+ supply a timestamp relative to some system-
+ defined epoch, such as system boot. The
+ value SAHPI_TIME_UNSPECIFIED indicates that
+ the time of the update cannot be determined.
+ Otherwise, If the value is less than or
+ equal to SAHPI_TIME_MAX_RELATIVE, then it
+ is relative; if it is greater than
+ SAHPI_TIME_MAX_RELATIVE, then it is absolute. */
+} SaHpiRptInfoT;
+
+/*
+** Resource Info Type Definitions
+**
+**
+** SaHpiResourceInfoT contains static configuration data concerning the
+** management controller associated with the resource, or the resource itself.
+** Note this information is used to describe the resource; that is, the piece of
+** infrastructure which manages an entity (or multiple entities) - NOT the entities
+** for which the resource provides management. The purpose of the
+** SaHpiResourceInfoT structure is to provide information that the HPI user may
+** need in order to interact correctly with the resource (e.g., recognize a
+** specific management controller which may have defined OEM fields in sensors,
+** OEM controls, etc.).
+**
+** All of the fields in the following structure may or may not be used by a
+** given resource.
+*/
+typedef struct {
+ SaHpiUint8T ResourceRev;
+ SaHpiUint8T SpecificVer;
+ SaHpiUint8T DeviceSupport;
+ SaHpiManufacturerIdT ManufacturerId;
+ SaHpiUint16T ProductId;
+ SaHpiUint8T FirmwareMajorRev;
+ SaHpiUint8T FirmwareMinorRev;
+ SaHpiUint8T AuxFirmwareRev;
+} SaHpiResourceInfoT;
+
+/*
+** Resource Capabilities
+**
+** This definition defines the capabilities of a given resource. One resource
+** may support any number of capabilities using the bit mask. Every resource
+** must set at least one of these capabilities; ie. zero is not a valid value
+** for a resource's capabilities.
+**
+** SAHPI_CAPABILITY_DOMAIN
+** SAHPI_CAPABILITY_RESOURCE
+** SAHPI_CAPABILITY_EVT_DEASSERTS
+** Indicates that all sensors on the resource have the property that their
+** Assertion and Deassertion event enable flags are the same. That is,
+** for all event states whose assertion triggers an event, it is
+** guaranteed that the deassertion of that event will also
+** trigger an event. Thus, the user may track the state of sensors on the
+** resource by monitoring events rather than polling for state changes.
+** SAHPI_CAPABILITY_AGGREGATE_STATUS
+** SAHPI_CAPABILITY_CONFIGURATION
+** SAHPI_CAPABILITY_MANAGED_HOTSWAP
+** Indicates that the resource supports managed hotswap. Since hotswap only
+** makes sense for field-replaceable units, the SAHPI_CAPABILITY_FRU
+** capability bit must also be set for this resource.
+** SAHPI_CAPABILITY_WATCHDOG
+** SAHPI_CAPABILITY_CONTROL
+** SAHPI_CAPABILITY_FRU
+** Indicates that the resource is a field-replaceable unit; i.e., it is
+** capable of being removed and replaced in a live system. This does not
+** necessarily imply that the resource supports managed hotswap.
+** SAHPI_CAPABILITY_INVENTORY_DATA
+** SAHPI_CAPABILITY_SEL
+** SAHPI_CAPABILITY_RDR
+** Indicates that a resource data record (RDR) repository is supplied
+** by the resource. Since the existence of an RDR is mandatory, this
+** capability must be asserted.
+** SAHPI_CAPABILITY_SENSOR
+*/
+
+typedef SaHpiUint32T SaHpiCapabilitiesT;
+#define SAHPI_CAPABILITY_DOMAIN (SaHpiCapabilitiesT)0x80000000
+#define SAHPI_CAPABILITY_RESOURCE (SaHpiCapabilitiesT)0X40000000
+#define SAHPI_CAPABILITY_EVT_DEASSERTS (SaHpiCapabilitiesT)0x00008000
+#define SAHPI_CAPABILITY_AGGREGATE_STATUS (SaHpiCapabilitiesT)0x00002000
+#define SAHPI_CAPABILITY_CONFIGURATION (SaHpiCapabilitiesT)0x00001000
+#define SAHPI_CAPABILITY_MANAGED_HOTSWAP (SaHpiCapabilitiesT)0x00000800
+#define SAHPI_CAPABILITY_WATCHDOG (SaHpiCapabilitiesT)0x00000400
+#define SAHPI_CAPABILITY_CONTROL (SaHpiCapabilitiesT)0x00000200
+#define SAHPI_CAPABILITY_FRU (SaHpiCapabilitiesT)0x00000100
+#define SAHPI_CAPABILITY_INVENTORY_DATA (SaHpiCapabilitiesT)0x00000008
+#define SAHPI_CAPABILITY_SEL (SaHpiCapabilitiesT)0x00000004
+#define SAHPI_CAPABILITY_RDR (SaHpiCapabilitiesT)0x00000002
+#define SAHPI_CAPABILITY_SENSOR (SaHpiCapabilitiesT)0x00000001
+
+/*
+** RPT Entry
+**
+** This structure is used to store the RPT entry information.
+**
+** The ResourceCapabilities field definies the capabilities of the resource.
+** This field must be non-zero for all valid resources.
+**
+** The ResourceTag field is an informational value that supplies the caller with naming
+** information for the resource. This should be set to the "user-visible" name for a
+** resource, which can be used to identify the resource in messages to a human operator.
+** For example, it could be set to match a physical printed label attached to the primary
+** entity which the resource manages. See section 5.2.6, saHpiResourceTagSet(), on page 33.
+*/
+typedef struct {
+ SaHpiEntryIdT EntryId;
+ SaHpiResourceIdT ResourceId;
+ SaHpiResourceInfoT ResourceInfo;
+ SaHpiEntityPathT ResourceEntity; /* If resource manages a FRU, entity path of the FRU */
+ /* If resource manages a single entity, entity path of
+ that entity. */
+ /* If resource manages multiple entities, the
+ entity path of the "primary" entity managed by the
+ resource */
+ /* Must be set to the same value in every domain which
+ contains this resource */
+ SaHpiCapabilitiesT ResourceCapabilities; /* Must be non-0. */
+ SaHpiSeverityT ResourceSeverity; /* Indicates the criticality that
+ should be raised when the resource
+ is not responding */
+ SaHpiDomainIdT DomainId; /* The Domain ID is used when the resource
+ is also a domain. */
+ SaHpiTextBufferT ResourceTag;
+} SaHpiRptEntryT;
+
+
+
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** System Event Log **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+/* This section defines the types associated with the SEL. */
+/*
+** Event Log Information
+**
+** The Entries entry denotes the number of active entries contained in the log.
+** The Size entry denotes the total number of entries the log is able to hold.
+** The UpdateTimestamp entry denotes the timestamp of the last addition,
+** deletion or log clear operation.
+** The CurrentTime entry denotes the log's idea of the current time; i.e the
+** timestamp that would be placed on an entry if it was added now.
+** The Enabled entry indicates whether the log is enabled. If the event log
+** is "disabled" no events generated within the HPI implementation will be
+** added to the event log. Events may still be added to the event log with
+** the saHpiEventLogEntryAdd() function. When the event log is "enabled"
+** events may be automatically added to the event log as they are generated
+** in a resource or a domain, however, it is implementation-specific which
+** events are automatically added to any event log.
+** The OverflowFlag entry indicates the log has overflowed. Events have been
+** dropped or overwritten due to a table overflow.
+** The OverflowAction entry indicates the behavior of the SEL when an overflow
+** occurs.
+** The DeleteEntrySupported indicates whether the delete command is supported for
+** event log entries. Note that clearing an entire log is valid even if this
+** flag is not set.
+*/
+typedef enum {
+ SAHPI_SEL_OVERFLOW_DROP, /* New entries are dropped when log is full*/
+ SAHPI_SEL_OVERFLOW_WRAP, /* Log wraps when log is full */
+ SAHPI_SEL_OVERFLOW_WRITELAST /* Last entry overwritten when log is full */
+} SaHpiSelOverflowActionT;
+
+typedef struct {
+ SaHpiUint32T Entries;
+ SaHpiUint32T Size;
+ SaHpiTimeT UpdateTimestamp;
+ SaHpiTimeT CurrentTime;
+ SaHpiBoolT Enabled;
+ SaHpiBoolT OverflowFlag;
+ SaHpiSelOverflowActionT OverflowAction;
+ SaHpiBoolT DeleteEntrySupported;
+} SaHpiSelInfoT;
+/*
+** Event Log Entry
+** These types define the event log entry.
+*/
+typedef SaHpiUint32T SaHpiSelEntryIdT;
+/* Reserved values for event log entry IDs */
+#define SAHPI_OLDEST_ENTRY (SaHpiSelEntryIdT)0x00000000
+#define SAHPI_NEWEST_ENTRY (SaHpiSelEntryIdT)0xFFFFFFFF
+#define SAHPI_NO_MORE_ENTRIES (SaHpiSelEntryIdT)0xFFFFFFFE
+
+
+
+typedef struct {
+ SaHpiSelEntryIdT EntryId; /* Entry ID for record */
+ SaHpiTimeT Timestamp; /* Time at which the event was placed
+ in the event log. The value
+ SAHPI_TIME_UNSPECIFIED indicates that
+ the time of the event cannot be
+ determined; otherwise, if less than
+ or equal to SAHPI_TIME_MAX_RELATIVE,
+ then it relative; if it is greater than
+ SAHPI_TIME_MAX_RELATIVE, then it is absolute. */
+ SaHpiEventT Event; /* Logged Event */
+} SaHpiSelEntryT;
+
+
+
+
+
+/*******************************************************************************
+**
+** Name: saHpiInitialize
+**
+** Description:
+** This function allows the management service an opportunity to perform
+** platform-specific initialization. saHpiInitialize() must be called
+** before any other functions are called.
+**
+** Parameters:
+** HpiImplVersion - [out] Pointer to the version of the HPI
+** implementation.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned. SA_ERR_HPI_DUPLICATE is returned when the HPI has already
+** been initialized. Once one saHpiInitialize() call has been made,
+** another one cannot be made until after a saHpiFinalize() call is made.
+**
+**
+** Remarks:
+** This function returns the version of the HPI implementation. Note: If
+** the HPI interface version is needed it can be retrieved from the
+** SAHPI_INTERFACE_VERSION definition.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiInitialize(
+ SAHPI_OUT SaHpiVersionT *HpiImplVersion
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiFinalize
+**
+** Description:
+** This function allows the management service an opportunity to perform
+** platform-specific cleanup. All sessions should be closed (see
+** saHpiSessionClose()), before this function is executed. All open
+** sessions will be forcibly closed upon execution of this command.
+**
+** Parameters:
+** None.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None. 5 Domains
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiFinalize (
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSessionOpen
+**
+** Description:
+** This function opens a HPI session for a given domain and set of
+** security characteristics (future). This function call assumes that a
+** pre-arranged agreement between caller and the HPI implementation
+** identifies the resources within the specified domain. As a future
+** roadmap item, functions for discovery of domains and allocation of
+** resources within domains may be developed.
+**
+** Parameters:
+** DomainId - [in] Domain ID to be controlled by middleware/application.
+** A domain ID of SAHPI_DEFAULT_DOMAIN_ID indicates the default domain.
+** SessionId - [out] Pointer to a location to store a handle to the newly
+** opened session. This handle is used for subsequent access to domain
+** resources and events.
+** SecurityParams - [in] Pointer to security and permissions data
+** structure. This parameter is reserved for future use, and must be set
+** to NULL.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned. SA_ERR_HPI_INVALID_DOMAIN is returned if no domain
+** matching the specified domain ID exists.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSessionOpen (
+ SAHPI_IN SaHpiDomainIdT DomainId,
+ SAHPI_OUT SaHpiSessionIdT *SessionId,
+ SAHPI_IN void *SecurityParams
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSessionClose
+**
+** Description:
+** This function closes a HPI session. After closing a session, the
+** session ID will no longer be valid.
+**
+** Parameters:
+** SessionId - [in] Session handle previously obtained using
+** saHpiSessionOpen().
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSessionClose (
+ SAHPI_IN SaHpiSessionIdT SessionId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourcesDiscover
+**
+** Description:
+** This function requests the underlying management service to discover
+** information about the resources it controls for the domain associated
+** with the open session. This function may be called during operation to
+** regenerate the RPT table. For those FRUs that must be discovered by
+** polling, latency between FRU insertion and actual addition of the
+** resource associated with that FRU to the RPT exists. To overcome this
+** latency, a discovery of all present resources may be forced by calling
+** saHpiResourcesDiscover ().
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourcesDiscover (
+ SAHPI_IN SaHpiSessionIdT SessionId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiRptInfoGet
+**
+** Description:
+** This function is used for requesting information about the resource
+** presence table (RPT) such as an update counter and timestamp. This is
+** particularly useful when using saHpiRptEntryGet() (see page 31).
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** RptInfo - [out] Pointer to the information describing the resource
+** presence table.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiRptInfoGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_OUT SaHpiRptInfoT *RptInfo
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiRptEntryGet
+**
+** Description:
+** This function retrieves resource information for the specified entry
+** of the resource presence table. This function allows the caller to
+** read the RPT entry-by-entry. If the EntryID parameter is set to
+** SAHPI_FIRST_ENTRY, the first entry in the RPT will be returned. When
+** an entry is successfully retrieved, *NextEntryID will be set to the
+** ID of the next valid entry; however, when the last entry has been
+** retrieved, *NextEntryID will be set to SAHPI_LAST_ENTRY. To retrieve
+** an entire list of entries, call this function first with an EntryID of
+** SAHPI_FIRST_ENTRY and then use the returned NextEntryID in the next
+** call. Proceed until the NextEntryID returned is SAHPI_LAST_ENTRY. At
+** initialization, the user may not wish to turn on eventing, since the
+** context of the events, as provided by the RPT, is not known. In this
+** instance, if a FRU is inserted into the system while the RPT is being
+** read entry by entry, the resource associated with that FRU may be
+** missed. (Keep in mind that there is no specified ordering for the RPT
+** entries.) The update counter provides a means for insuring that no
+** resources are missed when stepping through the RPT. In order to use
+** this feature, the user should invoke saHpiRptInfoGet(), and get the
+** update counter value before retrieving the first RPT entry. After
+** reading the last entry, the user should again invoke the
+** saHpiRptInfoGet() to get the update counter value. If the update
+** counter has not been incremented, no new records have been added.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** EntryId - [in] Handle of the entry to retrieve from the RPT. Reserved
+** entry ID values: SAHPI_FIRST_ENTRY Get first entry SAHPI_LAST_ENTRY
+** Reserved as delimiter for end of list. Not a valid entry identifier.
+**
+** NextEntryId - [out] Pointer to location to store the record ID of next
+** entry in RPT.
+** RptEntry - [out] Pointer to the structure to hold the returned RPT
+** entry.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiRptEntryGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiEntryIdT EntryId,
+ SAHPI_OUT SaHpiEntryIdT *NextEntryId,
+ SAHPI_OUT SaHpiRptEntryT *RptEntry
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiRptEntryGetByResourceId
+**
+** Description:
+** This function retrieves resource information from the resource
+** presence table for the specified resource using its resource ID.
+** Typically at start-up, the RPT is read entry-by-entry, using
+** saHpiRptEntryGet(). From this, the caller can establish the set of
+** resource IDs to use for future calls to the HPI functions. However,
+** there may be other ways of learning resource IDs without first reading
+** the RPT. For example, resources may be added to the domain while the
+** system is running in response to a hot-swap action. When a resource is
+** added, the application will receive a hot-swap event containing the
+** resource ID of the new resource. The application may then want to
+** search the RPT for more detailed information on the newly added
+** resource. In this case, the resource ID can be used to locate the
+** applicable RPT entry information.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource whose RPT entry should
+** be returned.
+** RptEntry - [out] Pointer to structure to hold the returned RPT entry.
+**
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiRptEntryGetByResourceId (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiRptEntryT *RptEntry
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourceSeveritySet
+**
+** Description:
+** This function allows the caller to set the severity level applied to
+** an event issued if a resource unexpectedly becomes unavailable to the
+** HPI. A resource may become unavailable for several reasons including:
+** ? The FRU associated with the resource is no longer present in the
+** system (a surprise extraction has occurred) ? A catastrophic failure
+** has occurred Typically, the HPI implementation will provide an
+** appropriate default value for this parameter, which may vary by
+** resource; management software can override this default value by use
+** of this function ? If a resource is removed from, then re-added to the
+** RPT (e.g., because of a hot-swap action), the HPI implementation may
+** reset the value of this parameter.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource for which the severity
+** level will be set.
+** Severity - [in] Severity level of event issued when the resource
+** unexpectedly becomes unavailable to the HPI.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceSeveritySet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSeverityT Severity
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourceTagSet
+**
+** Description:
+** This function allows the caller to set the resource tag for a
+** particular resource. The resource tag is an informational value that
+** supplies the caller with naming information for the resource. This
+** should be set to the "user-visible" name for a resource, which can be
+** used to identify the resource in messages to a human operator. For
+** example, it could be set to match a physical, printed label attached
+** to the entity associated with the resource. Typically, the HPI
+** implementation will provide an appropriate default value for this
+** parameter; this function is provided so that management software can
+** override the default, if desired. The value of the resource tag may be
+** retrieved from the resource's RPT entry. Note: If a resource is
+** removed from, then re-added to the RPT (e.g., because of a hot-swap
+** action), the HPI implementation may reset the value of this parameter.
+**
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource for which the resource
+** tag should be set.
+** ResourceTag - [in] Pointer to string representing the resource tag.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceTagSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiTextBufferT *ResourceTag
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourceIdGet
+**
+** Description:
+** This function returns the resource ID of the resource associated with
+** the entity upon which the caller is running.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [out] Pointer to location to hold the returned resource
+** ID.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned. SA_ERR_HPI_NOT_PRESENT is returned if the entity the
+** caller is running on is not manageable in the addressed domain.
+** SA_ERR_HPI_UNKNOWN is returned if the domain controller cannot
+** determine an appropriate response. That is, there may be an
+** appropriate resource ID in the domain to return, but it cannot be
+** determined.
+**
+** Remarks:
+** This function must be issued within a session to a domain that
+** includes a resource associated with the entity upon which the caller
+** is running, or the SA_ERR_HPI_NOT_PRESENT return will be issued. Since
+** entities are contained within other entities, there may be multiple
+** possible resources that could be returned to this call. For example,
+** if there is a resource ID associated with a particular compute blade
+** upon which the caller is running, and another associated with the
+** chassis which contains the compute blade, either could logically be
+** returned as an indication of a resource associated with the entity
+** upon which the caller was running. The function should return the
+** resource ID of the "smallest" resource that is associated with the
+** caller. So, in the example above, the function should return the
+** resource ID of the compute blade. Once the function has returned the
+** resourceID, the caller may issue further HPI calls using that
+** resourceID to learn the type of resource that been identified.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceIdGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_OUT SaHpiResourceIdT *ResourceId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEntitySchemaGet
+**
+** Description:
+** This function returns the identifier of the Entity Schema for the HPI
+** implementation. This schema defines valid Entity Paths that may be
+** returned by the HPI implementation.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** SchemaId - [out] Pointer to the ID of the schema in use; zero
+** indicates that a custom schema is in use.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** This function may be issued on any session opened to any domain in the
+** system, and will return the same identifier. The identifier returned
+** should either be zero, indicating that the HPI implementation uses a
+** custom schema; or one of the schema identifiers defined in Appendix A,
+** "Pre-Defined Entity Schemas," page 107. In the case of a custom
+** schema, the HPI implementation may use arbitrary entity paths to
+** describe resources in the system; in the case of a pre-defined schema,
+** all entity paths should conform to the schema.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEntitySchemaGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_OUT SaHpiUint32T *SchemaId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogInfoGet
+**
+** Description:
+** This function retrieves the number of entries in the system event log,
+** total size of the event log, timestamp for the most recent entry, the
+** log's idea of the current time (i.e., timestamp that would be placed
+** on an entry at this moment), enabled/disabled status of the log (see
+** saHpiEventLogStateSet()), the overflow flag, the overflow action, and
+** whether the log supports deletion of individual entries.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource that contains the system
+** event log to be managed. Set to SAHPI_DOMAIN_CONTROLLER_ID to address
+** the domain system event log.
+** Info - [out] Pointer to the returned SEL information.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogInfoGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiSelInfoT *Info
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogEntryGet
+**
+** Description:
+** This function retrieves an event log entry from a system event log.
+** The special entry IDs SAHPI_OLDEST_ENTRY and SAHPI_NEWEST_ENTRY are
+** used to select the oldest and newest entries, respectively, in the log
+** being read. A returned NextEntryID of SAHPI_NO_MORE_ENTRIES indicates
+** that the newest entry has been returned; there are no more entries
+** going forward (time-wise) in the log. A returned PrevEntryID of
+** SAHPI_NO_MORE_ENTRIES indicates that the oldest entry has been
+** returned. To retrieve an entire list of entries going forward (oldest
+** entry to newest entry) in the log, call this function first with an
+** EntryID of SAHPI_OLDEST_ENTRY and then use the returned NextEntryID as
+** the EntryID in the next call. Proceed until the NextEntryID returned
+** is SAHPI_NO_MORE_ENTRIES. To retrieve an entire list of entries going
+** backward (newest entry to oldest entry) in the log, call this function
+** first with an EntryID of SAHPI_NEWEST_ENTRY and then use the returned
+** PrevEntryID as the EntryID in the next call. Proceed until the
+** PrevEntryID returned is SAHPI_NO_MORE_ENTRIES.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource that contains the system
+** event log to be read. Set to SAHPI_DOMAIN_CONTROLLER_ID to address the
+** domain system event log.
+** EntryId - [in] Handle of the entry to retrieve from the SEL. Reserved
+** event log entry ID values: SAHPI_OLDEST_ENTRY Oldest entry in the
+** log. SAHPI_NEWEST_ENTRY Newest entry in the log.
+** SAHPI_NO_MORE_ENTRIES Not valid for this parameter. Used only when
+** retrieving the next and previous entry IDs.
+** PrevEntryId - [out] Handle of previous (older adjacent) entry in event
+** log. Reserved event log entry ID values: SAHPI_OLDEST_ENTRY Not valid
+** for this parameter. Used only for the EntryID parameter.
+** SAHPI_NEWEST_ENTRY Not valid for this parameter. Used only for the
+** EntryID parameter. SAHPI_NO_MORE_ENTRIES No more entries in the log
+** before the one referenced by the EntryId parameter.
+** NextEntryId - [out] Handle of next (newer adjacent) entry in event
+** log. Reserved event log entry ID values: SAHPI_OLDEST_ENTRY Not valid
+** for this parameter. Used only for the EntryID parameter.
+** SAHPI_NEWEST_ENTRY Not valid for this parameter. Used only for the
+** EntryID parameter. SAHPI_NO_MORE_ENTRIES No more entries in the log
+** after the one referenced by the EntryId parameter.
+** EventLogEntry - [out] Pointer to retrieved event log entry.
+** Rdr - [in/out] Pointer to structure to receive resource data record
+** associated with the event, if available. If NULL, no RDR data will be
+** returned.
+** RptEntry - [in/out] Pointer to structure to receive RPT Entry
+** associated with the event, if available. If NULL, no RPT entry data
+** will be returned.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Event logs may include RPT entries and resource data records
+** associated with the resource and sensor issuing an event along with
+** the basic event data in the log. Because the system may be
+** reconfigured after the event was entered in the log, this stored
+** information may be important to interpret the event. If the event log
+** includes logged RPT Entries and/or RDRs, and if the caller provides a
+** pointer to a structure to receive this information, it will be
+** returned along with the event log entry. If the caller provides a
+** pointer for an RPT entry, but the event log does not include a logged
+** RPT entry for the event being returned, RptEntry->ResourceCapabilities
+** will be set to zero. No valid RPTEntry will have a zero value here. If
+** the caller provides a pointer for an RDR, but the event log does not
+** include a logged RDR for the event being returned, Rdr->RdrType will
+** be set to SAHPI_NO_RECORD.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogEntryGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSelEntryIdT EntryId,
+ SAHPI_OUT SaHpiSelEntryIdT *PrevEntryId,
+ SAHPI_OUT SaHpiSelEntryIdT *NextEntryId,
+ SAHPI_OUT SaHpiSelEntryT *EventLogEntry,
+ SAHPI_INOUT SaHpiRdrT *Rdr,
+ SAHPI_INOUT SaHpiRptEntryT *RptEntry
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogEntryAdd
+**
+** Description:
+** This function enables system management software to add entries to the
+** system event log.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource that contains the system
+** event log to be managed. Set to SAHPI_DOMAIN_CONTROLLER_ID to address
+** the Domain System Event Log.
+** EvtEntry - [in] Pointer to event log entry data to write to the system
+** event log.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** This function forces a write of the event to the addressed event log.
+** Nothing else is done with the event. Specific implementations of HPI
+** may have restrictions on how much data may be passed to the
+** saHpiEventLogEntryAdd() function. These restrictions should be
+** documented by the provider of the HPI interface. If more event log
+** data is provided than can be written, an error will be returned.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogEntryAdd (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSelEntryT *EvtEntry
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogEntryDelete
+**
+** Description:
+** This function deletes an event log entry. This operation is only valid
+** if so indicated by saHpiEventLogInfoGet(), via the
+** DeleteEntrySupported field in the SaHpiSelInfoT structure.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] ResourceID of the resource that contains the system
+** event log to be managed. Set to SAHPI_DOMAIN_CONTROLLER_ID to address
+** the domain system event log.
+** EntryId - [in] Entry ID on the event log entry to delete. Reserved
+** event log entry ID values: SAHPI_OLDEST_ENTRY - Oldest entry in the
+** log. SAHPI_NEWEST_ENTRY - Newest entry in the log.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned. SA_ERR_HPI_INVALID_CMD is returned if this log does not
+** support this operation.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogEntryDelete (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSelEntryIdT EntryId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogClear
+**
+** Description:
+** This function erases the contents of the specified system event log.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] ResourceID of the resource that contains the system
+** event log to be managed. Set to SAHPI_DOMAIN_CONTROLLER_ID to address
+** the domain system event log.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Note that all event logs must support the "clear" operation,
+** regardless of the setting of the DeleteEntrySupported field in the
+** SaHpiSelInfoT structure returned by saHpiEventLogInfoGet().
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogClear (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogTimeGet
+**
+** Description:
+** This function retrieves the current time from the event log's own time
+** clock. The value of this clock is used to timestamp log entries
+** written into the log.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] ResourceID of the resource that contains the System
+** Event Log to be managed. Set to SAHPI_DOMAIN_CONTROLLER_ID to address
+** the Domain System Event Log.
+** Time - [out] Pointer to the returned SEL current time. If the
+** implementation cannot supply an absolute time value, then it may
+** supply a time relative to some system-defined epoch, such as system
+** boot. If the time value is less than or equal to
+** SAHPI_TIME_MAX_RELATIVE, but not SAHPI_TIME_UNSPECIFIED, then it is
+** relative; if it is greater than SAHPI_TIME_MAX_RELATIVE, then it is
+** absolute. The value SAHPI_TIME_UNSPECIFIED indicates that the time is
+** not set, or cannot be determined.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogTimeGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiTimeT *Time
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogTimeSet
+**
+** Description:
+** This function sets the event log's time clock, which is used to
+** timestamp events written into the log.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource that contains the system
+** event log to be managed. set to SAHPI_DOMAIN_CONTROLLER_ID to address
+** the domain system event log.
+** Time - [in] time to set the SEL clock to. If the implementation cannot
+** supply an absolute time, then it may supply a time relative to some
+** system-defined epoch, such as system boot. If the timestamp value is
+** less than or equal to SAHPI_TIME_MAX_RELATIVE, but not
+** SAHPI_TIME_UNSPECIFIED, then it is relative; if it is greater than
+** SAHPI_TIME_MAX_RELATIVE, then it is absolute. The value
+** SAHPI_TIME_UNSPECIFIED indicates that the time of the event cannot be
+** determined.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogTimeSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiTimeT Time
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogStateGet
+**
+** Description:
+** This function enables system management software to get the event log
+** state. If the event log is "disabled" no events generated within the
+** HPI implementation will be added to the event log. Events may still be
+** added to the event log with the saHpiEventLogEntryAdd() function. When
+** the event log is "enabled" events may be automatically added to the
+** event log as they are generated in a resource or a domain, however, it
+** is implementation-specific which events are automatically added to any
+** event log.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] ResourceID of the resource that contains the System
+** Event Log to be managed. Set to SAHPI_DOMAIN_CONTROLLER_ID to address
+** the Domain System Event Log.
+** Enable - [out] Pointer to the current SEL state. True indicates that
+** the SEL is enabled; false indicates that it is disabled.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogStateGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiBoolT *Enable
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogStateSet
+**
+** Description:
+** This function enables system management software to set the event log
+** enabled state. If the event log is "disabled" no events generated
+** within the HPI implementation will be added to the event log. Events
+** may still be added to the event log using the saHpiEventLogEntryAdd()
+** function. When the event log is "enabled" events may be automatically
+** added to the event log as they are generated in a resource or a
+** domain. The actual set of events that are automatically added to any
+** event log is implementation-specific. Typically, the HPI
+** implementation will provide an appropriate default value for this
+** parameter, which may vary by resource. This function is provided so
+** that management software can override the default, if desired. Note:
+** If a resource hosting an event log is re-initialized (e.g., because of
+** a hot-swap action), the HPI implementation may reset the value of this
+** parameter.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource that contains the system
+** event log to be managed. Set to SAHPI_DOMAIN_CONTROLLER_ID to address
+** the domain system event log.
+** Enable - [in] SEL state to be set. True indicates that the SEL is to
+** be enabled; false indicates that it is to be disabled.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogStateSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiBoolT Enable
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSubscribe
+**
+** Description:
+** This function allows the caller to subscribe for session events. This
+** single call provides subscription to all session events, regardless of
+** event type or event severity. Only one subscription is allowed per
+** session, and additional subscribers will receive an appropriate error
+** code. No event filtering will be done by the underlying management
+** service.
+**
+** Parameters:
+** SessionId - [in] Session for which event subscription will be opened.
+** ProvideActiveAlarms - [in] Indicates whether or not alarms which are
+** active at the time of subscription should be queued for future
+** retrieval via the saHpiEventGet() function.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned. SA_ERR_HPI_DUPLICATE is returned when a subscription is
+** already in place for this session.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSubscribe (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiBoolT ProvideActiveAlarms
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiUnsubscribe
+**
+** Description:
+** This function removes the event subscription for the session. After
+** removal of a subscription, additional saHpiEventGet() calls will not
+** be allowed unless the caller re-subscribes for events first. Any
+** events that are still in the event queue when this function is called
+** will be cleared from it.
+**
+** Parameters:
+** SessionId - [in] Session for which event subscription will be closed.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned. SA_ERR_HPI_INVALID_REQUEST is returned if the caller is
+** not currently subscribed for events in this session.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiUnsubscribe (
+ SAHPI_IN SaHpiSessionIdT SessionId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventGet
+**
+** Description:
+** This function allows the caller to get an event. This call is only
+** valid within a session, which has subscribed for events. If the
+** ProvideActiveAlarms parameter was set in the subscription, the first
+** events retrieved will reflect the state of currently active alarms for
+** the resources belonging to the domain. After all active alarms are
+** retrieved this function will begin returning newly generated events as
+** the domain controller receives them. If there are one or more events
+** on the event queue when this function is called, it will immediately
+** return the next event on the queue. Otherwise, if the Timeout
+** parameter is SAHPI_TIMEOUT_IMMEDIATE, it will return
+** SA_ERR_HPI_TIMEOUT immediately. Otherwise, it will block for a time
+** specified by the timeout parameter; if an event is added to the queue
+** within that time, it will be returned immediately; if not,
+** saHpiEventGet() will return SA_ERR_HPI_TIMEOUT. If the Timeout
+** parameter is SAHPI_TIMEOUT_BLOCK, then saHpiEventGet() will block
+** indefinitely, until an event becomes available, and then return that
+** event. This provides for notification of events as they occur.
+**
+** Parameters:
+** SessionId - [in] Session for which events are retrieved.
+** Timeout - [in] The number of nanoseconds to wait for an event to
+** arrive. Reserved time out values: SAHPI_TIMEOUT_IMMEDIATE Time out
+** immediately if there are no events available (non-blocking call).
+** SAHPI_TIMEOUT_BLOCK Call should not return until an event is
+** retrieved.
+** Event - [out] Pointer to the next available event.
+** Rdr - [in/out] Pointer to structure to receive the resource data
+** associated with the event. If NULL, no RDR will be returned.
+** RptEntry - [in/out] Pointer to structure to receive the RPT entry
+** associated with the resource that generated the event. If NULL, no RPT
+** entry will be returned.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned. SA_ERR_HPI_TIMEOUT is returned if no event is available
+** to return within the timeout period. If SAHPI_TIMEOUT_IMMEDIATE is
+** passed in the Timeout parameter, this error return will be used if
+** there is no event queued when the function is called.
+**
+** Remarks:
+** If the caller provides a pointer for an RPT entry, but the event does
+** not include a valid resource ID for a resource in the domain (possible
+** on OEM or USER type event), then the ResourceCapabilities field in
+** *RptEntry will be set to zero. No valid RPT entry will have a zero
+** value here. If the caller provides a pointer for an RDR, but there is
+** no valid RDR associated with the event being returned (e.g., returned
+** event is not a sensor event), Rdr->RdrType will be set to
+** SAHPI_NO_RECORD. The timestamp reported in the returned event
+** structure is the best approximation an implementation has to when the
+** event actually occurred. The implementation may need to make an
+** approximation (such as the time the event was placed on the event
+** queue) because it may not have access to the actual time the event
+** occurred. The value SAHPI_TIME_UNSPECIFIED indicates that the time of
+** the event cannot be determined. If the implementation cannot supply an
+** absolute timestamp, then it may supply a timestamp relative to some
+** system-defined epoch, such as system boot. If the timestamp value is
+** less than or equal to SAHPI_TIME_MAX_RELATIVE, but not
+** SAHPI_TIME_UNSPECIFIED, then it is relative; if it is greater than
+** SAHPI_TIME_MAX_RELATIVE, then it is absolute. 6 Resource Functions
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiTimeoutT Timeout,
+ SAHPI_OUT SaHpiEventT *Event,
+ SAHPI_INOUT SaHpiRdrT *Rdr,
+ SAHPI_INOUT SaHpiRptEntryT *RptEntry
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiRdrGet
+**
+** Description:
+** This function returns a resource data record from the addressed
+** resource. Submitting an EntryId of SAHPI_FIRST_ENTRY results in the
+** first RDR being read. A returned NextEntryID of SAHPI_LAST_ENTRY
+** indicates the last RDR has been returned. A successful retrieval will
+** include the next valid EntryId. To retrieve the entire list of RDRs,
+** call this function first with an EntryId of SAHPI_FIRST_ENTRY and then
+** use the returned NextEntryId in the next call. Proceed until the
+** NextEntryId returned is SAHPI_LAST_ENTRY.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** EntryId - [in] Handle of the RDR to retrieve. Reserved entry ID
+** values: SAHPI_FIRST_ENTRY Get first entry SAHPI_LAST_ENTRY Reserved as
+** delimiter for end of list. Not a valid entry identifier.
+** NextEntryId - [out] Pointer to location to store Entry ID of next
+** entry in RDR repository.
+** Rdr - [out] Pointer to the structure to receive the requested resource
+** data record.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** A resource's RDR repository is static over the lifetime of the
+** resource; therefore no precautions are required against changes to the
+** content of the RDR repository while it is being accessed.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiRdrGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiEntryIdT EntryId,
+ SAHPI_OUT SaHpiEntryIdT *NextEntryId,
+ SAHPI_OUT SaHpiRdrT *Rdr
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSensorReadingGet
+**
+** Description:
+** This function is used to retrieve a sensor reading.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** SensorNum - [in] Sensor number for which the sensor reading is being
+** retrieved.
+** Reading - [out] Pointer to a structure to receive sensor reading
+** values.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorReadingGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_OUT SaHpiSensorReadingT *Reading
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSensorReadingConvert
+**
+** Description:
+** This function converts between raw and interpreted sensor reading
+** values. The type of conversion done depends on the passed-in
+** ReadingInput parameter. If it contains only a raw value, then this is
+** converted to an interpreted value in ConvertedReading; if it contains
+** only an interpreted value, then this is converted to a raw value in
+** ConvertedReading. If it contains neither type of value, or both, then
+** an error is returned. The ReadingInput parameter is not altered in any
+** case. If the sensor does not use raw values - i.e., it directly
+** returns interpreted values - then this routine returns an error.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** SensorNum - [in] Sensor number for which reading is associated.
+** ReadingInput - [in] Pointer to the structure that contains raw or
+** interpreted reading to be converted.
+** ConvertedReading - [out] Pointer to structure to hold converted
+** reading.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned. SA_ERR_HPI_INVALID_PARAMS is returned if the ReadingInput
+** parameter is invalid; e.g. if it contains neither a raw nor an
+** interpreted value; or if it contains both; or if it contains an
+** invalid value. SA_ERR_HPI_INVALID_DATA is returned if the sensor does
+** not support raw readings. SA_ERR_HPI_NOT_PRESENT is returned if the
+** sensor is not present.
+**
+** Remarks:
+** The EventStatus field in ReadingInput is not used by this function. To
+** make conversions, sensor-specific data may be required. Thus, the
+** function references a particular sensor in the system through the
+** SessionID/ResourceID/SensorNum parameters. If this sensor is not
+** present, and sensor- specific information is required, the conversion
+** will fail and SA_ERR_HPI_NOT_PRESENT will be returned.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorReadingConvert (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_IN SaHpiSensorReadingT *ReadingInput,
+ SAHPI_OUT SaHpiSensorReadingT *ConvertedReading
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSensorThresholdsGet
+**
+** Description:
+** This function retrieves the thresholds for the given sensor.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** SensorNum - [in] Sensor number for which threshold values are being
+** retrieved.
+** SensorThresholds - [out] Pointer to returned sensor thresholds.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorThresholdsGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_OUT SaHpiSensorThresholdsT *SensorThresholds
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSensorThresholdsSet
+**
+** Description:
+** This function sets the specified thresholds for the given sensor.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of addressed resource.
+** SensorNum - [in] Sensor number for which threshold values are being
+** set.
+** SensorThresholds - [in] Pointer to the sensor thresholds values being
+** set.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** For each threshold or hysteresis value to be set, the corresponding
+** sensor reading structure must indicate whether a raw or interpreted
+** value is present. If neither are present, then that threshold or
+** hysteresis value will not be set. Each sensor may require settings to
+** be done with raw, or interpreted values, or may permit either; this is
+** defined by the field ThresholdDefn.TholdCapabilities in the sensor's
+** RDR (saHpiSensorRecT). If the interpreted value and raw value are both
+** provided, and both are legal for the sensor, the interpreted value
+** will be ignored and the raw value will be used.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorThresholdsSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_IN SaHpiSensorThresholdsT *SensorThresholds
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSensorTypeGet
+**
+** Description:
+** This function retrieves the sensor type and event category for the
+** specified sensor.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** SensorNum - [in] Sensor number for which the type is being retrieved
+** Type - [out] Pointer to returned enumerated sensor type for the
+** specified sensor.
+** Category - [out] Pointer to location to receive the returned sensor
+** event category.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorTypeGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_OUT SaHpiSensorTypeT *Type,
+ SAHPI_OUT SaHpiEventCategoryT *Category
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSensorEventEnablesGet
+**
+** Description:
+** This function provides the ability to get the disable or enable event
+** message generation status for individual sensor events. The sensor
+** event states are relative to the event category specified by the
+** sensor. See the SaHpiEventCategoryT definition in section 7.3,
+** "Events, Part 1," on page 83 for more information. Within the
+** structure returned, there are two elements that contain bit flags; one
+** for assertion events and one for de-assertion events. A bit set to '1'
+** in the "AssertEvents" element in the structure indicates that an event
+** will be generated when the corresponding event state changes from
+** de-asserted to asserted on that sensor. A bit set to '1' in the
+** "DeassertEvents" element in the structure indicates that an event will
+** be generated when the corresponding event state changes from asserted
+** to de-asserted on that sensor. The saHpiSensorEventEnablesGet()
+** function also returns the general sensor status - whether the sensor
+** is completely disabled, or event generation is completely disabled.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** SensorNum - [in] Sensor number for which the event enable
+** configuration is being requested
+** Enables - [out] Pointer to the structure for returning sensor status
+** and event enable information.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Disabling events means that events are disabled for all sessions, not
+** just the session referenced by the SessionId parameter. For sensors
+** hosted by resources that have the "SAHPI_CAPABILITY_EVT_DEASSERTS"
+** flag set in its RPT entry, the "AssertEvents" element and the
+** "DeassertsEvents" element will always have same value.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorEventEnablesGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_OUT SaHpiSensorEvtEnablesT *Enables
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSensorEventEnablesSet
+**
+** Description:
+** This function provides the ability to set the disable or enable event
+** message generation status for individual sensor events. The sensor
+** event states are relative to the event category specified by the
+** sensor. See the SaHpiEventCategoryT definition for more information.
+** Within the structure passed, there are two elements, which contain bit
+** flags; one for assertion events and one for de-assertion events.
+** However, the use of these two elements depends on whether the resource
+** addressed has the "SAHPI_CAPABILITY_EVT_DEASSERTS" flag set in its RPT
+** entry. This capability, if set, advertises that all sensors hosted by
+** the resource will always send a "de-assert" event when any state is
+** de-asserted whose assertion generates an "assert" event. Thus, for
+** sensors hosted by resources that advertise this behavior, it is not
+** meaningful to control assert events and de-assert events separately.
+** For sensors on resources that do not have the
+** "SAHPI_CAPABILITY_EVT_DEASSERTS" flag set, a bit set to '1' in the
+** "AssertEvents" element in the structure indicates that an event will
+** be generated when the corresponding event state changes from
+** de-asserted to asserted on that sensor., and a bit set to '1' in the
+** "DeassertEvents" element in the structure indicates that an event will
+** be generated when the corresponding event state changes from asserted
+** to de-asserted on that sensor. For sensors on resources, which do have
+** the "SAHPI_CAPABILITY_EVT_DEASSERTS" flag set, the "DeassertEvents"
+** element is not used. For sensors on these resources, a bit set to '1'
+** in the "AssertEvents" element in the structure indicates that an event
+** will be generated when the corresponding event state changes in either
+** direction (de-asserted to asserted or asserted to de-asserted). The
+** saHpiSensorEventEnablesSet() function also allows setting of general
+** sensor status - whether the sensor is completely disabled, or event
+** generation is completely disabled.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** SensorNum - [in] Sensor number for which the event enables are being
+** set.
+** Enables - [in] Pointer to the structure containing the enabled status
+** for each event.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Disabling events means that events are disabled for all sessions, not
+** just the session referenced by the SessionId parameter.
+** saHpiSensorEventEnablesGet () will return the values which were last
+** set by saHpiSensorEventEnablesSet() for the "AssertEvents" and
+** "DeassertEvents" elements in the passed data structures. However, for
+** sensors hosted by any resource that has the
+** SAHPI_CAPABILITY_EVT_DEASSERTS flag set in its RPT entry, the passed
+** "AssertEvents" element on the saHpiSensorEventEnablesSet () function
+** is used for both assertion and de-assertion event enable flags. In
+** this case, this value will be returned in both the "AssertEvents" and
+** "DeassertEvents" elements on a subsequent saHpiSensorEventEnablesGet
+** () call.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorEventEnablesSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_IN SaHpiSensorEvtEnablesT *Enables
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiControlTypeGet
+**
+** Description:
+** This function retrieves the control type of a control object.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** CtrlNum - [in] Control number
+** Type - [out] Pointer to SaHpiCtrlTypeT variable to receive the
+** enumerated control type for the specified control.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** The Type parameter must point to a variable of type SaHpiCtrlTypeT.
+** Upon successful completion, the enumerated control type is returned in
+** the variable pointed to by Type.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiControlTypeGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiCtrlNumT CtrlNum,
+ SAHPI_OUT SaHpiCtrlTypeT *Type
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiControlStateGet
+**
+** Description:
+** This function retrieves the current state (generally the last state
+** set) of a control object.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of addressed resource.
+** CtrlNum - [in] Number of the control for which the state is being
+** retrieved.
+** CtrlState - [in/out] Pointer to a control data structure into which
+** the current control state will be placed. For text controls, the line
+** number to read is passed in via CtrlState->StateUnion.Text.Line.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Note that Text controls are unique in that they have a state
+** associated with each line of the control - the state being the text on
+** that line. The line number to be read is passed in to
+** sahpiControlStateGet()via CtrlState- >StateUnion.Text.Line; the
+** contents of that line of the control will be returned in CtrlState-
+** >StateUnion.Text.Text. If the line number passed in is
+** SAHPI_TLN_ALL_LINES, then sahpiControlStateGet() will return the
+** entire text of the control, or as much of it as will fit in a single
+** SaHpiTextBufferT, in CtrlState- >StateUnion.Text.Text. This value will
+** consist of the text of all the lines concatenated, using the maximum
+** number of characters for each line (no trimming of trailing blanks).
+** Note that depending on the data type and language, the text may be
+** encoded in 2-byte Unicode, which requires two bytes of data per
+** character. Note that the number of lines and columns in a text control
+** can be obtained from the control's Resource Data Record.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiControlStateGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiCtrlNumT CtrlNum,
+ SAHPI_INOUT SaHpiCtrlStateT *CtrlState
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiControlStateSet
+**
+** Description:
+** This function is used for setting the state of the specified control
+** object.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** CtrlNum - [in] Number of the control for which the state is being set.
+**
+** CtrlState - [in] Pointer to a control state data structure holding the
+** state to be set
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** The CtrlState parameter must be of the correct type for the specified
+** control. Text controls include a line number and a line of text in the
+** CtrlState parameter, allowing update of just a single line of a text
+** control. If less than a full line of data is written, the control will
+** clear all spaces beyond those written on the line. Thus writing a
+** zero-length string will clear the addressed line. It is also possible
+** to include more characters in the text passed in the CtrlState
+** structure than will fit on one line; in this case, the control will
+** "wrap" to the next line (still clearing the trailing characters on the
+** last line written). Thus, there are two ways to write multiple lines
+** to a text control: (a) call saHpiControlStateSet() repeatedly for each
+** line, or (b) call saHpiControlStateSet() once and send more characters
+** than will fit on one line. The caller should not assume any "cursor
+** positioning" characters are available to use, but rather should always
+** write full lines and allow "wrapping" to occur. When calling
+** saHpiControlStateSet() for a text control, the caller may set the line
+** number to SAHPI_TLN_ALL_LINES; in this case, the entire control will
+** be cleared, and the data will be written starting on line 0. (This is
+** different from simply writing at line 0, which only alters the lines
+** written to.) This feature may be used to clear the entire control,
+** which can be accomplished by setting: CtrlState->StateUnion.Text.Line
+** = SAHPI_TLN_ALL_LINES; CtrlState->StateUnion.Text.Text.DataLength = 0;
+** Note that the number of lines and columns in a text control can be
+** obtained from the control's Resource Data Record.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiControlStateSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiCtrlNumT CtrlNum,
+ SAHPI_IN SaHpiCtrlStateT *CtrlState
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEntityInventoryDataRead
+**
+** Description:
+** This function returns inventory data for a particular entity
+** associated with a resource.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** EirId - [in] Identifier for the entity inventory repository.
+** BufferSize - [in] Size of the InventData buffer passed in.
+** InventData - [out] Pointer to the buffer for the returned data.
+** ActualSize - [out] Pointer to size of the actual amount of data
+** returned.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned. SA_ERR_INVENT_DATA_TRUNCATED is returned if the buffer
+** passed in the InventData structure is not large enough (as indicated
+** by the "BufferSize" parameter) to hold the entire InventData
+** structure.
+**
+** Remarks:
+** Before calling saHpiEntityInventoryDataRead() the caller should
+** allocate a sufficiently large buffer to hold the data, and pass the
+** size of the buffer in the "BufferSize" parameter. The
+** saHpiEntityInventoryDataRead() function will return, at the location
+** pointed to by the ActualSize parameter, the actual space used in the
+** buffer to hold the returned data. If the data will not fit in the
+** buffer, as much as will fit will be returned, *ActualSize will be set
+** to indicated a suggested buffer size for the entire inventory data,
+** the "Validity" field in the InventData buffer will be set to
+** "SAHPI_INVENT_DATA_OVERFLOW," and an error return will be made. Since
+** it is impossible to know how large the inventory data may be without
+** actually reading and processing it from the entity inventory
+** repository, it may be advisable to err on the large side in allocating
+** the buffer. Note that the data includes many pointers to
+** SaHpiTextBufferT structures. The implementation of
+** saHpiEntityInventoryDataRead() may not reserve space for the maximum
+** size of each of these structures when formatting the data in the
+** returned buffer. Thus, if a user wishes to lengthen the data in one of
+** these structures, a new SaHpiTextBufferT structure should be
+** allocated, and the appropriate pointer reset to point to this new
+** structure in memory. See the description of the SaHpiInventoryDataT
+** structure in section 7.9, "Entity Inventory Data," on page 94, for
+** details on the format of the returned data.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEntityInventoryDataRead (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiEirIdT EirId,
+ SAHPI_IN SaHpiUint32T BufferSize,
+ SAHPI_OUT SaHpiInventoryDataT *InventData,
+ SAHPI_OUT SaHpiUint32T *ActualSize
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEntityInventoryDataWrite
+**
+** Description:
+** This function writes the specified data to the inventory information
+** area. Note: If the resource hosting the inventory data is
+** re-initialized, or if the entity itself is removed and reinserted, the
+** inventory data may be reset to its default settings, losing data
+** written to the repository with this function.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** EirId - [in] Identifier for the entity inventory repository.
+** InventData - [in] Pointer to data to write to the repository.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** The SaHpiInventoryDataT structure consists of a Validity field and
+** then a set of pointers to record structures. It is not required that
+** all pointers point to data within a single contiguous buffer. The
+** "Validity" field in the SaHpiInventoryDataT structure must be set to
+** "SAHPI_INVENT_DATA_VALID," or else the saHpiEntityInventoryDataWrite()
+** function will take no action and return an error. This is to help
+** prevent invalid data returned by a saHpiEntityInventoryDataRead()
+** function from being inadvertently written to the resource. For this
+** protection to work, the caller should not change the value of the
+** "Validity" field in the SaHpiInventoryDataT structure unless building
+** an entire Inventory Data set from scratch. Some implementations may
+** impose limitations on the languages of the strings passed in within
+** the InventData parameter. Implementation-specific documentation
+** should identify these restrictions.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEntityInventoryDataWrite (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiEirIdT EirId,
+ SAHPI_IN SaHpiInventoryDataT *InventData
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiWatchdogTimerGet
+**
+** Description:
+** This function retrieves the current watchdog timer settings and
+** configuration.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource, which contains the
+** watchdog timer being addressed.
+** WatchdogNum - [in] The watchdog number that specifies the watchdog
+** timer on a resource.
+** Watchdog - [out] Pointer to watchdog data structure.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** See the description of the SaHpiWatchdogT structure in 7.11,
+** "Watchdogs" on page 96 for details on what information is returned by
+** this function.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiWatchdogTimerGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiWatchdogNumT WatchdogNum,
+ SAHPI_OUT SaHpiWatchdogT *Watchdog
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiWatchdogTimerSet
+**
+** Description:
+** This function provides a method for initializing the watchdog timer
+** configuration. Once the appropriate configuration has be set using
+** saHpiWatchdogTimerSet(), the user must then call
+** saHpiWatchdogTimerReset() to initially start the watchdog timer.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource that contains the
+** watchdog timer being addressed.
+** WatchdogNum - [in] The watchdog number specifying the specific
+** watchdog timer on a resource.
+** Watchdog - [in] Pointer to watchdog data structure.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** If the initial counter value in the SaHpiWatchdogT structure is set to
+** 0, the Watchdog will immediately time out and take the pre-timeout and
+** timeout actions, as well as log an event. This provides a mechanism
+** for software to force an immediate recovery action should that be
+** dependent on a Watchdog timeout occurring. See the description of the
+** SaHpiWatchdogT structure for more details on the effects of this
+** command related to specific data passed in that structure.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiWatchdogTimerSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiWatchdogNumT WatchdogNum,
+ SAHPI_IN SaHpiWatchdogT *Watchdog
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiWatchdogTimerReset
+**
+** Description:
+** This function provides a method to start or restart the watchdog timer
+** from the initial countdown value.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID for the resource that contains the
+** watchdog timer being addressed.
+** WatchdogNum - [in] The watchdog number specifying the specific
+** watchdog timer on a resource.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** If the Watchdog has been configured to issue a Pre-Timeout interrupt,
+** and that interrupt has already occurred, the saHpiWatchdogTimerReset()
+** function will not reset the watchdog counter. The only way to stop a
+** Watchdog from timing out once a Pre-Timeout interrupt has occurred is
+** to use the saHpiWatchdogTimerSet() function to reset and/or stop the
+** timer.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiWatchdogTimerReset (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiWatchdogNumT WatchdogNum
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiHotSwapControlRequest
+**
+** Description:
+** A resource supporting hot swap typically supports default policies for
+** insertion and extraction. On insertion, the default policy may be for
+** the resource to turn the associated FRU's local power on and to
+** de-assert reset. On extraction, the default policy may be for the
+** resource to immediately power off the FRU and turn on a hot swap
+** indicator. This function allows a caller, after receiving a hot swap
+** event with HotSwapState equal to SAHPI_HS_STATE_INSERTION_PENDING or
+** SAHPI_HS_STATE_EXTRACTION_PENDING, to request control of the hot swap
+** policy and prevent the default policy from being invoked. Because a
+** resource that supports the simplified hot swap model will never
+** transition into Insertion Pending or Extraction Pending states, this
+** function is not applicable to those resources.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiHotSwapControlRequest (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourceActiveSet
+**
+** Description:
+** During insertion, a resource supporting hot swap will generate an
+** event to indicate that it is in the INSERTION PENDING state. If the
+** management middleware or other user software calls
+** saHpiHotSwapControlRequest() before the resource begins an auto-insert
+** operation, then the resource will remain in INSERTION PENDING state
+** while the user acts on the resource to integrate it into the system.
+** During this state, the user can instruct the resource to power on the
+** associated FRU, to de-assert reset, or to turn off its hot swap
+** indicator using the saHpiResourcePowerStateSet(),
+** saHpiResourceResetStateSet(), or saHpiHotSwapIndicatorStateSet()
+** functions, respectively. Once the user has completed with the
+** integration of the FRU, this function must be called to signal that
+** the resource should now transition into ACTIVE/HEALTHY or
+** ACTIVE/UNHEALTHY state (depending on whether or not there are active
+** faults). The user may also use this function to request a resource to
+** return to the ACTIVE/HEALTHY or ACTIVE/UNHEALTHY state from the
+** EXTRACTION PENDING state in order to reject an extraction request.
+** Because a resource that supports the simplified hot swap model will
+** never transition into Insertion Pending or Extraction Pending states,
+** this function is not applicable to those resources.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Only valid if resource is in INSERTION PENDING or EXTRACTION PENDING
+** state and an auto-insert or auto-extract policy action has not been
+** initiated.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceActiveSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourceInactiveSet
+**
+** Description:
+** During extraction, a resource supporting hot swap will generate an
+** event to indicate that it is in the EXTRACTION PENDING state. If the
+** management middleware or other user software calls
+** saHpiHotSwapControlRequest() before the resource begins an
+** auto-extract operation, then the resource will remain in EXTRACTION
+** PENDING state while the user acts on the resource to isolate the
+** associated FRU from the system. During this state, the user can
+** instruct the resource to power off the FRU, to assert reset, or to
+** turn on its hot swap indicator using the saHpiResourcePowerStateSet(),
+** saHpiResourceResetStateSet(), or saHpiHotSwapIndicatorStateSet()
+** functions, respectively. Once the user has completed the shutdown of
+** the FRU, this function must be called to signal that the resource
+** should now transition into INACTIVE state. The user may also use this
+** function to request a resource to return to the INACTIVE state from
+** the INSERTION PENDING state to abort a hot-swap insertion action.
+** Because a resource that supports the simplified hot swap model will
+** never transition into Insertion Pending or Extraction Pending states,
+** this function is not applicable to those resources.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Only valid if resource is in EXTRACTION PENDING or INSERTION PENDING
+** state and an auto-extract or auto-insert policy action has not been
+** initiated.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceInactiveSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiAutoInsertTimeoutGet
+**
+** Description:
+** This function allows the caller to request the auto-insert timeout
+** value. This value indicates how long the HPI implementation will wait
+** before the default auto-insertion policy is invoked. Further
+** information on the auto-insert timeout can be found in the function
+** saHpiAutoInsertTimeoutSet().
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** Timeout - [out] Pointer to location to store the number of nanoseconds
+** to wait before autonomous handling of the hotswap event. Reserved time
+** out values: SAHPI_TIMEOUT_IMMEDIATE indicates autonomous handling is
+** immediate. SAHPI_TIMEOUT_BLOCK indicates autonomous handling does not
+** occur.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAutoInsertTimeoutGet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_OUT SaHpiTimeoutT *Timeout
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiAutoInsertTimeoutSet
+**
+** Description:
+** This function allows the caller to configure a timeout for how long to
+** wait before the default auto-insertion policy is invoked. This
+** function accepts a parameter instructing the implementation to impose
+** a delay before a resource will perform its default hot swap policy for
+** auto-insertion. The parameter may be set to SAHPI_TIMEOUT_IMMEDIATE to
+** direct resources to proceed immediately to auto-insertion, or to
+** SAHPI_TIMEOUT_BLOCK to prevent auto-insertion from ever occurring. If
+** the parameter is set to another value, then it defines the number of
+** nanoseconds between the time a hot swap event with HotSwapState =
+** SAHPI_HS_STATE_INSERTION_PENDING is generated, and the time that the
+** auto-insertion policy will be invoked for that resource. If, during
+** this time period, a saHpiHotSwapControlRequest() function is
+** processed, the timer will be stopped, and the auto-insertion policy
+** will not be invoked. Once the auto-insertion process begins, the user
+** software will not be allowed to take control of the insertion process;
+** hence, the timeout should be set appropriately to allow for this
+** condition. Note that the timeout period begins when the hot swap event
+** with HotSwapState = SAHPI_HS_STATE_INSERTION_PENDING is initially
+** generated; not when it is received by a caller with a saHpiEventGet()
+** function call, or even when it is placed in a session event queue.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** Timeout - [in] The number of nanoseconds to wait before autonomous
+** handling of the hotswap event. Reserved time out values:
+** SAHPI_TIMEOUT_IMMEDIATE indicates proceed immediately to autonomous
+** handling. SAHPI_TIMEOUT_BLOCK indicates prevent autonomous handling.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAutoInsertTimeoutSet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiTimeoutT Timeout
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiAutoExtractTimeoutGet
+**
+** Description:
+** This function allows the caller to request the timeout for how long
+** the implementation will wait before the default auto-extraction policy
+** is invoked. Further information on auto-extract time outs is detailed
+** in saHpiAutoExtractTimeoutSet().
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** Timeout - [out] Pointer to location to store the number of nanoseconds
+** to wait before autonomous handling of the hotswap event. Reserved time
+** out values: SAHPI_TIMEOUT_IMMEDIATE indicates autonomous handling is
+** immediate. SAHPI_TIMEOUT_BLOCK indicates autonomous handling does not
+** occur.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAutoExtractTimeoutGet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiTimeoutT *Timeout
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiAutoExtractTimeoutSet
+**
+** Description:
+** This function allows the caller to configure a timeout for how long to
+** wait before the default auto-extraction policy is invoked. This
+** function accepts a parameter instructing the implementation to impose
+** a delay before a resource will perform its default hot swap policy for
+** auto-extraction. The parameter may be set to SAHPI_TIMEOUT_IMMEDIATE
+** to direct the resource to proceed immediately to auto-extraction, or
+** to SAHPI_TIMEOUT_BLOCK to prevent auto-extraction from ever occurring
+** on a resource. If the parameter is set to another value, then it
+** defines the number of nanoseconds between the time a hot swap event
+** with HotSwapState = SAHPI_HS_STATE_EXTRACTION_PENDING is generated,
+** and the time that the auto- extraction policy will be invoked for the
+** resource. If, during this time period, a saHpiHotSwapControlRequest()
+** function is processed, the timer will be stopped, and the
+** auto-extraction policy will not be invoked. Once the auto-extraction
+** process begins, the user software will not be allowed to take control
+** of the extraction process; hence, the timeout should be set
+** appropriately to allow for this condition. Note that the timeout
+** period begins when the hot swap event with HotSwapState =
+** SAHPI_HS_STATE_EXTRACTION_PENDING is initially generated; not when it
+** is received by a caller with a saHpiEventGet() function call, or even
+** when it is placed in a session event queue. The auto-extraction policy
+** is set at the resource level and is only supported by resources
+** supporting the "Managed Hot Swap" capability. After discovering that a
+** newly inserted resource supports "Managed Hot Swap," middleware or
+** other user software may use this function to change the default
+** auto-extraction policy for that resource. If a resource supports the
+** simplified hot-swap model, setting this timer has no effect since the
+** resource will transition directly to "Not Present" state on an
+** extraction.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** Timeout - [in] The number of nanoseconds to wait before autonomous
+** handling of the hotswap event. Reserved time out values:
+** SAHPI_TIMEOUT_IMMEDIATE indicates proceed immediately to autonomous
+** handling. SAHPI_TIMEOUT_BLOCK indicates prevent autonomous handling.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAutoExtractTimeoutSet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiTimeoutT Timeout
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiHotSwapStateGet
+**
+** Description:
+** This function allows the caller to retrieve the current hot swap state
+** of a resource. The returned state will be one of the following five
+** states: ? SAHPI_HS_STATE_INSERTION_PENDING ?
+** SAHPI_HS_STATE_ACTIVE_HEALTHY ? SAHPI_HS_STATE_ACTIVE_UNHEALTHY ?
+** SAHPI_HS_STATE_EXTRACTION_PENDING ? SAHPI_HS_STATE_INACTIVE The state
+** SAHPI_HS_STATE_NOT_PRESENT will never be returned, because a resource
+** that is not present cannot be addressed by this function in the first
+** place.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** State - [out] Pointer to location to store returned state information.
+**
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiHotSwapStateGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiHsStateT *State
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiHotSwapActionRequest
+**
+** Description:
+** A resource supporting hot swap typically requires a physical action on
+** the associated FRU to invoke an insertion or extraction process. An
+** insertion process is invoked by physically inserting the FRU into a
+** chassis. Physically opening an ejector latch or pressing a button
+** invokes the extraction process. This function allows the caller to
+** invoke an insertion or extraction process via software.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** Action - [in] Requested action: SAHPI_HS_ACTION_INSERTION or
+** SAHPI_HS_ACTION_EXTRACTION
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** There may be limitations on when saHpiHotSwapActionRequest() may be
+** called, and what value may be used for the "Action" parameter
+** depending on what state the resource is currently in. At the least,
+** this function may be called: ? To request an Insertion action when the
+** resource is in INACTIVE state ? To request an Extraction action when
+** the resource is in the ACTIVE/HEALTHY or ACTIVE/ UNHEALTHY state.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiHotSwapActionRequest (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiHsActionT Action
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourcePowerStateGet
+**
+** Description:
+** A typical resource supporting hot swap will have the ability to
+** control local power on the FRU associated with the resource. During
+** insertion, the FRU can be instructed to power on. During extraction
+** the FRU can be requested to power off. This function allows the caller
+** to retrieve the current power state of the FRU associated with the
+** specified resource.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** State - [out] The current power state of the resource.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** This function returns the actual low-level power state of the FRU,
+** regardless of what hot-swap state the resource is in. Not all
+** resources supporting managed hot swap will necessarily support this
+** function. In particular, resources that use the simplified hot swap
+** model may not have the ability to control FRU power. An appropriate
+** error code will be returned if the resource does not support power
+** control on the FRU.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourcePowerStateGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiHsPowerStateT *State
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourcePowerStateSet
+**
+** Description:
+** A typical resource supporting hot swap will have to ability to control
+** local power on the FRU associated with the resource. During insertion,
+** the FRU can be instructed to power on. During extraction the FRU can
+** be requested to power off. This function allows the caller to set the
+** current power state of the FRU associated with the specified resource.
+**
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** State - [in] the new power state that the specified resource will be
+** set to.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** This function controls the hardware power on the FRU of what hot-swap
+** state the resource is in. For example, it is legal (and may be
+** desirable) to cycle power on the FRU even while it is in ACTIVE state
+** in order to attempt to clear a fault condition. Similarly, a resource
+** could be instructed to power on a FRU even while it is in INACTIVE
+** state, for example, in order to run off-line diagnostics. Not all
+** resources supporting managed hot swap will necessarily support this
+** function. In particular, resources that use the simplified hot swap
+** model may not have the ability to control FRU power. An appropriate
+** error code will be returned if the resource does not support power
+** control on the FRU.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourcePowerStateSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiHsPowerStateT State
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiHotSwapIndicatorStateGet
+**
+** Description:
+** A FRU associated with a hot-swappable resource may include a hot swap
+** indicator such as a blue LED. This indicator signifies that the FRU is
+** ready for removal.. This function allows the caller to retrieve the
+** state of this indicator. The returned state is either
+** SAHPI_HS_INDICATOR_OFF or SAHPI_HS_INDICATOR_ON. This function will
+** return the state of the indicator, regardless of what hot swap state
+** the resource is in.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** State - [out] Pointer to location to store state of hot swap
+** indicator.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Not all resources supporting managed hot swap will necessarily support
+** this function. In particular, resources that use the simplified hot
+** swap model may not have the ability to control a FRU hot swap
+** indicator (it is likely that none exists). An appropriate error code
+** will be returned if the resource does not support control of a hot
+** swap indicator on the FRU.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiHotSwapIndicatorStateGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiHsIndicatorStateT *State
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiHotSwapIndicatorStateSet
+**
+** Description:
+** A FRU associated with a hot-swappable resource may include a hot swap
+** indicator such as a blue LED. This indicator signifies that the FRU is
+** ready for removal. This function allows the caller to set the state of
+** this indicator. Valid states include SAHPI_HS_INDICATOR_OFF or
+** SAHPI_HS_INDICATOR_ON. This function will set the indicator regardless
+** of what hot swap state the resource is in, though it is recommended
+** that this function be used only in conjunction with moving the
+** resource to the appropriate hot swap state.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource
+** State - [in] State of hot swap indicator to be set.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Not all resources supporting managed hot swap will necessarily support
+** this function. In particular, resources that use the simplified hot
+** swap model may not have the ability to control a FRU hot swap
+** indicator (it is likely that none exists). An appropriate error code
+** will be returned if the resource does not support control of a hot
+** swap indicator on the FRU.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiHotSwapIndicatorStateSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiHsIndicatorStateT State
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiParmControl
+**
+** Description:
+** This function allows the user to save and restore parameters
+** associated with a specific resource. Valid actions for this function
+** include: SAHPI_DEFAULT_PARM Restores the factory default settings for
+** a specific resource. Factory defaults include sensor thresholds and
+** configurations, and resource- specific configuration parameters.
+** SAHPI_SAVE_PARM Stores the resource configuration parameters in
+** non-volatile storage. Resource configuration parameters stored in
+** non-volatile storage will survive power cycles and resource resets.
+** SAHPI_RESTORE_PARM Restores resource configuration parameters from
+** non-volatile storage. Resource configuration parameters include sensor
+** thresholds and sensor configurations, as well as resource-specific
+** parameters.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** Action - [in] Action to perform on resource parameters.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Resource-specific parameters should be documented in an implementation
+** guide for the HPI implementation.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiParmControl (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiParmActionT Action
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourceResetStateGet
+**
+** Description:
+** This function gets the reset state of an entity, allowing the user to
+** determine if the entity is being held with its reset asserted. If a
+** resource manages multiple entities, this function will address the
+** entity which is identified in the RPT entry for the resource.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** ResetAction - [out] The current reset state of the entity. Valid reset
+** states are: SAHPI_RESET_ASSERT: The entity's reset is asserted, e.g.,
+** for hot swap insertion/extraction purposes SAHPI_RESET_DEASSERT: The
+** entity's reset is not asserted
+**
+** Return Value:
+** SA_OK is returned if the resource has reset control, and the reset
+** state has successfully been determined; otherwise, an error code is
+** returned. SA_ERR_HPI_INVALID_CMD is returned if the resource has no
+** reset control.
+**
+** Remarks:
+** SAHPI_RESET_COLD and SAHPI_RESET_WARM are pulsed resets, and are not
+** valid return values for ResetAction. If the entity is not being held
+** in reset (using SAHPI_RESET_ASSERT), the appropriate return value is
+** SAHPI_RESET_DEASSERT.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceResetStateGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiResetActionT *ResetAction
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourceResetStateSet
+**
+** Description:
+** This function directs the resource to perform the specified reset type
+** on the entity that it manages. If a resource manages multiple
+** entities, this function addresses the entity that is identified in the
+** RPT entry for the resource. Entities may be reset for a variety of
+** reasons. A misbehaving entity may be reset to bring it to a known
+** state. In these cases, either a warm reset or a cold reset may be
+** performed. A warm reset preserves entity state, whereas a cold reset
+** does not. Both of these reset types are pulsed asserted and then
+** de-asserted by the HPI implementation. This allows the HPI
+** implementation to hold the reset asserted for the appropriate length
+** of time, as needed by each entity. saHpiResourceResetStateSet() can
+** also be used for insertion and extraction scenarios. A typical
+** resource supporting hot swap will have to ability to control local
+** reset within the FRU. During insertion, a resource can be instructed
+** to assert reset, while the FRU powers on. During extraction a resource
+** can be requested to assert reset before the FRU is powered off. This
+** function allows the caller to set the reset state of the specified
+** FRU. SAHPI_RESET_ASSERT is used to hold the resource in reset; the FRU
+** is brought out of the reset state by using either SAHPI_COLD_RESET or
+** SAHPI_WARM_RESET.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** ResetAction - [in] Type of reset to perform on the entity. Valid reset
+** actions are: SAHPI_COLD_RESET: Perform a 'Cold Reset' on the entity
+** (pulse), leaving reset de-asserted SAHPI_WARM_RESET: Perform a 'Warm
+** Reset' on the entity (pulse), leaving reset de-asserted
+** SAHPI_RESET_ASSERT: Put the entity into reset state and hold reset
+** asserted, e.g., for hot swap insertion/extraction purposes
+**
+** Return Value:
+** SA_OK is returned if the resource has reset control, and the requested
+** reset action has succeeded; otherwise, an error code is returned.
+** SA_ERR_HPI_INVALID_CMD is returned if the resource has no reset
+** control, or if the requested reset action is not supported by the
+** resource.
+**
+** Remarks:
+** Some resources may not support reset, or may only support a subset of
+** the defined reset action types. Also, on some resources, cold and warm
+** resets may be equivalent. 7 Data Type Definitions
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceResetStateSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiResetActionT ResetAction
+);
+
+
+
+#endif
+
diff --git a/hpiutil/SaHpi.h-A b/hpiutil/SaHpi.h-A new file mode 100644 index 0000000..6efd5e9 --- /dev/null +++ b/hpiutil/SaHpi.h-A @@ -0,0 +1,4509 @@ +/*******************************************************************************
+**
+** FILE:
+** SaHpi.h
+**
+** DESCRIPTION:
+** This file provides the C language binding for the Service
+** Availability(TM) Forum Platform Interface. It contains all of
+** the prototypes and type definitions. Note, this file was
+** generated from the Platform Interface specification document.
+**
+** SPECIFICATION VERSION:
+** SAI-HPI-A.01.01
+**
+** DATE:
+** Thu Oct 3 14:48:41 2002
+**
+** LEGAL:
+** OWNERSHIP OF SPECIFICATION AND COPYRIGHTS.
+** The Specification and all worldwide copyrights therein are
+** the exclusive property of Licensor. You may not remove, obscure, or
+** alter any copyright or other proprietary rights notices that are in or
+** on the copy of the Specification you download. You must reproduce all
+** such notices on all copies of the Specification you make. Licensor
+** may make changes to the Specification, or to items referenced therein,
+** at any time without notice. Licensor is not obligated to support or
+** update the Specification.
+**
+** Copyright(c) 2002, Service Availability(TM) Forum. All rights
+** reserved.
+**
+*******************************************************************************/
+
+#ifndef __SAHPI_H
+#define __SAHPI_H
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Basic Data Types and Values **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* General Types - need to be specified correctly for the host architecture */
+typedef unsigned char SaHpiUint8T;
+typedef unsigned short SaHpiUint16T;
+typedef unsigned int SaHpiUint32T;
+typedef char SaHpiInt8T;
+typedef short SaHpiInt16T;
+typedef int SaHpiInt32T;
+typedef long long SaHpiInt64T;
+typedef float SaHpiFloat32T;
+typedef double SaHpiFloat64T;
+
+typedef SaHpiUint8T SaHpiBoolT;
+#define SAHPI_TRUE 1
+#define SAHPI_FALSE 0
+
+/* Platform, O/S, or Vendor dependent */
+#define SAHPI_API
+#define SAHPI_IN
+#define SAHPI_OUT
+#define SAHPI_INOUT
+
+/*
+** Identifier for the manufacturer
+**
+** This is the IANA-assigned private enterprise number for the
+** manufacturer of the resource or FRU, or of the manufacturer
+** defining an OEM control or event type. A list of current
+** IANA-assigned private enterprise numbers may be obtained at
+**
+** http://www.iana.org/assignments/enterprise-numbers
+**
+** If a manufacturer does not currently have an assigned number, one
+** may be obtained by following the instructions located at
+**
+** http://www.iana.org/cgi-bin/enterprise.pl
+*/
+typedef SaHpiUint32T SaHpiManufacturerIdT;
+#define SAHPI_MANUFACTURER_ID_UNSPECIFIED (SaHpiManufacturerIdT)0
+
+/* Version Types */
+typedef SaHpiUint32T SaHpiVersionT;
+
+/*
+** Interface Version
+**
+** The interface version is the version of the actual interface and not the
+** version of the implementation. It is a 24 bit value where
+** the most significant 8 bits represent the compatibility level
+** (with letters represented as the corresponding numbers);
+** the next 8 bits represent the major version number; and
+** the least significant 8 bits represent the minor version number.
+*/
+#define SAHPI_INTERFACE_VERSION (SaHpiVersionT)0x010101 /* A.01.01 */
+
+/*
+** Return Codes
+**
+** SaErrorT is defined in the HPI specification. In the future a
+** common SAF types definition may be created to contain this type. At
+** that time, this typedef should be removed.
+*/
+typedef SaHpiInt32T SaErrorT; /* Return code */
+
+/*
+** SA_OK: This code indicates that a command completed successfully.
+*/
+#define SA_OK (SaErrorT)0x0000
+
+/* This value is the base for all HPI-specific error codes. */
+#define SA_HPI_ERR_BASE -1000
+
+/*
+** SA_ERR_HPI_ERROR: An unspecified error occurred. This code should
+** be returned only as a last resort; eg. if the cause of an error
+** cannot be determined.
+*/
+#define SA_ERR_HPI_ERROR (SaErrorT)(SA_HPI_ERR_BASE - 1)
+
+/*
+** SA_ERR_HPI_UNSUPPORTED_API: The HPI implementation does not support
+** this API. This code is appropriate, for example, if invoking the
+** Hot Swap functions on an HPI implementation which has no hot swap
+** support. Note that such an implementation would not report any hot
+** swap capabilities via its RDRs.
+*/
+#define SA_ERR_HPI_UNSUPPORTED_API (SaErrorT)(SA_HPI_ERR_BASE - 2)
+
+/*
+** SA_ERR_HPI_BUSY: The command cannot be performed because the
+** targeted device is busy.
+*/
+#define SA_ERR_HPI_BUSY (SaErrorT)(SA_HPI_ERR_BASE - 3)
+
+/*
+** SA_ERR_HPI_INVALID: The request is fundamentally invalid.
+*/
+#define SA_ERR_HPI_INVALID (SaErrorT)(SA_HPI_ERR_BASE - 4)
+
+/*
+** SA_ERR_HPI_INVALID_CMD: The specific object to which a command was
+** directed does not support that command (which was otherwise valid).
+*/
+#define SA_ERR_HPI_INVALID_CMD (SaErrorT)(SA_HPI_ERR_BASE - 5)
+
+/*
+** SA_ERR_HPI_TIMEOUT: The requested operation, which had a timeout
+** value specified, timed out. For example, when reading input with a
+** timeout value, if no input arrives within the timeout interval,
+** this code should be returned. This should only be returned in
+** cases where a timeout is anticipated as a valid consequence of the
+** operation; if the addressed entity is not responding due to a
+** fault, use SA_ERR_HPI_NO_RESPONSE (qv).
+*/
+#define SA_ERR_HPI_TIMEOUT (SaErrorT)(SA_HPI_ERR_BASE - 6)
+
+/*
+** SA_ERR_HPI_OUT_OF_SPACE: The requested command failed due to
+** resource limits.
+*/
+#define SA_ERR_HPI_OUT_OF_SPACE (SaErrorT)(SA_HPI_ERR_BASE - 7)
+
+/*
+** SA_ERR_HPI_DATA_TRUNCATED: The returned data was truncated. For
+** example, when reading data into a fixed-size buffer, if the data is
+** larger than the buffer, this code should be returned.
+*/
+#define SA_ERR_HPI_DATA_TRUNCATED (SaErrorT)(SA_HPI_ERR_BASE - 8)
+
+/*
+** SA_ERR_HPI_DATA_LEN_INVALID: The specified data length is invalid.
+*/
+#define SA_ERR_HPI_DATA_LEN_INVALID (SaErrorT)(SA_HPI_ERR_BASE - 9)
+
+/*
+** SA_ERR_HPI_DATA_EX_LIMITS: The supplied data exceeds limits.
+*/
+#define SA_ERR_HPI_DATA_EX_LIMITS (SaErrorT)(SA_HPI_ERR_BASE - 10)
+
+/*
+** SA_ERR_HPI_INVALID_PARAMS: One or more parameters to the command
+** were invalid.
+*/
+#define SA_ERR_HPI_INVALID_PARAMS (SaErrorT)(SA_HPI_ERR_BASE - 11)
+
+/*
+** SA_ERR_HPI_INVALID_DATA: Cannot return requested data; eg. the
+** specific object to which a command was directed does not support
+** the data required by the command.
+*/
+#define SA_ERR_HPI_INVALID_DATA (SaErrorT)(SA_HPI_ERR_BASE - 12)
+
+/*
+** SA_ERR_HPI_NOT_PRESENT: The requested object was not present. For
+** example, this code would be returned when attempting to access an
+** entry in a RPT or RDR which is not present. As another example, this
+** code would also be returned when accessing an invalid management
+** instrument on a valid resource.
+*/
+#define SA_ERR_HPI_NOT_PRESENT (SaErrorT)(SA_HPI_ERR_BASE - 13)
+
+/*
+** SA_ERR_HPI_INVALID_DATA_FIELD: Invalid data field.
+*/
+#define SA_ERR_HPI_INVALID_DATA_FIELD (SaErrorT)(SA_HPI_ERR_BASE - 14)
+
+/*
+** SA_ERR_HPI_INVALID_SENSOR_CMD: Invalid sensor command.
+*/
+#define SA_ERR_HPI_INVALID_SENSOR_CMD (SaErrorT)(SA_HPI_ERR_BASE - 15)
+
+/*
+** SA_ERR_HPI_NO_RESPONSE: There was no response from the domain or
+** object targeted by the command, due to some fault. This code
+** indicates an un-anticipated failure to respond; compare with
+** SA_ERR_HPI_TIMEOUT.
+*/
+#define SA_ERR_HPI_NO_RESPONSE (SaErrorT)(SA_HPI_ERR_BASE - 16)
+
+/*
+** SA_ERR_HPI_DUPLICATE: Duplicate request -- such as attempting to
+** initialize something which has already been initialized (and which
+** cannot be initialized twice).
+*/
+#define SA_ERR_HPI_DUPLICATE (SaErrorT)(SA_HPI_ERR_BASE - 17)
+
+/*
+** SA_ERR_HPI_UPDATING: The command could not be completed because
+** the targeted object is in update mode.
+*/
+#define SA_ERR_HPI_UPDATING (SaErrorT)(SA_HPI_ERR_BASE - 18)
+
+/*
+** SA_ERR_HPI_INITIALIZING: The command could not be completed because
+** the targeted object is initializing.
+*/
+#define SA_ERR_HPI_INITIALIZING (SaErrorT)(SA_HPI_ERR_BASE - 19)
+
+/*
+** SA_ERR_HPI_UNKNOWN: This code should be returned if, for some
+** reason, the HPI implementation cannot determine the proper response
+** to a command. For example, there may be a proper value to return
+** for a given call, but the implementation may be unable to determine
+** which one it is.
+*/
+#define SA_ERR_HPI_UNKNOWN (SaErrorT)(SA_HPI_ERR_BASE - 20)
+
+/*
+** SA_ERR_HPI_INVALID_SESSION: An invalid session ID was specified in
+** the command.
+*/
+#define SA_ERR_HPI_INVALID_SESSION (SaErrorT)(SA_HPI_ERR_BASE - 21)
+
+/*
+** SA_ERR_HPI_INVALID_DOMAIN: Invalid domain ID specified -- ie. a
+** domain ID which does not correspond to any real domain was
+** specified in the command.
+*/
+#define SA_ERR_HPI_INVALID_DOMAIN (SaErrorT)(SA_HPI_ERR_BASE - 22)
+
+/*
+** SA_ERR_HPI_INVALID_RESOURCE: Invalid resource ID specified -- ie. a
+** resource ID which does not correspond to a resource in the addressed
+** domain was specified in the command.
+*/
+#define SA_ERR_HPI_INVALID_RESOURCE (SaErrorT)(SA_HPI_ERR_BASE - 23)
+
+/*
+** SA_ERR_HPI_INVALID_REQUEST: The request is invalid in the current
+** context. An example would be attempting to unsubscribe for events,
+** when the caller has not subscribed to events.
+*/
+#define SA_ERR_HPI_INVALID_REQUEST (SaErrorT)(SA_HPI_ERR_BASE - 24)
+
+/*
+** SA_ERR_HPI_ENTITY_NOT_PRESENT: The addressed management instrument is not active
+** because the entity with which it is associated is not present. This
+** condition could occur, for instance, when an alarm module is managing a
+** fan tray FRU. The alarm module would contain management instruments (sensors,
+** etc) for the fan tray. The fan tray may be removed, even though the
+** management instruments are still represented in the alarm module. In this
+** case, SA_ERR_HPI_ENTITY_NOT_PRESENT would be returned if a management instrument
+** associated with a removed entity is accessed.
+*/
+#define SA_ERR_HPI_ENTITY_NOT_PRESENT (SaErrorT)(SA_HPI_ERR_BASE - 25)
+
+/*
+** SA_ERR_HPI_UNINITIALIZED: This code is returned when a request is
+** made, and the HPI has not, yet, been initialized via saHpiInitialize().
+*/
+#define SA_ERR_HPI_UNINITIALIZED (SaErrorT)(SA_HPI_ERR_BASE - 26)
+
+
+/*
+** Domain, Session and Resource Type Definitions
+*/
+
+/* Domain ID. */
+typedef SaHpiUint32T SaHpiDomainIdT;
+#define SAHPI_DEFAULT_DOMAIN_ID (SaHpiDomainIdT)0
+
+/* The SAHPI_UNSPECIFIED_DOMAIN_ID value may be used by an implementation
+** when populating the ResourceId value for an RPT entry that is a
+** domain only.
+*/
+#define SAHPI_UNSPECIFIED_DOMAIN_ID (SaHpiDomainIdT) 0xFFFFFFFF
+
+/* Session ID. */
+typedef SaHpiUint32T SaHpiSessionIdT;
+
+/* Resource identifier. */
+typedef SaHpiUint32T SaHpiResourceIdT;
+
+/* The SAHPI_UNSPECIFIED_RESOURCE_ID value may be used by an implementation
+** when populating the DomainId value for an RPT entry that is a
+** resource only. Note that this reserved value (0xFFFFFFFF) is also used
+** to designate the domain controller, for domain-based event log access.
+*/
+#define SAHPI_UNSPECIFIED_RESOURCE_ID (SaHpiResourceIdT) 0xFFFFFFFF
+
+/* The SAHPI_DOMAIN_CONTROLLER_ID value is a reserved resource ID
+** value which is used to select the domain controller's event log
+** (as opposed to a real resource's event log) when accessing logs.
+** This value must not be used as the ID of any real resource.
+*/
+#define SAHPI_DOMAIN_CONTROLLER_ID (SaHpiResourceIdT) 0xFFFFFFFE
+
+/* Table Related Type Definitions */
+typedef SaHpiUint32T SaHpiEntryIdT;
+#define SAHPI_FIRST_ENTRY (SaHpiEntryIdT)0x00000000
+#define SAHPI_LAST_ENTRY (SaHpiEntryIdT)0xFFFFFFFF
+
+/*
+** Time Related Type Definitions
+**
+** An HPI time value represents the local time as the number of nanoseconds
+** from 00:00:00, January 1, 1970, in a 64-bit signed integer. This format
+** is sufficient to represent times with nano-second resolution from the
+** year 1678 to 2262. Every API which deals with time values must define
+** the timezone used.
+**
+** It should be noted that although nano-second resolution is supported
+** in the data type, the actual resolution provided by an implementation
+** may be more limited than this.
+**
+** The value -2**63, which is 0x8000000000000000, is used to indicate
+** "unknown/unspecified time".
+**
+** Conversion to/from POSIX and other common time representations is
+** relatively straightforward. The following code framgment converts
+** between SaHpiTimeT and time_t:
+**
+** time_t tt1, tt2;
+** SaHpiTimeT saHpiTime;
+**
+** time(&tt1);
+** saHpiTime = (SaHpiTimeT) tt1 * 1000000000;
+** tt2 = saHpiTime / 1000000000;
+**
+** The following fragment converts between SaHpiTimeT and a struct timeval:
+**
+** struct timeval tv1, tv2;
+** SaHpiTimeT saHpiTime;
+**
+** gettimeofday(&tv1, NULL);
+** saHpiTime = (SaHpiTimeT) tv1.tv_sec * 1000000000 + tv1.tv_usec * 1000;
+** tv2.tv_sec = saHpiTime / 1000000000;
+** tv2.tv_usec = saHpiTime % 1000000000 / 1000;
+**
+** The following fragment converts between SaHpiTimeT and a struct timespec:
+**
+** struct timespec ts1, ts2;
+** SaHpiTimeT saHpiTime;
+**
+** clock_gettime(CLOCK_REALTIME, &ts1);
+** saHpiTime = (SaHpiTimeT) ts1.tv_sec * 1000000000 + ts1.tv_nsec;
+** ts2.tv_sec = saHpiTime / 1000000000;
+** ts2.tv_nsec = saHpiTime % 1000000000;
+**
+** Note, however, that since time_t is (effectively) universally 32 bits,
+** all of these conversions will cease to work on January 18, 2038.
+**
+** Some subsystems may need the flexibility to report either absolute or
+** relative (eg. to system boot) times. This will typically be in the
+** case of a board which may or may not, depending on the system setup,
+** have an idea of absolute time. For example, some boards may have
+** "time of day" clocks which start at zero, and never get set to the
+** time of day.
+**
+** In these cases, times which represent "current" time (in events, for
+** example) can be reported based on the clock value, whether it has been
+** set to the actual date/time, or whether it represents the elapsed time
+** since boot. If it is the time since boot, the value will be (for 27
+** years) less than 0x0C00000000000000, which is Mon May 26 16:58:48 1997.
+** If the value is greater than this, then it can be assumed to be an
+** absolute time.
+**
+** Every API which can report either absolute or relative times must
+** state this rule clearly in its interface specification.
+*/
+typedef SaHpiInt64T SaHpiTimeT; /* Time in nanoseconds */
+
+/* Unspecified or unknown time */
+#define SAHPI_TIME_UNSPECIFIED (SaHpiTimeT) 0x8000000000000000
+
+/* Maximum time that can be specified as relative */
+#define SAHPI_TIME_MAX_RELATIVE (SaHpiTimeT) 0x0C00000000000000
+typedef SaHpiInt64T SaHpiTimeoutT; /* Timeout in nanoseconds */
+
+/* Non-blocking call */
+#define SAHPI_TIMEOUT_IMMEDIATE (SaHpiTimeoutT) 0x0000000000000000
+
+/* Blocking call, wait indefinitely for call to complete */
+#define SAHPI_TIMEOUT_BLOCK (SaHpiTimeoutT) -1
+
+/*
+** Language
+**
+** This enumeration lists all of the languages that can be associated with text.
+**
+** SAHPI_LANG_UNDEF indicates that the language is unspecified or
+** unknown.
+*/
+typedef enum {
+ SAHPI_LANG_UNDEF = 0, SAHPI_LANG_AFAR, SAHPI_LANG_ABKHAZIAN,
+ SAHPI_LANG_AFRIKAANS, SAHPI_LANG_AMHARIC, SAHPI_LANG_ARABIC,
+ SAHPI_LANG_ASSAMESE, SAHPI_LANG_AYMARA, SAHPI_LANG_AZERBAIJANI,
+ SAHPI_LANG_BASHKIR, SAHPI_LANG_BYELORUSSIAN, SAHPI_LANG_BULGARIAN,
+ SAHPI_LANG_BIHARI, SAHPI_LANG_BISLAMA, SAHPI_LANG_BENGALI,
+ SAHPI_LANG_TIBETAN, SAHPI_LANG_BRETON, SAHPI_LANG_CATALAN,
+ SAHPI_LANG_CORSICAN, SAHPI_LANG_CZECH, SAHPI_LANG_WELSH,
+ SAHPI_LANG_DANISH, SAHPI_LANG_GERMAN, SAHPI_LANG_BHUTANI,
+ SAHPI_LANG_GREEK, SAHPI_LANG_ENGLISH, SAHPI_LANG_ESPERANTO,
+ SAHPI_LANG_SPANISH, SAHPI_LANG_ESTONIAN, SAHPI_LANG_BASQUE,
+ SAHPI_LANG_PERSIAN, SAHPI_LANG_FINNISH, SAHPI_LANG_FIJI,
+ SAHPI_LANG_FAEROESE, SAHPI_LANG_FRENCH, SAHPI_LANG_FRISIAN,
+ SAHPI_LANG_IRISH, SAHPI_LANG_SCOTSGAELIC, SAHPI_LANG_GALICIAN,
+ SAHPI_LANG_GUARANI, SAHPI_LANG_GUJARATI, SAHPI_LANG_HAUSA,
+ SAHPI_LANG_HINDI, SAHPI_LANG_CROATIAN, SAHPI_LANG_HUNGARIAN,
+ SAHPI_LANG_ARMENIAN, SAHPI_LANG_INTERLINGUA, SAHPI_LANG_INTERLINGUE,
+ SAHPI_LANG_INUPIAK, SAHPI_LANG_INDONESIAN, SAHPI_LANG_ICELANDIC,
+ SAHPI_LANG_ITALIAN, SAHPI_LANG_HEBREW, SAHPI_LANG_JAPANESE,
+ SAHPI_LANG_YIDDISH, SAHPI_LANG_JAVANESE, SAHPI_LANG_GEORGIAN,
+ SAHPI_LANG_KAZAKH, SAHPI_LANG_GREENLANDIC, SAHPI_LANG_CAMBODIAN,
+ SAHPI_LANG_KANNADA, SAHPI_LANG_KOREAN, SAHPI_LANG_KASHMIRI,
+ SAHPI_LANG_KURDISH, SAHPI_LANG_KIRGHIZ, SAHPI_LANG_LATIN,
+ SAHPI_LANG_LINGALA, SAHPI_LANG_LAOTHIAN, SAHPI_LANG_LITHUANIAN,
+ SAHPI_LANG_LATVIANLETTISH, SAHPI_LANG_MALAGASY, SAHPI_LANG_MAORI,
+ SAHPI_LANG_MACEDONIAN, SAHPI_LANG_MALAYALAM, SAHPI_LANG_MONGOLIAN,
+ SAHPI_LANG_MOLDAVIAN, SAHPI_LANG_MARATHI, SAHPI_LANG_MALAY,
+ SAHPI_LANG_MALTESE, SAHPI_LANG_BURMESE, SAHPI_LANG_NAURU,
+ SAHPI_LANG_NEPALI, SAHPI_LANG_DUTCH, SAHPI_LANG_NORWEGIAN,
+ SAHPI_LANG_OCCITAN, SAHPI_LANG_AFANOROMO, SAHPI_LANG_ORIYA,
+ SAHPI_LANG_PUNJABI, SAHPI_LANG_POLISH, SAHPI_LANG_PASHTOPUSHTO,
+ SAHPI_LANG_PORTUGUESE, SAHPI_LANG_QUECHUA, SAHPI_LANG_RHAETOROMANCE,
+ SAHPI_LANG_KIRUNDI, SAHPI_LANG_ROMANIAN, SAHPI_LANG_RUSSIAN,
+ SAHPI_LANG_KINYARWANDA, SAHPI_LANG_SANSKRIT, SAHPI_LANG_SINDHI,
+ SAHPI_LANG_SANGRO, SAHPI_LANG_SERBOCROATIAN, SAHPI_LANG_SINGHALESE,
+ SAHPI_LANG_SLOVAK, SAHPI_LANG_SLOVENIAN, SAHPI_LANG_SAMOAN,
+ SAHPI_LANG_SHONA, SAHPI_LANG_SOMALI, SAHPI_LANG_ALBANIAN,
+ SAHPI_LANG_SERBIAN, SAHPI_LANG_SISWATI, SAHPI_LANG_SESOTHO,
+ SAHPI_LANG_SUDANESE, SAHPI_LANG_SWEDISH, SAHPI_LANG_SWAHILI,
+ SAHPI_LANG_TAMIL, SAHPI_LANG_TELUGU, SAHPI_LANG_TAJIK,
+ SAHPI_LANG_THAI, SAHPI_LANG_TIGRINYA, SAHPI_LANG_TURKMEN,
+ SAHPI_LANG_TAGALOG, SAHPI_LANG_SETSWANA, SAHPI_LANG_TONGA,
+ SAHPI_LANG_TURKISH, SAHPI_LANG_TSONGA, SAHPI_LANG_TATAR,
+ SAHPI_LANG_TWI, SAHPI_LANG_UKRAINIAN, SAHPI_LANG_URDU,
+ SAHPI_LANG_UZBEK, SAHPI_LANG_VIETNAMESE, SAHPI_LANG_VOLAPUK,
+ SAHPI_LANG_WOLOF, SAHPI_LANG_XHOSA, SAHPI_LANG_YORUBA,
+ SAHPI_LANG_CHINESE, SAHPI_LANG_ZULU
+} SaHpiLanguageT;
+
+/*
+** Text Buffers
+**
+** These structures are used for defining the type of data in the text buffer
+** and the length of the buffer. Text buffers are used in the inventory data,
+** RDR, RPT, etc. for variable length strings of data.
+*/
+
+#define SAHPI_MAX_TEXT_BUFFER_LENGTH 255
+
+typedef enum {
+ SAHPI_TL_TYPE_BINARY = 0, /* String of bytes, any values legal */
+ SAHPI_TL_TYPE_BCDPLUS, /* String of 0-9, space, dash, period ONLY */
+ SAHPI_TL_TYPE_ASCII6, /* Reduced ASCII character set: 0x20-0x5F
+ ONLY */
+ SAHPI_TL_TYPE_LANGUAGE /* ASCII or UNICODE depending on language */
+} SaHpiTextTypeT;
+
+typedef struct {
+ SaHpiTextTypeT DataType;
+ SaHpiLanguageT Language; /* Language the text is in. */
+ SaHpiUint8T DataLength; /* Bytes used in Data buffer */
+ SaHpiUint8T Data[SAHPI_MAX_TEXT_BUFFER_LENGTH]; /* Data buffer */
+} SaHpiTextBufferT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Entities **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+/*
+** Entity Types
+**
+** Entities are used to associate specific hardware components with sensors,
+** controls, watchdogs, or resources. Entities are defined with an entity
+** type enumeration, and an entity instance number (to distinguish between
+** multiple instances of a particular type of entity; e.g., multiple power
+** supplies in a system).
+**
+** Entities are uniquely identified in a system with an ordered series of
+** Entity Type / Entity Instance pairs called an "Entity Path". Each subsequent
+** Entity Type/Entity Instance in the path is the next higher "containing"
+** entity. The "root" of the Entity Path (the outermost level of containment)
+** is designated with an Entity Type of SAHPI_ENT_ROOT if the entire Entity Path
+** is fewer than SAHPI_MAX_ENTITY_PATH entries in length.
+**
+** Enumerated Entity Types include those types enumerated by the IPMI Consortium
+** for IPMI-managed entities, as well as additional types defined by the
+** HPI specification. Room is left in the enumeration for the inclusion of
+** Entity Types taken from other lists, if needed in the future.
+*/
+/* Base values for entity types from various sources. */
+#define SAHPI_ENT_IPMI_GROUP 0
+#define SAHPI_ENT_SAFHPI_GROUP 0x10000
+#define SAHPI_ENT_ROOT_VALUE 0xFFFF
+typedef enum
+{
+ SAHPI_ENT_UNSPECIFIED = SAHPI_ENT_IPMI_GROUP,
+ SAHPI_ENT_OTHER,
+ SAHPI_ENT_UNKNOWN,
+ SAHPI_ENT_PROCESSOR,
+ SAHPI_ENT_DISK_BAY, /* Disk or disk bay */
+ SAHPI_ENT_PERIPHERAL_BAY,
+ SAHPI_ENT_SYS_MGMNT_MODULE, /* System management module */
+ SAHPI_ENT_SYSTEM_BOARD, /* Main system board, may also be
+ processor board and/or internal
+ expansion board */
+ SAHPI_ENT_MEMORY_MODULE, /* Board holding memory devices */
+ SAHPI_ENT_PROCESSOR_MODULE, /* Holds processors, use this
+ designation when processors are not
+ mounted on system board */
+ SAHPI_ENT_POWER_SUPPLY, /* Main power supply (supplies) for the
+ system */
+ SAHPI_ENT_ADD_IN_CARD,
+ SAHPI_ENT_FRONT_PANEL_BOARD, /* Control panel */
+ SAHPI_ENT_BACK_PANEL_BOARD,
+ SAHPI_ENT_POWER_SYSTEM_BOARD,
+ SAHPI_ENT_DRIVE_BACKPLANE,
+ SAHPI_ENT_SYS_EXPANSION_BOARD, /* System internal expansion board
+ (contains expansion slots). */
+ SAHPI_ENT_OTHER_SYSTEM_BOARD, /* Part of board set */
+ SAHPI_ENT_PROCESSOR_BOARD, /* Holds 1 or more processors. Includes
+ boards that hold SECC modules) */
+ SAHPI_ENT_POWER_UNIT, /* Power unit / power domain (typically
+ used as a pre-defined logical entity
+ for grouping power supplies)*/
+ SAHPI_ENT_POWER_MODULE, /* Power module / DC-to-DC converter.
+ Use this value for internal
+ converters. Note: You should use
+ entity ID (power supply) for the
+ main power supply even if the main
+ supply is a DC-to-DC converter */
+ SAHPI_ENT_POWER_MGMNT, /* Power management/distribution
+ board */
+ SAHPI_ENT_CHASSIS_BACK_PANEL_BOARD,
+ SAHPI_ENT_SYSTEM_CHASSIS,
+ SAHPI_ENT_SUB_CHASSIS,
+ SAHPI_ENT_OTHER_CHASSIS_BOARD,
+ SAHPI_ENT_DISK_DRIVE_BAY,
+ SAHPI_ENT_PERIPHERAL_BAY_2,
+ SAHPI_ENT_DEVICE_BAY,
+ SAHPI_ENT_COOLING_DEVICE, /* Fan/cooling device */
+ SAHPI_ENT_COOLING_UNIT, /* Can be used as a pre-defined logical
+ entity for grouping fans or other
+ cooling devices. */
+ SAHPI_ENT_INTERCONNECT, /* Cable / interconnect */
+ SAHPI_ENT_MEMORY_DEVICE, /* This Entity ID should be used for
+ replaceable memory devices, e.g.
+ DIMM/SIMM. It is recommended that
+ Entity IDs not be used for
+ individual non-replaceable memory
+ devices. Rather, monitoring and
+ error reporting should be associated
+ with the FRU [e.g. memory card]
+ holding the memory. */
+ SAHPI_ENT_SYS_MGMNT_SOFTWARE, /* System Management Software */
+ SAHPI_ENT_BIOS,
+ SAHPI_ENT_OPERATING_SYSTEM,
+ SAHPI_ENT_SYSTEM_BUS,
+ SAHPI_ENT_GROUP, /* This is a logical entity for use with
+ Entity Association records. It is
+ provided to allow a sensor data
+ record to point to an entity-
+ association record when there is no
+ appropriate pre-defined logical
+ entity for the entity grouping.
+ This Entity should not be used as a
+ physical entity. */
+ SAHPI_ENT_REMOTE, /* Out of band management communication
+ device */
+ SAHPI_ENT_EXTERNAL_ENVIRONMENT,
+ SAHPI_ENT_BATTERY,
+ SAHPI_ENT_CHASSIS_SPECIFIC = SAHPI_ENT_IPMI_GROUP + 0x90,
+ SAHPI_ENT_BOARD_SET_SPECIFIC = SAHPI_ENT_IPMI_GROUP + 0xB0,
+ SAHPI_ENT_OEM_SYSINT_SPECIFIC = SAHPI_ENT_IPMI_GROUP + 0xD0,
+ SAHPI_ENT_ROOT = SAHPI_ENT_ROOT_VALUE,
+ SAHPI_ENT_RACK = SAHPI_ENT_SAFHPI_GROUP,
+ SAHPI_ENT_SUBRACK,
+ SAHPI_ENT_COMPACTPCI_CHASSIS,
+ SAHPI_ENT_ADVANCEDTCA_CHASSIS,
+ SAHPI_ENT_SYSTEM_SLOT,
+ SAHPI_ENT_SBC_BLADE,
+ SAHPI_ENT_IO_BLADE,
+ SAHPI_ENT_DISK_BLADE,
+ SAHPI_ENT_DISK_DRIVE,
+ SAHPI_ENT_FAN,
+ SAHPI_ENT_POWER_DISTRIBUTION_UNIT,
+ SAHPI_ENT_SPEC_PROC_BLADE, /* Special Processing Blade,
+ including DSP */
+ SAHPI_ENT_IO_SUBBOARD, /* I/O Sub-Board, including
+ PMC I/O board */
+ SAHPI_ENT_SBC_SUBBOARD, /* SBC Sub-Board, including PMC
+ SBC board */
+ SAHPI_ENT_ALARM_MANAGER, /* Chassis alarm manager board */
+ SAHPI_ENT_ALARM_MANAGER_BLADE, /* Blade-based alarm manager */
+ SAHPI_ENT_SUBBOARD_CARRIER_BLADE /* Includes PMC Carrier Blade --
+ Use only if "carrier" is only
+ function of blade. Else use
+ primary function (SBC_BLADE,
+ DSP_BLADE, etc.). */
+ } SaHpiEntityTypeT;
+
+typedef SaHpiUint32T SaHpiEntityInstanceT;
+
+typedef struct {
+ SaHpiEntityTypeT EntityType;
+ SaHpiEntityInstanceT EntityInstance;
+} SaHpiEntityT;
+
+#define SAHPI_MAX_ENTITY_PATH 16
+
+typedef struct {
+ SaHpiEntityT Entry[SAHPI_MAX_ENTITY_PATH];
+} SaHpiEntityPathT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Events, part 1 **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** Category
+**
+** Sensor events contain an event category and event state. Depending on the
+** event category, the event states take on different meanings for events
+** generated by specific sensors.
+**
+** The SAHPI_EC_GENERIC category can be used for discrete sensors which have
+** state meanings other than those identified with other event categories.
+*/
+typedef SaHpiUint8T SaHpiEventCategoryT;
+
+#define SAHPI_EC_UNSPECIFIED (SaHpiEventCategoryT)0x00 /* Unspecified */
+#define SAHPI_EC_THRESHOLD (SaHpiEventCategoryT)0x01 /* Threshold
+ events */
+#define SAHPI_EC_USAGE (SaHpiEventCategoryT)0x02 /* Usage state
+ events */
+#define SAHPI_EC_STATE (SaHpiEventCategoryT)0x03 /* Generic state
+ events */
+#define SAHPI_EC_PRED_FAIL (SaHpiEventCategoryT)0x04 /* Predictive fail
+ events */
+#define SAHPI_EC_LIMIT (SaHpiEventCategoryT)0x05 /* Limit events */
+#define SAHPI_EC_PERFORMANCE (SaHpiEventCategoryT)0x06 /* Performance
+ events */
+#define SAHPI_EC_SEVERITY (SaHpiEventCategoryT)0x07 /* Severity
+ indicating
+ events */
+#define SAHPI_EC_PRESENCE (SaHpiEventCategoryT)0x08 /* Device presence
+ events */
+#define SAHPI_EC_ENABLE (SaHpiEventCategoryT)0x09 /* Device enabled
+ events */
+#define SAHPI_EC_AVAILABILITY (SaHpiEventCategoryT)0x0A /* Availability
+ state events */
+
+#define SAHPI_EC_REDUNDANCY (SaHpiEventCategoryT)0x0B /* Redundancy
+ state events */
+#define SAHPI_EC_USER (SaHpiEventCategoryT)0x7E /* User defined
+ events */
+#define SAHPI_EC_GENERIC (SaHpiEventCategoryT)0x7F /* OEM defined
+ events */
+
+/*
+** Event States
+**
+** The following event states are specified relative to the categories listed
+** above. The event types are only valid for their given category. Each set of
+** events is labeled as to which category it belongs to.
+** Each event will have only one event state associated with it. When retrieving
+** the event status or event enabled status a bit mask of all applicable event
+** states is used. Similarly, when setting the event enabled status a bit mask
+** of all applicable event states is used.
+*/
+typedef SaHpiUint16T SaHpiEventStateT;
+
+/*
+** SaHpiEventCategoryT == <any>
+*/
+#define SAHPI_ES_UNSPECIFIED (SaHpiEventStateT)0x0000
+
+/*
+** SaHpiEventCategoryT == SAHPI_EC_THRESHOLD
+** When using these event states, the event state should match
+** the event severity (for example SAHPI_ES_LOWER_MINOR should have an
+** event severity of SAHPI_MINOR).
+*/
+#define SAHPI_ES_LOWER_MINOR (SaHpiEventStateT)0x0001
+#define SAHPI_ES_LOWER_MAJOR (SaHpiEventStateT)0x0002
+#define SAHPI_ES_LOWER_CRIT (SaHpiEventStateT)0x0004
+#define SAHPI_ES_UPPER_MINOR (SaHpiEventStateT)0x0008
+#define SAHPI_ES_UPPER_MAJOR (SaHpiEventStateT)0x0010
+#define SAHPI_ES_UPPER_CRIT (SaHpiEventStateT)0x0020
+
+/* SaHpiEventCategoryT == SAHPI_EC_USAGE */
+#define SAHPI_ES_IDLE (SaHpiEventStateT)0x0001
+#define SAHPI_ES_ACTIVE (SaHpiEventStateT)0x0002
+#define SAHPI_ES_BUSY (SaHpiEventStateT)0x0004
+
+/* SaHpiEventCategoryT == SAHPI_EC_STATE */
+#define SAHPI_ES_STATE_DEASSERTED (SaHpiEventStateT)0x0001
+#define SAHPI_ES_STATE_ASSERTED (SaHpiEventStateT)0x0002
+
+/* SaHpiEventCategoryT == SAHPI_EC_PRED_FAIL */
+#define SAHPI_ES_PRED_FAILURE_DEASSERT (SaHpiEventStateT)0x0001
+#define SAHPI_ES_PRED_FAILURE_ASSERT (SaHpiEventStateT)0x0002
+
+/* SaHpiEventCategoryT == SAHPI_EC_LIMIT */
+#define SAHPI_ES_LIMIT_NOT_EXCEEDED (SaHpiEventStateT)0x0001
+#define SAHPI_ES_LIMIT_EXCEEDED (SaHpiEventStateT)0x0002
+
+/* SaHpiEventCategoryT == SAHPI_EC_PERFORMANCE */
+#define SAHPI_ES_PERFORMANCE_MET (SaHpiEventStateT)0x0001
+#define SAHPI_ES_PERFORMANCE_LAGS (SaHpiEventStateT)0x0002
+
+/*
+** SaHpiEventCategoryT == SAHPI_EC_SEVERITY
+** When using these event states, the event state should match
+** the event severity
+*/
+#define SAHPI_ES_OK (SaHpiEventStateT)0x0001
+#define SAHPI_ES_MINOR_FROM_OK (SaHpiEventStateT)0x0002
+#define SAHPI_ES_MAJOR_FROM_LESS (SaHpiEventStateT)0x0004
+#define SAHPI_ES_CRITICAL_FROM_LESS (SaHpiEventStateT)0x0008
+#define SAHPI_ES_MINOR_FROM_MORE (SaHpiEventStateT)0x0010
+#define SAHPI_ES_MAJOR_FROM_CRITICAL (SaHpiEventStateT)0x0020
+#define SAHPI_ES_CRITICAL (SaHpiEventStateT)0x0040
+#define SAHPI_ES_MONITOR (SaHpiEventStateT)0x0080
+#define SAHPI_ES_INFORMATIONAL (SaHpiEventStateT)0x0100
+
+/* SaHpiEventCategoryT == SAHPI_EC_PRESENCE */
+#define SAHPI_ES_ABSENT (SaHpiEventStateT)0x0001
+#define SAHPI_ES_PRESENT (SaHpiEventStateT)0x0002
+
+/* SaHpiEventCategoryT == SAHPI_EC_ENABLE */
+#define SAHPI_ES_DISABLED (SaHpiEventStateT)0x0001
+#define SAHPI_ES_ENABLED (SaHpiEventStateT)0x0002
+
+/* SaHpiEventCategoryT == SAHPI_EC_AVAILABILITY */
+#define SAHPI_ES_RUNNING (SaHpiEventStateT)0x0001
+#define SAHPI_ES_TEST (SaHpiEventStateT)0x0002
+#define SAHPI_ES_POWER_OFF (SaHpiEventStateT)0x0004
+#define SAHPI_ES_ON_LINE (SaHpiEventStateT)0x0008
+#define SAHPI_ES_OFF_LINE (SaHpiEventStateT)0x0010
+#define SAHPI_ES_OFF_DUTY (SaHpiEventStateT)0x0020
+#define SAHPI_ES_DEGRADED (SaHpiEventStateT)0x0040
+#define SAHPI_ES_POWER_SAVE (SaHpiEventStateT)0x0080
+#define SAHPI_ES_INSTALL_ERROR (SaHpiEventStateT)0x0100
+
+/* SaHpiEventCategoryT == SAHPI_EC_REDUNDANCY */
+#define SAHPI_ES_FULLY_REDUNDANT (SaHpiEventStateT)0x0001
+#define SAHPI_ES_REDUNDANCY_LOST (SaHpiEventStateT)0x0002
+#define SAHPI_ES_REDUNDANCY_DEGRADED (SaHpiEventStateT)0x0004
+#define SAHPI_ES_REDUNDANCY_LOST_SUFFICIENT_RESOURCES \
+ (SaHpiEventStateT)0x0008
+#define SAHPI_ES_NON_REDUNDANT_SUFFICIENT_RESOURCES \
+ (SaHpiEventStateT)0x0010
+#define SAHPI_ES_NON_REDUNDANT_INSUFFICIENT_RESOURCES \
+ (SaHpiEventStateT)0x0020
+#define SAHPI_ES_REDUNDANCY_DEGRADED_FROM_FULL (SaHpiEventStateT)0x0040
+#define SAHPI_ES_REDUNDANCY_DEGRADED_FROM_NON (SaHpiEventStateT)0x0080
+
+/*
+** SaHpiEventCategoryT == SAHPI_EC_GENERIC || SAHPI_EC_USER
+** These event states are defined by the OEM or the user of the
+** implementation.
+*/
+#define SAHPI_ES_STATE_00 (SaHpiEventStateT)0x0001
+#define SAHPI_ES_STATE_01 (SaHpiEventStateT)0x0002
+#define SAHPI_ES_STATE_02 (SaHpiEventStateT)0x0004
+#define SAHPI_ES_STATE_03 (SaHpiEventStateT)0x0008
+#define SAHPI_ES_STATE_04 (SaHpiEventStateT)0x0010
+#define SAHPI_ES_STATE_05 (SaHpiEventStateT)0x0020
+#define SAHPI_ES_STATE_06 (SaHpiEventStateT)0x0040
+#define SAHPI_ES_STATE_07 (SaHpiEventStateT)0x0080
+#define SAHPI_ES_STATE_08 (SaHpiEventStateT)0x0100
+#define SAHPI_ES_STATE_09 (SaHpiEventStateT)0x0200
+#define SAHPI_ES_STATE_10 (SaHpiEventStateT)0x0400
+#define SAHPI_ES_STATE_11 (SaHpiEventStateT)0x0800
+#define SAHPI_ES_STATE_12 (SaHpiEventStateT)0x1000
+#define SAHPI_ES_STATE_13 (SaHpiEventStateT)0x2000
+#define SAHPI_ES_STATE_14 (SaHpiEventStateT)0x4000
+
+
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Sensors **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* Sensor Number */
+typedef SaHpiUint8T SaHpiSensorNumT;
+
+/* Type of Sensor */
+typedef enum {
+ SAHPI_TEMPERATURE = 0x01,
+ SAHPI_VOLTAGE,
+ SAHPI_CURRENT,
+ SAHPI_FAN,
+ SAHPI_PHYSICAL_SECURITY,
+ SAHPI_PLATFORM_VIOLATION,
+ SAHPI_PROCESSOR,
+ SAHPI_POWER_SUPPLY,
+ SAHPI_POWER_UNIT,
+ SAHPI_COOLING_DEVICE,
+ SAHPI_OTHER_UNITS_BASED_SENSOR,
+ SAHPI_MEMORY,
+ SAHPI_DRIVE_SLOT,
+ SAHPI_POST_MEMORY_RESIZE,
+ SAHPI_SYSTEM_FW_PROGRESS,
+ SAHPI_EVENT_LOGGING_DISABLED,
+ SAHPI_RESERVED1,
+ SAHPI_SYSTEM_EVENT,
+ SAHPI_CRITICAL_INTERRUPT,
+ SAHPI_BUTTON,
+ SAHPI_MODULE_BOARD,
+ SAHPI_MICROCONTROLLER_COPROCESSOR,
+ SAHPI_ADDIN_CARD,
+ SAHPI_CHASSIS,
+ SAHPI_CHIP_SET,
+ SAHPI_OTHER_FRU,
+ SAHPI_CABLE_INTERCONNECT,
+ SAHPI_TERMINATOR,
+ SAHPI_SYSTEM_BOOT_INITIATED,
+ SAHPI_BOOT_ERROR,
+ SAHPI_OS_BOOT,
+ SAHPI_OS_CRITICAL_STOP,
+ SAHPI_SLOT_CONNECTOR,
+ SAHPI_SYSTEM_ACPI_POWER_STATE,
+ SAHPI_RESERVED2,
+ SAHPI_PLATFORM_ALERT,
+ SAHPI_ENTITY_PRESENCE,
+ SAHPI_MONITOR_ASIC_IC,
+ SAHPI_LAN,
+ SAHPI_MANAGEMENT_SUBSYSTEM_HEALTH,
+ SAHPI_BATTERY,
+ SAHPI_OPERATIONAL = 0xA0,
+ SAHPI_OEM_SENSOR=0xC0
+} SaHpiSensorTypeT;
+
+/*
+** Interpreted Sensor Reading Type
+**
+** These definitions list the available data types that can be
+** used for interpreted sensor readings. Interpreted sensor readings are provided
+** because typically sensors measure their associated entities in a way that is
+** not human readable/understandable. For example a fan sensor may measure the
+** number of ticks that it takes a fan blade to move passed a sensor. The human
+** readable reading type would be revolutions per minute (RPM).
+*/
+
+#define SAHPI_SENSOR_BUFFER_LENGTH 32
+
+typedef enum {
+ SAHPI_SENSOR_INTERPRETED_TYPE_UINT8,
+ SAHPI_SENSOR_INTERPRETED_TYPE_UINT16,
+ SAHPI_SENSOR_INTERPRETED_TYPE_UINT32,
+ SAHPI_SENSOR_INTERPRETED_TYPE_INT8,
+ SAHPI_SENSOR_INTERPRETED_TYPE_INT16,
+ SAHPI_SENSOR_INTERPRETED_TYPE_INT32,
+ SAHPI_SENSOR_INTERPRETED_TYPE_FLOAT32,
+ SAHPI_SENSOR_INTERPRETED_TYPE_BUFFER /* 32 byte array */
+} SaHpiSensorInterpretedTypeT;
+
+typedef union {
+ SaHpiUint8T SensorUint8;
+ SaHpiUint16T SensorUint16;
+ SaHpiUint32T SensorUint32;
+ SaHpiInt8T SensorInt8;
+ SaHpiInt16T SensorInt16;
+ SaHpiInt32T SensorInt32;
+ SaHpiFloat32T SensorFloat32;
+ SaHpiUint8T SensorBuffer[SAHPI_SENSOR_BUFFER_LENGTH];
+} SaHpiSensorInterpretedUnionT;
+
+typedef struct {
+ SaHpiSensorInterpretedTypeT Type;
+ SaHpiSensorInterpretedUnionT Value;
+} SaHpiSensorInterpretedT;
+
+/*
+** Sensor Status
+**
+** The sensor status structure is used to determine if sensor scanning is
+** enabled and if events are enabled. If events are enabled, the structure will
+** have valid data for the outstanding sensor event states.
+*/
+typedef SaHpiUint8T SaHpiSensorStatusT;
+#define SAHPI_SENSTAT_EVENTS_ENABLED (SaHpiSensorStatusT)0x80
+#define SAHPI_SENSTAT_SCAN_ENABLED (SaHpiSensorStatusT)0x40
+#define SAHPI_SENSTAT_BUSY (SaHpiSensorStatusT)0x20
+
+typedef struct {
+ SaHpiSensorStatusT SensorStatus;
+ SaHpiEventStateT EventStatus;
+} SaHpiSensorEvtStatusT;
+
+/* Sensor Event Enables */
+typedef struct {
+ SaHpiSensorStatusT SensorStatus;
+ SaHpiEventStateT AssertEvents;
+ SaHpiEventStateT DeassertEvents;
+} SaHpiSensorEvtEnablesT;
+
+/*
+** Sensor Reading
+**
+** The sensor reading type is the data structure returned from a call to get
+** sensor reading. The structure is also used when setting and getting sensor
+** threshold values and reporting sensor ranges.
+** Each sensor may support one or more of raw, interpreted, or event status
+** representations of the sensor data. For analog sensors the raw value is the
+** raw value from the sensor (such as ticks per fan blade) and the interpreted
+** value is the raw value converted in to a usable format (such as RPM). The
+** interpreted value can be calculated by the HPI implementation using the
+** sensor factors or by another OEM means.
+*/
+typedef SaHpiUint8T SaHpiSensorReadingFormatsT;
+#define SAHPI_SRF_RAW (SaHpiSensorReadingFormatsT)0x01
+#define SAHPI_SRF_INTERPRETED (SaHpiSensorReadingFormatsT)0x02
+#define SAHPI_SRF_EVENT_STATE (SaHpiSensorReadingFormatsT)0x04
+
+typedef struct {
+ SaHpiSensorReadingFormatsT ValuesPresent;
+ SaHpiUint32T Raw;
+ SaHpiSensorInterpretedT Interpreted;
+ SaHpiSensorEvtStatusT EventStatus;
+} SaHpiSensorReadingT;
+
+/*
+** Threshold Values
+** This structure encompasses all of the thresholds that can be set.
+*/
+typedef struct {
+ SaHpiSensorReadingT LowCritical; /* Lower Critical Threshold */
+ SaHpiSensorReadingT LowMajor; /* Lower Major Threshold */
+ SaHpiSensorReadingT LowMinor; /* Lower Minor Threshold */
+ SaHpiSensorReadingT UpCritical; /* Upper critical Threshold */
+ SaHpiSensorReadingT UpMajor; /* Upper major Threshold */
+ SaHpiSensorReadingT UpMinor; /* Upper minor Threshold */
+ SaHpiSensorReadingT PosThdHysteresis; /* Positive Threshold Hysteresis */
+ SaHpiSensorReadingT NegThdHysteresis; /* Negative Threshold Hysteresis */
+}SaHpiSensorThresholdsT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Sensor Resource Data Records **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** Sensor Factors
+**
+** The sensor factors structure defines the conversion factors for linear and
+** linearized sensors.
+** The SaHpiSensorLinearizationT enumeration coupled with the various other
+** sensor factors define a formula that can be applied to raw sensor data to
+** convert it to appropriate engineering units. If linearization is
+** SAHPI_SL_NONLINEAR, SAHPI_SL_UNSPECIFIED, or SAHPI_SL_OEM then there is no
+** predefined conversion from raw to interpreted and the sensor factors may or
+** may not be meaningful depending on the implementation.
+** For other linearization values, raw readings may be converted to interpreted
+** values using the formula:
+**Interpreted = L [( M*raw + B*10^ExpB )*10^ExpR ]
+**where "L[x]" is the indicated linearization function
+** (for SAHPI_SL_LINEAR, L[x]=x).
+** The Tolerance Factor is given as +/- 1/2 raw counts, so tolerance in
+** interpreted values can be calculated as:
+** L[ M * ToleranceFactor/2 * 10^ExpR ]
+** The Accuracy Factor is given as 1/100 of a percent, scaled up by ExpA. Thus
+** the accuracy is:
+**( ( AccuracyFactor/100 ) / 10^ExpA )%
+*/
+typedef enum {
+ SAHPI_SL_LINEAR = 0, /* Already linear */
+ SAHPI_SL_LN,
+ SAHPI_SL_LOG10,
+ SAHPI_SL_LOG2,
+ SAHPI_SL_E,
+ SAHPI_SL_EXP10,
+ SAHPI_SL_EXP2,
+ SAHPI_SL_1OVERX,
+ SAHPI_SL_SQRX,
+ SAHPI_SL_CUBEX,
+ SAHPI_SL_SQRTX,
+ SAHPI_SL_CUBERTX,
+ SAHPI_SL_NONLINEAR = 0x70, /* Cannot be linearized with a predefind formula*/
+ SAHPI_SL_OEM,
+ SAHPI_SL_UNSPECIFIED = 0xFF
+} SaHpiSensorLinearizationT;
+
+typedef struct {
+ SaHpiInt16T M_Factor; /* M Factor */
+ SaHpiInt16T B_Factor; /* B Factor */
+ SaHpiUint16T AccuracyFactor; /* Accuracy */
+ SaHpiUint8T ToleranceFactor; /* Tolerance */
+ SaHpiUint8T ExpA; /* Accuracy Exp */
+ SaHpiInt8T ExpR; /* Result Exp */
+ SaHpiInt8T ExpB; /* B Exp */
+ SaHpiSensorLinearizationT Linearization;
+} SaHpiSensorFactorsT;
+
+/*
+** Sensor Range
+** Sensor range values can include minimum, maximum, normal minimum, normal
+** maximum, and nominal values.
+*/
+typedef SaHpiUint8T SaHpiSensorRangeFlagsT;
+#define SAHPI_SRF_MIN (SaHpiSensorRangeFlagsT)0x10
+#define SAHPI_SRF_MAX (SaHpiSensorRangeFlagsT)0x08
+#define SAHPI_SRF_NORMAL_MIN (SaHpiSensorRangeFlagsT)0x04
+#define SAHPI_SRF_NORMAL_MAX (SaHpiSensorRangeFlagsT)0x02
+#define SAHPI_SRF_NOMINAL (SaHpiSensorRangeFlagsT)0x01
+
+typedef struct {
+ SaHpiSensorRangeFlagsT Flags;
+ SaHpiSensorReadingT Max;
+ SaHpiSensorReadingT Min;
+ SaHpiSensorReadingT Nominal;
+ SaHpiSensorReadingT NormalMax;
+ SaHpiSensorReadingT NormalMin;
+} SaHpiSensorRangeT;
+
+/*
+** Sensor Units
+** This is a list of all the sensor units supported by HPI.
+*/
+typedef enum {
+ SAHPI_SU_UNSPECIFIED = 0, SAHPI_SU_DEGREES_C, SAHPI_SU_DEGREES_F,
+ SAHPI_SU_DEGREES_K, SAHPI_SU_VOLTS, SAHPI_SU_AMPS,
+ SAHPI_SU_WATTS, SAHPI_SU_JOULES, SAHPI_SU_COULOMBS,
+ SAHPI_SU_VA, SAHPI_SU_NITS, SAHPI_SU_LUMEN,
+ SAHPI_SU_LUX, SAHPI_SU_CANDELA, SAHPI_SU_KPA,
+ SAHPI_SU_PSI, SAHPI_SU_NEWTON, SAHPI_SU_CFM,
+ SAHPI_SU_RPM, SAHPI_SU_HZ, SAHPI_SU_MICROSECOND,
+ SAHPI_SU_MILLISECOND, SAHPI_SU_SECOND, SAHPI_SU_MINUTE,
+ SAHPI_SU_HOUR, SAHPI_SU_DAY, SAHPI_SU_WEEK,
+ SAHPI_SU_MIL, SAHPI_SU_INCHES, SAHPI_SU_FEET,
+ SAHPI_SU_CU_IN, SAHPI_SU_CU_FEET, SAHPI_SU_MM,
+ SAHPI_SU_CM, SAHPI_SU_M, SAHPI_SU_CU_CM,
+ SAHPI_SU_CU_M, SAHPI_SU_LITERS, SAHPI_SU_FLUID_OUNCE,
+ SAHPI_SU_RADIANS, SAHPI_SU_STERADIANS, SAHPI_SU_REVOLUTIONS,
+ SAHPI_SU_CYCLES, SAHPI_SU_GRAVITIES, SAHPI_SU_OUNCE,
+ SAHPI_SU_POUND, SAHPI_SU_FT_LB, SAHPI_SU_OZ_IN,
+ SAHPI_SU_GAUSS, SAHPI_SU_GILBERTS, SAHPI_SU_HENRY,
+ SAHPI_SU_MILLIHENRY, SAHPI_SU_FARAD, SAHPI_SU_MICROFARAD,
+ SAHPI_SU_OHMS, SAHPI_SU_SIEMENS, SAHPI_SU_MOLE,
+ SAHPI_SU_BECQUEREL, SAHPI_SU_PPM, SAHPI_SU_RESERVED,
+ SAHPI_SU_DECIBELS, SAHPI_SU_DBA, SAHPI_SU_DBC,
+ SAHPI_SU_GRAY, SAHPI_SU_SIEVERT, SAHPI_SU_COLOR_TEMP_DEG_K,
+ SAHPI_SU_BIT, SAHPI_SU_KILOBIT, SAHPI_SU_MEGABIT,
+ SAHPI_SU_GIGABIT, SAHPI_SU_BYTE, SAHPI_SU_KILOBYTE,
+ SAHPI_SU_MEGABYTE, SAHPI_SU_GIGABYTE, SAHPI_SU_WORD,
+ SAHPI_SU_DWORD, SAHPI_SU_QWORD, SAHPI_SU_LINE,
+ SAHPI_SU_HIT, SAHPI_SU_MISS, SAHPI_SU_RETRY,
+ SAHPI_SU_RESET, SAHPI_SU_OVERRUN, SAHPI_SU_UNDERRUN,
+ SAHPI_SU_COLLISION, SAHPI_SU_PACKETS, SAHPI_SU_MESSAGES,
+ SAHPI_SU_CHARACTERS, SAHPI_SU_ERRORS, SAHPI_SU_CORRECTABLE_ERRORS,
+ SAHPI_SU_UNCORRECTABLE_ERRORS
+} SaHpiSensorUnitsT;
+
+/*
+** Modifier Unit Use
+** This type defines how the modifier unit is used. For example: base unit ==
+** meter, modifier unit == seconds, and modifier unit use ==
+** SAHPI_SMUU_BASIC_OVER_MODIFIER. The resulting unit would be meters per second.
+*/
+typedef enum {
+ SAHPI_SMUU_NONE = 0,
+ SAHPI_SMUU_BASIC_OVER_MODIFIER, /* Basic Unit / Modifier Unit */
+ SAHPI_SMUU_BASIC_TIMES_MODIFIER /* Basic Unit * Modifier Unit */
+} SaHpiSensorModUnitUseT;
+
+/*
+** Sign Format
+** This type defines what the sign format of the sensor's raw value is (1's
+** complement, unsigned, etc.).
+*/
+typedef enum {
+ SAHPI_SDF_UNSIGNED = 0,
+ SAHPI_SDF_1S_COMPLEMENT,
+ SAHPI_SDF_2S_COMPLEMENT
+} SaHpiSensorSignFormatT;
+
+/*
+** Data Format
+** This structure encapsulates all of the various types that make up the
+** definition of sensor data.
+*/
+typedef struct {
+ SaHpiSensorReadingFormatsT ReadingFormats; /* Indicates if sensor supports
+ readings in raw, interpreted,
+ and/or event status formats */
+ SaHpiBoolT IsNumeric; /* If FALSE, rest of this
+ structure is not
+ meaningful */
+ SaHpiSensorSignFormatT SignFormat; /* Signed format */
+ SaHpiSensorUnitsT BaseUnits; /* Base units (meters, etc.) */
+ SaHpiSensorUnitsT ModifierUnits; /* Modifier unit (second, etc.) */
+ SaHpiSensorModUnitUseT ModifierUse; /* Modifier use(m/sec, etc.) */
+ SaHpiBoolT FactorsStatic; /* True if the sensor factors
+ are static. If false
+ factors vary over sensor
+ range, and are not
+ accessible through HPI */
+ SaHpiSensorFactorsT Factors;
+ SaHpiBoolT Percentage; /* Is value a percentage */
+ SaHpiSensorRangeT Range; /* Valid range of sensor */
+} SaHpiSensorDataFormatT;
+
+/*
+** Threshold Support
+**
+** These types define what threshold values are readable, writable, and fixed.
+** It also defines how the threshold values are read and written.
+*/
+typedef SaHpiUint8T SaHpiSensorThdMaskT;
+#define SAHPI_STM_LOW_MINOR (SaHpiSensorThdMaskT)0x01
+#define SAHPI_STM_LOW_MAJOR (SaHpiSensorThdMaskT)0x02
+#define SAHPI_STM_LOW_CRIT (SaHpiSensorThdMaskT)0x04
+#define SAHPI_STM_UP_MINOR (SaHpiSensorThdMaskT)0x08
+#define SAHPI_STM_UP_MAJOR (SaHpiSensorThdMaskT)0x10
+#define SAHPI_STM_UP_CRIT (SaHpiSensorThdMaskT)0x20
+#define SAHPI_STM_UP_HYSTERESIS (SaHpiSensorThdMaskT)0x40
+#define SAHPI_STM_LOW_HYSTERESIS (SaHpiSensorThdMaskT)0x80
+
+typedef SaHpiUint8T SaHpiSensorThdCapT;
+#define SAHPI_STC_RAW (SaHpiSensorThdMaskT)0x01 /* read/write as
+ raw counts */
+#define SAHPI_STC_INTERPRETED (SaHpiSensorThdMaskT)0x02 /* read/write as
+ interpreted */
+
+typedef struct {
+ SaHpiBoolT IsThreshold; /* True if the sensor
+ supports thresholds. If false,
+ rest of structure is not
+ meaningful. */
+ SaHpiSensorThdCapT TholdCapabilities;
+ SaHpiSensorThdMaskT ReadThold; /* Readable thresholds */
+ SaHpiSensorThdMaskT WriteThold; /* Writable thresholds */
+ SaHpiSensorThdMaskT FixedThold; /* Fixed thresholds */
+} SaHpiSensorThdDefnT;
+
+/*
+** Event Control
+**
+** This type defines how sensor event messages can be controlled (can be turned
+** off and on for each type of event, etc.).
+*/
+typedef enum {
+ SAHPI_SEC_PER_EVENT = 0, /* Event message control per event */
+ SAHPI_SEC_ENTIRE_SENSOR, /* Control for entire sensor only */
+ SAHPI_SEC_GLOBAL_DISABLE, /* Global disable of events only */
+ SAHPI_SEC_NO_EVENTS /* Events not supported */
+} SaHpiSensorEventCtrlT;
+
+/*
+** Record
+**
+** This is the sensor resource data record which describes all of the static
+** data associated with a sensor.
+*/
+typedef struct {
+ SaHpiSensorNumT Num; /* Sensor Number/Index */
+ SaHpiSensorTypeT Type; /* General Sensor Type */
+ SaHpiEventCategoryT Category; /* Event category */
+ SaHpiSensorEventCtrlT EventCtrl; /* How events can be controlled */
+ SaHpiEventStateT Events; /* Bit mask of event states
+ supported */
+ SaHpiBoolT Ignore; /* Ignore sensor (entity not
+ present, disabled, etc.) */
+ SaHpiSensorDataFormatT DataFormat; /* Format of the data */
+ SaHpiSensorThdDefnT ThresholdDefn; /* Threshold Definition */
+ SaHpiUint32T Oem; /* Reserved for OEM use */
+} SaHpiSensorRecT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Aggregate Status **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* These are the default sensor numbers for aggregate status. */
+#define SAHPI_DEFAGSENS_OPER (SaHpiSensorNumT)0xFE
+#define SAHPI_DEFAGSENS_PWR (SaHpiSensorNumT)0xFD
+#define SAHPI_DEFAGSENS_TEMP (SaHpiSensorNumT)0xFC
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Controls **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* Control Number */
+typedef SaHpiUint8T SaHpiCtrlNumT;
+
+/*
+** Type of Control
+**
+** This enumerated type defines the different types of generic controls.
+*/
+typedef enum {
+ SAHPI_CTRL_TYPE_DIGITAL = 0x00,
+ SAHPI_CTRL_TYPE_DISCRETE,
+ SAHPI_CTRL_TYPE_ANALOG,
+ SAHPI_CTRL_TYPE_STREAM,
+ SAHPI_CTRL_TYPE_TEXT,
+ SAHPI_CTRL_TYPE_OEM = 0xC0
+} SaHpiCtrlTypeT;
+
+/*
+** Control State Type Definitions
+**
+** Defines the types of control states.
+*/
+typedef enum {
+ SAHPI_CTRL_STATE_OFF = 0,
+ SAHPI_CTRL_STATE_ON,
+ SAHPI_CTRL_STATE_PULSE_OFF,
+ SAHPI_CTRL_STATE_PULSE_ON,
+ SAHPI_CTRL_STATE_AUTO = 0xFF
+} SaHpiCtrlStateDigitalT;
+
+typedef SaHpiUint32T SaHpiCtrlStateDiscreteT;
+
+typedef SaHpiInt32T SaHpiCtrlStateAnalogT;
+
+#define SAHPI_CTRL_MAX_STREAM_LENGTH 4
+typedef struct {
+ SaHpiBoolT Repeat; /* Repeat flag */
+ SaHpiUint32T StreamLength; /* Length of the data, in bytes,
+ ** stored in the stream. */
+ SaHpiUint8T Stream[SAHPI_CTRL_MAX_STREAM_LENGTH];
+} SaHpiCtrlStateStreamT;
+
+typedef SaHpiUint8T SaHpiTxtLineNumT;
+
+/* Reserved number for sending output to all lines */
+#define SAHPI_TLN_ALL_LINES (SaHpiTxtLineNumT)0xFF
+
+typedef struct {
+ SaHpiTxtLineNumT Line; /* Operate on line # */
+ SaHpiTextBufferT Text; /* Text to display */
+} SaHpiCtrlStateTextT;
+
+#define SAHPI_CTRL_MAX_OEM_BODY_LENGTH 255
+typedef struct {
+ SaHpiManufacturerIdT MId;
+ SaHpiUint8T BodyLength;
+ SaHpiUint8T Body[SAHPI_CTRL_MAX_OEM_BODY_LENGTH]; /* OEM Specific */
+} SaHpiCtrlStateOemT;
+
+typedef union {
+ SaHpiCtrlStateDigitalT Digital;
+ SaHpiCtrlStateDiscreteT Discrete;
+ SaHpiCtrlStateAnalogT Analog;
+ SaHpiCtrlStateStreamT Stream;
+ SaHpiCtrlStateTextT Text;
+ SaHpiCtrlStateOemT Oem;
+} SaHpiCtrlStateUnionT;
+
+typedef struct {
+ SaHpiCtrlTypeT Type; /* Type of control */
+ SaHpiCtrlStateUnionT StateUnion; /* Data for control type */
+} SaHpiCtrlStateT;
+
+
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Control Resource Data Records **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** Output Type
+**
+** This enumeration defines the what the control's output will be.
+*/
+typedef enum {
+ SAHPI_CTRL_GENERIC = 0,
+ SAHPI_CTRL_LED,
+ SAHPI_CTRL_FAN_SPEED,
+ SAHPI_CTRL_DRY_CONTACT_CLOSURE,
+ SAHPI_CTRL_POWER_SUPPLY_INHIBIT,
+ SAHPI_CTRL_AUDIBLE,
+ SAHPI_CTRL_FRONT_PANEL_LOCKOUT,
+ SAHPI_CTRL_POWER_INTERLOCK,
+ SAHPI_CTRL_POWER_STATE,
+ SAHPI_CTRL_LCD_DISPLAY,
+ SAHPI_CTRL_OEM
+} SaHpiCtrlOutputTypeT;
+
+/*
+** Specific Record Types
+** These types represent the specific types of control resource data records.
+*/
+typedef struct {
+ SaHpiCtrlStateDigitalT Default;
+} SaHpiCtrlRecDigitalT;
+
+typedef struct {
+ SaHpiCtrlStateDiscreteT Default;
+} SaHpiCtrlRecDiscreteT;
+
+typedef struct {
+ SaHpiCtrlStateAnalogT Min; /* Minimum Value */
+ SaHpiCtrlStateAnalogT Max; /* Maximum Value */
+ SaHpiCtrlStateAnalogT Default;
+} SaHpiCtrlRecAnalogT;
+
+typedef struct {
+ SaHpiCtrlStateStreamT Default;
+} SaHpiCtrlRecStreamT;
+
+typedef struct {
+ SaHpiUint8T MaxChars; /* Maximum chars per line */
+ SaHpiUint8T MaxLines; /* Maximum # of lines */
+ SaHpiLanguageT Language; /* Language Code */
+ SaHpiTextTypeT DataType; /* Permitted Data */
+ SaHpiCtrlStateTextT Default;
+} SaHpiCtrlRecTextT;
+
+#define SAHPI_CTRL_OEM_CONFIG_LENGTH 10
+typedef struct {
+ SaHpiManufacturerIdT MId;
+ SaHpiUint8T ConfigData[SAHPI_CTRL_OEM_CONFIG_LENGTH];
+ SaHpiCtrlStateOemT Default;
+} SaHpiCtrlRecOemT;
+
+typedef union {
+ SaHpiCtrlRecDigitalT Digital;
+ SaHpiCtrlRecDiscreteT Discrete;
+ SaHpiCtrlRecAnalogT Analog;
+ SaHpiCtrlRecStreamT Stream;
+ SaHpiCtrlRecTextT Text;
+ SaHpiCtrlRecOemT Oem;
+} SaHpiCtrlRecUnionT;
+
+/*
+** Record Definition
+** Definition of the control resource data record.
+*/
+typedef struct {
+ SaHpiCtrlNumT Num; /* Control Number/Index */
+ SaHpiBoolT Ignore; /* Ignore control (entity
+ not present, disabled, etc.) */
+ SaHpiCtrlOutputTypeT OutputType;
+ SaHpiCtrlTypeT Type; /* Type of control */
+ SaHpiCtrlRecUnionT TypeUnion; /* Specific control record */
+ SaHpiUint32T Oem; /* Reserved for OEM use */
+} SaHpiCtrlRecT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Entity Inventory Data **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+/*
+** These structures are used to read and write inventory data to entity inventory
+** repositories within a resource.
+*/
+/*
+** Entity Inventory Repository ID
+** Identifier for an entity inventory repository.
+*/
+typedef SaHpiUint8T SaHpiEirIdT;
+#define SAHPI_DEFAULT_INVENTORY_ID (SaHpiEirIdT)0x00
+
+/* Data Validity */
+typedef enum {
+ SAHPI_INVENT_DATA_VALID,
+ SAHPI_INVENT_DATA_INVALID,
+ SAHPI_INVENT_DATA_OVERFLOW
+} SaHpiInventDataValidityT;
+
+/* Inventory Record definitions */
+typedef enum {
+ SAHPI_INVENT_RECTYPE_INTERNAL_USE = 0xB0,
+ SAHPI_INVENT_RECTYPE_CHASSIS_INFO,
+ SAHPI_INVENT_RECTYPE_BOARD_INFO,
+ SAHPI_INVENT_RECTYPE_PRODUCT_INFO,
+ SAHPI_INVENT_RECTYPE_OEM = 0xC0
+} SaHpiInventDataRecordTypeT;
+
+typedef enum {
+ SAHPI_INVENT_CTYP_OTHER = 1,
+ SAHPI_INVENT_CTYP_UNKNOWN,
+ SAHPI_INVENT_CTYP_DESKTOP,
+ SAHPI_INVENT_CTYP_LOW_PROFILE_DESKTOP,
+ SAHPI_INVENT_CTYP_PIZZA_BOX,
+ SAHPI_INVENT_CTYP_MINI_TOWER,
+ SAHPI_INVENT_CTYP_TOWER,
+ SAHPI_INVENT_CTYP_PORTABLE,
+ SAHPI_INVENT_CTYP_LAPTOP,
+ SAHPI_INVENT_CTYP_NOTEBOOK,
+ SAHPI_INVENT_CTYP_HANDHELD,
+ SAHPI_INVENT_CTYP_DOCKING_STATION,
+ SAHPI_INVENT_CTYP_ALLINONE,
+ SAHPI_INVENT_CTYP_SUBNOTEBOOK,
+ SAHPI_INVENT_CTYP_SPACE_SAVING,
+ SAHPI_INVENT_CTYP_LUNCH_BOX,
+ SAHPI_INVENT_CTYP_MAIN_SERVER,
+ SAHPI_INVENT_CTYP_EXPANSION,
+ SAHPI_INVENT_CTYP_SUBCHASSIS,
+ SAHPI_INVENT_CTYP_BUS_EXPANSION_CHASSIS,
+ SAHPI_INVENT_CTYP_PERIPHERAL_CHASSIS,
+ SAHPI_INVENT_CTYP_RAID_CHASSIS,
+ SAHPI_INVENT_CTYP_RACKMOUNT
+} SaHpiInventChassisTypeT;
+
+typedef struct {
+ SaHpiUint8T Data[1]; /* Variable length opaque data */
+} SaHpiInventInternalUseDataT;
+
+typedef struct {
+ SaHpiTimeT MfgDateTime; /* May be set to
+ SAHPI_TIME_UNSPECIFIED
+ if manufacturing
+ date/time not available */
+ SaHpiTextBufferT *Manufacturer;
+ SaHpiTextBufferT *ProductName;
+ SaHpiTextBufferT *ProductVersion;
+ SaHpiTextBufferT *ModelNumber;
+ SaHpiTextBufferT *SerialNumber;
+ SaHpiTextBufferT *PartNumber;
+ SaHpiTextBufferT *FileId;
+ SaHpiTextBufferT *AssetTag;
+ SaHpiTextBufferT *CustomField[1]; /* Variable number of fields,
+ last is NULL */
+} SaHpiInventGeneralDataT;
+
+typedef struct {
+ SaHpiInventChassisTypeT Type; /* Type of chassis */
+ SaHpiInventGeneralDataT GeneralData;
+} SaHpiInventChassisDataT;
+
+typedef struct {
+ SaHpiManufacturerIdT MId;/* OEM Manuf. ID */
+ SaHpiUint8T Data[1]; /* Variable length data, defined by OEM,
+ Length derived from DataLength in
+ SaHpiInventDataRecordT structure:
+ DataLength - 4(because DataLength
+ includes the MId) */
+} SaHpiInventOemDataT;
+
+typedef union {
+ SaHpiInventInternalUseDataT InternalUse;
+ SaHpiInventChassisDataT ChassisInfo;
+ SaHpiInventGeneralDataT BoardInfo;
+ SaHpiInventGeneralDataT ProductInfo;
+ SaHpiInventOemDataT OemData;
+} SaHpiInventDataUnionT;
+
+typedef struct {
+ SaHpiInventDataRecordTypeT RecordType;
+ SaHpiUint32T DataLength; /* Length of Data field for
+ this record */
+ SaHpiInventDataUnionT RecordData; /* Variable length data */
+} SaHpiInventDataRecordT;
+
+typedef struct {
+ SaHpiInventDataValidityT Validity; /* Indication as to whether data
+ Returned by
+ saHpiEntityInventoryDataRead() is
+ complete and valid. Unless this
+ flag indicates valid data,
+ saHpiEntityInventoryDataWrite() will
+ not take any actions except to
+ return an error.*/
+ SaHpiInventDataRecordT *DataRecords[1]; /* Array of pointers to inventory
+ Data Records. Variable
+ number of entries. Last
+ entry is NULL. */
+} SaHpiInventoryDataT;
+
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Inventory Resource Data Records **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** All inventory data contained in an entity inventory repository
+** must be represented in the RDR repository
+** with an SaHpiInventoryRecT.
+*/
+typedef struct {
+ SaHpiEirIdT EirId;
+ SaHpiUint32T Oem;
+} SaHpiInventoryRecT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Watchdogs **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** This section defines all of the data types associated with watchdog timers.
+*/
+
+/* Watchdog Number - Identifier for a watchdog timer. */
+typedef SaHpiUint8T SaHpiWatchdogNumT;
+#define SAHPI_DEFAULT_WATCHDOG_NUM (SaHpiWatchdogNumT)0x00
+
+/*
+** Watchdog Timer Action
+**
+** These enumerations represent the possible actions to be taken upon watchdog
+** timer timeout and the events that are generated for watchdog actions.
+*/
+typedef enum {
+ SAHPI_WA_NO_ACTION = 0,
+ SAHPI_WA_RESET,
+ SAHPI_WA_POWER_DOWN,
+ SAHPI_WA_POWER_CYCLE
+} SaHpiWatchdogActionT;
+
+typedef enum {
+ SAHPI_WAE_NO_ACTION = 0,
+ SAHPI_WAE_RESET,
+ SAHPI_WAE_POWER_DOWN,
+ SAHPI_WAE_POWER_CYCLE,
+ SAHPI_WAE_TIMER_INT=0x08 /* Used if Timer Preinterrupt only */
+} SaHpiWatchdogActionEventT;
+
+/*
+** Watchdog Pre-timer Interrupt
+**
+** These enumerations represent the possible types of interrupts that may be
+** triggered by a watchdog pre-timer event. The actual meaning of these
+** operations may differ depending on the hardware architecture.
+*/
+typedef enum {
+ SAHPI_WPI_NONE = 0,
+ SAHPI_WPI_SMI,
+ SAHPI_WPI_NMI,
+ SAHPI_WPI_MESSAGE_INTERRUPT,
+ SAHPI_WPI_OEM = 0x0F
+} SaHpiWatchdogPretimerInterruptT;
+
+/*
+** Watchdog Timer Use
+**
+** These enumerations represent the possible watchdog users that may have caused
+** the watchdog to expire. For instance, if watchdog is being used during power
+** on self test (POST), and it expires, the SAHPI_WTU_BIOS_POST expiration type
+** will be set. Most specific uses for Watchdog timer by users of HPI should
+** indicate SAHPI_WTU_SMS_OS if the use is to provide an OS-healthy heartbeat,
+** or SAHPI_WTU_OEM if it is used for some other purpose.
+*/
+typedef enum {
+ SAHPI_WTU_NONE = 0,
+ SAHPI_WTU_BIOS_FRB2,
+ SAHPI_WTU_BIOS_POST,
+ SAHPI_WTU_OS_LOAD,
+ SAHPI_WTU_SMS_OS, /* System Management System providing
+ heartbeat for OS */
+ SAHPI_WTU_OEM,
+ SAHPI_WTU_UNSPECIFIED = 0x0F
+} SaHpiWatchdogTimerUseT;
+
+/*
+** Timer Use Expiration Flags
+** These values are used for the Watchdog Timer Use Expiration flags in the
+** SaHpiWatchdogT structure.
+*/
+typedef SaHpiUint8T SaHpiWatchdogExpFlagsT;
+#define SAHPI_WATCHDOG_EXP_BIOS_FRB2 (SaHpiWatchdogExpFlagsT)0x02
+#define SAHPI_WATCHDOG_EXP_BIOS_POST (SaHpiWatchdogExpFlagsT)0x04
+#define SAHPI_WATCHDOG_EXP_OS_LOAD (SaHpiWatchdogExpFlagsT)0x08
+#define SAHPI_WATCHDOG_EXP_SMS_OS (SaHpiWatchdogExpFlagsT)0x10
+#define SAHPI_WATCHDOG_EXP_OEM (SaHpiWatchdogExpFlagsT)0x20
+
+/*
+** Watchdog Structure
+**
+** This structure is used by the saHpiWatchdogTimerGet() and
+** saHpiWatchdogTimerSet() functions. The use of the structure varies slightly by
+** each function.
+**
+** For saHpiWatchdogTimerGet() :
+**
+** Log - indicates whether or not the Watchdog is configured to
+** issue an event when it next times out. TRUE=event will
+** be issued on timeout.
+** Running - indicates whether or not the Watchdog is currently
+** running or stopped. TRUE=Watchdog is running.
+** TimerUse - indicates the current use of the timer; one of five
+** preset uses which was included on the last
+** saHpiWatchdogTimerSet() function call, or through some
+** other implementation-dependent means to start the
+** Watchdog timer.
+** TimerAction - indicates what action will be taken when the Watchdog
+** times out.
+** PretimerInterrupt - indicates which action will be taken
+** "PreTimeoutInterval" seconds prior to Watchdog timer
+** expiration.
+** PreTimeoutInterval - indicates how many milliseconds prior to timer time
+** out the PretimerInterrupt action will be taken. If
+** "PreTimeoutInterval" = 0, the PretimerInterrupt action
+** will occur concurrently with "TimerAction." HPI
+** implementations may not be able to support millisecond
+** resolution and may have a maximum value restriction.
+** These restrictions should be documented by the
+** provider of the HPI interface.
+** TimerUseExpFlags - set of five bit flags which indicate that a Watchdog
+** timer timeout has occurred while the corresponding
+** TimerUse value was set. Once set, these flags stay
+** set until specifically cleared with a
+** saHpiWatchdogTimerSet() call, or by some other
+** implementation-dependent means.
+** InitialCount - The time, in milliseconds, before the timer will time
+** out after a saHpiWatchdogTimerReset() function call is
+** made, or some other implementation-dependent strobe is
+** sent to the Watchdog. HPI implementations may not be
+** able to support millisecond resolution and may have a
+** maximum value restriction. These restrictions should
+** be documented by the provider of the HPI interface.
+** PresentCount - The remaining time in milliseconds before the timer
+** will time out unless a saHpiWatchdogTimerReset()
+** function call is made, or some other implementation-
+** dependent strobe is sent to the Watchdog.
+** HPI implementations may not be able to support
+** millisecond resolution on watchdog timers, but will
+** return the number of clock ticks remaining times the
+** number of milliseconds between each tick.
+**
+** For saHpiWatchdogTimerSet():
+**
+** Log - indicates whether or not the Watchdog should issue
+** an event when it next times out. TRUE=event will be
+** issued on timeout.
+** Running - indicates whether or not the Watchdog should be
+** stopped before updating.
+** TRUE = Watchdog is not stopped. If it is already
+** stopped, it will remain stopped, but if it is
+** running, it will continue to run, with the
+** countdown timer reset to the new InitialCount.
+** Note that there is a race condition possible
+** with this setting, so it should be used with
+** care.
+** FALSE = Watchdog is stopped. After
+** saHpiWatchdogTimerSet() is called, a subsequent
+** call to saHpiWatchdogTimerReset() is required to
+** start the timer.
+** TimerUse - indicates the current use of the timer. Will control
+** which TimerUseExpFlag is set if the timer expires.
+** TimerAction - indicates what action will be taken when the Watchdog
+** times out.
+** PretimerInterrupt - indicates which action will be taken
+** "PreTimeoutInterval" seconds prior to Watchdog timer
+** expiration.
+** PreTimeoutInterval - indicates how many milliseconds prior to timer time
+** out the PretimerInterrupt action will be taken. If
+** "PreTimeoutInterval" = 0, the PretimerInterrupt action
+** will occur concurrently with "TimerAction." HPI
+** implementations may not be able to support millisecond
+** resolution and may have a maximum value restriction.
+** These restrictions should be documented by the
+** provider of the HPI interface.
+** TimerUseExpFlags - Set of five bit flags corresponding to the five
+** TimerUse values. For each bit set, the corresponding
+** Timer Use Expiration Flag will be CLEARED. Generally,
+** a program should only clear the Timer Use Expiration
+** Flag corresponding to its own TimerUse, so that other
+** software, which may have used the timer for another
+** purpose in the past can still read its TimerUseExpFlag
+** to determine whether or not the timer expired during
+** that use.
+** InitialCount - The time, in milliseconds, before the timer will time
+** out after a saHpiWatchdogTimerReset() function call is
+** made, or some other implementation-dependent strobe is
+** sent to the Watchdog. HPI implementations may not be
+** able to support millisecond resolution and may have a
+** maximum value restriction. These restrictions should
+** be documented by the provider of the HPI interface.
+** PresentCount - Not used on saHpiWatchdogTimerSet() function. Ignored.
+**
+*/
+
+typedef struct {
+ SaHpiBoolT Log;
+ SaHpiBoolT Running;
+ SaHpiWatchdogTimerUseT TimerUse;
+ SaHpiWatchdogActionT TimerAction;
+ SaHpiWatchdogPretimerInterruptT PretimerInterrupt;
+ SaHpiUint32T PreTimeoutInterval;
+ SaHpiWatchdogExpFlagsT TimerUseExpFlags;
+ SaHpiUint32T InitialCount;
+ SaHpiUint32T PresentCount;
+} SaHpiWatchdogT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Watchdog Resource Data Records **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** When the "Watchdog" capability is set in a resource, a watchdog with an
+** identifier of SAHPI_DEFAULT_WATCHDOG_NUM is required. All watchdogs must be
+** represented in the RDR repository with an SaHpiWatchdogRecT, including the
+** watchdog with an identifier of SAHPI_DEFAULT_WATCHDOG_NUM.
+*/
+typedef struct {
+ SaHpiWatchdogNumT WatchdogNum;
+ SaHpiUint32T Oem;
+} SaHpiWatchdogRecT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Resource Data Record **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** The following describes the different types of records that exist within a
+** RDR repository and the RDR super-structure to all of the specific RDR types
+** (sensor, inventory data, watchdog, etc.).
+*/
+typedef enum {
+ SAHPI_NO_RECORD,
+ SAHPI_CTRL_RDR,
+ SAHPI_SENSOR_RDR,
+ SAHPI_INVENTORY_RDR,
+ SAHPI_WATCHDOG_RDR
+} SaHpiRdrTypeT;
+
+typedef union {
+ SaHpiCtrlRecT CtrlRec;
+ SaHpiSensorRecT SensorRec;
+ SaHpiInventoryRecT InventoryRec;
+ SaHpiWatchdogRecT WatchdogRec;
+} SaHpiRdrTypeUnionT;
+
+typedef struct {
+ SaHpiEntryIdT RecordId;
+ SaHpiRdrTypeT RdrType;
+ SaHpiEntityPathT Entity; /* Entity to which this RDR relates. */
+ SaHpiRdrTypeUnionT RdrTypeUnion;
+ SaHpiTextBufferT IdString;
+} SaHpiRdrT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Hot Swap **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* Power State */
+typedef enum {
+ SAHPI_HS_POWER_OFF = 0,
+ SAHPI_HS_POWER_ON,
+ SAHPI_HS_POWER_CYCLE
+} SaHpiHsPowerStateT;
+
+/* Hot Swap Indicator State */
+typedef enum {
+ SAHPI_HS_INDICATOR_OFF = 0,
+ SAHPI_HS_INDICATOR_ON
+} SaHpiHsIndicatorStateT;
+
+/* Hot Swap Action */
+typedef enum {
+ SAHPI_HS_ACTION_INSERTION = 0,
+ SAHPI_HS_ACTION_EXTRACTION
+} SaHpiHsActionT;
+
+/* Hot Swap State */
+typedef enum {
+ SAHPI_HS_STATE_INACTIVE = 0,
+ SAHPI_HS_STATE_INSERTION_PENDING,
+ SAHPI_HS_STATE_ACTIVE_HEALTHY,
+ SAHPI_HS_STATE_ACTIVE_UNHEALTHY,
+ SAHPI_HS_STATE_EXTRACTION_PENDING,
+ SAHPI_HS_STATE_NOT_PRESENT
+} SaHpiHsStateT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Events, Part 2 **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* Event Data Structures */
+
+/*
+** Sensor Optional Data
+**
+** Sensor events may contain optional data items passed and stored with the
+** event. If these optional data items are present, they will be included with
+** the event data returned in response to a saHpiEventGet() or
+** saHpiEventLogEntryGet() function call. Also, the optional data items may be
+** included with the event data passed to the saHpiEventLogEntryAdd() function.
+**
+** Specific implementations of HPI may have restrictions on how much data may
+** be passed to saHpiEventLogEntryAdd(). These restrictions should be documented
+** by the provider of the HPI interface.
+*/
+typedef enum {
+ SAHPI_CRITICAL = 0,
+ SAHPI_MAJOR,
+ SAHPI_MINOR,
+ SAHPI_INFORMATIONAL,
+ SAHPI_OK,
+ SAHPI_DEBUG = 0xF0
+} SaHpiSeverityT;
+
+typedef SaHpiUint8T SaHpiSensorOptionalDataT;
+
+#define SAHPI_SOD_TRIGGER_READING (SaHpiSensorOptionalDataT)0x01
+#define SAHPI_SOD_TRIGGER_THRESHOLD (SaHpiSensorOptionalDataT)0x02
+#define SAHPI_SOD_OEM (SaHpiSensorOptionalDataT)0x04
+#define SAHPI_SOD_PREVIOUS_STATE (SaHpiSensorOptionalDataT)0x08
+#define SAHPI_SOD_SENSOR_SPECIFIC (SaHpiSensorOptionalDataT)0x10
+
+typedef struct {
+ SaHpiSensorNumT SensorNum;
+ SaHpiSensorTypeT SensorType;
+ SaHpiEventCategoryT EventCategory;
+ SaHpiBoolT Assertion; /* TRUE = Event State asserted
+ FALSE = deasserted */
+ SaHpiEventStateT EventState; /* State being asserted
+ deasserted */
+ SaHpiSensorOptionalDataT OptionalDataPresent;
+ SaHpiSensorReadingT TriggerReading; /* Reading that triggered
+ the event */
+ SaHpiSensorReadingT TriggerThreshold;
+ SaHpiEventStateT PreviousState;
+ SaHpiUint32T Oem;
+ SaHpiUint32T SensorSpecific;
+} SaHpiSensorEventT;
+
+typedef struct {
+ SaHpiHsStateT HotSwapState;
+ SaHpiHsStateT PreviousHotSwapState;
+} SaHpiHotSwapEventT;
+
+typedef struct {
+ SaHpiWatchdogNumT WatchdogNum;
+ SaHpiWatchdogActionEventT WatchdogAction;
+ SaHpiWatchdogPretimerInterruptT WatchdogPreTimerAction;
+ SaHpiWatchdogTimerUseT WatchdogUse;
+} SaHpiWatchdogEventT;
+
+#define SAHPI_OEM_EVENT_DATA_SIZE 32
+typedef struct {
+ SaHpiManufacturerIdT MId;
+ SaHpiUint8T OemEventData[SAHPI_OEM_EVENT_DATA_SIZE];
+} SaHpiOemEventT;
+
+/*
+** User events may be used for storing custom events created by the application / middleware;
+** eg. when injecting events into the event log using saHpiEventLogEntryAdd().
+*/
+#define SAHPI_USER_EVENT_DATA_SIZE 32
+typedef struct {
+ SaHpiUint8T UserEventData[SAHPI_USER_EVENT_DATA_SIZE];
+} SaHpiUserEventT;
+
+typedef enum {
+ SAHPI_ET_SENSOR,
+ SAHPI_ET_HOTSWAP,
+ SAHPI_ET_WATCHDOG,
+ SAHPI_ET_OEM,
+ SAHPI_ET_USER
+} SaHpiEventTypeT;
+
+typedef union {
+ SaHpiSensorEventT SensorEvent;
+ SaHpiHotSwapEventT HotSwapEvent;
+ SaHpiWatchdogEventT WatchdogEvent;
+ SaHpiOemEventT OemEvent;
+ SaHpiUserEventT UserEvent;
+} SaHpiEventUnionT;
+
+typedef struct {
+ SaHpiResourceIdT Source;
+ SaHpiEventTypeT EventType;
+ SaHpiTimeT Timestamp;
+ SaHpiSeverityT Severity;
+ SaHpiEventUnionT EventDataUnion;
+} SaHpiEventT;
+
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Parameter Control **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+typedef enum {
+ SAHPI_DEFAULT_PARM = 0,
+ SAHPI_SAVE_PARM,
+ SAHPI_RESTORE_PARM
+} SaHpiParmActionT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Reset **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+typedef enum {
+ SAHPI_COLD_RESET = 0,
+ SAHPI_WARM_RESET,
+ SAHPI_RESET_ASSERT,
+ SAHPI_RESET_DEASSERT
+} SaHpiResetActionT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Resource Presence Table **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* This section defines the types associated with the RPT. */
+
+typedef struct {
+ SaHpiUint32T UpdateCount; /* This count is incremented any time the table
+ is changed. It rolls over to zero when the
+ maximum value is reached */
+ SaHpiTimeT UpdateTimestamp; /* This time is set any time the table is
+ changed. If the implementation cannot
+ supply an absolute timestamp, then it may
+ supply a timestamp relative to some system-
+ defined epoch, such as system boot. The
+ value SAHPI_TIME_UNSPECIFIED indicates that
+ the time of the update cannot be determined.
+ Otherwise, If the value is less than or
+ equal to SAHPI_TIME_MAX_RELATIVE, then it
+ is relative; if it is greater than
+ SAHPI_TIME_MAX_RELATIVE, then it is absolute. */
+} SaHpiRptInfoT;
+
+/*
+** Resource Info Type Definitions
+**
+**
+** SaHpiResourceInfoT contains static configuration data concerning the
+** management controller associated with the resource, or the resource itself.
+** Note this information is used to describe the resource; that is, the piece of
+** infrastructure which manages an entity (or multiple entities) - NOT the entities
+** for which the resource provides management. The purpose of the
+** SaHpiResourceInfoT structure is to provide information that the HPI user may
+** need in order to interact correctly with the resource (e.g., recognize a
+** specific management controller which may have defined OEM fields in sensors,
+** OEM controls, etc.).
+**
+** All of the fields in the following structure may or may not be used by a
+** given resource.
+*/
+typedef struct {
+ SaHpiUint8T ResourceRev;
+ SaHpiUint8T SpecificVer;
+ SaHpiUint8T DeviceSupport;
+ SaHpiManufacturerIdT ManufacturerId;
+ SaHpiUint16T ProductId;
+ SaHpiUint8T FirmwareMajorRev;
+ SaHpiUint8T FirmwareMinorRev;
+ SaHpiUint8T AuxFirmwareRev;
+} SaHpiResourceInfoT;
+
+/*
+** Resource Capabilities
+**
+** This definition defines the capabilities of a given resource. One resource
+** may support any number of capabilities using the bit mask. Every resource
+** must set at least one of these capabilities; ie. zero is not a valid value
+** for a resource's capabilities.
+**
+** SAHPI_CAPABILITY_DOMAIN
+** SAHPI_CAPABILITY_RESOURCE
+** SAHPI_CAPABILITY_EVT_DEASSERTS
+** Indicates that all sensors on the resource have the property that their
+** Assertion and Deassertion event enable flags are the same. That is,
+** for all event states whose assertion triggers an event, it is
+** guaranteed that the deassertion of that event will also
+** trigger an event. Thus, the user may track the state of sensors on the
+** resource by monitoring events rather than polling for state changes.
+** SAHPI_CAPABILITY_AGGREGATE_STATUS
+** SAHPI_CAPABILITY_CONFIGURATION
+** SAHPI_CAPABILITY_MANAGED_HOTSWAP
+** Indicates that the resource supports managed hotswap. Since hotswap only
+** makes sense for field-replaceable units, the SAHPI_CAPABILITY_FRU
+** capability bit must also be set for this resource.
+** SAHPI_CAPABILITY_WATCHDOG
+** SAHPI_CAPABILITY_CONTROL
+** SAHPI_CAPABILITY_FRU
+** Indicates that the resource is a field-replaceable unit; i.e., it is
+** capable of being removed and replaced in a live system. This does not
+** necessarily imply that the resource supports managed hotswap.
+** SAHPI_CAPABILITY_INVENTORY_DATA
+** SAHPI_CAPABILITY_SEL
+** SAHPI_CAPABILITY_RDR
+** Indicates that a resource data record (RDR) repository is supplied
+** by the resource. Since the existence of an RDR is mandatory, this
+** capability must be asserted.
+** SAHPI_CAPABILITY_SENSOR
+*/
+
+typedef SaHpiUint32T SaHpiCapabilitiesT;
+#define SAHPI_CAPABILITY_DOMAIN (SaHpiCapabilitiesT)0x80000000
+#define SAHPI_CAPABILITY_RESOURCE (SaHpiCapabilitiesT)0X40000000
+#define SAHPI_CAPABILITY_EVT_DEASSERTS (SaHpiCapabilitiesT)0x00008000
+#define SAHPI_CAPABILITY_AGGREGATE_STATUS (SaHpiCapabilitiesT)0x00002000
+#define SAHPI_CAPABILITY_CONFIGURATION (SaHpiCapabilitiesT)0x00001000
+#define SAHPI_CAPABILITY_MANAGED_HOTSWAP (SaHpiCapabilitiesT)0x00000800
+#define SAHPI_CAPABILITY_WATCHDOG (SaHpiCapabilitiesT)0x00000400
+#define SAHPI_CAPABILITY_CONTROL (SaHpiCapabilitiesT)0x00000200
+#define SAHPI_CAPABILITY_FRU (SaHpiCapabilitiesT)0x00000100
+#define SAHPI_CAPABILITY_INVENTORY_DATA (SaHpiCapabilitiesT)0x00000008
+#define SAHPI_CAPABILITY_SEL (SaHpiCapabilitiesT)0x00000004
+#define SAHPI_CAPABILITY_RDR (SaHpiCapabilitiesT)0x00000002
+#define SAHPI_CAPABILITY_SENSOR (SaHpiCapabilitiesT)0x00000001
+
+/*
+** RPT Entry
+**
+** This structure is used to store the RPT entry information.
+**
+** The ResourceCapabilities field definies the capabilities of the resource.
+** This field must be non-zero for all valid resources.
+**
+** The ResourceTag field is an informational value that supplies the caller with naming
+** information for the resource. This should be set to the "user-visible" name for a
+** resource, which can be used to identify the resource in messages to a human operator.
+** For example, it could be set to match a physical printed label attached to the primary
+** entity which the resource manages. See section 5.2.6, saHpiResourceTagSet(), on page 33.
+*/
+typedef struct {
+ SaHpiEntryIdT EntryId;
+ SaHpiResourceIdT ResourceId;
+ SaHpiResourceInfoT ResourceInfo;
+ SaHpiEntityPathT ResourceEntity; /* If resource manages a FRU, entity path of the FRU */
+ /* If resource manages a single entity, entity path of
+ that entity. */
+ /* If resource manages multiple entities, the
+ entity path of the "primary" entity managed by the
+ resource */
+ /* Must be set to the same value in every domain which
+ contains this resource */
+ SaHpiCapabilitiesT ResourceCapabilities; /* Must be non-0. */
+ SaHpiSeverityT ResourceSeverity; /* Indicates the criticality that
+ should be raised when the resource
+ is not responding */
+ SaHpiDomainIdT DomainId; /* The Domain ID is used when the resource
+ is also a domain. */
+ SaHpiTextBufferT ResourceTag;
+} SaHpiRptEntryT;
+
+
+
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** System Event Log **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+/* This section defines the types associated with the SEL. */
+/*
+** Event Log Information
+**
+** The Entries entry denotes the number of active entries contained in the log.
+** The Size entry denotes the total number of entries the log is able to hold.
+** The UpdateTimestamp entry denotes the timestamp of the last addition,
+** deletion or log clear operation.
+** The CurrentTime entry denotes the log's idea of the current time; i.e the
+** timestamp that would be placed on an entry if it was added now.
+** The Enabled entry indicates whether the log is enabled. If the event log
+** is "disabled" no events generated within the HPI implementation will be
+** added to the event log. Events may still be added to the event log with
+** the saHpiEventLogEntryAdd() function. When the event log is "enabled"
+** events may be automatically added to the event log as they are generated
+** in a resource or a domain, however, it is implementation-specific which
+** events are automatically added to any event log.
+** The OverflowFlag entry indicates the log has overflowed. Events have been
+** dropped or overwritten due to a table overflow.
+** The OverflowAction entry indicates the behavior of the SEL when an overflow
+** occurs.
+** The DeleteEntrySupported indicates whether the delete command is supported for
+** event log entries. Note that clearing an entire log is valid even if this
+** flag is not set.
+*/
+typedef enum {
+ SAHPI_SEL_OVERFLOW_DROP, /* New entries are dropped when log is full*/
+ SAHPI_SEL_OVERFLOW_WRAP, /* Log wraps when log is full */
+ SAHPI_SEL_OVERFLOW_WRITELAST /* Last entry overwritten when log is full */
+} SaHpiSelOverflowActionT;
+
+typedef struct {
+ SaHpiUint32T Entries;
+ SaHpiUint32T Size;
+ SaHpiTimeT UpdateTimestamp;
+ SaHpiTimeT CurrentTime;
+ SaHpiBoolT Enabled;
+ SaHpiBoolT OverflowFlag;
+ SaHpiSelOverflowActionT OverflowAction;
+ SaHpiBoolT DeleteEntrySupported;
+} SaHpiSelInfoT;
+/*
+** Event Log Entry
+** These types define the event log entry.
+*/
+typedef SaHpiUint32T SaHpiSelEntryIdT;
+/* Reserved values for event log entry IDs */
+#define SAHPI_OLDEST_ENTRY (SaHpiSelEntryIdT)0x00000000
+#define SAHPI_NEWEST_ENTRY (SaHpiSelEntryIdT)0xFFFFFFFF
+#define SAHPI_NO_MORE_ENTRIES (SaHpiSelEntryIdT)0xFFFFFFFE
+
+
+
+typedef struct {
+ SaHpiSelEntryIdT EntryId; /* Entry ID for record */
+ SaHpiTimeT Timestamp; /* Time at which the event was placed
+ in the event log. The value
+ SAHPI_TIME_UNSPECIFIED indicates that
+ the time of the event cannot be
+ determined; otherwise, if less than
+ or equal to SAHPI_TIME_MAX_RELATIVE,
+ then it relative; if it is greater than
+ SAHPI_TIME_MAX_RELATIVE, then it is absolute. */
+ SaHpiEventT Event; /* Logged Event */
+} SaHpiSelEntryT;
+
+
+
+
+
+/*******************************************************************************
+**
+** Name: saHpiInitialize
+**
+** Description:
+** This function allows the management service an opportunity to perform
+** platform-specific initialization. saHpiInitialize() must be called
+** before any other functions are called.
+**
+** Parameters:
+** HpiImplVersion - [out] Pointer to the version of the HPI
+** implementation.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned. SA_ERR_HPI_DUPLICATE is returned when the HPI has already
+** been initialized. Once one saHpiInitialize() call has been made,
+** another one cannot be made until after a saHpiFinalize() call is made.
+**
+**
+** Remarks:
+** This function returns the version of the HPI implementation. Note: If
+** the HPI interface version is needed it can be retrieved from the
+** SAHPI_INTERFACE_VERSION definition.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiInitialize(
+ SAHPI_OUT SaHpiVersionT *HpiImplVersion
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiFinalize
+**
+** Description:
+** This function allows the management service an opportunity to perform
+** platform-specific cleanup. All sessions should be closed (see
+** saHpiSessionClose()), before this function is executed. All open
+** sessions will be forcibly closed upon execution of this command.
+**
+** Parameters:
+** None.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None. 5 Domains
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiFinalize (
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSessionOpen
+**
+** Description:
+** This function opens a HPI session for a given domain and set of
+** security characteristics (future). This function call assumes that a
+** pre-arranged agreement between caller and the HPI implementation
+** identifies the resources within the specified domain. As a future
+** roadmap item, functions for discovery of domains and allocation of
+** resources within domains may be developed.
+**
+** Parameters:
+** DomainId - [in] Domain ID to be controlled by middleware/application.
+** A domain ID of SAHPI_DEFAULT_DOMAIN_ID indicates the default domain.
+** SessionId - [out] Pointer to a location to store a handle to the newly
+** opened session. This handle is used for subsequent access to domain
+** resources and events.
+** SecurityParams - [in] Pointer to security and permissions data
+** structure. This parameter is reserved for future use, and must be set
+** to NULL.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned. SA_ERR_HPI_INVALID_DOMAIN is returned if no domain
+** matching the specified domain ID exists.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSessionOpen (
+ SAHPI_IN SaHpiDomainIdT DomainId,
+ SAHPI_OUT SaHpiSessionIdT *SessionId,
+ SAHPI_IN void *SecurityParams
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSessionClose
+**
+** Description:
+** This function closes a HPI session. After closing a session, the
+** session ID will no longer be valid.
+**
+** Parameters:
+** SessionId - [in] Session handle previously obtained using
+** saHpiSessionOpen().
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSessionClose (
+ SAHPI_IN SaHpiSessionIdT SessionId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourcesDiscover
+**
+** Description:
+** This function requests the underlying management service to discover
+** information about the resources it controls for the domain associated
+** with the open session. This function may be called during operation to
+** regenerate the RPT table. For those FRUs that must be discovered by
+** polling, latency between FRU insertion and actual addition of the
+** resource associated with that FRU to the RPT exists. To overcome this
+** latency, a discovery of all present resources may be forced by calling
+** saHpiResourcesDiscover ().
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourcesDiscover (
+ SAHPI_IN SaHpiSessionIdT SessionId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiRptInfoGet
+**
+** Description:
+** This function is used for requesting information about the resource
+** presence table (RPT) such as an update counter and timestamp. This is
+** particularly useful when using saHpiRptEntryGet() (see page 31).
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** RptInfo - [out] Pointer to the information describing the resource
+** presence table.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiRptInfoGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_OUT SaHpiRptInfoT *RptInfo
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiRptEntryGet
+**
+** Description:
+** This function retrieves resource information for the specified entry
+** of the resource presence table. This function allows the caller to
+** read the RPT entry-by-entry. If the EntryID parameter is set to
+** SAHPI_FIRST_ENTRY, the first entry in the RPT will be returned. When
+** an entry is successfully retrieved, *NextEntryID will be set to the
+** ID of the next valid entry; however, when the last entry has been
+** retrieved, *NextEntryID will be set to SAHPI_LAST_ENTRY. To retrieve
+** an entire list of entries, call this function first with an EntryID of
+** SAHPI_FIRST_ENTRY and then use the returned NextEntryID in the next
+** call. Proceed until the NextEntryID returned is SAHPI_LAST_ENTRY. At
+** initialization, the user may not wish to turn on eventing, since the
+** context of the events, as provided by the RPT, is not known. In this
+** instance, if a FRU is inserted into the system while the RPT is being
+** read entry by entry, the resource associated with that FRU may be
+** missed. (Keep in mind that there is no specified ordering for the RPT
+** entries.) The update counter provides a means for insuring that no
+** resources are missed when stepping through the RPT. In order to use
+** this feature, the user should invoke saHpiRptInfoGet(), and get the
+** update counter value before retrieving the first RPT entry. After
+** reading the last entry, the user should again invoke the
+** saHpiRptInfoGet() to get the update counter value. If the update
+** counter has not been incremented, no new records have been added.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** EntryId - [in] Handle of the entry to retrieve from the RPT. Reserved
+** entry ID values: SAHPI_FIRST_ENTRY Get first entry SAHPI_LAST_ENTRY
+** Reserved as delimiter for end of list. Not a valid entry identifier.
+**
+** NextEntryId - [out] Pointer to location to store the record ID of next
+** entry in RPT.
+** RptEntry - [out] Pointer to the structure to hold the returned RPT
+** entry.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiRptEntryGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiEntryIdT EntryId,
+ SAHPI_OUT SaHpiEntryIdT *NextEntryId,
+ SAHPI_OUT SaHpiRptEntryT *RptEntry
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiRptEntryGetByResourceId
+**
+** Description:
+** This function retrieves resource information from the resource
+** presence table for the specified resource using its resource ID.
+** Typically at start-up, the RPT is read entry-by-entry, using
+** saHpiRptEntryGet(). From this, the caller can establish the set of
+** resource IDs to use for future calls to the HPI functions. However,
+** there may be other ways of learning resource IDs without first reading
+** the RPT. For example, resources may be added to the domain while the
+** system is running in response to a hot-swap action. When a resource is
+** added, the application will receive a hot-swap event containing the
+** resource ID of the new resource. The application may then want to
+** search the RPT for more detailed information on the newly added
+** resource. In this case, the resource ID can be used to locate the
+** applicable RPT entry information.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource whose RPT entry should
+** be returned.
+** RptEntry - [out] Pointer to structure to hold the returned RPT entry.
+**
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiRptEntryGetByResourceId (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiRptEntryT *RptEntry
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourceSeveritySet
+**
+** Description:
+** This function allows the caller to set the severity level applied to
+** an event issued if a resource unexpectedly becomes unavailable to the
+** HPI. A resource may become unavailable for several reasons including:
+** ? The FRU associated with the resource is no longer present in the
+** system (a surprise extraction has occurred) ? A catastrophic failure
+** has occurred Typically, the HPI implementation will provide an
+** appropriate default value for this parameter, which may vary by
+** resource; management software can override this default value by use
+** of this function ? If a resource is removed from, then re-added to the
+** RPT (e.g., because of a hot-swap action), the HPI implementation may
+** reset the value of this parameter.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource for which the severity
+** level will be set.
+** Severity - [in] Severity level of event issued when the resource
+** unexpectedly becomes unavailable to the HPI.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceSeveritySet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSeverityT Severity
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourceTagSet
+**
+** Description:
+** This function allows the caller to set the resource tag for a
+** particular resource. The resource tag is an informational value that
+** supplies the caller with naming information for the resource. This
+** should be set to the "user-visible" name for a resource, which can be
+** used to identify the resource in messages to a human operator. For
+** example, it could be set to match a physical, printed label attached
+** to the entity associated with the resource. Typically, the HPI
+** implementation will provide an appropriate default value for this
+** parameter; this function is provided so that management software can
+** override the default, if desired. The value of the resource tag may be
+** retrieved from the resource's RPT entry. Note: If a resource is
+** removed from, then re-added to the RPT (e.g., because of a hot-swap
+** action), the HPI implementation may reset the value of this parameter.
+**
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource for which the resource
+** tag should be set.
+** ResourceTag - [in] Pointer to string representing the resource tag.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceTagSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiTextBufferT *ResourceTag
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourceIdGet
+**
+** Description:
+** This function returns the resource ID of the resource associated with
+** the entity upon which the caller is running.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [out] Pointer to location to hold the returned resource
+** ID.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned. SA_ERR_HPI_NOT_PRESENT is returned if the entity the
+** caller is running on is not manageable in the addressed domain.
+** SA_ERR_HPI_UNKNOWN is returned if the domain controller cannot
+** determine an appropriate response. That is, there may be an
+** appropriate resource ID in the domain to return, but it cannot be
+** determined.
+**
+** Remarks:
+** This function must be issued within a session to a domain that
+** includes a resource associated with the entity upon which the caller
+** is running, or the SA_ERR_HPI_NOT_PRESENT return will be issued. Since
+** entities are contained within other entities, there may be multiple
+** possible resources that could be returned to this call. For example,
+** if there is a resource ID associated with a particular compute blade
+** upon which the caller is running, and another associated with the
+** chassis which contains the compute blade, either could logically be
+** returned as an indication of a resource associated with the entity
+** upon which the caller was running. The function should return the
+** resource ID of the "smallest" resource that is associated with the
+** caller. So, in the example above, the function should return the
+** resource ID of the compute blade. Once the function has returned the
+** resourceID, the caller may issue further HPI calls using that
+** resourceID to learn the type of resource that been identified.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceIdGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_OUT SaHpiResourceIdT *ResourceId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEntitySchemaGet
+**
+** Description:
+** This function returns the identifier of the Entity Schema for the HPI
+** implementation. This schema defines valid Entity Paths that may be
+** returned by the HPI implementation.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** SchemaId - [out] Pointer to the ID of the schema in use; zero
+** indicates that a custom schema is in use.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** This function may be issued on any session opened to any domain in the
+** system, and will return the same identifier. The identifier returned
+** should either be zero, indicating that the HPI implementation uses a
+** custom schema; or one of the schema identifiers defined in Appendix A,
+** "Pre-Defined Entity Schemas," page 107. In the case of a custom
+** schema, the HPI implementation may use arbitrary entity paths to
+** describe resources in the system; in the case of a pre-defined schema,
+** all entity paths should conform to the schema.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEntitySchemaGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_OUT SaHpiUint32T *SchemaId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogInfoGet
+**
+** Description:
+** This function retrieves the number of entries in the system event log,
+** total size of the event log, timestamp for the most recent entry, the
+** log's idea of the current time (i.e., timestamp that would be placed
+** on an entry at this moment), enabled/disabled status of the log (see
+** saHpiEventLogStateSet()), the overflow flag, the overflow action, and
+** whether the log supports deletion of individual entries.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource that contains the system
+** event log to be managed. Set to SAHPI_DOMAIN_CONTROLLER_ID to address
+** the domain system event log.
+** Info - [out] Pointer to the returned SEL information.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogInfoGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiSelInfoT *Info
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogEntryGet
+**
+** Description:
+** This function retrieves an event log entry from a system event log.
+** The special entry IDs SAHPI_OLDEST_ENTRY and SAHPI_NEWEST_ENTRY are
+** used to select the oldest and newest entries, respectively, in the log
+** being read. A returned NextEntryID of SAHPI_NO_MORE_ENTRIES indicates
+** that the newest entry has been returned; there are no more entries
+** going forward (time-wise) in the log. A returned PrevEntryID of
+** SAHPI_NO_MORE_ENTRIES indicates that the oldest entry has been
+** returned. To retrieve an entire list of entries going forward (oldest
+** entry to newest entry) in the log, call this function first with an
+** EntryID of SAHPI_OLDEST_ENTRY and then use the returned NextEntryID as
+** the EntryID in the next call. Proceed until the NextEntryID returned
+** is SAHPI_NO_MORE_ENTRIES. To retrieve an entire list of entries going
+** backward (newest entry to oldest entry) in the log, call this function
+** first with an EntryID of SAHPI_NEWEST_ENTRY and then use the returned
+** PrevEntryID as the EntryID in the next call. Proceed until the
+** PrevEntryID returned is SAHPI_NO_MORE_ENTRIES.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource that contains the system
+** event log to be read. Set to SAHPI_DOMAIN_CONTROLLER_ID to address the
+** domain system event log.
+** EntryId - [in] Handle of the entry to retrieve from the SEL. Reserved
+** event log entry ID values: SAHPI_OLDEST_ENTRY Oldest entry in the
+** log. SAHPI_NEWEST_ENTRY Newest entry in the log.
+** SAHPI_NO_MORE_ENTRIES Not valid for this parameter. Used only when
+** retrieving the next and previous entry IDs.
+** PrevEntryId - [out] Handle of previous (older adjacent) entry in event
+** log. Reserved event log entry ID values: SAHPI_OLDEST_ENTRY Not valid
+** for this parameter. Used only for the EntryID parameter.
+** SAHPI_NEWEST_ENTRY Not valid for this parameter. Used only for the
+** EntryID parameter. SAHPI_NO_MORE_ENTRIES No more entries in the log
+** before the one referenced by the EntryId parameter.
+** NextEntryId - [out] Handle of next (newer adjacent) entry in event
+** log. Reserved event log entry ID values: SAHPI_OLDEST_ENTRY Not valid
+** for this parameter. Used only for the EntryID parameter.
+** SAHPI_NEWEST_ENTRY Not valid for this parameter. Used only for the
+** EntryID parameter. SAHPI_NO_MORE_ENTRIES No more entries in the log
+** after the one referenced by the EntryId parameter.
+** EventLogEntry - [out] Pointer to retrieved event log entry.
+** Rdr - [in/out] Pointer to structure to receive resource data record
+** associated with the event, if available. If NULL, no RDR data will be
+** returned.
+** RptEntry - [in/out] Pointer to structure to receive RPT Entry
+** associated with the event, if available. If NULL, no RPT entry data
+** will be returned.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Event logs may include RPT entries and resource data records
+** associated with the resource and sensor issuing an event along with
+** the basic event data in the log. Because the system may be
+** reconfigured after the event was entered in the log, this stored
+** information may be important to interpret the event. If the event log
+** includes logged RPT Entries and/or RDRs, and if the caller provides a
+** pointer to a structure to receive this information, it will be
+** returned along with the event log entry. If the caller provides a
+** pointer for an RPT entry, but the event log does not include a logged
+** RPT entry for the event being returned, RptEntry->ResourceCapabilities
+** will be set to zero. No valid RPTEntry will have a zero value here. If
+** the caller provides a pointer for an RDR, but the event log does not
+** include a logged RDR for the event being returned, Rdr->RdrType will
+** be set to SAHPI_NO_RECORD.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogEntryGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSelEntryIdT EntryId,
+ SAHPI_OUT SaHpiSelEntryIdT *PrevEntryId,
+ SAHPI_OUT SaHpiSelEntryIdT *NextEntryId,
+ SAHPI_OUT SaHpiSelEntryT *EventLogEntry,
+ SAHPI_INOUT SaHpiRdrT *Rdr,
+ SAHPI_INOUT SaHpiRptEntryT *RptEntry
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogEntryAdd
+**
+** Description:
+** This function enables system management software to add entries to the
+** system event log.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource that contains the system
+** event log to be managed. Set to SAHPI_DOMAIN_CONTROLLER_ID to address
+** the Domain System Event Log.
+** EvtEntry - [in] Pointer to event log entry data to write to the system
+** event log.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** This function forces a write of the event to the addressed event log.
+** Nothing else is done with the event. Specific implementations of HPI
+** may have restrictions on how much data may be passed to the
+** saHpiEventLogEntryAdd() function. These restrictions should be
+** documented by the provider of the HPI interface. If more event log
+** data is provided than can be written, an error will be returned.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogEntryAdd (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSelEntryT *EvtEntry
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogEntryDelete
+**
+** Description:
+** This function deletes an event log entry. This operation is only valid
+** if so indicated by saHpiEventLogInfoGet(), via the
+** DeleteEntrySupported field in the SaHpiSelInfoT structure.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] ResourceID of the resource that contains the system
+** event log to be managed. Set to SAHPI_DOMAIN_CONTROLLER_ID to address
+** the domain system event log.
+** EntryId - [in] Entry ID on the event log entry to delete. Reserved
+** event log entry ID values: SAHPI_OLDEST_ENTRY - Oldest entry in the
+** log. SAHPI_NEWEST_ENTRY - Newest entry in the log.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned. SA_ERR_HPI_INVALID_CMD is returned if this log does not
+** support this operation.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogEntryDelete (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSelEntryIdT EntryId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogClear
+**
+** Description:
+** This function erases the contents of the specified system event log.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] ResourceID of the resource that contains the system
+** event log to be managed. Set to SAHPI_DOMAIN_CONTROLLER_ID to address
+** the domain system event log.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Note that all event logs must support the "clear" operation,
+** regardless of the setting of the DeleteEntrySupported field in the
+** SaHpiSelInfoT structure returned by saHpiEventLogInfoGet().
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogClear (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogTimeGet
+**
+** Description:
+** This function retrieves the current time from the event log's own time
+** clock. The value of this clock is used to timestamp log entries
+** written into the log.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] ResourceID of the resource that contains the System
+** Event Log to be managed. Set to SAHPI_DOMAIN_CONTROLLER_ID to address
+** the Domain System Event Log.
+** Time - [out] Pointer to the returned SEL current time. If the
+** implementation cannot supply an absolute time value, then it may
+** supply a time relative to some system-defined epoch, such as system
+** boot. If the time value is less than or equal to
+** SAHPI_TIME_MAX_RELATIVE, but not SAHPI_TIME_UNSPECIFIED, then it is
+** relative; if it is greater than SAHPI_TIME_MAX_RELATIVE, then it is
+** absolute. The value SAHPI_TIME_UNSPECIFIED indicates that the time is
+** not set, or cannot be determined.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogTimeGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiTimeT *Time
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogTimeSet
+**
+** Description:
+** This function sets the event log's time clock, which is used to
+** timestamp events written into the log.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource that contains the system
+** event log to be managed. set to SAHPI_DOMAIN_CONTROLLER_ID to address
+** the domain system event log.
+** Time - [in] time to set the SEL clock to. If the implementation cannot
+** supply an absolute time, then it may supply a time relative to some
+** system-defined epoch, such as system boot. If the timestamp value is
+** less than or equal to SAHPI_TIME_MAX_RELATIVE, but not
+** SAHPI_TIME_UNSPECIFIED, then it is relative; if it is greater than
+** SAHPI_TIME_MAX_RELATIVE, then it is absolute. The value
+** SAHPI_TIME_UNSPECIFIED indicates that the time of the event cannot be
+** determined.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogTimeSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiTimeT Time
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogStateGet
+**
+** Description:
+** This function enables system management software to get the event log
+** state. If the event log is "disabled" no events generated within the
+** HPI implementation will be added to the event log. Events may still be
+** added to the event log with the saHpiEventLogEntryAdd() function. When
+** the event log is "enabled" events may be automatically added to the
+** event log as they are generated in a resource or a domain, however, it
+** is implementation-specific which events are automatically added to any
+** event log.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] ResourceID of the resource that contains the System
+** Event Log to be managed. Set to SAHPI_DOMAIN_CONTROLLER_ID to address
+** the Domain System Event Log.
+** Enable - [out] Pointer to the current SEL state. True indicates that
+** the SEL is enabled; false indicates that it is disabled.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogStateGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiBoolT *Enable
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogStateSet
+**
+** Description:
+** This function enables system management software to set the event log
+** enabled state. If the event log is "disabled" no events generated
+** within the HPI implementation will be added to the event log. Events
+** may still be added to the event log using the saHpiEventLogEntryAdd()
+** function. When the event log is "enabled" events may be automatically
+** added to the event log as they are generated in a resource or a
+** domain. The actual set of events that are automatically added to any
+** event log is implementation-specific. Typically, the HPI
+** implementation will provide an appropriate default value for this
+** parameter, which may vary by resource. This function is provided so
+** that management software can override the default, if desired. Note:
+** If a resource hosting an event log is re-initialized (e.g., because of
+** a hot-swap action), the HPI implementation may reset the value of this
+** parameter.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource that contains the system
+** event log to be managed. Set to SAHPI_DOMAIN_CONTROLLER_ID to address
+** the domain system event log.
+** Enable - [in] SEL state to be set. True indicates that the SEL is to
+** be enabled; false indicates that it is to be disabled.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogStateSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiBoolT Enable
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSubscribe
+**
+** Description:
+** This function allows the caller to subscribe for session events. This
+** single call provides subscription to all session events, regardless of
+** event type or event severity. Only one subscription is allowed per
+** session, and additional subscribers will receive an appropriate error
+** code. No event filtering will be done by the underlying management
+** service.
+**
+** Parameters:
+** SessionId - [in] Session for which event subscription will be opened.
+** ProvideActiveAlarms - [in] Indicates whether or not alarms which are
+** active at the time of subscription should be queued for future
+** retrieval via the saHpiEventGet() function.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned. SA_ERR_HPI_DUPLICATE is returned when a subscription is
+** already in place for this session.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSubscribe (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiBoolT ProvideActiveAlarms
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiUnsubscribe
+**
+** Description:
+** This function removes the event subscription for the session. After
+** removal of a subscription, additional saHpiEventGet() calls will not
+** be allowed unless the caller re-subscribes for events first. Any
+** events that are still in the event queue when this function is called
+** will be cleared from it.
+**
+** Parameters:
+** SessionId - [in] Session for which event subscription will be closed.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned. SA_ERR_HPI_INVALID_REQUEST is returned if the caller is
+** not currently subscribed for events in this session.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiUnsubscribe (
+ SAHPI_IN SaHpiSessionIdT SessionId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEventGet
+**
+** Description:
+** This function allows the caller to get an event. This call is only
+** valid within a session, which has subscribed for events. If the
+** ProvideActiveAlarms parameter was set in the subscription, the first
+** events retrieved will reflect the state of currently active alarms for
+** the resources belonging to the domain. After all active alarms are
+** retrieved this function will begin returning newly generated events as
+** the domain controller receives them. If there are one or more events
+** on the event queue when this function is called, it will immediately
+** return the next event on the queue. Otherwise, if the Timeout
+** parameter is SAHPI_TIMEOUT_IMMEDIATE, it will return
+** SA_ERR_HPI_TIMEOUT immediately. Otherwise, it will block for a time
+** specified by the timeout parameter; if an event is added to the queue
+** within that time, it will be returned immediately; if not,
+** saHpiEventGet() will return SA_ERR_HPI_TIMEOUT. If the Timeout
+** parameter is SAHPI_TIMEOUT_BLOCK, then saHpiEventGet() will block
+** indefinitely, until an event becomes available, and then return that
+** event. This provides for notification of events as they occur.
+**
+** Parameters:
+** SessionId - [in] Session for which events are retrieved.
+** Timeout - [in] The number of nanoseconds to wait for an event to
+** arrive. Reserved time out values: SAHPI_TIMEOUT_IMMEDIATE Time out
+** immediately if there are no events available (non-blocking call).
+** SAHPI_TIMEOUT_BLOCK Call should not return until an event is
+** retrieved.
+** Event - [out] Pointer to the next available event.
+** Rdr - [in/out] Pointer to structure to receive the resource data
+** associated with the event. If NULL, no RDR will be returned.
+** RptEntry - [in/out] Pointer to structure to receive the RPT entry
+** associated with the resource that generated the event. If NULL, no RPT
+** entry will be returned.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned. SA_ERR_HPI_TIMEOUT is returned if no event is available
+** to return within the timeout period. If SAHPI_TIMEOUT_IMMEDIATE is
+** passed in the Timeout parameter, this error return will be used if
+** there is no event queued when the function is called.
+**
+** Remarks:
+** If the caller provides a pointer for an RPT entry, but the event does
+** not include a valid resource ID for a resource in the domain (possible
+** on OEM or USER type event), then the ResourceCapabilities field in
+** *RptEntry will be set to zero. No valid RPT entry will have a zero
+** value here. If the caller provides a pointer for an RDR, but there is
+** no valid RDR associated with the event being returned (e.g., returned
+** event is not a sensor event), Rdr->RdrType will be set to
+** SAHPI_NO_RECORD. The timestamp reported in the returned event
+** structure is the best approximation an implementation has to when the
+** event actually occurred. The implementation may need to make an
+** approximation (such as the time the event was placed on the event
+** queue) because it may not have access to the actual time the event
+** occurred. The value SAHPI_TIME_UNSPECIFIED indicates that the time of
+** the event cannot be determined. If the implementation cannot supply an
+** absolute timestamp, then it may supply a timestamp relative to some
+** system-defined epoch, such as system boot. If the timestamp value is
+** less than or equal to SAHPI_TIME_MAX_RELATIVE, but not
+** SAHPI_TIME_UNSPECIFIED, then it is relative; if it is greater than
+** SAHPI_TIME_MAX_RELATIVE, then it is absolute. 6 Resource Functions
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiTimeoutT Timeout,
+ SAHPI_OUT SaHpiEventT *Event,
+ SAHPI_INOUT SaHpiRdrT *Rdr,
+ SAHPI_INOUT SaHpiRptEntryT *RptEntry
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiRdrGet
+**
+** Description:
+** This function returns a resource data record from the addressed
+** resource. Submitting an EntryId of SAHPI_FIRST_ENTRY results in the
+** first RDR being read. A returned NextEntryID of SAHPI_LAST_ENTRY
+** indicates the last RDR has been returned. A successful retrieval will
+** include the next valid EntryId. To retrieve the entire list of RDRs,
+** call this function first with an EntryId of SAHPI_FIRST_ENTRY and then
+** use the returned NextEntryId in the next call. Proceed until the
+** NextEntryId returned is SAHPI_LAST_ENTRY.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** EntryId - [in] Handle of the RDR to retrieve. Reserved entry ID
+** values: SAHPI_FIRST_ENTRY Get first entry SAHPI_LAST_ENTRY Reserved as
+** delimiter for end of list. Not a valid entry identifier.
+** NextEntryId - [out] Pointer to location to store Entry ID of next
+** entry in RDR repository.
+** Rdr - [out] Pointer to the structure to receive the requested resource
+** data record.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** A resource's RDR repository is static over the lifetime of the
+** resource; therefore no precautions are required against changes to the
+** content of the RDR repository while it is being accessed.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiRdrGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiEntryIdT EntryId,
+ SAHPI_OUT SaHpiEntryIdT *NextEntryId,
+ SAHPI_OUT SaHpiRdrT *Rdr
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSensorReadingGet
+**
+** Description:
+** This function is used to retrieve a sensor reading.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** SensorNum - [in] Sensor number for which the sensor reading is being
+** retrieved.
+** Reading - [out] Pointer to a structure to receive sensor reading
+** values.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorReadingGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_OUT SaHpiSensorReadingT *Reading
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSensorReadingConvert
+**
+** Description:
+** This function converts between raw and interpreted sensor reading
+** values. The type of conversion done depends on the passed-in
+** ReadingInput parameter. If it contains only a raw value, then this is
+** converted to an interpreted value in ConvertedReading; if it contains
+** only an interpreted value, then this is converted to a raw value in
+** ConvertedReading. If it contains neither type of value, or both, then
+** an error is returned. The ReadingInput parameter is not altered in any
+** case. If the sensor does not use raw values - i.e., it directly
+** returns interpreted values - then this routine returns an error.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** SensorNum - [in] Sensor number for which reading is associated.
+** ReadingInput - [in] Pointer to the structure that contains raw or
+** interpreted reading to be converted.
+** ConvertedReading - [out] Pointer to structure to hold converted
+** reading.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned. SA_ERR_HPI_INVALID_PARAMS is returned if the ReadingInput
+** parameter is invalid; e.g. if it contains neither a raw nor an
+** interpreted value; or if it contains both; or if it contains an
+** invalid value. SA_ERR_HPI_INVALID_DATA is returned if the sensor does
+** not support raw readings. SA_ERR_HPI_NOT_PRESENT is returned if the
+** sensor is not present.
+**
+** Remarks:
+** The EventStatus field in ReadingInput is not used by this function. To
+** make conversions, sensor-specific data may be required. Thus, the
+** function references a particular sensor in the system through the
+** SessionID/ResourceID/SensorNum parameters. If this sensor is not
+** present, and sensor- specific information is required, the conversion
+** will fail and SA_ERR_HPI_NOT_PRESENT will be returned.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorReadingConvert (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_IN SaHpiSensorReadingT *ReadingInput,
+ SAHPI_OUT SaHpiSensorReadingT *ConvertedReading
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSensorThresholdsGet
+**
+** Description:
+** This function retrieves the thresholds for the given sensor.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** SensorNum - [in] Sensor number for which threshold values are being
+** retrieved.
+** SensorThresholds - [out] Pointer to returned sensor thresholds.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorThresholdsGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_OUT SaHpiSensorThresholdsT *SensorThresholds
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSensorThresholdsSet
+**
+** Description:
+** This function sets the specified thresholds for the given sensor.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of addressed resource.
+** SensorNum - [in] Sensor number for which threshold values are being
+** set.
+** SensorThresholds - [in] Pointer to the sensor thresholds values being
+** set.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** For each threshold or hysteresis value to be set, the corresponding
+** sensor reading structure must indicate whether a raw or interpreted
+** value is present. If neither are present, then that threshold or
+** hysteresis value will not be set. Each sensor may require settings to
+** be done with raw, or interpreted values, or may permit either; this is
+** defined by the field ThresholdDefn.TholdCapabilities in the sensor's
+** RDR (saHpiSensorRecT). If the interpreted value and raw value are both
+** provided, and both are legal for the sensor, the interpreted value
+** will be ignored and the raw value will be used.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorThresholdsSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_IN SaHpiSensorThresholdsT *SensorThresholds
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSensorTypeGet
+**
+** Description:
+** This function retrieves the sensor type and event category for the
+** specified sensor.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** SensorNum - [in] Sensor number for which the type is being retrieved
+** Type - [out] Pointer to returned enumerated sensor type for the
+** specified sensor.
+** Category - [out] Pointer to location to receive the returned sensor
+** event category.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorTypeGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_OUT SaHpiSensorTypeT *Type,
+ SAHPI_OUT SaHpiEventCategoryT *Category
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSensorEventEnablesGet
+**
+** Description:
+** This function provides the ability to get the disable or enable event
+** message generation status for individual sensor events. The sensor
+** event states are relative to the event category specified by the
+** sensor. See the SaHpiEventCategoryT definition in section 7.3,
+** "Events, Part 1," on page 83 for more information. Within the
+** structure returned, there are two elements that contain bit flags; one
+** for assertion events and one for de-assertion events. A bit set to '1'
+** in the "AssertEvents" element in the structure indicates that an event
+** will be generated when the corresponding event state changes from
+** de-asserted to asserted on that sensor. A bit set to '1' in the
+** "DeassertEvents" element in the structure indicates that an event will
+** be generated when the corresponding event state changes from asserted
+** to de-asserted on that sensor. The saHpiSensorEventEnablesGet()
+** function also returns the general sensor status - whether the sensor
+** is completely disabled, or event generation is completely disabled.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** SensorNum - [in] Sensor number for which the event enable
+** configuration is being requested
+** Enables - [out] Pointer to the structure for returning sensor status
+** and event enable information.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Disabling events means that events are disabled for all sessions, not
+** just the session referenced by the SessionId parameter. For sensors
+** hosted by resources that have the "SAHPI_CAPABILITY_EVT_DEASSERTS"
+** flag set in its RPT entry, the "AssertEvents" element and the
+** "DeassertsEvents" element will always have same value.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorEventEnablesGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_OUT SaHpiSensorEvtEnablesT *Enables
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSensorEventEnablesSet
+**
+** Description:
+** This function provides the ability to set the disable or enable event
+** message generation status for individual sensor events. The sensor
+** event states are relative to the event category specified by the
+** sensor. See the SaHpiEventCategoryT definition for more information.
+** Within the structure passed, there are two elements, which contain bit
+** flags; one for assertion events and one for de-assertion events.
+** However, the use of these two elements depends on whether the resource
+** addressed has the "SAHPI_CAPABILITY_EVT_DEASSERTS" flag set in its RPT
+** entry. This capability, if set, advertises that all sensors hosted by
+** the resource will always send a "de-assert" event when any state is
+** de-asserted whose assertion generates an "assert" event. Thus, for
+** sensors hosted by resources that advertise this behavior, it is not
+** meaningful to control assert events and de-assert events separately.
+** For sensors on resources that do not have the
+** "SAHPI_CAPABILITY_EVT_DEASSERTS" flag set, a bit set to '1' in the
+** "AssertEvents" element in the structure indicates that an event will
+** be generated when the corresponding event state changes from
+** de-asserted to asserted on that sensor., and a bit set to '1' in the
+** "DeassertEvents" element in the structure indicates that an event will
+** be generated when the corresponding event state changes from asserted
+** to de-asserted on that sensor. For sensors on resources, which do have
+** the "SAHPI_CAPABILITY_EVT_DEASSERTS" flag set, the "DeassertEvents"
+** element is not used. For sensors on these resources, a bit set to '1'
+** in the "AssertEvents" element in the structure indicates that an event
+** will be generated when the corresponding event state changes in either
+** direction (de-asserted to asserted or asserted to de-asserted). The
+** saHpiSensorEventEnablesSet() function also allows setting of general
+** sensor status - whether the sensor is completely disabled, or event
+** generation is completely disabled.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** SensorNum - [in] Sensor number for which the event enables are being
+** set.
+** Enables - [in] Pointer to the structure containing the enabled status
+** for each event.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Disabling events means that events are disabled for all sessions, not
+** just the session referenced by the SessionId parameter.
+** saHpiSensorEventEnablesGet () will return the values which were last
+** set by saHpiSensorEventEnablesSet() for the "AssertEvents" and
+** "DeassertEvents" elements in the passed data structures. However, for
+** sensors hosted by any resource that has the
+** SAHPI_CAPABILITY_EVT_DEASSERTS flag set in its RPT entry, the passed
+** "AssertEvents" element on the saHpiSensorEventEnablesSet () function
+** is used for both assertion and de-assertion event enable flags. In
+** this case, this value will be returned in both the "AssertEvents" and
+** "DeassertEvents" elements on a subsequent saHpiSensorEventEnablesGet
+** () call.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorEventEnablesSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_IN SaHpiSensorEvtEnablesT *Enables
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiControlTypeGet
+**
+** Description:
+** This function retrieves the control type of a control object.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** CtrlNum - [in] Control number
+** Type - [out] Pointer to SaHpiCtrlTypeT variable to receive the
+** enumerated control type for the specified control.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** The Type parameter must point to a variable of type SaHpiCtrlTypeT.
+** Upon successful completion, the enumerated control type is returned in
+** the variable pointed to by Type.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiControlTypeGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiCtrlNumT CtrlNum,
+ SAHPI_OUT SaHpiCtrlTypeT *Type
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiControlStateGet
+**
+** Description:
+** This function retrieves the current state (generally the last state
+** set) of a control object.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of addressed resource.
+** CtrlNum - [in] Number of the control for which the state is being
+** retrieved.
+** CtrlState - [in/out] Pointer to a control data structure into which
+** the current control state will be placed. For text controls, the line
+** number to read is passed in via CtrlState->StateUnion.Text.Line.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Note that Text controls are unique in that they have a state
+** associated with each line of the control - the state being the text on
+** that line. The line number to be read is passed in to
+** sahpiControlStateGet()via CtrlState- >StateUnion.Text.Line; the
+** contents of that line of the control will be returned in CtrlState-
+** >StateUnion.Text.Text. If the line number passed in is
+** SAHPI_TLN_ALL_LINES, then sahpiControlStateGet() will return the
+** entire text of the control, or as much of it as will fit in a single
+** SaHpiTextBufferT, in CtrlState- >StateUnion.Text.Text. This value will
+** consist of the text of all the lines concatenated, using the maximum
+** number of characters for each line (no trimming of trailing blanks).
+** Note that depending on the data type and language, the text may be
+** encoded in 2-byte Unicode, which requires two bytes of data per
+** character. Note that the number of lines and columns in a text control
+** can be obtained from the control's Resource Data Record.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiControlStateGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiCtrlNumT CtrlNum,
+ SAHPI_INOUT SaHpiCtrlStateT *CtrlState
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiControlStateSet
+**
+** Description:
+** This function is used for setting the state of the specified control
+** object.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** CtrlNum - [in] Number of the control for which the state is being set.
+**
+** CtrlState - [in] Pointer to a control state data structure holding the
+** state to be set
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** The CtrlState parameter must be of the correct type for the specified
+** control. Text controls include a line number and a line of text in the
+** CtrlState parameter, allowing update of just a single line of a text
+** control. If less than a full line of data is written, the control will
+** clear all spaces beyond those written on the line. Thus writing a
+** zero-length string will clear the addressed line. It is also possible
+** to include more characters in the text passed in the CtrlState
+** structure than will fit on one line; in this case, the control will
+** "wrap" to the next line (still clearing the trailing characters on the
+** last line written). Thus, there are two ways to write multiple lines
+** to a text control: (a) call saHpiControlStateSet() repeatedly for each
+** line, or (b) call saHpiControlStateSet() once and send more characters
+** than will fit on one line. The caller should not assume any "cursor
+** positioning" characters are available to use, but rather should always
+** write full lines and allow "wrapping" to occur. When calling
+** saHpiControlStateSet() for a text control, the caller may set the line
+** number to SAHPI_TLN_ALL_LINES; in this case, the entire control will
+** be cleared, and the data will be written starting on line 0. (This is
+** different from simply writing at line 0, which only alters the lines
+** written to.) This feature may be used to clear the entire control,
+** which can be accomplished by setting: CtrlState->StateUnion.Text.Line
+** = SAHPI_TLN_ALL_LINES; CtrlState->StateUnion.Text.Text.DataLength = 0;
+** Note that the number of lines and columns in a text control can be
+** obtained from the control's Resource Data Record.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiControlStateSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiCtrlNumT CtrlNum,
+ SAHPI_IN SaHpiCtrlStateT *CtrlState
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEntityInventoryDataRead
+**
+** Description:
+** This function returns inventory data for a particular entity
+** associated with a resource.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** EirId - [in] Identifier for the entity inventory repository.
+** BufferSize - [in] Size of the InventData buffer passed in.
+** InventData - [out] Pointer to the buffer for the returned data.
+** ActualSize - [out] Pointer to size of the actual amount of data
+** returned.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned. SA_ERR_INVENT_DATA_TRUNCATED is returned if the buffer
+** passed in the InventData structure is not large enough (as indicated
+** by the "BufferSize" parameter) to hold the entire InventData
+** structure.
+**
+** Remarks:
+** Before calling saHpiEntityInventoryDataRead() the caller should
+** allocate a sufficiently large buffer to hold the data, and pass the
+** size of the buffer in the "BufferSize" parameter. The
+** saHpiEntityInventoryDataRead() function will return, at the location
+** pointed to by the ActualSize parameter, the actual space used in the
+** buffer to hold the returned data. If the data will not fit in the
+** buffer, as much as will fit will be returned, *ActualSize will be set
+** to indicated a suggested buffer size for the entire inventory data,
+** the "Validity" field in the InventData buffer will be set to
+** "SAHPI_INVENT_DATA_OVERFLOW," and an error return will be made. Since
+** it is impossible to know how large the inventory data may be without
+** actually reading and processing it from the entity inventory
+** repository, it may be advisable to err on the large side in allocating
+** the buffer. Note that the data includes many pointers to
+** SaHpiTextBufferT structures. The implementation of
+** saHpiEntityInventoryDataRead() may not reserve space for the maximum
+** size of each of these structures when formatting the data in the
+** returned buffer. Thus, if a user wishes to lengthen the data in one of
+** these structures, a new SaHpiTextBufferT structure should be
+** allocated, and the appropriate pointer reset to point to this new
+** structure in memory. See the description of the SaHpiInventoryDataT
+** structure in section 7.9, "Entity Inventory Data," on page 94, for
+** details on the format of the returned data.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEntityInventoryDataRead (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiEirIdT EirId,
+ SAHPI_IN SaHpiUint32T BufferSize,
+ SAHPI_OUT SaHpiInventoryDataT *InventData,
+ SAHPI_OUT SaHpiUint32T *ActualSize
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiEntityInventoryDataWrite
+**
+** Description:
+** This function writes the specified data to the inventory information
+** area. Note: If the resource hosting the inventory data is
+** re-initialized, or if the entity itself is removed and reinserted, the
+** inventory data may be reset to its default settings, losing data
+** written to the repository with this function.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** EirId - [in] Identifier for the entity inventory repository.
+** InventData - [in] Pointer to data to write to the repository.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** The SaHpiInventoryDataT structure consists of a Validity field and
+** then a set of pointers to record structures. It is not required that
+** all pointers point to data within a single contiguous buffer. The
+** "Validity" field in the SaHpiInventoryDataT structure must be set to
+** "SAHPI_INVENT_DATA_VALID," or else the saHpiEntityInventoryDataWrite()
+** function will take no action and return an error. This is to help
+** prevent invalid data returned by a saHpiEntityInventoryDataRead()
+** function from being inadvertently written to the resource. For this
+** protection to work, the caller should not change the value of the
+** "Validity" field in the SaHpiInventoryDataT structure unless building
+** an entire Inventory Data set from scratch. Some implementations may
+** impose limitations on the languages of the strings passed in within
+** the InventData parameter. Implementation-specific documentation
+** should identify these restrictions.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEntityInventoryDataWrite (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiEirIdT EirId,
+ SAHPI_IN SaHpiInventoryDataT *InventData
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiWatchdogTimerGet
+**
+** Description:
+** This function retrieves the current watchdog timer settings and
+** configuration.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource, which contains the
+** watchdog timer being addressed.
+** WatchdogNum - [in] The watchdog number that specifies the watchdog
+** timer on a resource.
+** Watchdog - [out] Pointer to watchdog data structure.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** See the description of the SaHpiWatchdogT structure in 7.11,
+** "Watchdogs" on page 96 for details on what information is returned by
+** this function.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiWatchdogTimerGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiWatchdogNumT WatchdogNum,
+ SAHPI_OUT SaHpiWatchdogT *Watchdog
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiWatchdogTimerSet
+**
+** Description:
+** This function provides a method for initializing the watchdog timer
+** configuration. Once the appropriate configuration has be set using
+** saHpiWatchdogTimerSet(), the user must then call
+** saHpiWatchdogTimerReset() to initially start the watchdog timer.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the resource that contains the
+** watchdog timer being addressed.
+** WatchdogNum - [in] The watchdog number specifying the specific
+** watchdog timer on a resource.
+** Watchdog - [in] Pointer to watchdog data structure.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** If the initial counter value in the SaHpiWatchdogT structure is set to
+** 0, the Watchdog will immediately time out and take the pre-timeout and
+** timeout actions, as well as log an event. This provides a mechanism
+** for software to force an immediate recovery action should that be
+** dependent on a Watchdog timeout occurring. See the description of the
+** SaHpiWatchdogT structure for more details on the effects of this
+** command related to specific data passed in that structure.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiWatchdogTimerSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiWatchdogNumT WatchdogNum,
+ SAHPI_IN SaHpiWatchdogT *Watchdog
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiWatchdogTimerReset
+**
+** Description:
+** This function provides a method to start or restart the watchdog timer
+** from the initial countdown value.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID for the resource that contains the
+** watchdog timer being addressed.
+** WatchdogNum - [in] The watchdog number specifying the specific
+** watchdog timer on a resource.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** If the Watchdog has been configured to issue a Pre-Timeout interrupt,
+** and that interrupt has already occurred, the saHpiWatchdogTimerReset()
+** function will not reset the watchdog counter. The only way to stop a
+** Watchdog from timing out once a Pre-Timeout interrupt has occurred is
+** to use the saHpiWatchdogTimerSet() function to reset and/or stop the
+** timer.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiWatchdogTimerReset (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiWatchdogNumT WatchdogNum
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiHotSwapControlRequest
+**
+** Description:
+** A resource supporting hot swap typically supports default policies for
+** insertion and extraction. On insertion, the default policy may be for
+** the resource to turn the associated FRU's local power on and to
+** de-assert reset. On extraction, the default policy may be for the
+** resource to immediately power off the FRU and turn on a hot swap
+** indicator. This function allows a caller, after receiving a hot swap
+** event with HotSwapState equal to SAHPI_HS_STATE_INSERTION_PENDING or
+** SAHPI_HS_STATE_EXTRACTION_PENDING, to request control of the hot swap
+** policy and prevent the default policy from being invoked. Because a
+** resource that supports the simplified hot swap model will never
+** transition into Insertion Pending or Extraction Pending states, this
+** function is not applicable to those resources.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiHotSwapControlRequest (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourceActiveSet
+**
+** Description:
+** During insertion, a resource supporting hot swap will generate an
+** event to indicate that it is in the INSERTION PENDING state. If the
+** management middleware or other user software calls
+** saHpiHotSwapControlRequest() before the resource begins an auto-insert
+** operation, then the resource will remain in INSERTION PENDING state
+** while the user acts on the resource to integrate it into the system.
+** During this state, the user can instruct the resource to power on the
+** associated FRU, to de-assert reset, or to turn off its hot swap
+** indicator using the saHpiResourcePowerStateSet(),
+** saHpiResourceResetStateSet(), or saHpiHotSwapIndicatorStateSet()
+** functions, respectively. Once the user has completed with the
+** integration of the FRU, this function must be called to signal that
+** the resource should now transition into ACTIVE/HEALTHY or
+** ACTIVE/UNHEALTHY state (depending on whether or not there are active
+** faults). The user may also use this function to request a resource to
+** return to the ACTIVE/HEALTHY or ACTIVE/UNHEALTHY state from the
+** EXTRACTION PENDING state in order to reject an extraction request.
+** Because a resource that supports the simplified hot swap model will
+** never transition into Insertion Pending or Extraction Pending states,
+** this function is not applicable to those resources.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Only valid if resource is in INSERTION PENDING or EXTRACTION PENDING
+** state and an auto-insert or auto-extract policy action has not been
+** initiated.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceActiveSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourceInactiveSet
+**
+** Description:
+** During extraction, a resource supporting hot swap will generate an
+** event to indicate that it is in the EXTRACTION PENDING state. If the
+** management middleware or other user software calls
+** saHpiHotSwapControlRequest() before the resource begins an
+** auto-extract operation, then the resource will remain in EXTRACTION
+** PENDING state while the user acts on the resource to isolate the
+** associated FRU from the system. During this state, the user can
+** instruct the resource to power off the FRU, to assert reset, or to
+** turn on its hot swap indicator using the saHpiResourcePowerStateSet(),
+** saHpiResourceResetStateSet(), or saHpiHotSwapIndicatorStateSet()
+** functions, respectively. Once the user has completed the shutdown of
+** the FRU, this function must be called to signal that the resource
+** should now transition into INACTIVE state. The user may also use this
+** function to request a resource to return to the INACTIVE state from
+** the INSERTION PENDING state to abort a hot-swap insertion action.
+** Because a resource that supports the simplified hot swap model will
+** never transition into Insertion Pending or Extraction Pending states,
+** this function is not applicable to those resources.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Only valid if resource is in EXTRACTION PENDING or INSERTION PENDING
+** state and an auto-extract or auto-insert policy action has not been
+** initiated.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceInactiveSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiAutoInsertTimeoutGet
+**
+** Description:
+** This function allows the caller to request the auto-insert timeout
+** value. This value indicates how long the HPI implementation will wait
+** before the default auto-insertion policy is invoked. Further
+** information on the auto-insert timeout can be found in the function
+** saHpiAutoInsertTimeoutSet().
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** Timeout - [out] Pointer to location to store the number of nanoseconds
+** to wait before autonomous handling of the hotswap event. Reserved time
+** out values: SAHPI_TIMEOUT_IMMEDIATE indicates autonomous handling is
+** immediate. SAHPI_TIMEOUT_BLOCK indicates autonomous handling does not
+** occur.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAutoInsertTimeoutGet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_OUT SaHpiTimeoutT *Timeout
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiAutoInsertTimeoutSet
+**
+** Description:
+** This function allows the caller to configure a timeout for how long to
+** wait before the default auto-insertion policy is invoked. This
+** function accepts a parameter instructing the implementation to impose
+** a delay before a resource will perform its default hot swap policy for
+** auto-insertion. The parameter may be set to SAHPI_TIMEOUT_IMMEDIATE to
+** direct resources to proceed immediately to auto-insertion, or to
+** SAHPI_TIMEOUT_BLOCK to prevent auto-insertion from ever occurring. If
+** the parameter is set to another value, then it defines the number of
+** nanoseconds between the time a hot swap event with HotSwapState =
+** SAHPI_HS_STATE_INSERTION_PENDING is generated, and the time that the
+** auto-insertion policy will be invoked for that resource. If, during
+** this time period, a saHpiHotSwapControlRequest() function is
+** processed, the timer will be stopped, and the auto-insertion policy
+** will not be invoked. Once the auto-insertion process begins, the user
+** software will not be allowed to take control of the insertion process;
+** hence, the timeout should be set appropriately to allow for this
+** condition. Note that the timeout period begins when the hot swap event
+** with HotSwapState = SAHPI_HS_STATE_INSERTION_PENDING is initially
+** generated; not when it is received by a caller with a saHpiEventGet()
+** function call, or even when it is placed in a session event queue.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** Timeout - [in] The number of nanoseconds to wait before autonomous
+** handling of the hotswap event. Reserved time out values:
+** SAHPI_TIMEOUT_IMMEDIATE indicates proceed immediately to autonomous
+** handling. SAHPI_TIMEOUT_BLOCK indicates prevent autonomous handling.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAutoInsertTimeoutSet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiTimeoutT Timeout
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiAutoExtractTimeoutGet
+**
+** Description:
+** This function allows the caller to request the timeout for how long
+** the implementation will wait before the default auto-extraction policy
+** is invoked. Further information on auto-extract time outs is detailed
+** in saHpiAutoExtractTimeoutSet().
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** Timeout - [out] Pointer to location to store the number of nanoseconds
+** to wait before autonomous handling of the hotswap event. Reserved time
+** out values: SAHPI_TIMEOUT_IMMEDIATE indicates autonomous handling is
+** immediate. SAHPI_TIMEOUT_BLOCK indicates autonomous handling does not
+** occur.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAutoExtractTimeoutGet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiTimeoutT *Timeout
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiAutoExtractTimeoutSet
+**
+** Description:
+** This function allows the caller to configure a timeout for how long to
+** wait before the default auto-extraction policy is invoked. This
+** function accepts a parameter instructing the implementation to impose
+** a delay before a resource will perform its default hot swap policy for
+** auto-extraction. The parameter may be set to SAHPI_TIMEOUT_IMMEDIATE
+** to direct the resource to proceed immediately to auto-extraction, or
+** to SAHPI_TIMEOUT_BLOCK to prevent auto-extraction from ever occurring
+** on a resource. If the parameter is set to another value, then it
+** defines the number of nanoseconds between the time a hot swap event
+** with HotSwapState = SAHPI_HS_STATE_EXTRACTION_PENDING is generated,
+** and the time that the auto- extraction policy will be invoked for the
+** resource. If, during this time period, a saHpiHotSwapControlRequest()
+** function is processed, the timer will be stopped, and the
+** auto-extraction policy will not be invoked. Once the auto-extraction
+** process begins, the user software will not be allowed to take control
+** of the extraction process; hence, the timeout should be set
+** appropriately to allow for this condition. Note that the timeout
+** period begins when the hot swap event with HotSwapState =
+** SAHPI_HS_STATE_EXTRACTION_PENDING is initially generated; not when it
+** is received by a caller with a saHpiEventGet() function call, or even
+** when it is placed in a session event queue. The auto-extraction policy
+** is set at the resource level and is only supported by resources
+** supporting the "Managed Hot Swap" capability. After discovering that a
+** newly inserted resource supports "Managed Hot Swap," middleware or
+** other user software may use this function to change the default
+** auto-extraction policy for that resource. If a resource supports the
+** simplified hot-swap model, setting this timer has no effect since the
+** resource will transition directly to "Not Present" state on an
+** extraction.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** Timeout - [in] The number of nanoseconds to wait before autonomous
+** handling of the hotswap event. Reserved time out values:
+** SAHPI_TIMEOUT_IMMEDIATE indicates proceed immediately to autonomous
+** handling. SAHPI_TIMEOUT_BLOCK indicates prevent autonomous handling.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAutoExtractTimeoutSet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiTimeoutT Timeout
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiHotSwapStateGet
+**
+** Description:
+** This function allows the caller to retrieve the current hot swap state
+** of a resource. The returned state will be one of the following five
+** states: ? SAHPI_HS_STATE_INSERTION_PENDING ?
+** SAHPI_HS_STATE_ACTIVE_HEALTHY ? SAHPI_HS_STATE_ACTIVE_UNHEALTHY ?
+** SAHPI_HS_STATE_EXTRACTION_PENDING ? SAHPI_HS_STATE_INACTIVE The state
+** SAHPI_HS_STATE_NOT_PRESENT will never be returned, because a resource
+** that is not present cannot be addressed by this function in the first
+** place.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** State - [out] Pointer to location to store returned state information.
+**
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiHotSwapStateGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiHsStateT *State
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiHotSwapActionRequest
+**
+** Description:
+** A resource supporting hot swap typically requires a physical action on
+** the associated FRU to invoke an insertion or extraction process. An
+** insertion process is invoked by physically inserting the FRU into a
+** chassis. Physically opening an ejector latch or pressing a button
+** invokes the extraction process. This function allows the caller to
+** invoke an insertion or extraction process via software.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** Action - [in] Requested action: SAHPI_HS_ACTION_INSERTION or
+** SAHPI_HS_ACTION_EXTRACTION
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** There may be limitations on when saHpiHotSwapActionRequest() may be
+** called, and what value may be used for the "Action" parameter
+** depending on what state the resource is currently in. At the least,
+** this function may be called: ? To request an Insertion action when the
+** resource is in INACTIVE state ? To request an Extraction action when
+** the resource is in the ACTIVE/HEALTHY or ACTIVE/ UNHEALTHY state.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiHotSwapActionRequest (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiHsActionT Action
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourcePowerStateGet
+**
+** Description:
+** A typical resource supporting hot swap will have the ability to
+** control local power on the FRU associated with the resource. During
+** insertion, the FRU can be instructed to power on. During extraction
+** the FRU can be requested to power off. This function allows the caller
+** to retrieve the current power state of the FRU associated with the
+** specified resource.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** State - [out] The current power state of the resource.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** This function returns the actual low-level power state of the FRU,
+** regardless of what hot-swap state the resource is in. Not all
+** resources supporting managed hot swap will necessarily support this
+** function. In particular, resources that use the simplified hot swap
+** model may not have the ability to control FRU power. An appropriate
+** error code will be returned if the resource does not support power
+** control on the FRU.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourcePowerStateGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiHsPowerStateT *State
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourcePowerStateSet
+**
+** Description:
+** A typical resource supporting hot swap will have to ability to control
+** local power on the FRU associated with the resource. During insertion,
+** the FRU can be instructed to power on. During extraction the FRU can
+** be requested to power off. This function allows the caller to set the
+** current power state of the FRU associated with the specified resource.
+**
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** State - [in] the new power state that the specified resource will be
+** set to.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** This function controls the hardware power on the FRU of what hot-swap
+** state the resource is in. For example, it is legal (and may be
+** desirable) to cycle power on the FRU even while it is in ACTIVE state
+** in order to attempt to clear a fault condition. Similarly, a resource
+** could be instructed to power on a FRU even while it is in INACTIVE
+** state, for example, in order to run off-line diagnostics. Not all
+** resources supporting managed hot swap will necessarily support this
+** function. In particular, resources that use the simplified hot swap
+** model may not have the ability to control FRU power. An appropriate
+** error code will be returned if the resource does not support power
+** control on the FRU.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourcePowerStateSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiHsPowerStateT State
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiHotSwapIndicatorStateGet
+**
+** Description:
+** A FRU associated with a hot-swappable resource may include a hot swap
+** indicator such as a blue LED. This indicator signifies that the FRU is
+** ready for removal.. This function allows the caller to retrieve the
+** state of this indicator. The returned state is either
+** SAHPI_HS_INDICATOR_OFF or SAHPI_HS_INDICATOR_ON. This function will
+** return the state of the indicator, regardless of what hot swap state
+** the resource is in.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** State - [out] Pointer to location to store state of hot swap
+** indicator.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Not all resources supporting managed hot swap will necessarily support
+** this function. In particular, resources that use the simplified hot
+** swap model may not have the ability to control a FRU hot swap
+** indicator (it is likely that none exists). An appropriate error code
+** will be returned if the resource does not support control of a hot
+** swap indicator on the FRU.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiHotSwapIndicatorStateGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiHsIndicatorStateT *State
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiHotSwapIndicatorStateSet
+**
+** Description:
+** A FRU associated with a hot-swappable resource may include a hot swap
+** indicator such as a blue LED. This indicator signifies that the FRU is
+** ready for removal. This function allows the caller to set the state of
+** this indicator. Valid states include SAHPI_HS_INDICATOR_OFF or
+** SAHPI_HS_INDICATOR_ON. This function will set the indicator regardless
+** of what hot swap state the resource is in, though it is recommended
+** that this function be used only in conjunction with moving the
+** resource to the appropriate hot swap state.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource
+** State - [in] State of hot swap indicator to be set.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Not all resources supporting managed hot swap will necessarily support
+** this function. In particular, resources that use the simplified hot
+** swap model may not have the ability to control a FRU hot swap
+** indicator (it is likely that none exists). An appropriate error code
+** will be returned if the resource does not support control of a hot
+** swap indicator on the FRU.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiHotSwapIndicatorStateSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiHsIndicatorStateT State
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiParmControl
+**
+** Description:
+** This function allows the user to save and restore parameters
+** associated with a specific resource. Valid actions for this function
+** include: SAHPI_DEFAULT_PARM Restores the factory default settings for
+** a specific resource. Factory defaults include sensor thresholds and
+** configurations, and resource- specific configuration parameters.
+** SAHPI_SAVE_PARM Stores the resource configuration parameters in
+** non-volatile storage. Resource configuration parameters stored in
+** non-volatile storage will survive power cycles and resource resets.
+** SAHPI_RESTORE_PARM Restores resource configuration parameters from
+** non-volatile storage. Resource configuration parameters include sensor
+** thresholds and sensor configurations, as well as resource-specific
+** parameters.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** Action - [in] Action to perform on resource parameters.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code
+** is returned.
+**
+** Remarks:
+** Resource-specific parameters should be documented in an implementation
+** guide for the HPI implementation.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiParmControl (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiParmActionT Action
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourceResetStateGet
+**
+** Description:
+** This function gets the reset state of an entity, allowing the user to
+** determine if the entity is being held with its reset asserted. If a
+** resource manages multiple entities, this function will address the
+** entity which is identified in the RPT entry for the resource.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** ResetAction - [out] The current reset state of the entity. Valid reset
+** states are: SAHPI_RESET_ASSERT: The entity's reset is asserted, e.g.,
+** for hot swap insertion/extraction purposes SAHPI_RESET_DEASSERT: The
+** entity's reset is not asserted
+**
+** Return Value:
+** SA_OK is returned if the resource has reset control, and the reset
+** state has successfully been determined; otherwise, an error code is
+** returned. SA_ERR_HPI_INVALID_CMD is returned if the resource has no
+** reset control.
+**
+** Remarks:
+** SAHPI_RESET_COLD and SAHPI_RESET_WARM are pulsed resets, and are not
+** valid return values for ResetAction. If the entity is not being held
+** in reset (using SAHPI_RESET_ASSERT), the appropriate return value is
+** SAHPI_RESET_DEASSERT.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceResetStateGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiResetActionT *ResetAction
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiResourceResetStateSet
+**
+** Description:
+** This function directs the resource to perform the specified reset type
+** on the entity that it manages. If a resource manages multiple
+** entities, this function addresses the entity that is identified in the
+** RPT entry for the resource. Entities may be reset for a variety of
+** reasons. A misbehaving entity may be reset to bring it to a known
+** state. In these cases, either a warm reset or a cold reset may be
+** performed. A warm reset preserves entity state, whereas a cold reset
+** does not. Both of these reset types are pulsed asserted and then
+** de-asserted by the HPI implementation. This allows the HPI
+** implementation to hold the reset asserted for the appropriate length
+** of time, as needed by each entity. saHpiResourceResetStateSet() can
+** also be used for insertion and extraction scenarios. A typical
+** resource supporting hot swap will have to ability to control local
+** reset within the FRU. During insertion, a resource can be instructed
+** to assert reset, while the FRU powers on. During extraction a resource
+** can be requested to assert reset before the FRU is powered off. This
+** function allows the caller to set the reset state of the specified
+** FRU. SAHPI_RESET_ASSERT is used to hold the resource in reset; the FRU
+** is brought out of the reset state by using either SAHPI_COLD_RESET or
+** SAHPI_WARM_RESET.
+**
+** Parameters:
+** SessionId - [in] Handle to session context.
+** ResourceId - [in] Resource ID of the addressed resource.
+** ResetAction - [in] Type of reset to perform on the entity. Valid reset
+** actions are: SAHPI_COLD_RESET: Perform a 'Cold Reset' on the entity
+** (pulse), leaving reset de-asserted SAHPI_WARM_RESET: Perform a 'Warm
+** Reset' on the entity (pulse), leaving reset de-asserted
+** SAHPI_RESET_ASSERT: Put the entity into reset state and hold reset
+** asserted, e.g., for hot swap insertion/extraction purposes
+**
+** Return Value:
+** SA_OK is returned if the resource has reset control, and the requested
+** reset action has succeeded; otherwise, an error code is returned.
+** SA_ERR_HPI_INVALID_CMD is returned if the resource has no reset
+** control, or if the requested reset action is not supported by the
+** resource.
+**
+** Remarks:
+** Some resources may not support reset, or may only support a subset of
+** the defined reset action types. Also, on some resources, cold and warm
+** resets may be equivalent. 7 Data Type Definitions
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceResetStateSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiResetActionT ResetAction
+);
+
+
+
+#endif
+
diff --git a/hpiutil/SaHpi.h-B b/hpiutil/SaHpi.h-B new file mode 100644 index 0000000..38d666b --- /dev/null +++ b/hpiutil/SaHpi.h-B @@ -0,0 +1,6785 @@ +/*******************************************************************************
+**
+** FILE:
+** SaHpi.h
+**
+** DESCRIPTION:
+** This file provides the C language binding for the Service
+** Availability(TM) Forum Platform Interface. It contains all of
+** the prototypes and type definitions. Note, this file was
+** generated from the Platform Interface specification document.
+**
+** SPECIFICATION VERSION:
+** SAI-HPI-B.01.01
+**
+** DATE:
+** Tue Jun 1 2004 09:33
+**
+** LEGAL:
+** OWNERSHIP OF SPECIFICATION AND COPYRIGHTS.
+** The Specification and all worldwide copyrights therein are
+** the exclusive property of Licensor. You may not remove, obscure, or
+** alter any copyright or other proprietary rights notices that are in or
+** on the copy of the Specification you download. You must reproduce all
+** such notices on all copies of the Specification you make. Licensor
+** may make changes to the Specification, or to items referenced therein,
+** at any time without notice. Licensor is not obligated to support or
+** update the Specification.
+**
+** Copyright(c) 2004, Service Availability(TM) Forum. All rights
+** reserved.
+**
+*******************************************************************************/
+
+#ifndef __SAHPI_H
+#define __SAHPI_H
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Basic Data Types and Values **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* General Types - need to be specified correctly for the host architecture */
+
+/*
+** It is recommended that these types be defined such that the data sizes
+** and alignment of each data type are as indicated. The only requirement
+** for source compatibility is that the types be defined to be able to
+** contain at least the required data (e.g., at least signed 8-bit values
+** must be contained in the data type defined as SaHpiInt8T, etc.)
+** Following the full recommendations for data size and alignment, however,
+** may promote more binary compatibility.
+*/
+
+/* The following definitions produce the recommended sizes and alignments
+** using the gcc compiler for the i386 (IA-32) platform.
+**
+** Note, some recent versions of the gcc compiler exhibit an apparent bug
+** that makes the __attribute__ statements applied to the typdef's on
+** the 64-bit types below ineffective when those types are used in structures.
+** To workaround that bug, it may be required to add similar __attribute__
+** statements on the typedefs of the derived types SaHpiTimeT and
+** SaHpiTimeoutT, plus on individual 64-bit data items within structure and
+** union definitions in order to align the HPI structures as recommended.
+** The structures and unions that contain 64-bit data items are:
+** SaHpiSensorReadingUnionT, SaHpiSensorDataFormatT, SaHpiEventT,
+** SaHpiAnnouncementT, SaHpiDomainInfoT, SaHpiAlarmT, SaHpiEventLogInfoT,
+** and SaHpiEventLogEntryT. For more information, see:
+** https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109911
+*/
+
+
+/* unsigned 8-bit data, 1-byte alignment */
+typedef unsigned char SaHpiUint8T;
+
+/* unsigned 16-bit data, 2-byte alignment */
+typedef unsigned short SaHpiUint16T;
+
+/* unsigned 32-bit data, 4-byte alignment */
+typedef unsigned int SaHpiUint32T;
+
+/* unsigned 64-bit data, 8-byte alignment */
+typedef unsigned long long int SaHpiUint64T __attribute__((__aligned__(8)));
+
+/* signed 8-bit data, 1-byte alignment */
+typedef signed char SaHpiInt8T;
+
+/* signed 16-bit data, 2-byte alignment */
+typedef signed short SaHpiInt16T;
+
+/* signed 32-bit data, 4-byte alignment */
+typedef signed int SaHpiInt32T;
+
+/* signed 64-bit data, 8-byte alignment */
+typedef signed long long int SaHpiInt64T __attribute__((__aligned__(8)));
+
+/* 64-bit floating point, 8-byte alignment */
+typedef double SaHpiFloat64T __attribute__((__aligned__(8)));
+
+
+typedef SaHpiUint8T SaHpiBoolT;
+#define SAHPI_TRUE 1 /* While SAHPI_TRUE = 1, any non-zero
+ value is also considered to be True
+ and HPI Users/Implementers of this
+ specification should not test for
+ equality against SAHPI_TRUE. */
+
+#define SAHPI_FALSE 0
+
+/* Platform, O/S, or Vendor dependent */
+#define SAHPI_API
+#define SAHPI_IN
+#define SAHPI_OUT
+#define SAHPI_INOUT
+
+/*
+** Identifier for the manufacturer
+**
+** This is the IANA-assigned private enterprise number for the
+** manufacturer of the resource or FRU, or of the manufacturer
+** defining an OEM control or event type. A list of current
+** IANA-assigned private enterprise numbers may be obtained at
+**
+** http://www.iana.org/assignments/enterprise-numbers
+**
+** If a manufacturer does not currently have an assigned number, one
+** may be obtained by following the instructions located at
+**
+** http://www.iana.org/cgi-bin/enterprise.pl
+*/
+typedef SaHpiUint32T SaHpiManufacturerIdT;
+#define SAHPI_MANUFACTURER_ID_UNSPECIFIED (SaHpiManufacturerIdT)0
+
+/* Version Types */
+typedef SaHpiUint32T SaHpiVersionT;
+
+/*
+** Interface Version
+**
+** The interface version is the version of the actual interface and not the
+** version of the implementation. It is a 24 bit value where
+** the most significant 8 bits represent the compatibility level
+** (with letters represented as the corresponding numbers);
+** the next 8 bits represent the major version number; and
+** the least significant 8 bits represent the minor version number.
+*/
+#define SAHPI_INTERFACE_VERSION (SaHpiVersionT)0x020101 /* B.01.01 */
+
+/*
+** Return Codes
+**
+** SaErrorT is defined in the HPI specification. In the future a
+** common SAF types definition may be created to contain this type. At
+** that time, this typedef should be removed. Each of the return codes
+** is defined in Section 4.1 of the specification.
+*/
+typedef SaHpiInt32T SaErrorT; /* Return code */
+
+/*
+** SA_OK:
+*/
+#define SA_OK (SaErrorT)0x0000
+
+/* This value is the base for all HPI-specific error codes. */
+#define SA_HPI_ERR_BASE -1000
+
+#define SA_ERR_HPI_ERROR (SaErrorT)(SA_HPI_ERR_BASE - 1)
+#define SA_ERR_HPI_UNSUPPORTED_API (SaErrorT)(SA_HPI_ERR_BASE - 2)
+#define SA_ERR_HPI_BUSY (SaErrorT)(SA_HPI_ERR_BASE - 3)
+#define SA_ERR_HPI_INTERNAL_ERROR (SaErrorT)(SA_HPI_ERR_BASE - 4)
+#define SA_ERR_HPI_INVALID_CMD (SaErrorT)(SA_HPI_ERR_BASE - 5)
+#define SA_ERR_HPI_TIMEOUT (SaErrorT)(SA_HPI_ERR_BASE - 6)
+#define SA_ERR_HPI_OUT_OF_SPACE (SaErrorT)(SA_HPI_ERR_BASE - 7)
+#define SA_ERR_HPI_OUT_OF_MEMORY (SaErrorT)(SA_HPI_ERR_BASE - 8)
+#define SA_ERR_HPI_INVALID_PARAMS (SaErrorT)(SA_HPI_ERR_BASE - 9)
+#define SA_ERR_HPI_INVALID_DATA (SaErrorT)(SA_HPI_ERR_BASE - 10)
+#define SA_ERR_HPI_NOT_PRESENT (SaErrorT)(SA_HPI_ERR_BASE - 11)
+#define SA_ERR_HPI_NO_RESPONSE (SaErrorT)(SA_HPI_ERR_BASE - 12)
+#define SA_ERR_HPI_DUPLICATE (SaErrorT)(SA_HPI_ERR_BASE - 13)
+#define SA_ERR_HPI_INVALID_SESSION (SaErrorT)(SA_HPI_ERR_BASE - 14)
+#define SA_ERR_HPI_INVALID_DOMAIN (SaErrorT)(SA_HPI_ERR_BASE - 15)
+#define SA_ERR_HPI_INVALID_RESOURCE (SaErrorT)(SA_HPI_ERR_BASE - 16)
+#define SA_ERR_HPI_INVALID_REQUEST (SaErrorT)(SA_HPI_ERR_BASE - 17)
+#define SA_ERR_HPI_ENTITY_NOT_PRESENT (SaErrorT)(SA_HPI_ERR_BASE - 18)
+#define SA_ERR_HPI_READ_ONLY (SaErrorT)(SA_HPI_ERR_BASE - 19)
+#define SA_ERR_HPI_CAPABILITY (SaErrorT)(SA_HPI_ERR_BASE - 20)
+#define SA_ERR_HPI_UNKNOWN (SaErrorT)(SA_HPI_ERR_BASE - 21)
+
+/*
+** Domain, Session and Resource Type Definitions
+*/
+
+/* Domain ID. */
+typedef SaHpiUint32T SaHpiDomainIdT;
+
+/* The SAHPI_UNSPECIFIED_DOMAIN_ID value is used to specify the default
+** domain.
+*/
+#define SAHPI_UNSPECIFIED_DOMAIN_ID (SaHpiDomainIdT) 0xFFFFFFFF
+
+/* Session ID. */
+typedef SaHpiUint32T SaHpiSessionIdT;
+
+/* Resource identifier. */
+typedef SaHpiUint32T SaHpiResourceIdT;
+
+/* The SAHPI_UNSPECIFIED_RESOURCE_ID value is used to specify the Domain
+** Event Log and to specify that there is no resource for such things as HPI
+** User events/alarms.
+*/
+#define SAHPI_UNSPECIFIED_RESOURCE_ID (SaHpiResourceIdT) 0xFFFFFFFF
+
+/* Table Related Type Definitions */
+typedef SaHpiUint32T SaHpiEntryIdT;
+#define SAHPI_FIRST_ENTRY (SaHpiEntryIdT)0x00000000
+#define SAHPI_LAST_ENTRY (SaHpiEntryIdT)0xFFFFFFFF
+#define SAHPI_ENTRY_UNSPECIFIED SAHPI_FIRST_ENTRY
+
+/*
+** Time Related Type Definitions
+**
+** An HPI time value represents the local time as the number of nanoseconds
+** from 00:00:00, January 1, 1970, in a 64-bit signed integer. This format
+** is sufficient to represent times with nano-second resolution from the
+** year 1678 to 2262. Every API which deals with time values must define
+** the timezone used.
+**
+** It should be noted that although nano-second resolution is supported
+** in the data type, the actual resolution provided by an implementation
+** may be more limited than this.
+**
+** The value -2**63, which is 0x8000000000000000, is used to indicate
+** "unknown/unspecified time".
+**
+** Conversion to/from POSIX and other common time representations is
+** relatively straightforward. The following code framgment converts
+** between SaHpiTimeT and time_t:
+**
+** time_t tt1, tt2;
+** SaHpiTimeT saHpiTime;
+**
+** time(&tt1);
+** saHpiTime = (SaHpiTimeT) tt1 * 1000000000;
+** tt2 = saHpiTime / 1000000000;
+**
+** The following fragment converts between SaHpiTimeT and a struct timeval:
+**
+** struct timeval tv1, tv2;
+** SaHpiTimeT saHpiTime;
+**
+** gettimeofday(&tv1, NULL);
+** saHpiTime = (SaHpiTimeT) tv1.tv_sec * 1000000000 + tv1.tv_usec * 1000;
+** tv2.tv_sec = saHpiTime / 1000000000;
+** tv2.tv_usec = saHpiTime % 1000000000 / 1000;
+**
+** The following fragment converts between SaHpiTimeT and a struct timespec:
+**
+** struct timespec ts1, ts2;
+** SaHpiTimeT saHpiTime;
+**
+** clock_gettime(CLOCK_REALTIME, &ts1);
+** saHpiTime = (SaHpiTimeT) ts1.tv_sec * 1000000000 + ts1.tv_nsec;
+** ts2.tv_sec = saHpiTime / 1000000000;
+** ts2.tv_nsec = saHpiTime % 1000000000;
+**
+** Note, however, that since time_t is (effectively) universally 32 bits,
+** all of these conversions will cease to work on January 18, 2038.
+**
+** Some subsystems may need the flexibility to report either absolute or
+** relative (eg. to system boot) times. This will typically be in the
+** case of a board which may or may not, depending on the system setup,
+** have an idea of absolute time. For example, some boards may have
+** "time of day" clocks which start at zero, and never get set to the
+** time of day.
+**
+** In these cases, times which represent "current" time (in events, for
+** example) can be reported based on the clock value, whether it has been
+** set to the actual date/time, or whether it represents the elapsed time
+** since boot. If it is the time since boot, the value will be (for 27
+** years) less than 0x0C00000000000000, which is Mon May 26 16:58:48 1997.
+** If the value is greater than this, then it can be assumed to be an
+** absolute time.
+**
+** There is no practical need within the interface for expressing dates prior
+** to the publication of this specification (which is more than five years
+** after the "break point" between relative and absolute time). Thus, in all
+** instances a time value should be interpreted as "relative" times if the
+** value is less than or equal to SAHPI_TIME_MAX_RELATIVE (but not equal to
+** SAHPI_TIME_UNSPECIFIED which always means the time is not available), or
+** "absolute" times if the value is greater than SAHPI_TIME_MAX_RELATIVE.
+*/
+typedef SaHpiInt64T SaHpiTimeT; /* Time in nanoseconds */
+
+/* Unspecified or unknown time */
+#define SAHPI_TIME_UNSPECIFIED (SaHpiTimeT) 0x8000000000000000LL
+
+/* Maximum time that can be specified as relative */
+#define SAHPI_TIME_MAX_RELATIVE (SaHpiTimeT) 0x0C00000000000000LL
+typedef SaHpiInt64T SaHpiTimeoutT; /* Timeout in nanoseconds */
+
+/* Non-blocking call */
+#define SAHPI_TIMEOUT_IMMEDIATE (SaHpiTimeoutT) 0x0000000000000000LL
+
+/* Blocking call, wait indefinitely for call to complete */
+#define SAHPI_TIMEOUT_BLOCK (SaHpiTimeoutT) -1LL
+
+/*
+** Language
+**
+** This enumeration lists all of the languages that can be associated with text.
+**
+** SAHPI_LANG_UNDEF indicates that the language is unspecified or
+** unknown.
+*/
+typedef enum {
+ SAHPI_LANG_UNDEF = 0, SAHPI_LANG_AFAR, SAHPI_LANG_ABKHAZIAN,
+ SAHPI_LANG_AFRIKAANS, SAHPI_LANG_AMHARIC, SAHPI_LANG_ARABIC,
+ SAHPI_LANG_ASSAMESE, SAHPI_LANG_AYMARA, SAHPI_LANG_AZERBAIJANI,
+ SAHPI_LANG_BASHKIR, SAHPI_LANG_BYELORUSSIAN, SAHPI_LANG_BULGARIAN,
+ SAHPI_LANG_BIHARI, SAHPI_LANG_BISLAMA, SAHPI_LANG_BENGALI,
+ SAHPI_LANG_TIBETAN, SAHPI_LANG_BRETON, SAHPI_LANG_CATALAN,
+ SAHPI_LANG_CORSICAN, SAHPI_LANG_CZECH, SAHPI_LANG_WELSH,
+ SAHPI_LANG_DANISH, SAHPI_LANG_GERMAN, SAHPI_LANG_BHUTANI,
+ SAHPI_LANG_GREEK, SAHPI_LANG_ENGLISH, SAHPI_LANG_ESPERANTO,
+ SAHPI_LANG_SPANISH, SAHPI_LANG_ESTONIAN, SAHPI_LANG_BASQUE,
+ SAHPI_LANG_PERSIAN, SAHPI_LANG_FINNISH, SAHPI_LANG_FIJI,
+ SAHPI_LANG_FAEROESE, SAHPI_LANG_FRENCH, SAHPI_LANG_FRISIAN,
+ SAHPI_LANG_IRISH, SAHPI_LANG_SCOTSGAELIC, SAHPI_LANG_GALICIAN,
+ SAHPI_LANG_GUARANI, SAHPI_LANG_GUJARATI, SAHPI_LANG_HAUSA,
+ SAHPI_LANG_HINDI, SAHPI_LANG_CROATIAN, SAHPI_LANG_HUNGARIAN,
+ SAHPI_LANG_ARMENIAN, SAHPI_LANG_INTERLINGUA, SAHPI_LANG_INTERLINGUE,
+ SAHPI_LANG_INUPIAK, SAHPI_LANG_INDONESIAN, SAHPI_LANG_ICELANDIC,
+ SAHPI_LANG_ITALIAN, SAHPI_LANG_HEBREW, SAHPI_LANG_JAPANESE,
+ SAHPI_LANG_YIDDISH, SAHPI_LANG_JAVANESE, SAHPI_LANG_GEORGIAN,
+ SAHPI_LANG_KAZAKH, SAHPI_LANG_GREENLANDIC, SAHPI_LANG_CAMBODIAN,
+ SAHPI_LANG_KANNADA, SAHPI_LANG_KOREAN, SAHPI_LANG_KASHMIRI,
+ SAHPI_LANG_KURDISH, SAHPI_LANG_KIRGHIZ, SAHPI_LANG_LATIN,
+ SAHPI_LANG_LINGALA, SAHPI_LANG_LAOTHIAN, SAHPI_LANG_LITHUANIAN,
+ SAHPI_LANG_LATVIANLETTISH, SAHPI_LANG_MALAGASY, SAHPI_LANG_MAORI,
+ SAHPI_LANG_MACEDONIAN, SAHPI_LANG_MALAYALAM, SAHPI_LANG_MONGOLIAN,
+ SAHPI_LANG_MOLDAVIAN, SAHPI_LANG_MARATHI, SAHPI_LANG_MALAY,
+ SAHPI_LANG_MALTESE, SAHPI_LANG_BURMESE, SAHPI_LANG_NAURU,
+ SAHPI_LANG_NEPALI, SAHPI_LANG_DUTCH, SAHPI_LANG_NORWEGIAN,
+ SAHPI_LANG_OCCITAN, SAHPI_LANG_AFANOROMO, SAHPI_LANG_ORIYA,
+ SAHPI_LANG_PUNJABI, SAHPI_LANG_POLISH, SAHPI_LANG_PASHTOPUSHTO,
+ SAHPI_LANG_PORTUGUESE, SAHPI_LANG_QUECHUA, SAHPI_LANG_RHAETOROMANCE,
+ SAHPI_LANG_KIRUNDI, SAHPI_LANG_ROMANIAN, SAHPI_LANG_RUSSIAN,
+ SAHPI_LANG_KINYARWANDA, SAHPI_LANG_SANSKRIT, SAHPI_LANG_SINDHI,
+ SAHPI_LANG_SANGRO, SAHPI_LANG_SERBOCROATIAN, SAHPI_LANG_SINGHALESE,
+ SAHPI_LANG_SLOVAK, SAHPI_LANG_SLOVENIAN, SAHPI_LANG_SAMOAN,
+ SAHPI_LANG_SHONA, SAHPI_LANG_SOMALI, SAHPI_LANG_ALBANIAN,
+ SAHPI_LANG_SERBIAN, SAHPI_LANG_SISWATI, SAHPI_LANG_SESOTHO,
+ SAHPI_LANG_SUDANESE, SAHPI_LANG_SWEDISH, SAHPI_LANG_SWAHILI,
+ SAHPI_LANG_TAMIL, SAHPI_LANG_TELUGU, SAHPI_LANG_TAJIK,
+ SAHPI_LANG_THAI, SAHPI_LANG_TIGRINYA, SAHPI_LANG_TURKMEN,
+ SAHPI_LANG_TAGALOG, SAHPI_LANG_SETSWANA, SAHPI_LANG_TONGA,
+ SAHPI_LANG_TURKISH, SAHPI_LANG_TSONGA, SAHPI_LANG_TATAR,
+ SAHPI_LANG_TWI, SAHPI_LANG_UKRAINIAN, SAHPI_LANG_URDU,
+ SAHPI_LANG_UZBEK, SAHPI_LANG_VIETNAMESE, SAHPI_LANG_VOLAPUK,
+ SAHPI_LANG_WOLOF, SAHPI_LANG_XHOSA, SAHPI_LANG_YORUBA,
+ SAHPI_LANG_CHINESE, SAHPI_LANG_ZULU
+} SaHpiLanguageT;
+
+/*
+** Text Buffers
+**
+** These structures are used for defining the type of data in the text buffer
+** and the length of the buffer. Text buffers are used in the inventory data,
+** RDR, RPT, etc. for variable length strings of data.
+**
+** The encoding of the Data field in the SaHpiTextBufferT structure is defined
+** by the value of the DataType field in the buffer. The following table
+** describes the various encodings:
+**
+** DataType Encoding
+** -------- --------
+**
+** SAHPI_TL_TYPE_UNICODE 16-bit Unicode, least significant byte first.
+** Buffer must contain even number of bytes.
+**
+** SAHPI_TL_TYPE_BCDPLUS 8-bit ASCII, '0'-'9' or space, dash, period,
+** colon, comma, or underscore only.
+**
+** SAHPI_TL_TYPE_ASCII6 8-bit ASCII, reduced set, 0x20=0x5f only.
+**
+** SAHPI_TL_TYPE_TEXT 8-bit ASCII+Latin 1
+**
+** SAHPI_TL_TYPE_BINARY 8-bit bytes, any values legal
+**
+** Note: "ASCII+Latin 1" is derived from the first 256 characters of
+** Unicode 2.0. The first 256 codes of Unicode follow ISO 646 (ASCII)
+** and ISO 8859/1 (Latin 1). The Unicode "C0 Controls and Basic Latin"
+** set defines the first 128 8-bit characters (00h-7Fh) and the
+** "C1 Controls and Latin 1 Supplement" defines the second 128 (80h-FFh).
+**
+** Note: The SAHPI_TL_TYPE_BCDPLUS and SAHPI_TL_TYPE_ASCII6 encodings
+** use normal ASCII character encodings, but restrict the allowed
+** characters to a subset of the entire ASCII character set. These
+** encodings are used when the target device contains restrictions
+** on which characters it can store or display. SAHPI_TL_TYPE_BCDPLUS
+** data may be stored externally as 4-bit values, and
+** SAHPI_TL_TYPE_ASCII6 may be stored externally as 6-bit values.
+** But, regardless of how the data is stored externally, it is
+** encoded as 8-bit ASCII in the SaHpiTextBufferT structure passed
+** across the HPI.
+*/
+
+#define SAHPI_MAX_TEXT_BUFFER_LENGTH 255
+
+typedef enum {
+ SAHPI_TL_TYPE_UNICODE = 0, /* 2-byte UNICODE characters; DataLength
+ must be even. */
+ SAHPI_TL_TYPE_BCDPLUS, /* String of ASCII characters, '0'-'9', space,
+ dash, period, colon, comma or underscore
+ ONLY */
+ SAHPI_TL_TYPE_ASCII6, /* Reduced ASCII character set: 0x20-0x5F
+ ONLY */
+ SAHPI_TL_TYPE_TEXT, /* ASCII+Latin 1 */
+ SAHPI_TL_TYPE_BINARY /* Binary data, any values legal */
+} SaHpiTextTypeT;
+
+typedef struct {
+ SaHpiTextTypeT DataType;
+ SaHpiLanguageT Language; /* Language the text is in. */
+ SaHpiUint8T DataLength; /* Bytes used in Data buffer */
+ SaHpiUint8T Data[SAHPI_MAX_TEXT_BUFFER_LENGTH]; /* Data buffer */
+} SaHpiTextBufferT;
+
+/*
+** Instrument Id
+**
+** The following data type is used for all management instrument identifiers -
+** sensor numbers, control numbers, watchdog timer numbers, etc.
+**
+*/
+
+typedef SaHpiUint32T SaHpiInstrumentIdT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Entities **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+/*
+** Entity Types
+**
+** Entities are used to associate specific hardware components with sensors,
+** controls, watchdogs, or resources. Entities are defined with an entity
+** type enumeration, and an entity location number (to identify
+** the physical location of a particular type of entity).
+**
+** Entities are uniquely identified in a system with an ordered series of
+** Entity Type / Entity Location pairs called an "Entity Path". Each subsequent
+** Entity Type/Entity Location in the path is the next higher "containing"
+** entity. The "root" of the Entity Path (the outermost level of containment)
+** is designated with an Entity Type of SAHPI_ENT_ROOT if the entire Entity Path
+** is fewer than SAHPI_MAX_ENTITY_PATH entries in length.
+**
+** Enumerated Entity Types include those types enumerated by the IPMI Consortium
+** for IPMI-managed entities, as well as additional types defined by the
+** HPI specification. Room is left in the enumeration for the inclusion of
+** Entity Types taken from other lists, if needed in the future.
+*/
+/* Base values for entity types from various sources. */
+#define SAHPI_ENT_IPMI_GROUP 0
+#define SAHPI_ENT_SAFHPI_GROUP 0x10000
+#define SAHPI_ENT_ROOT_VALUE 0xFFFF
+typedef enum
+{
+ SAHPI_ENT_UNSPECIFIED = SAHPI_ENT_IPMI_GROUP,
+ SAHPI_ENT_OTHER,
+ SAHPI_ENT_UNKNOWN,
+ SAHPI_ENT_PROCESSOR,
+ SAHPI_ENT_DISK_BAY, /* Disk or disk bay */
+ SAHPI_ENT_PERIPHERAL_BAY,
+ SAHPI_ENT_SYS_MGMNT_MODULE, /* System management module */
+ SAHPI_ENT_SYSTEM_BOARD, /* Main system board, may also be
+ processor board and/or internal
+ expansion board */
+ SAHPI_ENT_MEMORY_MODULE, /* Board holding memory devices */
+ SAHPI_ENT_PROCESSOR_MODULE, /* Holds processors, use this
+ designation when processors are not
+ mounted on system board */
+ SAHPI_ENT_POWER_SUPPLY, /* Main power supply (supplies) for the
+ system */
+ SAHPI_ENT_ADD_IN_CARD,
+ SAHPI_ENT_FRONT_PANEL_BOARD, /* Control panel */
+ SAHPI_ENT_BACK_PANEL_BOARD,
+ SAHPI_ENT_POWER_SYSTEM_BOARD,
+ SAHPI_ENT_DRIVE_BACKPLANE,
+ SAHPI_ENT_SYS_EXPANSION_BOARD, /* System internal expansion board
+ (contains expansion slots). */
+ SAHPI_ENT_OTHER_SYSTEM_BOARD, /* Part of board set */
+ SAHPI_ENT_PROCESSOR_BOARD, /* Holds 1 or more processors. Includes
+ boards that hold SECC modules) */
+ SAHPI_ENT_POWER_UNIT, /* Power unit / power domain (typically
+ used as a pre-defined logical entity
+ for grouping power supplies)*/
+ SAHPI_ENT_POWER_MODULE, /* Power module / DC-to-DC converter.
+ Use this value for internal
+ converters. Note: You should use
+ entity ID (power supply) for the
+ main power supply even if the main
+ supply is a DC-to-DC converter */
+ SAHPI_ENT_POWER_MGMNT, /* Power management/distribution
+ board */
+ SAHPI_ENT_CHASSIS_BACK_PANEL_BOARD,
+ SAHPI_ENT_SYSTEM_CHASSIS,
+ SAHPI_ENT_SUB_CHASSIS,
+ SAHPI_ENT_OTHER_CHASSIS_BOARD,
+ SAHPI_ENT_DISK_DRIVE_BAY,
+ SAHPI_ENT_PERIPHERAL_BAY_2,
+ SAHPI_ENT_DEVICE_BAY,
+ SAHPI_ENT_COOLING_DEVICE, /* Fan/cooling device */
+ SAHPI_ENT_COOLING_UNIT, /* Can be used as a pre-defined logical
+ entity for grouping fans or other
+ cooling devices. */
+ SAHPI_ENT_INTERCONNECT, /* Cable / interconnect */
+ SAHPI_ENT_MEMORY_DEVICE, /* This Entity ID should be used for
+ replaceable memory devices, e.g.
+ DIMM/SIMM. It is recommended that
+ Entity IDs not be used for
+ individual non-replaceable memory
+ devices. Rather, monitoring and
+ error reporting should be associated
+ with the FRU [e.g. memory card]
+ holding the memory. */
+ SAHPI_ENT_SYS_MGMNT_SOFTWARE, /* System Management Software */
+ SAHPI_ENT_BIOS,
+ SAHPI_ENT_OPERATING_SYSTEM,
+ SAHPI_ENT_SYSTEM_BUS,
+ SAHPI_ENT_GROUP, /* This is a logical entity for use with
+ Entity Association records. It is
+ provided to allow a sensor data
+ record to point to an entity-
+ association record when there is no
+ appropriate pre-defined logical
+ entity for the entity grouping.
+ This Entity should not be used as a
+ physical entity. */
+ SAHPI_ENT_REMOTE, /* Out of band management communication
+ device */
+ SAHPI_ENT_EXTERNAL_ENVIRONMENT,
+ SAHPI_ENT_BATTERY,
+ SAHPI_ENT_CHASSIS_SPECIFIC = SAHPI_ENT_IPMI_GROUP + 0x90,
+ SAHPI_ENT_BOARD_SET_SPECIFIC = SAHPI_ENT_IPMI_GROUP + 0xB0,
+ SAHPI_ENT_OEM_SYSINT_SPECIFIC = SAHPI_ENT_IPMI_GROUP + 0xD0,
+ SAHPI_ENT_ROOT = SAHPI_ENT_ROOT_VALUE,
+ SAHPI_ENT_RACK = SAHPI_ENT_SAFHPI_GROUP,
+ SAHPI_ENT_SUBRACK,
+ SAHPI_ENT_COMPACTPCI_CHASSIS,
+ SAHPI_ENT_ADVANCEDTCA_CHASSIS,
+ SAHPI_ENT_RACK_MOUNTED_SERVER,
+ SAHPI_ENT_SYSTEM_BLADE,
+ SAHPI_ENT_SWITCH, /* Network switch, such as a
+ rack-mounted ethernet or fabric
+ switch. */
+ SAHPI_ENT_SWITCH_BLADE, /* Network switch, as above, but in
+ a bladed system. */
+ SAHPI_ENT_SBC_BLADE,
+ SAHPI_ENT_IO_BLADE,
+ SAHPI_ENT_DISK_BLADE,
+ SAHPI_ENT_DISK_DRIVE,
+ SAHPI_ENT_FAN,
+ SAHPI_ENT_POWER_DISTRIBUTION_UNIT,
+ SAHPI_ENT_SPEC_PROC_BLADE, /* Special Processing Blade,
+ including DSP */
+ SAHPI_ENT_IO_SUBBOARD, /* I/O Sub-Board, including
+ PMC I/O board */
+ SAHPI_ENT_SBC_SUBBOARD, /* SBC Sub-Board, including PMC
+ SBC board */
+ SAHPI_ENT_ALARM_MANAGER, /* Chassis alarm manager board */
+ SAHPI_ENT_SHELF_MANAGER, /* Blade-based shelf manager */
+ SAHPI_ENT_DISPLAY_PANEL, /* Display panel, such as an
+ alarm display panel. */
+ SAHPI_ENT_SUBBOARD_CARRIER_BLADE, /* Includes PMC Carrier Blade --
+ Use only if "carrier" is only
+ function of blade. Else use
+ primary function (SBC_BLADE,
+ DSP_BLADE, etc.). */
+ SAHPI_ENT_PHYSICAL_SLOT /* Indicates the physical slot into
+ which a blade is inserted. */
+} SaHpiEntityTypeT;
+
+typedef SaHpiUint32T SaHpiEntityLocationT;
+
+typedef struct {
+ SaHpiEntityTypeT EntityType;
+ SaHpiEntityLocationT EntityLocation;
+} SaHpiEntityT;
+
+
+#define SAHPI_MAX_ENTITY_PATH 16
+
+typedef struct {
+ SaHpiEntityT Entry[SAHPI_MAX_ENTITY_PATH];
+} SaHpiEntityPathT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Events, part 1 **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+/*
+** Category
+**
+** Sensor events contain an event category and event state. Depending on the
+** event category, the event states take on different meanings for events
+** generated by specific sensors.
+**
+** It is recommended that implementations map their sensor specific
+** event categories into the set of categories listed here. When such a mapping
+** is impractical or impossible, the SAHPI_EC_SENSOR_SPECIFIC category should
+** be used.
+**
+** The SAHPI_EC_GENERIC category can be used for discrete sensors which have
+** state meanings other than those identified with other event categories.
+*/
+typedef SaHpiUint8T SaHpiEventCategoryT;
+
+#define SAHPI_EC_UNSPECIFIED (SaHpiEventCategoryT)0x00 /* Unspecified */
+#define SAHPI_EC_THRESHOLD (SaHpiEventCategoryT)0x01 /* Threshold
+ events */
+#define SAHPI_EC_USAGE (SaHpiEventCategoryT)0x02 /* Usage state
+ events */
+#define SAHPI_EC_STATE (SaHpiEventCategoryT)0x03 /* Generic state
+ events */
+#define SAHPI_EC_PRED_FAIL (SaHpiEventCategoryT)0x04 /* Predictive fail
+ events */
+#define SAHPI_EC_LIMIT (SaHpiEventCategoryT)0x05 /* Limit events */
+#define SAHPI_EC_PERFORMANCE (SaHpiEventCategoryT)0x06 /* Performance
+ events */
+#define SAHPI_EC_SEVERITY (SaHpiEventCategoryT)0x07 /* Severity
+ indicating
+ events */
+#define SAHPI_EC_PRESENCE (SaHpiEventCategoryT)0x08 /* Device presence
+ events */
+#define SAHPI_EC_ENABLE (SaHpiEventCategoryT)0x09 /* Device enabled
+ events */
+#define SAHPI_EC_AVAILABILITY (SaHpiEventCategoryT)0x0A /* Availability
+ state events */
+#define SAHPI_EC_REDUNDANCY (SaHpiEventCategoryT)0x0B /* Redundancy
+ state events */
+#define SAHPI_EC_SENSOR_SPECIFIC (SaHpiEventCategoryT)0x7E /* Sensor-
+ specific events */
+#define SAHPI_EC_GENERIC (SaHpiEventCategoryT)0x7F /* OEM defined
+ events */
+
+/*
+** Event States
+**
+** The following event states are specified relative to the categories listed
+** above. The event types are only valid for their given category. Each set of
+** events is labeled as to which category it belongs to.
+** Each event will have only one event state associated with it. When retrieving
+** the event status or event enabled status a bit mask of all applicable event
+** states is used. Similarly, when setting the event enabled status a bit mask
+** of all applicable event states is used.
+*/
+typedef SaHpiUint16T SaHpiEventStateT;
+
+/*
+** SaHpiEventCategoryT == <any>
+*/
+#define SAHPI_ES_UNSPECIFIED (SaHpiEventStateT)0x0000
+
+/*
+** SaHpiEventCategoryT == SAHPI_EC_THRESHOLD
+** When using these event states, the event state should match
+** the event severity (for example SAHPI_ES_LOWER_MINOR should have an
+** event severity of SAHPI_MINOR).
+*/
+#define SAHPI_ES_LOWER_MINOR (SaHpiEventStateT)0x0001
+#define SAHPI_ES_LOWER_MAJOR (SaHpiEventStateT)0x0002
+#define SAHPI_ES_LOWER_CRIT (SaHpiEventStateT)0x0004
+#define SAHPI_ES_UPPER_MINOR (SaHpiEventStateT)0x0008
+#define SAHPI_ES_UPPER_MAJOR (SaHpiEventStateT)0x0010
+#define SAHPI_ES_UPPER_CRIT (SaHpiEventStateT)0x0020
+
+/* SaHpiEventCategoryT == SAHPI_EC_USAGE */
+#define SAHPI_ES_IDLE (SaHpiEventStateT)0x0001
+#define SAHPI_ES_ACTIVE (SaHpiEventStateT)0x0002
+#define SAHPI_ES_BUSY (SaHpiEventStateT)0x0004
+
+/* SaHpiEventCategoryT == SAHPI_EC_STATE */
+#define SAHPI_ES_STATE_DEASSERTED (SaHpiEventStateT)0x0001
+#define SAHPI_ES_STATE_ASSERTED (SaHpiEventStateT)0x0002
+
+/* SaHpiEventCategoryT == SAHPI_EC_PRED_FAIL */
+#define SAHPI_ES_PRED_FAILURE_DEASSERT (SaHpiEventStateT)0x0001
+#define SAHPI_ES_PRED_FAILURE_ASSERT (SaHpiEventStateT)0x0002
+
+/* SaHpiEventCategoryT == SAHPI_EC_LIMIT */
+#define SAHPI_ES_LIMIT_NOT_EXCEEDED (SaHpiEventStateT)0x0001
+#define SAHPI_ES_LIMIT_EXCEEDED (SaHpiEventStateT)0x0002
+
+/* SaHpiEventCategoryT == SAHPI_EC_PERFORMANCE */
+#define SAHPI_ES_PERFORMANCE_MET (SaHpiEventStateT)0x0001
+#define SAHPI_ES_PERFORMANCE_LAGS (SaHpiEventStateT)0x0002
+
+/*
+** SaHpiEventCategoryT == SAHPI_EC_SEVERITY
+** When using these event states, the event state should match
+** the event severity
+*/
+#define SAHPI_ES_OK (SaHpiEventStateT)0x0001
+#define SAHPI_ES_MINOR_FROM_OK (SaHpiEventStateT)0x0002
+#define SAHPI_ES_MAJOR_FROM_LESS (SaHpiEventStateT)0x0004
+#define SAHPI_ES_CRITICAL_FROM_LESS (SaHpiEventStateT)0x0008
+#define SAHPI_ES_MINOR_FROM_MORE (SaHpiEventStateT)0x0010
+#define SAHPI_ES_MAJOR_FROM_CRITICAL (SaHpiEventStateT)0x0020
+#define SAHPI_ES_CRITICAL (SaHpiEventStateT)0x0040
+#define SAHPI_ES_MONITOR (SaHpiEventStateT)0x0080
+#define SAHPI_ES_INFORMATIONAL (SaHpiEventStateT)0x0100
+
+/* SaHpiEventCategoryT == SAHPI_EC_PRESENCE */
+#define SAHPI_ES_ABSENT (SaHpiEventStateT)0x0001
+#define SAHPI_ES_PRESENT (SaHpiEventStateT)0x0002
+
+/* SaHpiEventCategoryT == SAHPI_EC_ENABLE */
+#define SAHPI_ES_DISABLED (SaHpiEventStateT)0x0001
+#define SAHPI_ES_ENABLED (SaHpiEventStateT)0x0002
+
+/* SaHpiEventCategoryT == SAHPI_EC_AVAILABILITY */
+#define SAHPI_ES_RUNNING (SaHpiEventStateT)0x0001
+#define SAHPI_ES_TEST (SaHpiEventStateT)0x0002
+#define SAHPI_ES_POWER_OFF (SaHpiEventStateT)0x0004
+#define SAHPI_ES_ON_LINE (SaHpiEventStateT)0x0008
+#define SAHPI_ES_OFF_LINE (SaHpiEventStateT)0x0010
+#define SAHPI_ES_OFF_DUTY (SaHpiEventStateT)0x0020
+#define SAHPI_ES_DEGRADED (SaHpiEventStateT)0x0040
+#define SAHPI_ES_POWER_SAVE (SaHpiEventStateT)0x0080
+#define SAHPI_ES_INSTALL_ERROR (SaHpiEventStateT)0x0100
+
+/* SaHpiEventCategoryT == SAHPI_EC_REDUNDANCY */
+#define SAHPI_ES_FULLY_REDUNDANT (SaHpiEventStateT)0x0001
+#define SAHPI_ES_REDUNDANCY_LOST (SaHpiEventStateT)0x0002
+#define SAHPI_ES_REDUNDANCY_DEGRADED (SaHpiEventStateT)0x0004
+#define SAHPI_ES_REDUNDANCY_LOST_SUFFICIENT_RESOURCES \
+ (SaHpiEventStateT)0x0008
+#define SAHPI_ES_NON_REDUNDANT_SUFFICIENT_RESOURCES \
+ (SaHpiEventStateT)0x0010
+#define SAHPI_ES_NON_REDUNDANT_INSUFFICIENT_RESOURCES \
+ (SaHpiEventStateT)0x0020
+#define SAHPI_ES_REDUNDANCY_DEGRADED_FROM_FULL (SaHpiEventStateT)0x0040
+#define SAHPI_ES_REDUNDANCY_DEGRADED_FROM_NON (SaHpiEventStateT)0x0080
+
+/*
+** SaHpiEventCategoryT == SAHPI_EC_GENERIC || SAHPI_EC_SENSOR_SPECIFIC
+** These event states are implementation-specific.
+*/
+#define SAHPI_ES_STATE_00 (SaHpiEventStateT)0x0001
+#define SAHPI_ES_STATE_01 (SaHpiEventStateT)0x0002
+#define SAHPI_ES_STATE_02 (SaHpiEventStateT)0x0004
+#define SAHPI_ES_STATE_03 (SaHpiEventStateT)0x0008
+#define SAHPI_ES_STATE_04 (SaHpiEventStateT)0x0010
+#define SAHPI_ES_STATE_05 (SaHpiEventStateT)0x0020
+#define SAHPI_ES_STATE_06 (SaHpiEventStateT)0x0040
+#define SAHPI_ES_STATE_07 (SaHpiEventStateT)0x0080
+#define SAHPI_ES_STATE_08 (SaHpiEventStateT)0x0100
+#define SAHPI_ES_STATE_09 (SaHpiEventStateT)0x0200
+#define SAHPI_ES_STATE_10 (SaHpiEventStateT)0x0400
+#define SAHPI_ES_STATE_11 (SaHpiEventStateT)0x0800
+#define SAHPI_ES_STATE_12 (SaHpiEventStateT)0x1000
+#define SAHPI_ES_STATE_13 (SaHpiEventStateT)0x2000
+#define SAHPI_ES_STATE_14 (SaHpiEventStateT)0x4000
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Sensors **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* Sensor Number */
+typedef SaHpiInstrumentIdT SaHpiSensorNumT;
+/* The following specifies the named range for standard sensor numbers. */
+#define SAHPI_STANDARD_SENSOR_MIN (SaHpiSensorNumT)0x00000100
+#define SAHPI_STANDARD_SENSOR_MAX (SaHpiSensorNumT)0x000001FF
+
+/* Type of Sensor */
+typedef enum {
+ SAHPI_TEMPERATURE = 0x01,
+ SAHPI_VOLTAGE,
+ SAHPI_CURRENT,
+ SAHPI_FAN,
+ SAHPI_PHYSICAL_SECURITY,
+ SAHPI_PLATFORM_VIOLATION,
+ SAHPI_PROCESSOR,
+ SAHPI_POWER_SUPPLY,
+ SAHPI_POWER_UNIT,
+ SAHPI_COOLING_DEVICE,
+ SAHPI_OTHER_UNITS_BASED_SENSOR,
+ SAHPI_MEMORY,
+ SAHPI_DRIVE_SLOT,
+ SAHPI_POST_MEMORY_RESIZE,
+ SAHPI_SYSTEM_FW_PROGRESS,
+ SAHPI_EVENT_LOGGING_DISABLED,
+ SAHPI_RESERVED1,
+ SAHPI_SYSTEM_EVENT,
+ SAHPI_CRITICAL_INTERRUPT,
+ SAHPI_BUTTON,
+ SAHPI_MODULE_BOARD,
+ SAHPI_MICROCONTROLLER_COPROCESSOR,
+ SAHPI_ADDIN_CARD,
+ SAHPI_CHASSIS,
+ SAHPI_CHIP_SET,
+ SAHPI_OTHER_FRU,
+ SAHPI_CABLE_INTERCONNECT,
+ SAHPI_TERMINATOR,
+ SAHPI_SYSTEM_BOOT_INITIATED,
+ SAHPI_BOOT_ERROR,
+ SAHPI_OS_BOOT,
+ SAHPI_OS_CRITICAL_STOP,
+ SAHPI_SLOT_CONNECTOR,
+ SAHPI_SYSTEM_ACPI_POWER_STATE,
+ SAHPI_RESERVED2,
+ SAHPI_PLATFORM_ALERT,
+ SAHPI_ENTITY_PRESENCE,
+ SAHPI_MONITOR_ASIC_IC,
+ SAHPI_LAN,
+ SAHPI_MANAGEMENT_SUBSYSTEM_HEALTH,
+ SAHPI_BATTERY,
+ SAHPI_OPERATIONAL = 0xA0,
+ SAHPI_OEM_SENSOR=0xC0
+} SaHpiSensorTypeT;
+
+/*
+** Sensor Reading Type
+**
+** These definitions list the available data types that can be
+** used for sensor readings.
+**
+*/
+
+#define SAHPI_SENSOR_BUFFER_LENGTH 32
+
+typedef enum {
+ SAHPI_SENSOR_READING_TYPE_INT64,
+ SAHPI_SENSOR_READING_TYPE_UINT64,
+ SAHPI_SENSOR_READING_TYPE_FLOAT64,
+ SAHPI_SENSOR_READING_TYPE_BUFFER /* 32 byte array. The format of
+ the buffer is implementation-
+ specific. Sensors that use
+ this reading type may not have
+ thresholds that are settable
+ or readable. */
+} SaHpiSensorReadingTypeT;
+
+typedef union {
+ SaHpiInt64T SensorInt64;
+ SaHpiUint64T SensorUint64;
+ SaHpiFloat64T SensorFloat64;
+ SaHpiUint8T SensorBuffer[SAHPI_SENSOR_BUFFER_LENGTH];
+} SaHpiSensorReadingUnionT;
+
+/*
+** Sensor Reading
+**
+** The sensor reading data structure is returned from a call to get
+** sensor reading. The structure is also used when setting and getting sensor
+** threshold values and reporting sensor ranges.
+**
+** IsSupported is set when a sensor reading/threshold value is available.
+** Otherwise, if no reading or threshold is supported, this flag is set to
+** False.
+**
+*/
+
+typedef struct {
+ SaHpiBoolT IsSupported;
+ SaHpiSensorReadingTypeT Type;
+ SaHpiSensorReadingUnionT Value;
+} SaHpiSensorReadingT;
+
+
+/* Sensor Event Mask Actions - used with saHpiSensorEventMasksSet() */
+
+typedef enum {
+ SAHPI_SENS_ADD_EVENTS_TO_MASKS,
+ SAHPI_SENS_REMOVE_EVENTS_FROM_MASKS
+} SaHpiSensorEventMaskActionT;
+
+/* Value to use for AssertEvents or DeassertEvents parameter
+ in saHpiSensorEventMasksSet() to set or clear all supported
+ event states for a sensor in the mask */
+
+#define SAHPI_ALL_EVENT_STATES (SaHpiEventStateT)0xFFFF
+
+/*
+** Threshold Values
+** This structure encompasses all of the thresholds that can be set.
+** These are set and read with the same units as sensors report in
+** saHpiSensorReadingGet(). When hysteresis is not constant over the
+** range of sensor values, it is calculated at the nominal sensor reading,
+** as given in the Range field of the sensor RDR.
+**
+** Thresholds are required to be set in-order (such that the setting for
+** UpCritical is greater than or equal to the setting for UpMajor, etc.).*/
+
+typedef struct {
+ SaHpiSensorReadingT LowCritical; /* Lower Critical Threshold */
+ SaHpiSensorReadingT LowMajor; /* Lower Major Threshold */
+ SaHpiSensorReadingT LowMinor; /* Lower Minor Threshold */
+ SaHpiSensorReadingT UpCritical; /* Upper critical Threshold */
+ SaHpiSensorReadingT UpMajor; /* Upper major Threshold */
+ SaHpiSensorReadingT UpMinor; /* Upper minor Threshold */
+ SaHpiSensorReadingT PosThdHysteresis; /* Positive Threshold Hysteresis */
+ SaHpiSensorReadingT NegThdHysteresis; /* Negative Threshold Hysteresis */
+}SaHpiSensorThresholdsT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Sensor Resource Data Records **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** Sensor Range
+** Sensor range values can include minimum, maximum, normal minimum, normal
+** maximum, and nominal values.
+**
+** Sensor thresholds cannot be set outside of the range defined by SAHPI_SRF_MIN
+** through SAHPI_SRF_MAX, if these limits are present (as indicated by the
+** SaHpiSensorRangeFlagsT). If the MIN limit is not present, no lower bound
+** will be enforced on sensor thresholds. If the MAX limit is not present, no
+** upper bound will be enforced on sensor thresholds.
+*/
+typedef SaHpiUint8T SaHpiSensorRangeFlagsT;
+#define SAHPI_SRF_MIN (SaHpiSensorRangeFlagsT)0x10
+#define SAHPI_SRF_MAX (SaHpiSensorRangeFlagsT)0x08
+#define SAHPI_SRF_NORMAL_MIN (SaHpiSensorRangeFlagsT)0x04
+#define SAHPI_SRF_NORMAL_MAX (SaHpiSensorRangeFlagsT)0x02
+#define SAHPI_SRF_NOMINAL (SaHpiSensorRangeFlagsT)0x01
+
+typedef struct {
+ SaHpiSensorRangeFlagsT Flags;
+ SaHpiSensorReadingT Max;
+ SaHpiSensorReadingT Min;
+ SaHpiSensorReadingT Nominal;
+ SaHpiSensorReadingT NormalMax;
+ SaHpiSensorReadingT NormalMin;
+} SaHpiSensorRangeT;
+
+/*
+** Sensor Units
+** This is a list of all the sensor units supported by HPI.
+*/
+typedef enum {
+ SAHPI_SU_UNSPECIFIED = 0, SAHPI_SU_DEGREES_C, SAHPI_SU_DEGREES_F,
+ SAHPI_SU_DEGREES_K, SAHPI_SU_VOLTS, SAHPI_SU_AMPS,
+ SAHPI_SU_WATTS, SAHPI_SU_JOULES, SAHPI_SU_COULOMBS,
+ SAHPI_SU_VA, SAHPI_SU_NITS, SAHPI_SU_LUMEN,
+ SAHPI_SU_LUX, SAHPI_SU_CANDELA, SAHPI_SU_KPA,
+ SAHPI_SU_PSI, SAHPI_SU_NEWTON, SAHPI_SU_CFM,
+ SAHPI_SU_RPM, SAHPI_SU_HZ, SAHPI_SU_MICROSECOND,
+ SAHPI_SU_MILLISECOND, SAHPI_SU_SECOND, SAHPI_SU_MINUTE,
+ SAHPI_SU_HOUR, SAHPI_SU_DAY, SAHPI_SU_WEEK,
+ SAHPI_SU_MIL, SAHPI_SU_INCHES, SAHPI_SU_FEET,
+ SAHPI_SU_CU_IN, SAHPI_SU_CU_FEET, SAHPI_SU_MM,
+ SAHPI_SU_CM, SAHPI_SU_M, SAHPI_SU_CU_CM,
+ SAHPI_SU_CU_M, SAHPI_SU_LITERS, SAHPI_SU_FLUID_OUNCE,
+ SAHPI_SU_RADIANS, SAHPI_SU_STERADIANS, SAHPI_SU_REVOLUTIONS,
+ SAHPI_SU_CYCLES, SAHPI_SU_GRAVITIES, SAHPI_SU_OUNCE,
+ SAHPI_SU_POUND, SAHPI_SU_FT_LB, SAHPI_SU_OZ_IN,
+ SAHPI_SU_GAUSS, SAHPI_SU_GILBERTS, SAHPI_SU_HENRY,
+ SAHPI_SU_MILLIHENRY, SAHPI_SU_FARAD, SAHPI_SU_MICROFARAD,
+ SAHPI_SU_OHMS, SAHPI_SU_SIEMENS, SAHPI_SU_MOLE,
+ SAHPI_SU_BECQUEREL, SAHPI_SU_PPM, SAHPI_SU_RESERVED,
+ SAHPI_SU_DECIBELS, SAHPI_SU_DBA, SAHPI_SU_DBC,
+ SAHPI_SU_GRAY, SAHPI_SU_SIEVERT, SAHPI_SU_COLOR_TEMP_DEG_K,
+ SAHPI_SU_BIT, SAHPI_SU_KILOBIT, SAHPI_SU_MEGABIT,
+ SAHPI_SU_GIGABIT, SAHPI_SU_BYTE, SAHPI_SU_KILOBYTE,
+ SAHPI_SU_MEGABYTE, SAHPI_SU_GIGABYTE, SAHPI_SU_WORD,
+ SAHPI_SU_DWORD, SAHPI_SU_QWORD, SAHPI_SU_LINE,
+ SAHPI_SU_HIT, SAHPI_SU_MISS, SAHPI_SU_RETRY,
+ SAHPI_SU_RESET, SAHPI_SU_OVERRUN, SAHPI_SU_UNDERRUN,
+ SAHPI_SU_COLLISION, SAHPI_SU_PACKETS, SAHPI_SU_MESSAGES,
+ SAHPI_SU_CHARACTERS, SAHPI_SU_ERRORS, SAHPI_SU_CORRECTABLE_ERRORS,
+ SAHPI_SU_UNCORRECTABLE_ERRORS
+} SaHpiSensorUnitsT;
+
+/*
+** Modifier Unit Use
+** This type defines how the modifier unit is used. For example: base unit ==
+** meter, modifier unit == seconds, and modifier unit use ==
+** SAHPI_SMUU_BASIC_OVER_MODIFIER. The resulting unit would be meters per
+** second.
+*/
+typedef enum {
+ SAHPI_SMUU_NONE = 0,
+ SAHPI_SMUU_BASIC_OVER_MODIFIER, /* Basic Unit / Modifier Unit */
+ SAHPI_SMUU_BASIC_TIMES_MODIFIER /* Basic Unit * Modifier Unit */
+} SaHpiSensorModUnitUseT;
+
+/*
+** Data Format
+** When IsSupported is False, the sensor does not support data readings
+** (it only supports event states). A False setting for this flag
+** indicates that the rest of the structure is not meaningful.
+**
+** This structure encapsulates all of the various types that make up the
+** definition of sensor data. For reading type of
+** SAHPI_SENSOR_READING_TYPE_BUFFER, the rest of the structure
+** (beyond ReadingType) is not meaningful.
+**
+** The Accuracy Factor is expressed as a floating point percentage
+** (e.g. 0.05 = 5%) and represents statistically how close the measured
+** reading is to the actual value. It is an interpreted value that
+** figures in all sensor accuracies, resolutions, and tolerances.
+*/
+
+typedef struct {
+ SaHpiBoolT IsSupported; /* Indicates if sensor data
+ readings are supported.*/
+ SaHpiSensorReadingTypeT ReadingType; /* Type of value for sensor
+ reading. */
+ SaHpiSensorUnitsT BaseUnits; /* Base units (meters, etc.) */
+ SaHpiSensorUnitsT ModifierUnits; /* Modifier unit (second, etc.)*/
+ SaHpiSensorModUnitUseT ModifierUse; /* Modifier use(m/sec, etc.) */
+ SaHpiBoolT Percentage; /* Is value a percentage */
+ SaHpiSensorRangeT Range; /* Valid range of sensor */
+ SaHpiFloat64T AccuracyFactor; /* Accuracy */
+} SaHpiSensorDataFormatT;
+
+/*
+** Threshold Support
+**
+** These types define what threshold values are readable and writable.
+** Thresholds are read/written in the same ReadingType as is used for sensor
+** readings.
+*/
+typedef SaHpiUint8T SaHpiSensorThdMaskT;
+#define SAHPI_STM_LOW_MINOR (SaHpiSensorThdMaskT)0x01
+#define SAHPI_STM_LOW_MAJOR (SaHpiSensorThdMaskT)0x02
+#define SAHPI_STM_LOW_CRIT (SaHpiSensorThdMaskT)0x04
+#define SAHPI_STM_UP_MINOR (SaHpiSensorThdMaskT)0x08
+#define SAHPI_STM_UP_MAJOR (SaHpiSensorThdMaskT)0x10
+#define SAHPI_STM_UP_CRIT (SaHpiSensorThdMaskT)0x20
+#define SAHPI_STM_UP_HYSTERESIS (SaHpiSensorThdMaskT)0x40
+#define SAHPI_STM_LOW_HYSTERESIS (SaHpiSensorThdMaskT)0x80
+
+typedef struct {
+ SaHpiBoolT IsAccessible; /* True if the sensor
+ supports readable or writable
+ thresholds. If False,
+ rest of structure is not
+ meaningful. Sensors that have the
+ IsAccessible flag set must also
+ support the threshold event category
+ A sensor of reading type SAHPI_
+ SENSOR_READING_TYPE_BUFFER cannot
+ have accessible thresholds.*/
+ SaHpiSensorThdMaskT ReadThold; /* Readable thresholds */
+ SaHpiSensorThdMaskT WriteThold; /* Writable thresholds */
+ SaHpiBoolT Nonlinear; /* If this flag is set, hysteresis
+ values are calculated at the nominal
+ sensor value. */
+} SaHpiSensorThdDefnT;
+
+/*
+** Event Control
+**
+** This type defines how sensor event messages can be controlled (can be turned
+** off and on for each type of event, etc.).
+*/
+typedef enum {
+ SAHPI_SEC_PER_EVENT = 0, /* Event message control per event,
+ or by entire sensor; sensor event enable
+ status can be changed, and assert/deassert
+ masks can be changed */
+ SAHPI_SEC_READ_ONLY_MASKS, /* Control for entire sensor only; sensor
+ event enable status can be changed, but
+ assert/deassert masks cannot be changed */
+ SAHPI_SEC_READ_ONLY /* Event control not supported; sensor event
+ enable status cannot be changed and
+ assert/deassert masks cannot be changed */
+} SaHpiSensorEventCtrlT;
+
+/*
+** Record
+**
+** This is the sensor resource data record which describes all of the static
+** data associated with a sensor.
+*/
+typedef struct {
+ SaHpiSensorNumT Num; /* Sensor Number/Index */
+ SaHpiSensorTypeT Type; /* General Sensor Type */
+ SaHpiEventCategoryT Category; /* Event category */
+ SaHpiBoolT EnableCtrl; /* True if HPI User can enable
+ or disable sensor via
+ saHpiSensorEnableSet() */
+ SaHpiSensorEventCtrlT EventCtrl; /* How events can be controlled */
+ SaHpiEventStateT Events; /* Bit mask of event states
+ supported */
+ SaHpiSensorDataFormatT DataFormat; /* Format of the data */
+ SaHpiSensorThdDefnT ThresholdDefn; /* Threshold Definition */
+ SaHpiUint32T Oem; /* Reserved for OEM use */
+} SaHpiSensorRecT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Aggregate Status **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* These are the default sensor numbers for aggregate status. */
+#define SAHPI_DEFAGSENS_OPER (SaHpiSensorNumT)0x00000100
+#define SAHPI_DEFAGSENS_PWR (SaHpiSensorNumT)0x00000101
+#define SAHPI_DEFAGSENS_TEMP (SaHpiSensorNumT)0x00000102
+
+/* The following specifies the named range for aggregate status. */
+#define SAHPI_DEFAGSENS_MIN (SaHpiSensorNumT)0x00000100
+#define SAHPI_DEFAGSENS_MAX (SaHpiSensorNumT)0x0000010F
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Controls **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* Control Number */
+typedef SaHpiInstrumentIdT SaHpiCtrlNumT;
+
+/*
+** Type of Control
+**
+** This enumerated type defines the different types of generic controls.
+*/
+typedef enum {
+ SAHPI_CTRL_TYPE_DIGITAL = 0x00,
+ SAHPI_CTRL_TYPE_DISCRETE,
+ SAHPI_CTRL_TYPE_ANALOG,
+ SAHPI_CTRL_TYPE_STREAM,
+ SAHPI_CTRL_TYPE_TEXT,
+ SAHPI_CTRL_TYPE_OEM = 0xC0
+} SaHpiCtrlTypeT;
+
+/*
+** Control State Type Definitions
+*/
+
+/*
+** Digital Control State Definition
+**
+** Defines the types of digital control states.
+** Any of the four states may be set using saHpiControlSet().
+** Only ON or OFF are appropriate returns from saHpiControlGet().
+** (PULSE_ON and PULSE_OFF are transitory and end in OFF and ON states,
+** respectively.)
+** OFF - the control is off
+** ON - the control is on
+** PULSE_OFF - the control is briefly turned off, and then turned back on
+** PULSE_ON - the control is briefly turned on, and then turned back off
+**
+*/
+typedef enum {
+ SAHPI_CTRL_STATE_OFF = 0,
+ SAHPI_CTRL_STATE_ON,
+ SAHPI_CTRL_STATE_PULSE_OFF,
+ SAHPI_CTRL_STATE_PULSE_ON
+} SaHpiCtrlStateDigitalT;
+
+/*
+** Discrete Control State Definition
+*/
+typedef SaHpiUint32T SaHpiCtrlStateDiscreteT;
+
+/*
+** Analog Control State Definition
+*/
+typedef SaHpiInt32T SaHpiCtrlStateAnalogT;
+
+/*
+** Stream Control State Definition
+*/
+#define SAHPI_CTRL_MAX_STREAM_LENGTH 4
+typedef struct {
+ SaHpiBoolT Repeat; /* Repeat flag */
+ SaHpiUint32T StreamLength; /* Length of the data, in bytes,
+ stored in the stream. */
+ SaHpiUint8T Stream[SAHPI_CTRL_MAX_STREAM_LENGTH];
+} SaHpiCtrlStateStreamT;
+
+/*
+** Text Control State Definition
+*/
+typedef SaHpiUint8T SaHpiTxtLineNumT;
+
+/* Reserved number for sending output to all lines */
+#define SAHPI_TLN_ALL_LINES (SaHpiTxtLineNumT)0x00
+
+typedef struct {
+ SaHpiTxtLineNumT Line; /* Operate on line # */
+ SaHpiTextBufferT Text; /* Text to display */
+} SaHpiCtrlStateTextT;
+
+/*
+** OEM Control State Definition
+*/
+#define SAHPI_CTRL_MAX_OEM_BODY_LENGTH 255
+typedef struct {
+ SaHpiManufacturerIdT MId;
+ SaHpiUint8T BodyLength;
+ SaHpiUint8T Body[SAHPI_CTRL_MAX_OEM_BODY_LENGTH]; /* OEM Specific */
+} SaHpiCtrlStateOemT;
+
+typedef union {
+ SaHpiCtrlStateDigitalT Digital;
+ SaHpiCtrlStateDiscreteT Discrete;
+ SaHpiCtrlStateAnalogT Analog;
+ SaHpiCtrlStateStreamT Stream;
+ SaHpiCtrlStateTextT Text;
+ SaHpiCtrlStateOemT Oem;
+} SaHpiCtrlStateUnionT;
+
+typedef struct {
+ SaHpiCtrlTypeT Type; /* Type of control */
+ SaHpiCtrlStateUnionT StateUnion; /* Data for control type */
+} SaHpiCtrlStateT;
+/*
+** Control Mode Type Definition
+**
+** Controls may be in either AUTO mode or MANUAL mode.
+**
+*/
+typedef enum {
+ SAHPI_CTRL_MODE_AUTO,
+ SAHPI_CTRL_MODE_MANUAL
+} SaHpiCtrlModeT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Control Resource Data Records **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** Output Type
+**
+** This enumeration defines the what the control's output will be.
+*/
+typedef enum {
+ SAHPI_CTRL_GENERIC = 0,
+ SAHPI_CTRL_LED,
+ SAHPI_CTRL_FAN_SPEED,
+ SAHPI_CTRL_DRY_CONTACT_CLOSURE,
+ SAHPI_CTRL_POWER_SUPPLY_INHIBIT,
+ SAHPI_CTRL_AUDIBLE,
+ SAHPI_CTRL_FRONT_PANEL_LOCKOUT,
+ SAHPI_CTRL_POWER_INTERLOCK,
+ SAHPI_CTRL_POWER_STATE,
+ SAHPI_CTRL_LCD_DISPLAY,
+ SAHPI_CTRL_OEM
+} SaHpiCtrlOutputTypeT;
+
+/*
+** Specific Record Types
+** These types represent the specific types of control resource data records.
+*/
+typedef struct {
+ SaHpiCtrlStateDigitalT Default;
+} SaHpiCtrlRecDigitalT;
+
+typedef struct {
+ SaHpiCtrlStateDiscreteT Default;
+} SaHpiCtrlRecDiscreteT;
+
+typedef struct {
+ SaHpiCtrlStateAnalogT Min; /* Minimum Value */
+ SaHpiCtrlStateAnalogT Max; /* Maximum Value */
+ SaHpiCtrlStateAnalogT Default;
+} SaHpiCtrlRecAnalogT;
+
+typedef struct {
+ SaHpiCtrlStateStreamT Default;
+} SaHpiCtrlRecStreamT;
+
+typedef struct {
+ SaHpiUint8T MaxChars; /* Maximum chars per line.
+ If the control DataType is
+ SAHPI_TL_TYPE_UNICODE, there will
+ be two bytes required for each
+ character. This field reports the
+ number of characters per line- not the
+ number of bytes. MaxChars must not be
+ larger than the number of characters
+ that can be placed in a single
+ SaHpiTextBufferT structure. */
+ SaHpiUint8T MaxLines; /* Maximum # of lines */
+ SaHpiLanguageT Language; /* Language Code */
+ SaHpiTextTypeT DataType; /* Permitted Data */
+ SaHpiCtrlStateTextT Default;
+} SaHpiCtrlRecTextT;
+
+#define SAHPI_CTRL_OEM_CONFIG_LENGTH 10
+typedef struct {
+ SaHpiManufacturerIdT MId;
+ SaHpiUint8T ConfigData[SAHPI_CTRL_OEM_CONFIG_LENGTH];
+ SaHpiCtrlStateOemT Default;
+} SaHpiCtrlRecOemT;
+
+typedef union {
+ SaHpiCtrlRecDigitalT Digital;
+ SaHpiCtrlRecDiscreteT Discrete;
+ SaHpiCtrlRecAnalogT Analog;
+ SaHpiCtrlRecStreamT Stream;
+ SaHpiCtrlRecTextT Text;
+ SaHpiCtrlRecOemT Oem;
+} SaHpiCtrlRecUnionT;
+
+/*
+** Default Control Mode Structure
+** This structure tells an HPI User if the control comes up in Auto mode or
+** in Manual mode, by default. It also indicates if the mode can be
+** changed (using saHpiControlSet()). When ReadOnly is False, the mode
+** can be changed from its default setting; otherwise attempting to
+** change the mode will result in an error.
+*/
+typedef struct {
+ SaHpiCtrlModeT Mode; /* Auto or Manual */
+ SaHpiBoolT ReadOnly; /* Indicates if mode is read-only */
+} SaHpiCtrlDefaultModeT;
+
+/*
+** Record Definition
+** Definition of the control resource data record.
+*/
+typedef struct {
+ SaHpiCtrlNumT Num; /* Control Number/Index */
+ SaHpiCtrlOutputTypeT OutputType;
+ SaHpiCtrlTypeT Type; /* Type of control */
+ SaHpiCtrlRecUnionT TypeUnion; /* Specific control record */
+ SaHpiCtrlDefaultModeT DefaultMode; /*Indicates if the control comes up
+ in Auto or Manual mode. */
+ SaHpiBoolT WriteOnly; /* Indicates if the control is
+ write-only. */
+ SaHpiUint32T Oem; /* Reserved for OEM use */
+} SaHpiCtrlRecT;
+
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Inventory Data Repositories **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+/*
+** These structures are used to read and write inventory data to entity
+** inventory data repositories within a resource.
+*/
+/*
+** Inventory Data Repository ID
+** Identifier for an inventory data repository.
+*/
+typedef SaHpiInstrumentIdT SaHpiIdrIdT;
+#define SAHPI_DEFAULT_INVENTORY_ID (SaHpiIdrIdT)0x00000000
+
+/* Inventory Data Area type definitions */
+typedef enum {
+ SAHPI_IDR_AREATYPE_INTERNAL_USE = 0xB0,
+ SAHPI_IDR_AREATYPE_CHASSIS_INFO,
+ SAHPI_IDR_AREATYPE_BOARD_INFO,
+ SAHPI_IDR_AREATYPE_PRODUCT_INFO,
+ SAHPI_IDR_AREATYPE_OEM = 0xC0,
+ SAHPI_IDR_AREATYPE_UNSPECIFIED = 0xFF
+} SaHpiIdrAreaTypeT;
+
+/* Inventory Data Field type definitions */
+typedef enum {
+ SAHPI_IDR_FIELDTYPE_CHASSIS_TYPE,
+ SAHPI_IDR_FIELDTYPE_MFG_DATETIME,
+ SAHPI_IDR_FIELDTYPE_MANUFACTURER,
+ SAHPI_IDR_FIELDTYPE_PRODUCT_NAME,
+ SAHPI_IDR_FIELDTYPE_PRODUCT_VERSION,
+ SAHPI_IDR_FIELDTYPE_SERIAL_NUMBER,
+ SAHPI_IDR_FIELDTYPE_PART_NUMBER,
+ SAHPI_IDR_FIELDTYPE_FILE_ID,
+ SAHPI_IDR_FIELDTYPE_ASSET_TAG,
+ SAHPI_IDR_FIELDTYPE_CUSTOM,
+ SAHPI_IDR_FIELDTYPE_UNSPECIFIED = 0xFF
+} SaHpiIdrFieldTypeT;
+
+/* Inventory Data Field structure definition */
+typedef struct {
+ SaHpiEntryIdT AreaId; /* AreaId for the IDA to which */
+ /* the Field belongs */
+ SaHpiEntryIdT FieldId; /* Field Identifier */
+ SaHpiIdrFieldTypeT Type; /* Field Type */
+ SaHpiBoolT ReadOnly; /* Describes if a field is read-only. */
+ /* All fields in a read-only area are */
+ /* flagged as read-only as well.*/
+ SaHpiTextBufferT Field; /* Field Data */
+} SaHpiIdrFieldT;
+
+/* Inventory Data Area header structure definition */
+typedef struct {
+ SaHpiEntryIdT AreaId; /* Area Identifier */
+ SaHpiIdrAreaTypeT Type; /* Type of area */
+ SaHpiBoolT ReadOnly; /* Describes if an area is read-only. */
+ /* All area headers in a read-only IDR */
+ /* are flagged as read-only as well.*/
+ SaHpiUint32T NumFields; /* Number of Fields contained in Area */
+} SaHpiIdrAreaHeaderT;
+
+/* Inventory Data Repository Information structure definition */
+typedef struct {
+ SaHpiIdrIdT IdrId; /* Repository Identifier */
+ SaHpiUint32T UpdateCount; /* The count is incremented any time the */
+ /* IDR is changed. It rolls over to zero */
+ /* when the maximum value is reached */
+ SaHpiBoolT ReadOnly; /* Describes if the IDR is read-only. */
+ /* All area headers and fields in a */
+ /* read-only IDR are flagged as */
+ /* read-only as well.*/
+ SaHpiUint32T NumAreas; /* Number of Area contained in IDR */
+} SaHpiIdrInfoT;
+
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Inventory Data Repository Resource Data Records **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** All inventory data contained in an inventory data repository
+** must be represented in the RDR repository
+** with an SaHpiInventoryRecT.
+*/
+typedef struct {
+ SaHpiIdrIdT IdrId;
+ SaHpiBoolT Persistent; /* True indicates that updates to IDR are
+ automatically and immediately persisted.
+ False indicates that updates are not
+ immediately persisted; but optionally may be
+ persisted via saHpiParmControl() function, as
+ defined in implementation documentation.*/
+ SaHpiUint32T Oem;
+} SaHpiInventoryRecT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Watchdogs **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** This section defines all of the data types associated with watchdog timers.
+*/
+
+/* Watchdog Number - Identifier for a watchdog timer. */
+typedef SaHpiInstrumentIdT SaHpiWatchdogNumT;
+#define SAHPI_DEFAULT_WATCHDOG_NUM (SaHpiWatchdogNumT)0x00000000
+
+/*
+** Watchdog Timer Action
+**
+** These enumerations represent the possible actions to be taken upon watchdog
+** timer timeout and the events that are generated for watchdog actions.
+*/
+typedef enum {
+ SAHPI_WA_NO_ACTION = 0,
+ SAHPI_WA_RESET,
+ SAHPI_WA_POWER_DOWN,
+ SAHPI_WA_POWER_CYCLE
+} SaHpiWatchdogActionT;
+
+typedef enum {
+ SAHPI_WAE_NO_ACTION = 0,
+ SAHPI_WAE_RESET,
+ SAHPI_WAE_POWER_DOWN,
+ SAHPI_WAE_POWER_CYCLE,
+ SAHPI_WAE_TIMER_INT=0x08 /* Used if Timer Preinterrupt only */
+} SaHpiWatchdogActionEventT;
+
+/*
+** Watchdog Pre-timer Interrupt
+**
+** These enumerations represent the possible types of interrupts that may be
+** triggered by a watchdog pre-timer event. The actual meaning of these
+** operations may differ depending on the hardware architecture.
+*/
+typedef enum {
+ SAHPI_WPI_NONE = 0,
+ SAHPI_WPI_SMI,
+ SAHPI_WPI_NMI,
+ SAHPI_WPI_MESSAGE_INTERRUPT,
+ SAHPI_WPI_OEM = 0x0F
+} SaHpiWatchdogPretimerInterruptT;
+
+/*
+** Watchdog Timer Use
+**
+** These enumerations represent the possible watchdog users that may have caused
+** the watchdog to expire. For instance, if watchdog is being used during power
+** on self test (POST), and it expires, the SAHPI_WTU_BIOS_POST expiration type
+** will be set. Most specific uses for Watchdog timer by users of HPI should
+** indicate SAHPI_WTU_SMS_OS if the use is to provide an OS-healthy heartbeat,
+** or SAHPI_WTU_OEM if it is used for some other purpose.
+*/
+typedef enum {
+ SAHPI_WTU_NONE = 0,
+ SAHPI_WTU_BIOS_FRB2,
+ SAHPI_WTU_BIOS_POST,
+ SAHPI_WTU_OS_LOAD,
+ SAHPI_WTU_SMS_OS, /* System Management System providing
+ heartbeat for OS */
+ SAHPI_WTU_OEM,
+ SAHPI_WTU_UNSPECIFIED = 0x0F
+} SaHpiWatchdogTimerUseT;
+
+/*
+** Timer Use Expiration Flags
+** These values are used for the Watchdog Timer Use Expiration flags in the
+** SaHpiWatchdogT structure.
+*/
+typedef SaHpiUint8T SaHpiWatchdogExpFlagsT;
+#define SAHPI_WATCHDOG_EXP_BIOS_FRB2 (SaHpiWatchdogExpFlagsT)0x02
+#define SAHPI_WATCHDOG_EXP_BIOS_POST (SaHpiWatchdogExpFlagsT)0x04
+#define SAHPI_WATCHDOG_EXP_OS_LOAD (SaHpiWatchdogExpFlagsT)0x08
+#define SAHPI_WATCHDOG_EXP_SMS_OS (SaHpiWatchdogExpFlagsT)0x10
+#define SAHPI_WATCHDOG_EXP_OEM (SaHpiWatchdogExpFlagsT)0x20
+
+/*
+** Watchdog Structure
+**
+** This structure is used by the saHpiWatchdogTimerGet() and
+** saHpiWatchdogTimerSet() functions. The use of the structure varies slightly
+** by each function.
+**
+** For saHpiWatchdogTimerGet() :
+**
+** Log - indicates whether or not the Watchdog is configured to
+** issue events. True=events will be generated.
+** Running - indicates whether or not the Watchdog is currently
+** running or stopped. True=Watchdog is running.
+** TimerUse - indicates the current use of the timer; one of the
+** enumerated preset uses which was included on the last
+** saHpiWatchdogTimerSet() function call, or through some
+** other implementation-dependent means to start the
+** Watchdog timer.
+** TimerAction - indicates what action will be taken when the Watchdog
+** times out.
+** PretimerInterrupt - indicates which action will be taken
+** "PreTimeoutInterval" milliseconds prior to Watchdog
+** timer expiration.
+** PreTimeoutInterval - indicates how many milliseconds prior to timer time
+** out the PretimerInterrupt action will be taken. If
+** "PreTimeoutInterval" = 0, the PretimerInterrupt action
+** will occur concurrently with "TimerAction." HPI
+** implementations may not be able to support millisecond
+** resolution, and because of this may have rounded the
+** set value to whatever resolution could be supported.
+** The HPI implementation will return this rounded value.
+** TimerUseExpFlags - set of five bit flags which indicate that a Watchdog
+** timer timeout has occurred while the corresponding
+** TimerUse value was set. Once set, these flags stay
+** set until specifically cleared with a
+** saHpiWatchdogTimerSet() call, or by some other
+** implementation-dependent means.
+** InitialCount - The time, in milliseconds, before the timer will time
+** out after the watchdog is started/restarted, or some
+** other implementation-dependent strobe is
+** sent to the Watchdog. HPI implementations may not be
+** able to support millisecond resolution, and because
+** of this may have rounded the set value to whatever
+** resolution could be supported. The HPI implementation
+** will return this rounded value.
+** PresentCount - The remaining time in milliseconds before the timer
+** will time out unless a saHpiWatchdogTimerReset()
+** function call is made, or some other implementation-
+** dependent strobe is sent to the Watchdog.
+** HPI implementations may not be able to support
+** millisecond resolution on watchdog timers, but will
+** return the number of clock ticks remaining times the
+** number of milliseconds between each tick.
+**
+** For saHpiWatchdogTimerSet():
+**
+** Log - indicates whether or not the Watchdog should issue
+** events. True=event will be generated.
+** Running - indicates whether or not the Watchdog should be
+** stopped before updating.
+** True = Watchdog is not stopped. If it is
+** already stopped, it will remain stopped,
+** but if it is running, it will continue
+** to run, with the countown timer reset
+** to the new InitialCount. Note that
+** there is a race condition possible
+** with this setting, so it should be used
+** with care.
+** False = Watchdog is stopped. After
+** saHpiWatchdogTimerSet() is called, a
+** subsequent call to
+** saHpiWatchdogTimerReset() is required
+** to start the timer.
+** TimerUse - indicates the current use of the timer. Will control
+** which TimerUseExpFlag is set if the timer expires.
+** TimerAction - indicates what action will be taken when the Watchdog
+** times out.
+** PretimerInterrupt - indicates which action will be taken
+** "PreTimeoutInterval" milliseconds prior to Watchdog
+** timer expiration.
+** PreTimeoutInterval - indicates how many milliseconds prior to timer time
+** out the PretimerInterrupt action will be taken. If
+** "PreTimeoutInterval" = 0, the PretimerInterrupt action
+** will occur concurrently with "TimerAction." HPI
+** implementations may not be able to support millisecond
+** resolution and may have a maximum value restriction.
+** These restrictions should be documented by the
+** provider of the HPI interface.
+** TimerUseExpFlags - Set of five bit flags corresponding to the five
+** TimerUse values. For each bit set, the corresponding
+** Timer Use Expiration Flag will be CLEARED. Generally,
+** a program should only clear the Timer Use Expiration
+** Flag corresponding to its own TimerUse, so that other
+** software, which may have used the timer for another
+** purpose in the past can still read its TimerUseExpFlag
+** to determine whether or not the timer expired during
+** that use.
+** InitialCount - The time, in milliseconds, before the timer will time
+** out after a saHpiWatchdogTimerReset() function call is
+** made, or some other implementation-dependent strobe is
+** sent to the Watchdog. HPI implementations may not be
+** able to support millisecond resolution and may have a
+** maximum value restriction. These restrictions should
+** be documented by the provider of the HPI interface.
+** PresentCount - Not used on saHpiWatchdogTimerSet() function. Ignored.
+**
+*/
+
+typedef struct {
+ SaHpiBoolT Log;
+ SaHpiBoolT Running;
+ SaHpiWatchdogTimerUseT TimerUse;
+ SaHpiWatchdogActionT TimerAction;
+ SaHpiWatchdogPretimerInterruptT PretimerInterrupt;
+ SaHpiUint32T PreTimeoutInterval;
+ SaHpiWatchdogExpFlagsT TimerUseExpFlags;
+ SaHpiUint32T InitialCount;
+ SaHpiUint32T PresentCount;
+} SaHpiWatchdogT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Watchdog Resource Data Records **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** When the "Watchdog" capability is set in a resource, a watchdog with an
+** identifier of SAHPI_DEFAULT_WATCHDOG_NUM is required. All watchdogs must be
+** represented in the RDR repository with an SaHpiWatchdogRecT, including the
+** watchdog with an identifier of SAHPI_DEFAULT_WATCHDOG_NUM.
+*/
+typedef struct {
+ SaHpiWatchdogNumT WatchdogNum;
+ SaHpiUint32T Oem;
+} SaHpiWatchdogRecT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Hot Swap **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* Hot Swap Indicator State */
+typedef enum {
+ SAHPI_HS_INDICATOR_OFF = 0,
+ SAHPI_HS_INDICATOR_ON
+} SaHpiHsIndicatorStateT;
+
+/* Hot Swap Action */
+typedef enum {
+ SAHPI_HS_ACTION_INSERTION = 0,
+ SAHPI_HS_ACTION_EXTRACTION
+} SaHpiHsActionT;
+
+/* Hot Swap State */
+typedef enum {
+ SAHPI_HS_STATE_INACTIVE = 0,
+ SAHPI_HS_STATE_INSERTION_PENDING,
+ SAHPI_HS_STATE_ACTIVE,
+ SAHPI_HS_STATE_EXTRACTION_PENDING,
+ SAHPI_HS_STATE_NOT_PRESENT
+} SaHpiHsStateT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Events, Part 2 **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* Event Data Structures */
+
+typedef enum {
+ SAHPI_CRITICAL = 0,
+ SAHPI_MAJOR,
+ SAHPI_MINOR,
+ SAHPI_INFORMATIONAL,
+ SAHPI_OK,
+ SAHPI_DEBUG = 0xF0,
+ SAHPI_ALL_SEVERITIES = 0xFF /* Only used with DAT and Annunciator */
+ /* functions. This is not a valid */
+ /* severity for events or alarms */
+} SaHpiSeverityT;
+
+
+typedef enum {
+ SAHPI_RESE_RESOURCE_FAILURE,
+ SAHPI_RESE_RESOURCE_RESTORED,
+ SAHPI_RESE_RESOURCE_ADDED
+} SaHpiResourceEventTypeT;
+
+
+typedef struct {
+ SaHpiResourceEventTypeT ResourceEventType;
+} SaHpiResourceEventT;
+
+
+/*
+** Domain events are used to announce the addition of domain references
+** and the removal of domain references to the DRT.
+*/
+typedef enum {
+ SAHPI_DOMAIN_REF_ADDED,
+ SAHPI_DOMAIN_REF_REMOVED
+} SaHpiDomainEventTypeT;
+
+typedef struct {
+ SaHpiDomainEventTypeT Type; /* Type of domain event */
+ SaHpiDomainIdT DomainId; /* Domain Id of domain added
+ to or removed from DRT. */
+} SaHpiDomainEventT;
+
+
+/*
+** Sensor Optional Data
+**
+** Sensor events may contain optional data items passed and stored with the
+** event. If these optional data items are present, they will be included with
+** the event data returned in response to a saHpiEventGet() or
+** saHpiEventLogEntryGet() function call. Also, the optional data items may be
+** included with the event data passed to the saHpiEventLogEntryAdd() function.
+**
+** Specific implementations of HPI may have restrictions on how much data may
+** be passed to saHpiEventLogEntryAdd(). These restrictions should be documented
+** by the provider of the HPI interface.
+*/
+typedef SaHpiUint8T SaHpiSensorOptionalDataT;
+
+#define SAHPI_SOD_TRIGGER_READING (SaHpiSensorOptionalDataT)0x01
+#define SAHPI_SOD_TRIGGER_THRESHOLD (SaHpiSensorOptionalDataT)0x02
+#define SAHPI_SOD_OEM (SaHpiSensorOptionalDataT)0x04
+#define SAHPI_SOD_PREVIOUS_STATE (SaHpiSensorOptionalDataT)0x08
+#define SAHPI_SOD_CURRENT_STATE (SaHpiSensorOptionalDataT)0x10
+#define SAHPI_SOD_SENSOR_SPECIFIC (SaHpiSensorOptionalDataT)0x20
+typedef struct {
+ SaHpiSensorNumT SensorNum;
+ SaHpiSensorTypeT SensorType;
+ SaHpiEventCategoryT EventCategory;
+ SaHpiBoolT Assertion; /* True = Event State
+ asserted
+ False = deasserted */
+ SaHpiEventStateT EventState; /* single state being asserted
+ or deasserted*/
+ SaHpiSensorOptionalDataT OptionalDataPresent;
+ /* the following fields are only valid if the corresponding flag is set
+ in the OptionalDataPresent field */
+ SaHpiSensorReadingT TriggerReading; /* Reading that triggered
+ the event */
+ SaHpiSensorReadingT TriggerThreshold; /* Value of the threshold
+ that was crossed. Will not
+ be present if threshold is
+ not readable. */
+ SaHpiEventStateT PreviousState; /* Previous set of asserted
+ event states. If multiple
+ event states change at once,
+ multiple events may be
+ generated for each changing
+ event state. This field
+ should indicate the status of
+ the sensor event states prior
+ to any of the simultaneous
+ changes.
+
+ Thus, it will be the same in
+ each event generated due to
+ multiple simultaneous event
+ state changes. */
+
+ SaHpiEventStateT CurrentState; /* Current set of asserted
+ event states. */
+ SaHpiUint32T Oem;
+ SaHpiUint32T SensorSpecific;
+} SaHpiSensorEventT;
+
+typedef SaHpiUint8T SaHpiSensorEnableOptDataT;
+
+#define SAHPI_SEOD_CURRENT_STATE (SaHpiSensorEnableOptDataT)0x10
+
+typedef struct {
+ SaHpiSensorNumT SensorNum;
+ SaHpiSensorTypeT SensorType;
+ SaHpiEventCategoryT EventCategory;
+ SaHpiBoolT SensorEnable; /* current sensor enable status */
+ SaHpiBoolT SensorEventEnable; /* current evt enable status */
+ SaHpiEventStateT AssertEventMask; /* current assert event mask */
+ SaHpiEventStateT DeassertEventMask; /* current deassert evt mask */
+ SaHpiSensorEnableOptDataT OptionalDataPresent;
+ /* the following fields are only valid if the corresponding flag is set
+ in the OptionalDataPresent field */
+ SaHpiEventStateT CurrentState; /* Current set of asserted
+ Event states. */
+} SaHpiSensorEnableChangeEventT;
+
+typedef struct {
+ SaHpiHsStateT HotSwapState;
+ SaHpiHsStateT PreviousHotSwapState;
+} SaHpiHotSwapEventT;
+
+typedef struct {
+ SaHpiWatchdogNumT WatchdogNum;
+ SaHpiWatchdogActionEventT WatchdogAction;
+ SaHpiWatchdogPretimerInterruptT WatchdogPreTimerAction;
+ SaHpiWatchdogTimerUseT WatchdogUse;
+} SaHpiWatchdogEventT;
+
+/*
+** The following type defines the types of events that can be reported
+** by the HPI software implementation.
+**
+** Audit events report a discrepancy in the audit process. Audits are typically
+** performed by HA software to detect problems. Audits may look for such things
+** as corrupted data stores, inconsistent RPT information, or improperly managed
+** queues.
+**
+** Startup events report a failure to start-up properly, or inconsistencies in
+** persisted data.
+*/
+typedef enum {
+ SAHPI_HPIE_AUDIT,
+ SAHPI_HPIE_STARTUP,
+ SAHPI_HPIE_OTHER
+} SaHpiSwEventTypeT;
+
+typedef struct {
+ SaHpiManufacturerIdT MId;
+ SaHpiSwEventTypeT Type;
+ SaHpiTextBufferT EventData;
+} SaHpiHpiSwEventT;
+
+typedef struct {
+ SaHpiManufacturerIdT MId;
+ SaHpiTextBufferT OemEventData;
+} SaHpiOemEventT;
+
+/*
+** User events may be used for storing custom events created by an HPI User
+** when injecting events into the Event Log using saHpiEventLogEntryAdd().
+*/
+typedef struct {
+ SaHpiTextBufferT UserEventData;
+} SaHpiUserEventT;
+
+typedef enum {
+ SAHPI_ET_RESOURCE,
+ SAHPI_ET_DOMAIN,
+ SAHPI_ET_SENSOR,
+ SAHPI_ET_SENSOR_ENABLE_CHANGE,
+ SAHPI_ET_HOTSWAP,
+ SAHPI_ET_WATCHDOG,
+ SAHPI_ET_HPI_SW,
+ SAHPI_ET_OEM,
+ SAHPI_ET_USER
+} SaHpiEventTypeT;
+
+typedef union {
+ SaHpiResourceEventT ResourceEvent;
+ SaHpiDomainEventT DomainEvent;
+ SaHpiSensorEventT SensorEvent;
+ SaHpiSensorEnableChangeEventT SensorEnableChangeEvent;
+ SaHpiHotSwapEventT HotSwapEvent;
+ SaHpiWatchdogEventT WatchdogEvent;
+ SaHpiHpiSwEventT HpiSwEvent;
+ SaHpiOemEventT OemEvent;
+ SaHpiUserEventT UserEvent;
+} SaHpiEventUnionT;
+
+typedef struct {
+ SaHpiResourceIdT Source;
+ SaHpiEventTypeT EventType;
+ SaHpiTimeT Timestamp; /*Equal to SAHPI_TIME_UNSPECIFED if time is
+ not available; Absolute time if greater
+ than SAHPI_TIME_MAX_RELATIVE, Relative
+ time if less than or equal to
+ SAHPI_TIME_MAX_RELATIVE */
+ SaHpiSeverityT Severity;
+ SaHpiEventUnionT EventDataUnion;
+} SaHpiEventT;
+
+/*
+** Event Queue Status
+**
+** This status word is returned to HPI Users that request it
+** when saHpiEventGet() is called.
+**
+*/
+
+typedef SaHpiUint32T SaHpiEvtQueueStatusT;
+
+#define SAHPI_EVT_QUEUE_OVERFLOW (SaHpiEvtQueueStatusT)0x0001
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Annunciators **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** Annunciator Number
+** Identifier for an Annunciator management instrument.
+*/
+typedef SaHpiInstrumentIdT SaHpiAnnunciatorNumT;
+
+/*
+** The following data type is equivalent to the AIS data type SaNameT.
+** it is defined in this header file, so that inclusion of the AIS
+** header file is not required. This data type is based on version 1.0
+** of the AIS specification
+*/
+#define SA_HPI_MAX_NAME_LENGTH 256
+
+typedef struct {
+ SaHpiUint16T Length;
+ unsigned char Value[SA_HPI_MAX_NAME_LENGTH];
+} SaHpiNameT;
+
+/*
+** Enumeration of Announcement Types
+*/
+typedef enum {
+ SAHPI_STATUS_COND_TYPE_SENSOR,
+ SAHPI_STATUS_COND_TYPE_RESOURCE,
+ SAHPI_STATUS_COND_TYPE_OEM,
+ SAHPI_STATUS_COND_TYPE_USER
+} SaHpiStatusCondTypeT;
+
+
+/* Condition structure definition */
+typedef struct {
+
+ SaHpiStatusCondTypeT Type; /* Status Condition Type */
+ SaHpiEntityPathT Entity; /* Entity assoc. with status condition */
+ SaHpiDomainIdT DomainId; /* Domain associated with status.
+ May be SAHPI_UNSPECIFIED_DOMAIND_ID
+ meaning current domain, or domain
+ not meaningful for status condition*/
+ SaHpiResourceIdT ResourceId; /* Resource associated with status.
+ May be SAHPI_UNSPECIFIED_RESOURCE_ID
+ if Type is SAHPI_STATUS_COND_USER.
+ Must be set to valid ResourceId in
+ domain specified by DomainId,
+ or in current domain, if DomainId
+ is SAHPI_UNSPECIFIED_DOMAIN_ID */
+ SaHpiSensorNumT SensorNum; /* Sensor associated with status
+ Only valid if Type is
+ SAHPI_STATUS_COND_TYPE_SENSOR */
+ SaHpiEventStateT EventState; /* Sensor event state.
+ Only valid if Type is
+ SAHPI_STATUS_COND_TYPE_SENSOR. */
+ SaHpiNameT Name; /* AIS compatible identifier associated
+ with Status condition */
+ SaHpiManufacturerIdT Mid; /* Manufacturer Id associated with
+ status condition, required when type
+ is SAHPI_STATUS_COND_TYPE_OEM. */
+ SaHpiTextBufferT Data; /* Optional Data associated with
+ Status condition */
+} SaHpiConditionT;
+
+
+/* Announcement structure definition */
+typedef struct {
+ SaHpiEntryIdT EntryId; /* Announcment Entry Id */
+ SaHpiTimeT Timestamp; /* Time when announcement added to set */
+ SaHpiBoolT AddedByUser; /* True if added to set by HPI User,
+ False if added automatically by
+ HPI implementation */
+ SaHpiSeverityT Severity; /* Severity of announcement */
+ SaHpiBoolT Acknowledged; /* Acknowledged flag */
+ SaHpiConditionT StatusCond; /* Detailed status condition */
+} SaHpiAnnouncementT;
+
+
+/* Annunciator Mode - defines who may add or delete entries in set. */
+
+typedef enum {
+ SAHPI_ANNUNCIATOR_MODE_AUTO,
+ SAHPI_ANNUNCIATOR_MODE_USER,
+ SAHPI_ANNUNCIATOR_MODE_SHARED
+} SaHpiAnnunciatorModeT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Annunciator Resource Data Records **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** The following enumerated type defines the possible output types
+** which can be associated with an Annunciator Management Instrument
+*/
+typedef enum {
+ SAHPI_ANNUNCIATOR_TYPE_LED = 0,
+ SAHPI_ANNUNCIATOR_TYPE_DRY_CONTACT_CLOSURE,
+ SAHPI_ANNUNCIATOR_TYPE_AUDIBLE,
+ SAHPI_ANNUNCIATOR_TYPE_LCD_DISPLAY,
+ SAHPI_ANNUNCIATOR_TYPE_MESSAGE,
+ SAHPI_ANNUNCIATOR_TYPE_COMPOSITE,
+ SAHPI_ANNUNCIATOR_TYPE_OEM
+} SaHpiAnnunciatorTypeT;
+
+
+/*
+** All annunciator management instruments
+** must be represented in the RDR repository
+** with an SaHpiAnnunciatorRecT.
+*/
+typedef struct {
+ SaHpiAnnunciatorNumT AnnunciatorNum;
+ SaHpiAnnunciatorTypeT AnnunciatorType; /* Annunciator Output Type */
+ SaHpiBoolT ModeReadOnly; /* if True, Mode may
+ not be changed by HPI User */
+ SaHpiUint32T MaxConditions; /* maximum number of conditions
+ that can be held in current
+ set. 0 means no fixed
+ limit. */
+ SaHpiUint32T Oem;
+} SaHpiAnnunciatorRecT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Resource Data Record **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/*
+** The following describes the different types of records that exist within a
+** RDR repository and the RDR super-structure to all of the specific RDR types
+** (sensor, inventory data, watchdog, etc.).
+*/
+typedef enum {
+ SAHPI_NO_RECORD,
+ SAHPI_CTRL_RDR,
+ SAHPI_SENSOR_RDR,
+ SAHPI_INVENTORY_RDR,
+ SAHPI_WATCHDOG_RDR,
+ SAHPI_ANNUNCIATOR_RDR
+} SaHpiRdrTypeT;
+
+typedef union {
+ SaHpiCtrlRecT CtrlRec;
+ SaHpiSensorRecT SensorRec;
+ SaHpiInventoryRecT InventoryRec;
+ SaHpiWatchdogRecT WatchdogRec;
+ SaHpiAnnunciatorRecT AnnunciatorRec;
+} SaHpiRdrTypeUnionT;
+
+typedef struct {
+ SaHpiEntryIdT RecordId;
+ SaHpiRdrTypeT RdrType;
+ SaHpiEntityPathT Entity; /* Entity to which this RDR relates. */
+ SaHpiBoolT IsFru; /* Entity is a FRU. This field is
+ Only valid if the Entity path given
+ in the "Entity" field is different
+ from the Entity path in the RPT
+ entry for the resource. */
+ SaHpiRdrTypeUnionT RdrTypeUnion;
+ SaHpiTextBufferT IdString;
+} SaHpiRdrT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Parameter Control **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+typedef enum {
+ SAHPI_DEFAULT_PARM = 0,
+ SAHPI_SAVE_PARM,
+ SAHPI_RESTORE_PARM
+} SaHpiParmActionT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Reset **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+typedef enum {
+ SAHPI_COLD_RESET = 0,
+ SAHPI_WARM_RESET,
+ SAHPI_RESET_ASSERT,
+ SAHPI_RESET_DEASSERT
+} SaHpiResetActionT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Power **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+typedef enum {
+ SAHPI_POWER_OFF = 0,
+ SAHPI_POWER_ON,
+ SAHPI_POWER_CYCLE
+} SaHpiPowerStateT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Resource Presence Table **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* This section defines the types associated with the RPT. */
+
+/*
+** GUID - Globally Unique Identifier
+**
+** The format if the ID follows that specified by the Wired for Management
+** Baseline, Version 2.0 specification. HPI uses version 1 of the GUID
+** format, with a 3-bit variant field of 10x (where x indicates 'don't care')
+*/
+typedef SaHpiUint8T SaHpiGuidT[16];
+
+/*
+** Resource Info Type Definitions
+**
+**
+** SaHpiResourceInfoT contains static configuration data concerning the
+** management controller associated with the resource, or the resource itself.
+** Note this information is used to describe the resource; that is, the piece of
+** infrastructure which manages an entity (or multiple entities) - NOT the
+** entities for which the resource provides management. The purpose of the
+** SaHpiResourceInfoT structure is to provide information that an HPI User may
+** need in order to interact correctly with the resource (e.g., recognize a
+** specific management controller which may have defined OEM fields in sensors,
+** OEM controls, etc.).
+**
+** The GUID is used to uniquely identify a Resource. A GUID value of zero is not
+** valid and indicates that the Resource does not have an associated GUID.
+**
+** All of the fields in the following structure may or may not be used by a
+** given resource.
+*/
+typedef struct {
+ SaHpiUint8T ResourceRev;
+ SaHpiUint8T SpecificVer;
+ SaHpiUint8T DeviceSupport;
+ SaHpiManufacturerIdT ManufacturerId;
+ SaHpiUint16T ProductId;
+ SaHpiUint8T FirmwareMajorRev;
+ SaHpiUint8T FirmwareMinorRev;
+ SaHpiUint8T AuxFirmwareRev;
+ SaHpiGuidT Guid;
+} SaHpiResourceInfoT;
+
+/*
+** Resource Capabilities
+**
+** This definition defines the capabilities of a given resource. One resource
+** may support any number of capabilities using the bit mask. Because each entry
+** in an RPT will have the SAHPI_CAPABILITY_RESOURCE bit set, zero is not a
+** valid value for the capability flag, and is thus used to indicate "no RPT
+** entry present" in some function calls.
+**
+** SAHPI_CAPABILITY_RESOURCE
+** SAHPI_CAPABILITY_EVT_DEASSERTS
+** Indicates that all sensors on the resource have the property that their
+** Assertion and Deassertion event enable flags are the same. That is,
+** for all event states whose assertion triggers an event, it is
+** guaranteed that the deassertion of that event will also
+** trigger an event. Thus, an HPI User may track the state of sensors on the
+** resource by monitoring events rather than polling for state changes.
+** SAHPI_CAPABILITY_AGGREGATE_STATUS
+** SAHPI_CAPABILITY_CONFIGURATION
+** SAHPI_CAPABILITY_MANAGED_HOTSWAP
+** Indicates that the resource supports the full managed hot swap model.
+** Since hot swap only makes sense for field-replaceable units, the
+** SAHPI_CAPABILITY_FRU capability bit must also be set for this resource.
+** SAHPI_CAPABILITY_WATCHDOG
+** SAHPI_CAPABILITY_CONTROL
+** SAHPI_CAPABILITY_FRU
+** Indicates that the resource is a field-replaceable unit; i.e., it is
+** capable of being removed and replaced in a live system. If
+** SAHPI_CAPABILITY_MANAGED_HOTSWAP is also set, the resource supports
+** the full hot swap model. If SAHPI_CAPABILITY_MANAGED_HOTSWAP is not
+** set, the resource supports the simplified hot swap model.
+** SAHPI_CAPABILITY_ANNUNCIATOR
+** SAHPI_CAPABILITY_POWER
+** SAHPI_CAPABILITY_RESET
+** SAHPI_CAPABILITY_INVENTORY_DATA
+** SAHPI_CAPABILITY_EVENT_LOG
+** SAHPI_CAPABILITY_RDR
+** Indicates that a resource data record (RDR) repository is supplied
+** by the resource. Since the existence of an RDR is mandatory for all
+** management instruments, this
+** capability must be asserted if the resource
+** contains any sensors, controls, watchdog timers, or inventory
+** data repositories.
+** SAHPI_CAPABILITY_SENSOR
+*/
+
+typedef SaHpiUint32T SaHpiCapabilitiesT;
+#define SAHPI_CAPABILITY_RESOURCE (SaHpiCapabilitiesT)0X40000000
+#define SAHPI_CAPABILITY_EVT_DEASSERTS (SaHpiCapabilitiesT)0x00008000
+#define SAHPI_CAPABILITY_AGGREGATE_STATUS (SaHpiCapabilitiesT)0x00002000
+#define SAHPI_CAPABILITY_CONFIGURATION (SaHpiCapabilitiesT)0x00001000
+#define SAHPI_CAPABILITY_MANAGED_HOTSWAP (SaHpiCapabilitiesT)0x00000800
+#define SAHPI_CAPABILITY_WATCHDOG (SaHpiCapabilitiesT)0x00000400
+#define SAHPI_CAPABILITY_CONTROL (SaHpiCapabilitiesT)0x00000200
+#define SAHPI_CAPABILITY_FRU (SaHpiCapabilitiesT)0x00000100
+#define SAHPI_CAPABILITY_ANNUNCIATOR (SaHpiCapabilitiesT)0x00000040
+#define SAHPI_CAPABILITY_POWER (SaHpiCapabilitiesT)0x00000020
+#define SAHPI_CAPABILITY_RESET (SaHpiCapabilitiesT)0x00000010
+#define SAHPI_CAPABILITY_INVENTORY_DATA (SaHpiCapabilitiesT)0x00000008
+#define SAHPI_CAPABILITY_EVENT_LOG (SaHpiCapabilitiesT)0x00000004
+#define SAHPI_CAPABILITY_RDR (SaHpiCapabilitiesT)0x00000002
+#define SAHPI_CAPABILITY_SENSOR (SaHpiCapabilitiesT)0x00000001
+
+/*
+** Resource Managed Hot Swap Capabilities
+**
+** This definition defines the managed hot swap capabilities of a given
+** resource.
+**
+** SAHPI_HS_CAPABILITY_AUTOEXTRACT_READ_ONLY
+** This capability indicates if the hot swap autoextract timer is read-only.
+** SAHPI_HS_CAPABILITY_INDICATOR_SUPPORTED
+** Indicates whether or not the resource has a hot swap indicator.
+*/
+
+typedef SaHpiUint32T SaHpiHsCapabilitiesT;
+#define SAHPI_HS_CAPABILITY_AUTOEXTRACT_READ_ONLY \
+ (SaHpiHsCapabilitiesT)0x80000000
+#define SAHPI_HS_CAPABILITY_INDICATOR_SUPPORTED \
+ (SaHpiHsCapabilitiesT)0X40000000
+/*
+** RPT Entry
+**
+** This structure is used to store the RPT entry information.
+**
+** The ResourceCapabilities field definies the capabilities of the resource.
+** This field must be non-zero for all valid resources.
+**
+** The HotSwapCapabilities field denotes the capabilities of the resource,
+** specifically related to hot swap. This field is only valid if the
+** resource supports managed hot swap, as indicated by the
+** SAHPI_CAPABILITY_MANAGED_HOT_SWAP resource capability.
+**
+** The ResourceTag is a data field within an RPT entry available to the HPI
+** User for associating application specific data with a resource. The HPI
+** User supplied data is purely informational and is not used by the HPI
+** implementation, domain, or associated resource. For example, an HPI User
+** can set the resource tag to a "descriptive" value, which can be used to
+** identify the resource in messages to a human operator.
+*/
+typedef struct {
+ SaHpiEntryIdT EntryId;
+ SaHpiResourceIdT ResourceId;
+ SaHpiResourceInfoT ResourceInfo;
+ SaHpiEntityPathT ResourceEntity; /* If resource manages a FRU, entity
+ path of the FRU */
+ /* If resource manages a single
+ entity, entity path of that
+ entity. */
+ /* If resource manages multiple
+ entities, the entity path of the
+ "primary" entity managed by the
+ resource */
+ /* Must be set to the same value in
+ every domain which contains this
+ resource */
+ SaHpiCapabilitiesT ResourceCapabilities; /* Must be non-0. */
+ SaHpiHsCapabilitiesT HotSwapCapabilities; /* Indicates the hot swap
+ capabilities of the resource */
+ SaHpiSeverityT ResourceSeverity; /* Indicates the criticality that
+ should be raised when the resource
+ is not responding */
+ SaHpiBoolT ResourceFailed; /* Indicates that the resource is not
+ currently functional */
+ SaHpiTextBufferT ResourceTag;
+} SaHpiRptEntryT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Domain Information **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+
+/* This section defines the types associated with the domain controller. */
+
+/*
+** Domain Capabilities
+**
+** This definition defines the capabilities of a given domain. A domain
+** may support any number of capabilities using the bit mask.
+**
+** SAHPI_DOMAIN_CAP_AUTOINSERT_READ_ONLY
+** Indicates that the domain auto insert timeout value is read-only
+** and may not be modified using the saHpiHotSwapAutoInsertTimeoutSet()
+** function.
+*/
+
+typedef SaHpiUint32T SaHpiDomainCapabilitiesT;
+#define SAHPI_DOMAIN_CAP_AUTOINSERT_READ_ONLY \
+ (SaHpiDomainCapabilitiesT)0X00000001
+
+/*
+** Domain Info
+**
+** This structure is used to store the information regarding the domain
+** including information regarding the domain reference table (DRT) and
+** the resource presence table (RPT).
+**
+** The DomainTag field is an informational value that supplies an HPI User
+** with naming information for the domain.
+**
+** NOTE: Regarding timestamps - If the implementation cannot supply an absolute
+** timestamp, then it may supply a timestamp relative to some system-defined
+** epoch, such as system boot. The value SAHPI_TIME_UNSPECIFIED indicates that
+** the time of the update cannot be determined. Otherwise, If the value is less
+** than or equal to SAHPI_TIME_MAX_RELATIVE, then it is relative; if it is
+** greater than SAHPI_TIME_MAX_RELATIVE, then it is absolute.
+**
+** The GUID is used to uniquely identify a domain. A GUID value of zero is not
+** valid and indicates that the domain does not have an associated GUID.
+*/
+
+typedef struct {
+ SaHpiDomainIdT DomainId; /* Unique Domain Id associated with
+ domain */
+ SaHpiDomainCapabilitiesT DomainCapabilities; /* Domain Capabilities */
+ SaHpiBoolT IsPeer; /* Indicates that this domain
+ participates in a peer
+ relationship. */
+ SaHpiTextBufferT DomainTag; /* Information tag associated with
+ domain */
+ SaHpiUint32T DrtUpdateCount; /* This count is incremented any time the
+ table is changed. It rolls over to
+ zero when the maximum value is
+ reached */
+ SaHpiTimeT DrtUpdateTimestamp; /* This timestamp is set any time the
+ DRT table is changed. */
+ SaHpiUint32T RptUpdateCount; /* This count is incremented any time
+ the RPT is changed. It rolls over
+ to zero when the maximum value is
+ reached */
+ SaHpiTimeT RptUpdateTimestamp; /* This timestamp is set any time the
+ RPT table is changed. */
+ SaHpiUint32T DatUpdateCount; /* This count is incremented any time
+ the DAT is changed. It rolls over to
+ zero when the maximum value is
+ reached */
+ SaHpiTimeT DatUpdateTimestamp; /* This timestamp is set any time the
+ DAT is changed. */
+ SaHpiUint32T ActiveAlarms; /* Count of active alarms in the DAT */
+ SaHpiUint32T CriticalAlarms; /* Count of active critical alarms in
+ the DAT */
+ SaHpiUint32T MajorAlarms; /* Count of active major alarms in the
+ DAT */
+ SaHpiUint32T MinorAlarms; /* Count of active minor alarms in the
+ DAT */
+ SaHpiUint32T DatUserAlarmLimit; /* Maximum User Alarms that can be
+ added to DAT. 0=no fixed limit */
+ SaHpiBoolT DatOverflow; /* Set to True if there are one
+ or more non-User Alarms that
+ are missing from the DAT because
+ of space limitations */
+ SaHpiGuidT Guid; /* GUID associated with domain.*/
+} SaHpiDomainInfoT;
+
+/*
+** DRT Entry
+**
+** This structure is used to store the DRT entry information.
+**
+*/
+typedef struct {
+ SaHpiEntryIdT EntryId;
+ SaHpiDomainIdT DomainId; /* The Domain ID referenced by this entry */
+ SaHpiBoolT IsPeer; /* Indicates if this domain reference
+ is a peer. If not, the domain reference
+ is a tier. */
+} SaHpiDrtEntryT;
+
+
+/*
+** DAT Entry
+**
+** This structure is used to store alarm informatin in the DAT
+**
+*/
+
+
+typedef SaHpiEntryIdT SaHpiAlarmIdT;
+
+typedef struct {
+ SaHpiAlarmIdT AlarmId; /* Alarm Id */
+ SaHpiTimeT Timestamp; /* Time when alarm added to DAT */
+ SaHpiSeverityT Severity; /* Severity of alarm */
+ SaHpiBoolT Acknowledged; /* Acknowledged flag */
+ SaHpiConditionT AlarmCond; /* Detailed alarm condition */
+} SaHpiAlarmT;
+
+/*******************************************************************************
+********************************************************************************
+********** **********
+********** Event Log **********
+********** **********
+********************************************************************************
+*******************************************************************************/
+/* This section defines the types associated with the Event Log. */
+/*
+** Event Log Information
+**
+** The Entries entry denotes the number of active entries contained in the Event
+** Log.
+** The Size entry denotes the total number of entries the Event Log is able to
+** hold.
+** The UserEventMaxSize entry indicates the maximum size of the text buffer
+** data field in an HPI User event that is supported by the Event Log
+** implementation. If the implementation does not enforce a more restrictive
+** data length, it should be set to SAHPI_MAX_TEXT_BUFFER_LENGTH.
+** The UpdateTimestamp entry denotes the time of the last update to the Event
+** Log.
+** The CurrentTime entry denotes the Event Log's idea of the current time; i.e
+** the timestamp that would be placed on an entry if it was added now.
+** The Enabled entry indicates whether the Event Log is enabled. If the Event
+** Log is "disabled" no events generated within the HPI implementation will be
+** added to the Event Log. Events may still be added to the Event Log with
+** the saHpiEventLogEntryAdd() function. When the Event Log is "enabled"
+** events may be automatically added to the Event Log as they are generated
+** in a resource or a domain, however, it is implementation-specific which
+** events are automatically added to any Event Log.
+** The OverflowFlag entry indicates the Event Log has overflowed. Events have
+** been dropped or overwritten due to a table overflow.
+** The OverflowAction entry indicates the behavior of the Event Log when an
+** overflow occurs.
+** The OverflowResetable entry indicates if the overflow flag can be
+** cleared by an HPI User with the saHpiEventLogOverflowReset() function.
+*/
+typedef enum {
+ SAHPI_EL_OVERFLOW_DROP, /* New entries are dropped when Event Log is
+ full*/
+ SAHPI_EL_OVERFLOW_OVERWRITE /* Event Log overwrites existing entries
+ when Event Log is full */
+} SaHpiEventLogOverflowActionT;
+
+typedef struct {
+ SaHpiUint32T Entries;
+ SaHpiUint32T Size;
+ SaHpiUint32T UserEventMaxSize;
+ SaHpiTimeT UpdateTimestamp;
+ SaHpiTimeT CurrentTime;
+ SaHpiBoolT Enabled;
+ SaHpiBoolT OverflowFlag;
+ SaHpiBoolT OverflowResetable;
+ SaHpiEventLogOverflowActionT OverflowAction;
+} SaHpiEventLogInfoT;
+/*
+** Event Log Entry
+** These types define the Event Log entry.
+*/
+typedef SaHpiUint32T SaHpiEventLogEntryIdT;
+/* Reserved values for Event Log entry IDs */
+#define SAHPI_OLDEST_ENTRY (SaHpiEventLogEntryIdT)0x00000000
+#define SAHPI_NEWEST_ENTRY (SaHpiEventLogEntryIdT)0xFFFFFFFF
+#define SAHPI_NO_MORE_ENTRIES (SaHpiEventLogEntryIdT)0xFFFFFFFE
+
+typedef struct {
+ SaHpiEventLogEntryIdT EntryId; /* Entry ID for record */
+ SaHpiTimeT Timestamp; /* Time at which the event was placed
+ in the Event Log. If less than or equal to
+ SAHPI_TIME_MAX_RELATIVE, then it is
+ relative; if it is greater than SAHPI_TIME_
+ MAX_RELATIVE, then it is absolute. */
+ SaHpiEventT Event; /* Logged Event */
+} SaHpiEventLogEntryT;
+
+
+/*******************************************************************************
+**
+** Name: saHpiVersionGet()
+**
+** Description:
+** This function returns the version identifier of the SaHpi specification
+** version supported by the HPI implementation.
+**
+** Parameters:
+** None.
+**
+** Return Value:
+** The interface version identifier, of type SaHpiVersionT is returned.
+**
+** Remarks:
+** This function differs from all other interface functions in that it
+** returns the version identifier rather than a standard return code. This is
+** because the version itself is necessary in order for an HPI User to
+** properly interpret subsequent API return codes. Thus, the
+** saHpiVersionGet() function returns the interface version identifier
+** unconditionally.
+**
+** This function returns the value of the header file symbol
+** SAHPI_INTERFACE_VERSION in the SaHpi.h header file used when the library
+** was compiled. An HPI User may compare the returned value to the
+** SAHPI_INTERFACE_VERSION symbol in the SaHpi.h header file used by the
+** calling program to determine if the accessed library is compatible with the
+** calling program.
+**
+*******************************************************************************/
+SaHpiVersionT SAHPI_API saHpiVersionGet ( void );
+
+/*******************************************************************************
+**
+** Name: saHpiSessionOpen()
+**
+** Description:
+** This function opens an HPI session for a given domain and set of security
+** characteristics (future).
+**
+** Parameters:
+** DomainId - [in] Domain identifier of the domain to be accessed by the HPI
+** User. A domain identifier of SAHPI_UNSPECIFIED_DOMAIN_ID requests that
+** a session be opened to a default domain.
+** SessionId - [out] Pointer to a location to store an identifier for the
+** newly opened session. This identifier is used for subsequent access to
+** domain resources and events.
+** SecurityParams - [in] Pointer to security and permissions data structure.
+** This parameter is reserved for future use, and must be set to NULL.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_INVALID_DOMAIN is returned if no domain matching the specified
+** domain identifier exists.
+** SA_ERR_HPI_INVALID_PARAMS is returned if:
+** * A non-null SecurityParams pointer is passed.
+** * The SessionId pointer is passed in as NULL.
+** SA_ERR_HPI_OUT_OF_SPACE is returned if no more sessions can be opened.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSessionOpen (
+ SAHPI_IN SaHpiDomainIdT DomainId,
+ SAHPI_OUT SaHpiSessionIdT *SessionId,
+ SAHPI_IN void *SecurityParams
+);
+
+/*******************************************************************************
+**
+** Name: saHpiSessionClose()
+**
+** Description:
+** This function closes an HPI session. After closing a session, the SessionId
+** will no longer be valid.
+**
+** Parameters:
+** SessionId - [in] Session identifier previously obtained using
+** saHpiSessionOpen().
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSessionClose (
+ SAHPI_IN SaHpiSessionIdT SessionId
+);
+
+/*******************************************************************************
+**
+** Name: saHpiDiscover()
+**
+** Description:
+** This function requests the underlying management service to discover
+** information about resources and associated domains.
+**
+** This function may be called during operation to update the DRT table and
+** the RPT table. An HPI implementation may exhibit latency between when
+** hardware changes occur and when the domain DRT and RPT are updated. To
+** overcome this latency, the saHpiDiscover() function may be called. When
+** this function returns, the DRT and RPT should be updated to reflect the
+** current system configuration and status.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained
+** using saHpiSessionOpen().
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiDiscover (
+ SAHPI_IN SaHpiSessionIdT SessionId
+);
+
+/*******************************************************************************
+**
+** Name: saHpiDomainInfoGet()
+**
+** Description:
+** This function is used for requesting information about the domain, the
+** Domain Reference Table (DRT), the Resource Presence Table (RPT), and the
+** Domain Alarm Table (DAT), such as table update counters and timestamps, and
+** the unique domain identifier associated with the domain.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained
+** using saHpiSessionOpen().
+** DomainInfo - [out] Pointer to the information describing the domain and
+** DRT.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the DomainInfo pointer is passed
+** in as NULL.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiDomainInfoGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_OUT SaHpiDomainInfoT *DomainInfo
+);
+
+/*******************************************************************************
+**
+** Name: saHpiDrtEntryGet()
+**
+** Description:
+** This function retrieves domain information for the specified entry of the
+** DRT. This function allows an HPI User to read the DRT entry-by-entry.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** EntryId - [in] Identifier of the DRT entry to retrieve. Reserved EntryId
+** values:
+** * SAHPI_FIRST_ENTRY Get first entry
+** * SAHPI_LAST_ENTRY Reserved as delimiter for end of list. Not a
+** valid entry identifier.
+** NextEntryId - [out] Pointer to location to store the EntryId of next entry
+** in DRT.
+** DrtEntry - [out] Pointer to the structure to hold the returned DRT entry.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_NOT_PRESENT is returned if the:
+** * Entry identified by EntryId is not present.
+** * EntryId is SAHPI_FIRST_ENTRY and the DRT is empty.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the:
+** * DrtEntry pointer is passed in as NULL.
+** * NextEntryId pointer is passed in as NULL.
+** * EntryId is an invalid reserved value such as SAHPI_LAST_ENTRY.
+**
+** Remarks:
+** If the EntryId parameter is set to SAHPI_FIRST_ENTRY, the first entry in
+** the DRT will be returned. When an entry is successfully retrieved,
+** NextEntryId will be set to the identifier of the next valid entry; however,
+** when the last entry has been retrieved, NextEntryId will be set to
+** SAHPI_LAST_ENTRY. To retrieve an entire list of entries, call this function
+** first with an EntryId of SAHPI_FIRST_ENTRY and then use the returned
+** NextEntryId in the next call. Proceed until the NextEntryId returned is
+** SAHPI_LAST_ENTRY.
+**
+** If an HPI User has not subscribed to receive events and a DRT entry is
+** added while the DRT is being read, that new entry may be missed. The
+** update counter provides a means for insuring that no domains are missed
+** when stepping through the DRT. In order to use this feature, an HPI User
+** should call saHpiDomainInfoGet() to get the update counter value before
+** retrieving the first DRT entry. After reading the last entry, the HPI User
+** should again call saHpiDomainInfoGet() to get the update counter value. If
+** the update counter has not been incremented, no new entries have been
+** added.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiDrtEntryGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiEntryIdT EntryId,
+ SAHPI_OUT SaHpiEntryIdT *NextEntryId,
+ SAHPI_OUT SaHpiDrtEntryT *DrtEntry
+);
+
+/*******************************************************************************
+**
+** Name: saHpiDomainTagSet()
+**
+** Description:
+** This function allows an HPI User to set a descriptive tag for a particular
+** domain. The domain tag is an informational value that supplies an HPI User
+** with naming information for the domain.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** DomainTag - [in] Pointer to SaHpiTextBufferT containing the domain tag.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the SaHpiTextBufferT structure
+** passed as DomainTag is not valid. This would occur when:
+** * The DataType is not one of the enumerated values for that type, or
+** * The data field contains characters that are not legal according to
+** the value of DataType, or
+** * The Language is not one of the enumerated values for that type when
+** the DataType is SAHPI_TL_TYPE_UNICODE or SAHPI_TL_TYPE_TEXT.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the DomainTag pointer is passed in
+** as NULL.
+**
+** Remarks:
+** Typically, the HPI implementation will provide an appropriate default value
+** for the domain tag; this function is provided so that an HPI User can
+** override the default, if desired. The value of the domain tag may be
+** retrieved from the domain's information structure.
+**
+** The domain tag is not necessarily persistent, and may return to its default
+** value if the domain controller function for the domain restarts.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiDomainTagSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiTextBufferT *DomainTag
+);
+
+/*******************************************************************************
+**
+** Name: saHpiRptEntryGet()
+**
+** Description:
+** This function retrieves resource information for the specified entry of the
+** resource presence table. This function allows an HPI User to read the RPT
+** entry-by-entry.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** EntryId - [in] Identifier of the RPT entry to retrieve. Reserved EntryId
+** values:
+** * SAHPI_FIRST_ENTRY Get first entry.
+** * SAHPI_LAST_ENTRY Reserved as delimiter for end of list. Not a
+** valid entry identifier.
+** NextEntryId - [out] Pointer to location to store the EntryId of next entry
+** in RPT.
+** RptEntry - [out] Pointer to the structure to hold the returned RPT entry.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_NOT_PRESENT is returned when the:
+** * Entry identified by EntryId is not present.
+** * EntryId is SAHPI_FIRST_ENTRY and the RPT is empty.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the:
+** * RptEntry pointer is passed in as NULL.
+** * NextEntryId pointer is passed in as NULL.
+** * EntryId is an invalid reserved value such as SAHPI_LAST_ENTRY.
+**
+** Remarks:
+** If the EntryId parameter is set to SAHPI_FIRST_ENTRY, the first entry in
+** the RPT will be returned. When an entry is successfully retrieved,
+** NextEntryId will be set to the identifier of the next valid entry; however,
+** when the last entry has been retrieved, NextEntryId will be set to
+** SAHPI_LAST_ENTRY. To retrieve an entire list of entries, call this function
+** first with an EntryId of SAHPI_FIRST_ENTRY and then use the returned
+** NextEntryId in the next call. Proceed until the NextEntryId returned is
+** SAHPI_LAST_ENTRY.
+**
+** At initialization, an HPI User may not wish to turn on eventing, since the
+** context of the events, as provided by the RPT, is not known. In this
+** instance, if a FRU is inserted into the system while the RPT is being read
+** entry by entry, the resource associated with that FRU may be missed. (Keep
+** in mind that there is no specified ordering for the RPT entries.) The
+** update counter provides a means for insuring that no resources are missed
+** when stepping through the RPT. In order to use this feature, an HPI User
+** should invoke saHpiDomainInfoGet(), and get the update counter value before
+** retrieving the first RPT entry. After reading the last entry, an HPI User
+** should again invoke the saHpiDomainInfoGet() to get the RPT update counter
+** value. If the update counter has not been incremented, no new records have
+** been added.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiRptEntryGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiEntryIdT EntryId,
+ SAHPI_OUT SaHpiEntryIdT *NextEntryId,
+ SAHPI_OUT SaHpiRptEntryT *RptEntry
+);
+
+/*******************************************************************************
+**
+** Name: saHpiRptEntryGetByResourceId()
+**
+** Description:
+** This function retrieves resource information from the resource presence
+** table for the specified resource using its ResourceId.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained
+** using saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** RptEntry - [out] Pointer to structure to hold the returned RPT entry.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the RptEntry pointer is passed
+** in as NULL.
+**
+** Remarks:
+** Typically at start-up, the RPT is read entry-by-entry, using
+** saHpiRptEntryGet(). From this, an HPI User can establish the set of
+** ResourceIds to use for future calls to the HPI functions.
+**
+** However, there may be other ways of learning ResourceIds without first
+** reading the RPT. For example, resources may be added to the domain while
+** the system is running in response to a hot swap action. When a resource is
+** added, the application will receive a hot swap event containing the
+** ResourceId of the new resource. The application may then want to search the
+** RPT for more detailed information on the newly added resource. In this
+** case, the ResourceId can be used to locate the applicable RPT entry
+** information.
+**
+** Note that saHpiRptEntryGetByResourceId() is valid in any hot swap state,
+** except for SAHPI_HS_STATE_NOT_PRESENT.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiRptEntryGetByResourceId (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiRptEntryT *RptEntry
+);
+
+/*******************************************************************************
+**
+** Name: saHpiResourceSeveritySet()
+**
+** Description:
+** This function allows an HPI User to set the severity level applied to an
+** event issued if a resource unexpectedly becomes unavailable to the HPI. A
+** resource may become unavailable for several reasons including:
+** * The FRU associated with the resource is no longer present in the
+** system (a surprise extraction has occurred.)
+** * A catastrophic failure has occurred.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** Severity - [in] Severity level of event issued when the resource
+** unexpectedly becomes unavailable to the HPI.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_INVALID_PARAMS is returned when the value for Severity is not
+** one of the valid enumerated values for this type.
+**
+** Remarks:
+** Typically, the HPI implementation will provide an appropriate default value
+** for the resource severity, which may vary by resource; an HPI User can
+** override this default value by use of this function.
+**
+** If a resource is removed from, then re-added to the RPT (e.g., because of a
+** hot swap action), the HPI implementation may reset the value of the
+** resource severity.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceSeveritySet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSeverityT Severity
+);
+
+/*******************************************************************************
+**
+** Name: saHpiResourceTagSet()
+**
+** Description:
+** This function allows an HPI User to set the resource tag of an RPT entry
+** for a particular resource.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** ResourceTag - [in] Pointer to SaHpiTextBufferT containing the resource tag.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the SaHpiTextBufferT structure
+** passed as ResourceTag is not valid. This would occur when:
+** * The DataType is not one of the enumerated values for that type, or
+** * The data field contains characters that are not legal according to the
+** value of DataType, or
+** * The Language is not one of the enumerated values for that type when
+** the DataType is SAHPI_TL_TYPE_UNICODE or SAHPI_TL_TYPE_TEXT.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the ResourceTag pointer is passed
+** in as NULL.
+**
+** Remarks:
+** The resource tag is a data field within an RPT entry available to an HPI
+** User for associating application specific data with a resource. HPI User
+** supplied data is purely informational and is not used by the HPI
+** implementation, domain, or associated resource. For example, an HPI User
+** can set the resource tag to a "descriptive" value, which can be used to
+** identify the resource in messages to a human operator.
+**
+** Since the resource tag is contained within an RPT entry, its scope is
+** limited to a single domain. A resource that exists in more than one domain
+** will have independent resource tags within each domain.
+**
+** Typically, the HPI implementation will provide an appropriate default value
+** for the resource tag; this function is provided so that an HPI User can
+** override the default, if desired. The value of the resource tag may be
+** retrieved from the resource's RPT entry.
+**
+** If a resource is removed from, then re-added to the RPT (e.g., because of a
+** hot swap action), the HPI implementation may reset the value of the
+** resource tag.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceTagSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiTextBufferT *ResourceTag
+);
+
+/*******************************************************************************
+**
+** Name: saHpiResourceIdGet()
+**
+** Description:
+** This function returns the ResourceId of the resource associated with the
+** entity upon which the HPI User is running.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [out] Pointer to location to hold the returned ResourceId.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the ResourceId pointer is passed
+** in as NULL.
+** SA_ERR_HPI_NOT_PRESENT is returned if the entity the HPI User is running on
+** is not manageable in the addressed domain.
+** SA_ERR_HPI_UNKNOWN is returned if the domain controller cannot determine an
+** appropriate response. That is, there may be an appropriate ResourceId in
+** the domain to return, but it cannot be determined.
+**
+** Remarks:
+** This function must be issued within a session to a domain that includes a
+** resource associated with the entity upon which the HPI User is running, or
+** the SA_ERR_HPI_NOT_PRESENT return will be issued.
+**
+** Since entities are contained within other entities, there may be multiple
+** possible resources that could be returned to this call. For example, if
+** there is a ResourceId associated with a particular compute blade upon which
+** the HPI User is running, and another associated with the chassis which
+** contains the compute blade, either could logically be returned as an
+** indication of a resource associated with the entity upon which the HPI User
+** was running. The function should return the ResourceId of the "smallest"
+** resource that is associated with the HPI User. So, in the example above,
+** the function should return the ResourceId of the compute blade.
+**
+** Once the function has returned the ResourceId, the HPI User may issue
+** further HPI calls using that ResourceId to learn the type of resource that
+** been identified.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceIdGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_OUT SaHpiResourceIdT *ResourceId
+);
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogInfoGet()
+**
+** Description:
+** This function retrieves the current number of entries in the Event Log,
+** total size of the Event Log, the time of the most recent update to the
+** Event Log, the current value of the Event Log's clock (i.e., timestamp that
+** would be placed on an entry at this moment), the enabled/disabled status of
+** the Event Log (see Section 6.4.8 on page 57), the overflow flag, and the
+** action taken by the Event Log if an overflow occurs.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Identifier for the Resource containing the Event Log.
+** Set to SAHPI_UNSPECIFIED_RESOURCE_ID to address the Domain Event Log.
+** Info - [out] Pointer to the returned Event Log information.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not have an Event
+** Log capability (SAHPI_CAPABILITY_EVENT_LOG) set. Note this condition
+** only applies to Resource Event Logs. Domain Event Logs are mandatory,
+** and should not return this code.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the Info pointer is passed in as
+** NULL.
+**
+** Remarks:
+** The size field in the returned Event Log information indicates the maximum
+** number of entries that can be held in the Event Log. This number should be
+** constant for a particular Event Log.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogInfoGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiEventLogInfoT *Info
+);
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogEntryGet()
+**
+** Description:
+** This function retrieves an Event Log entry.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Identifier for the Resource containing the Event Log.
+** Set to SAHPI_UNSPECIFIED_RESOURCE_ID to address the Domain Event Log.
+** EntryId - [in] Identifier of event log entry to retrieve. Reserved values:
+** * SAHPI_OLDEST_ENTRY Oldest entry in the Event Log.
+** * SAHPI_NEWEST_ENTRY Newest entry in the Event Log.
+** * SAHPI_NO_MORE_ENTRIES Not valid for this parameter. Used only when
+** retrieving the next and previous EntryIds.
+** PrevEntryId - [out] Event Log entry identifier for the previous (older
+** adjacent) entry. Reserved values:
+** * SAHPI_OLDEST_ENTRY Not valid for this parameter. Used only for
+** the EntryId parameter.
+** * SAHPI_NEWEST_ENTRY Not valid for this parameter. Used only for
+** the EntryId parameter.
+** * SAHPI_NO_MORE_ENTRIES No more entries in the Event Log before the
+** one referenced by the EntryId parameter.
+** NextEntryId - [out] Event Log entry identifier for the next (newer
+** adjacent) entry. Reserved values:
+** * SAHPI_OLDEST_ENTRY Not valid for this parameter. Used only for
+** the EntryId parameter.
+** * SAHPI_NEWEST_ENTRY Not valid for this parameter. Used only for
+** the EntryId parameter.
+** * SAHPI_NO_MORE_ENTRIES No more entries in the Event Log after the one
+** referenced by the EntryId parameter.
+** EventLogEntry - [out] Pointer to retrieved Event Log entry.
+** Rdr - [in/out] Pointer to structure to receive resource data record
+** associated with the Event Log entry, if available. If NULL, no RDR data
+** will be returned.
+** RptEntry - [in/out] Pointer to structure to receive RPT entry associated
+** with the Event Log entry, if available. If NULL, no RPT entry data will
+** be returned.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not have an Event
+** Log capability (SAHPI_CAPABILITY_EVENT_LOG) set. Note this condition
+** only applies to Resource Event Logs. Domain Event Logs are mandatory,
+** and should not return this code.
+** SA_ERR_HPI_NOT_PRESENT is returned when:
+** * The Event Log has no entries.
+** * The entry identified by EntryId is not present.
+** SA_ERR_HPI_INVALID_PARAMS is returned when:
+** * Any of PrevEntryId, NextEntryId and EventLogEntry pointers are passed
+** in as NULL.
+** * SAHPI_NO_MORE_ENTRIES is passed in to EntryId.
+**
+** Remarks:
+** The special EntryIds SAHPI_OLDEST_ENTRY and SAHPI_NEWEST_ENTRY are used to
+** select the oldest and newest entries, respectively, in the Event Log being
+** read. A returned NextEntryId of SAHPI_NO_MORE_ENTRIES indicates that the
+** newest entry has been returned; there are no more entries going forward
+** (time-wise) in the Event Log. A returned PrevEntryId of
+** SAHPI_NO_MORE_ENTRIES indicates that the oldest entry has been returned.
+**
+** To retrieve an entire list of entries going forward (oldest entry to newest
+** entry) in the Event Log, call this function first with an EntryId of
+** SAHPI_OLDEST_ENTRY and then use the returned NextEntryId as the EntryId in
+** the next call. Proceed until the NextEntryId returned is
+** SAHPI_NO_MORE_ENTRIES.
+**
+** To retrieve an entire list of entries going backward (newest entry to
+** oldest entry) in the Event Log, call this function first with an EntryId of
+** SAHPI_NEWEST_ENTRY and then use the returned PrevEntryId as the EntryId in
+** the next call. Proceed until the PrevEntryId returned is
+** SAHPI_NO_MORE_ENTRIES.
+**
+** Event Logs may include RPT entries and resource data records associated
+** with the resource and sensor issuing an event along with the basic event
+** data in the Event Log. Because the system may be reconfigured after the
+** event was entered in the Event Log, this stored information may be
+** important to interpret the event. If the Event Log includes logged RPT
+** entries and/or RDRs, and if an HPI User provides a pointer to a structure
+** to receive this information, it will be returned along with the Event Log
+** entry.
+**
+** If an HPI User provides a pointer for an RPT entry, but the Event Log does
+** not include a logged RPT entry for the Event Log entry being returned,
+** RptEntry->ResourceCapabilities will be set to zero. No valid RptEntry will
+** have a zero Capabilities field value.
+**
+** If an HPI User provides a pointer for an RDR, but the Event Log does not
+** include a logged RDR for the Event Log entry being returned, Rdr->RdrType
+** will be set to SAHPI_NO_RECORD.
+**
+** The EntryIds returned via the PrevEntryId and NextEntryId parameters may
+** not be in sequential order, but will reflect the previous and next entries
+** in a chronological ordering of the Event Log, respectively.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogEntryGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiEventLogEntryIdT EntryId,
+ SAHPI_OUT SaHpiEventLogEntryIdT *PrevEntryId,
+ SAHPI_OUT SaHpiEventLogEntryIdT *NextEntryId,
+ SAHPI_OUT SaHpiEventLogEntryT *EventLogEntry,
+ SAHPI_INOUT SaHpiRdrT *Rdr,
+ SAHPI_INOUT SaHpiRptEntryT *RptEntry
+);
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogEntryAdd()
+**
+** Description:
+** This function enables an HPI user to add entries to the Event Log.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Identifier for the Resource containing the Event Log.
+** Set to SAHPI_UNSPECIFIED_RESOURCE_ID to address the Domain Event Log.
+** EvtEntry - [in] Pointer to event data to write to the Event Log. The Event
+** field must be of type SAHPI_ET_USER, and the Source field must be
+** SAHPI_UNSPECIFIED_RESOURCE_ID.
+**
+** Return Value:
+** SA_OK is returned if the event is successfully written in the Event Log;
+** otherwise, an error code is returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not have an Event
+** Log capability (SAHPI_CAPABILITY_EVENT_LOG) set. Note this condition
+** only applies to Resource Event Logs. Domain Event Logs are mandatory,
+** and should not return this code.
+** SA_ERR_HPI_INVALID_DATA is returned if the event DataLength is larger than
+** that supported by the implementation and reported in the Event Log info
+** record.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the:
+** * EvtEntry pointer is passed in as NULL.
+** * Event structure passed via the EvtEntry parameter is not an event of
+** type SAHPI_ET_USER with the Source field set to
+** SAHPI_UNSPECIFIED_RESOURCE_ID.
+** * The Severity is not one of the valid enumerated values for this type.
+** * SaHpiTextBufferT structure passed as part of the User Event structure
+** is not valid. This would occur when:
+** * The DataType is not one of the enumerated values for that type, or
+** * The data field contains characters that are not legal according to
+** the value of DataType, or
+** * The Language is not one of the enumerated values for that type when
+** the DataType is SAHPI_TL_TYPE_UNICODE or SAHPI_TL_TYPE_TEXT.
+** SA_ERR_HPI_OUT_OF_SPACE is returned if the event cannot be written to the
+** Event Log because the Event Log is full, and the Event Log
+** OverflowAction is SAHPI_EL_OVERFLOW_DROP.
+**
+** Remarks:
+** This function writes an event in the addressed Event Log. Nothing else is
+** done with the event.
+**
+** If the Event Log is full, overflow processing occurs as defined by the
+** Event Log's OverflowAction setting, reported in the Event Log info record.
+** If, due to an overflow condition, the event is not written, or if existing
+** events are overwritten, then the OverflowFlag in the Event Log info record
+** will be set, just as it would be if an internally generated event caused
+** an overflow condition. If the Event Log's OverflowAction is
+** SAHPI_EL_OVERFLOW_DROP, then an error will be returned
+** (SA_ERR_HPI_OUT_OF_SPACE) indicating that the saHpiEventLogEntryAdd()
+** function did not add the event to the Event Log. If the Event Log's
+** OverflowAction is SAHPI_EL_OVERFLOW_OVERWRITE, then the
+** saHpiEventLogEntryAdd() function will return SA_OK, indicating that the
+** event was added to the Event Log, even though an overflow occurred as a
+** side-effect of this operation. The overflow may be detected by checking
+** the OverflowFlag in the Event Log info record.
+**
+** Specific implementations of HPI may have restrictions on how much data may
+** be passed to the saHpiEventLogEntryAdd() function. The Event Log info
+** record reports the maximum DataLength that is supported by the Event Log
+** for User Events. If saHpiEventLogEntryAdd() is called with a User Event
+** that has a larger DataLength than is supported, the event will not be added
+** to the Event Log, and an error will be returned.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogEntryAdd (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiEventT *EvtEntry
+);
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogClear()
+**
+** Description:
+** This function erases the contents of the specified Event Log.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Identifier for the Resource containing the Event Log.
+** Set to SAHPI_UNSPECIFIED_RESOURCE_ID to address the Domain Event Log.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not have an Event
+** Log capability (SAHPI_CAPABILITY_EVENT_LOG) set. Note this condition
+** only applies to Resource Event Logs. Domain Event Logs are mandatory,
+** and should not return this code
+**
+** Remarks:
+** The OverflowFlag field in the Event Log info record will be reset when this
+** function is called.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogClear (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId
+);
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogTimeGet()
+**
+** Description:
+** This function retrieves the current time from the Event Log's clock. This
+** clock is used to timestamp entries written into the Event Log.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Identifier for the Resource containing the Event Log.
+** Set to SAHPI_UNSPECIFIED_RESOURCE_ID to address the Domain Event Log.
+** Time - [out] Pointer to the returned current Event Log time.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not have an Event
+** Log capability (SAHPI_CAPABILITY_EVENT_LOG) set. Note this condition
+** only applies to Resource Event Logs. Domain Event Logs are mandatory,
+** and should not return this code.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the Time pointer is passed in as
+** NULL.
+**
+** Remarks:
+** If the implementation cannot supply an absolute time value, then it may
+** supply a time relative to some system-defined epoch, such as system boot.
+** If the time value is less than or equal to SAHPI_TIME_MAX_RELATIVE, then it
+** is relative; if it is greater than SAHPI_TIME_MAX_RELATIVE, then it is
+** absolute. The HPI implementation must provide valid timestamps for Event
+** Log entries, using a default time base if no time has been set. Thus, the
+** value SAHPI_TIME_UNSPECIFIED is never returned.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogTimeGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiTimeT *Time
+);
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogTimeSet()
+**
+** Description:
+** This function sets the Event Log's clock, which is used to timestamp events
+** written into the Event Log.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Identifier for the Resource containing the Event Log.
+** Set to SAHPI_UNSPECIFIED_RESOURCE_ID to address the Domain Event Log.
+** Time - [in] Time to which the Event Log clock should be set.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not have an Event
+** Log capability (SAHPI_CAPABILITY_EVENT_LOG) set. Note this condition
+** only applies to Resource Event Logs. Domain Event Logs are mandatory,
+** and should not return this code.
+** SA_ERR_HPI_INVALID_PARAMS is returned when the Time parameter is set to
+** SAHPI_TIME_UNSPECIFIED.
+** For situations when the underlying implementation cannot represent a time
+** value that is specified in Time, SA_ERR_HPI_INVALID_DATA is returned.
+**
+** Remarks:
+** If the Time parameter value is less than or equal to
+** SAHPI_TIME_MAX_RELATIVE, but not SAHPI_TIME_UNSPECIFIED, then it is
+** relative; if it is greater than SAHPI_TIME_MAX_RELATIVE, then it is
+** absolute. Setting this parameter to the value SAHPI_TIME_UNSPECIFIED is
+** invalid and will result in an error return code of
+** SA_ERR_HPI_INVALID_PARAMS.
+**
+** Entries placed in the Event Log after this function is called will have
+** Event Log timestamps (i.e., the Timestamp field in the SaHpiEventLogEntryT
+** structure) based on the new time. Setting the clock does not affect
+** existing Event Log entries. If the time is set to a relative time,
+** subsequent entries placed in the Event Log will have an Event Log timestamp
+** expressed as a relative time; if the time is set to an absolute time,
+** subsequent entries will have an Event Log timestamp expressed as an
+** absolute time.
+**
+** This function only sets the Event Log time clock and does not have any
+** direct bearing on the timestamps placed on events (i.e., the Timestamp
+** field in the SaHpiEventT structure), or the timestamps placed in the domain
+** RPT info record. Setting the clocks used to generate timestamps other than
+** Event Log timestamps is implementation-dependent, and should be documented
+** by the HPI implementation provider.
+**
+** Some underlying implementations may not be able to handle the same relative
+** and absolute time ranges, as those defined in HPI. Such limitations will
+** be documented. When a time value is set in a region that is not supported
+** by the implementation, an error code of SA_ERR_HPI_INVALID_DATA will be
+** returned.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogTimeSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiTimeT Time
+);
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogStateGet()
+**
+** Description:
+** This function enables an HPI User to get the Event Log state.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Identifier for the Resource containing the Event Log.
+** Set to SAHPI_UNSPECIFIED_RESOURCE_ID to address the Domain Event Log.
+** EnableState - [out] Pointer to the current Event Log enable state. True
+** indicates that the Event Log is enabled; False indicates that it is
+** disabled.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not have an Event
+** Log capability (SAHPI_CAPABILITY_EVENT_LOG) set. Note this condition
+** only applies to Resource Event Logs. Domain Event Logs are mandatory,
+** and should not return this code.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the EnableState pointer is passed
+** in as NULL.
+**
+** Remarks:
+** If the Event Log is disabled, no events generated within the HPI
+** implementation will be added to the Event Log. Events may still be added to
+** the Event Log with the saHpiEventLogEntryAdd() function. When the Event Log
+** is enabled, events may be automatically added to the Event Log as they are
+** generated in a resource or a domain, however, it is implementation-specific
+** which events are automatically added to any Event Log.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogStateGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiBoolT *EnableState
+);
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogStateSet()
+**
+** Description:
+** This function enables an HPI User to set the Event Log enabled state.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Identifier for the Resource containing the Event Log.
+** Set to SAHPI_UNSPECIFIED_RESOURCE_ID to address the Domain Event Log.
+** EnableState - [in] Event Log state to be set. True indicates that the Event
+** Log is to be enabled; False indicates that it is to be disabled.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not have an Event
+** Log capability (SAHPI_CAPABILITY_EVENT_LOG) set. Note this condition
+** only applies to Resource Event Logs. Domain Event Logs are mandatory,
+** and should not return this code.
+**
+** Remarks:
+** If the Event Log is disabled no events generated within the HPI
+** implementation will be added to the Event Log. Events may still be added to
+** the Event Log using the saHpiEventLogEntryAdd() function. When the Event
+** Log is enabled events may be automatically added to the Event Log as they
+** are generated in a resource or a domain. The actual set of events that are
+** automatically added to any Event Log is implementation-specific.
+**
+** Typically, the HPI implementation will provide an appropriate default value
+** for this parameter, which may vary by resource. This function is provided
+** so that an HPI User can override the default, if desired.
+**
+** If a resource hosting an Event Log is re-initialized (e.g., because of a
+** hot swap action), the HPI implementation may reset the value of this
+** parameter.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogStateSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiBoolT EnableState
+);
+
+/*******************************************************************************
+**
+** Name: saHpiEventLogOverflowReset()
+**
+** Description:
+** This function resets the OverflowFlag in the Event Log info record of the
+** specified Event Log.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Identifier for the Resource containing the Event Log.
+** Set to SAHPI_UNSPECIFIED_RESOURCE_ID to address the Domain Event Log.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_INVALID_CMD is returned if the implementation does not support
+** independent clearing of the OverflowFlag on this Event Log.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not have an Event
+** Log capability (SAHPI_CAPABILITY_EVENT_LOG) set. Note this condition
+** only applies to Resource Event Logs. Domain Event Logs are mandatory,
+** and should not return this code.
+**
+** Remarks:
+** The only effect of this function is to clear the OverflowFlag field in the
+** Event Log info record for the specified Event Log. If the Event Log is
+** still full, the OverflowFlag will be set again as soon as another entry
+** needs to be added to the Event Log.
+**
+** Some Event Log implementations may not allow resetting of the OverflowFlag
+** except as a by-product of clearing the entire Event Log with the
+** saHpiEventLogClear() function. Such an implementation will return the
+** error code, SA_ERR_HPI_INVALID_CMD to this function. The OverflowResetable
+** flag in the Event Log info record indicates whether or not the
+** implementation supports resetting the OverflowFlag without clearing the
+** Event Log.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventLogOverflowReset (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId
+);
+
+/*******************************************************************************
+**
+** Name: saHpiSubscribe()
+**
+** Description:
+** This function allows an HPI User to subscribe for events. This single call
+** provides subscription to all session events, regardless of event type or
+** event severity.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_DUPLICATE is returned when a subscription is already in place
+** for this session.
+**
+** Remarks:
+** Only one subscription is allowed per session, and additional subscribers
+** will receive an appropriate error code. No event filtering will be done by
+** the HPI implementation.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSubscribe (
+ SAHPI_IN SaHpiSessionIdT SessionId
+);
+
+/*******************************************************************************
+**
+** Name: saHpiUnsubscribe()
+**
+** Description:
+** This function removes the event subscription for the session.
+**
+** Parameters:
+** SessionId - [in] Session for which event subscription will be closed.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_INVALID_REQUEST is returned if the session is not currently
+** subscribed for events.
+**
+** Remarks:
+** After removal of a subscription, additional saHpiEventGet() calls will not
+** be allowed on the session unless an HPI User re-subscribes for events on
+** the session first. Any events that are still in the event queue when this
+** function is called will be cleared from it.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiUnsubscribe (
+ SAHPI_IN SaHpiSessionIdT SessionId
+);
+
+/*******************************************************************************
+**
+** Name: saHpiEventGet()
+**
+** Description:
+** This function allows an HPI User to get an event. This call is only valid
+** within a session that has subscribed for events.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** Timeout - [in] The number of nanoseconds to wait for an event to arrive.
+** Reserved time out values:
+** * SAHPI_TIMEOUT_IMMEDIATE Time out immediately if there are no events
+** available (non-blocking call).
+** * SAHPI_TIMEOUT_BLOCK Call should not return until an event is
+** retrieved.
+** Event - [out] Pointer to the next available event.
+** Rdr - [in/out] Pointer to structure to receive the resource data associated
+** with the event. If NULL, no RDR will be returned.
+** RptEntry - [in/out] Pointer to structure to receive the RPT entry
+** associated with the resource that generated the event. If NULL, no RPT
+** entry will be returned.
+** EventQueueStatus - [in/out] Pointer to location to store event queue
+** status. If NULL, event queue status will not be returned.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_INVALID_REQUEST is returned if an HPI User is not currently
+** subscribed for events in this session.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the:
+** * Event pointer is passed in as NULL.
+** * Timeout parameter is not set to SAHPI_TIMEOUT_BLOCK,
+** SAHPI_TIMEOUT_IMMEDIATE or a positive value.
+** SA_ERR_HPI_TIMEOUT is returned if no event is available to return within
+** the timeout period. If SAHPI_TIMEOUT_IMMEDIATE is passed in the
+** Timeout parameter, this error return will be used if there is no event
+** queued when the function is called.
+**
+** Remarks:
+** SaHpiEventGet() will also return an EventQueueStatus flag to an HPI User.
+** This flag indicates whether or not a queue overflow has occurred. The
+** overflow flag is set if any events were unable to be queued because of
+** space limitations in the interface implementation. The overflow flag is
+** reset whenever saHpiEventGet() is called.
+**
+** If there are one or more events on the event queue when this function is
+** called, it will immediately return the next event on the queue. Otherwise,
+** if the Timeout parameter is SAHPI_TIMEOUT_IMMEDIATE, it will return
+** SA_ERR_HPI_TIMEOUT immediately. Otherwise, it will block for time
+** specified by the timeout parameter; if an event is added to the queue
+** within that time it will be returned immediately; if not, saHpiEventGet()
+** will return SA_ERR_HPI_TIMEOUT. If the Timeout parameter is
+** SAHPI_TIMEOUT_BLOCK, the saHpiEventGet() will block indefinitely, until
+** an event becomes available, and then return that event. This provides for
+** notification of events as they occur.
+**
+** If an HPI User provides a pointer for an RPT entry, but the event does not
+** include a valid ResourceId for a resource in the domain (e.g., OEM or USER
+** type event), then the RptEntry->ResourceCapabilities field will be set to
+** zero. No valid RPT entry will have a zero ResourceCapabilities.
+**
+** If an HPI User provides a pointer for an RDR, but there is no valid RDR
+** associated with the event being returned (e.g., returned event is not a
+** sensor event), then the Rdr->RdrType field will be set to SAHPI_NO_RECORD.
+**
+** The timestamp reported in the returned event structure is the best
+** approximation an implementation has to when the event actually occurred.
+** The implementation may need to make an approximation (such as the time the
+** event was placed on the event queue) because it may not have access to the
+** actual time the event occurred. The value SAHPI_TIME_UNSPECIFIED indicates
+** that the time of the event cannot be determined.
+**
+** If the implementation cannot supply an absolute timestamp, then it may
+** supply a timestamp relative to some system-defined epoch, such as system
+** boot. If the timestamp value is less than or equal to
+** SAHPI_TIME_MAX_RELATIVE, but not SAHPI_TIME_UNSPECIFIED, then it is
+** relative; if it is greater than SAHPI_TIME_MAX_RELATIVE, then it is
+** absolute.
+**
+** If an HPI User passes a NULL pointer for the returned EventQueueStatus
+** pointer, the event status will not be returned, but the overflow flag, if
+** set, will still be reset. Thus, if an HPI User needs to know about event
+** queue overflows, the EventQueueStatus parameter should never be NULL, and
+** the overflow flag should be checked after every call to saHpiEventGet().
+**
+** If saHpiEventGet() is called with a timeout value other than
+** SAHPI_TIMEOUT_IMMEDIATE, and the session is subsequently closed from
+** another thread, this function will return with SA_ERR_HPI_INVALID_SESSION.
+** If saHpiEventGet() is called with a timeout value other than
+** SAHPI_TIMEOUT_IMMEDIATE, and an HPI User subsequently calls
+** saHpiUnsubscribe() from another thread, this function will return with
+** SA_ERR_HPI_INVALID_REQUEST.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiTimeoutT Timeout,
+ SAHPI_OUT SaHpiEventT *Event,
+ SAHPI_INOUT SaHpiRdrT *Rdr,
+ SAHPI_INOUT SaHpiRptEntryT *RptEntry,
+ SAHPI_INOUT SaHpiEvtQueueStatusT *EventQueueStatus
+);
+
+/*******************************************************************************
+**
+** Name: saHpiEventAdd()
+**
+** Description:
+** This function enables an HPI User to add events to the HPI domain
+** identified by the SessionId. The domain controller processes an event
+** added with this function as if the event originated from within the
+** domain. The domain controller will attempt to publish events to all active
+** event subscribers and will attempt to log events in the Domain Event Log,
+** if room is available.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** EvtEntry - [in] Pointer to event to add to the domain. Event must be of
+** type SAHPI_ET_USER, and the Source field must be
+** SAHPI_UNSPECIFIED_RESOURCE_ID.
+**
+** Return Value:
+** SA_OK is returned if the event is successfully added to the domain;
+** otherwise, an error code is returned.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the:
+** * EvtEntry parameter is NULL.
+** * Event structure passed via the EvtEntry parameter is not an event of
+** type SAHPI_ET_USER with the Source field being
+** SAHPI_UNSPECIFIED_RESOURCE_ID.
+** * Event structure passed via the EvtEntry parameter has an invalid
+** Severity.
+** * SaHpiTextBufferT structure passed as part of the User Event structure
+** is not valid. This would occur when:
+** * The DataType is not one of the enumerated values for that type, or
+** * The data field contains characters that are not legal according to
+** the value of DataType, or
+** * The Language is not one of the enumerated values for that type when
+** the DataType is SAHPI_TL_TYPE_UNICODE or SAHPI_TL_TYPE_TEXT.
+** SA_ERR_HPI_INVALID_DATA is returned if the event data does not meet
+** implementation-specific restrictions on how much event data may be
+** provided in a SAHPI_ET_USER event.
+**
+** Remarks:
+** Specific implementations of HPI may have restrictions on how much data may
+** be included in a SAHPI_ET_USER event. If more event data is provided than
+** can be processed, an error will be returned. The event data size
+** restriction for the SAHPI_ET_USER event type is provided in the
+** UserEventMaxSize field in the domain Event Log info structure. An HPI User
+** should call the function saHpiEventLogInfoGet() to retrieve the Event
+** Log info structure.
+**
+** The domain controller will attempt to publish the event to all sessions
+** within the domain with active event subscriptions; however, a session's
+** event queue may overflow due to the addition of the new event.
+**
+** The domain controller will attempt to log the event in the Domain Event
+** Log; however, the Domain Event Log may overflow due to the addition of the
+** new event
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiEventAdd (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiEventT *EvtEntry
+);
+
+/*******************************************************************************
+**
+** Name: saHpiAlarmGetNext()
+**
+** Description:
+** This function allows retrieval of an alarm from the current set of alarms
+** held in the Domain Alarm Table (DAT).
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** Severity - [in] Severity level of alarms to retrieve. Set to
+** SAHPI_ALL_SEVERITIES to retrieve alarms of any severity; otherwise, set
+** to requested severity level.
+** UnacknowledgedOnly - [in] Set to True to indicate only unacknowledged
+** alarms should be returned. Set to False to indicate either an
+** acknowledged or unacknowledged alarm may be returned.
+** Alarm - [in/out] Pointer to the structure to hold the returned alarm entry.
+** Also, on input, Alarm->AlarmId and Alarm->Timestamp are used to
+** identify the previous alarm.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_INVALID_PARAMS is returned when:
+** * Severity is not one of the valid enumerated values for this type.
+** * The Alarm parameter is passed in as NULL.
+** SA_ERR_HPI_NOT_PRESENT is returned:
+** * If there are no additional alarms in the DAT that meet the criteria
+** specified by the Severity and UnacknowledgedOnly parameters.
+** * If the passed Alarm->AlarmId field was set to SAHPI_FIRST_ENTRY and
+** there are no alarms in the DAT that meet the criteria specified by
+** the Severity and UnacknowledgedOnly parameters.
+** SA_ERR_HPI_INVALID_DATA is returned if the passed Alarm->AlarmId matches an
+** alarm in the DAT, but the passed Alarm->Timestamp does not match the
+** timestamp of that alarm.
+**
+** Remarks:
+** All alarms contained in the DAT are maintained in the order in which they
+** were added. This function will return the next alarm meeting the
+** specifications given by an HPI User that was added to the DAT after the
+** alarm whose AlarmId and Timestamp is passed by an HPI User, even if the
+** alarm associated with the AlarmId and Timestamp has been deleted. If
+** SAHPI_FIRST_ENTRY is passed as the AlarmId, the first alarm in the DAT
+** meeting the specifications given by an HPI User is returned.
+**
+** Alarm selection can be restricted to only alarms of a specified severity,
+** and/or only unacknowledged alarms.
+**
+** To retrieve all alarms contained within the DAT meeting specific
+** requirements, call saHpiAlarmGetNext() with the Alarm->AlarmId field set to
+** SAHPI_FIRST_ENTRY and the Severity and UnacknowledgedOnly parameters set to
+** select what alarms should be returned. Then, repeatedly call
+** saHpiAlarmGetNext() passing the previously returned alarm as the Alarm
+** parameter, and the same values for Severity and UnacknowledgedOnly until
+** the function returns with the error code SA_ERR_HPI_NOT_PRESENT.
+**
+** SAHPI_FIRST_ENTRY and SAHPI_LAST_ENTRY are reserved AlarmId values, and
+** will never be assigned to an alarm in the DAT.
+**
+** The elements AlarmId and Timestamp are used in the Alarm parameter to
+** identify the previous alarm; the next alarm added to the table after this
+** alarm that meets the Severity and UnacknowledgedOnly requirements will be
+** returned. Alarm->AlarmId may be set to SAHPI_FIRST_ENTRY to select the
+** first alarm in the DAT meeting the Severity and UnacknowledgedOnly
+** requirements. If Alarm->AlarmId is SAHPI_FIRST_ENTRY, then
+** Alarm->Timestamp is ignored.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAlarmGetNext(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiSeverityT Severity,
+ SAHPI_IN SaHpiBoolT UnacknowledgedOnly,
+ SAHPI_INOUT SaHpiAlarmT *Alarm
+);
+
+/*******************************************************************************
+**
+** Name: saHpiAlarmGet()
+**
+** Description:
+** This function allows retrieval of a specific alarm in the Domain Alarm
+** Table (DAT) by referencing its AlarmId.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** AlarmId - [in] AlarmId of the alarm to be retrieved from the DAT.
+** Alarm - [out] Pointer to the structure to hold the returned alarm entry.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_NOT_PRESENT is returned if the requested AlarmId does not
+** correspond to an alarm contained in the DAT.
+** SA_ERR_HPI_INVALID_PARAMS is returned when the Alarm parameter is passed in
+** as NULL.
+**
+** Remarks:
+** SAHPI_FIRST_ENTRY and SAHPI_LAST_ENTRY are reserved AlarmId values, and
+** will never be assigned to an alarm in the DAT.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAlarmGet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiAlarmIdT AlarmId,
+ SAHPI_OUT SaHpiAlarmT *Alarm
+);
+
+/*******************************************************************************
+**
+** Name: saHpiAlarmAcknowledge()
+**
+** Description:
+** This function allows an HPI User to acknowledge a single alarm entry or a
+** group of alarm entries by severity.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** AlarmId - [in] Identifier of the alarm to be acknowledged. Reserved
+** AlarmId values:
+** * SAHPI_ENTRY_UNSPECIFIED Ignore this parameter.
+** Severity - [in] Severity level of alarms to acknowledge. Ignored unless
+** AlarmId is SAHPI_ENTRY_UNSPECIFIED.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_NOT_PRESENT is returned if an alarm entry identified by the
+** AlarmId parameter does not exist in the DAT.
+** SA_ERR_HPI_INVALID_PARAMS is returned if AlarmId is SAHPI_ENTRY_UNSPECIFIED
+** and Severity is not one of the valid enumerated values for this type.
+**
+** Remarks:
+** An HPI User acknowledges an alarm to indicate that it is aware of the alarm
+** and to influence platform-specific alarm annunciation that may be provided
+** by the implementation. Typically, an implementation ignores acknowledged
+** alarms when announcing an alarm on annunciation devices such as audible
+** sirens and dry contact closures. However, alarm annunciation is
+** implementation-specific.
+**
+** An acknowledged alarm will have the Acknowledged field in the alarm entry
+** set to True.
+**
+** Alarms are acknowledged by one of two ways: a single alarm entry by AlarmId
+** regardless of severity or as a group of alarm entries by Severity
+** regardless of AlarmId.
+**
+** To acknowledge all alarms contained within the DAT, set the Severity
+** parameter to SAHPI_ALL_SEVERITIES, and set the AlarmId parameter to
+** SAHPI_ENTRY_UNSPECIFIED.
+**
+** To acknowledge all alarms of a specific severity contained within the DAT,
+** set the Severity parameter to the appropriate value, and set the AlarmId
+** parameter to SAHPI_ENTRY_UNSPECIFIED.
+**
+** To acknowledge a single alarm entry, set the AlarmId parameter to a value
+** other than SAHPI_ENTRY_UNSPECIFIED. The AlarmId must be a valid identifier
+** for an alarm entry present in the DAT at the time of the function call.
+**
+** If an alarm has been previously acknowledged, acknowledging it again has no
+** effect. However, this is not an error.
+**
+** If the AlarmId parameter has a value other than SAHPI_ENTRY_UNSPECIFIED,
+** the Severity parameter is ignored.
+**
+** If the AlarmId parameter is passed as SAHPI_ENTRY_UNSPECIFIED, and no
+** alarms are present that meet the requested Severity, this function will
+** have no effect. However, this is not an error.
+**
+** SAHPI_ENTRY_UNSPECIFIED is defined as the same value as SAHPI_FIRST_ENTRY,
+** so using either symbol will have the same effect. However,
+** SAHPI_ENTRY_UNSPECIFIED should be used with this function for clarity.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAlarmAcknowledge(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiAlarmIdT AlarmId,
+ SAHPI_IN SaHpiSeverityT Severity
+);
+
+/*******************************************************************************
+**
+** Name: saHpiAlarmAdd()
+**
+** Description:
+** This function is used to add a User Alarm to the DAT.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** Alarm - [in/out] Pointer to the alarm entry structure that contains the new
+** User Alarm to add to the DAT.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_INVALID_PARAMS is returned when the Alarm pointer is passed in
+** as NULL.
+** SA_ERR_HPI_INVALID_PARAMS is returned when Alarm->Severity is not one of
+** the following enumerated values: SAHPI_MINOR, SAHPI_MAJOR, or
+** SAHPI_CRITICAL.
+** SA_ERR_HPI_INVALID_PARAMS is returned when Alarm->AlarmCond.Type is not
+** SAHPI_STATUS_COND_TYPE_USER.
+** SA_ERR_HPI_OUT_OF_SPACE is returned if the DAT is not able to add an
+** additional User Alarm due to space limits or limits imposed on the
+** number of User Alarms permitted in the DAT.
+**
+** Remarks:
+** The AlarmId, and Timestamp fields within the Alarm parameter are not used
+** by this function. Instead, on successful completion, these fields are set
+** to new values associated with the added alarm.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAlarmAdd(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_INOUT SaHpiAlarmT *Alarm
+);
+
+/*******************************************************************************
+**
+** Name: saHpiAlarmDelete()
+**
+** Description:
+** This function allows an HPI User to delete a single User Alarm or a group
+** of User Alarms from the DAT. Alarms may be deleted individually by
+** specifying a specific AlarmId, or they may be deleted as a group by
+** specifying a Severity.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** AlarmId - [in] Alarm identifier of the alarm entry to delete. Reserved
+** values:
+** * SAHPI_ENTRY_UNSPECIFIED Ignore this parameter.
+** Severity - [in] Severity level of alarms to delete. Ignored unless AlarmId
+** is SAHPI_ENTRY_UNSPECIFIED.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_INVALID_PARAMS is returned if AlarmId is SAHPI_ENTRY_UNSPECIFIED
+** and Severity is not one of the valid enumerated values for this type.
+** SA_ERR_HPI_NOT_PRESENT is returned if an alarm entry identified by the
+** AlarmId parameter does not exist in the DAT.
+** SA_ERR_HPI_READ_ONLY is returned if the AlarmId parameter indicates a
+** non-User Alarm.
+**
+** Remarks:
+** Only User Alarms added to the DAT can be deleted. When deleting alarms by
+** severity, only User Alarms of the requested severity will be deleted.
+**
+** To delete a single, specific alarm, set the AlarmId parameter to a value
+** representing an actual User Alarm in the DAT. The Severity parameter is
+** ignored when the AlarmId parameter is set to a value other than
+** SAHPI_ENTRY_UNSPECIFIED.
+**
+** To delete a group of User Alarms, set the AlarmId parameter to
+** SAHPI_ENTRY_UNSPECIFIED, and set the Severity parameter to identify which
+** severity of alarms should be deleted. To clear all User Alarms contained
+** within the DAT, set the Severity parameter to SAHPI_ALL_SEVERITIES.
+**
+** If the AlarmId parameter is passed as SAHPI_ENTRY_UNSPECIFIED, and no User
+** Alarms are present that meet the specified Severity, this function will
+** have no effect. However, this is not an error.
+**
+** SAHPI_ENTRY_UNSPECIFIED is defined as the same value as SAHPI_FIRST_ENTRY,
+** so using either symbol will have the same effect. However,
+** SAHPI_ENTRY_UNSPECIFIED should be used with this function for clarity.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAlarmDelete(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiAlarmIdT AlarmId,
+ SAHPI_IN SaHpiSeverityT Severity
+);
+
+/*******************************************************************************
+**
+** Name: saHpiRdrGet()
+**
+** Description:
+** This function returns a resource data record from the addressed resource.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** EntryId - [in] Identifier of the RDR entry to retrieve. Reserved EntryId
+** values:
+** * SAHPI_FIRST_ENTRY Get first entry.
+** * SAHPI_LAST_ENTRY Reserved as delimiter for end of list. Not a
+** valid entry identifier.
+** NextEntryId - [out] Pointer to location to store EntryId of next entry in
+** RDR repository.
+** Rdr - [out] Pointer to the structure to receive the requested resource data
+** record.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource contains no RDR records
+** (and thus does not have the SAHPI_CAPABILITY_RDR flag set in its RPT
+** entry).
+** SA_ERR_HPI_NOT_PRESENT is returned if an EntryId (other than
+** SAHPI_FIRST_ENTRY) is passed that does not correspond to an actual
+** EntryId in the resource's RDR repository.
+** SA_ERR_HPI_INVALID_PARAMS is returned if:
+** * SAHPI_LAST_ENTRY is passed in to EntryId.
+** * NextEntryId pointer is passed in as NULL.
+** * Rdr pointer is passed in as NULL.
+**
+** Remarks:
+** Submitting an EntryId of SAHPI_FIRST_ENTRY results in the first RDR being
+** read. A returned NextEntryId of SAHPI_LAST_ENTRY indicates the last RDR has
+** been returned. A successful retrieval will include the next valid EntryId.
+** To retrieve the entire list of RDRs, call this function first with an
+** EntryId of SAHPI_FIRST_ENTRY and then use the returned NextEntryId in the
+** next call. Proceed until the NextEntryId returned is SAHPI_LAST_ENTRY.
+**
+** A resource's RDR repository is static over the lifetime of the resource;
+** therefore no precautions are required against changes to the content of the
+** RDR repository while it is being accessed.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiRdrGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiEntryIdT EntryId,
+ SAHPI_OUT SaHpiEntryIdT *NextEntryId,
+ SAHPI_OUT SaHpiRdrT *Rdr
+);
+
+/*******************************************************************************
+**
+** Name: saHpiRdrGetByInstrumentId()
+**
+** Description:
+** This function returns the Resource Data Record (RDR) for a specific
+** management instrument hosted by the addressed resource.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** RdrType - [in] Type of RDR being requested.
+** InstrumentId - [in] Instrument number identifying the specific RDR to be
+** returned. This is a sensor number, control number, watchdog timer
+** number, IDR number, or annunciator number, depending on the value of
+** the RdrType parameter.
+** Rdr - [out] Pointer to the structure to receive the requested RDR.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the:
+** * Resource contains no RDR records (and thus does not have the
+** SAHPI_CAPABILITY_RDR flag set in its RPT entry).
+** * Type of management instrument specified in the RdrType parameter is
+** not supported by the resource, as indicated by the Capability field
+** in its RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the specific management instrument
+** identified in the InstrumentId parameter is not present in the addressed
+** resource.
+** SA_ERR_HPI_INVALID_PARAMS is returned when the:
+** * RdrType parameter is not a valid enumerated value for the type.
+** * RdrType is SAHPI_NO_RECORD.
+** * Rdr pointer is passed in as NULL.
+**
+** Remarks:
+** The RDR to be returned is identified by RdrType (sensor, control, watchdog
+** timer, inventory data repository, or annunciator) and InstrumentId (sensor
+** number, control number, watchdog number, IDR number, or annunciator number)
+** for the specific management instrument for the RDR being requested.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiRdrGetByInstrumentId (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiRdrTypeT RdrType,
+ SAHPI_IN SaHpiInstrumentIdT InstrumentId,
+ SAHPI_OUT SaHpiRdrT *Rdr
+);
+
+/*******************************************************************************
+**
+** Name: saHpiSensorReadingGet()
+**
+** Description:
+** This function is used to retrieve a sensor reading.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** SensorNum - [in] Sensor number for which the sensor reading is being
+** retrieved.
+** Reading - [in/out] Pointer to a structure to receive sensor reading values
+** If NULL, the sensor reading value will not be returned.
+** EventState - [in/out] Pointer to location to receive sensor event states.
+** If NULL, the sensor event states will not be returned.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support sensors,
+** as indicated by SAHPI_CAPABILITY_SENSOR in the resource's RPT entry.
+** SA_ERR_HPI_INVALID_REQUEST is returned if the sensor is currently disabled.
+** SA_ERR_HPI_NOT_PRESENT is returned if the sensor is not present.
+**
+** Remarks:
+** For sensors that return a type of SAHPI_SENSOR_READING_TYPE_BUFFER, the
+** format of the returned data buffer is implementation-specific.
+**
+** If the sensor does not provide a reading, the Reading structure returned by
+** the saHpiSensorReadingGet() function will indicate the reading is not
+** supported by setting the IsSupported flag to False.
+**
+** If the sensor does not support any event states, a value of 0x0000 will be
+** returned for the EventState value. This is indistinguishable from the
+** return for a sensor that does support event states, but currently has no
+** event states asserted. The Sensor RDR Events field can be examined to
+** determine if the sensor supports any event states.
+**
+** It is legal for both the Reading parameter and the EventState parameter to
+** be NULL. In this case, no data is returned other than the return code.
+** This can be used to determine if a sensor is present and enabled without
+** actually returning current sensor data. If the sensor is present and
+** enabled, SA_OK is returned; otherwise, an error code is returned.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorReadingGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_INOUT SaHpiSensorReadingT *Reading,
+ SAHPI_INOUT SaHpiEventStateT *EventState
+);
+
+/*******************************************************************************
+**
+** Name: saHpiSensorThresholdsGet()
+**
+** Description:
+** This function retrieves the thresholds for the given sensor.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** SensorNum - [in] Sensor number for which threshold values are being
+** retrieved.
+** SensorThresholds - [out] Pointer to returned sensor thresholds.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support sensors,
+** as indicated by SAHPI_CAPABILITY_SENSOR in the resource's RPT entry.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the SensorThresholds pointer is
+** passed in as NULL.
+** SA_ERR_HPI_INVALID_CMD is returned if:
+** * Getting a threshold on a sensor that is not a threshold type.
+** * The sensor does not have any readable threshold values.
+** SA_ERR_HPI_NOT_PRESENT is returned if the sensor is not present.
+**
+** Remarks:
+** This function only applies to sensors that support readable thresholds, as
+** indicated by the IsAccessible field in the SaHpiSensorThdDefnT structure
+** of the sensor's RDR being set to True and the ReadThold field in the same
+** structure having a non-zero value.
+**
+** For thresholds that do not apply to the identified sensor, the IsSupported
+** flag of the threshold value field will be set to False.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorThresholdsGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_OUT SaHpiSensorThresholdsT *SensorThresholds
+);
+
+
+/*******************************************************************************
+**
+** Name: saHpiSensorThresholdsSet()
+**
+** Description:
+** This function sets the specified thresholds for the given sensor.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** SensorNum - [in] Sensor number for which threshold values are being set.
+** SensorThresholds - [in] Pointer to the sensor thresholds values being set.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_INVALID_DATA is returned if any of the threshold values are
+** provided in a format not supported by the sensor.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support sensors,
+** as indicated by SAHPI_CAPABILITY_SENSOR in the resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the sensor is not present.
+** SA_ERR_HPI_INVALID_CMD is returned when:
+** * Writing to a threshold that is not writable.
+** * Setting a threshold on a sensor that is not a threshold type as
+** indicated by the IsAccessible field of the SaHpiSensorThdDefnT
+** structure.
+** * Setting a threshold outside of the Min-Max range as defined by the
+** Range field of the SensorDataFormat of the RDR.
+** SA_ERR_HPI_INVALID_DATA is returned when:
+** * Thresholds are set out-of-order (see Remarks).
+** * A negative hysteresis value is provided.
+**
+** Remarks:
+** This function only applies to sensors that support writable thresholds,
+** as indicated by the IsAccessible field in the SaHpiSensorThdDefnT
+** structure of the sensor's RDR being set to True and the WriteThold field
+** in the same structure having a non-zero value.
+**
+** The type of value provided for each threshold setting must correspond to
+** the reading format supported by the sensor, as defined by the reading type
+** in the DataFormat field of the sensor's RDR (saHpiSensorRecT).
+**
+** Sensor thresholds cannot be set outside of the range defined by the Range
+** field of the SensorDataFormat of the Sensor RDR. If SAHPI_SRF_MAX
+** indicates that a maximum reading exists, no sensor threshold may be set
+** greater than the Max value. If SAHPI_SRF_MIN indicates that a minimum
+** reading exists, no sensor threshold may be set less than the Min value.
+**
+** Thresholds are required to be set progressively in-order, so that
+** Upper Critical >= Upper Major >= Upper Minor >= Lower Minor >= Lower Major
+** >= Lower Critical.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorThresholdsSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_IN SaHpiSensorThresholdsT *SensorThresholds
+);
+
+/*******************************************************************************
+**
+** Name: saHpiSensorTypeGet()
+**
+** Description:
+** This function retrieves the sensor type and event category for the
+** specified sensor.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** SensorNum - [in] Sensor number for which the type is being retrieved.
+** Type - [out] Pointer to returned enumerated sensor type for the specified
+** sensor.
+** Category - [out] Pointer to location to receive the returned sensor event
+** category.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support sensors,
+** as indicated by SAHPI_CAPABILITY_SENSOR in the resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the sensor is not present.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the:
+** * Type pointer is passed in as NULL.
+** * Category pointer is passed in as NULL.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorTypeGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_OUT SaHpiSensorTypeT *Type,
+ SAHPI_OUT SaHpiEventCategoryT *Category
+);
+
+/*******************************************************************************
+**
+** Name: saHpiSensorEnableGet()
+**
+** Description:
+** This function returns the current sensor enable status for an addressed
+** sensor.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** SensorNum - [in] Sensor number for which the sensor enable status is being
+** requested.
+** SensorEnabled - [out] Pointer to the location to store the sensor enable
+** status.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support sensors,
+** as indicated by SAHPI_CAPABILITY_SENSOR in the resource's RPT entry.
+** SA_ERR_HPI_INVALID_PARAMS is returned when the SensorEnabled pointer is set
+** to NULL.
+** SA_ERR_HPI_NOT_PRESENT is returned if the sensor is not present.
+**
+** Remarks:
+** The SaHpiBoolT value pointed to by the SensorEnabled parameter will be set
+** to True if the sensor is enabled, or False if the sensor is disabled.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorEnableGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_OUT SaHpiBoolT *SensorEnabled
+);
+
+/*******************************************************************************
+**
+** Name: saHpiSensorEnableSet()
+**
+** Description:
+** This function sets the sensor enable status for an addressed sensor.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** SensorNum - [in] Sensor number for which the sensor enable status is being
+** set.
+** SensorEnabled - [in] Sensor enable status to be set for the sensor.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support sensors,
+** as indicated by SAHPI_CAPABILITY_SENSOR in the resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the sensor is not present.
+** SA_ERR_HPI_READ_ONLY is returned if the sensor does not support changing
+** the enable status (i.e., the EnableCtrl field in the Sensor RDR is set
+** to False).
+**
+** Remarks:
+** If a sensor is disabled, any calls to saHpiSensorReadingGet() for that
+** sensor will return an error, and no events will be generated for the
+** sensor.
+**
+** Calling saHpiSensorEnableSet() with a SensorEnabled parameter of True
+** will enable the sensor. A SensorEnabled parameter of False will disable
+** the sensor.
+**
+** If the sensor enable status changes as the result of this function call,
+** an event will be generated.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorEnableSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_IN SaHpiBoolT SensorEnabled
+);
+
+/*******************************************************************************
+**
+** Name: saHpiSensorEventEnableGet()
+**
+** Description:
+** This function returns the current sensor event enable status for an
+** addressed sensor.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** SensorNum - [in] Sensor number for which the sensor event enable status is
+** being requested.
+** SensorEventsEnabled - [out] Pointer to the location to store the sensor
+** event enable status.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support sensors,
+** as indicated by SAHPI_CAPABILITY_SENSOR in the resource's RPT entry.
+** SA_ERR_HPI_INVALID_PARAMS is returned when the SensorEventsEnabled pointer
+** is set to NULL.
+** SA_ERR_HPI_NOT_PRESENT is returned if the sensor is not present.
+**
+** Remarks:
+** The SaHpiBoolT value pointed to by the SensorEventsEnabled parameter will
+** be set to True if event generation for the sensor is enabled, or False if
+** event generation for the sensor is disabled.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorEventEnableGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_OUT SaHpiBoolT *SensorEventsEnabled
+);
+
+/*******************************************************************************
+**
+** Name: saHpiSensorEventEnableSet()
+**
+** Description:
+** This function sets the sensor event enable status for an addressed sensor.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** SensorNum - [in] Sensor number for which the sensor enable status is being
+** set.
+** SensorEventsEnabled - [in] Sensor event enable status to be set for the
+** sensor.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support sensors,
+** as indicated by SAHPI_CAPABILITY_SENSOR in the resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the sensor is not present.
+** SA_ERR_HPI_READ_ONLY is returned if the sensor does not support changing
+** the event enable status (i.e., the EventCtrl field in the Sensor RDR is
+** set to SAHPI_SEC_READ_ONLY).
+**
+** Remarks:
+** If event generation for a sensor is disabled, no events will be generated
+** as a result of the assertion or deassertion of any event state, regardless
+** of the setting of the assert or deassert event masks for the sensor. If
+** event generation for a sensor is enabled, events will be generated when
+** event states are asserted or deasserted, according to the settings of the
+** assert and deassert event masks for the sensor. Event states may still be
+** read for a sensor even if event generation is disabled, by using the
+** saHpiSensorReadingGet() function.
+**
+** Calling saHpiSensorEventEnableSet() with a SensorEventsEnabled parameter
+** of True will enable event generation for the sensor. A SensorEventsEnabled
+** parameter of False will disable event generation for the sensor.
+**
+** If the sensor event enabled status changes as a result of this function
+** call, an event will be generated.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorEventEnableSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_IN SaHpiBoolT SensorEventsEnabled
+);
+
+/*******************************************************************************
+**
+** Name: saHpiSensorEventMasksGet()
+**
+** Description:
+** This function returns the assert and deassert event masks for a sensor.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** SensorNum - [in] Sensor number for which the event enable configuration is
+** being requested.
+** AssertEventMask - [in/out] Pointer to location to store sensor assert event
+** mask. If NULL, assert event mask is not returned.
+** DeassertEventMask - [in/out] Pointer to location to store sensor deassert
+** event mask. If NULL, deassert event mask is not returned.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support
+** sensors, as indicated by SAHPI_CAPABILITY_SENSOR in the resource's RPT
+** entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the sensor is not present.
+**
+** Remarks:
+** Two bit-mask values are returned by the saHpiSensorEventMasksGet()
+** function; one for the sensor assert event mask, and one for the sensor
+** deassert event mask. A bit set to '1' in the AssertEventMask value
+** indicates that an event will be generated by the sensor when the
+** corresponding event state for that sensor changes from deasserted to
+** asserted. A bit set to '1' in the DeassertEventMask value indicates that
+** an event will be generated by the sensor when the corresponding event
+** state for that sensor changes from asserted to deasserted.
+**
+** Events will only be generated by the sensor if the appropriate
+** AssertEventMask or DeassertEventMask bit is set, sensor events are
+** enabled, and the sensor is enabled.
+**
+** For sensors hosted by resources that have the
+** SAHPI_CAPABILITY_EVT_DEASSERTS flag set in its RPT entry, the
+** AssertEventMask and the DeassertEventMask values will always be the same.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorEventMasksGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_INOUT SaHpiEventStateT *AssertEventMask,
+ SAHPI_INOUT SaHpiEventStateT *DeassertEventMask
+);
+
+/*******************************************************************************
+**
+** Name: saHpiSensorEventMasksSet()
+**
+** Description:
+** This function provides the ability to change the settings of the sensor
+** assert and deassert event masks. Two parameters contain bit-mask values
+** indicating which bits in the sensor assert and deassert event masks should
+** be updated. In addition, there is an Action parameter.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** SensorNum - [in] Sensor number for which the event enable configuration
+** is being set.
+** Action - [in] Enumerated value describing what change should be made to
+** the sensor event masks:
+** * SAHPI_SENS_ADD_EVENTS_TO_MASKS - for each bit set in the
+** AssertEventMask and DeassertEventMask parameters, set the
+** corresponding bit in the sensor's assert and deassert event masks,
+** respectively.
+** * SAHPI_SENS_REMOVE_EVENTS_FROM_MASKS - for each bit set in the
+** AssertEventMask and DeassertEventMask parameters, clear the
+** corresponding bit in the sensor's assert and deassert event masks,
+** respectively.
+** AssertEventMask - [in] Bit mask or special value indicating which bits in
+** the sensor's assert event mask should be set or cleared. (But see
+** Remarks concerning resources with the SAHPI_EVT_DEASSERTS_CAPABILITY
+** flag set.)
+** DeassertEventMask - [in] Bit mask or special value indicating which bits
+** in the sensor's deassert event mask should be set or cleared. (But see
+** Remarks concerning resources with the SAHPI_EVT_DEASSERTS_CAPABILITY
+** flag set.)
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support
+** sensors, as indicated by SAHPI_CAPABILITY_SENSOR in the resource's RPT
+** entry.
+** SA_ERR_HPI_INVALID_DATA is returned if the Action parameter is
+** SAHPI_SENS_ADD_EVENTS_TO_MASKS, and either of the AssertEventMask or
+** DeassertEventMask parameters include a bit for an event state that is
+** not supported by the sensor.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the Action parameter is out of
+** range.
+** SA_ERR_HPI_NOT_PRESENT is returned if the sensor is not present.
+** SA_ERR_HPI_READ_ONLY is returned if the sensor does not support updating
+** the assert and deassert event masks (i.e., the EventCtrl field in the
+** Sensor RDR is set to SAHPI_SEC_READ_ONLY_MASKS or SAHPI_SEC_READ_ONLY).
+**
+** Remarks:
+** The bits in the sensor assert and deassert event masks that correspond to
+** '1' bits in the bit-mask parameters will be set or cleared, as indicated
+** by the Action parameter. The bits in the sensor assert and deassert event
+** masks corresponding to '0' bits in the bit-mask parameters will be
+** unchanged.
+**
+** Assuming that a sensor is enabled and event generation for the sensor is
+** enabled, then for each bit set in the sensor's assert event mask, an event
+** will be generated when the sensor's corresponding event state changes from
+** deasserted to asserted. Similarly, for each bit set in the sensor's
+** deassert event mask, an event will be generated when the sensor's
+** corresponding event state changes from asserted to deasserted.
+**
+** For sensors hosted by a resource that has the
+** SAHPI_CAPABILITY_EVT_DEASSERTS flag set in its RPT entry, the assert and
+** deassert event masks cannot be independently configured. When
+** saHpiSensorEventMasksSet() is called for sensors in a resource with this
+** capability, the DeassertEventMask parameter is ignored, and the
+** AssertEventMask parameter is used to determine which bits to set or clear
+** in both the assert event mask and deassert event mask for the sensor.
+**
+** The AssertEventMask or DeassertEventMask parameter may be set to the
+** special value, SAHPI_ALL_EVENT_STATES, indicating that all event states
+** supported by the sensor should be added to or removed from, the
+** corresponding sensor event mask.
+**
+** If the sensor assert and/or deassert event masks change as a result of
+** this function call, an event will be generated.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiSensorEventMasksSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiSensorNumT SensorNum,
+ SAHPI_IN SaHpiSensorEventMaskActionT Action,
+ SAHPI_IN SaHpiEventStateT AssertEventMask,
+ SAHPI_IN SaHpiEventStateT DeassertEventMask
+);
+
+/*******************************************************************************
+**
+** Name: saHpiControlTypeGet()
+**
+** Description:
+** This function retrieves the control type of a control object.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** CtrlNum - [in] Control number for which the type is being retrieved.
+** Type - [out] Pointer to SaHpiCtrlTypeT variable to receive the enumerated
+** control type for the specified control.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support
+** controls, as indicated by SAHPI_CAPABILITY_CONTROL in the resource's
+** RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the control is not present.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the Type pointer is passed in as
+** NULL.
+**
+** Remarks:
+** The Type parameter must point to a variable of type SaHpiCtrlTypeT. Upon
+** successful completion, the enumerated control type is returned in the
+** variable pointed to by Type.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiControlTypeGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiCtrlNumT CtrlNum,
+ SAHPI_OUT SaHpiCtrlTypeT *Type
+);
+
+/*******************************************************************************
+**
+** Name: saHpiControlGet()
+**
+** Description:
+** This function retrieves the current state and mode of a control object.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** CtrlNum - [in] Control number for which the state and mode are being
+** retrieved.
+** CtrlMode - [out] Pointer to the mode of the control. If NULL, the
+** control's mode will not be returned.
+** CtrlState - [in/out] Pointer to a control data structure into which the
+** current control state will be placed. For text controls, the line
+** number to read is passed in via CtrlState->StateUnion.Text.Line.
+** If NULL, the control's state will not be returned.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_INVALID_CMD is returned if the control is a write-only control,
+** as indicated by the WriteOnly flag in the control's RDR (see remarks).
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support
+** controls, as indicated by the SAHPI_CAPABILITY_CONTROL in the
+** resource's RPT entry.
+** SA_ERR_HPI_INVALID_DATA is returned if the addressed control is a text
+** control, and the line number passed in CtrlState->StateUnion.Text.Line
+** does not exist in the control and is not SAHPI_TLN_ALL_LINES.
+** SA_ERR_HPI_NOT_PRESENT is returned if the control is not present.
+**
+** Remarks:
+** Note that the CtrlState parameter is both an input and an output parameter
+** for this function. This is necessary to support line number inputs for
+** text controls, as discussed below.
+**
+** In some cases, the state of a control may be set, but the corresponding
+** state cannot be read at a later time. Such controls are delineated with
+** the WriteOnly flag in the Control's RDR.
+**
+** Note that text controls are unique in that they have a state associated
+** with each line of the control - the state being the text on that line. The
+** line number to be read is passed in to saHpiControlGet() via
+** CtrlState->StateUnion.Text.Line; the contents of that line of the control
+** will be returned in CtrlState->StateUnion.Text.Text. The first line of
+** the text control is line number "1".
+**
+** If the line number passed in is SAHPI_TLN_ALL_LINES, then
+** saHpiControlGet() will return the entire text of the control, or as much
+** of it as will fit in a single SaHpiTextBufferT, in
+** CtrlState->StateUnion.Text.Text. This value will consist of the text of
+** all the lines concatenated, using the maximum number of characters for
+** each line (no trimming of trailing blanks).
+**
+** Note that depending on the data type and language, the text may be encoded
+** in 2-byte Unicode, which requires two bytes of data per character.
+**
+** Note that the number of lines and columns in a text control can be
+** obtained from the control's Resource Data Record.
+**
+** Write-only controls allow the control's state to be set, but the control
+** state cannot be subsequently read. Such controls are indicated in the RDR,
+** when the WriteOnly flag is set. SA_ERR_HPI_INVALID_CMD is returned when
+** calling this function for a write-only control.
+**
+** It is legal for both the CtrlMode parameter and the CtrlState parameter to
+** be NULL. In this case, no data is returned other than the return code.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiControlGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiCtrlNumT CtrlNum,
+ SAHPI_OUT SaHpiCtrlModeT *CtrlMode,
+ SAHPI_INOUT SaHpiCtrlStateT *CtrlState
+);
+
+/*******************************************************************************
+**
+** Name: saHpiControlSet()
+**
+** Description:
+** This function is used for setting the state and/or mode of the specified
+** control object.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** CtrlNum - [in] Control number for which the state and/or mode is being set.
+** CtrlMode - [in] The mode to set on the control.
+** CtrlState - [in] Pointer to a control state data structure holding the
+** state to be set.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support
+** controls, as indicated by the SAHPI_CAPABILITY_CONTROL in the
+** resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the control is not present.
+** SA_ERR_HPI_INVALID_DATA is returned when the:
+** * CtrlState->Type field is not the correct type for the control
+** identified by the CtrlNum parameter.
+** * CtrlState->StateUnion.Analog is out of range of the control record's
+** analog Min and Max values.
+** * CtrlState->StateUnion.Text.Text.DataLength, combined with the
+** CtrlState->StateUnion.Text.Line, overflows the remaining text
+** control space.
+** * CtrlState->StateUnion.Text.Text.DataType is not set to the DataType
+** specified in the RDR.
+** * DataType specified in the RDR is SAHPI_TL_TYPE_UNICODE or
+** SAHPI_TL_TYPE_TEXT and CtrlState->StateUnion.Text.Text.Language is
+** not set to the Language specified in the RDR.
+** * OEM control data is invalid (see remarks below).
+** SA_ERR_HPI_INVALID_PARAMS is returned if the:
+** * CtrlMode is not one of the valid enumerated values for this type.
+** * CtrlMode parameter is not SAHPI_CTRL_MODE_AUTO and the CtrlState
+** pointer is passed in as NULL.
+** * CtrlState->StateUnion.Digital is not one of the valid enumerated
+** values for this type.
+** * CtrlState->StateUnion.Stream.StreamLength is bigger than
+** SAHPI_CTRL_MAX_STREAM_LENGTH.
+** * SaHpiTextBufferT structure passed as CtrlState->StateUnion.Text.Text
+** contains text characters that are not allowed according to the value
+** of CtrlState->StateUnion.Text.Text.DataType.
+** SA_ERR_HPI_INVALID_REQUEST is returned when SAHPI_CTRL_STATE_PULSE_ON is
+** issued to a digital control, which is ON (in either manual or auto
+** mode). It is also returned when SAHPI_CTRL_STATE_PULSE_OFF is issued
+** to a digital control, which is OFF (in either manual or auto mode).
+** SA_ERR_HPI_READ_ONLY is returned when attempting to change the mode of a
+** control with a read-only mode.
+**
+** Remarks:
+** When the mode is set to SAHPI_CTRL_MODE_AUTO, the state input is ignored.
+** Ignored state inputs are not checked by the implementation.
+**
+** The CtrlState parameter must be of the correct type for the specified
+** control.
+**
+** If the CtrlMode parameter is set to SAHPI_CTRL_MODE_AUTO, then the
+** CtrlState parameter is not evaluated, and may be set to any value by an
+** HPI User, including a NULL pointer. Text controls include a line number
+** and a line of text in the CtrlState parameter, allowing update of just a
+** single line of a text control. The first line of the text control is line
+** number "1". If less than a full line of data is written, the control will
+** clear all spaces beyond those written on the line. Thus writing a
+** zero-length string will clear the addressed line. It is also possible to
+** include more characters in the text passed in the CtrlState structure than
+** will fit on one line; in this case, the control will wrap to the next line
+** (still clearing the trailing characters on the last line written). Thus,
+** there are two ways to write multiple lines to a text control: (a) call
+** saHpiControlSet() repeatedly for each line, or (b) call saHpiControlSet()
+** once and send more characters than will fit on one line. An HPI User
+** should not assume any "cursor positioning" characters are available to
+** use, but rather should always write full lines and allow "wrapping" to
+** occur. When calling saHpiControlSet() for a text control, an HPI User may
+** set the line number to SAHPI_TLN_ALL_LINES; in this case, the entire
+** control will be cleared, and the data will be written starting on line 1.
+** (This is different from simply writing at line 1, which only alters the
+** lines written to.)
+**
+** This feature may be used to clear the entire control, which can be
+** accomplished by setting:
+** CtrlState->StateUnion.Text.Line = SAHPI_TLN_ALL_LINES;
+** CtrlState->StateUnion.Text.Text.DataLength = 0;
+**
+** Note that the number of lines and columns in a text control can be
+** obtained from the control's RDR.
+**
+** The ManufacturerId (MId) field of an OEM control is ignored by the
+** implementation when calling saHpiControlSet().
+**
+** On an OEM control, it is up to the implementation to determine what is
+** invalid data, and to return the specified error code.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiControlSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiCtrlNumT CtrlNum,
+ SAHPI_IN SaHpiCtrlModeT CtrlMode,
+ SAHPI_IN SaHpiCtrlStateT *CtrlState
+);
+
+/*******************************************************************************
+**
+** Name: saHpiIdrInfoGet()
+**
+** Description:
+** This function returns the Inventory Data Repository information including
+** the number of areas contained within the IDR and the update counter. The
+** Inventory Data Repository is associated with a specific entity.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** IdrId - [in] Identifier for the Inventory Data Repository.
+** IdrInfo - [out] Pointer to the information describing the requested
+** Inventory Data Repository.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support an
+** inventory data repository, as indicated by
+** SAHPI_CAPABILITY_INVENTORY_DATA in the resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the IDR is not present.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the IdrInfo pointer is passed in
+** as NULL.
+**
+** Remarks:
+** The update counter provides a means for insuring that no additions or
+** changes are missed when retrieving the IDR data. In order to use this
+** feature, an HPI User should invoke the saHpiIdrInfoGet(), and retrieve the
+** update counter value before retrieving the first Area. After retrieving
+** all Areas and Fields of the IDR, an HPI User should again invoke the
+** saHpiIdrInfoGet() to get the update counter value. If the update counter
+** value has not been incremented, no modification or additions were made to
+** the IDR during data retrieval.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiIdrInfoGet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiIdrIdT IdrId,
+ SAHPI_OUT SaHpiIdrInfoT *IdrInfo
+);
+
+/*******************************************************************************
+**
+** Name: saHpiIdrAreaHeaderGet()
+**
+** Description:
+** This function returns the Inventory Data Area header information for a
+** specific area associated with a particular Inventory Data Repository.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** IdrId - [in] Identifier for the Inventory Data Repository.
+** AreaType - [in] Type of Inventory Data Area.
+** AreaId - [in] Identifier of Area entry to retrieve from the IDR. Reserved
+** AreaId values:
+** * SAHPI_FIRST_ENTRY Get first entry.
+** * SAHPI_LAST_ENTRY Reserved as a delimiter for end of list. Not a
+** valid AreaId.
+** NextAreaId - [out] Pointer to location to store the AreaId of next area of
+** the requested type within the IDR.
+** Header - [out] Pointer to Inventory Data Area Header into which the header
+** information will be placed.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support an
+** inventory data repository, as indicated by
+** SAHPI_CAPABILITY_INVENTORY_DATA in the resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the:
+** * IDR is not present.
+** * AreaType parameter is set to SAHPI_IDR_AREATYPE_UNSPECIFIED, and the
+** area specified by the AreaId parameter does not exist in the IDR.
+** * AreaType parameter is set to a specific area type, but an area
+** matching both the AreaId parameter and AreaType parameter does not
+** exist.
+** SA_ERR_HPI_INVALID_PARAMS is returned if:
+** * AreaType is not one of the valid enumerated values for this type.
+** * The AreaId is an invalid reserved value such as SAHPI_LAST_ENTRY.
+** * The NextAreaId pointer is passed in as NULL.
+** * The Header pointer is passed in as NULL.
+**
+** Remarks:
+** This function allows retrieval of an Inventory Data Area Header by one of
+** two ways: by AreaId regardless of type or by AreaType and AreaId.
+**
+** To retrieve all areas contained within an IDR, set the AreaType parameter
+** to SAHPI_IDR_AREATYPE_UNSPECIFIED, and set the AreaId parameter to
+** SAHPI_FIRST_ENTRY for the first call. For each subsequent call, set the
+** AreaId parameter to the value returned in the NextAreaId parameter.
+** Continue calling this function until the NextAreaId parameter contains the
+** value SAHPI_LAST_ENTRY.
+**
+** To retrieve areas of specific type within an IDR, set the AreaType
+** parameter to a valid AreaType enumeration. Use the AreaId parameter in
+** the same manner described above to retrieve all areas of the specified
+** type. Set the AreaId parameter to SAHPI_FIRST_ENTRY to retrieve the first
+** area of that type. Use the value returned in NextAreaId to retrieve the
+** remaining areas of that type until SAHPI_LAST_ENTRY is returned.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiIdrAreaHeaderGet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiIdrIdT IdrId,
+ SAHPI_IN SaHpiIdrAreaTypeT AreaType,
+ SAHPI_IN SaHpiEntryIdT AreaId,
+ SAHPI_OUT SaHpiEntryIdT *NextAreaId,
+ SAHPI_OUT SaHpiIdrAreaHeaderT *Header
+);
+
+/*******************************************************************************
+**
+** Name: saHpiIdrAreaAdd()
+**
+** Description:
+** This function is used to add an Area to the specified Inventory Data
+** Repository.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** IdrId - [in] Identifier for the Inventory Data Repository.
+** AreaType - [in] Type of Area to add.
+** AreaId- [out] Pointer to location to store the AreaId of the newly created
+** area.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support an
+** inventory data repository, as indicated by
+** SAHPI_CAPABILITY_INVENTORY_DATA in the resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the IDR is not present.
+** SA_ERR_HPI_INVALID_DATA is returned when attempting to add an area with an
+** AreaType of SAHPI_IDR_AREATYPE_UNSPECIFIED or when adding an area that
+** does not meet the implementation-specific restrictions.
+** SA_ERR_HPI_OUT_OF_SPACE is returned if the IDR does not have enough free
+** space to allow the addition of the area.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the:
+** * AreaId pointer is passed in as NULL.
+** * AreaType is not one of the valid enumerated values for this type.
+** SA_ERR_HPI_READ_ONLY is returned if the IDR is read-only and does not
+** allow the addition of the area.
+**
+** Remarks:
+** On successful completion, the AreaId parameter will contain the AreaId of
+** the newly created area.
+**
+** On successful completion, the ReadOnly element in the new Area's header
+** will always be False.
+**
+** SAHPI_IDR_AREATYPE_UNSPECIFIED is not a valid area type, and should not be
+** used with this function. If SAHPI_IDR_AREATYPE_UNSPECIFIED is specified
+** as the area type, an error code of SA_ERR_HPI_INVALID_DATA is returned.
+** This area type is only valid when used with the saHpiIdrAreaHeaderGet()
+** function to retrieve areas of an unspecified type.
+**
+** Some implementations may restrict the types of areas that may be added.
+** These restrictions should be documented. SA_ERR_HPI_INVALID_DATA is
+** returned when attempting to add an invalid area type.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiIdrAreaAdd(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiIdrIdT IdrId,
+ SAHPI_IN SaHpiIdrAreaTypeT AreaType,
+ SAHPI_OUT SaHpiEntryIdT *AreaId
+);
+
+/*******************************************************************************
+**
+** Name: saHpiIdrAreaDelete()
+**
+** Description:
+** This function is used to delete an Inventory Data Area, including the Area
+** header and all fields contained with the area, from a particular Inventory
+** Data Repository.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** IdrId - [in] Identifier for the Inventory Data Repository.
+** AreaId - [in] Identifier of Area entry to delete from the IDR.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support an
+** inventory data repository, as indicated by
+** SAHPI_CAPABILITY_INVENTORY_DATA in the resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the:
+** * IDR is not present.
+** * Area identified by the AreaId parameter does not exist within the IDR.
+** SA_ERR_HPI_INVALID_PARAMS is returned when the AreaId is an invalid
+** reserved value such as SAHPI_LAST_ENTRY.
+** SA_ERR_HPI_READ_ONLY is returned if the:
+** * IDA is read-only and therefore cannot be deleted.
+** * IDA contains a read-only Field and therefore cannot be deleted.
+** * IDR is read-only as deletions are not permitted for an area from a
+** read-only IDR.
+**
+** Remarks:
+** Deleting an Inventory Data Area also deletes all fields contained within
+** the area.
+**
+** In some implementations, certain Areas are intrinsically read-only. The
+** ReadOnly flag, in the area header, indicates if the Area is read-only.
+**
+** If the Inventory Data Area is not read-only, but contains a Field that is
+** read-only, the Area cannot be deleted. An attempt to delete an Area that
+** contains a read-only Field will return an error.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiIdrAreaDelete(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiIdrIdT IdrId,
+ SAHPI_IN SaHpiEntryIdT AreaId
+);
+
+/*******************************************************************************
+**
+** Name: saHpiIdrFieldGet()
+**
+** Description:
+** This function returns the Inventory Data Field information from a
+** particular Inventory Data Area and Repository.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** IdrId - [in] Identifier for the Inventory Data Repository.
+** AreaId - [in] Area identifier for the IDA.
+** FieldType - [in] Type of Inventory Data Field.
+** FieldId - [in] Identifier of Field to retrieve from the IDA. Reserved
+** FieldId values:
+** * SAHPI_FIRST_ENTRY Get first entry.
+** * SAHPI_LAST_ENTRY Reserved as a delimiter for end of list. Not
+** a valid FieldId.
+** NextFieldId - [out] Pointer to location to store the FieldId of next field
+** of the requested type in the IDA.
+** Field - [out] Pointer to Inventory Data Field into which the field
+** information will be placed.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support an
+** inventory data repository, as indicated by
+** SAHPI_CAPABILITY_INVENTORY_DATA in the resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the:
+** * IDR is not present.
+** * Area identified by AreaId is not present.
+** * FieldType parameter is set to SAHPI_IDR_FIELDTYPE_UNSPECIFIED, and
+** the field specified by the FieldId parameter does not exist in the
+** IDA.
+** * FieldType parameter is set to a specific field type, but a field
+** matching both the FieldId parameter and FieldType parameter does not
+** exist.
+** SA_ERR_HPI_INVALID_PARAMS is returned if:
+** * FieldType is not one of the valid enumerated values for this type.
+** * The AreaId or FieldId is an invalid reserved value such as
+** SAHPI_LAST_ENTRY.
+** * The NextFieldId pointer is passed in as NULL.
+** * The Field pointer is passed in as NULL.
+**
+** Remarks:
+** This function allows retrieval of an Inventory Data Field by one of two
+** ways: by FieldId regardless of type or by FieldType and FieldId.
+**
+** To retrieve all fields contained within an IDA, set the FieldType parameter
+** to SAHPI_IDR_FIELDTYPE_UNSPECIFIED, and set the FieldId parameter to
+** SAHPI_FIRST_ENTRY for the first call. For each subsequent call, set the
+** FieldId parameter to the value returned in the NextFieldId parameter.
+** Continue calling this function until the NextFieldId parameter contains the
+** value SAHPI_LAST_ENTRY.
+**
+** To retrieve fields of a specific type within an IDA, set the FieldType
+** parameter to a valid Field type enumeration. Use the FieldId parameter in
+** the same manner described above to retrieve all fields of the specified
+** type. Set the FieldId parameter to SAHPI_FIRST_ENTRY to retrieve the first
+** field of that type. Use the value returned in NextFieldId to retrieve the
+** remaining fields of that type until SAHPI_LAST_ENTRY is returned.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiIdrFieldGet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiIdrIdT IdrId,
+ SAHPI_IN SaHpiEntryIdT AreaId,
+ SAHPI_IN SaHpiIdrFieldTypeT FieldType,
+ SAHPI_IN SaHpiEntryIdT FieldId,
+ SAHPI_OUT SaHpiEntryIdT *NextFieldId,
+ SAHPI_OUT SaHpiIdrFieldT *Field
+);
+
+/*******************************************************************************
+**
+** Name: saHpiIdrFieldAdd()
+**
+** Description:
+** This function is used to add a field to the specified Inventory Data Area
+** with a specific Inventory Data Repository.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** IdrId - [in] Identifier for the Inventory Data Repository.
+** Field - [in/out] Pointer to Inventory Data Field, which contains the new
+** field information to add to the IDA.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support an
+** inventory data repository, as indicated by
+** SAHPI_CAPABILITY_INVENTORY_DATA in the resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the:
+** * IDR is not present.
+** * Area identified by Field?AreaId does not exist within the IDR.
+** SA_ERR_HPI_INVALID_DATA is returned if the Field data is incorrectly
+** formatted or does not meet the restrictions for the implementation.
+** SA_ERR_HPI_OUT_OF_SPACE is returned if the IDR does not have enough free
+** space to allow the addition of the field.
+** SA_ERR_HPI_READ_ONLY is returned if the:
+** * Area identified by Field?AreaId is read-only and does not allow
+** modification to its fields.
+** * IDR is identified by IdrId, is read-only, and does not allow
+** modification to its fields.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the:
+** * The Field type is not one of the valid field type enumerated values.
+** * Field type, Field?Type, is set to SAHPI_IDR_FIELDTYPE_UNSPECIFIED.
+** * SaHpiTextBufferT structure passed as part of the Field parameter is
+** not valid. This occurs when:
+** * The DataType is not one of the enumerated values for that type, or
+** * The data field contains characters that are not legal according to
+** the value of DataType, or
+** * The Language is not one of the enumerated values for that type
+** when the DataType is SAHPI_TL_TYPE_UNICODE or SAHPI_TL_TYPE_TEXT.
+** * Field pointer is passed in as NULL.
+**
+** Remarks:
+** The FieldId element within the Field parameter is not used by this
+** function. Instead, on successful completion, the FieldId field is set to
+** the new value associated with the added Field.
+**
+** The ReadOnly element in the Field parameter is not used by this function.
+** On successful completion, the ReadOnly element in the new Field will
+** always be False.
+**
+** Addition of a read-only Inventory Data Field is not allowed; therefore the
+** ReadOnly element in the SaHpiIdrFieldT parameter is ignored.
+**
+** SAHPI_IDR_FIELDTYPE_UNSPECIFIED is not a valid field type, and should not
+** be used with this function. If SAHPI_IDR_FIELDTYPE_UNSPECIFIED is
+** specified as the field type, an error code of SA_ERR_HPI_INVALID_DATA is
+** returned. This field type is only valid when used with the
+** saHpiIdrFieldGet() function to retrieve fields of an unspecified type.
+**
+** Some implementations have restrictions on what fields are valid in specific
+** areas and/or the data format of some fields. These restrictions should be
+** documented. SA_ERR_HPI_INVALID_DATA is returned when the field type or
+** field data does not meet the implementation-specific restrictions.
+**
+** The AreaId element within the Field parameter identifies the specific IDA
+** into which the new field is added.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiIdrFieldAdd(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiIdrIdT IdrId,
+ SAHPI_INOUT SaHpiIdrFieldT *Field
+);
+
+/*******************************************************************************
+**
+** Name: saHpiIdrFieldSet()
+**
+** Description:
+** This function is used to update an Inventory Data Field for a particular
+** Inventory Data Area and Repository.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** IdrId - [in] Identifier for the Inventory Data Repository.
+** Field - [in] Pointer to Inventory Data Field, which contains the updated
+** field information.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support an
+** inventory data repository, as indicated by
+** SAHPI_CAPABILITY_INVENTORY_DATA in the resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the:
+** * IDR is not present.
+** * Area identified by Field?AreaId does not exist within the IDR or if
+** the Field does not exist within the Inventory Data Area.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the:
+** * Field pointer is passed in as NULL.
+** * Field type, Field?Type, is not set to one of the valid field type
+** enumerated values.
+** * Field type, Field?Type, is set to SAHPI_IDR_FIELDTYPE_UNSPECIFIED.
+** SA_ERR_HPI_INVALID_DATA is returned if the field data is incorrectly
+** formatted or does not meet the restrictions for the implementation.
+** SA_ERR_HPI_OUT_OF_SPACE is returned if the IDR does not have enough free
+** space to allow the modification of the field due to an increase in the
+** field size.
+** SA_ERR_HPI_READ_ONLY is returned if the:
+** * Field is read-only and does not allow modifications.
+** * Area is read-only and does not allow modifications to its fields.
+** * IDR is read-only and does not allow modifications to its fields.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the SaHpiTextBufferT structure
+** passed as part of the Field parameter is not valid. This occurs when:
+** * The DataType is not one of the enumerated values for that type, or
+** * The data field contains characters that are not legal according to
+** the value of DataType, or
+** * The Language is not one of the enumerated values for that type when
+** the DataType is SAHPI_TL_TYPE_UNICODE or SAHPI_TL_TYPE_TEXT.
+**
+** Remarks:
+** This function allows modification of both the FieldType and Field data of
+** a given Inventory Data Field. This function does not allow modification of
+** the read-only attribute of the Inventory Data Field; therefore after a
+** successful update, the ReadOnly element in the updated Field will always be
+** False. The input value for ReadOnly is ignored.
+**
+** SAHPI_IDR_FIELDTYPE_UNSPECIFIED is not a valid field type, and should not
+** be used with this function. If SAHPI_IDR_FIELDTYPE_UNSPECIFIED is
+** specified as the new field type, an error code of SA_ERR_HPI_INVALID_DATA
+** is returned. This field type is only valid when used with the
+** saHpiIdrFieldGet() function to retrieve fields of an unspecified type.
+**
+** Some implementations have restrictions on what fields are valid in specific
+** areas and/or the data format of some fields. These restrictions should be
+** documented. SA_ERR_HPI_INVALID_DATA is returned when the field type or
+** field data does not meet the implementation-specific restrictions.
+**
+** In some implementations, certain Fields are intrinsically read-only. The
+** ReadOnly flag, in the field structure, indicates if the Field is read-only.
+**
+** The Field to update is identified by the AreaId and FieldId elements within
+** the Field parameter.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiIdrFieldSet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiIdrIdT IdrId,
+ SAHPI_IN SaHpiIdrFieldT *Field
+);
+
+/*******************************************************************************
+**
+** Name: saHpiIdrFieldDelete()
+**
+** Description:
+** This function is used to delete an Inventory Data Field from a particular
+** Inventory Data Area and Repository.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** IdrId - [in] Identifier for the Inventory Data Repository.
+** AreaId - [in] Area identifier for the IDA.
+** FieldId - [in] Identifier of Field to delete from the IDA.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support an
+** inventory data repository, as indicated by
+** SAHPI_CAPABILITY_INVENTORY_DATA in the resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the:
+** * IDR is not present.
+** * Area identified by the AreaId parameter does not exist within the IDR,
+** or if the Field identified by the FieldId parameter does not exist
+** within the IDA.
+** SA_ERR_HPI_READ_ONLY is returned if the field, the IDA, or the IDR is
+** read-only and does not allow deletion.
+** SA_ERR_HPI_INVALID_PARAMS is returned when the AreaId or FieldId is an
+** invalid reserved value such as SAHPI_LAST_ENTRY.
+**
+** Remarks:
+** In some implementations, certain fields are intrinsically read-only. The
+** ReadOnly flag, in the field structure, indicates if the field is read-only.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiIdrFieldDelete(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiIdrIdT IdrId,
+ SAHPI_IN SaHpiEntryIdT AreaId,
+ SAHPI_IN SaHpiEntryIdT FieldId
+);
+
+/*******************************************************************************
+**
+** Name: saHpiWatchdogTimerGet()
+**
+** Description:
+** This function retrieves the current watchdog timer settings and
+** configuration.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** WatchdogNum - [in] Watchdog number that specifies the watchdog timer on a
+** resource.
+** Watchdog - [out] Pointer to watchdog data structure.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support a
+** watchdog timer, as indicated by SAHPI_CAPABILITY_WATCHDOG in the
+** resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the WatchdogNum is not present.
+** SA_ERR_HPI_INVALID_PARAMS is returned when the Watchdog pointer is passed
+** in as NULL.
+**
+** Remarks:
+** See the description of the SaHpiWatchdogT structure in Section 8.11 on
+** page 180 for details on what information is returned by this function.
+**
+** When the watchdog action is SAHPI_WA_RESET, the type of reset (warm or
+** cold) is implementation-dependent.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiWatchdogTimerGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiWatchdogNumT WatchdogNum,
+ SAHPI_OUT SaHpiWatchdogT *Watchdog
+);
+
+/*******************************************************************************
+**
+** Name: saHpiWatchdogTimerSet()
+**
+** Description:
+** This function provides a method for initializing the watchdog timer
+** configuration.
+**
+** Once the appropriate configuration has been set using
+** saHpiWatchdogTimerSet(), an HPI User must then call
+** saHpiWatchdogTimerReset() to initially start the watchdog timer, unless
+** the watchdog timer was already running prior to calling
+** saHpiWatchdogTimerSet() and the Running field in the passed Watchdog
+** structure is True.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** WatchdogNum - [in] The watchdog number specifying the specific watchdog
+** timer on a resource.
+** Watchdog - [in] Pointer to watchdog data structure.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support a
+** watchdog timer, as indicated by SAHPI_CAPABILITY_WATCHDOG in the
+** resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the WatchdogNum is not present.
+** SA_ERR_HPI_INVALID_PARAMS is returned when the:
+** * Watchdog->TimerUse is not one of the valid enumerated values for this
+** type.
+** * Watchdog->TimerAction is not one of the valid enumerated values for
+** this type.
+** * Watchdog->PretimerInterrupt is not one of the valid enumerated values
+** for this type.
+** * Watchdog pointer is passed in as NULL.
+** SA_ERR_HPI_INVALID_DATA is returned when the:
+** * Watchdog->PreTimeoutInterval is outside the acceptable range for the
+** implementation.
+** * Watchdog->InitialCount is outside the acceptable range for the
+** implementation.
+** * Value of Watchdog->PreTimeoutInterval is greater than the value of
+** Watchdog->InitialCount.
+** * Watchdog->PretimerInterrupt is set to an unsupported value. See
+** remarks.
+** * Watchdog->TimerAction is set to an unsupported value. See remarks.
+** * Watchdog->TimerUse is set to an unsupported value. See remarks.
+**
+** Remarks:
+** Configuring the watchdog timer with the saHpiWatchdogTimerSet() function
+** does not start the timer running. If the timer was previously stopped
+** when this function is called, then it will remain stopped, and must be
+** started by calling saHpiWatchdogTimerReset(). If the timer was previously
+** running, then it will continue to run if the Watchdog->Running field passed
+** is True, or will be stopped if the Watchdog->Running field passed is False.
+** If it continues to run, it will restart its count-down from the newly
+** configured initial count value.
+**
+** If the initial counter value is set to 0, then any configured pre-timer
+** interrupt action or watchdog timer expiration action will be taken
+** immediately when the watchdog timer is started. This provides a mechanism
+** for software to force an immediate recovery action should that be dependent
+** on a Watchdog timeout occurring.
+**
+** See the description of the SaHpiWatchdogT structure for more details on the
+** effects of this command related to specific data passed in that structure.
+**
+** Some implementations impose a limit on the acceptable ranges for the
+** PreTimeoutInterval or InitialCount. These limitations must be documented.
+** SA_ERR_HPI_INVALID_DATA is returned if an attempt is made to set a value
+** outside of the supported range.
+**
+** Some implementations cannot accept all of the enumerated values for
+** TimerUse, TimerAction, or PretimerInterrupt. These restrictions should be
+** documented. SA_ERR_HPI_INVALID_DATA is returned if an attempt is made to
+** select an unsupported option.
+**
+** When the watchdog action is set to SAHPI_WA_RESET, the type of reset (warm
+** or cold) is implementation-dependent.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiWatchdogTimerSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiWatchdogNumT WatchdogNum,
+ SAHPI_IN SaHpiWatchdogT *Watchdog
+);
+
+/*******************************************************************************
+**
+** Name: saHpiWatchdogTimerReset()
+**
+** Description:
+** This function provides a method to start or restart the watchdog timer from
+** the initial countdown value.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** WatchdogNum - [in] The watchdog number specifying the specific watchdog
+** timer on a resource.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support a
+** watchdog timer, as indicated by SAHPI_CAPABILITY_WATCHDOG in the
+** resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the WatchdogNum is not present.
+** SA_ERR_HPI_INVALID_REQUEST is returned if the current watchdog state does
+** not allow a reset.
+**
+** Remarks:
+** If the Watchdog has been configured to issue a Pre-Timeout interrupt, and
+** that interrupt has already occurred, the saHpiWatchdogTimerReset() function
+** will not reset the watchdog counter. The only way to stop a Watchdog from
+** timing out once a Pre-Timeout interrupt has occurred is to use the
+** saHpiWatchdogTimerSet() function to reset and/or stop the timer.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiWatchdogTimerReset (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiWatchdogNumT WatchdogNum
+);
+
+/*******************************************************************************
+**
+** Name: saHpiAnnunciatorGetNext()
+**
+** Description:
+** This function allows retrieval of an announcement from the current set of
+** announcements held in the Annunciator.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** AnnunciatorNum - [in] Annunciator number for the addressed Annunciator.
+** Severity - [in] Severity level of announcements to retrieve. Set to
+** SAHPI_ALL_SEVERITIES to retrieve announcement of any severity;
+** otherwise, set to requested severity level.
+** UnacknowledgedOnly - [in] Set to True to indicate only unacknowledged
+** announcements should be returned. Set to False to indicate either an
+** acknowledged or unacknowledged announcement may be returned.
+** Announcement - [in/out] Pointer to the structure to hold the returned
+** announcement. Also, on input, Announcement->EntryId and
+** Announcement->Timestamp are used to identify the "previous"
+** announcement.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support
+** Annunciators, as indicated by SAHPI_CAPABILITY_ANNUNCIATOR in the
+** resource's RPT entry.
+** SA_ERR_HPI_INVALID_PARAMS is returned when Severity is not one of the
+** valid enumerated values for this type.
+** SA_ERR_HPI_NOT_PRESENT is returned if:
+** * The AnnunciatorNum passed does not address a valid Annunciator
+** supported by the resource.
+** * There are no announcements (or no unacknowledged announcements if
+** UnacknowledgedOnly is True) that meet the specified Severity in the
+** current set after the announcement identified by
+** Announcement->EntryId and Announcement->Timestamp.
+** * There are no announcements (or no unacknowledged announcements if
+** UnacknowledgedOnly is True) that meet the specified Severity in the
+** current set if the passed Announcement->EntryId field was set to
+** SAHPI_FIRST_ENTRY.
+** SA_ERR_HPI_INVALID_PARAMS is returned when the Announcement parameter is
+** passed in as NULL.
+** SA_ERR_HPI_INVALID_DATA is returned if the passed Announcement->EntryId
+** matches an announcement in the current set, but the passed
+** Announcement->Timestamp does not match the timestamp of that announcement.
+**
+** Remarks:
+** All announcements contained in the set are maintained in the order in which
+** they were added. This function will return the next announcement meeting
+** the specifications given by an HPI User that was added to the set after the
+** announcement whose EntryId and timestamp is passed by an HPI User. If
+** SAHPI_FIRST_ENTRY is passed as the EntryId, the first announcement in the
+** set meeting the specifications given by an HPI User is returned. This
+** function should operate even if the announcement associated with the
+** EntryId and Timestamp passed by an HPI User has been deleted.
+**
+** Selection can be restricted to only announcements of a specified severity,
+** and/or only unacknowledged announcements. To retrieve all announcements
+** contained meeting specific requirements, call saHpiAnnunciatorGetNext()
+** with the Status->EntryId field set to SAHPI_FIRST_ENTRY and the Severity
+** and UnacknowledgedOnly parameters set to select what announcements should
+** be returned. Then, repeatedly call saHpiAnnunciatorGetNext() passing the
+** previously returned announcement as the Announcement parameter, and the
+** same values for Severity and UnacknowledgedOnly until the function returns
+** with the error code SA_ERR_HPI_NOT_PRESENT.
+**
+** SAHPI_FIRST_ENTRY and SAHPI_LAST_ENTRY are reserved EntryId values, and
+** will never be assigned to an announcement.
+**
+** The elements EntryId and Timestamp are used in the Announcement parameter
+** to identify the "previous" announcement; the next announcement added to the
+** table after this announcement that meets the Severity and
+** UnacknowledgedOnly requirements will be returned. Announcement->EntryId
+** may be set to SAHPI_FIRST_ENTRY to select the first announcement in the
+** current set meeting the Severity and UnacknowledgedOnly requirements. If
+** Announcement->EntryId is SAHPI_FIRST_ENTRY, then Announcement->Timestamp
+** is ignored.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAnnunciatorGetNext(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiAnnunciatorNumT AnnunciatorNum,
+ SAHPI_IN SaHpiSeverityT Severity,
+ SAHPI_IN SaHpiBoolT UnacknowledgedOnly,
+ SAHPI_INOUT SaHpiAnnouncementT *Announcement
+);
+
+/*******************************************************************************
+**
+** Name: saHpiAnnunciatorGet()
+**
+** Description:
+** This function allows retrieval of a specific announcement in the
+** Annunciator's current set by referencing its EntryId.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained
+** using saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** AnnunciatorNum - [in] Annunciator number for the addressed Annunciator.
+** EntryId - [in] Identifier of the announcement to retrieve from the
+** Annunciator.
+** Announcement - [out] Pointer to the structure to hold the returned
+** announcement.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support
+** Annunciators, as indicated by SAHPI_CAPABILITY_ANNUNCIATOR in the
+** resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if:
+** * The AnnunciatorNum passed does not address a valid Annunciator
+** supported by the resource.
+** * The requested EntryId does not correspond to an announcement
+** contained in the Annunciator.
+** SA_ERR_HPI_INVALID_PARAMS is returned when the Announcement parameter is
+** passed in as NULL.
+**
+** Remarks:
+** SAHPI_FIRST_ENTRY and SAHPI_LAST_ENTRY are reserved EntryId values, and
+** will never be assigned to announcements.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAnnunciatorGet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiAnnunciatorNumT AnnunciatorNum,
+ SAHPI_IN SaHpiEntryIdT EntryId,
+ SAHPI_OUT SaHpiAnnouncementT *Announcement
+);
+
+/*******************************************************************************
+**
+** Name: saHpiAnnunciatorAcknowledge()
+**
+** Description:
+** This function allows an HPI User to acknowledge a single announcement or a
+** group of announcements by severity.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** AnnunciatorNum - [in] Annunciator number for the addressed Annunciator.
+** EntryId - [in] Entry identifier of the announcement to acknowledge.
+** Reserved EntryId values:
+** * SAHPI_ENTRY_UNSPECIFIED Ignore this parameter.
+** Severity - [in] Severity level of announcements to acknowledge. Ignored
+** unless EntryId is SAHPI_ENTRY_UNSPECIFIED.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support
+** Annunciators, as indicated by SAHPI_CAPABILITY_ANNUNCIATOR in the
+** resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if:
+** * The AnnunciatorNum passed does not address a valid Annunciator
+** supported by the resource.
+** * An announcement identified by the EntryId parameter does not exist in
+** the current set.
+** SA_ERR_HPI_INVALID_PARAMS is returned if EntryId is SAHPI_ENTRY_UNSPECIFIED
+** and Severity is not one of the valid enumerated values for this type.
+**
+** Remarks:
+** Announcements are acknowledged by one of two ways: a single announcement
+** by EntryId regardless of severity or as a group of announcements by
+** severity regardless of EntryId.
+**
+** An HPI User acknowledges an announcement to influence the platform-specific
+** annunciation provided by the Annunciator management instrument.
+**
+** An acknowledged announcement will have the Acknowledged field set to True.
+**
+** To acknowledge all announcements contained within the current set, set the
+** Severity parameter to SAHPI_ALL_SEVERITIES, and set the EntryId parameter
+** to SAHPI_ENTRY_UNSPECIFIED.
+**
+** To acknowledge all announcements of a specific severity, set the Severity
+** parameter to the appropriate value, and set the EntryId parameter to
+** SAHPI_ENTRY_UNSPECIFIED.
+**
+** To acknowledge a single announcement, set the EntryId parameter to a value
+** other than SAHPI_ENTRY_UNSPECIFIED. The EntryId must be a valid identifier
+** for an announcement present in the current set.
+**
+** If an announcement has been previously acknowledged, acknowledging it again
+** has no effect. However, this is not an error.
+**
+** If the EntryId parameter has a value other than SAHPI_ENTRY_UNSPECIFIED,
+** the Severity parameter is ignored.
+**
+** If the EntryId parameter is passed as SAHPI_ENTRY_UNSPECIFIED, and no
+** announcements are present that meet the requested Severity, this function
+** will have no effect. However, this is not an error.
+**
+** SAHPI_ENTRY_UNSPECIFIED is defined as the same value as SAHPI_FIRST_ENTRY,
+** so using either symbol will have the same effect. However,
+** SAHPI_ENTRY_UNSPECIFIED should be used with this function for clarity.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAnnunciatorAcknowledge(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiAnnunciatorNumT AnnunciatorNum,
+ SAHPI_IN SaHpiEntryIdT EntryId,
+ SAHPI_IN SaHpiSeverityT Severity
+);
+
+/*******************************************************************************
+**
+** Name: saHpiAnnunciatorAdd()
+**
+** Description:
+** This function is used to add an announcement to the set of items held by an
+** Annunciator management instrument.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** AnnunciatorNum - [in] Annunciator number for the addressed Annunciator.
+** Announcement - [in/out] Pointer to structure that contains the new
+** announcement to add to the set.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support
+** Annunciators, as indicated by SAHPI_CAPABILITY_ANNUNCIATOR in the
+** resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the AnnunciatorNum passed does not
+** address a valid Annunciator supported by the resource.
+** SA_ERR_HPI_INVALID_PARAMS is returned when:
+** * The Announcement pointer is passed in as NULL.
+** * The Announcement->Severity passed is not valid.
+** * The Announcement->StatusCond structure passed in is not valid.
+** SA_ERR_HPI_OUT_OF_SPACE is returned if the Annunciator is not able to add
+** an additional announcement due to resource limits.
+** SA_ERR_HPI_READ_ONLY is returned if the Annunciator is in auto mode.
+**
+** Remarks:
+** The EntryId, Timestamp, and AddedByUser fields within the Announcement
+** parameter are not used by this function. Instead, on successful
+** completion, these fields are set to new values associated with the added
+** announcement. AddedByUser will always be set to True.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAnnunciatorAdd(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiAnnunciatorNumT AnnunciatorNum,
+ SAHPI_INOUT SaHpiAnnouncementT *Announcement
+);
+
+/*******************************************************************************
+**
+** Name: saHpiAnnunciatorDelete()
+**
+** Description:
+** This function allows an HPI User to delete a single announcement or a group
+** of announcements from the current set of an Annunciator. Announcements may
+** be deleted individually by specifying a specific EntryId, or they may be
+** deleted as a group by specifying a severity.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** AnnunciatorNum - [in] Annunciator number for the addressed Annunciator.
+** EntryId - [in] Entry identifier of the announcement to delete. Reserved
+** EntryId values:
+** * SAHPI_ENTRY_UNSPECIFIED Ignore this parameter.
+** Severity - [in] Severity level of announcements to delete. Ignored unless
+** EntryId is SAHPI_ENTRY_UNSPECIFIED.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support
+** Annunciators, as indicated by SAHPI_CAPABILITY_ANNUNCIATOR in the
+** resource's RPT entry.
+** SA_ERR_HPI_INVALID_PARAMS is returned if EntryId is SAHPI_ENTRY_UNSPECIFIED
+** and Severity is not one of the valid enumerated values for this type.
+** SA_ERR_HPI_NOT_PRESENT is returned if:
+** * The AnnunciatorNum passed does not address a valid Annunciator
+** supported by the resource
+** * An announcement identified by the EntryId parameter does not exist in
+** the current set of the Annunciator.
+** SA_ERR_HPI_READ_ONLY is returned if the Annunciator is in auto mode.
+**
+** Remarks:
+** To delete a single, specific announcement, set the EntryId parameter to a
+** value representing an actual announcement in the current set. The Severity
+** parameter is ignored when the EntryId parameter is set to a value other
+** than SAHPI_ENTRY_UNSPECIFIED.
+**
+** To delete a group of announcements, set the EntryId parameter to
+** SAHPI_ENTRY_UNSPECIFIED, and set the Severity parameter to identify which
+** severity of announcements should be deleted. To clear all announcements
+** contained within the Annunciator, set the Severity parameter to
+** SAHPI_ALL_SEVERITIES.
+**
+** If the EntryId parameter is passed as SAHPI_ENTRY_UNSPECIFIED, and no
+** announcements are present that meet the specified Severity, this function
+** will have no effect. However, this is not an error.
+**
+** SAHPI_ENTRY_UNSPECIFIED is defined as the same value as SAHPI_FIRST_ENTRY,
+** so using either symbol will have the same effect. However,
+** SAHPI_ENTRY_UNSPECIFIED should be used with this function for clarity.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAnnunciatorDelete(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiAnnunciatorNumT AnnunciatorNum,
+ SAHPI_IN SaHpiEntryIdT EntryId,
+ SAHPI_IN SaHpiSeverityT Severity
+);
+
+/*******************************************************************************
+**
+** Name: saHpiAnnunciatorModeGet()
+**
+** Description:
+** This function allows an HPI User to retrieve the current operating mode of
+** an Annunciator. The mode indicates whether or not an HPI User is allowed to
+** add or delete items in the set, and whether or not the HPI implementation
+** will automatically add or delete items in the set.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** AnnunciatorNum - [in] Annunciator number for the addressed Annunciator.
+** Mode - [out] Pointer to location to store the current operating mode of the
+** Annunciator where the returned value will be one of the following:
+** * SAHPI_ANNUNCIATOR_MODE_AUTO - the HPI implementation may add or delete
+** announcements in the set; an HPI User may not add or delete
+** announcements in the set.
+** * SAHPI_ANNUNCIATOR_MODE_USER - the HPI implementation may not add or
+** delete announcements in the set; an HPI User may add or delete
+** announcements in the set.
+** * SAHPI_ANNUNCIATOR_MODE_SHARED - both the HPI implementation and an HPI
+** User may add or delete announcements in the set.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support
+** Annunciators, as indicated by SAHPI_CAPABILITY_ANNUNCIATOR in the
+** resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the AnnunciatorNum passed does not
+** address a valid Annunciator supported by the resource.
+** SA_ERR_HPI_INVALID_PARAMS is returned if Mode is passed in as NULL.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAnnunciatorModeGet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiAnnunciatorNumT AnnunciatorNum,
+ SAHPI_OUT SaHpiAnnunciatorModeT *Mode
+);
+
+/*******************************************************************************
+**
+** Name: saHpiAnnunciatorModeSet()
+**
+** Description:
+** This function allows an HPI User to change the current operating mode of an
+** Annunciator. The mode indicates whether or not an HPI User is allowed to
+** add or delete announcements in the set, and whether or not the HPI
+** implementation will automatically add or delete announcements in the set.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** AnnunciatorNum - [in] Annunciator number for the addressed Annunciator.
+** Mode - [out] Mode to set for the Annunciator:
+** * SAHPI_ANNUNCIATOR_MODE_AUTO - the HPI implementation may add or delete
+** announcements in the set; an HPI User may not add or delete
+** announcements in the set.
+** * SAHPI_ANNUNCIATOR_MODE_USER - the HPI implementation may not add or
+** delete announcements in the set; an HPI User may add or delete
+** announcements in the set.
+** * SAHPI_ANNUNCIATOR_MODE_SHARED - both the HPI implementation and an HPI
+** User may add or delete announcements in the set.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support
+** Annunciators, as indicated by SAHPI_CAPABILITY_ANNUNCIATOR in the
+** resource's RPT entry.
+** SA_ERR_HPI_NOT_PRESENT is returned if the AnnunciatorNum passed does not
+** address a valid Annunciator supported by the resource.
+** SA_ERR_HPI_INVALID_PARAMS is returned if Mode is not a valid enumerated
+** value for this type.
+** SA_ERR_HPI_READ_ONLY is returned if mode changing is not permitted for
+** this Annunciator.
+**
+** Remarks:
+** None.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAnnunciatorModeSet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiAnnunciatorNumT AnnunciatorNum,
+ SAHPI_IN SaHpiAnnunciatorModeT Mode
+);
+
+/*******************************************************************************
+**
+** Name: saHpiHotSwapPolicyCancel()
+**
+** Description:
+** A resource supporting hot swap typically supports default policies for
+** insertion and extraction. On insertion, the default policy may be for the
+** resource to turn the associated FRU's local power on and to de-assert
+** reset. On extraction, the default policy may be for the resource to
+** immediately power off the FRU and turn on a hot swap indicator. This
+** function allows an HPI User, after receiving a hot swap event with
+** HotSwapState equal to SAHPI_HS_STATE_INSERTION_PENDING or
+** SAHPI_HS_STATE_EXTRACTION_PENDING, to prevent the default policy from
+** being executed.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support
+** managed hot swap, as indicated by SAHPI_CAPABILITY_MANAGED_HOTSWAP in
+** the resource's RPT entry.
+** SA_ERR_HPI_INVALID_REQUEST is returned if the resource is:
+** * Not in the INSERTION PENDING or EXTRACTION PENDING state.
+** * Processing an auto-insertion or auto-extraction policy.
+**
+** Remarks:
+** Each time the resource transitions to either the INSERTION PENDING or
+** EXTRACTION PENDING state, the default policies will execute after the
+** configured timeout period, unless cancelled using
+** saHpiHotSwapPolicyCancel() after the transition to INSERTION PENDING or
+** EXTRACTION PENDING state and before the timeout expires.The default policy
+** cannot be canceled once it has begun to execute.
+**
+** Because a resource that supports the simplified hot swap model will never
+** transition into INSERTION PENDING or EXTRACTION PENDING states, this
+** function is not applicable to those resources.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiHotSwapPolicyCancel (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId
+);
+
+/*******************************************************************************
+**
+** Name: saHpiResourceActiveSet()
+**
+** Description:
+** This function allows an HPI User to request a resource to transition to the
+** ACTIVE state from the INSERTION PENDING or EXTRACTION PENDING state.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support managed
+** hot swap, as indicated by SAHPI_CAPABILITY_MANAGED_HOTSWAP in the
+** resource's RPT entry.
+** SA_ERR_HPI_INVALID_REQUEST is returned if the resource is:
+** * Not in the INSERTION PENDING or EXTRACTION PENDING state.
+** * Processing an auto-insertion or auto-extraction policy.
+**
+** Remarks:
+** During insertion, a resource supporting hot swap will generate an event to
+** indicate that it is in the INSERTION PENDING state. If an HPI User calls
+** saHpiHotSwapPolicyCancel() before the resource begins an auto-insert
+** operation, then the resource will remain in INSERTION PENDING state while
+** an HPI User acts on the resource to integrate it into the system. During
+** this state, an HPI User can instruct the resource to power on the
+** associated FRU, to de-assert reset, or to turn off its hot swap indicator
+** using the saHpiResourcePowerStateSet(), saHpiResourceResetStateSet(), or
+** saHpiHotSwapIndicatorStateSet() functions, respectively, if the resource
+** has those associated capabilities. Once an HPI User has completed with the
+** integration of the FRU, this function must be called to signal that the
+** resource should now transition into the ACTIVE state.
+**
+** An HPI User may also use this function to request a resource to return to
+** the ACTIVE state from the EXTRACTION PENDING state in order to reject an
+** extraction request.
+**
+** Because a resource that supports the simplified hot swap model will never
+** transition into INSERTION PENDING or EXTRACTION PENDING states, this
+** function is not applicable to those resources.
+**
+** Only valid if resource is in INSERTION PENDING or EXTRACTION PENDING state
+** and an auto-insert or auto-extract policy action has not been initiated.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceActiveSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId
+);
+
+/*******************************************************************************
+**
+** Name: saHpiResourceInactiveSet()
+**
+** Description:
+** This function allows an HPI User to request a resource to transition to the
+** INACTIVE state from the INSERTION PENDING or EXTRACTION PENDING state.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support managed
+** hot swap, as indicated by SAHPI_CAPABILITY_MANAGED_HOTSWAP in the
+** resource's RPT entry.
+** SA_ERR_HPI_INVALID_REQUEST is returned if the resource is:
+** * Not in the INSERTION PENDING or EXTRACTION PENDING state.
+** * Processing an auto-insertion or auto-extraction policy.
+**
+** Remarks:
+** During extraction, a resource supporting hot swap will generate an event
+** to indicate that it is in the EXTRACTION PENDING state. If an HPI User
+** calls saHpiHotSwapPolicyCancel() before the resource begins an auto-extract
+** operation, then the resource will remain in EXTRACTION PENDING state while
+** an HPI User acts on the resource to isolate the associated FRU from the
+** system. During this state, an HPI User can instruct the resource to power
+** off the FRU, to assert reset, or to turn on its hot swap indicator using
+** the saHpiResourcePowerStateSet(), saHpiResourceResetStateSet(), or
+** saHpiHotSwapIndicatorStateSet() functions, respectively, if the resource
+** has these associated capabilities. Once an HPI User has completed the
+** shutdown of the FRU, this function must be called to signal that the
+** resource should now transition into the INACTIVE state.
+**
+** An HPI User may also use this function to request a resource to return to
+** the INACTIVE state from the INSERTION PENDING state to abort a hot-swap
+** insertion action.
+**
+** Because a resource that supports the simplified hot swap model will never
+** transition into INSERTION PENDING or EXTRACTION PENDING states, this
+** function is not applicable to those resources.
+**
+** Only valid if resource is in EXTRACTION PENDING or INSERTION PENDING state
+** and an auto-extract or auto-insert policy action has not been initiated.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceInactiveSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId
+);
+
+/*******************************************************************************
+**
+** Name: saHpiAutoInsertTimeoutGet()
+**
+** Description:
+** This function allows an HPI User to request the auto-insert timeout value
+** within a specific domain. This value indicates how long the resource will
+** wait before the default auto-insertion policy is invoked.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** Timeout - [out] Pointer to location to store the number of nanoseconds to
+** wait before autonomous handling of the hot swap event. Reserved time
+** outvalues:
+** * SAHPI_TIMEOUT_IMMEDIATE indicates autonomous handling is immediate.
+** * SAHPI_TIMEOUT_BLOCK indicates autonomous handling does not occur.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the Timeout pointer is passed in
+** as NULL.
+**
+** Remarks:
+** Each domain maintains a single auto-insert timeout value and it is applied
+** to all contained resources upon insertion, which support managed hot swap.
+** Further information on the auto-insert timeout can be found in the
+** function saHpiAutoInsertTimeoutSet().
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAutoInsertTimeoutGet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_OUT SaHpiTimeoutT *Timeout
+);
+
+/*******************************************************************************
+**
+** Name: saHpiAutoInsertTimeoutSet()
+**
+** Description:
+** This function allows an HPI User to configure a timeout for how long to
+** wait before the default auto-insertion policy is invoked on a resource
+** within a specific domain.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** Timeout - [in] The number of nanoseconds to wait before autonomous handling
+** of the hot swap event. Reserved time out values:
+** * SAHPI_TIMEOUT_IMMEDIATE indicates proceed immediately to autonomous
+** handling.
+** * SAHPI_TIMEOUT_BLOCK indicates prevent autonomous handling.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_READ_ONLY is returned if the auto-insert timeout for the domain
+** is fixed as indicated by the SAHPI_DOMAIN_CAP_AUTOINSERT_READ_ONLY flag
+** in the DomainInfo structure.
+** SA_ERR_HPI_INVALID_PARAMS is returned when the Timeout parameter is not set
+** to SAHPI_TIMEOUT_BLOCK, SAHPI_TIMEOUT_IMMEDIATE or a positive value.
+**
+** Remarks:
+** This function accepts a parameter instructing each resource to impose a
+** delay before performing its default hot swap policy for auto-insertion.
+** The parameter may be set to SAHPI_TIMEOUT_IMMEDIATE to direct resources to
+** proceed immediately to auto-insertion, or to SAHPI_TIMEOUT_BLOCK to prevent
+** auto-insertion from ever occurring. If the parameter is set to another
+** value, then it defines the number of nanoseconds between the time a hot
+** swap event with HotSwapState = SAHPI_HS_STATE_INSERTION_PENDING is
+** generated, and the time that the auto-insertion policy will be invoked for
+** that resource. If, during this time period, a saHpiHotSwapPolicyCancel()
+** function call is processed, the timer will be stopped, and the
+** auto-insertion policy will not be invoked. Each domain maintains a single
+** auto-insert timeout value and it is applied to all contained resources upon
+** insertion, which support managed hot swap.
+**
+** Once the auto-insertion policy begins, an HPI User will not be allowed to
+** cancel the insertion policy; hence, the timeout should be set appropriately
+** to allow for this condition. Note that the timeout period begins when the
+** hot swap event with HotSwapState = SAHPI_HS_STATE_INSERTION_PENDING is
+** initially generated; not when it is received by an HPI User with a
+** saHpiEventGet() function call, or even when it is placed in a session
+** event queue.
+**
+** A resource may exist in multiple domains, which themselves may have
+** different auto-insertion timeout values. Upon insertion, the resource will
+** begin its auto-insertion policy based on the smallest auto-insertion
+** timeout value. As an example, if a resource is inserted into two domains,
+** one with an auto-insertion timeout of 5 seconds, and one with an
+** auto-insertion timeout of 10 seconds, the resource will begin its
+** auto-insertion policy at 5 seconds.
+**
+** An implementation may enforce a fixed, preset timeout value. In such
+** cases, the SAHPI_DOMAIN_CAP_AUTOINSERT_READ_ONLY flag will be set to
+** indicate that an HPI User cannot change the auto-insert Timeout value.
+** SA_ERR_HPI_READ_ONLY is returned if an HPI User attempts to change a
+** read-only timeout.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAutoInsertTimeoutSet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiTimeoutT Timeout
+);
+
+/*******************************************************************************
+**
+** Name: saHpiAutoExtractTimeoutGet()
+**
+** Description:
+** This function allows an HPI User to request the timeout for how long a
+** resource will wait before the default auto-extraction policy is invoked.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** Timeout - [out] Pointer to location to store the number of nanoseconds to
+** wait before autonomous handling of the hot swap event. Reserved time
+** out values:
+** * SAHPI_TIMEOUT_IMMEDIATE indicates autonomous handling is immediate.
+** * SAHPI_TIMEOUT_BLOCK indicates autonomous handling does not occur.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support managed
+** hot swap, as indicated by SAHPI_CAPABILITY_MANAGED_HOTSWAP in the
+** resource's RPT entry.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the Timeout pointer is passed in
+** as NULL.
+**
+** Remarks:
+** Further information on auto-extract timeouts is detailed in
+** saHpiAutoExtractTimeoutSet().
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAutoExtractTimeoutGet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiTimeoutT *Timeout
+);
+
+/*******************************************************************************
+**
+** Name: saHpiAutoExtractTimeoutSet()
+**
+** Description:
+** This function allows an HPI User to configure a timeout for how long to
+** wait before the default auto-extraction policy is invoked.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** Timeout - [in] The number of nanoseconds to wait before autonomous handling
+** of the hot swap event. Reserved timeout values:
+** * SAHPI_TIMEOUT_IMMEDIATE indicates proceed immediately to autonomous
+** handling.
+** * SAHPI_TIMEOUT_BLOCK indicates prevent autonomous handling.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support managed
+** hot swap, as indicated by SAHPI_CAPABILITY_MANAGED_HOTSWAP in the
+** resource's RPT entry.
+** SA_ERR_HPI_INVALID_PARAMS is returned when the Timeout parameter is not set
+** to SAHPI_TIMEOUT_BLOCK, SAHPI_TIMEOUT_IMMEDIATE or a positive value.
+** SA_ERR_HPI_READ_ONLY is returned if the auto-extract timeout for the
+** resource is fixed, as indicated by the
+** SAHPI_HS_CAPABILITY_AUTOEXTRACT_READ_ONLY in the resource's RPT entry.
+**
+** Remarks:
+** This function accepts a parameter instructing the resource to impose a
+** delay before performing its default hot swap policy for auto-extraction.
+** The parameter may be set to SAHPI_TIMEOUT_IMMEDIATE to direct the resource
+** to proceed immediately to auto-extraction, or to SAHPI_TIMEOUT_BLOCK to
+** prevent auto-extraction from ever occurring on a resource. If the parameter
+** is set to another value, then it defines the number of nanoseconds between
+** the time a hot swap event with
+** HotSwapState = SAHPI_HS_STATE_EXTRACTION_PENDING is generated and the time
+** that the auto-extraction policy will be invoked for the resource. If,
+** during this time period, a saHpiHotSwapPolicyCancel() function call is
+** processed, the timer will be stopped, and the auto-extraction policy will
+** not be invoked.
+**
+** Once the auto-extraction policy begins, an HPI User will not be allowed to
+** cancel the extraction policy; hence, the timeout should be set
+** appropriately to allow for this condition. Note that the timeout period
+** begins when the hot swap event with
+** HotSwapState = SAHPI_HS_STATE_EXTRACTION_PENDING is initially generated;
+** not when it is received by a HPI User with a saHpiEventGet() function call,
+** or even when it is placed in a session event queue.
+**
+** The auto-extraction policy is set at the resource level and is only
+** supported by resources supporting the Managed Hot Swap capability. The
+** auto-extraction timeout value cannot be modified if the resource's "Hot
+** Swap AutoExtract Read-only" capability is set. After discovering that a
+** newly inserted resource supports Managed Hot Swap, and read-write
+** auto-extract timeouts, an HPI User may use this function to change the
+** timeout of the auto-extraction policy for that resource. If a resource
+** supports the simplified hot swap model, setting this timer has no effect
+** since the resource will transition directly to NOT PRESENT state on an
+** extraction.
+**
+** An implementation may enforce a fixed, preset timeout value. In such
+** cases, the SAHPI_HS_CAPABILITY_AUTOEXTRACT_READ_ONLY flag will be set to
+** indicate that an HPI User cannot change the auto-extract Timeout value.
+** SA_ERR_HPI_READ_ONLY is returned if an HPI User attempts to change a
+** read-only timeout.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiAutoExtractTimeoutSet(
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiTimeoutT Timeout
+);
+
+/*******************************************************************************
+**
+** Name: saHpiHotSwapStateGet()
+**
+** Description:
+** This function allows an HPI User to retrieve the current hot swap state of
+** a resource.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** State - [out] Pointer to location to store returned state information.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support managed
+** hot swap, as indicated by SAHPI_CAPABILITY_MANAGED_HOTSWAP in the
+** resource's RPT entry.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the State pointer is passed in as
+** NULL.
+**
+** Remarks:
+** The returned state will be one of the following four states:
+** * SAHPI_HS_STATE_INSERTION_PENDING
+** * SAHPI_HS_STATE_ACTIVE
+** * SAHPI_HS_STATE_EXTRACTION_PENDING
+** * SAHPI_HS_STATE_INACTIVE
+**
+** The state SAHPI_HS_STATE_NOT_PRESENT will never be returned, because a
+** resource that is not present cannot be addressed by this function in the
+** first place.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiHotSwapStateGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiHsStateT *State
+);
+
+/*******************************************************************************
+**
+** Name: saHpiHotSwapActionRequest()
+**
+** Description:
+** This function allows an HPI User to invoke an insertion or extraction
+** process via software.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** Action - [in] Requested action:
+** * SAHPI_HS_ACTION_INSERTION
+** * SAHPI_HS_ACTION_EXTRACTION
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support managed
+** hot swap, as indicated by SAHPI_CAPABILITY_MANAGED_HOTSWAP in the
+** resource's RPT entry.
+** SA_ERR_HPI_INVALID_REQUEST is returned if the resource is not in an
+** appropriate hot swap state, or if the requested action is inappropriate
+** for the current hot swap state. See the Remarks section below.
+** SA_ERR_HPI_INVALID_PARAMS is returned when Action is not one of the valid
+** enumerated values for this type.
+**
+** Remarks:
+** A resource supporting hot swap typically requires a physical action on the
+** associated FRU to invoke an insertion or extraction process. An insertion
+** process is invoked by physically inserting the FRU into a chassis.
+** Physically opening an ejector latch or pressing a button invokes the
+** extraction process. This function provides an alternative means to invoke
+** an insertion or extraction process via software.
+**
+** This function may only be called:
+** * To request an insertion action when the resource is in INACTIVE state.
+** * To request an extraction action when the resource is in the ACTIVE
+** state.
+** The function may not be called when the resource is in any other state.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiHotSwapActionRequest (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiHsActionT Action
+);
+
+/*******************************************************************************
+**
+** Name: saHpiHotSwapIndicatorStateGet()
+**
+** Description:
+** This function allows an HPI User to retrieve the state of the hot swap
+** indicator. A FRU associated with a hot-swappable resource may include a hot
+** swap indicator such as a blue LED. This indicator signifies that the FRU is
+** ready for removal.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** State - [out] Pointer to location to store state of hot swap indicator.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support:
+** * Managed hot swap, as indicated by SAHPI_CAPABILITY_MANAGED_HOTSWAP in
+** the resource's RPT entry.
+** * A hot swap indicator on the FRU as indicated by the
+** SAHPI_HS_CAPABILITY_INDICATOR_SUPPORTED in the resource's RPT entry.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the State pointer is passed in as
+** NULL.
+**
+** Remarks:
+** The returned state is either SAHPI_HS_INDICATOR_OFF or
+** SAHPI_HS_INDICATOR_ON. This function will return the state of the
+** indicator, regardless of what hot swap state the resource is in.
+**
+** Not all resources supporting managed hot swap will necessarily support
+** this function. Whether or not a resource supports the hot swap indicator
+** is specified in the Hot Swap Capabilities field of the RPT entry.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiHotSwapIndicatorStateGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiHsIndicatorStateT *State
+);
+
+/*******************************************************************************
+**
+** Name: saHpiHotSwapIndicatorStateSet()
+**
+** Description:
+** This function allows an HPI User to set the state of the hot swap
+** indicator. A FRU associated with a hot-swappable resource may include a hot
+** swap indicator such as a blue LED. This indicator signifies that the FRU is
+** ready for removal.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** State - [in] State of hot swap indicator to be set.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support:
+** * Managed hot swap, as indicated by SAHPI_CAPABILITY_MANAGED_HOTSWAP in
+** the resource's RPT entry.
+** * A hot swap indicator on the FRU as indicated by the
+** SAHPI_HS_CAPABILITY_INDICATOR_SUPPORTED in the resource's RPT entry.
+** SA_ERR_HPI_INVALID_PARAMS is returned when State is not one of the valid
+** enumerated values for this type.
+**
+** Remarks:
+** Valid states include SAHPI_HS_INDICATOR_OFF or SAHPI_HS_INDICATOR_ON. This
+** function will set the indicator regardless of what hot swap state the
+** resource is in, though it is recommended that this function be used only
+** in conjunction with moving the resource to the appropriate hot swap state.
+**
+** Not all resources supporting managed hot swap will necessarily support this
+** function. Whether or not a resource supports the hot swap indicator is
+** specified in the Hot Swap Capabilities field of the RPT entry.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiHotSwapIndicatorStateSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiHsIndicatorStateT State
+);
+
+/*******************************************************************************
+**
+** Name: saHpiParmControl()
+**
+** Description:
+** This function allows an HPI User to save and restore parameters associated
+** with a specific resource.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** Action - [in] Action to perform on resource parameters.
+** * SAHPI_DEFAULT_PARM Restores the factory default settings for a
+** specific resource. Factory defaults include sensor thresholds and
+** configurations, and resource- specific configuration parameters.
+** * SAHPI_SAVE_PARM Stores the resource configuration parameters in
+** non-volatile storage. Resource configuration parameters stored in
+** non-volatile storage will survive power cycles and resource resets.
+** * SAHPI_RESTORE_PARM Restores resource configuration parameters from
+** non-volatile storage. Resource configuration parameters include
+** sensor thresholds and sensor configurations, as well as
+** resource-specific parameters.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support
+** parameter control, as indicated by SAHPI_CAPABILITY_CONFIGURATION in the
+** resource's RPT entry.
+** SA_ERR_HPI_INVALID_PARAMS is returned when Action is not set to a proper
+** value.
+**
+** Remarks:
+** Resource-specific parameters should be documented in an implementation
+** guide for the HPI implementation.
+**
+** When this API is called with SAHPI_RESTORE_PARM as the action prior to
+** having made a call with this API where the action parameter was set to
+** SAHPI_SAVE_PARM, the default parameters will be restored.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiParmControl (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiParmActionT Action
+);
+
+/*******************************************************************************
+**
+** Name: saHpiResourceResetStateGet()
+**
+** Description:
+** This function gets the reset state of an entity, allowing an HPI User to
+** determine if the entity is being held with its reset asserted. If a
+** resource manages multiple entities, this function will address the entity
+** which is identified in the RPT entry for the resource.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** ResetAction - [out] The current reset state of the entity. Valid reset
+** states are:
+** * SAHPI_RESET_ASSERT: The entity's reset is asserted, e.g., for hot
+** swap insertion/extraction purposes.
+** * SAHPI_RESET_DEASSERT: The entity's reset is not asserted.
+**
+** Return Value:
+** SA_OK is returned if the resource has reset control, and the reset state
+** has successfully been determined; otherwise, an error code is returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support reset
+** control as indicated by SAHPI_CAPABILITY_RESET in the resource's RPT
+** entry.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the ResetAction pointer is passed
+** in as NULL.
+**
+** Remarks:
+** SAHPI_COLD_RESET and SAHPI_WARM_RESET are pulsed resets, and are not valid
+** values to be returned in ResetAction. If the entity is not being held in
+** reset (using SAHPI_RESET_ASSERT), the appropriate value is
+** SAHPI_RESET_DEASSERT.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceResetStateGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiResetActionT *ResetAction
+);
+
+/*******************************************************************************
+**
+** Name: saHpiResourceResetStateSet()
+**
+** Description:
+** This function directs the resource to perform the specified reset type on
+** the entity that it manages. If a resource manages multiple entities, this
+** function addresses the entity that is identified in the RPT entry for the
+** resource.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** ResetAction - [in] Type of reset to perform on the entity. Valid reset
+** actions are:
+** * SAHPI_COLD_RESET: Perform a 'Cold Reset' on the entity (pulse),
+** leaving reset de-asserted,
+** * SAHPI_WARM_RESET: Perform a 'Warm Reset' on the entity (pulse),
+** leaving reset de-asserted,
+** * SAHPI_RESET_ASSERT: Put the entity into reset state and hold reset
+** asserted, e.g., for hot swap insertion/extraction purposes,
+** * SAHPI_RESET_DEASSERT: Bring the entity out of the reset state.
+**
+** Return Value:
+** SA_OK is returned if the resource has reset control, and the requested
+** reset action has succeeded; otherwise, an error code is returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support resource
+** reset control, as indicated by SAHPI_CAPABILITY_RESET in the resource's
+** RPT entry.
+** SA_ERR_HPI_INVALID_PARAMS is returned when the ResetAction is not set to a
+** proper value.
+** SA_ERR_HPI_INVALID_CMD is returned if the requested ResetAction is
+** SAHPI_RESET_ASSERT and the resource does not support this action.
+** SA_ERR_HPI_INVALID_REQUEST is returned if the ResetAction is
+** SAHPI_COLD_RESET or SAHPI_WARM_RESET and reset is currently asserted.
+**
+** Remarks:
+** Some resources may not support holding the entity in reset. If this is the
+** case, the resource should return SA_ERR_HPI_INVALID_CMD if the
+** SAHPI_RESET_ASSERT action is requested. All resources that have the
+** SAHPI_CAPABILITY_RESET flag set in their RPTs should support
+** SAHPI_COLD_RESET and SAHPI_WARM_RESET. However, it is not required that
+** these actions be different. That is, some resources may only have one
+** sort of reset action (e.g., a "cold" reset) which is executed when either
+** SAHPI_COLD_RESET or SAHPI_WARM_RESET is requested.
+**
+** The SAHPI_RESET_ASSERT is used to hold an entity in reset, and
+** SAHPI_RESET_DEASSERT is used to bring the entity out of an asserted reset
+** state.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourceResetStateSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiResetActionT ResetAction
+);
+
+/*******************************************************************************
+**
+** Name: saHpiResourcePowerStateGet()
+**
+** Description:
+** This function gets the power state of an entity, allowing an HPI User to
+** determine if the entity is currently powered on or off. If a resource
+** manages multiple entities, this function will address the entity which is
+** identified in the RPT entry for the resource.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** State - [out] The current power state of the resource. Valid power states
+** are:
+** * SAHPI_POWER_OFF: The entity's primary power is OFF,
+** * SAHPI_POWER_ON: The entity's primary power is ON.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support power
+** management, as indicated by SAHPI_CAPABILITY_POWER in the resource's
+** RPT entry.
+** SA_ERR_HPI_INVALID_PARAMS is returned if the State pointer is passed in
+** as NULL.
+**
+** Remarks:
+** SAHPI_POWER_CYCLE is a pulsed power operation and is not a valid return
+** for the power state.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourcePowerStateGet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_OUT SaHpiPowerStateT *State
+);
+
+/*******************************************************************************
+**
+** Name: saHpiResourcePowerStateSet()
+**
+** Description:
+** This function directs the resource to perform the power control action on
+** the entity that it manages. If a resource manages multiple entities, this
+** function addresses the entity that is identified in the RPT entry for the
+** resource.
+**
+** Parameters:
+** SessionId - [in] Identifier for a session context previously obtained using
+** saHpiSessionOpen().
+** ResourceId - [in] Resource identified for this operation.
+** State - [in] the requested power control action. Valid values are:
+** * SAHPI_POWER_OFF: The entity's primary power is turned OFF,
+** * SAHPI_POWER_ON: The entity's primary power is turned ON,
+** * SAHPI_POWER_CYCLE: The entity's primary power is turned OFF, then
+** turned ON.
+**
+** Return Value:
+** SA_OK is returned on successful completion; otherwise, an error code is
+** returned.
+** SA_ERR_HPI_CAPABILITY is returned if the resource does not support power
+** management, as indicated by SAHPI_CAPABILITY_POWER in the resource's
+** RPT entry.
+** SA_ERR_HPI_INVALID_PARAMS is returned when State is not one of the valid
+** enumerated values for this type.
+**
+** Remarks:
+** This function controls the hardware power on a FRU entity regardless of
+** what hot-swap state the resource is in. For example, it is legal (and may
+** be desirable) to cycle power on the FRU even while it is in ACTIVE state in
+** order to attempt to clear a fault condition. Similarly, a resource could be
+** instructed to power on a FRU even while it is in INACTIVE state, for
+** example, in order to run off-line diagnostics.
+**
+** Not all resources supporting hot swap will necessarily support this
+** function. In particular, resources that use the simplified hot swap model
+** may not have the ability to control FRU power.
+**
+** This function may also be supported for non-FRU entities if power control
+** is available for those entities.
+**
+*******************************************************************************/
+SaErrorT SAHPI_API saHpiResourcePowerStateSet (
+ SAHPI_IN SaHpiSessionIdT SessionId,
+ SAHPI_IN SaHpiResourceIdT ResourceId,
+ SAHPI_IN SaHpiPowerStateT State
+);
+
+#endif
diff --git a/hpiutil/TODO b/hpiutil/TODO new file mode 100644 index 0000000..5ab06da --- /dev/null +++ b/hpiutil/TODO @@ -0,0 +1,65 @@ +HPIUTIL TODO
+
+x Porting the utilities in hpiutil from HPI_A to HPI_B
+ These can be built for either version of HPI via a compile flag.
+ They default to HPI_A, since HPI_B libraries are not fully released yet.
+ Ported to HPI B with OpenHPI:
+ hpialarmpanel.c done, with compile flags 10/13/04
+ hpireset.c, hpisensor.c, hpisel.c hpiwdt.c - done
+ hpifru.c (hpifrub.c) - done
+ hpievent.c (runs, but ThresholdSet error -1010 due to lib bug)
+ COMPLETE + +x SpiLibd supplies inventory capability for DIMMs, but gives error when
+ trying to get its inventory data.
+ COMPLETE in hpiutil-1.1.9 +
+Intel HPI library/daemon (SpiLibd) known issues:
+- If the SEL is totally empty (not even a 'cleared' message), the SpiLibd
+ will not start because the GetSelEntry returns 0xcb.
+ The lib probably needs to set eventid to zero and proceed in this case.
+
+OpenHPI library/daemon with ipmidirect plugin:
+ 11/10/06 completed adding LEDs, watchdog, and Intel RMS features + 12/07/06 openhpi-2.6.3 released, fully tested + +OpenHPI library with ipmi plugin testing & issues:
+ Continuing testing of hpiutil with OpenHPI using its ipmi plugin,
+ but currently there are blocking bugs open (see latest date below).
+ 02/11/04 OpenHPI 0.5 dies during discovery
+ 05/24/04 OpenHPI 1.0.0 testing, wrote more bugzillas
+ 10/14/04 openhpi-1.9.1 testing, then added alarm panel code
+ With patches to 1.9.1, alarm panel controls are operational now.
+ 12/02/04 Submitted fixes for watchdog 932510 & 1077934.
+ 01/10/05 Submitted fixes for several inventory bugs into openhpi-2.0.1 cvs.
+ Bug list: (f=fixed, x=rejected, o=open)
+ x 924280 IPMI plug-in takes too long to discover 2004-03-26 18:24
+ (ref #959765)
+ x 932486 wrong string terminator for Compact SDRs 2004-04-09 15:37
+ f 932492 Lots of FRU errors displayed during discovery 2004-04-09 15:47
+ f 932496 EventLog RecordId and Time are invalid 2004-04-09 15:55
+ f 932510 Watchdog values incorrect 2004-04-09 16:09
+ f 933737 hpievent test failed (EventGet & hyst_set) 2004-04-12 12:29
+ f 933741 Reset Controls not implemented 2004-04-12 12:33
+ f 934475 Add some alarm panel logic 2004-04-13 16:23
+ f 948551 RdrGet returns -1024 with hpifru 2004-05-05 11:25
+ f 948644 ResetStateSet returns error -1005 2004-05-05 14:01
+ o 959749 hpithres returns -1006 from ThresholdsGet 2004-05-24 18:02
+ f 959753 No Inventory RDRs are populated 2004-05-24 18:13
+ f 959765 IPMI plug-in takes too long to discover 2004-05-24 18:27
+ (some progress, 10 min down to 3 min - now 2.5 min)
+ f 1040276 Event in SEL not mapped to HPI 2004-10-04 19:22
+ f 1068098 EventLogEntryGet returns less than 16 data by 2004-11-17 11:04
+ o 1070785 OpenHPI discover method hangs if system is no 2004-11-21 23:54
+ f 1077934 some entity tags have zero length 2004-12-02 16:46
+ o 1086122 Can't set (write) Inventory fields 2004-12-15 18:02
+ f 1090496 FLOAT64 decoding should not be scientific not 2004-12-23 13:39
+ f 1095266 Inventory Product Fields report Board Area ty 2005-01-03 16:24
+ f 1095262 Inventory Custom field not retrieved 2005-01-03 16:14
+ o 1095256 Takes 5 Discovery passes to fill in FRU data 2005-01-03 16:09
+ f 1095225 Inventory content truncated 2005-01-03 15:04
+ f 1098067 hpisensor output usability 2005-01-07 13:37
+ f 1098073 ThresholdsGet sometimes returns TIMEOUT 2005-01-07 13:49
+ 09/26/06 Submitted bug against openhpi-2.6.2 ipmi plugin discovery failure
+ o 1565999 ohoi: domain not fully up, sel support = 0 2006-09-26 17;16
+
diff --git a/hpiutil/env.hpi b/hpiutil/env.hpi new file mode 100755 index 0000000..2d14c96 --- /dev/null +++ b/hpiutil/env.hpi @@ -0,0 +1,11 @@ +export SAHPI_HOME=/etc/hpi +export SPI_LIB_LOG_LOCATION=/var/log/spilib +export SPI_LIB_CFG_LOCATION=$SAHPI_HOME/spi-lib.conf +export SPI_DAEMON_LOG_LOCATION=/var/log/spidaemon +export SPI_DAEMON_CFG_LOCATION=$SAHPI_HOME/spi-daemon.conf +export SPI_DAEMON_LOG_LEVEL=-l5 +export SPI_LIB_LOG_LEVEL=-l5 +export LD_LIBRARY_PATH=/usr/lib:/lib +# export LD_LIBRARY_PATH=$SAHPI_HOME/lib +# export LD_ASSUME_KERNEL=2.4.1 +# make sure to "mkdir -p /etc/hpi" diff --git a/hpiutil/env.openhpi b/hpiutil/env.openhpi new file mode 100755 index 0000000..53bdee6 --- /dev/null +++ b/hpiutil/env.openhpi @@ -0,0 +1,2 @@ +export LD_LIBRARY_PATH=/usr/local/lib +# make sure to "mkdir -p /etc/hpi" diff --git a/hpiutil/hpialarmpanel.c b/hpiutil/hpialarmpanel.c new file mode 100644 index 0000000..f918636 --- /dev/null +++ b/hpiutil/hpialarmpanel.c @@ -0,0 +1,373 @@ +/* + * hpialarmpanel.c + * + * Author: Andy Cress arcress at users.sourceforge.net + * Copyright (c) 2003 Intel Corporation. + * + * 04/15/03 Andy Cress - created + * 04/17/03 Andy Cress - mods for resourceid, first good run + * 04/23/03 Andy Cress - first run with good ControlStateGet + * 04/24/03 Andy Cress - v0.5 with good ControlStateSet + * 04/29/03 Andy Cress - v0.6 changed control.oem values + * 06/06/03 Andy Cress - v1.0 check for Analog States + * 02/23/04 Andy Cress - v1.1 add checking/setting disk LEDs + * 10/13/04 Andy Cress - v1.2 add ifdefs for HPI_A & HPI_B, added -d/raw + */ +/*M* +Copyright (c) 2003, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + a.. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + b.. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + c.. Neither the name of Intel Corporation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *M*/ + +#include <stdio.h> +#include <stdlib.h> +#include <getopt.h> +#include "SaHpi.h" + +#define uchar unsigned char +#define SAHPI_OEM_ALARM_LED 0x10 +#define SAHPI_OEM_DISK_LED 0x20 +#ifdef HPI_A +char *progver = "1.2 HPI-A"; +#else +char *progver = "1.2 HPI-B"; +#endif +char fdebug = 0; +char *states[3] = {"off", "ON ", "unknown" }; +uchar fsetid = 0; +uchar fid = 0; +#define NLEDS 6 +struct { + uchar fset; + uchar val; +} leds[NLEDS] = { /* rdr.RdrTypeUnion.CtrlRec.Oem is an index for this */ +{/*pwr*/ 0, 0}, +{/*crt*/ 0, 0}, +{/*maj*/ 0, 0}, +{/*min*/ 0, 0}, +{/*diska*/ 0, 0}, +{/*diskb*/ 0, 0} }; + + +int +main(int argc, char **argv) +{ + int c; + SaErrorT rv; + SaHpiSessionIdT sessionid; +#ifdef HPI_A + SaHpiVersionT hpiVer; + SaHpiRptInfoT rptinfo; +#endif + SaHpiRptEntryT rptentry; + SaHpiEntryIdT rptentryid; + SaHpiEntryIdT nextrptentryid; + SaHpiEntryIdT entryid; + SaHpiEntryIdT nextentryid; + SaHpiResourceIdT resourceid; + SaHpiRdrT rdr; + SaHpiCtrlTypeT ctltype; + SaHpiCtrlNumT ctlnum; + SaHpiCtrlStateT ctlstate; + int raw_val = 0; + int j; + uchar b = 0; + + printf("%s ver %s\n", argv[0],progver); + while ( (c = getopt( argc, argv,"rxa:b:c:m:n:p:i:d:o?")) != EOF ) + switch(c) { + + case 'c': b = atoi(optarg); /* set crit alarm value */ + leds[1].fset = 1; + leds[1].val = b; + break; + case 'm': b = atoi(optarg); /* set major alarm value */ + leds[2].fset = 1; + leds[2].val = b; + break; + case 'n': b = atoi(optarg); /* set minor alarm value */ + leds[3].fset = 1; + leds[3].val = b; + break; + case 'a': b = atoi(optarg); /* set disk a fault led */ + leds[4].fset = 1; + leds[4].val = b; + break; + case 'b': b = atoi(optarg); /* set disk b fault led */ + leds[5].fset = 1; + leds[5].val = b; + break; + case 'p': b = atoi(optarg); /* set power alarm value */ + leds[0].fset = 1; + leds[0].val = b; + break; + case 'i': fid = atoi(optarg); /* set chassis id on/off */ + fsetid = 1; + break; + case 'd': raw_val = atoi(optarg); /* set raw alarm byte */ + break; + case 'o': fsetid=1; fid=0; /* set all alarms off */ + for (j = 0; j < NLEDS; j++) { + leds[j].fset = 1; + leds[j].val = 0; + } + break; + case 'x': fdebug = 1; break; /* debug messages */ + default: + printf("Usage: %s [-a -b -c -i -m -n -p -o -x]\n", argv[0]); + printf(" where -c1 sets Critical Alarm on\n"); + printf(" -c0 sets Critical Alarm off\n"); + printf(" -m1 sets Major Alarm on\n"); + printf(" -m0 sets Major Alarm off\n"); + printf(" -n1 sets Minor Alarm on\n"); + printf(" -n0 sets Minor Alarm off\n"); + printf(" -p1 sets Power Alarm on\n"); + printf(" -p0 sets Power Alarm off\n"); + printf(" -i5 sets Chassis ID on for 5 sec\n"); + printf(" -i0 sets Chassis ID off\n"); + printf(" -a1 sets Disk A fault on\n"); + printf(" -a0 sets Disk A fault off\n"); + printf(" -b1 sets Disk B fault on\n"); + printf(" -b0 sets Disk B fault off\n"); +#ifndef HPI_A + printf(" -d[byte] sets raw Alarm byte\n"); +#endif + printf(" -o sets all Alarms off\n"); + printf(" -x show eXtra debug messages\n"); + exit(1); + } + +#ifdef HPI_A + rv = saHpiInitialize(&hpiVer); + if (rv != SA_OK) { + printf("saHpiInitialize error %d\n",rv); + exit(-1); + } + if (fdebug) printf("Initialize complete, rv = %d\n",rv); + rv = saHpiSessionOpen(SAHPI_DEFAULT_DOMAIN_ID,&sessionid,NULL); + if (rv != SA_OK) { + if (rv == SA_ERR_HPI_ERROR) + printf("saHpiSessionOpen: error %d, HPI daemon not running\n",rv); + else + printf("saHpiSessionOpen error %d\n",rv); + exit(-1); + } + rv = saHpiResourcesDiscover(sessionid); + if (fdebug) printf("saHpiResourcesDiscover complete, rv = %d\n",rv); + rv = saHpiRptInfoGet(sessionid,&rptinfo); + if (fdebug) printf("saHpiRptInfoGet rv = %d\n",rv); + printf("RptInfo: UpdateCount = %x, UpdateTime = %lx\n", + rptinfo.UpdateCount, (unsigned long)rptinfo.UpdateTimestamp); +#else /* HPI B.01.01 */ + rv = saHpiSessionOpen(SAHPI_UNSPECIFIED_DOMAIN_ID,&sessionid,NULL); + if (rv != SA_OK) { + printf("saHpiSessionOpen error %d\n",rv); + exit(-1); + } + rv = saHpiDiscover(sessionid); + if (fdebug) printf("saHpiDiscover complete, rv = %d\n",rv); + + if (fsetid) { /* HPI B.01.01 Identify logic */ + printf("Setting ID led to %d sec\n", fid); + /* do saHpiIdentify function */ + printf("Not yet supported\n"); + } +#endif + + /* walk the RPT list */ + rptentryid = SAHPI_FIRST_ENTRY; + while ((rv == SA_OK) && (rptentryid != SAHPI_LAST_ENTRY)) + { + rv = saHpiRptEntryGet(sessionid,rptentryid,&nextrptentryid,&rptentry); + if (rv != SA_OK) printf("RptEntryGet: rv = %d\n",rv); + if (rv == SA_OK) { + /* Walk the RDR list for this RPT entry */ + entryid = SAHPI_FIRST_ENTRY; + resourceid = rptentry.ResourceId; +#ifdef HPI_A + rptentry.ResourceTag.Data[rptentry.ResourceTag.DataLength] = 0; +#else + /* + * Don't stringify here, since OpenHPI returns a valid string, but + * a DataLength of zero here (for processor, bios). + */ +#endif + //if (fdebug) + printf("rptentry[%d] resourceid=%d tag: %s\n", + rptentryid, resourceid, rptentry.ResourceTag.Data); + while ((rv == SA_OK) && (entryid != SAHPI_LAST_ENTRY)) + { + rv = saHpiRdrGet(sessionid,resourceid, + entryid,&nextentryid, &rdr); + if (fdebug) printf("saHpiRdrGet[%d] rv = %d\n",entryid,rv); + if (rv == SA_OK) { + if (rdr.RdrType == SAHPI_CTRL_RDR) { + /*type 1 includes alarm LEDs*/ + ctlnum = rdr.RdrTypeUnion.CtrlRec.Num; + rdr.IdString.Data[rdr.IdString.DataLength] = 0; + if (fdebug) printf("Ctl[%d]: %d %d %s\n", + ctlnum, rdr.RdrTypeUnion.CtrlRec.Type, + rdr.RdrTypeUnion.CtrlRec.OutputType, + rdr.IdString.Data); + rv = saHpiControlTypeGet(sessionid,resourceid, + ctlnum,&ctltype); + if (fdebug) printf("saHpiControlTypeGet[%d] rv = %d, type = %d\n",ctlnum,rv,ctltype); +#ifdef HPI_A + rv = saHpiControlStateGet(sessionid,resourceid, + ctlnum,&ctlstate); +#else + rv = saHpiControlGet(sessionid, resourceid, ctlnum, + NULL, &ctlstate); +#endif + if (fdebug) + printf("saHpiControlStateGet[%d] rv = %d v = %x\n", + ctlnum,rv,ctlstate.StateUnion.Digital); + printf("RDR[%d]: ctltype=%d:%d oem=%02x %s \t", + rdr.RecordId, + rdr.RdrTypeUnion.CtrlRec.Type, + rdr.RdrTypeUnion.CtrlRec.OutputType, + rdr.RdrTypeUnion.CtrlRec.Oem, + rdr.IdString.Data); + if (rv == SA_OK) { + if (ctlstate.Type == SAHPI_CTRL_TYPE_ANALOG) + b = 2; /*Identify*/ + else { + b = ctlstate.StateUnion.Digital; + if (b > 2) b = 2; + } + printf("state = %s\n",states[b]); + } else { printf("\n"); } + + if (rdr.RdrTypeUnion.CtrlRec.Type == SAHPI_CTRL_TYPE_ANALOG && + rdr.RdrTypeUnion.CtrlRec.OutputType == SAHPI_CTRL_LED) { + /* This is a Chassis Identify */ + if (fsetid) { + printf("Setting ID led to %d sec\n", fid); + ctlstate.Type = SAHPI_CTRL_TYPE_ANALOG; + ctlstate.StateUnion.Analog = fid; +#ifdef HPI_A + rv = saHpiControlStateSet(sessionid, + resourceid, ctlnum,&ctlstate); +#else + rv = saHpiControlSet(sessionid, resourceid, + ctlnum, SAHPI_CTRL_MODE_MANUAL, + &ctlstate); +#endif + printf("saHpiControlStateSet[%d] rv = %d\n",ctlnum,rv); + } + } else + if (rdr.RdrTypeUnion.CtrlRec.Type == SAHPI_CTRL_TYPE_DIGITAL && + (rdr.RdrTypeUnion.CtrlRec.Oem & 0xf0) == SAHPI_OEM_ALARM_LED && + rdr.RdrTypeUnion.CtrlRec.OutputType == SAHPI_CTRL_LED) { + /* this is an alarm LED */ + b = (uchar)rdr.RdrTypeUnion.CtrlRec.Oem & 0x0f; + if ((b < NLEDS) && leds[b].fset) { + printf("Setting alarm led %d to %d\n",b,leds[b].val); + if (leds[b].val == 0) + ctlstate.StateUnion.Digital = SAHPI_CTRL_STATE_OFF; + else + ctlstate.StateUnion.Digital = SAHPI_CTRL_STATE_ON; +#ifdef HPI_A + rv = saHpiControlStateSet(sessionid, + resourceid, ctlnum,&ctlstate); +#else + rv = saHpiControlSet(sessionid, resourceid, + ctlnum, SAHPI_CTRL_MODE_MANUAL, + &ctlstate); +#endif + /* if (fdebug) */ + printf("saHpiControlStateSet[%d] rv = %d\n",ctlnum,rv); + } + } + else if (rdr.RdrTypeUnion.CtrlRec.Type == SAHPI_CTRL_TYPE_DIGITAL && + (rdr.RdrTypeUnion.CtrlRec.Oem & 0xf0) == SAHPI_OEM_DISK_LED && + rdr.RdrTypeUnion.CtrlRec.OutputType == SAHPI_CTRL_LED) { + /* this is a disk LED */ + b = (uchar)rdr.RdrTypeUnion.CtrlRec.Oem & 0x0f; + if ((b < NLEDS) && leds[b].fset) { + printf("Setting disk led %d to %d\n",b,leds[b].val); + if (leds[b].val == 0) + ctlstate.StateUnion.Digital = SAHPI_CTRL_STATE_OFF; + else + ctlstate.StateUnion.Digital = SAHPI_CTRL_STATE_ON; +#ifdef HPI_A + rv = saHpiControlStateSet(sessionid, + resourceid, ctlnum,&ctlstate); +#else + rv = saHpiControlSet(sessionid, resourceid, + ctlnum, SAHPI_CTRL_MODE_MANUAL, + &ctlstate); +#endif + printf("saHpiControlStateSet[%d] rv = %d\n",ctlnum,rv); + } + } +#ifndef HPI_A + else if (rdr.RdrTypeUnion.CtrlRec.Type == SAHPI_CTRL_TYPE_OEM && + rdr.RdrTypeUnion.CtrlRec.OutputType == SAHPI_CTRL_FRONT_PANEL_LOCKOUT) { + /* This is a raw control for alarm panel, + * but HPI never populates an RDR for this. */ + printf("Found raw alarm control\n"); + if (raw_val != 0) { + ctlstate.Type = SAHPI_CTRL_TYPE_OEM; + ctlstate.StateUnion.Oem.BodyLength = 1; + ctlstate.StateUnion.Oem.Body[0] = raw_val; + printf("Set raw alarm control to %x\n",raw_val); + rv = saHpiControlSet(sessionid, resourceid, ctlnum, + SAHPI_CTRL_MODE_MANUAL, &ctlstate); + printf("saHpiControlSet[%d] raw, rv = %d\n",ctlnum,rv); + } + } +#endif + rv = SA_OK; /* ignore errors & continue */ + } + j++; + entryid = nextentryid; + } + } /* RdrGet loop */ + rptentryid = nextrptentryid; + } + } /* RptEntryGet loop */ + + rv = saHpiSessionClose(sessionid); +#ifdef HPI_A + rv = saHpiFinalize(); +#endif + + exit(0); + return(0); +} + +/*-----------Sample output----------------------------------- +hpialarmpanel ver 0.6 +RptInfo: UpdateCount = 5, UpdateTime = 8a2dc6c0 +rptentry[0] resourceid=1 tag: Mullins +RDR[45]: ctltype=2:1 oem=0 Chassis Identify Control +RDR[48]: ctltype=0:1 oem=10 Front Panel Power Alarm LED state = off +RDR[51]: ctltype=0:1 oem=13 Front Panel Minor Alarm LED state = ON +RDR[46]: ctltype=0:0 oem=0 Cold Reset Control +RDR[49]: ctltype=0:1 oem=11 Front Panel Critical Alarm LED state = off +RDR[50]: ctltype=0:1 oem=12 Front Panel Major Alarm LED state = off + *-----------------------------------------------------------*/ +/* end hpialarmpanel.c */ diff --git a/hpiutil/hpievent.c b/hpiutil/hpievent.c new file mode 100644 index 0000000..56a5930 --- /dev/null +++ b/hpiutil/hpievent.c @@ -0,0 +1,621 @@ +/* + * hpievent.c + * + * Author: Bill Barkley + * Copyright (c) 2003 Intel Corporation. + * + * 05/14/03 + * 06/06/03 - complete working version + * 06/20/03 ARCress - added option for Mullins w default=Langley-type sensor + * added progver + * 02/26/04 ARCress - added general search for any Fan sensor. + * 03/17/04 ARCress - changed to Temp sensor (always has Lower Major) + * 03/30/04 ARCress - fixed rv with saHpiSensorThresholdsSet + * 01/03/05 ARCress - some edits for HPI_A/B + * 01/07/05 ARCress - clean compile for HPI B, but ThresholdGet returns -1006 + * 04/01/05 ARCress - set UpMajor if not fFan + */ +/*M* +Copyright (c) 2003, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + a.. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + b.. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + c.. Neither the name of Intel Corporation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *M*/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <getopt.h> +#include "SaHpi.h" + +char progname[] = "hpievent"; +char progver[] = "1.2"; +char s_name[] = "80mm Sys Fan (R)"; /*TSRLT2, default*/ +char sm_name[] = "Baseboard Fan 2"; /*TSRMT2, Mullins*/ +int fFan = 1; +char s_pattn[] = "Temp"; /* else use the first temperature SDR found */ +char *sensor_name; +int sensor_name_len = 0; +int fdebug = 0; +int fxdebug = 0; +int fsensor = 0; +int slist = 0; +int i,j,k = 0; +char inbuff[1024]; +char outbuff[256]; +SaHpiUint32T buffersize; +SaHpiUint32T actualsize; +SaHpiTextBufferT *strptr; +#ifdef HPI_A +SaHpiInventoryDataT *inv; +SaHpiInventGeneralDataT *dataptr; +SaHpiSensorEvtEnablesT enables1; +SaHpiSensorEvtEnablesT enables2; +#endif + +char *rdrtypes[5] = { + "None ", + "Control ", + "Sensor ", + "Invent ", + "Watchdog"}; + +#define HPI_NSEC_PER_SEC 1000000000LL +#define NSU 32 +char *units[NSU] = { + "units", "deg C", "deg F", "deg K", "volts", "amps", + "watts", "joules", "coulombs", "va", "nits", "lumen", + "lux", "candela", "kpa", "psi", "newton", "cfm", + "rpm", "Hz", "us", "ms", "sec", "min", + "hours", "days", "weeks", "mil", "in", "ft", + "mm", "cm" +}; + +#ifdef NOT +void +fixstr(SaHpiTextBufferT *strptr) +{ + size_t datalen; + outbuff[0] = 0; + if (strptr == NULL) return; + datalen = strptr->DataLength; + if (datalen != 0) { + strncpy ((char *)outbuff, (char *)strptr->Data, datalen); + outbuff[datalen] = 0; + } +} +#endif + +static void ShowThresh( + SaHpiSensorThresholdsT *sensbuff, SaHpiSensorThdMaskT ReadThold) +{ + printf( " Supported Thresholds:\n"); +#ifdef HPI_A + if (sensbuff->LowCritical.ValuesPresent & SAHPI_SRF_INTERPRETED) + printf( " Lower Critical Threshold: %5.2f\n", + sensbuff->LowCritical.Interpreted.Value.SensorFloat32); + if (sensbuff->LowMajor.ValuesPresent & SAHPI_SRF_INTERPRETED) + printf( " Lower Major Threshold: %5.2f\n", + sensbuff->LowMajor.Interpreted.Value.SensorFloat32); + if (sensbuff->LowMinor.ValuesPresent & SAHPI_SRF_INTERPRETED) + printf( " Lower Minor Threshold: %5.2f\n", + sensbuff->LowMinor.Interpreted.Value.SensorFloat32); + + if (sensbuff->UpCritical.ValuesPresent & SAHPI_SRF_INTERPRETED) + printf( " Upper Critical Threshold: %5.2f\n", + sensbuff->UpCritical.Interpreted.Value.SensorFloat32); + if (sensbuff->UpMajor.ValuesPresent & SAHPI_SRF_INTERPRETED) + printf( " Upper Major Threshold: %5.2f\n", + sensbuff->UpMajor.Interpreted.Value.SensorFloat32); + if (sensbuff->UpMinor.ValuesPresent & SAHPI_SRF_INTERPRETED) + printf( " Upper Minor Threshold: %5.2f\n", + sensbuff->UpMinor.Interpreted.Value.SensorFloat32); + + if (sensbuff->PosThdHysteresis.ValuesPresent & SAHPI_SRF_RAW) + printf( " Positive Threshold Hysteresis in RAW\n"); + if (sensbuff->PosThdHysteresis.ValuesPresent & SAHPI_SRF_INTERPRETED) + printf( " Positive Threshold Hysteresis: %5.2f\n", + sensbuff->PosThdHysteresis.Interpreted.Value.SensorFloat32); + if (sensbuff->NegThdHysteresis.ValuesPresent & SAHPI_SRF_RAW) + printf( " Negative Threshold Hysteresis in RAW\n"); + if (sensbuff->NegThdHysteresis.ValuesPresent & SAHPI_SRF_INTERPRETED) + printf( " Negative Threshold Hysteresis: %5.2f\n", + sensbuff->NegThdHysteresis.Interpreted.Value.SensorFloat32); +#else + if ( ReadThold & SAHPI_STM_LOW_CRIT ) { + printf( " Lower Critical Threshold: %5.2f\n", + sensbuff->LowCritical.Value.SensorFloat64); + } + if ( ReadThold & SAHPI_STM_LOW_MAJOR ) { + printf( " Lower Major Threshold: %5.2f\n", + sensbuff->LowMajor.Value.SensorFloat64); + } + if ( ReadThold & SAHPI_STM_LOW_MINOR ) { + printf( " Lower Minor Threshold: %5.2f\n", + sensbuff->LowMinor.Value.SensorFloat64); + } + + if ( ReadThold & SAHPI_STM_UP_CRIT ) { + printf( " Upper Critical Threshold: %5.2f\n", + sensbuff->UpCritical.Value.SensorFloat64); + } + if ( ReadThold & SAHPI_STM_UP_MAJOR ) { + printf( " Upper Major Threshold: %5.2f\n", + sensbuff->UpMajor.Value.SensorFloat64); + } + if ( ReadThold & SAHPI_STM_UP_MINOR ) { + printf( " Upper Minor Threshold: %5.2f\n", + sensbuff->UpMinor.Value.SensorFloat64); + } + + if ( ReadThold & SAHPI_STM_UP_HYSTERESIS ) { + printf( " Positive Threshold Hysteresis: %5.2f\n", + sensbuff->PosThdHysteresis.Value.SensorFloat64); + } + if ( ReadThold & SAHPI_STM_LOW_HYSTERESIS ) { + printf( " Negative Threshold Hysteresis: %5.2f\n", + sensbuff->NegThdHysteresis.Value.SensorFloat64); + } +#endif + printf( "\n"); +} + +static +SaErrorT DoEvent( + SaHpiSessionIdT sessionid, + SaHpiResourceIdT resourceid, + SaHpiSensorRecT *sensorrec ) +{ + SaHpiSensorNumT sensornum; + SaHpiSensorReadingT reading; + SaHpiSensorThresholdsT senstbuff1; + SaHpiSensorThresholdsT senstbuff2; + SaErrorT rv, rv2; +#ifdef HPI_A + SaHpiSensorReadingT conv_reading; +#else + SaHpiEventStateT evtstate; +#endif + + SaHpiTimeoutT timeout = (SaHpiInt64T)(12 * HPI_NSEC_PER_SEC); /* 12 seconds*/ + SaHpiEventT event; + SaHpiRptEntryT rptentry; + SaHpiRdrT rdr; + char *unit; + int eventflag = 0; + int i; + + sensornum = sensorrec->Num; + +/* Get current sensor reading */ +#ifdef HPI_A + rv = saHpiSensorReadingGet( sessionid, resourceid, sensornum, &reading); +#else + rv = saHpiSensorReadingGet(sessionid,resourceid, sensornum, &reading,&evtstate); +#endif + if (rv != SA_OK) { + printf( "saHpiSensorReadingGet error %d\n",rv); +/* printf("ReadingGet ret=%d\n", rv); */ + return(rv); + } + +#ifdef HPI_A + /* HPI A has both interpreted and raw. HPI B has only interpreted. */ + if ((reading.ValuesPresent & SAHPI_SRF_INTERPRETED) == 0 && + (reading.ValuesPresent & SAHPI_SRF_RAW)) { + /* only try convert if intrepreted not available. */ + rv = saHpiSensorReadingConvert(sessionid, resourceid, sensornum, + &reading, &conv_reading); + if (rv != SA_OK) { + printf("raw=%x conv_ret=%d\n", reading.Raw, rv); + /* printf("conv_rv=%s\n", decode_error(rv)); */ + return(rv); + } else { + reading.Interpreted.Type = conv_reading.Interpreted.Type; + reading.Interpreted.Value.SensorUint32 = + conv_reading.Interpreted.Value.SensorUint32; + } + } +#endif + + /* Determine units of interpreted reading */ + i = sensorrec->DataFormat.BaseUnits; + if (i > NSU) i = 0; + unit = units[i]; + /* We know that reading.Type is float for the chosen sensor. */ +#ifdef HPI_A + printf(" = %05.2f %s \n", + reading.Interpreted.Value.SensorFloat32, unit); +#else + printf(" = %05.2f %s \n", reading.Value.SensorFloat64, unit); +#endif + +/* Retrieve current threshold setings, twice */ +/* once for backup and once for modification */ + + /* Get backup copy */ + rv = saHpiSensorThresholdsGet( + sessionid, resourceid, sensornum, &senstbuff1); + if (rv != SA_OK) { + printf( "saHpiSensorThresholdsGet error %d\n",rv); return(rv); } + /* OpenHPI 2.0.0 ipmi plugin returns -1006 timeout here, why ???? */ + + /* Get modification copy */ + rv = saHpiSensorThresholdsGet( + sessionid, resourceid, sensornum, &senstbuff2); + if (rv != SA_OK) { + printf( "saHpiSensorThresholdsGet error %d\n",rv); return(rv); } + + /* Display current thresholds */ + if (rv == SA_OK) { + printf( " Current\n"); + ShowThresh( &senstbuff2, sensorrec->ThresholdDefn.ReadThold); + } + +/* Set new threshold to current reading + 10% */ +#ifdef HPI_A + if (fFan) { + senstbuff2.LowMajor.Interpreted.Value.SensorFloat32 = + reading.Interpreted.Value.SensorFloat32 * (SaHpiFloat32T)1.10; + } else { + senstbuff2.UpMinor.Interpreted.Value.SensorFloat32 = + reading.Interpreted.Value.SensorFloat32 * (SaHpiFloat32T)0.90; + senstbuff2.UpMajor.Interpreted.Value.SensorFloat32 = + reading.Interpreted.Value.SensorFloat32 * (SaHpiFloat32T)0.05; + } + if (fdebug) { + printf( "ValuesPresent = %x\n", senstbuff2.LowMajor.ValuesPresent); + printf( "Values Mask = %x\n", (SAHPI_SRF_RAW)); + } + senstbuff2.LowMajor.ValuesPresent = + senstbuff2.LowMajor.ValuesPresent ^ (SAHPI_SRF_RAW); + if (fdebug) + printf( "ValuesPresent = %x\n", senstbuff2.LowMajor.ValuesPresent); +#else + /* If fan type, set LowMajor, if temp type, set HighMinor. */ + if (fFan) { + senstbuff2.LowMajor.Value.SensorFloat64 = + reading.Value.SensorFloat64 * (SaHpiFloat64T)1.10; + } else { /* usually Temperature sensor */ + senstbuff2.UpMinor.Value.SensorFloat64 = + reading.Value.SensorFloat64 * (SaHpiFloat64T)0.90; + senstbuff2.UpMajor.Value.SensorFloat64 = + reading.Value.SensorFloat64 * (SaHpiFloat64T)0.95; + } +#endif + + /* Display new current thresholds */ + if (rv == SA_OK) { + printf( " New\n"); + ShowThresh( &senstbuff2, sensorrec->ThresholdDefn.ReadThold); + } + +#ifdef HPI_A + /* See what Events are Enabled */ + rv = saHpiSensorEventEnablesGet( + sessionid, resourceid, sensornum, &enables1); + if (rv != SA_OK) { + printf( "saHpiSensorEventEnablesGet error %d\n",rv); return(rv); } + + printf( "Sensor Event Enables: \n"); + printf( " Sensor Status = %x\n", enables1.SensorStatus); + printf( " Assert Events = %x\n", enables1.AssertEvents); + printf( " Deassert Events = %x\n", enables1.DeassertEvents); +#endif + +/* + enables1.AssertEvents = 0x0400; + enables1.DeassertEvents = 0x0400; + rv = saHpiSensorEventEnablesSet( + sessionid, resourceid, sensornum, &enables1); + if (rv != SA_OK) return(rv); +*/ + + +/************************ + Temporary exit */ +/* + return(rv); +*/ + +/* Subscribe to New Events, only */ +printf( "Subscribe to events\n"); +#ifdef HPI_A + rv = saHpiSubscribe( sessionid, (SaHpiBoolT)0 ); +#else + rv = saHpiSubscribe( sessionid ); +#endif + if (rv != SA_OK) { + printf( "saHpiSubscribe error %d\n",rv); return(rv); } + +/* Set new thresholds */ +printf( "Set new thresholds\n"); + + rv = saHpiSensorThresholdsSet( + sessionid, resourceid, sensornum, &senstbuff2); + if (rv != SA_OK) { + printf( "saHpiSensorThresholdsSet error %d\n",rv); + /* rv2 = saHpiUnsubscribe( sessionid ); + if (fxdebug) printf("saHpiUnsubscribe, rv = %d\n",rv2); + return(rv); */ + } + +/* Go wait on event to occur */ +printf( "Go and get the event\n"); + eventflag = 0; + while ( eventflag == 0) { +#ifdef HPI_A + rv = saHpiEventGet( sessionid, timeout, &event, &rdr, &rptentry ); +#else + timeout = SAHPI_TIMEOUT_BLOCK; + timeout = SAHPI_TIMEOUT_IMMEDIATE; /* use this if not threaded */ + rv = saHpiEventGet( sessionid, timeout, &event, &rdr, &rptentry, NULL); +#endif + if (rv != SA_OK) { + if (rv == SA_ERR_HPI_TIMEOUT) { + printf( "Time expired during EventGet - Test FAILED\n"); + /* Reset to the original thresholds */ + printf( "Reset thresholds\n"); + rv = saHpiSensorThresholdsSet( + sessionid, resourceid, sensornum, &senstbuff1); + if (rv != SA_OK) return(rv); + + /* Re-read threshold values */ + rv = saHpiSensorThresholdsGet( + sessionid, resourceid, sensornum, &senstbuff2); + if (rv != SA_OK) return(rv); + return(rv); + } else { + printf( "Error %d during EventGet - Test FAILED\n",rv); + return(rv); + } + } + +/* Decode the event information */ +printf( "Decode event info\n"); + if (event.EventType == SAHPI_ET_SENSOR) { + printf( "Sensor # = %2d Severity = %2x\n", + event.EventDataUnion.SensorEvent.SensorNum, event.Severity ); + if (event.EventDataUnion.SensorEvent.SensorNum == sensornum) { + eventflag = 1; + printf( "Got it - Test PASSED\n"); + } + } + } +/* Reset to the original thresholds */ +printf( "Reset thresholds\n"); + rv = saHpiSensorThresholdsSet( + sessionid, resourceid, sensornum, &senstbuff1); + if (rv != SA_OK) { + printf( "saHpiSensorThresholdsSet error %d\n",rv); + rv2 = saHpiUnsubscribe( sessionid ); + if (fxdebug) printf("saHpiUnsubscribe, rv = %d\n",rv2); + return(rv); + } else { + /* Re-read threshold values */ + rv = saHpiSensorThresholdsGet( sessionid, resourceid, sensornum, + &senstbuff2); + if (rv != SA_OK) { + printf( "saHpiSensorThresholdsGet error %d\n",rv); + } else { /* rv == SA_OK */ + /* Display reset thresholds */ + printf( " Reset\n"); + ShowThresh( &senstbuff2, sensorrec->ThresholdDefn.ReadThold); + } + } /*end-else SA_OK*/ + +/* Unsubscribe to future events */ +printf( "Unsubscribe\n"); + rv2 = saHpiUnsubscribe( sessionid ); + if (fxdebug) printf("saHpiUnsubscribe, rv = %d\n",rv2); + + return(rv); +} /*end DoEvent*/ + +/* + * findmatch + * returns offset of the match if found, or -1 if not found. + */ +static int +findmatch(char *buffer, int sbuf, char *pattern, int spattern, char figncase) +{ + int c, j, imatch; + j = 0; + imatch = 0; + for (j = 0; j < sbuf; j++) { + if (sbuf - j < spattern && imatch == 0) return (-1); + c = buffer[j]; + if (c == pattern[imatch]) { + imatch++; + if (imatch == spattern) return (++j - imatch); + } else if (pattern[imatch] == '?') { /*wildcard char*/ + imatch++; + if (imatch == spattern) return (++j - imatch); + } else if (figncase == 1) { + if ((c & 0x5f) == (pattern[imatch] & 0x5f)) { + imatch++; + if (imatch == spattern) return (++j - imatch); + } else + imatch = 0; + } else + imatch = 0; + } + return (-1); +} /*end findmatch */ + +int +main(int argc, char **argv) +{ + int c; +#ifdef HPI_A + SaHpiVersionT hpiVer; + SaHpiRptInfoT rptinfo; +#endif + SaHpiSessionIdT sessionid; + SaHpiRptEntryT rptentry; + SaHpiEntryIdT rptentryid; + SaHpiEntryIdT nextrptentryid; + SaHpiEntryIdT entryid; + SaHpiEntryIdT nextentryid; + SaHpiResourceIdT resourceid; + SaHpiRdrT rdr; + int firstpass = 1; + SaErrorT rv; + + printf("%s ver %s\n", progname,progver); + sensor_name = (char *)strdup(s_name); + while ( (c = getopt( argc, argv,"ms:xz?")) != EOF ) + switch(c) + { + case 'z': fxdebug = 1; /* fall thru to include next setting */ + case 'x': fdebug = 1; break; + case 'm': + sensor_name = (char *)strdup(sm_name); + fFan = 0; /*assume not a Fan */ + break; + case 's': + fsensor = 1; + if (optarg) { + sensor_name = (char *)strdup(optarg); + } + break; + default: + printf("Usage: %s [-xm] [-s sensor_descriptor]\n", progname); + printf(" -s Sensor descriptor\n"); + printf(" -m use Mullins sensor descriptor\n"); + printf(" -x Display debug messages\n"); + printf(" -z Display extra debug messages\n"); + exit(1); + } +#ifdef HPI_A + inv = (SaHpiInventoryDataT *)&inbuff[0]; + + rv = saHpiInitialize(&hpiVer); + + if (rv != SA_OK) { + printf("saHpiInitialize error %d\n",rv); + exit(-1); + } + rv = saHpiSessionOpen(SAHPI_DEFAULT_DOMAIN_ID,&sessionid,NULL); + if (rv != SA_OK) { + printf("saHpiSessionOpen error %d\n",rv); + exit(-1); + } + + if (fdebug) printf("Starting Discovery ...\n"); + rv = saHpiResourcesDiscover(sessionid); + if (fdebug) printf("saHpiResourcesDiscover rv = %d\n",rv); + + rv = saHpiRptInfoGet(sessionid,&rptinfo); + if (fxdebug) printf("saHpiRptInfoGet rv = %d\n",rv); + if (fdebug) printf("RptInfo: UpdateCount = %x, UpdateTime = %lx\n", + rptinfo.UpdateCount, (unsigned long)rptinfo.UpdateTimestamp); + +#else + rv = saHpiSessionOpen(SAHPI_UNSPECIFIED_DOMAIN_ID,&sessionid,NULL); + if (rv != SA_OK) { + printf("saHpiSessionOpen error %d\n",rv); + exit(-1); + } + if (fdebug) printf("Starting Discovery ...\n"); + rv = saHpiDiscover(sessionid); + if (fdebug) printf("saHpiResourcesDiscover rv = %d\n",rv); + + // rv = saHpiDomainInfoGet(sessionid,&rptinfo); + { + /* + * If OpenHPI, we need to wait extra time before doing + * ThresholdsGet because its discovery isn't really done. + */ + sleep(5); + } +#endif + + /* walk the RPT list */ + rptentryid = SAHPI_FIRST_ENTRY; + while ((rv == SA_OK) && (rptentryid != SAHPI_LAST_ENTRY)) + { + rv = saHpiRptEntryGet(sessionid,rptentryid,&nextrptentryid,&rptentry); + if (rv == SA_OK) + { + /* walk the RDR list for this RPT entry */ + entryid = SAHPI_FIRST_ENTRY; +#ifdef HPI_A + rptentry.ResourceTag.Data[rptentry.ResourceTag.DataLength] = 0; +#endif + resourceid = rptentry.ResourceId; + + if (fdebug) printf("rptentry[%d] resourceid=%d\n", entryid,resourceid); + + printf("Resource Tag: %s\n", rptentry.ResourceTag.Data); + while ((rv == SA_OK) && (entryid != SAHPI_LAST_ENTRY)) + { + rv = saHpiRdrGet(sessionid,resourceid, entryid,&nextentryid, &rdr); + + if (fxdebug) printf("saHpiRdrGet[%d] rv = %d\n",entryid,rv); + + if (rv == SA_OK) + { + if (rdr.RdrType == SAHPI_SENSOR_RDR) + { + /*type 2 includes sensor and control records*/ + rdr.IdString.Data[rdr.IdString.DataLength] = 0; +#ifdef OLD + if (strncmp(rdr.IdString.Data, sensor_name, + rdr.IdString.DataLength) == 0) +#else + if (findmatch(rdr.IdString.Data,rdr.IdString.DataLength, + sensor_name, strlen(sensor_name),0) >= 0) +#endif + { + printf( "%02d %s\t", rdr.RecordId, rdr.IdString.Data); + rv = DoEvent( sessionid, resourceid, &rdr.RdrTypeUnion.SensorRec); + if (rv != SA_OK) + printf( "Returned Error from DoEvent: rv=%d\n", rv); + break; /* done with rdr loop */ + } + } + if (rv != SA_OK) + printf( "Returned HPI Error: rv=%d\n", rv); + entryid = nextentryid; + } + if (firstpass && entryid == SAHPI_LAST_ENTRY) { + /* Not found yet, so try again, looking for any Temp */ + sensor_name = s_pattn; + entryid = SAHPI_FIRST_ENTRY; + firstpass = 0; + fFan = 0; /*Temp not Fan*/ + } + } /*while rdr loop */ + rptentryid = nextrptentryid; + } + } /*while rpt loop*/ + rv = saHpiSessionClose(sessionid); +#ifdef HPI_A + rv = saHpiFinalize(); +#endif + exit(0); +} + /* end hpievent.c */ diff --git a/hpiutil/hpifru.c b/hpiutil/hpifru.c new file mode 100644 index 0000000..c18a5e2 --- /dev/null +++ b/hpiutil/hpifru.c @@ -0,0 +1,19 @@ +/* + * hpifru.c + * + * Author: Bill Barkley & Andy Cress + * Copyright (c) 2003-2004 Intel Corporation. + * + * 04/18/03 + * 06/09/03 - new CustomField parsing, including SystemGUID + * 02/19/04 ARCress - generalized BMC tag parsing, created IsTagBmc() + * 05/05/04 ARCress - added OpenHPI Mgt Ctlr tag to IsTagBmc() + * 09/22/04 ARCress - invbuf size bigger, check null ptr in fixstr + * 10/14/04 ARCress - added HPI_B logic, incomplete + */ +#ifdef HPI_A +#include "hpifrua.c" +#else +#include "hpifrub.c" +#endif +/* end hpifru.c */ diff --git a/hpiutil/hpifrua.c b/hpiutil/hpifrua.c new file mode 100644 index 0000000..ae41a7d --- /dev/null +++ b/hpiutil/hpifrua.c @@ -0,0 +1,550 @@ +/* + * hpifrua.c (hpifru.c for HPI_A) + * + * Author: Bill Barkley & Andy Cress + * Copyright (c) 2003-2005 Intel Corporation. + * + * 04/18/03 + * 06/09/03 - new CustomField parsing, including SystemGUID + * 02/19/04 ARCress - generalized BMC tag parsing, created IsTagBmc() + * 05/05/04 ARCress - added OpenHPI Mgt Ctlr tag to IsTagBmc() + * 09/22/04 ARCress - inbuff size bigger, check null ptr in fixstr + * 01/11/05 ARCress - skip INVENTORY RDRs that return errors + * 03/16/05 ARCress - make sure asset tag is BMC for writes + */ +/*M* +Copyright (c) 2003-2005, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + a.. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + b.. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + c.. Neither the name of Intel Corporation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *M*/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <getopt.h> +#include "SaHpi.h" + +#define NCT 25 + +char progver[] = "1.4 HPI-A"; +char progname[] = "hpifru"; +char *chasstypes[NCT] = { + "Not Defined", "Other", "Unknown", "Desktop", "Low Profile Desktop", + "Pizza Box", "Mini Tower", "Tower", "Portable", "Laptop", + "Notebook", "Handheld", "Docking Station", "All in One", "Subnotebook", + "Space Saving", "Lunch Box", "Main Server", "Expansion", "SubChassis", + "Buss Expansion Chassis", "Peripheral Chassis", "RAID Chassis", + "Rack-Mount Chassis", "New" +}; +int fasset = 0; +int fdebug = 0; +int fxdebug = 0; +int i,j,k = 0; +SaHpiUint32T buffersize; +SaHpiUint32T actualsize; +char *asset_tag; +char inbuff[2048]; +char outbuff[1024]; +SaHpiInventoryDataT *inv; +SaHpiInventChassisTypeT chasstype; +SaHpiInventGeneralDataT *dataptr; +SaHpiTextBufferT *strptr; + +#ifdef ANYINVENT +static int +IsTagBmc(char *dstr, int dlen) +{ + /* if OpenHPI, always return TRUE for any Inventory RDR */ + return(1); +} +#else +char bmctag[] = "Basbrd Mgmt Ctlr"; /* see IsTagBmc() */ +char bmctag2[] = "Management Controller"; /* see IsTagBmc() */ +/* + * findmatch + * returns offset of the match if found, or -1 if not found. + */ +static int +findmatch(char *buffer, int sbuf, char *pattern, int spattern, char figncase) +{ + int c, j, imatch; + j = 0; + imatch = 0; + for (j = 0; j < sbuf; j++) { + if (sbuf - j < spattern && imatch == 0) return (-1); + c = buffer[j]; + if (c == pattern[imatch]) { + imatch++; + if (imatch == spattern) return (++j - imatch); + } else if (pattern[imatch] == '?') { /*wildcard char*/ + imatch++; + if (imatch == spattern) return (++j - imatch); + } else if (figncase == 1) { + if ((c & 0x5f) == (pattern[imatch] & 0x5f)) { + imatch++; + if (imatch == spattern) return (++j - imatch); + } else + imatch = 0; + } else + imatch = 0; + } + return (-1); +} /*end findmatch */ + +static int +IsTagBmc(char *dstr, int dlen) +{ + int ret = 0; + if (strncmp(dstr, bmctag, sizeof(bmctag)) == 0) /* Sahalee */ + ret = 1; + else if (findmatch(dstr,dlen,"BMC",3,1) >= 0) /* mBMC or other */ + ret = 1; + else if (findmatch(dstr,dlen,bmctag2,sizeof(bmctag2),1) >= 0) + ret = 1; /* BMC tag for OpenHPI with ipmi plugin */ + return(ret); +} +#endif + +static void +fixstr(SaHpiTextBufferT *strptr) +{ + size_t datalen; + + outbuff[0] = 0; + if (strptr == NULL) return; + datalen = strptr->DataLength; + if (datalen > sizeof(outbuff)) datalen = sizeof(outbuff) - 1; + if (datalen != 0) { + strncpy ((char *)outbuff, (char *)strptr->Data, datalen); + outbuff[datalen] = 0; + if (fdebug) { + printf("TextBuffer: %s, len=%d, dtype=%x lang=%d\n", + outbuff, strptr->DataLength, + strptr->DataType, strptr->Language); + } + } +} + +static void +prtchassinfo(void) +{ + chasstype = (SaHpiInventChassisTypeT)inv->DataRecords[i]->RecordData.ChassisInfo.Type; + for (k=0; k<NCT; k++) { + if (k == chasstype) + printf( "Chassis Type : %s\n", chasstypes[k]); + } + + dataptr = (SaHpiInventGeneralDataT *)&inv->DataRecords[i]->RecordData.ChassisInfo.GeneralData; + strptr=dataptr->Manufacturer; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Chassis Manufacturer: %s\n", outbuff); + + strptr=dataptr->ProductName; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Chassis Name : %s\n", outbuff); + + strptr=dataptr->ProductVersion; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Chassis Version : %s\n", outbuff); + + strptr=dataptr->ModelNumber; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Chassis Model Number: %s\n", outbuff); + + strptr=dataptr->SerialNumber; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Chassis Serial # : %s\n", outbuff); + + strptr=dataptr->PartNumber; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Chassis Part Number : %s\n", outbuff); + + strptr=dataptr->FileId; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Chassis FRU File ID : %s\n", outbuff); + + strptr=dataptr->AssetTag; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Chassis Asset Tag : %s\n", outbuff); + if (dataptr->CustomField[0] != 0) + { + if (dataptr->CustomField[0]->DataLength != 0) + strncpy ((char *)outbuff, (char *)dataptr->CustomField[0]->Data, + dataptr->CustomField[0]->DataLength); + outbuff[dataptr->CustomField[0]->DataLength] = 0; + printf( "Chassis OEM Field : %s\n", outbuff); + } +} + +static void +prtprodtinfo(void) +{ + int j; + dataptr = (SaHpiInventGeneralDataT *)&inv->DataRecords[i]->RecordData.ProductInfo; + strptr=dataptr->Manufacturer; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Product Manufacturer: %s\n", outbuff); + + strptr=dataptr->ProductName; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Product Name : %s\n", outbuff); + + strptr=dataptr->ProductVersion; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Product Version : %s\n", outbuff); + + strptr=dataptr->ModelNumber; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Product Model Number: %s\n", outbuff); + + strptr=dataptr->SerialNumber; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Product Serial # : %s\n", outbuff); + + strptr=dataptr->PartNumber; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Product Part Number : %s\n", outbuff); + + strptr=dataptr->FileId; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Product FRU File ID : %s\n", outbuff); + + strptr=dataptr->AssetTag; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Product Asset Tag : %s\n", outbuff); + + for (j = 0; j < 10; j++) { + int ii; + if (dataptr->CustomField[j] != NULL) { + if ((dataptr->CustomField[j]->DataType == 0) && + (dataptr->CustomField[j]->DataLength == 16)) { /*binary GUID*/ + printf( "IPMI SystemGUID : "); + for (ii=0; ii< dataptr->CustomField[j]->DataLength; ii++) + printf("%02x", dataptr->CustomField[j]->Data[ii]); + printf("\n"); + } else { /* other text field */ + dataptr->CustomField[j]->Data[ + dataptr->CustomField[j]->DataLength] = 0; + if (fdebug) { + printf("TextBuffer: %s, len=%d, dtype=%x lang=%d\n", + dataptr->CustomField[j]->Data, + dataptr->CustomField[j]->DataLength, + dataptr->CustomField[j]->DataType, + dataptr->CustomField[j]->Language); + } + printf( "Product OEM Field : %s\n", + dataptr->CustomField[j]->Data); + } + } else /* NULL pointer */ + break; + } /*end for*/ +} + +static void +prtboardinfo(void) +{ + dataptr = (SaHpiInventGeneralDataT *)&inv->DataRecords[i]->RecordData.BoardInfo; + strptr=dataptr->Manufacturer; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Board Manufacturer : %s\n", outbuff); + + strptr=dataptr->ProductName; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Board Product Name : %s\n", outbuff); + + strptr=dataptr->ModelNumber; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Board Model Number : %s\n", outbuff); + + strptr=dataptr->PartNumber; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Board Part Number : %s\n", outbuff); + + strptr=dataptr->ProductVersion; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Board Version : %s\n", outbuff); + + strptr=dataptr->SerialNumber; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Board Serial # : %s\n", outbuff); + + strptr=dataptr->FileId; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Board FRU File ID : %s\n", outbuff); + + strptr=dataptr->AssetTag; + fixstr((SaHpiTextBufferT *)strptr); + printf( "Board Asset Tag : %s\n", outbuff); + + if (dataptr->CustomField[0] != 0) + { + if (dataptr->CustomField[0]->DataLength != 0) + strncpy ((char *)outbuff, (char *)dataptr->CustomField[0]->Data, + dataptr->CustomField[0]->DataLength); + outbuff[dataptr->CustomField[0]->DataLength] = 0; + printf( "Board OEM Field : %s\n", outbuff); + } +} + +int +main(int argc, char **argv) +{ + int prodrecindx=0; + int asset_len=0; + int c; + SaErrorT rv; + SaHpiVersionT hpiVer; + SaHpiSessionIdT sessionid; + SaHpiRptInfoT rptinfo; + SaHpiRptEntryT rptentry; + SaHpiEntryIdT rptentryid; + SaHpiEntryIdT nextrptentryid; + SaHpiEntryIdT entryid; + SaHpiEntryIdT nextentryid; + SaHpiResourceIdT resourceid; + SaHpiRdrT rdr; + SaHpiEirIdT eirid; + + printf("%s ver %s\n",progname,progver); + + while ( (c = getopt( argc, argv,"a:xz?")) != EOF ) + switch(c) { + case 'z': fxdebug = 1; /* fall thru to include next setting */ + case 'x': fdebug = 1; break; + case 'a': + fasset = 1; + if (optarg) + { + asset_tag = (char *)strdup(optarg); + asset_len = strlen(optarg); + } + /* + printf( "String Length = %d\n", asset_len); + printf( "String Length = %d\n", strlen(optarg)); + */ + break; + default: + printf("Usage: %s [-x] [-a asset_tag]\n", progname); + printf(" -a Sets the asset tag\n"); + printf(" -x Display debug messages\n"); + printf(" -z Display extra debug messages\n"); + exit(1); + } + inv = (SaHpiInventoryDataT *)&inbuff[0]; + rv = saHpiInitialize(&hpiVer); + if (rv != SA_OK) { + printf("saHpiInitialize error %d\n",rv); + exit(-1); + } + rv = saHpiSessionOpen(SAHPI_DEFAULT_DOMAIN_ID,&sessionid,NULL); + if (rv != SA_OK) { + printf("saHpiSessionOpen error %d\n",rv); + exit(-1); + } + + rv = saHpiResourcesDiscover(sessionid); + if (fxdebug) printf("saHpiResourcesDiscover rv = %d\n",rv); + rv = saHpiRptInfoGet(sessionid,&rptinfo); + if (fxdebug) printf("saHpiRptInfoGet rv = %d\n",rv); + if (fdebug) printf("RptInfo: UpdateCount = %x, UpdateTime = %lx\n", + rptinfo.UpdateCount, (unsigned long)rptinfo.UpdateTimestamp); + + /* walk the RPT list */ + rptentryid = SAHPI_FIRST_ENTRY; + while ((rv == SA_OK) && (rptentryid != SAHPI_LAST_ENTRY)) + { + rv = saHpiRptEntryGet(sessionid,rptentryid,&nextrptentryid,&rptentry); + if (rv != SA_OK) printf("RptEntryGet: rv = %d\n",rv); + if (rv == SA_OK) + { + /* walk the RDR list for this RPT entry */ + entryid = SAHPI_FIRST_ENTRY; + /* OpenHPI sometimes has bad RPT DataLength here. */ + rptentry.ResourceTag.Data[rptentry.ResourceTag.DataLength] = 0; + resourceid = rptentry.ResourceId; + printf("Resource Tag: %s\n", rptentry.ResourceTag.Data); + if (fdebug) printf("rptentry[%d] resourceid=%d\n", rptentryid,resourceid); + while ((rv == SA_OK) && (entryid != SAHPI_LAST_ENTRY)) + { + rv = saHpiRdrGet(sessionid,resourceid, entryid,&nextentryid, &rdr); + if (fxdebug) printf("saHpiRdrGet[%d] rv = %d\n",entryid,rv); + if (rv == SA_OK) + { + if (rdr.RdrType == SAHPI_INVENTORY_RDR) + { + /*type 3 includes inventory records*/ + eirid = rdr.RdrTypeUnion.InventoryRec.EirId; + rdr.IdString.Data[rdr.IdString.DataLength] = 0; + if (fdebug) printf( "RDR[%d]: Inventory, type=%d num=%d %s\n", + rdr.RecordId, rdr.RdrType, eirid, rdr.IdString.Data); + else printf("RDR[%d]: %s \n",rdr.RecordId,rdr.IdString.Data); + + buffersize = sizeof(inbuff); + if (fdebug) printf("BufferSize=%d InvenDataRecSize=%d\n", + buffersize, sizeof(inbuff)); + /* Always get inventory data, not just for BMC */ + /* if ( IsTagBmc(rdr.IdString.Data, rdr.IdString.DataLength) ) */ + { + memset(inv,0,buffersize); + if (fdebug) printf("InventoryDataRead (%d, %d, %d, %d, %p, %d)\n", + sessionid, resourceid, eirid, buffersize, inv, + actualsize); + + rv = saHpiEntityInventoryDataRead( sessionid, resourceid, + eirid, buffersize, inv, &actualsize); + if (fdebug) { + printf("saHpiEntityInventoryDataRead[%d] rv = %d\n",eirid,rv); + printf("buffersize = %d, ActualSize=%d\n", + buffersize,actualsize); + } + if (rv == SA_OK || rv == -2000) // (0 - buffersize)) + { + /* Walk thru the list of inventory data */ + for (i=0; inv->DataRecords[i] != NULL; i++) + { + if (fdebug) printf( "Record index=%d type=%x len=%d\n", + i, inv->DataRecords[i]->RecordType, + inv->DataRecords[i]->DataLength); + if (inv->Validity == SAHPI_INVENT_DATA_VALID) + { + switch (inv->DataRecords[i]->RecordType) + { + case SAHPI_INVENT_RECTYPE_INTERNAL_USE: + if (fdebug) printf( "Internal Use\n"); + break; + case SAHPI_INVENT_RECTYPE_PRODUCT_INFO: + if (fdebug) printf( "Product Info\n"); + prodrecindx = i; + prtprodtinfo(); + break; + case SAHPI_INVENT_RECTYPE_CHASSIS_INFO: + if (fdebug) printf( "Chassis Info\n"); + prtchassinfo(); + break; + case SAHPI_INVENT_RECTYPE_BOARD_INFO: + if (fdebug) printf( "Board Info\n"); + prtboardinfo(); + break; + case SAHPI_INVENT_RECTYPE_OEM: + if (fdebug) printf( "OEM Record\n"); + break; + default: + printf(" Invalid Invent Rec Type =%x\n", + inv->DataRecords[i]->RecordType); + break; + } + } + } + /* Cannot guarantee writable unless it is the BMC. */ + if (IsTagBmc(rdr.IdString.Data,rdr.IdString.DataLength) + && (fasset == 1)) + { /* handle asset tag */ + SaHpiTextBufferT aTag; + if (fdebug) printf( "Inventory = %s\n", rdr.IdString.Data); + /* prodrecindx contains index for Prod Rec Type */ + dataptr = (SaHpiInventGeneralDataT *) + &inv->DataRecords[prodrecindx]->RecordData.ProductInfo; + dataptr->AssetTag = &aTag; + strptr=dataptr->AssetTag; + strptr->DataType = SAHPI_TL_TYPE_LANGUAGE; + strptr->Language = SAHPI_LANG_ENGLISH; + strptr->DataLength = (SaHpiUint8T)asset_len; + strncpy( (char *)strptr->Data, (char *)asset_tag,asset_len); + strptr->Data[asset_len] = 0; + + printf( "Writing new asset tag: %s\n",(char *)strptr->Data); + rv = saHpiEntityInventoryDataWrite( sessionid, + resourceid, eirid, inv); + printf("Return Write Status = %d\n", rv); + + if (rv == SA_OK) + { + printf ("Good write - re-reading!\n"); + rv = saHpiEntityInventoryDataRead( sessionid, resourceid, + eirid, buffersize, inv, &actualsize); + if (fxdebug) printf( + "saHpiEntityInventoryDataRead[%d] rv = %d\n", eirid, rv); + if (fdebug) printf("ActualSize=%d\n", actualsize); + if (rv == SA_OK) + { + /* Walk thru the list of inventory data */ + for (i=0; inv->DataRecords[i] != NULL; i++) + { + if (inv->Validity == SAHPI_INVENT_DATA_VALID) + { + if (fdebug) printf( "Index = %d type=%x len=%d\n", + i, inv->DataRecords[i]->RecordType, + inv->DataRecords[i]->DataLength); + switch (inv->DataRecords[i]->RecordType) + { + case SAHPI_INVENT_RECTYPE_INTERNAL_USE: + if (fdebug) printf( "Internal Use\n"); + break; + case SAHPI_INVENT_RECTYPE_PRODUCT_INFO: + if (fdebug) printf( "Product Info\n"); + prtprodtinfo(); + break; + case SAHPI_INVENT_RECTYPE_CHASSIS_INFO: + if (fdebug) printf( "Chassis Info\n"); + prtchassinfo(); + break; + case SAHPI_INVENT_RECTYPE_BOARD_INFO: + if (fdebug) printf( "Board Info\n"); + prtboardinfo(); + break; + case SAHPI_INVENT_RECTYPE_OEM: + if (fdebug) printf( "OEM Record\n"); + break; + default: + printf(" Invalid Invent Rec Type =%x\n", + inv->DataRecords[i]->RecordType); + break; + } + } + } + } /*re-walk the inventory record list */ + } /* Good write - re-read */ + } /* check asset tag flag */ + } else { + /* It is an Inventory RDR, but gets error reading FRU. */ + if (fdebug) printf("\tinventory read error, rv=%d\n", rv); + rv = 0; /* keep trying another RDR */ + entryid = nextentryid; + continue; + } + } + } /* Inventory Data Records - Type 3 */ + entryid = nextentryid; + } + } + rptentryid = nextrptentryid; + } + } + rv = saHpiSessionClose(sessionid); + rv = saHpiFinalize(); + exit(0); +} + /* end hpifru.c */ diff --git a/hpiutil/hpifrub.c b/hpiutil/hpifrub.c new file mode 100644 index 0000000..822127c --- /dev/null +++ b/hpiutil/hpifrub.c @@ -0,0 +1,619 @@ +/* -*- linux-c -*- + * + * hpiinv.c + * + * Copyright (c) 2003-2005 by Intel Corp. + * (C) Copyright IBM Corp. 2004 + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This + * file and program are licensed under a BSD style license. See + * the Copying file included with the OpenHPI distribution for + * full licensing terms. + * + * Authors: + * Andy Cress <arcress at users.sourceforge.net> + * Peter D. Phan <pdphan@users.sourceforge.net> + * Renier Morales <renierm@users.sf.net> + * Tariq Shureih <tariq.shureih@intel.com> + * Racing Guo <racing.guo@intel.com> + * + * Log: + * 6/29/04 Copied from hpifru.c and modified for general use + * 11/30/04 ver 0.2 for openhpi-2.0.0 + * 2/09/05 ARCress re-merged with hpifru.c, adding IdrFieldSet, + * generalized for other HPI libraris also. + */ +// #define OPENHPI_USED 1 + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <getopt.h> +#include <SaHpi.h> +#ifdef OPENHPI_USED +#include <oh_utils.h> +#endif + +#define NCT 25 +#define MAX_STRSIZE 64 + +char progver[] = "1.5 HPI-B"; +char progname[] = "hpiinv"; +char *chasstypes[NCT] = { + "Not Defined", "Other", "Unknown", "Desktop", "Low Profile Desktop", + "Pizza Box", "Mini Tower", "Tower", "Portable", "Laptop", + "Notebook", "Handheld", "Docking Station", "All in One", "Subnotebook", + "Space Saving", "Lunch Box", "Main Server", "Expansion", "SubChassis", + "Buss Expansion Chassis", "Peripheral Chassis", "RAID Chassis", + "Rack-Mount Chassis", "New" +}; +int fasset = 0; +int fverbose = 0; +int foundasset = 0; +int fdebug = 0; +int fzdebug = 0; +int i,j,k = 0; +SaHpiUint32T buffersize; +SaHpiUint32T actualsize; +char inbuff[2048]; +char outbuff[1024]; +SaHpiIdrAreaHeaderT *inv; +SaHpiIdrFieldTypeT chasstype; +SaHpiTextBufferT *strptr; +struct { + SaHpiResourceIdT rid; + SaHpiEntryIdT idrid; + SaHpiEntryIdT areaid; + SaHpiEntryIdT fieldid; + char *tag; + int tlen; + } atag; +#define NRW_ENTS 12 +SaHpiEntityTypeT rw_entities[NRW_ENTS] = { /*read-writable entities*/ + SAHPI_ENT_SYS_MGMNT_MODULE, + SAHPI_ENT_SYSTEM_BOARD, + SAHPI_ENT_FRONT_PANEL_BOARD, + SAHPI_ENT_SYSTEM_CHASSIS, + SAHPI_ENT_SYS_MGMNT_SOFTWARE, + SAHPI_ENT_COMPACTPCI_CHASSIS, + SAHPI_ENT_ADVANCEDTCA_CHASSIS, + SAHPI_ENT_RACK_MOUNTED_SERVER, + SAHPI_ENT_SYSTEM_BLADE, + SAHPI_ENT_SWITCH_BLADE, + SAHPI_ENT_SPEC_PROC_BLADE, + SAHPI_ENT_ALARM_MANAGER }; + +#ifdef BMCONLY +char bmctag[] = "Basbrd Mgmt Ctlr"; /* see IsTagBmc() */ +char bmctag2[] = "Management Controller"; /* see IsTagBmc() */ + +/* + * findmatch + * returns offset of the match if found, or -1 if not found. + */ +static int +findmatch(char *buffer, int sbuf, char *pattern, int spattern, char figncase) +{ + int c, j, imatch; + j = 0; + imatch = 0; + for (j = 0; j < sbuf; j++) { + if (sbuf - j < spattern && imatch == 0) return (-1); + c = buffer[j]; + if (c == pattern[imatch]) { + imatch++; + if (imatch == spattern) return (++j - imatch); + } else if (pattern[imatch] == '?') { /*wildcard char*/ + imatch++; + if (imatch == spattern) return (++j - imatch); + } else if (figncase == 1) { + if ((c & 0x5f) == (pattern[imatch] & 0x5f)) { + imatch++; + if (imatch == spattern) return (++j - imatch); + } else + imatch = 0; + } else + imatch = 0; + } + return (-1); +} /*end findmatch */ + +static int +IsTagBmc(char *dstr, int dlen) +{ + int ret = 0; + + if (strncmp(dstr, bmctag, sizeof(bmctag)) == 0) /* Sahalee */ + ret = 1; + else if (findmatch(dstr,dlen,"BMC",3,1) >= 0) /* mBMC or other */ + ret = 1; + else if (findmatch(dstr,dlen,bmctag2,sizeof(bmctag2),1) >= 0) + ret = 1; /* BMC tag for OpenHPI with ipmi plugin */ + return(ret); +} +#else +static int +IsTagBmc(char *dstr, int dlen) +{ + /* if OpenHPI, always return TRUE for any Inventory RDR */ + return(1); +} +#endif + +static int +ent_writable(SaHpiEntityPathT *ep, SaHpiIdrInfoT *idrinfo) +{ + int i, rv; + /* The IdrInfo ReadOnly field might be ok, but we don't + even want to attempt to write to DIMMs or Power Supplies, + even if the plugin reports it otherwise, so only check + for known writable entity types. */ + for (i = 0; i < NRW_ENTS; i++) + if (rw_entities[i] == ep->Entry[0].EntityType) break; + if (i >= NRW_ENTS) rv = 0; + else rv = 1; + return(rv); +} + +static void +fixstr(SaHpiTextBufferT *strptr, char *outstr) +{ + size_t datalen; + + if (outstr == NULL) return; + outstr[0] = 0; + if (strptr == NULL) return; + datalen = strptr->DataLength; + if (datalen > MAX_STRSIZE) datalen = MAX_STRSIZE-1; + if (datalen != 0) { + strncpy ((char *)outstr, (char *)strptr->Data, datalen); + outstr[datalen] = 0; + if (fdebug) { + printf("TextBuffer len=%d, dtype=%x lang=%d: %s\n", + strptr->DataLength,strptr->DataType,strptr->Language, + strptr->Data ); + } + } +#ifdef LENGTH_BAD + else /* may be bogus length, try anyway */ + strcpy ((char *)outstr, (char *)strptr->Data); +#endif +} + +#define NAREATYP 6 +static struct { SaHpiUint8T type; char *str; +} map_areatype[NAREATYP] = { + { SAHPI_IDR_AREATYPE_INTERNAL_USE, "Internal Area" }, + { SAHPI_IDR_AREATYPE_CHASSIS_INFO, "Chassis Area" }, + { SAHPI_IDR_AREATYPE_BOARD_INFO, "Board Area" }, + { SAHPI_IDR_AREATYPE_PRODUCT_INFO, "Product Area" }, + { SAHPI_IDR_AREATYPE_OEM, "OEM Area" }, + { SAHPI_IDR_AREATYPE_UNSPECIFIED, "Unspecified Area" } +}; + +#define NFIELDTYP 11 +static struct { SaHpiUint8T type; char *str; +} map_fieldtype[NFIELDTYP] = { + { SAHPI_IDR_FIELDTYPE_CHASSIS_TYPE, "Chassis Type "}, + { SAHPI_IDR_FIELDTYPE_MFG_DATETIME, "Mfg DateTime "}, + { SAHPI_IDR_FIELDTYPE_MANUFACTURER, "Manufacturer "}, + { SAHPI_IDR_FIELDTYPE_PRODUCT_NAME, "Product Name "}, + { SAHPI_IDR_FIELDTYPE_PRODUCT_VERSION, "Product Versn"}, + { SAHPI_IDR_FIELDTYPE_SERIAL_NUMBER, "Serial Number"}, + { SAHPI_IDR_FIELDTYPE_PART_NUMBER, "Part Number "}, + { SAHPI_IDR_FIELDTYPE_FILE_ID, "File ID "}, + { SAHPI_IDR_FIELDTYPE_ASSET_TAG, "Asset Tag "}, + { SAHPI_IDR_FIELDTYPE_CUSTOM, "Custom Field "}, + { SAHPI_IDR_FIELDTYPE_UNSPECIFIED, "Unspecified "} +}; + +#define NEPTYPES 67 +struct { SaHpiEntityTypeT type; char *str; } map_epstr[NEPTYPES] = { + { SAHPI_ENT_ADD_IN_CARD, "ADD_IN_CARD" }, + { SAHPI_ENT_ADVANCEDTCA_CHASSIS, "ADVANCEDTCA_CHASSIS" }, + { SAHPI_ENT_ALARM_MANAGER, "ALARM_MANAGER" }, + { SAHPI_ENT_BACK_PANEL_BOARD, "BACK_PANEL_BOARD" }, + { SAHPI_ENT_BATTERY, "BATTERY" }, + { SAHPI_ENT_BIOS, "BIOS" }, + { SAHPI_ENT_BOARD_SET_SPECIFIC, "BOARD_SET_SPECIFIC" }, + { SAHPI_ENT_CHASSIS_BACK_PANEL_BOARD, "CHASSIS_BACK_PANEL_BOARD" }, + { SAHPI_ENT_CHASSIS_SPECIFIC, "CHASSIS_SPECIFIC" }, + { SAHPI_ENT_COMPACTPCI_CHASSIS, "COMPACTPCI_CHASSIS" }, + { SAHPI_ENT_COOLING_DEVICE, "COOLING_DEVICE" }, + { SAHPI_ENT_COOLING_UNIT, "COOLING_UNIT" }, + { SAHPI_ENT_DEVICE_BAY, "DEVICE_BAY" }, + { SAHPI_ENT_DISK_BAY, "DISK_BAY" }, + { SAHPI_ENT_DISK_BLADE, "DISK_BLADE" }, + { SAHPI_ENT_DISK_DRIVE, "DISK_DRIVE" }, + { SAHPI_ENT_DISK_DRIVE_BAY, "DISK_DRIVE_BAY" }, + { SAHPI_ENT_DISPLAY_PANEL, "DISPLAY_PANEL" }, + { SAHPI_ENT_DRIVE_BACKPLANE, "DRIVE_BACKPLANE" }, + { SAHPI_ENT_EXTERNAL_ENVIRONMENT, "EXTERNAL_ENVIRONMENT" }, + { SAHPI_ENT_FAN, "FAN" }, + { SAHPI_ENT_FRONT_PANEL_BOARD, "FRONT_PANEL_BOARD" }, + { SAHPI_ENT_GROUP, "GROUP" }, + { SAHPI_ENT_INTERCONNECT, "INTERCONNECT" }, + { SAHPI_ENT_IO_BLADE, "IO_BLADE" }, + { SAHPI_ENT_IO_SUBBOARD, "IO_SUBBOARD" }, + { SAHPI_ENT_MEMORY_DEVICE, "MEMORY_DEVICE" }, + { SAHPI_ENT_MEMORY_MODULE, "MEMORY_MODULE" }, + { SAHPI_ENT_OEM_SYSINT_SPECIFIC, "OEM_SYSINT_SPECIFIC" }, + { SAHPI_ENT_OPERATING_SYSTEM, "OPERATING_SYSTEM" }, + { SAHPI_ENT_OTHER, "OTHER" }, + { SAHPI_ENT_OTHER_CHASSIS_BOARD, "OTHER_CHASSIS_BOARD" }, + { SAHPI_ENT_OTHER_SYSTEM_BOARD, "OTHER_SYSTEM_BOARD" }, + { SAHPI_ENT_PERIPHERAL_BAY, "PERIPHERAL_BAY" }, + { SAHPI_ENT_PERIPHERAL_BAY_2, "PERIPHERAL_BAY_2" }, + { SAHPI_ENT_PHYSICAL_SLOT, "PHYSICAL_SLOT" }, + { SAHPI_ENT_POWER_DISTRIBUTION_UNIT, "POWER_DISTRIBUTION_UNIT" }, + { SAHPI_ENT_POWER_MGMNT, "POWER_MGMNT" }, + { SAHPI_ENT_POWER_MODULE, "POWER_MODULE" }, + { SAHPI_ENT_POWER_SUPPLY, "POWER_SUPPLY" }, + { SAHPI_ENT_POWER_SYSTEM_BOARD, "POWER_SYSTEM_BOARD" }, + { SAHPI_ENT_POWER_UNIT, "POWER_UNIT" }, + { SAHPI_ENT_PROCESSOR, "PROCESSOR" }, + { SAHPI_ENT_PROCESSOR_BOARD, "PROCESSOR_BOARD" }, + { SAHPI_ENT_PROCESSOR_MODULE, "PROCESSOR_MODULE" }, + { SAHPI_ENT_RACK, "RACK" }, + { SAHPI_ENT_RACK_MOUNTED_SERVER, "RACK_MOUNTED_SERVER" }, + { SAHPI_ENT_REMOTE, "REMOTE" }, + { SAHPI_ENT_ROOT, "ROOT" }, + { SAHPI_ENT_SBC_BLADE, "SBC_BLADE" }, + { SAHPI_ENT_SBC_SUBBOARD, "SBC_SUBBOARD" }, + { SAHPI_ENT_SHELF_MANAGER, "SHELF_MANAGER" }, + { SAHPI_ENT_SPEC_PROC_BLADE, "SPEC_PROC_BLADE" }, + { SAHPI_ENT_SUBBOARD_CARRIER_BLADE, "SUBBOARD_CARRIER_BLADE" }, + { SAHPI_ENT_SUB_CHASSIS, "SUB_CHASSIS" }, + { SAHPI_ENT_SUBRACK, "SUBRACK" }, + { SAHPI_ENT_SWITCH, "SWITCH" }, + { SAHPI_ENT_SWITCH_BLADE, "SWITCH_BLADE" }, + { SAHPI_ENT_SYS_EXPANSION_BOARD, "SYS_EXPANSION_BOARD" }, + { SAHPI_ENT_SYS_MGMNT_MODULE, "SYS_MGMNT_MODULE" }, + { SAHPI_ENT_SYS_MGMNT_SOFTWARE, "SYS_MGMNT_SOFTWARE" }, + { SAHPI_ENT_SYSTEM_BLADE, "SYSTEM_BLADE" }, + { SAHPI_ENT_SYSTEM_BOARD, "SYSTEM_BOARD" }, + { SAHPI_ENT_SYSTEM_BUS, "SYSTEM_BUS" }, + { SAHPI_ENT_SYSTEM_CHASSIS, "SYSTEM_CHASSIS" }, + { SAHPI_ENT_UNKNOWN, "UNKNOWN" }, + { SAHPI_ENT_UNSPECIFIED, "UNSPECIFIED" }, +}; + +static void print_epath(SaHpiEntityPathT *epath, int len); +static void print_epath(SaHpiEntityPathT *epath, int len) +{ + int i,j; + SaHpiEntityTypeT t; + char *pstr; + +#ifdef OPENHPI_USED + if (fverbose) { + oh_print_ep(epath, len); + } else +#endif + { + for (i = 0; i < SAHPI_MAX_ENTITY_PATH; i++) { + t = epath->Entry[i].EntityType; + pstr = ""; + for (j = 0; j < NEPTYPES; j++) { + if (t == map_epstr[j].type) { + pstr = map_epstr[j].str; + break; + } + } + if (j == NEPTYPES) j--; + printf("{%s:%d} ",pstr, epath->Entry[i].EntityLocation); + if (t == SAHPI_ENT_ROOT) break; + } + printf("\n"); + } + return; +} + +static void print_idrinfo(SaHpiIdrInfoT *idrInfo,int len); +static void print_idrinfo(SaHpiIdrInfoT *idrInfo,int len) +{ +#ifdef OPENHPI_USED + if (fverbose) { + oh_print_idrinfo(idrInfo, len); + } else +#endif + { /* don't need to show this if not fverbose */ + } +} + +static void print_idrareaheader(SaHpiIdrAreaHeaderT *areaHeader, int len); +static void print_idrareaheader(SaHpiIdrAreaHeaderT *areaHeader, int len) +{ + int i; +#ifdef OPENHPI_USED + if (fverbose) { + oh_print_idrareaheader(areaHeader, len); + } else +#endif + { + for (i = 0; i < NAREATYP; i++) { + if (map_areatype[i].type == areaHeader->Type) break; + } + if (i == NAREATYP) i--; + printf("AreaId[%d] %s\n",areaHeader->AreaId,map_areatype[i].str); + } +} + +static void print_idrfield(SaHpiIdrFieldT *field, int len); +static void print_idrfield(SaHpiIdrFieldT *field, int len) +{ + SaHpiTextBufferT *strptr; + char fieldstr[MAX_STRSIZE]; + int i; + +#ifdef OPENHPI_USED + if (fverbose) { + oh_print_idrfield(field, len); + } else +#endif + { + for (i = 0; i < NFIELDTYP; i++) { + if (map_fieldtype[i].type == field->Type) break; + } + if (i == NFIELDTYP) i--; + strptr = &(field->Field); + fixstr(strptr,fieldstr); /*stringify if needed*/ + printf(" FieldId[%d] %s : %s\n", + field->FieldId,map_fieldtype[i].str ,fieldstr); + } +} + +int walkInventory(SaHpiSessionIdT sessionid, SaHpiResourceIdT resourceid, + SaHpiIdrInfoT *idrInfo); +int walkInventory(SaHpiSessionIdT sessionid, SaHpiResourceIdT resourceid, + SaHpiIdrInfoT *idrInfo) +{ + + SaErrorT rv = SA_OK, + rvField = SA_OK; + + SaHpiUint32T numAreas; + SaHpiUint32T countAreas = 0; + SaHpiUint32T countFields = 0; + + SaHpiEntryIdT areaId; + SaHpiEntryIdT nextareaId; + SaHpiIdrAreaTypeT areaType; + SaHpiIdrAreaHeaderT areaHeader; + + SaHpiEntryIdT fieldId; + SaHpiEntryIdT nextFieldId; + SaHpiIdrFieldTypeT fieldType; + SaHpiIdrFieldT thisField; + + numAreas = idrInfo->NumAreas; + areaType = SAHPI_IDR_AREATYPE_UNSPECIFIED; + areaId = SAHPI_FIRST_ENTRY; + foundasset = 0; + while ((rv == SA_OK) && (areaId != SAHPI_LAST_ENTRY)) + { + rv = saHpiIdrAreaHeaderGet(sessionid, resourceid, + idrInfo->IdrId, areaType, + areaId, &nextareaId, + &areaHeader); + if (rv == SA_OK) { + countAreas++; + print_idrareaheader(&areaHeader, 8); + + fieldType = SAHPI_IDR_FIELDTYPE_UNSPECIFIED; + fieldId = SAHPI_FIRST_ENTRY; + countFields = 0; + + while ((rvField == SA_OK) && (fieldId != SAHPI_LAST_ENTRY)) + { + rvField = saHpiIdrFieldGet( sessionid, resourceid, + idrInfo->IdrId, + areaHeader.AreaId, fieldType, + fieldId, &nextFieldId, + &thisField); + if (fdebug) + printf("saHpiIdrFieldGet[%x] rv = %d type=%d\n", + idrInfo->IdrId,rvField, + thisField.Type); + if (rvField == SA_OK) { + countFields++; + print_idrfield(&thisField, 12); + if (thisField.Type == SAHPI_IDR_FIELDTYPE_ASSET_TAG) { + atag.rid = resourceid; + atag.idrid = idrInfo->IdrId; + atag.areaid = areaHeader.AreaId; + atag.fieldid = fieldId; + foundasset = 1; + } + } + fieldId = nextFieldId; + } /*while fields*/ + + if ( countFields != areaHeader.NumFields) + printf("Area Header error: areaHeader.NumFields %d, countFields %d\n", + areaHeader.NumFields, countFields); + } else { + printf("saHpiIdrAreaHeaderGet error %d\n",rv); + } + areaId = nextareaId; + + } /*while areas*/ + + if ((rv == SA_OK) && (countAreas != numAreas)) + printf("idrInfo error! idrInfo.NumAreas = %d; countAreas = %d\n", + numAreas, countAreas); + + if (countFields > 0) rv = 0; + return(rv); +} /*end walkInventory*/ + +int +main(int argc, char **argv) +{ + int c; + SaErrorT rv; + SaHpiSessionIdT sessionid; + SaHpiDomainInfoT rptinfo; + SaHpiRptEntryT rptentry; + SaHpiEntryIdT rptentryid; + SaHpiEntryIdT nextrptentryid; + SaHpiEntryIdT entryid; + SaHpiEntryIdT nextentryid; + SaHpiResourceIdT resourceid; + SaHpiRdrT rdr; + SaHpiIdrInfoT idrInfo; + SaHpiIdrIdT idrid; + int invfound = 0; + int nloops = 0; + + printf("%s ver %s\n",progname,progver); + atag.tlen = 0; + + while ( (c = getopt( argc, argv,"a:vxz?")) != EOF ) + switch(c) { + case 'z': fzdebug = 1; /* fall thru to include next setting */ + case 'x': fdebug = 1; break; + case 'v': fverbose = 1; break; + case 'a': + fasset = 1; + if (optarg) { + atag.tag = (char *)strdup(optarg); + atag.tlen = strlen(optarg); + } + break; + default: + printf("Usage: %s [-x] [-a asset_tag]\n", progname); + printf(" -a Sets the asset tag\n"); + printf(" -x Display debug messages\n"); + printf(" -z Display extra debug messages\n"); + exit(1); + } + + inv = (SaHpiIdrAreaHeaderT *)&inbuff[0]; + rv = saHpiSessionOpen(SAHPI_UNSPECIFIED_DOMAIN_ID,&sessionid,NULL); + if (fdebug) printf("saHpiSessionOpen rv = %d sessionid = %x\n",rv,sessionid); + if (rv != SA_OK) { + printf("saHpiSessionOpen error %d\n",rv); + exit(-1); + } + + rv = saHpiDomainInfoGet(sessionid,&rptinfo); + if (fdebug) printf("saHpiDomainInfoGet rv = %d\n",rv); + // if (fdebug) printf("RptInfo: UpdateCount = %x, UpdateTime = %lx\n", + // rptinfo.UpdateCount, (unsigned long)rptinfo.UpdateTimestamp); + + while (!invfound && (nloops < 7)) + { + /* + * The OpenHPI ipmi plugin has a bug whereby the FRU RDR is added + * much later, and always requires a rediscovery. (bug #1095256) + * This should not apply to other well-behaved plugins. + */ + nloops++; + if (fdebug) printf("Starting Discovery, pass %d ...\n",nloops); + rv = saHpiDiscover(sessionid); + if (fdebug) printf("saHpiDiscover rv = %d\n",rv); + if (rv != SA_OK) { + printf("saHpiDiscover error %d\n",rv); + break; + } + + /* walk the RPT list */ + rptentryid = SAHPI_FIRST_ENTRY; + while ((rv == SA_OK) && (rptentryid != SAHPI_LAST_ENTRY)) + { + rv = saHpiRptEntryGet(sessionid,rptentryid,&nextrptentryid,&rptentry); + if (rv != SA_OK) printf("RptEntryGet: rid=%d rv = %d\n",rptentryid,rv); + if (rv == SA_OK) + { + /* walk the RDR list for this RPT entry */ + entryid = SAHPI_FIRST_ENTRY; + /* OpenHPI plugin sometimes has bad RPT Tag DataLength here. */ + // rptentry.ResourceTag.Data[rptentry.ResourceTag.DataLength] = 0; + resourceid = rptentry.ResourceId; + if (fdebug) printf("rptentry[%d] resourceid=%d\n", rptentryid,resourceid); + if (rptentry.ResourceCapabilities & SAHPI_CAPABILITY_INVENTORY_DATA) + { + printf("Resource[%d] Tag: %s \thas inventory capability\n", rptentryid,rptentry.ResourceTag.Data); + while ((rv == SA_OK) && (entryid != SAHPI_LAST_ENTRY)) + { + rv = saHpiRdrGet(sessionid,resourceid, entryid,&nextentryid, &rdr); + if (fdebug) printf("saHpiRdrGet[%x] rv = %d\n",entryid,rv); + if (rv == SA_OK) + { + if (fdebug) printf("Rdr[%x] type = %d tag = %s\n",entryid, + rdr.RdrType,rdr.IdString.Data); + if (rdr.RdrType == SAHPI_INVENTORY_RDR) + { + invfound = 1; + /*type 3 includes inventory records*/ + rdr.IdString.Data[rdr.IdString.DataLength] = 0; + idrid = rdr.RdrTypeUnion.InventoryRec.IdrId; + buffersize = sizeof(inbuff); + if (fdebug) { + printf("Rdr[%x] is inventory, IdrId=%x\n",rdr.RecordId,idrid); + printf("Inv BufferSize=%d\n", buffersize); + } + if ( IsTagBmc(rdr.IdString.Data, rdr.IdString.DataLength) ) + { + /* Get all of the inventory data areas and fields */ + memset(inv,0,buffersize); + rv = saHpiIdrInfoGet(sessionid, resourceid, idrid, &idrInfo); + if (rv != SA_OK) { + printf("IDR Info error: rv = %d\n",rv); + } else { /* idrInfo is ok */ + if (fdebug) printf("IDR Info: ok \n"); + print_epath(&rptentry.ResourceEntity, 1); + printf("RDR[%x]: Inventory, IdrId=%x %s\n",rdr.RecordId, + idrid,rdr.IdString.Data); + print_idrinfo(&idrInfo,4); + rv = walkInventory(sessionid, resourceid, &idrInfo); + if (fdebug) printf("walkInventory rv = %d\n",rv); + } + + if (!ent_writable(&rptentry.ResourceEntity,&idrInfo)) + foundasset = 0; + if ((fasset == 1) && (foundasset == 1)) { + SaHpiIdrFieldT atagField; + atagField.Type = SAHPI_IDR_FIELDTYPE_ASSET_TAG; + atagField.ReadOnly = SAHPI_FALSE; + atagField.AreaId = atag.areaid; + atagField.FieldId = atag.fieldid; + strptr=&(atagField.Field); + strptr->DataType = SAHPI_TL_TYPE_TEXT; + strptr->Language = SAHPI_LANG_ENGLISH; + strptr->DataLength = (SaHpiUint8T)atag.tlen; + strncpy((char *)strptr->Data, atag.tag, atag.tlen); + strptr->Data[atag.tlen] = 0; + printf( "Writing new asset tag: %s\n",strptr->Data); + rv = saHpiIdrFieldSet(sessionid, resourceid, + atag.idrid, &atagField); + printf("Return Write Status = %d\n", rv); + if (rv == SA_OK) { + printf ("Good write - re-reading!\n"); + rv = walkInventory(sessionid, resourceid, &idrInfo); + if (fdebug) printf("walkInventory rv = %d\n",rv); + } /* Good write - re-read */ + } /*endif fasset*/ + } /*endif RDR tag ok*/ + } /* Inventory Data Records - Type 3 */ + else if (fdebug) printf("rdr type = %d\n", rdr.RdrType); + } /*endif RdrGet ok*/ + entryid = nextentryid; + } /*end while rdr*/ + } /*endif rpt invent capab*/ + else + if (fdebug) printf("Resource[%d] Tag: %s\n", rptentryid, + rptentry.ResourceTag.Data); + } /*endif rpt ok*/ + rptentryid = nextrptentryid; + } /*end rpt loop */ + if (fdebug) printf("loop %d inventory found = %d\n",nloops,invfound); + } /*end while no inv */ + rv = saHpiSessionClose(sessionid); + exit(0); +} + /* end hpifru.c */ diff --git a/hpiutil/hpiinit.sh b/hpiutil/hpiinit.sh new file mode 100755 index 0000000..eace400 --- /dev/null +++ b/hpiutil/hpiinit.sh @@ -0,0 +1,69 @@ +#!/bin/sh +# +# hpi init script to start/stop the Intel hpi library daemon +# process name: SpiLibd +# +# For RedHat and MontaVista +# chkconfig: 345 50 35 +# +### BEGIN SuSE INIT INFO +# Provides: tam +# Required-Start: $network +# Default-Start: 3 5 +# Default-Stop: 0 1 2 6 +# Description: tam is used to start/stop Telco Alarm Manager +### END INIT INFO +name=hpiutil +lockfile=/var/lock/subsys/$name + +if [ ! -d /var/lock/subsys ]; then + lockfile=/var/run/$name.pid +fi + +case "$1" in +"start") + # Is it already started? + ps -ef | grep -v grep | grep SpiLibd + if [ $? -eq 0 ] + then + echo "SpiLibd is already started" + exit 1 + fi + SAHPI_HOME=/etc/hpi + LD_LIBRARY_PATH=/usr/lib + #LD_LIBRARY_PATH=$SAHPI_HOME/lib + # Use default config locations (/etc/hpi/*.conf) + #SPI_LIB_CFG_LOCATION=$SAHPI_HOME/spi-lib.conf + #SPI_DAEMON_CFG_LOCATION=$SAHPI_HOME/spi-daemon.conf + SPI_LIB_LOG_LOCATION=/var/log/spilib + SPI_DAEMON_LOG_LOCATION=/var/log/spidaemon + SPI_DAEMON_LOG_LEVEL=-l5 + SPI_LIB_LOG_LEVEL=-l5 +# LD_ASSUME_KERNEL=2.4.1 + # flush the logs before starting daemon + export SAHPI_HOME LD_LIBRARY_PATH SPI_LIB_LOG_LOCATION + export SPI_DAEMON_LOG_LOCATION SPI_DAEMON_LOG_LEVEL SPI_LIB_LOG_LEVEL +# export SPI_LIB_CFG_LOCATION SPI_DAEMON_CFG_LOCATION + rm -f ${SPI_DAEMON_LOG_LOCATION}.1 $SPI_LIB_LOG_LOCATION 2>/dev/null + mv $SPI_DAEMON_LOG_LOCATION ${SPI_DAEMON_LOG_LOCATION}.1 2>/dev/null + # see /usr/bin/SpiLibd + SpiLibd + touch $lockfile + ;; +"stop") + spid=`ps -ef |greo SpiLibd | grep -v grep |awk '{ print $2 }'` + if [ "$spid" != "" ] + then + kill $spid + sleep 5 + kill -9 $spid 2>/dev/null + fi + rm -f $lockfile + ;; +*) + echo "Usage: $0 start|stop" + exit 1 + ;; +esac + +exit 0 diff --git a/hpiutil/hpireset.c b/hpiutil/hpireset.c new file mode 100644 index 0000000..aeddd03 --- /dev/null +++ b/hpiutil/hpireset.c @@ -0,0 +1,225 @@ +/* + * hpireset.c + * + * Author: Andy Cress arcress at users.sourceforge.net + * Copyright (c) 2003 Intel Corporation. + * + * 05/02/03 Andy Cress - created + * 06/06/03 Andy Cress - beta2 + * 06/26/03 Andy Cress - exclude stuff that isn't in HPI 1.0 (MAYBELATER) + * 12/07/04 Andy Cress - added HPI_A/B compile flags + */ +/*M* +Copyright (c) 2003, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + a.. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + b.. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + c.. Neither the name of Intel Corporation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *M*/ + +#include <stdio.h> +#include <stdlib.h> +#include <getopt.h> +#include "SaHpi.h" + +#define uchar unsigned char +char *progver = "1.1"; +char fdebug = 0; + +static void Usage(char *pname) +{ + printf("Usage: %s [-r -d -x]\n", pname); + printf(" where -r hard Resets the system\n"); + printf(" -d powers Down the system\n"); +#ifdef MAYBELATER +/*++++ not implemented in HPI 1.0 ++++ + printf(" -c power Cycles the system\n"); + printf(" -n sends NMI to the system\n"); + printf(" -o soft-shutdown OS\n"); + printf(" -s reboots to Service Partition\n"); + ++++*/ +#endif + printf(" -x show eXtra debug messages\n"); +} + +int +main(int argc, char **argv) +{ + int c; + SaErrorT rv; +#ifdef HPI_A + SaHpiVersionT hpiVer; + SaHpiRptInfoT rptinfo; +#endif + SaHpiSessionIdT sessionid; + SaHpiRptEntryT rptentry; + SaHpiEntryIdT rptentryid; + SaHpiEntryIdT nextrptentryid; + SaHpiEntryIdT entryid; + SaHpiEntryIdT nextentryid; + SaHpiResourceIdT resourceid; + SaHpiRdrT rdr; + SaHpiCtrlNumT ctlnum; + int j; + uchar breset; + uchar bopt; + uchar fshutdown = 0; + SaHpiCtrlStateT ctlstate; + + printf("%s ver %s\n", argv[0],progver); + breset = 3; /* hard reset as default */ + bopt = 0; /* Boot Options default */ + while ( (c = getopt( argc, argv,"rdx?")) != EOF ) + switch(c) { + case 'd': breset = 0; break; /* power down */ + case 'r': breset = 3; break; /* hard reset */ + case 'x': fdebug = 1; break; /* debug messages */ +#ifdef MAYBELATER + case 'c': breset = 2; break; /* power cycle */ + case 'o': fshutdown = 1; break; /* shutdown OS */ + case 'n': breset = 4; break; /* interrupt (NMI) */ + case 's': bopt = 1; break; /* hard reset to svc part */ +#endif + default: + Usage(argv[0]); + exit(1); + } + if (fshutdown) breset = 5; /* soft shutdown option */ + +#ifdef HPI_A + rv = saHpiInitialize(&hpiVer); + if (rv != SA_OK) { + printf("saHpiInitialize error %d\n",rv); + exit(-1); + } + rv = saHpiSessionOpen(SAHPI_DEFAULT_DOMAIN_ID,&sessionid,NULL); + if (rv != SA_OK) { + if (rv == SA_ERR_HPI_ERROR) + printf("saHpiSessionOpen: error %d, HPI Library not running\n",rv); + else + printf("saHpiSessionOpen error %d\n",rv); + exit(-1); + } + rv = saHpiResourcesDiscover(sessionid); + if (fdebug) printf("saHpiResourcesDiscover rv = %d\n",rv); + rv = saHpiRptInfoGet(sessionid,&rptinfo); + if (fdebug) printf("saHpiRptInfoGet rv = %d\n",rv); + printf("RptInfo: UpdateCount = %x, UpdateTime = %lx\n", + rptinfo.UpdateCount, (unsigned long)rptinfo.UpdateTimestamp); +#else + rv = saHpiSessionOpen(SAHPI_UNSPECIFIED_DOMAIN_ID,&sessionid,NULL); + if (rv != SA_OK) { + printf("saHpiSessionOpen: error %d\n",rv); + exit(-1); + } + rv = saHpiDiscover(sessionid); + if (fdebug) printf("saHpiDiscover error %d\n",rv); +#endif + + /* walk the RPT list */ + rptentryid = SAHPI_FIRST_ENTRY; + while ((rv == SA_OK) && (rptentryid != SAHPI_LAST_ENTRY)) + { + rv = saHpiRptEntryGet(sessionid,rptentryid,&nextrptentryid,&rptentry); + if (rv != SA_OK) printf("RptEntryGet: rv = %d\n",rv); + if (rv == SA_OK) { + /* walk the RDR list for this RPT entry */ + entryid = SAHPI_FIRST_ENTRY; + resourceid = rptentry.ResourceId; +#ifdef HPI_A + rptentry.ResourceTag.Data[rptentry.ResourceTag.DataLength] = 0; +#endif + printf("rptentry[%d] resourceid=%d tag: %s\n", + entryid,resourceid, rptentry.ResourceTag.Data); + while ((rv == SA_OK) && (entryid != SAHPI_LAST_ENTRY)) + { + rv = saHpiRdrGet(sessionid,resourceid, + entryid,&nextentryid, &rdr); + if (fdebug) printf("saHpiRdrGet[%d] rv = %d\n",entryid,rv); + if (rv == SA_OK) { + if (rdr.RdrType == SAHPI_CTRL_RDR) { + /*type 1 includes Cold Reset Control */ + ctlnum = rdr.RdrTypeUnion.CtrlRec.Num; + rdr.IdString.Data[rdr.IdString.DataLength] = 0; + if (fdebug) printf("Ctl[%d]: %d %d %s\n", + ctlnum, rdr.RdrTypeUnion.CtrlRec.Type, + rdr.RdrTypeUnion.CtrlRec.OutputType, + rdr.IdString.Data); + if ((rdr.RdrTypeUnion.CtrlRec.Type == SAHPI_CTRL_TYPE_DIGITAL) && + (rdr.RdrTypeUnion.CtrlRec.OutputType == SAHPI_CTRL_GENERIC)) + { /* This is the Reset control */ + printf("RDR[%d]: %d,%d %s\n", + rdr.RecordId, + rdr.RdrTypeUnion.CtrlRec.Type, + rdr.RdrTypeUnion.CtrlRec.OutputType, + rdr.IdString.Data); +#ifdef MAYBELATER + { + SaHpiResetActionT resetact; + rv = saHpiResourceResetStateGet(sessionid, + resourceid, &resetact); + printf("ResetStateGet status = %d, act=%d\n", + rv,resetact); + rv = saHpiResourceResetStateSet(sessionid, + resourceid, resetact); + printf("ResetStateSet status = %d\n",rv); + } +#endif + + ctlstate.Type = SAHPI_CTRL_TYPE_DIGITAL; + if (breset == 0) { /*power off*/ + ctlstate.StateUnion.Digital = SAHPI_CTRL_STATE_OFF; + printf("Powering down ... \n"); + } else { + ctlstate.StateUnion.Digital = SAHPI_CTRL_STATE_ON; + printf("Resetting ... \n"); + } +#ifdef HPI_A + rv = saHpiControlStateSet(sessionid, + resourceid, ctlnum,&ctlstate); +#else + rv = saHpiControlSet(sessionid, resourceid, + ctlnum, SAHPI_CTRL_MODE_MANUAL, + &ctlstate); +#endif + printf("Reset status = %d\n",rv); + break; + } + } + j++; + entryid = nextentryid; + } + } + rptentryid = nextrptentryid; + } + } + + rv = saHpiSessionClose(sessionid); +#ifdef HPI_A + rv = saHpiFinalize(); +#endif + + exit(0); +} + +/* end hpireset.c */ diff --git a/hpiutil/hpisel.c b/hpiutil/hpisel.c new file mode 100644 index 0000000..e922b81 --- /dev/null +++ b/hpiutil/hpisel.c @@ -0,0 +1,934 @@ +/* + * hpisel.c + * + * Author: Andy Cress arcress at users.sourceforge.net + * Copyright (c) 2003-2005 Intel Corporation. + * + * 04/28/03 Andy Cress - created + * 04/30/03 Andy Cress v0.6 first good run with common use cases + * 05/06/03 Andy Cress v0.7 added -c option to clear it + * 05/29/03 Andy Cress v0.8 fixed pstr warnings + * 06/13/03 Andy Cress v0.9 fixed strcpy bug, + * workaround for SensorEvent.data3 + * 06/19/03 Andy Cress 0.91 added low SEL free space warning + * 06/25/03 Andy Cress v1.0 rework event data logic + * 07/23/03 Andy Cress workaround for OpenHPI BUGGY stuff + * 11/12/03 Andy Cress v1.1 check for CAPABILITY_SEL + * 03/03/04 Andy Cress v1.2 use better free space logic now + * 10/14/04 Andy Cress v1.3 added HPI_A/HPI_B logic + * 02/11/05 Andy Cress v1.4 added decode routines from showsel.c + * 03/30/05 Dave Howell v1.5 added support to enable displaying domain + * event log for HPI_B + * 04/07/05 Andy Cress v1.6 fix domain resourceid & HPI_A/B flags, + * add logic to clear domain event log. + * + * Note that hpiutil 1.0.0 did not return all event data fields, so event + * types other than 'user' did not have all bytes filled in as they + * would have from IPMI alone. A patch to the Intel HPI library in + * version 1.0.1 resolved this. + */ +/*M* +Copyright (c) 2003-2005, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + a.. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + b.. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + c.. Neither the name of Intel Corporation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *M*/ + +#include <stdio.h> +#include <stdlib.h> +#include <getopt.h> +#include <string.h> +#include <time.h> +#include "SaHpi.h" + +#ifdef HPI_A +/* HPI A (1.0) spec */ +char progver[] = "1.6 HPI-A"; +#else +/* HPI B name changes */ +#define SaHpiSelEntryT SaHpiEventLogEntryT +#define SaHpiSelEntryIdT SaHpiEventLogEntryIdT +#define SaHpiSelInfoT SaHpiEventLogInfoT +#define SAHPI_CAPABILITY_SEL SAHPI_CAPABILITY_EVENT_LOG /*0x00000004*/ +#define SAHPI_EC_USER SAHPI_EC_SENSOR_SPECIFIC /*0x7E*/ +char progver[] = "1.6 HPI-B"; +#endif +int fdebug = 0; +int fclear = 0; +int fdomain = 0; + +#ifdef HPI_A +#define NEVTYPES 5 +char *evtypes[NEVTYPES] = {"sensor","hotswap","watchdog","oem ","user "}; +#else +#define NEVTYPES 9 +char *evtypes[NEVTYPES] = {"resource","domain","sensor","sens_enable", + "hotswap","watchdog","HPI sw", "oem ","user "}; +#endif + +#define NECODES 27 +struct { int code; char *str; +} ecodes[NECODES] = { + { 0, "Success" }, + { -1001, "HPI unspecified error" }, + { -1002, "HPI unsupported function" }, + { -1003, "HPI busy" }, + { -1004, "HPI request invalid" }, + { -1005, "HPI command invalid" }, + { -1006, "HPI timeout" }, + { -1007, "HPI out of space" }, + { -1008, "HPI data truncated" }, +#ifdef HPI_A + { -1009, "HPI data length invalid" }, +#else + { -1009, "HPI invalid parameter" }, +#endif + { -1010, "HPI data exceeds limits" }, + { -1011, "HPI invalid params" }, + { -1012, "HPI invalid data" }, + { -1013, "HPI not present" }, + { -1014, "HPI invalid data field" }, + { -1015, "HPI invalid sensor command" }, + { -1016, "HPI no response" }, + { -1017, "HPI duplicate request" }, + { -1018, "HPI updating" }, + { -1019, "HPI initializing" }, + { -1020, "HPI unknown error" }, + { -1021, "HPI invalid session" }, + { -1022, "HPI invalid domain" }, + { -1023, "HPI invalid resource id" }, + { -1024, "HPI invalid request" }, + { -1025, "HPI entity not present" }, + { -1026, "HPI uninitialized" } +}; +char def_estr[15] = "HPI error %d "; + +#define NUM_EC 14 +struct { int val; char *str; +} eventcats[NUM_EC] = { +{ /*0x00*/ SAHPI_EC_UNSPECIFIED, "unspecified"}, +{ /*0x01*/ SAHPI_EC_THRESHOLD, "Threshold"}, +{ /*0x02*/ SAHPI_EC_USAGE, "Usage "}, +{ /*0x03*/ SAHPI_EC_STATE, "State "}, +{ /*0x04*/ SAHPI_EC_PRED_FAIL, "Predictive"}, +{ /*0x05*/ SAHPI_EC_LIMIT, "Limit "}, +{ /*0x06*/ SAHPI_EC_PERFORMANCE, "Performnc"}, +{ /*0x07*/ SAHPI_EC_SEVERITY, "Severity "}, +{ /*0x08*/ SAHPI_EC_PRESENCE, "DevPresen"}, +{ /*0x09*/ SAHPI_EC_ENABLE, "DevEnable"}, +{ /*0x0a*/ SAHPI_EC_AVAILABILITY, "Availabil"}, +{ /*0x0b*/ SAHPI_EC_REDUNDANCY, "Redundanc"}, +{ /*0x7e*/ SAHPI_EC_USER, "SensorSpc"}, /*UserDefin*/ +{ /*0x7f*/ SAHPI_EC_GENERIC, "OemDefin " }}; + +#define NUM_ES 6 +struct { int val; char *str; } eventstates[NUM_ES] = { +{ SAHPI_ES_LOWER_MINOR , "lo-min" }, +{ SAHPI_ES_LOWER_MAJOR , "lo-maj" }, +{ SAHPI_ES_LOWER_CRIT , "lo-crt" }, +{ SAHPI_ES_UPPER_MINOR , "hi-min" }, +{ SAHPI_ES_UPPER_MAJOR , "hi-maj" }, +{ SAHPI_ES_UPPER_CRIT , "hi-crt" } }; + +#define uchar unsigned char +#define ushort unsigned short +#define uint unsigned int +#define ulong unsigned long +typedef struct +{ + short record_id; + uchar record_type; + uint timestamp; + short generator_id; /*slave_addr/channel*/ + uchar evm_rev; //event message revision + uchar sensor_type; + uchar sensor_number; + uchar event_trigger; + uchar event_data1; + uchar event_data2; + uchar event_data3; +} SEL_RECORD; + +/* sensor_types: See IPMI 1.5 Table 36-3, IPMI 2.0 Table 42-3 */ +#define NSTYPES 0x2D +static char *sensor_types[NSTYPES] = { +/* 00h */ "reserved", +/* 01h */ "Temperature", +/* 02h */ "Voltage", +/* 03h */ "Current", +/* 04h */ "Fan", +/* 05h */ "Platform Chassis Intrusion", +/* 06h */ "Security Violation", +/* 07h */ "Processor", +/* 08h */ "Power Supply", +/* 09h */ "Power Unit", +/* 0Ah */ "Cooling Device", +/* 0Bh */ "FRU Sensor", +/* 0Ch */ "Memory", +/* 0Dh */ "Drive Slot", +/* 0Eh */ "POST Memory Resize", +/* 0Fh */ "System Firmware", /*incl POST code errors*/ +/* 10h */ "SEL Disabled", +/* 11h */ "Watchdog 1", +/* 12h */ "System Event", /* offset 0,1,2 */ +/* 13h */ "Critical Interrupt", /* offset 0,1,2 */ +/* 14h */ "Button", /* offset 0,1,2 */ +/* 15h */ "Board", +/* 16h */ "Microcontroller", +/* 17h */ "Add-in Card", +/* 18h */ "Chassis", +/* 19h */ "Chip Set", +/* 1Ah */ "Other FRU", +/* 1Bh */ "Cable/Interconnect", +/* 1Ch */ "Terminator", +/* 1Dh */ "System Boot Initiated", +/* 1Eh */ "Boot Error", +/* 1Fh */ "OS Boot", +/* 20h */ "OS Critical Stop", +/* 21h */ "Slot/Connector", +/* 22h */ "ACPI Power State", +/* 23h */ "Watchdog 2", +/* 24h */ "Platform Alert", +/* 25h */ "Entity Presence", +/* 26h */ "Monitor ASIC", +/* 27h */ "LAN", +/* 28h */ "Management Subsystem Health", +/* 29h */ "Battery", +/* 2Ah */ "Session Audit", +/* 2Bh */ "Version Change", +/* 2Ch */ "FRU State" +}; + +#define NFWERRS 15 +static struct { /* See Table 36-3, type 0Fh, offset 00h */ + int code; char *msg; + } fwerrs[NFWERRS] = { + { 0x00, "Unspecified"}, + { 0x01, "No system memory"}, + { 0x02, "No usable memory"}, + { 0x03, "Unrecovered Hard Disk"}, + { 0x04, "Unrecovered System Board"}, + { 0x05, "Unrecovered Diskette"}, + { 0x06, "Unrecovered Hard Disk Ctlr"}, + { 0x07, "Unrecovered PS2 USB"}, + { 0x08, "Boot media not found"}, + { 0x09, "Unrecovered video controller"}, + { 0x0A, "No video device"}, + { 0x0B, "Firmware ROM corruption"}, + { 0x0C, "CPU voltage mismatch"}, + { 0x0D, "CPU speed mismatch"}, + { 0x0E, "Reserved" } +}; + +#define NFWSTAT 27 +static struct { /* See Table 36-3, type 0Fh, offset 01h & 02h */ + int code; char *msg; + } fwstat[NFWSTAT] = { + { 0x00, "Unspecified"}, + { 0x01, "Memory init"}, + { 0x02, "Hard disk init"}, + { 0x03, "Secondary processor"}, + { 0x04, "User authentication"}, + { 0x05, "User-init sys setup"}, + { 0x06, "USB configuration"}, + { 0x07, "PCI configuration"}, + { 0x08, "Option ROM init"}, + { 0x09, "Video init"}, + { 0x0a, "Cache init"}, + { 0x0b, "SM Bus init"}, + { 0x0c, "Keyboard init"}, + { 0x0d, "Mgt controller"}, + { 0x0e, "Docking attach"}, + { 0x0f, "Enabling docking"}, + { 0x10, "Docking eject"}, + { 0x11, "Disabling docking"}, + { 0x12, "OS wake-up"}, + { 0x13, "Starting OS boot"}, + { 0x14, "Baseboard init"}, + { 0x15, "reserved"}, + { 0x16, "Floppy init"}, + { 0x17, "Keyboard test"}, + { 0x18, "Mouse test"}, + { 0x19, "Primary processor"}, + { 0x1A, "Reserved"} +}; + +#define NGDESC 7 +struct { + ushort g_id; + char desc[10]; +} gen_desc[NGDESC] = { /*empirical, format defined in IPMI 1.5 Table 23-5 */ + { 0x0000, "IPMB"}, + { 0x0001, "EFI "}, + { 0x0003, "BIOS"}, + { 0x0020, "BMC "}, + { 0x0021, "SMI "}, + { 0x0028, "CHAS"}, /* Chassis Bridge Controller */ +/*{0x0031, "SMI/IPMB"}, * ia64/mBMC POST errors (rqSa/rqLun) */ +/*{0x0033, "MemCtlr"}, * ia64 memory controller? (rqSa/rqLun) */ + { 0x00c0, "HSC "} /* SAF-TE Hot-Swap Controller*/ +}; + +#define NCRITS 10 +char * crit_int_str[NCRITS] = { /* Critical Interrupt descriptions */ + /*00*/ "FP NMI ", /* Front Panel NMI */ + /*01*/ "Bus Timout", + /*02*/ "IOch NMI ", /* IO channel check NMI */ + /*03*/ "Soft NMI ", + /*04*/ "PCI PERR ", + /*05*/ "PCI SERR ", + /*06*/ "EISA Timout", + /*07*/ "Bus Warn ", /* Bus Correctable Error */ + /*08*/ "Bus Error", /* Bus Uncorrectable Error */ + /*09*/ "Fatal NMI" }; + +#define NSLOTC 9 +char * slot_str[NSLOTC] = { /* Slot/Connector descriptions */ + /*00*/ "Fault ", + /*01*/ "Identify", + /*02*/ "Inserted", + /*03*/ "InsReady", + /*04*/ "RemReady", + /*05*/ "PowerOff", + /*06*/ "RemRequest", + /*07*/ "Interlock", + /*08*/ "Disabled" }; + +#define NSDESC 47 +struct { + ushort genid; /*generator id: BIOS, BMC, etc. (slave_addr/channel)*/ + uchar s_typ; /*1=temp,2=voltage,4=fan,... */ + uchar s_num; + uchar evtrg; /*event trigger/type, see IPMI 1.5 table 36.1 & 36.2 */ + uchar data1; + uchar data2; + uchar data3; + char desc[40]; +} sens_desc[NSDESC] = { +{0xffff,0x05, 0x05, 0x6f, 0x44, 0xff, 0xff, "LAN unplugged"}, /*chassis*/ +{0xffff,0x05, 0x05, 0xef, 0x44, 0xff, 0xff, "LAN restored "}, /*chassis*/ +{0xffff,0x06, 0xff, 0xff, 0x45, 0xff, 0xff, "Password"}, /*security*/ +{0xffff,0x07, 0xff, 0xff, 0x41, 0xff, 0xff, "Thermal trip"}, /*processor*/ +{0xffff,0x08, 0xff, 0x6f, 0x40, 0xff, 0xff, "Presence detected"},/*PowerSupply*/ +{0xffff,0x08, 0xff, 0x6f, 0x41, 0xff, 0xff, "Failure detected"},/*power supply*/ +{0xffff,0x08, 0xff, 0x6f, 0x42, 0xff, 0xff, "Predictive failure"}, +{0xffff,0x08, 0xff, 0x6f, 0x43, 0xff, 0xff, "AC Lost"}, +{0xffff,0x08, 0xff, 0xef, 0x40, 0xff, 0xff, "not present"}, /*power supply*/ +{0xffff,0x08, 0xff, 0xef, 0x41, 0xff, 0xff, "is OK "}, /*power supply*/ +{0xffff,0x08, 0xff, 0xef, 0x42, 0xff, 0xff, "Predictive OK"}, +{0xffff,0x08, 0xff, 0xef, 0x43, 0xff, 0xff, "AC Regained"}, /*power supply*/ +{0xffff,0x09, 0xff, 0xff, 0x40, 0xff, 0xff, "Redundancy OK "}, /*power unit*/ +{0xffff,0x09, 0xff, 0xff, 0x41, 0xff, 0xff, "Redundancy Lost"}, +{0xffff,0x09, 0xff, 0xff, 0x44, 0xff, 0xff, "AC Lost"}, +{0xffff,0x09, 0xff, 0xff, 0x46, 0xff, 0xff, "Failure detected"}, +{0xffff,0x09, 0xff, 0xff, 0x47, 0xff, 0xff, "Predictive failure"},/*power unit*/ +{0xffff,0x0c, 0xff, 0xff, 0x00, 0xff, 0xff, "Correctable ECC"}, /*memory*/ +{0xffff,0x0f, 0x06, 0xff, 0xff, 0xff, 0xff, "POST Code"}, +{0xffff,0x10, 0x09, 0xff, 0x42, 0x0f, 0xff, "Log Cleared"}, +{0xffff,0x10, 0x09, 0xff, 0xc0, 0x03, 0xff, "ECC Memory Errors"}, + /* Often see these 3 Boot records with reboot: + * 12 83 6f 05 00 ff = System/SEL Time Sync 1 (going down) + * 12 83 6f 05 80 ff = System/SEL Time Sync 2 (coming up) + * 12 83 6f 01 ff ff = OEM System Boot Event (Completed POST) */ +{0xffff,0x12, 0x83, 0xff, 0x05, 0x00, 0xff, "Boot: ClockSync 1"}, +{0xffff,0x12, 0x83, 0xff, 0x05, 0x80, 0xff, "Boot: ClockSync 2"}, +{0xffff,0x12, 0x83, 0xff, 0x01, 0xff, 0xff, "OEM System Booted"}, +{0xffff,0x12, 0x08, 0xff, 0x01, 0xff, 0xff, "OEM System Booted"}, /*ia64*/ +{0xffff,0x12, 0x00, 0x6f, 0xff, 0xff, 0xff, "PEF Action"}, /*ia64*/ +{0xffff,0x12, 0x83, 0x6f, 0x80, 0xff, 0xff, "System Reconfigured"}, /*BMC*/ +{0x00c0,0x0d, 0xff, 0x08, 0x00, 0xff, 0xff, "Device Removed"}, /*HSC*/ +{0x00c0,0x0d, 0xff, 0x08, 0x01, 0xff, 0xff, "Device Inserted"}, /*HSC*/ +{0xffff,0x14, 0xff, 0xff, 0x42, 0xff, 0xff, "Reset Button pressed"}, +{0xffff,0x14, 0xff, 0xff, 0x40, 0xff, 0xff, "Power Button pressed"}, +{0xffff,0x14, 0xff, 0xff, 0x01, 0xff, 0xff, "ID Button pressed"}, +{0xffff,0x23, 0xff, 0xff, 0x40, 0xff, 0xff, "Expired, no action"},/*watchdog2*/ +{0xffff,0x23, 0xff, 0xff, 0x41, 0xff, 0xff, "Hard Reset action"}, /*watchdog2*/ +{0xffff,0x23, 0xff, 0xff, 0x42, 0xff, 0xff, "Power down action"}, /*watchdog2*/ +{0xffff,0x23, 0xff, 0xff, 0x43, 0xff, 0xff, "Power cycle action"},/*watchdog2*/ +{0xffff,0x23, 0xff, 0xff, 0x48, 0xff, 0xff, "Timer interrupt"}, /*watchdog2*/ +{0xffff,0xf3, 0x85, 0xff, 0x41, 0xff, 0xff, "State is now OK"}, +{0xffff,0x20, 0x00, 0xff, 0xff, 0xff, 0xff, "OS Kernel Panic"}, +{0xffff,0xff, 0xff, 0x01, 0x57, 0xff, 0xff, "Hi Noncrit thresh"}, +{0xffff,0xff, 0xff, 0x01, 0x59, 0xff, 0xff, "Hi Crit thresh"}, +{0xffff,0xff, 0xff, 0x01, 0x50, 0xff, 0xff, "Lo Noncrit thresh"}, +{0xffff,0xff, 0xff, 0x01, 0x52, 0xff, 0xff, "Lo Crit thresh"}, +{0xffff,0xff, 0xff, 0x81, 0x57, 0xff, 0xff, "HiN thresh OK now"}, +{0xffff,0xff, 0xff, 0x81, 0x59, 0xff, 0xff, "HiC thresh OK now"}, +{0xffff,0xff, 0xff, 0x81, 0x50, 0xff, 0xff, "LoN thresh OK now"}, +{0xffff,0xff, 0xff, 0x81, 0x52, 0xff, 0xff, "LoC thresh OK now"} + /*Thresholds apply to sensor types 1=temp, 2=voltage, 4=fan */ + /*Note that last 2 bytes usu show actual & threshold values*/ + /*evtrg: 0x01=thresh, 0x81=restored */ +}; + +/*------------------------------------------------------------------------ + * get_misc_desc + * Uses the sens_desc array to decode misc entries not otherwise handled. + * Called by decode_sel_entry + *------------------------------------------------------------------------*/ +char * get_misc_desc(uchar type, uchar num, ushort genid, uchar trig, + uchar data1, uchar data2, uchar data3); +char * +get_misc_desc(uchar type, uchar num, ushort genid, uchar trig, + uchar data1, uchar data2, uchar data3) +{ + int i; + char *pstr = NULL; + + /* Use sens_desc array for other misc descriptions */ + data1 &= 0x0f; /*ignore top half of sensor offset for matching */ + for (i = 0; i < NSDESC; i++) { + if ((sens_desc[i].s_typ == 0xff) || + (sens_desc[i].s_typ == type)) { + if (sens_desc[i].s_num != 0xff && + sens_desc[i].s_num != num) + continue; + if (sens_desc[i].genid != 0xffff && + sens_desc[i].genid != genid) + continue; + if (sens_desc[i].evtrg != 0xff && + sens_desc[i].evtrg != trig) + continue; + if (sens_desc[i].data1 != 0xff && + (sens_desc[i].data1 & 0x0f) != data1) + continue; + if (sens_desc[i].data2 != 0xff && + sens_desc[i].data2 != data2) + continue; + if (sens_desc[i].data3 != 0xff && + sens_desc[i].data3 != data3) + continue; + /* have a match, use description */ + pstr = (char *)sens_desc[i].desc; + break; + } + } /*end for*/ + return(pstr); +} /* end get_misc_desc() */ + +void decode_sensor_event(uchar sensor_type, uchar sensor_number, ushort gen_id, + uchar event_trigger, uchar data1, uchar data2, uchar data3, + char *outbuf); +void +decode_sensor_event(uchar sensor_type, uchar sensor_number, ushort gen_id, + uchar event_trigger, uchar data1, uchar data2, uchar data3, + char *outbuf) +{ + char mystr[26] = "(123)"; /*for panic string*/ + char poststr[24] = "OEM Post Code = %x%x"; + char genstr[10] = "03 "; + char *gstr; + char *pstr; + uchar dtype; + int i; + + /* set dtype, used as array index below */ + if (sensor_type >= NSTYPES) dtype = 0; + else dtype = sensor_type; + switch(sensor_type) { + case 0x20: /*OS Crit Stop*/ + /* Show first 3 chars of panic string */ + mystr[0] = '('; + mystr[1] = sensor_number & 0x7f; + mystr[2] = data2 & 0x7f; + mystr[3] = data3 & 0x7f; + mystr[4] = ')'; + mystr[5] = 0; + pstr = mystr; + if (sensor_number & 0x80) strcat(mystr,"Oops!"); + if (data2 & 0x80) strcat(mystr,"Int!"); + if (data3 & 0x80) strcat(mystr,"NullPtr!"); + break; + case 0x0f: /*Post Errs*/ + switch (data1) + { + case 0x00: /* System firmware errors */ + i = data2; + if (i >= NFWERRS) i = NFWERRS - 1; + pstr = fwerrs[i].msg; + break; + case 0x01: /* System firmware hang */ + i = data2; + if (i >= NFWSTAT) i = NFWSTAT - 1; + sprintf(poststr,"hang, %s",fwstat[i].msg); + pstr = poststr; + break; + case 0x02: /* System firmware progress */ + i = data2; + if (i >= NFWSTAT) i = NFWSTAT - 1; + sprintf(poststr,"prog, %s",fwstat[i].msg); + pstr = poststr; + break; + case 0xa0: /* OEM post codes */ + /* OEM post codes in bytes 2 & 3 (lo-hi) */ + sprintf(poststr,"POST Code %02x%02x", + data3,data2); + pstr = poststr; + break; + default: + pstr = "POST Error"; /*default string*/ + } /*end switch(data1)*/ + break; + case 0x13: /*Crit Int*/ + i = data1 & 0x0f; + if (i >= NCRITS) i = NCRITS - 1; + pstr = crit_int_str[i]; + break; + case 0x21: /*Slot/Con*/ + i = data1 & 0x0f; + if (i >= NSLOTC) i = NSLOTC - 1; + sprintf(mystr,"%s",slot_str[i]); + /* could also decode data2/data3 here if valid */ + pstr = mystr; + break; + default: /* all other sensor types, see sens_desc */ + pstr = get_misc_desc( sensor_type, + sensor_number, gen_id, + event_trigger, data1, data2, data3); + if (pstr == NULL) { + mystr[0] = '-'; mystr[1] = 0; + pstr = mystr; + } + + } /*end switch(sensor_type)*/ + + /* show the Generator ID */ + sprintf(genstr,"%04x",gen_id); + gstr = genstr; /* default */ + for (i = 0; i < NGDESC; i++) + { + if (gen_desc[i].g_id == gen_id) + gstr = (char *)gen_desc[i].desc; + } + + /*firmware timestamp is #seconds since 1/1/1970 localtime*/ + /* timestamp handled by caller in HPI */ + + if ((event_trigger == 0x01) || /*threshold*/ + (event_trigger == 0x81)) { /*threshold ok*/ + sprintf(outbuf, + "%s %02x %s act=%02x thr=%02x", + sensor_types[dtype], sensor_number, pstr, + data2, /*actual reading*/ + data3 ); /*threshold value*/ + } else { + sprintf(outbuf, + "%s %02x %s %02x [%02x %02x %02x]", + sensor_types[dtype] , sensor_number, pstr, + event_trigger, data1, data2, data3 ); + } +} + +/*------------------------------------------------------------------------ + * decode_ipmi_event + * Parse and decode the SEL record into readable format. + * This routine is constructed so that it could be used as a library + * function. + * Input: psel, a pointer to the IPMI SEL record + * Output: outbuf, a description of the event, max 80 chars. + * Called by ReadSEL + *------------------------------------------------------------------------*/ +void decode_ipmi_event( SEL_RECORD *psel, char *outbuf); +void decode_ipmi_event( SEL_RECORD *psel, char *outbuf) +{ + char genstr[10] = "03 "; + int i, j; + + if (psel->record_type >= 0xe0) { /*OEM Record 26.3*/ + char *pc; + pc = (char *)&psel->timestamp; /*bytes 4:16*/ + sprintf(outbuf," OEM Event %02x %02x ", pc[0], pc[1]); + j = strlen(outbuf); + for (i = 2; i < 13; i++) { /* 4:16 = 13 bytes data */ + if (psel->record_type == 0xf0) { + /* panic string will be type 0xf0 */ + if (pc[i] == 0) break; + outbuf[j++] = pc[i]; + } else { + sprintf(&outbuf[j],"%02x ",pc[i]); + j += 3; + } + } + outbuf[j++] = '\n'; + outbuf[j++] = 0; + } else if (psel->record_type == 0x02) { + /* most records are record type 2 */ + decode_sensor_event(psel->sensor_type, + psel->sensor_number, psel->generator_id, + psel->event_trigger, psel->event_data1, + psel->event_data2, psel->event_data3, outbuf); + + } /*endif type 2 */ + else { /* other misc record type */ + uchar *pc; + pc = (uchar *)&psel->record_type; + sprintf(outbuf," Type%02x ", pc[0]); + j = strlen(outbuf); + for (i = 1; i < 14; i++) { + sprintf(genstr,"%02x ",pc[i]); + strcat(outbuf,genstr); + } + } /*endif misc type*/ + return; +} /*end decode_ipmi_event()*/ + +#define IF_IPMI 0 /* other interfaces, like H8, have diff numbers */ + /*Note that OpenHPI 2.0.0 does not yet fill this in*/ + +/*------------------------------------------------------------------------ + * decode_hpi_event + * Parse and decode the SensorEvent record into readable format. + * Input: pevent, a pointer to the HPI SensorEvent record + * Output: outbuf, a description of the event, max 80 chars. + * Called by ReadSEL + *------------------------------------------------------------------------*/ +void decode_hpi_event( SaHpiSensorEventT *pevent, char *outbuf); +void decode_hpi_event( SaHpiSensorEventT *pevent, char *outbuf) +{ + int ec, eci; + int es, esi; + int styp; + uchar data1, data2, data3, if_type; + uchar etrig; + ushort genid; + char estag[8]; + char sbuf[80]; + char *ecstr; + // char *pstr; + + /* decode event category */ + ec = pevent->EventCategory; + for (eci = 0; eci < NUM_EC; eci++) + if (eventcats[eci].val == ec) break; + if (eci >= NUM_EC) eci = 0; + ecstr = eventcats[eci].str; + genid = 0x0020; /* default to BMC */ + etrig = 0x6f; /* default to sensor-specific*/ + /* decode event state */ + es = pevent->EventState; + if (ec == SAHPI_EC_USER) { /*OpenHPI usu returns this (0x7e)*/ + sprintf(estag,"%02x",es); + } else if (eci == SAHPI_EC_THRESHOLD ) { /*0x01*/ + for (esi = 0; esi < NUM_ES; esi++) + if (eventstates[esi].val == es) break; + if (esi >= NUM_ES) esi = 0; + strcpy(estag,eventstates[esi].str); + if (pevent->Assertion) etrig = 0x01; + else etrig = 0x81; + } else { + sprintf(estag,"%02x:%02x",ec,es); + } + + /* decode sensor type */ + styp = pevent->SensorType; + if (styp >= NSTYPES) { styp = 0; } + + /* get if_type from SensorSpecific h.o. byte */ + if_type = (pevent->SensorSpecific & 0xff000000) >> 24; + data3 = (pevent->SensorSpecific & 0x00ff0000) >> 16; + data2 = (pevent->SensorSpecific & 0x0000ff00) >> 8; + data1 = (pevent->SensorSpecific & 0x000000ff); + if (if_type == IF_IPMI) { /* handle IPMI SensorSpecific stuff */ + /* fortunately, HPI & IPMI have the same sensor_type values */ + decode_sensor_event(styp, pevent->SensorNum, genid, + etrig, data1, data2, data3, sbuf); + sprintf(outbuf,"%s %s", estag, sbuf); + } + else { + sprintf(outbuf,"%s, %s %s %x [%02x %02x %02x]", + sensor_types[styp], ecstr, estag, + pevent->SensorNum, data1, data2, data3); + } + + return; +} + +static +char *decode_error(SaErrorT code) +{ + int i; + char *str = NULL; + for (i = 0; i < NECODES; i++) { + if (code == ecodes[i].code) { str = ecodes[i].str; break; } + } + if (str == NULL) { + sprintf(&def_estr[10],"%d",code); + str = &def_estr[0]; + } + return(str); +} + +void ShowSel( SaHpiSelEntryT *sel, SaHpiRdrT *rdr, SaHpiRptEntryT *rptentry); +void ShowSel( SaHpiSelEntryT *sel, SaHpiRdrT *rdr, + SaHpiRptEntryT *rptentry ) +{ + unsigned char evtype; + char timestr[40]; + time_t tt1; + char *srctag; + char *rdrtag; + char *pstr; + unsigned char *pd; + int outlen; + char outbuf[132]; + int styp; + unsigned char data3; + + /*format & print the EventLog entry*/ + if (sel->Event.Timestamp > SAHPI_TIME_MAX_RELATIVE) { /*absolute time*/ + tt1 = sel->Event.Timestamp / 1000000000; + strftime(timestr,sizeof(timestr),"%x %H:%M:%S", localtime(&tt1)); + } else if (sel->Event.Timestamp > SAHPI_TIME_UNSPECIFIED) { /*invalid time*/ + strcpy(timestr,"invalid time "); + } else { /*relative time*/ + tt1 = sel->Event.Timestamp / 1000000000; + sprintf(timestr,"rel(%lx)", (unsigned long)tt1); + } + if (rptentry->ResourceId == sel->Event.Source) + srctag = rptentry->ResourceTag.Data; + else srctag = "unspec "; /* SAHPI_UNSPECIFIED_RESOURCE_ID */ + evtype = sel->Event.EventType; + if (evtype > NEVTYPES) evtype = NEVTYPES - 1; + if (rdr->RdrType == SAHPI_NO_RECORD) rdrtag = "rdr-unkn"; + else { + rdr->IdString.Data[rdr->IdString.DataLength] = 0; + rdrtag = &rdr->IdString.Data[0]; + } + sprintf(outbuf,"%04x %s %s ", sel->EntryId, timestr, evtypes[evtype] ); + outlen = strlen(outbuf); + pstr = ""; +#ifdef HPI_A + pd = &sel->Event.EventDataUnion.UserEvent.UserEventData[0]; +#else + pd = &sel->Event.EventDataUnion.UserEvent.UserEventData.Data[0]; +#endif + + switch(evtype) + { + case SAHPI_ET_SENSOR: /*Sensor*/ + pd = (void *)&(sel->Event.EventDataUnion.SensorEvent); + decode_hpi_event((void *)pd,&outbuf[outlen]); + break; + case SAHPI_ET_USER: /*User, usu 16-byte IPMI SEL record */ + decode_ipmi_event((void *)pd,&outbuf[outlen]); + break; + default: + // decode_ipmi_event((void *)pd,&outbuf[outlen]); + styp = pd[10]; + data3 = pd[15]; + /* *sel->Event.EventDataUnion.SensorEvent.SensorSpecific+1 */ + if (styp >= NSTYPES) { + if (fdebug) printf("sensor type %d >= max %d\n",styp,NSTYPES); + styp = 0; + } + pstr = (char *)sensor_types[styp]; + sprintf(&outbuf[outlen], "%s, %x %x, %02x %02x %02x [%02x %02x %02x/%02x]", + pstr, pd[0], pd[7], pd[10], pd[11], pd[12], + pd[13], pd[14], pd[15], data3); + break; + } + printf("%s\n",outbuf); +} + +static SaErrorT +DoEventLogForResource(SaHpiSessionIdT sessionid, + SaHpiResourceIdT resourceid, + char *tagname) +{ + SaErrorT rv; + SaHpiSelInfoT info; + int free = 50; + SaHpiSelEntryIdT entryid; + SaHpiSelEntryIdT nextentryid; + SaHpiSelEntryIdT preventryid; + SaHpiSelEntryT sel; + SaHpiRdrT rdr; + SaHpiRptEntryT rptentry; + + printf("rptentry[%d] tag: %s\n", resourceid, tagname); + + rv = saHpiEventLogInfoGet(sessionid, resourceid, &info); + if (fdebug) + printf("saHpiEventLogInfoGet %s\n", decode_error(rv)); + if (rv == SA_OK) { + free = info.Size - info.Entries; + printf("EventLog entries=%d, size=%d, enabled=%d, free=%d\n", + info.Entries, info.Size, info.Enabled, free); + } + + entryid = SAHPI_OLDEST_ENTRY; + while ((rv == SA_OK) && (entryid != SAHPI_NO_MORE_ENTRIES)) + { + /* rv = saHpiEventLogEntryGet(sessionid,SAHPI_DOMAIN_CONTROLLER_ID,entryid, */ + rv = saHpiEventLogEntryGet(sessionid, resourceid, entryid, + &preventryid, &nextentryid, &sel, &rdr, &rptentry); + if (fdebug) + printf("saHpiEventLogEntryGet[%x] %s, next=%x\n", + entryid, decode_error(rv), nextentryid); + if (rv == SA_OK) { + ShowSel(&sel, &rdr, &rptentry); + if (entryid == nextentryid) + break; + preventryid = entryid; + entryid = nextentryid; + } + } + + if (free < 6) { + /* + * This test could be more generic if the log info fields above + * were accurate. IPMI SEL logs have a fixed size of 0x10000 + * bytes. New log records are thrown away when it gets full. + * (OLDEST = 0, NO_MORE = fffffffe , so these are ok.) + */ + /* free = (0x10000 - 20) - preventryid; */ + printf( "WARNING: Log free space is very low (%d records)\n" + " Clear log with hpisel -c\n", free); + } + + return SA_OK; +} + +int +main(int argc, char **argv) +{ + int c; + SaErrorT rv; + SaHpiSessionIdT sessionid; +#ifdef HPI_A + SaHpiVersionT hpiVer; + SaHpiRptInfoT rptinfo; +#endif + SaHpiRptEntryT rptentry; + SaHpiEntryIdT rptentryid; + SaHpiEntryIdT nextrptentryid; + SaHpiResourceIdT resourceid; + + printf("%s: version %s\n",argv[0],progver); + +#ifdef HPI_A +#define ARGSTR "cx?" +#else +#define ARGSTR "cdx?" +#endif + + while ( (c = getopt( argc, argv, ARGSTR)) != EOF ) + switch(c) { + case 'c': fclear = 1; break; +#ifndef HPI_A + case 'd': fdomain = 1; break; +#endif + case 'x': fdebug = 1; break; + default: + printf("Usage %s [-cx]\n",argv[0]); + printf("where -c clears the event log\n"); +#ifndef HPI_A + printf(" -d displays the domain event log\n"); +#endif + printf(" -x displays eXtra debug messages\n"); + exit(1); + } +#ifdef HPI_A + rv = saHpiInitialize(&hpiVer); + if (rv != SA_OK) { + printf("saHpiInitialize: %s\n",decode_error(rv)); + exit(-1); + } + rv = saHpiSessionOpen(SAHPI_DEFAULT_DOMAIN_ID,&sessionid,NULL); + if (rv != SA_OK) { + if (rv == SA_ERR_HPI_ERROR) + printf("saHpiSessionOpen: error %d, SpiLibd not running\n",rv); + else + printf("saHpiSessionOpen: %s\n",decode_error(rv)); + exit(-1); + } + rv = saHpiResourcesDiscover(sessionid); + if (fdebug) printf("saHpiResourcesDiscover %s\n",decode_error(rv)); + rv = saHpiRptInfoGet(sessionid,&rptinfo); + if (fdebug) printf("saHpiRptInfoGet %s\n",decode_error(rv)); + printf("RptInfo: UpdateCount = %x, UpdateTime = %lx\n", + rptinfo.UpdateCount, (unsigned long)rptinfo.UpdateTimestamp); +#else + rv = saHpiSessionOpen(SAHPI_UNSPECIFIED_DOMAIN_ID,&sessionid,NULL); + if (rv != SA_OK) { + printf("saHpiSessionOpen: %s\n",decode_error(rv)); + exit(-1); + } + rv = saHpiDiscover(sessionid); + if (fdebug) printf("saHpiDiscover %s\n",decode_error(rv)); +#endif + +#ifndef HPI_A + if (fdomain != 0) /* saw option for domain event log */ + { + /* resourceid = 1; * oh_get_default_domain_id() */ + resourceid = SAHPI_UNSPECIFIED_DOMAIN_ID; + if (fclear) { + rv = saHpiEventLogClear(sessionid,resourceid); + if (rv == SA_OK) printf("Domain EventLog successfully cleared\n"); + else printf("Domain EventLog clear, error = %d\n",rv); + } else { + rv = DoEventLogForResource(sessionid, resourceid, "Domain Event Log"); + } + } + else /* walk the RPT list */ +#endif + { + rptentryid = SAHPI_OLDEST_ENTRY; + while ((rv == SA_OK) && (rptentryid != SAHPI_LAST_ENTRY)) + { + rv = saHpiRptEntryGet(sessionid,rptentryid,&nextrptentryid,&rptentry); + if (fdebug) + printf("saHpiRptEntryGet[%d] %s\n",rptentryid,decode_error(rv)); + if (rv != SA_OK) + goto skip_to_next; + resourceid = rptentry.ResourceId; + if (fdebug) printf("RPT %x capabilities = %x\n", resourceid, + rptentry.ResourceCapabilities); + if ((rptentry.ResourceCapabilities & SAHPI_CAPABILITY_SEL) == 0) + goto skip_to_next; + if (fclear) { + rv = saHpiEventLogClear(sessionid,resourceid); + if (rv == SA_OK) printf("EventLog successfully cleared\n"); + else printf("EventLog clear, error = %d\n",rv); + break; + } + // rptentry.ResourceTag.Data[rptentry.ResourceTag.DataLength] = 0; + + rv = DoEventLogForResource(sessionid, resourceid, + rptentry.ResourceTag.Data); + skip_to_next: + rptentryid = nextrptentryid; + } + } + + rv = saHpiSessionClose(sessionid); +#ifdef HPI_A + rv = saHpiFinalize(); +#endif + + exit(0); +} + +/* end hpisel.c */ diff --git a/hpiutil/hpisensor.c b/hpiutil/hpisensor.c new file mode 100644 index 0000000..f7eef8f --- /dev/null +++ b/hpiutil/hpisensor.c @@ -0,0 +1,467 @@ +/* + * hpisensor.c + * + * Author: Andy Cress arcress at users.sourceforge.net + * Copyright (c) 2003 Intel Corporation. + * + * 04/15/03 Andy Cress - created + * 04/17/03 Andy Cress - mods for resourceid, first good run + * 04/28/03 Andy Cress - adding Convert + * 05/02/03 Andy Cress v0.6 more Convert changes in ShowSensor (e.g. units) + * 06/06/03 Andy Cress v0.7 add more units, and buffer type + * 06/09/03 Andy Cress v0.8 added more for Compact Sensors + * 06/26/03 Andy Cress v1.0 added -t for thresholds + * 02/19/04 Andy Cress v1.1 recognize common errors for Compact & mBMC sensors. + * 10/14/04 Andy Cress v1.2 added HPI_A/HPI_B logic + * 01/07/05 Andy Cress v1.3 added HPI_B sleep for OpenHPI bug + */ +/*M* +Copyright (c) 2003, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + a.. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + b.. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + c.. Neither the name of Intel Corporation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *M*/ + +#include <stdio.h> +#include <stdlib.h> +#include <getopt.h> +#include <string.h> +#include <unistd.h> +#include "SaHpi.h" + +#ifdef HPI_A +char progver[] = "1.3 HPI-A"; +#else +char progver[] = "1.3 HPI-B"; +#endif +int fdebug = 0; +int fshowthr = 0; +char *rtypes[5] = {"None ", "Control ", "Sensor ", "Invent ", "Watchdog"}; + +#define NSU 77 +char *units[NSU] = { +"units", "degrees C", "degrees F", "degrees K", "volts", "amps", +"watts", "joules", "coulombs", "va", "nits", "lumen", +"lux", "candela", "kpa", "psi", "newton", "cfm", +"rpm", "Hz", "us", "ms", "sec", "min", +"hours", "days", "weeks", "mil", "in", "ft", +/*30*/ "cu in", "cu ft", "mm", "cm", "m", "cu cm", "cu m", +"liters", "fl oz", "radians", "sterad", "rev", +"cycles", "grav", "oz", "lbs", "ft lb", "oz in", "gauss", +"gilberts", "henry", "mhenry", "farad", "ufarad", "ohms", +/*55*/ "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "Gb", +/*70*/ "bytes", "KB", "MB", "GB", +/*74*/ "", "", "line" +}; + +#define NECODES 27 +struct { int code; char *str; +} ecodes[NECODES] = { + { 0, "Success" }, + { -1001, "HPI unspecified error" }, + { -1002, "HPI unsupported function" }, + { -1003, "HPI busy" }, + { -1004, "HPI request invalid" }, + { -1005, "HPI command invalid" }, + { -1006, "HPI timeout" }, + { -1007, "HPI out of space" }, + { -1008, "HPI data truncated" }, +#ifdef HPI_A + { -1009, "HPI data length invalid" }, +#else + { -1009, "HPI invalid parameter" }, +#endif + { -1010, "HPI data exceeds limits" }, + { -1011, "HPI invalid params" }, + { -1012, "HPI invalid data" }, + { -1013, "HPI not present" }, + { -1014, "HPI invalid data field" }, + { -1015, "HPI invalid sensor command" }, + { -1016, "HPI no response" }, + { -1017, "HPI duplicate request" }, + { -1018, "HPI updating" }, + { -1019, "HPI initializing" }, + { -1020, "HPI unknown error" }, + { -1021, "HPI invalid session" }, + { -1022, "HPI invalid domain" }, + { -1023, "HPI invalid resource id" }, + { -1024, "HPI invalid request" }, + { -1025, "HPI entity not present" }, + { -1026, "HPI uninitialized" } +}; +char def_estr[15] = "HPI error %d "; + +static +char *decode_error(SaErrorT code) +{ + int i; + char *str = NULL; + for (i = 0; i < NECODES; i++) { + if (code == ecodes[i].code) { str = ecodes[i].str; break; } + } + if (str == NULL) { + sprintf(&def_estr[10],"%d",code); + str = &def_estr[0]; + } + return(str); +} + +static +void ShowSensor( + SaHpiSessionIdT sessionid, + SaHpiResourceIdT resourceid, + SaHpiSensorRecT *sensorrec ) +{ + SaHpiSensorNumT sensornum; + SaHpiSensorReadingT reading; + SaHpiSensorThresholdsT senstbuff; +#ifdef HPI_A + SaHpiSensorReadingT conv_reading; +#else + SaHpiEventStateT evtstate; +#endif + SaErrorT rv; + char *unit; + int i; + + sensornum = sensorrec->Num; +#ifdef HPI_A + rv = saHpiSensorReadingGet(sessionid,resourceid, sensornum, &reading); +#else + rv = saHpiSensorReadingGet(sessionid,resourceid, sensornum, &reading,&evtstate); +#endif + /* ReadingGet returns -1024 if SDR type is mBMC */ + if (!fdebug && rv == SA_ERR_HPI_INVALID_REQUEST) { + printf(" = no reading\n"); + return; + } else if (rv != SA_OK) { + printf("ReadingGet ret=%d\n", rv); + return; + } + +#ifdef HPI_A + if ((reading.ValuesPresent & SAHPI_SRF_INTERPRETED) == 0) { + if ((reading.ValuesPresent & SAHPI_SRF_RAW) == 0) { + /* no raw or interpreted, so just show event status */ + /* This is a Compact Sensor */ + if (reading.ValuesPresent & SAHPI_SRF_EVENT_STATE) + printf(" = %x %x\n", reading.EventStatus.SensorStatus, + reading.EventStatus.EventStatus); + else printf(" = no reading\n"); + return; + } else { + /* have raw, but not interpreted, so try convert. */ + rv = saHpiSensorReadingConvert(sessionid, resourceid, sensornum, + &reading, &conv_reading); + if (rv != SA_OK) { + /* conv rv=-1012 on Compact sensors */ + if (!fdebug && rv == SA_ERR_HPI_INVALID_DATA) + printf(" = %02x raw\n", reading.Raw); + else printf("raw=%x conv_ret=%d\n", reading.Raw, rv); + /* printf("conv_rv=%s\n", decode_error(rv)); */ + return; + } + else { + if (fdebug) printf("conv ok: raw=%x conv=%x\n", reading.Raw, + conv_reading.Interpreted.Value.SensorUint32); + reading.Interpreted.Type = conv_reading.Interpreted.Type; + if (reading.Interpreted.Type == SAHPI_SENSOR_INTERPRETED_TYPE_BUFFER) + { + memcpy(reading.Interpreted.Value.SensorBuffer, + conv_reading.Interpreted.Value.SensorBuffer, + 4); /* SAHPI_SENSOR_BUFFER_LENGTH); */ + /* IPMI 1.5 only returns 4 bytes */ + } else + reading.Interpreted.Value.SensorUint32 = + conv_reading.Interpreted.Value.SensorUint32; + } + } + } + /* Also show units of interpreted reading */ + i = sensorrec->DataFormat.BaseUnits; + if (i >= NSU) i = 0; + unit = units[i]; + switch(reading.Interpreted.Type) + { + case SAHPI_SENSOR_INTERPRETED_TYPE_FLOAT32: + printf(" = %5.2f %s\n", + reading.Interpreted.Value.SensorFloat32,unit); + break; + case SAHPI_SENSOR_INTERPRETED_TYPE_UINT32: + printf(" = %d %s\n", + reading.Interpreted.Value.SensorUint32, unit); + break; + case SAHPI_SENSOR_INTERPRETED_TYPE_BUFFER: + printf(" = %02x %02x %02x %02x\n", + reading.Interpreted.Value.SensorBuffer[0], + reading.Interpreted.Value.SensorBuffer[1], + reading.Interpreted.Value.SensorBuffer[2], + reading.Interpreted.Value.SensorBuffer[3]); + break; + default: + printf(" = %x (itype=%x)\n", + reading.Interpreted.Value.SensorUint32, + reading.Interpreted.Type); + } + + if (fshowthr) { /* Show thresholds, if any */ +#ifdef SHOWMAX + if ( sensorrec->DataFormat.Range.Flags & SAHPI_SRF_MAX ) + printf( " Max of Range: %5.2f\n", + sensorrec->DataFormat.Range.Max.Interpreted.Value.SensorFloat32); + if ( sensorrec->DataFormat.Range.Flags & SAHPI_SRF_MIN ) + printf( " Min of Range: %5.2f\n", + sensorrec->DataFormat.Range.Min.Interpreted.Value.SensorFloat32); +#endif + if ((!sensorrec->Ignore) && (sensorrec->ThresholdDefn.IsThreshold)) { + rv = saHpiSensorThresholdsGet(sessionid, resourceid, + sensornum, &senstbuff); + if (rv != 0) { printf("ThresholdsGet ret=%d\n", rv); return; } + printf( "\t\t\t"); + if ( sensorrec->ThresholdDefn.ReadThold & SAHPI_STM_LOW_MINOR ) { + printf( "LoMin %5.2f ", + senstbuff.LowMinor.Interpreted.Value.SensorFloat32); + } + if ( sensorrec->ThresholdDefn.ReadThold & SAHPI_STM_LOW_MAJOR ) { + printf( "LoMaj %5.2f ", + senstbuff.LowMajor.Interpreted.Value.SensorFloat32); + } + if ( sensorrec->ThresholdDefn.ReadThold & SAHPI_STM_LOW_CRIT ) { + printf( "LoCri %5.2f ", + senstbuff.LowCritical.Interpreted.Value.SensorFloat32); + } + if ( sensorrec->ThresholdDefn.ReadThold & SAHPI_STM_UP_MINOR ) { + printf( "HiMin %5.2f ", + senstbuff.UpMinor.Interpreted.Value.SensorFloat32); + } + if ( sensorrec->ThresholdDefn.ReadThold & SAHPI_STM_UP_MAJOR ) { + printf( "HiMaj %5.2f ", + senstbuff.UpMajor.Interpreted.Value.SensorFloat32); + } + if ( sensorrec->ThresholdDefn.ReadThold & SAHPI_STM_UP_CRIT ) { + printf( "HiCri %5.2f ", + senstbuff.UpCritical.Interpreted.Value.SensorFloat32); + } +#ifdef SHOWMAX + if ( sensorrec->ThresholdDefn.ReadThold & SAHPI_STM_UP_HYSTERESIS ) { + printf( "Hi Hys %5.2f ", + senstbuff.PosThdHysteresis.Interpreted.Value.SensorFloat32); + } + if ( sensorrec->ThresholdDefn.ReadThold & SAHPI_STM_LOW_HYSTERESIS ) { + printf( "Lo Hys %5.2f ", + senstbuff.NegThdHysteresis.Interpreted.Value.SensorFloat32); + } +#endif + printf( "\n"); + } /* endif valid threshold */ + } /* endif showthr */ + +#else /* HPI_B: HPI B.01.01 logic */ + i = sensorrec->DataFormat.BaseUnits; + if (i >= NSU) i = 0; + unit = units[i]; + switch(reading.Type) + { + case SAHPI_SENSOR_READING_TYPE_FLOAT64: + printf(" = %5.2f %s\n", + reading.Value.SensorFloat64,unit); + break; + case SAHPI_SENSOR_READING_TYPE_UINT64: + printf(" = %lld %s\n", + reading.Value.SensorUint64, unit); + break; + case SAHPI_SENSOR_READING_TYPE_INT64: + printf(" = %lld %s\n", + reading.Value.SensorInt64, unit); + break; + case SAHPI_SENSOR_READING_TYPE_BUFFER: + printf(" = %02x %02x %02x %02x\n", + reading.Value.SensorBuffer[0], + reading.Value.SensorBuffer[1], + reading.Value.SensorBuffer[2], + reading.Value.SensorBuffer[3]); + break; + default: + printf(" = %llx (itype=%x)\n", + reading.Value.SensorUint64, + reading.Type); + } + if (fshowthr) { /* Show thresholds, if any */ + if (sensorrec->ThresholdDefn.IsAccessible) { + rv = saHpiSensorThresholdsGet(sessionid, resourceid, + sensornum, &senstbuff); + if (rv != SA_OK) { printf("ThresholdsGet ret=%d\n", rv); + } else { + printf( "\t\t\t"); + if ( sensorrec->ThresholdDefn.ReadThold & SAHPI_STM_LOW_MINOR ) { + printf( "LoMin %5.2f ", + senstbuff.LowMinor.Value.SensorFloat64); + } + if ( sensorrec->ThresholdDefn.ReadThold & SAHPI_STM_LOW_MAJOR ) { + printf( "LoMaj %5.2f ", + senstbuff.LowMajor.Value.SensorFloat64); + } + if ( sensorrec->ThresholdDefn.ReadThold & SAHPI_STM_LOW_CRIT ) { + printf( "LoCri %5.2f ", + senstbuff.LowCritical.Value.SensorFloat64); + } + if ( sensorrec->ThresholdDefn.ReadThold & SAHPI_STM_UP_MINOR ) { + printf( "HiMin %5.2f ", + senstbuff.UpMinor.Value.SensorFloat64); + } + if ( sensorrec->ThresholdDefn.ReadThold & SAHPI_STM_UP_MAJOR ) { + printf( "HiMaj %5.2f ", + senstbuff.UpMajor.Value.SensorFloat64); + } + if ( sensorrec->ThresholdDefn.ReadThold & SAHPI_STM_UP_CRIT ) { + printf( "HiCri %5.2f ", + senstbuff.UpCritical.Value.SensorFloat64); + } + printf( "\n"); + } /*endif get ok*/ + } /* endif valid threshold */ + } /* endif showthr */ +#endif + return; +} /*end ShowSensor*/ + +int +main(int argc, char **argv) +{ + int c; + SaErrorT rv; + SaHpiSessionIdT sessionid; +#ifdef HPI_A + SaHpiVersionT hpiVer; + SaHpiRptInfoT rptinfo; +#endif + SaHpiRptEntryT rptentry; + SaHpiEntryIdT rptentryid; + SaHpiEntryIdT nextrptentryid; + SaHpiEntryIdT entryid; + SaHpiEntryIdT nextentryid; + SaHpiResourceIdT resourceid; + SaHpiRdrT rdr; + + printf("%s: version %s\n",argv[0],progver); + + while ( (c = getopt( argc, argv,"tx?")) != EOF ) + switch(c) { + case 't': fshowthr = 1; break; + case 'x': fdebug = 1; break; + default: + printf("Usage %s [-t -x]\n",argv[0]); + printf("where -t = show Thresholds also\n"); + printf(" -x = show eXtra debug messages\n"); + exit(1); + } + if (fdebug) printf("fshowthr = %d, fdebug = %d\n",fshowthr,fdebug); +#ifdef HPI_A + rv = saHpiInitialize(&hpiVer); + if (rv != SA_OK) { + printf("saHpiInitialize: %s\n",decode_error(rv)); + exit(-1); + } + rv = saHpiSessionOpen(SAHPI_DEFAULT_DOMAIN_ID,&sessionid,NULL); + if (rv != SA_OK) { + if (rv == SA_ERR_HPI_ERROR) + printf("saHpiSessionOpen: error %d, SpiLibd not running\n",rv); + else + printf("saHpiSessionOpen: %s\n",decode_error(rv)); + exit(-1); + } + if (fdebug) printf("Starting Discovery ...\n"); + rv = saHpiResourcesDiscover(sessionid); + if (fdebug) printf("saHpiResourcesDiscover %s\n",decode_error(rv)); + rv = saHpiRptInfoGet(sessionid,&rptinfo); + if (fdebug) printf("saHpiRptInfoGet %s\n",decode_error(rv)); + printf("RptInfo: UpdateCount = %x, UpdateTime = %lx\n", + rptinfo.UpdateCount, (unsigned long)rptinfo.UpdateTimestamp); +#else + rv = saHpiSessionOpen(SAHPI_UNSPECIFIED_DOMAIN_ID,&sessionid,NULL); + if (rv != SA_OK) { + printf("saHpiSessionOpen: %s\n",decode_error(rv)); + exit(-1); + } + if (fdebug) printf("Starting Discovery ...\n"); + rv = saHpiDiscover(sessionid); + if (fdebug) printf("saHpiDiscover %s\n",decode_error(rv)); + if (fshowthr) { + /* + * If OpenHPI, we need to wait extra time before doing + * ThresholdsGet because its discovery isn't really done. + */ + sleep(5); + } +#endif + + /* walk the RPT list */ + rptentryid = SAHPI_FIRST_ENTRY; + while ((rv == SA_OK) && (rptentryid != SAHPI_LAST_ENTRY)) + { + rv = saHpiRptEntryGet(sessionid,rptentryid,&nextrptentryid,&rptentry); + if (fdebug) printf("saHpiRptEntryGet %s\n",decode_error(rv)); + if (rv == SA_OK) { + /* walk the RDR list for this RPT entry */ + entryid = SAHPI_FIRST_ENTRY; + resourceid = rptentry.ResourceId; +#ifdef HPI_A + rptentry.ResourceTag.Data[rptentry.ResourceTag.DataLength] = 0; +#endif + printf("rptentry[%d] resourceid=%d tag: %s\n", + rptentryid,resourceid, rptentry.ResourceTag.Data); + while ((rv == SA_OK) && (entryid != SAHPI_LAST_ENTRY)) + { + rv = saHpiRdrGet(sessionid,resourceid, + entryid,&nextentryid, &rdr); + if (fdebug) printf("saHpiRdrGet[%d] rv = %d\n",entryid,rv); + if (rv == SA_OK) { + char *eol; + rdr.IdString.Data[rdr.IdString.DataLength] = 0; + if (rdr.RdrType == SAHPI_SENSOR_RDR) eol = " \t"; + else eol = "\n"; + printf("RDR[%02d]: %s %s %s",rdr.RecordId, + rtypes[rdr.RdrType],rdr.IdString.Data,eol); + if (rdr.RdrType == SAHPI_SENSOR_RDR) { + ShowSensor(sessionid,resourceid, + &rdr.RdrTypeUnion.SensorRec); + } + entryid = nextentryid; + } + } + rptentryid = nextrptentryid; + } + } + + rv = saHpiSessionClose(sessionid); +#ifdef HPI_A + rv = saHpiFinalize(); +#endif + + exit(0); + return(0); +} + +/* end hpisensor.c */ diff --git a/hpiutil/hpiutil.spec b/hpiutil/hpiutil.spec new file mode 100644 index 0000000..9fe7a5e --- /dev/null +++ b/hpiutil/hpiutil.spec @@ -0,0 +1,199 @@ +Name: hpiutil +%define Version 1.1.11 +Version: %Version +Release: 1 +Summary: Contains HPI server management utilities and library. +License: BSD +Group: System/Management +Source: hpiutil-%Version.tar.gz +URL: http://ipmiutil.sourceforge.net +BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) +BuildRequires: gcc + +%ifarch x86_pentium3 +AutoReqProv: No +%endif +%ifarch x86_pentium4 +AutoReqProv: No +%endif + +%description +The HPI utilities package provides system management utilities that +conform to the SA Forum's Hardware Platform Interface specification, and +as such are hardware-independent across platforms that have an HPI +library implementation. The HPI library on Intel platforms requires +an IPMI driver. An IPMI driver can be provided by either the Intel +IPMI driver (/dev/imb) or the OpenIPMI driver (/dev/ipmi0) in Linux +kernel versions 2.4.20 and greater. + +This package includes the HPI binary libraries and the following +HPI utilities. + hpisensor + hpisel + hpireset + hpiwdt + hpifru + hpialarmpanel + +%prep +#%setup -q + +#%build +#sh configure +#make + +#%install +#RPM_BUILD_ROOT=`pwd` +#make DESTDIR=${RPM_BUILD_ROOT} install +#( cd ${RPM_BUILD_ROOT}/usr/man/man8; gzip -f *.8 ) + +%files +%defattr(0755,root,root) +/usr/bin/hpifru +/usr/bin/hpisensor +/usr/bin/hpialarmpanel +/usr/bin/hpisel +/usr/bin/hpiwdt +/usr/bin/hpireset +/usr/bin/SpiLibd +/usr/lib/libSaHpi.so +/usr/lib/libSpiDaemonCore.so +/usr/lib/libSpiModGeneric.so +/usr/lib/libSpiModIpmi.so +/usr/lib/libSpiModIpmi.so-open +/usr/lib/libSpiIpmiImb.so +/usr/lib/libSpiIpmiOpenIpmi.so +/usr/lib/libSpiTsdMaplx.so +/etc/hpi/hpiinit.sh +/usr/share/hpiutil/env.hpi +%defattr(0664,root,root) +/usr/share/hpiutil/README +/usr/share/hpiutil/COPYING +/etc/hpi/spi-daemon.conf +/etc/hpi/spi-lib.conf +# %defattr(-,root,root) +# %doc README TODO COPYING ChangeLog + +%pre +# before install +sdir=/usr/share/hpiutil +edir=/etc/hpi +echo "Installing HPI Utilities ..." +mkdir -p $sdir +mkdir -p $edir + +# Check for an IPMI driver +rpm -qa |grep ipmidrvr >/dev/null +if [ $? -ne 0 ] +then + # Intel ipmidrvr package is not installed, but other IPMI drivers + # could also be used, so test for device files. + dev1=/dev/imb + dev2=/dev/ipmi0 + dev3=/dev/ipmi/0 + dev4=/dev/ipmikcs + if [ ! -c $dev1 ] + then + if [ ! -c $dev2 ] + then + if [ ! -c $dev3 ] + then + echo "WARNING: No IPMI devices found ($dev1, $dev2 or $dev3)." + echo "The HPI utilities depend on an IPMI driver. " + fi + fi + fi +fi + +%post +# after install +sdir=/usr/share/hpiutil +edir=/etc/hpi + +echo "hpiutil install started `date`" +# Assumes that the kernel modules are already in place. + +# The spi-daemon.conf file should have 'localhost' as the +# server name. User can modify this if remote. + +# set up the init.d jobs +loadhpi=/etc/hpi/hpiinit.sh +if [ -d /etc/rc.d/init.d ] +then + # RedHat init.d structure + cd /etc/rc.d/init.d + cp $loadhpi ./hpi + echo "To autostart hpi, enter: chkconfig --add hpi" +# chkconfig --add hpi +# Or manually create links +# cd ../rc3.d +# ln -s ../init.d/hpi S81hpi 2>/dev/null +# ln -s ../init.d/hpi K35hpi 2>/dev/null +# cd ../rc5.d +# ln -s ../init.d/hpi S81hpi 2>/dev/null +# ln -s ../init.d/hpi K35hpi 2>/dev/null +# cd ../rc6.d +# ln -s ../init.d/hpi K35hpi 2>/dev/null +# cd ../rc0.d +# ln -s ../init.d/hpi K35hpi 2>/dev/null +else + # SuSE init.d structure + cd /etc/init.d + cp $loadhpi ./hpi + echo "To autostart hpi, enter: /usr/lib/lsb/install_initd /etc/init.d/hpi " +# /usr/lib/lsb/install_initd /etc/init.d/hpi +# Or manually create links +# cd rc3.d +# ln -s ../hpi S81hpi 2>/dev/null +# ln -s ../hpi K35hpi 2>/dev/null +# cd ../rc5.d +# ln -s ../hpi S81hpi 2>/dev/null +# ln -s ../hpi K35hpi 2>/dev/null +# cd ../rc6.d +# ln -s ../hpi K35hpi 2>/dev/null +# cd ../rc0.d +# ln -s ../hpi K35hpi 2>/dev/null +fi + +echo "done `date`" + +%preun +# before uninstall +echo "Uninstalling HPI Utilities feature ..." +/etc/hpi/hpiinit.sh stop 2>/dev/null + +%postun +# after uninstall, clean up anything left over +sdir=/usr/share/hpiutil +edir=/etc/hpi +tmped=/tmp/edmk.tmp + +if [ -d /etc/rc.d/init.d ] +then + # RedHat init.d structure +# chkconfig --del hpi + cd /etc/rc.d/init.d + rm -f hpi ../rc?.d/S81hpi ../rc?.d/K35hpi +else + # SuSE init.d structure +# /usr/lib/lsb/remove_initd /etc/init.d/hpi + cd /etc/init.d + rm -f hpi rc?.d/S81hpi rc?.d/K35hpi +fi +rm -rf $sdir 2>/dev/null + +%changelog +* Tue Apr 06 2004 Andrew Cress <arcress at users.sourceforge.net> + changed to not turn on hpi autostart scripts at rpm install +* Fri Mar 26 2004 Andrew Cress <arcress at users.sourceforge.net> +- changed to include proper kill scripts and chkconfig info +* Thu Feb 12 2004 Andrew Cress <arcress at users.sourceforge.net> +- changed naming from /etc/init.d/hpiinit.sh to /etc/init.d/hpi +* Fri Jun 27 2003 Andrew Cress <arcress at users.sourceforge.net> +- updated to check for ipmidrvr rpm, since no /dev/imb until reboot. +* Fri Jun 20 2003 Andrew Cress <arcress at users.sourceforge.net> +- updated for README & released file locations +* Thu Jun 12 2003 Andrew Cress <arcress at users.sourceforge.net> +- updated for beta2 file naming +* Tue May 05 2003 Andrew Cress <arcress at users.sourceforge.net> +- created diff --git a/hpiutil/hpiwdt.c b/hpiutil/hpiwdt.c new file mode 100644 index 0000000..efa732d --- /dev/null +++ b/hpiutil/hpiwdt.c @@ -0,0 +1,272 @@ +/* + * hpiwdt.c + * + * Copyright (c) 2003-2004 Intel Corporation. + * + * This tool reads and enables the watchdog timer via HPI. + * Note that there are other methods for doing this, and the + * standard interface is for the driver to expose a /dev/watchdog + * device interface. + * WARNING: If you enable/reset the watchdog, make sure you have + * something set up to keep resetting the timer at regular intervals, + * or it will reset your system. + * + * Author: Andy Cress arcress at users.sourceforge.net + * + * 05/02/03 Andy Cress - created + * 06/06/03 Andy Cress - added more logic with beta2 SPI release + * 06/11/03 Andy Cress - successful test of options to set WDT values. + * 03/15/04 Andy Cress v1.0 - added strings for use & actions in show_wdt + * 12/02/04 Andy Cress v1.1 - fixed RPT loop, added more decoding, + * added flags for HPI_A/HPI_B. + */ +/*M* +Copyright (c) 2004, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + a.. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + b.. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + c.. Neither the name of Intel Corporation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *M*/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <getopt.h> +#include "SaHpi.h" + +#define uchar unsigned char +#ifdef HPI_A +char *progver = "1.1 HPI-A"; +#else +char *progver = "1.1 HPI-B"; +#endif +char fdebug = 0; +#define NUSE 6 +char *usedesc[NUSE] = {"reserved", "BIOS FRB2", "BIOS/POST", + "OS Load", "SMS/OS", "OEM" }; +#define NACT 5 +char *actions[NACT] = {"No action", "Hard Reset", "Power down", + "Power cycle", "Reserved" }; + +static void +show_wdt(SaHpiWatchdogNumT wdnum, SaHpiWatchdogT *wdt) +{ + int icount, pcount; + char ustr[12]; + char astr[16]; + char estr[30]; + char *pstr; + icount = wdt->InitialCount /1000; /*1000 msec = 1 sec*/ + pcount = wdt->PresentCount /1000; + + if (wdt->TimerUse > NUSE) sprintf(ustr,"%d", wdt->TimerUse ); + else strcpy(ustr, usedesc[wdt->TimerUse]); + if (wdt->TimerAction > NACT) sprintf(astr,"%d", wdt->TimerAction ); + else strcpy(astr, actions[wdt->TimerAction]); + printf("Watchdog: Num=%d, Log=%d, Running=%d, TimerUse=%s, TimerAction=%s\n", + wdnum,wdt->Log,wdt->Running,ustr, astr); + if (wdt->TimerUseExpFlags == 0) strcpy(estr,"none"); + else { + estr[0] = 0; + if (wdt->TimerUseExpFlags & 0x01) strcat(estr,"FRB2 "); + if (wdt->TimerUseExpFlags & 0x02) strcat(estr,"POST "); + if (wdt->TimerUseExpFlags & 0x04) strcat(estr,"OS_Load "); + if (wdt->TimerUseExpFlags & 0x08) strcat(estr,"SMS_OS "); + if (wdt->TimerUseExpFlags & 0x10) strcat(estr,"OEM "); + } + printf(" ExpiredUse=%s, Timeout=%d sec, Counter=%d sec\n", + estr, icount,pcount); + switch(wdt->PretimerInterrupt) { + case 1: pstr = "SMI"; break; + case 2: pstr = "NMI"; break; + case 3: pstr = "MsgInt"; break; + default: pstr = "none"; break; + } + printf(" PreTimerInterrupt=%s, PreTimeoutInterval=%d msec\n", + pstr,wdt->PreTimeoutInterval); + return; +} /*end show_wdt*/ + +int +main(int argc, char **argv) +{ + int c; + SaErrorT rv; + SaHpiSessionIdT sessionid; +#ifdef HPI_A + SaHpiVersionT hpiVer; + SaHpiRptInfoT rptinfo; +#else + SaHpiDomainInfoT domainInfo; +#endif + SaHpiRptEntryT rptentry; + SaHpiEntryIdT rptentryid; + SaHpiEntryIdT nextrptentryid; + SaHpiResourceIdT resourceid; + SaHpiWatchdogNumT wdnum; + SaHpiWatchdogT wdt; + int t = 0; + char freset = 0; + char fenable = 0; + char fdisable = 0; + + printf("%s ver %s\n", argv[0],progver); + while ( (c = getopt( argc, argv,"dert:x?")) != EOF ) + switch(c) { + case 'r': /* reset wdt */ + freset = 1; + break; + case 'e': /* disable wdt */ + fenable = 1; + break; + case 'd': /* disable wdt */ + fdisable = 1; + break; + case 't': /* timeout (enable implied) */ + t = atoi(optarg); + fenable = 1; + break; + case 'x': fdebug = 1; break; /* debug messages */ + default: + printf("Usage: %s [-derx -t sec]\n", argv[0]); + printf(" where -e enables the watchdog timer\n"); + printf(" -d disables the watchdog timer\n"); + printf(" -r resets the watchdog timer\n"); + printf(" -t N sets timeout to N seconds\n"); + printf(" -x show eXtra debug messages\n"); + exit(1); + } + if (t == 0) t = 120; + +#ifdef HPI_A + rv = saHpiInitialize(&hpiVer); + if (rv != SA_OK) { + printf("saHpiInitialize error %d\n",rv); + exit(-1); + } + rv = saHpiSessionOpen(SAHPI_DEFAULT_DOMAIN_ID,&sessionid,NULL); + if (rv != SA_OK) { + if (rv == SA_ERR_HPI_ERROR) + printf("saHpiSessionOpen: error %d, library not running\n",rv); + else printf("saHpiSessionOpen error %d\n",rv); + exit(-1); + } + rv = saHpiResourcesDiscover(sessionid); + if (fdebug) printf("saHpiResourcesDiscover rv = %d\n",rv); + rv = saHpiRptInfoGet(sessionid,&rptinfo); + if (fdebug) printf("saHpiRptInfoGet rv = %d\n",rv); + printf("RptInfo: UpdateCount = %x, UpdateTime = %lx\n", + rptinfo.UpdateCount, (unsigned long)rptinfo.UpdateTimestamp); +#else + rv = saHpiSessionOpen(SAHPI_UNSPECIFIED_DOMAIN_ID, &sessionid, NULL); + if (rv != SA_OK) { + printf("saHpiSessionOpen error %d\n",rv); + exit(-1); + } + rv = saHpiDiscover(sessionid); + if (fdebug) printf("saHpiDiscover rv = %d\n",rv); + rv = saHpiDomainInfoGet(sessionid, &domainInfo); + if (fdebug) printf("saHpiDomainInfoGet rv = %d\n",rv); + printf("DomainInfo: UpdateCount = %x, UpdateTime = %lx\n", + domainInfo.RptUpdateCount, (unsigned long)domainInfo.RptUpdateTimestamp); +#endif + + /* walk the RPT list */ + rptentryid = SAHPI_FIRST_ENTRY; + while ((rv == SA_OK) && (rptentryid != SAHPI_LAST_ENTRY)) + { + rv = saHpiRptEntryGet(sessionid,rptentryid,&nextrptentryid,&rptentry); + if (rv != SA_OK) printf("RptEntryGet: rv = %d\n",rv); + if (rv == SA_OK) { + /* handle WDT for this RPT entry */ + resourceid = rptentry.ResourceId; +#ifdef HPI_A + rptentry.ResourceTag.Data[rptentry.ResourceTag.DataLength] = 0; +#endif + if (fdebug) + printf("rptentry[%d] resourceid=%d capab=%x tag: %s\n", + rptentryid, resourceid, rptentry.ResourceCapabilities, + rptentry.ResourceTag.Data); + + if (rptentry.ResourceCapabilities & SAHPI_CAPABILITY_WATCHDOG) { + printf("%s has watchdog capability\n",rptentry.ResourceTag.Data); + + wdnum = SAHPI_DEFAULT_WATCHDOG_NUM; + rv = saHpiWatchdogTimerGet(sessionid,resourceid,wdnum,&wdt); + if (fdebug) printf("saHpiWatchdogTimerGet rv = %d\n",rv); + if (rv != 0) { + printf("saHpiWatchdogTimerGet error = %d\n",rv); + rv = 0; + rptentryid = nextrptentryid; + continue; + } + show_wdt(wdnum,&wdt); + + if (fdisable) { + printf("Disabling watchdog timer ...\n"); + /* clear FRB2, timeout back to 120 sec */ + /* TODO: add setting wdt values here */ + wdt.TimerUse = SAHPI_WTU_NONE; /* 1=FRB2 2=POST 3=OSLoad 4=SMS_OS 5=OEM */ + wdt.TimerAction = SAHPI_WAE_NO_ACTION; /* 0=none 1=reset 2=powerdown 3=powercycle */ + wdt.PretimerInterrupt = SAHPI_WPI_NONE; /* 0=none 1=SMI 2=NMI 3=message */ + wdt.PreTimeoutInterval = 60000; /*msec*/ + wdt.InitialCount = 120000; /*msec*/ + wdt.PresentCount = 120000; /*msec*/ + + rv = saHpiWatchdogTimerSet(sessionid,resourceid,wdnum,&wdt); + if (fdebug) printf("saHpiWatchdogTimerSet rv = %d\n",rv); + if (rv == 0) show_wdt(wdnum,&wdt); + } else if (fenable) { + printf("Enabling watchdog timer ...\n"); + /* hard reset action, no pretimeout, clear SMS/OS when done */ + /* use t for timeout */ + wdt.TimerUse = SAHPI_WTU_SMS_OS; /* 1=FRB2 2=POST 3=OSLoad 4=SMS_OS 5=OEM */ + wdt.TimerAction = SAHPI_WAE_RESET; /* 0=none 1=reset 2=powerdown 3=powercycle */ + wdt.PretimerInterrupt = SAHPI_WPI_NMI; /* 0=none 1=SMI 2=NMI 3=message */ + wdt.PreTimeoutInterval = (t / 2) * 1000; /*msec*/ + wdt.InitialCount = t * 1000; /*msec*/ + wdt.PresentCount = t * 1000; /*msec*/ + + rv = saHpiWatchdogTimerSet(sessionid,resourceid,wdnum,&wdt); + if (fdebug) printf("saHpiWatchdogTimerSet rv = %d\n",rv); + if (rv == 0) show_wdt(wdnum,&wdt); + } + if (freset && !fdisable) { + printf("Resetting watchdog timer ...\n"); + rv = saHpiWatchdogTimerReset(sessionid,resourceid,wdnum); + if (fdebug) printf("saHpiWatchdogTimerReset rv = %d\n",rv); + } + } /*watchdog capability*/ + rptentryid = nextrptentryid; /* get next RPT (usu only one anyway) */ + } /*endif RPT ok*/ + } /*end while loop*/ + + rv = saHpiSessionClose(sessionid); + +#ifdef HPI_A + rv = saHpiFinalize(); +#endif + exit(0); +} + +/* end hpiwdt.c */ diff --git a/hpiutil/mkrpm b/hpiutil/mkrpm new file mode 100755 index 0000000..e64f995 --- /dev/null +++ b/hpiutil/mkrpm @@ -0,0 +1,135 @@ +# mkrpm +# Make the rpms for hpiutil +# +# Reliab11 = RedHat 8.0 (rh80) +# Reliab12 = RedHat 9.0 (rh90) +# Reliab13 = MV CGE 2.1 (mv21) +# Reliab14 = MV CGE 3.0 (mv30p3) +# Reliab01 = MV CGE 3.1 (mv31p3) +# Reliab03 = RedHat AS 2.1 (as21) +# chapin4 = MV CGE 3.1 (mv31p4) +# grumpy = RedHat EL 3 (el3) +# chesnee1 = RedHat EL 3 (el3) +# telcoraid= SuSE UL 1.0 (ul10) +# +ROOT=`pwd` +# usually /mnt/pub/panich/hpi/hpiutil +RTARG=rpm +RSPEC=hpiutil.spec +RTO=$ROOT/$RTARG/usr/bin +STO=$ROOT/$RTARG/usr/share/hpiutil +ETO=$ROOT/$RTARG/etc/hpi +OS=el3 +VER=`grep "^%define Version" $RSPEC |cut -f3 -d' '` +tmpe=/tmp/ed.tmp +rpmcmd=rpmbuild + +if [ $# -ge 1 ] +then + OS=$1 +fi +case $OS in +"mv21") + archv=x86_pentium3 + ;; +"mv30") + archv=x86_pentium3 + ;; +"mv30wv") + archv=x86_pentium4 + ;; +"mv31p4") + archv=x86_pentium4 + ;; +"mv31p3") + archv=x86_pentium3 + ;; +"ul10") + rpmcmd=rpm + archv=i386 + ;; +*) + archv=i386 + ;; +esac + +# Modify the env for EL3 & others +if [ "$OS" = "el3" ] +then + cmt= +else + cmt="#" +fi +cat - <<%%% >$tmpe +1 +/LD_ASSUME_KERNEL +c +$cmt export LD_ASSUME_KERNEL=2.4.1 +. +w +q +%%% +ed hpiinit.sh <$tmpe +ed env.hpi <$tmpe +ed obj/env.hpi <$tmpe + +echo "Copying lib files to rpm, OS=$OS ..." +mkdir -p $RTO +mkdir -p $ROOT/$RTARG/usr/lib +cp -uf $ROOT/obj/${OS}/SpiLibd $RTO +cp -uf $ROOT/obj/${OS}/*.so $ROOT/$RTARG/usr/lib +cp -uf $ROOT/obj/${OS}/*.so-open $ROOT/$RTARG/usr/lib + +# Make the matching hpiutil binaries +cd $ROOT +make clean +make +echo "Copying files for rpm, OS=$OS ..." +mkdir -p $ETO +mkdir -p $ROOT/$RTARG/etc/init.d +mkdir -p $STO +cp -uf $ROOT/hpialarmpanel $RTO +cp -uf $ROOT/hpisensor $RTO +cp -uf $ROOT/hpisel $RTO +cp -uf $ROOT/hpifru $RTO +cp -uf $ROOT/hpiwdt $RTO +cp -uf $ROOT/hpireset $RTO +cp -uf $ROOT/hpiinit.sh $ETO +cp -uf $ROOT/README $STO +cp -uf $ROOT/COPYING $STO +cp -uf $ROOT/obj/env.hpi $STO +cp -uf $ROOT/obj/spi-daemon.conf $ETO +cp -uf $ROOT/obj/spi-lib.conf $ETO + + +# (new:) +# libSaHpi.so libSpiIpmiImb.so libSpiModIpmi.so SpiLibd +# libSpiDaemonCore.so libSpiModGeneric.so libSpiTsdMaplx.so +# (old:) +# libSaHpi.so libSpiDaemonCore.so libSpiGenericMaplx.so libSpiModGeneric.so +# libSpiModIpmi.so libSpiModMullins.so libSpiMullinsMaplx.so +# libSpiIpmiImb.so libSpiIpmiOpenIpmi.so + +echo "Making hpiutil rpm ..." +#rpmbuild -bb $RSPEC +#HOME=`pwd` +#export HOME +rm -f $ROOT/$RTARG/$archv/hpiutil*.rpm +echo "%_rpmdir ${ROOT}/${RTARG}" > $HOME/.rpmmacros +$rpmcmd -bb --buildroot ${ROOT}/${RTARG} $RSPEC +rm -f $HOME/.rpmmacros + +# save the rpm +rfil=$ROOT/$RTARG/$archv/hpiutil-$VER-?.$archv.rpm +echo $OS |grep mv31p4 >/dev/null 2>&1 +if [ $? -eq 0 ] +then + rfil=/usr/src/montavista/RPMS/$archv/hpiutil-$VER-?.$archv.rpm +fi +cp $rfil $ROOT/obj/hpiutil-$VER-$OS.$archv.rpm +if [ $? -eq 0 ] +then + # remove the directory + rm -rf $ROOT/$RTARG +fi + diff --git a/hpiutil/upd b/hpiutil/upd new file mode 100755 index 0000000..0967595 --- /dev/null +++ b/hpiutil/upd @@ -0,0 +1,24 @@ +# upd +# update hpi library objects to public share +# +# todir=/mnt/pub/panich/hpi/hpiutil +todir=/mnt/pub/cress/hpi/hpiutil +hdir=/root/hpi +cdir=`pwd` + +if [ $# -ge 1 ] +then + OS=$1 +else + OS=el3 +fi +mkdir -p $todir/obj/$OS +# cd $SAHPI_HOME +cd $hdir +cp bin/SpiLibd $todir/obj/$OS +cp lib/*.so* $todir/obj/$OS +if [ -f lib/Server ] +then + cp lib/Server $todir/obj/$OS +fi +cd $cdir |