summaryrefslogtreecommitdiff
path: root/hpiutil
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff-webhosting.net>2014-07-06 18:04:32 +0200
committerJörg Frings-Fürst <debian@jff-webhosting.net>2014-07-06 18:04:32 +0200
commita7f89980e5b3f4b9a74c70dbc5ffe8aabd28be28 (patch)
tree41c4deec1fdfbafd7821b4ca7a9772ac0abd92f5 /hpiutil
Imported Upstream version 2.9.3upstream/2.9.3
Diffstat (limited to 'hpiutil')
-rw-r--r--hpiutil/COPYING28
-rw-r--r--hpiutil/ChangeLog106
-rw-r--r--hpiutil/INSTALL27
-rw-r--r--hpiutil/Makefile77
-rw-r--r--hpiutil/README249
-rw-r--r--hpiutil/SaHpi.h4509
-rw-r--r--hpiutil/SaHpi.h-A4509
-rw-r--r--hpiutil/SaHpi.h-B6785
-rw-r--r--hpiutil/TODO65
-rwxr-xr-xhpiutil/env.hpi11
-rwxr-xr-xhpiutil/env.openhpi2
-rw-r--r--hpiutil/hpialarmpanel.c373
-rw-r--r--hpiutil/hpievent.c621
-rw-r--r--hpiutil/hpifru.c19
-rw-r--r--hpiutil/hpifrua.c550
-rw-r--r--hpiutil/hpifrub.c619
-rwxr-xr-xhpiutil/hpiinit.sh69
-rw-r--r--hpiutil/hpireset.c225
-rw-r--r--hpiutil/hpisel.c934
-rw-r--r--hpiutil/hpisensor.c467
-rw-r--r--hpiutil/hpiutil.spec199
-rw-r--r--hpiutil/hpiwdt.c272
-rwxr-xr-xhpiutil/mkrpm135
-rwxr-xr-xhpiutil/upd24
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